gerris-snapshot-131206/0000755000175100017510000000000012250371675011753 500000000000000gerris-snapshot-131206/COPYING0000644000175100017510000010451312250371171012721 00000000000000 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 . gerris-snapshot-131206/README0000644000175100017510000000123112250371171012537 00000000000000General Information =================== Gerris also known as the GNU Flow Solver (GFS) aims to be a generic tool for the numerical simulation of fluid flows. The official web site is: http://gfs.sourceforge.net Copying ======= Gerris is distributed under the terms of the General Public License which is compliant with the guidelines of the Open Source and Free Software Fundations. See the file COPYING for details. Installation ============ Unix users (including Windows users under Cygwin): ./configure make make install See the file 'INSTALL' for generic configure instructions and the tutorial in doc/tutorial for an introduction on how Gerris works. gerris-snapshot-131206/config.guess0000755000175100017510000012743212250371206014212 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file 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 2 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 . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gerris-snapshot-131206/config.h.in0000644000175100017510000000673012250371205013711 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ #undef F77_DUMMY_MAIN /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ #undef F77_FUNC /* As F77_FUNC, but for C identifiers containing underscores. */ #undef F77_FUNC_ /* Define if F77 and FC dummy `main' functions are identical. */ #undef FC_DUMMY_MAIN_EQ_F77 /* Binary age */ #undef GFS_BINARY_AGE /* Compilation flags */ #undef GFS_COMPILATION_FLAGS /* Interface age */ #undef GFS_INTERFACE_AGE /* Major version */ #undef GFS_MAJOR_VERSION /* Micro version */ #undef GFS_MICRO_VERSION /* Minor version */ #undef GFS_MINOR_VERSION /* Version */ #undef GFS_VERSION /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_FENV_H /* Define to 1 if you have the `funopen' function. */ #undef HAVE_FUNOPEN /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getopt_long' function. */ #undef HAVE_GETOPT_LONG /* Define to 1 if you have the `g_mkdtemp' function. */ #undef HAVE_G_MKDTEMP /* Define to 1 if you have the header file. */ #undef HAVE_HYPRE_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_LIS_H /* Define to 1 if m4 is available. */ #undef HAVE_M4 /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have MPI */ #undef HAVE_MPI /* Define to 1 if you have the header file. */ #undef HAVE_NETCDF_H /* Define to 1 if you have the `open_memstream' function. */ #undef HAVE_OPEN_MEMSTREAM /* Define to 1 if GModule are supported and if you have pkg-config. */ #undef HAVE_PKG_CONFIG /* Define to 1 if you have the header file. */ #undef HAVE_PROJ_API_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Options for m4 */ #undef M4_OPTIONS /* Dynamic module suffix */ #undef MODULES_SUFFIX /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* WaveWatch III version number */ #undef WW3_VERSION gerris-snapshot-131206/ChangeLog0000644000175100017510000107142012250371670013445 00000000000000Fri Dec 6 16:51:20 CET 2013 Release tagged 2013-12-06 Fri Dec 6 14:01:25 CET 2013 Stephane Popinet * Fixed docs for sinking velocity Fri Dec 6 10:53:10 CET 2013 Stephane Popinet * Fix for bubble cap example Wed Nov 20 16:21:17 CET 2013 Jose M. Lopez-Herrera Sanchez * New solver GfsAdvectionAxi Axisymmetric version of the solver GfsAdvection Fri Nov 29 11:49:51 CET 2013 Stephane Popinet * Cosmetics Wed Nov 27 17:47:05 CET 2013 Jose M. Lopez-Herrera Sanchez * sink velocity can be applied to VariableVOFConcentration Wed Nov 27 12:19:11 CET 2013 Jose M. Lopez-Herrera Sanchez * New test: unipolar injection in cylindrical Tue Nov 26 11:57:29 CET 2013 Jose M. Lopez-Herrera Sanchez * sink velocities can be functions Fri Nov 29 11:35:58 CET 2013 Stephane Popinet * Fix for gfs-highlight It somehow didn't worh anymore with recent versions of source-highlight. Sat Aug 3 08:09:31 CEST 2013 Dustin Langewisch * Rising bubble example Fri Aug 2 05:53:54 CEST 2013 Release tagged 2013-08-02 Fri Aug 2 03:50:00 CEST 2013 Stephane Popinet * Fix for 32-bits padding in kdt Fri Aug 2 03:16:25 CEST 2013 Stephane Popinet * Removed obsolete --partial darcs option Fri Aug 2 02:49:08 CEST 2013 Release tagged 2013-08-01 Fri Aug 2 00:16:38 CEST 2013 Stephane Popinet * Updated Poisson tests references for new hypre version Thu Aug 1 02:01:21 CEST 2013 Stephane Popinet * Fluxes are reset properly The previous implementation could cause FPEs when trying to reuse non-initialised invalid values. Fri Jul 27 01:46:23 CEST 2012 Stephane Popinet * New tool 'gfscombine' Wed Jul 24 04:34:18 CEST 2013 Stephane Popinet * Fixed qsort() function call in kdt Wed Jul 24 04:32:01 CEST 2013 Stephane Popinet * Cosmetics Wed Feb 20 18:49:15 CET 2013 Jose M. Lopez-Herrera Sanchez * For VariableVOFConcentration face diffusion is set to zero Fri Jan 18 13:54:27 CET 2013 Jose M. Lopez-Herrera Sanchez * New object gfs_vof_face_fraction Fri Jan 18 13:25:55 CET 2013 Jose M. Lopez-Herrera Sanchez * Corrections to gfs_vof_face_value Fri Jan 11 04:29:54 CET 2013 Stephane Popinet * Updated field.awk for stratified lake case Fri May 31 08:57:17 CEST 2013 Release tagged 2013-05-28 Tue May 28 13:10:34 CEST 2013 Jose M. Lopez-Herrera Sanchez * electric BC fixed This patch solve defective BC application in parallel runs Sat Jan 12 10:57:27 CET 2013 Release tagged 2013-01-12 Sat Jan 12 08:55:45 CET 2013 Stephane Popinet * New test case geostrophic adjustment with Saint Venant Sat Jan 12 08:41:14 CET 2013 Stephane Popinet * Cosmetics for Rossby test case Sat Jan 12 08:38:09 CET 2013 Stephane Popinet * Fixed scaling of 'geo' test case Thu Jan 10 00:33:58 CET 2013 Stephane Popinet * Checks that SourcePipe does not use negative water depths Thu Jan 10 00:33:34 CET 2013 Stephane Popinet * Fixes for convergence checks for Boyd's culvert model Wed Jan 9 07:55:10 CET 2013 Release tagged 2012-12-06 Thu Dec 6 05:38:21 CET 2012 Stephane Popinet * Do not use pipes within gnuplot for test cases Gnuplot seems to have problems when several instances are running in parallel. Wed Jan 9 04:31:00 CET 2013 Stephane Popinet * Fix for incorrect pending functions Wed Jan 9 03:56:08 CET 2013 Stephane Popinet * Added missing BCs for OutputScalar when using functions Wed Jan 9 01:50:32 CET 2013 Stephane Popinet * Cosmetics for VOFConcentration Thu Nov 15 12:52:56 CET 2012 jose.lopez.herrera.s@gmail.com * new test case to check diffusion applied to VariableVOFConcentration Thu Nov 15 12:49:25 CET 2012 jose.lopez.herrera.s@gmail.com * cylinder test updated Thu Nov 15 11:27:29 CET 2012 jose.lopez.herrera.s@gmail.com * concentration test is adapted to the new definition of VariableVOFConcentration Thu Nov 15 11:19:18 CET 2012 jose.lopez.herrera.s@gmail.com * VariableVOFConcentration is defined now as per cell volume Sat Dec 1 06:13:57 CET 2012 Stephane Popinet * Added GNUlib open_memstream() implementation for BSD systems Fri Nov 30 07:54:38 CET 2012 Release tagged 2012-11-30 Fri Nov 30 05:19:43 CET 2012 Stephane Popinet * Set "feature test macros" correctly for open_memstream() Fri Nov 30 01:17:34 CET 2012 Release tagged 2012-11-29 Thu Nov 29 22:56:26 CET 2012 Stephane Popinet * Use only glib functions for temporary file creation System-supplied versions are very flaky on some systems (e.g. AIX). Thu Nov 29 10:13:22 CET 2012 Stephane Popinet * Replaced tmpfile() with open_memstream() This avoids using (often flaky) filesystems so should be more robust and more efficient. Thu Nov 29 03:12:12 CET 2012 Stephane Popinet * Consistent temporary file creation Wed Nov 28 22:23:16 CET 2012 Stephane Popinet * Renamed configure.in to configure.ac Wed Nov 28 21:49:47 CET 2012 Stephane Popinet * Fix for command-line events and GfsFunctions Tue Nov 27 05:59:49 CET 2012 Release tagged 2012-11-27 Tue Nov 27 03:27:12 CET 2012 Stephane Popinet * Pre-compiled GfsFunctions are always cached This is necessary to avoid re-compilation during load-balancing. Mon Nov 26 22:52:23 CET 2012 Stephane Popinet * Fixes for GfsGlobals and GfsFunctionConstant Mon Nov 26 00:12:30 CET 2012 Stephane Popinet * Fix for gfs_vorticity() with GfsAxi The generalised metric calculation for vorticity somehow does not work for the axisymmetric metric. Sat Nov 24 06:17:33 CET 2012 Stephane Popinet * GfsFunctions are compiled as a "batch" This means that usually only one compilation/linking is required for the entire simulation rather than one compile/link for each GfsFunction. On systems with slow fork/system() calls this can make a large difference in initialisation time. Wed Nov 21 06:55:37 CET 2012 Stephane Popinet * Added profiling info for compilation of GfsFunctions Tue Nov 20 21:51:23 CET 2012 Stephane Popinet * Variable density for GfsRiver uses alpha Fri Nov 16 04:26:29 CET 2012 Stephane Popinet * New stratified lake test case Thu Nov 15 00:07:11 CET 2012 Stephane Popinet * Preliminary implementation of variable density for multilayer Saint-Venant Wed Nov 14 22:26:37 CET 2012 Stephane Popinet * Cosmetics. Wed Nov 14 22:25:11 CET 2012 Stephane Popinet * Fix for initialisation of layered variables Wed Nov 14 22:23:55 CET 2012 Stephane Popinet * Bug fix for FFT module Sun Oct 21 21:49:04 CEST 2012 Stephane Popinet * Fix for uninitialised kmax in gfs_height_curvature() Mon Sep 17 12:17:47 CEST 2012 Daniel Fuster * GfsInit allows for a physical end time Wed Nov 14 01:18:54 CET 2012 Stephane Popinet * Fix for GfsFunction and directories with spaces Wed Nov 14 01:05:28 CET 2012 Stephane Popinet * Possible fix for gfs_domain_tag_droplets() in parallel Mon Nov 12 07:53:38 CET 2012 Release tagged 2012-11-12 Mon Nov 12 05:40:35 CET 2012 Stephane Popinet * Updated cloneubuntu to 12.10 Mon Nov 12 05:40:11 CET 2012 Stephane Popinet * Debian packages depend on libproj-dev rather than proj (obsolete) Sun Oct 21 18:51:15 CEST 2012 Release tagged 2012-10-21 Sun Oct 21 16:06:29 CEST 2012 Stephane Popinet * Updated reference for rotate test case Sat Oct 20 19:09:37 CEST 2012 Stephane Popinet * Additional test case for TracerVOFHeight on 4 procs Sat Oct 20 18:13:21 CEST 2012 Stephane Popinet * Fix for TracerVOFHeight with periodic/parallel BCs Mon Oct 8 14:11:35 CEST 2012 Stephane Popinet * New vector mapping functions mapvx(), mapvy() Wed Oct 3 14:06:28 CEST 2012 Stephane Popinet * Fixed mapping of cubed sphere coordinates Tue Oct 2 17:05:09 CEST 2012 Stephane Popinet * Second-order vertical advection for layered module Thu Sep 6 13:54:00 CEST 2012 Release tagged 2012-09-06 Thu Sep 6 11:48:26 CEST 2012 Stephane Popinet * Minor test suite fixes Wed Sep 5 16:12:29 CEST 2012 Stephane Popinet * Fix for symmetry conditions of tensors Sun Aug 12 07:16:50 CEST 2012 Stephane Popinet * Fixes for rotated boundaries in 2nd-order GfsRiver Fri Aug 17 00:51:25 CEST 2012 George Gerber * Fixes for convergence of outlet control iteration Fri Aug 17 00:51:10 CEST 2012 George Gerber * New utility discharge_table for culvert module Thu Aug 16 23:41:03 CEST 2012 Stephane Popinet * Added missing outputs for GfsRiver Thu Aug 16 23:40:25 CEST 2012 Stephane Popinet * Fix for vector GfsSources Tue Aug 14 01:48:35 CEST 2012 Stephane Popinet * New test case 'nonlinear geostrophic adjustment' Tue Aug 14 01:29:16 CEST 2012 Stephane Popinet * Fix for layered shock test case Sun Aug 12 23:25:04 CEST 2012 Stephane Popinet * Option for non-linear free-surface in GfsOcean Wed Aug 1 02:48:11 CEST 2012 Stephane Popinet * Cosmetics for groundwater test case Tue Jul 31 17:14:12 CEST 2012 gdmcbain@freeshell.org * groundwater test with spatial step in permeability Tue Jul 31 16:16:23 CEST 2012 gdmcbain@freeshell.org * test solving groundwater flow by projection Fri Jun 15 02:48:23 CEST 2012 Stephane Popinet * New free surface Rossby-Haurwitz test case Thu Jun 14 07:26:05 CEST 2012 Stephane Popinet * Fixes for metric in GfsOcean Sun Aug 12 09:39:57 CEST 2012 Stephane Popinet * New test case, shock wave on cubed sphere Sun Aug 12 07:22:28 CEST 2012 Stephane Popinet * New Rossby-Haurwitz waves Saint-Venant test case Tue Jul 31 09:32:48 CEST 2012 Release tagged 2012-07-31 Tue Jul 31 07:21:32 CEST 2012 Stephane Popinet * Fix for layered shock test case Tue Jul 31 04:45:18 CEST 2012 Stephane Popinet * Mass fluxes are not necessary for a single layer Wed Jul 25 05:00:47 CEST 2012 Stephane Popinet * Second-order vertical advection for GfsRiver Wed Jul 25 00:58:01 CEST 2012 Stephane Popinet * New layered transcritical flow test case Mon Jul 23 01:52:33 CEST 2012 Stephane Popinet * Bottom friction for multilayer Saint-Venant Fri Jul 20 07:11:54 CEST 2012 Stephane Popinet * Boundary conditions for multilayer Saint-Venant Thu Jul 19 07:33:58 CEST 2012 Stephane Popinet * New test case for transcritical flow over a bump Thu Jul 19 05:44:45 CEST 2012 Stephane Popinet * New lake test case for multilayer Saint-Venant Thu Jul 19 03:13:36 CEST 2012 Stephane Popinet * Bug fixes for multilayer Saint-Venant Tue Jul 17 04:46:58 CEST 2012 Stephane Popinet * Fix for poiseuille/river test case Fri Jul 13 07:02:59 CEST 2012 Jesse Robertson * New example 'viscmix' Sun Jun 24 12:19:59 CEST 2012 Stephane Popinet * Tracer advection for GfsRiver Fri Jun 22 01:37:57 CEST 2012 Stephane Popinet * New GfsLayers object Wed Jun 20 12:23:54 CEST 2012 Stephane Popinet * New Poiseuille test case for multilayer Saint-Venant Wed Jun 20 07:08:59 CEST 2012 Stephane Popinet * Vertical viscosity for multilayer Saint-Venant Tue Jun 19 12:15:25 CEST 2012 Stephane Popinet * Multilayer Saint-Venant solver Thu Jun 14 03:00:03 CEST 2012 Stephane Popinet * New function gfs_domain_cell_traverse_new() Fri Jul 6 13:27:03 CEST 2012 Release tagged 2012-07-06 Fri Jul 6 11:40:09 CEST 2012 Stephane Popinet * Fix for distribution of test suite in tarballs Tue Jul 3 12:32:21 CEST 2012 Release tagged 2012-06-28 Thu Jun 28 04:15:01 CEST 2012 Stephane Popinet * Debian packages needs mpi-default-dev also at runtime Fri Jun 22 13:30:09 CEST 2012 Stephane Popinet * New utility 'gfsplot' For coupling gnuplot with OutputSimulation (text format). There is an example in doc/examples/dam. Sun Jun 17 09:05:27 CEST 2012 Stephane Popinet * Kinetic Riemann solver for GfsRiver Wed Jun 13 07:31:37 CEST 2012 Release tagged 2012-06-13 Wed Jun 13 05:18:38 CEST 2012 Stephane Popinet * Added missing classes to gfs_classes() Wed Jun 13 01:48:40 CEST 2012 Stephane Popinet * Fix for treatment of thin solids Wed Jun 13 01:47:54 CEST 2012 Stephane Popinet * Fix for 'layered' bug in moving.c Wed Jun 13 01:47:27 CEST 2012 Stephane Popinet * Updated test cases references Tue Jun 12 03:46:54 CEST 2012 Stephane Popinet * New "overlaps()" utility function Tue Jun 12 02:13:28 CEST 2012 Stephane Popinet * Fix for Dirichlet bcs in VariablePoisson Tue Jun 12 01:58:49 CEST 2012 Stephane Popinet * OutputGRD uses physical coordinates Fri Jun 1 03:29:30 CEST 2012 Stephane Popinet * gfs_divergence() uses a finite-volume approximation Thu May 31 01:44:05 CEST 2012 Stephane Popinet * New Rossby-Haurwitz wave test case Thu May 31 01:09:32 CEST 2012 Stephane Popinet * Added evolution of error with time for cosine bell test case Tue May 29 02:00:15 CEST 2012 Stephane Popinet * Support for rotated MPI boundaries Mon May 28 06:08:10 CEST 2012 Stephane Popinet * Various fixes for layered module Mon May 28 05:54:15 CEST 2012 Stephane Popinet * New object GfsMetricVariable Mon May 28 05:51:45 CEST 2012 Stephane Popinet * inverse_vector() method for MetricCubed Mon May 28 05:48:56 CEST 2012 Stephane Popinet * AdaptError now works on cubed sphere Fri May 25 08:13:00 CEST 2012 Stephane Popinet * Cosmetics Fri May 25 08:08:28 CEST 2012 Stephane Popinet * Switched cubed sphere coefficients back to Rancic et al Fri May 25 07:13:59 CEST 2012 Stephane Popinet * gfs_divergence() and gfs_vorticity() take metric into account Fri May 25 07:06:17 CEST 2012 Stephane Popinet * Fix for interpolation close to domain corners. Fri May 25 06:59:31 CEST 2012 Stephane Popinet * New utility functions dx2(), dy2(), dz2() Fri May 25 06:57:01 CEST 2012 Stephane Popinet * New function gfs_cartesian_grid_read() Fri May 25 06:40:52 CEST 2012 Stephane Popinet * Removed netcdf from RPM dependencies Mon May 21 00:12:02 CEST 2012 Stephane Popinet * The TMPDIR environment variable is taken into account Sun May 20 23:40:45 CEST 2012 Stephane Popinet * LocateArray was not updated when entirely solid boxes were destroyed Fri May 18 01:21:25 CEST 2012 Stephane Popinet * CGD files now understand "rx,ry,rz" This is useful for defining coordinate transformations numerically. Wed May 16 10:42:39 CEST 2012 Stephane Popinet * Orthogonality is the deviation from orthogonality Wed May 16 10:40:25 CEST 2012 Stephane Popinet * Conformal and spherical options for MetricLaplace Tue May 15 23:28:46 CEST 2012 Stephane Popinet * New object GfsMetricLaplace Tue May 8 03:10:47 CEST 2012 Stephane Popinet * New derived variable "Orthogonality" Fri May 4 08:59:36 CEST 2012 Stephane Popinet * New object GfsVariableLaplacian Thu May 3 22:45:04 CEST 2012 Stephane Popinet * Fix for electro module warning Thu May 3 13:02:40 CEST 2012 "Jose Lopez-Herrera Sanchez" " * A warning for correct use of EHD implicit scheme Wed May 2 23:34:42 CEST 2012 Stephane Popinet * New 'culvert' module Mon Apr 30 23:24:32 CEST 2012 Stephane Popinet * build_function_gcc uses '$CC' rather than just 'gcc' Wed Mar 21 21:38:04 CET 2012 Stephane Popinet * Norm of residual takes metric into account Thu Mar 8 21:58:48 CET 2012 Stephane Popinet * New 'layered' module for 2.5D hydrostatic solver Tue Feb 28 22:28:14 CET 2012 Stephane Popinet * New object GfsVariableAverage Wed Feb 22 06:59:29 CET 2012 Stephane Popinet * Vorticity is computed consistently from circulation (2D only for now) Fri Feb 17 03:15:39 CET 2012 Stephane Popinet * gfs_domain_face_bc() now works also for "rotated" edges Tue Feb 7 22:40:13 CET 2012 Stephane Popinet * New object GfsDomainProjection Fri Apr 27 10:29:30 CEST 2012 Release tagged 2012-04-27 Fri Apr 27 06:47:35 CEST 2012 Stephane Popinet * Bug fix for parallel restarts Fri Apr 27 00:40:44 CEST 2012 Stephane Popinet * Fixed libmath and mergesort() conflicts in kdt.c Thu Apr 26 23:48:43 CEST 2012 Stephane Popinet * Fix for compilation flags on Mac OSX Mon Dec 19 08:31:23 CET 2011 stephane.zaleski@gmail.com * Fixes to let autogen.sh work on MacOS X - Darwin Thu Apr 26 11:30:01 CEST 2012 Release tagged 2012-04-26 Thu Apr 26 08:54:32 CEST 2012 Stephane Popinet * Updated test case references Thu Apr 26 06:51:51 CEST 2012 Stephane Popinet * KDT defines better bounds for nodes Thu Apr 26 06:00:53 CEST 2012 Stephane Popinet * New rsurface2kdt conversion utility Old-style R-tree terrain databases are now unsupported but can still be converted to the KDT format using this utility. Thu Apr 26 05:49:16 CEST 2012 Stephane Popinet * New utility kdt2kdt for conversion between versions Thu Apr 26 03:10:08 CEST 2012 Stephane Popinet * Fix for okada module and lonlat coordinates Thu Apr 26 03:07:47 CEST 2012 Stephane Popinet * New 'terrain' test case Thu Apr 26 03:07:32 CEST 2012 Stephane Popinet * gfs_interpolate() uses 5 points interpolation. This doesn't smooth as much as 4 points interpolation. Note that the size of the array filled by gfs_cell_corner_values() as grown by one element as a result of this change. It is imperative to adjust the size of the array for all calls made to gfs_cell_corner_values(). Tue Apr 24 08:37:32 CEST 2012 Stephane Popinet * Fix for VOFHeight Bcs when used together with Solid Fri Apr 20 06:45:42 CEST 2012 Stephane Popinet * Terrain module now only supports the KDT format Thu Apr 5 04:27:10 CEST 2012 Stephane Popinet * Electrohydro and Poisson/Helmholtz solvers allow negative coefficients Wed Apr 4 02:42:52 CEST 2012 Stephane Popinet * Kdt optimises use of temporary files Tue Apr 3 05:21:55 CEST 2012 Stephane Popinet * Reuses buffers Tue Apr 3 01:16:31 CEST 2012 Stephane Popinet * Much improved kdt implementation Mon Mar 26 07:32:07 CEST 2012 Release tagged 2012-03-26 Mon Mar 26 05:41:28 CEST 2012 Stephane Popinet * New SourcePipe object Sun Mar 25 22:05:09 CEST 2012 Stephane Popinet * Cleanup of swirl test case Sun Mar 25 07:51:34 CEST 2012 Stephane Popinet * RPM fixes for Fedora 16 and CentOS 6 Sun Mar 25 01:35:03 CET 2012 Release tagged 2012-03-24 Sat Mar 24 23:52:04 CET 2012 Stephane Popinet * Updated reference for electro test case Sat Mar 24 08:43:09 CET 2012 Stephane Popinet * Need to use gfs_face_interpolated_value_generic() when face is not simply oriented Sat Mar 24 08:41:34 CET 2012 Stephane Popinet * Fix for bibtex path Sat Mar 24 01:11:19 CET 2012 Stephane Popinet * Fix for gfsview snapshot tarballs Fri Mar 23 23:49:21 CET 2012 Stephane Popinet * Tests and examples lists are created automatically from template.tex Tue Mar 20 23:18:21 CET 2012 Stephane Popinet * New test case 'still/bipolar' Sun Mar 18 23:49:51 CET 2012 Stephane Popinet * New test case: parabolic container with solid boundaries Wed Mar 14 00:22:03 CET 2012 Stephane Popinet * New 'still' test case for cut cells and Saint-Venant Fri Mar 23 08:35:22 CET 2012 Stephane Popinet * 'W' can be used to define an azimuthal velocity in GfsAxi Fri Mar 23 06:54:34 CET 2012 Stephane Popinet * Swirl test case uses the new formulation Thu Mar 22 02:52:03 CET 2012 Stephane Popinet * Fix for libparticulates and libbubbles linking Wed Mar 21 21:39:47 CET 2012 Stephane Popinet * Unified bibliographies for examples and tests Mon Jan 9 15:52:56 CET 2012 "Jose Lopez-Herrera Sanchez" " * Swirl test case Wed Mar 21 22:45:35 CET 2012 Stephane Popinet * Fixes for gradients and metric in GfsRiver (due to cut cell implementation) Wed Mar 21 21:34:04 CET 2012 Stephane Popinet * New 'shock' example Mon Mar 19 01:02:42 CET 2012 Hyunuk An * Cut cells for GfsRiver Sun Mar 18 22:58:02 CET 2012 Release tagged 2012-03-18 Sun Mar 18 01:11:23 CET 2012 Stephane Popinet * Removed support for obsolete 'gts-config' and 'gfs-config' Sun Mar 18 01:08:52 CET 2012 Stephane Popinet * Fixes for automake and install dirs for scripts Thu Mar 8 22:00:19 CET 2012 Stephane Popinet * Fixed gfs_variable_read_vector() input checking Fri Mar 2 02:58:56 CET 2012 Release tagged 2012-03-01 Thu Mar 1 22:50:11 CET 2012 Stephane Popinet * Fix for incorrect use of gfs_face_interpolated_value() in GfsDiffusion Thu Mar 1 22:48:17 CET 2012 Stephane Popinet * Fix for GfsGlobal and function cache Wed Feb 29 22:29:12 CET 2012 Stephane Popinet * Fix for refinement of mixed cells containing a VOF interface Note that this is not mass conserving. Wed Feb 29 08:57:33 CET 2012 Release tagged 2012-02-29 Wed Feb 29 06:51:47 CET 2012 Stephane Popinet * Latex does not like underscores in test case names Wed Feb 29 03:10:06 CET 2012 Stephane Popinet * New test case wannier/stretch Wed Feb 29 02:41:37 CET 2012 Stephane Popinet * Fixed version info for skew_box test case Tue Feb 28 23:10:20 CET 2012 Daniel Fuster * New test case for AMR with the skew-symmetric formulation Tue Feb 28 00:31:31 CET 2012 Stephane Popinet * Updated reference for shear/curvature test case Tue Feb 28 00:22:15 CET 2012 Stephane Popinet * Support for metric and embedded boundaries Fri Feb 24 06:41:37 CET 2012 Stephane Popinet * Removed crappy "deferred compilation" stuff This has been replaced by a generic global function cache. Thu Feb 23 03:14:19 CET 2012 Stephane Popinet * Fix for VariableStreamfunction and degenerate metrics (e.g. lon-lat) Thu Feb 23 03:13:04 CET 2012 Stephane Popinet * Hypre module now works also for VariablePoisson Wed Feb 22 21:45:00 CET 2012 Stephane Popinet * Adaptation needs to occur at the right time for GfsAdvection In particular so that the streamfunction is defined correctly after adaptation for streamfunction/vorticity formulations. Wed Feb 22 01:12:34 CET 2012 Stephane Popinet * Bias of residual now correctly reflects the compatibility condition Tue Feb 21 23:47:00 CET 2012 Stephane Popinet * VariablePoisson takes an optional multilevel parameter block Tue Feb 21 03:50:25 CET 2012 Release tagged 2012-02-20 Tue Feb 21 00:35:14 CET 2012 Stephane Popinet * Bug fix for GfsInitFaceValues Tue Feb 21 00:07:36 CET 2012 Stephane Popinet * Cosmetics for skewsymmetric module Wed Jan 25 19:22:33 CET 2012 Daniel Fuster * Fixes for AMR in the skew-symmetric formulation Wed Jan 25 19:17:15 CET 2012 Daniel Fuster * New object GfsInitFaceValues in the skew-symmetric module Wed Jan 25 19:12:11 CET 2012 Daniel Fuster * Fix in viscous terms in the skew-symmetric module + several minor fixes Mon Feb 20 23:57:44 CET 2012 Stephane Popinet * Minor bug fix for Coriolis terms Mon Feb 20 23:43:38 CET 2012 Stephane Popinet * Acceleration-based CFL rollback Fri Feb 17 03:04:51 CET 2012 Stephane Popinet * Bug fix for gfs_get_poisson_problem() with periodic boundary conditions Fri Feb 17 03:16:47 CET 2012 Stephane Popinet * Metric terms for advection of velocity Fri Feb 17 03:15:12 CET 2012 Stephane Popinet * Added vector transformations to cubed sphere mapping Wed Feb 15 23:44:04 CET 2012 Stephane Popinet * GfsInit can initialise vector fields with metric Thu Feb 9 21:19:36 CET 2012 Stephane Popinet * Hydrostatic pressure needs to be updated when the mesh is adapted Tue Feb 7 23:00:02 CET 2012 Stephane Popinet * GfsPoisson takes Dirichlet conditions into account for compatibility Tue Feb 7 22:37:52 CET 2012 Stephane Popinet * Minor warning fix for gfs_velocity_face_sources Tue Feb 7 22:36:55 CET 2012 Stephane Popinet * Timestep CFL only takes accelerations into account when velocity is zero Wed Feb 1 15:06:12 CET 2012 "Jose Lopez-Herrera Sanchez" " * added missed gfs_domain_surface_bc in electrohydro.c Tue Jan 31 05:46:28 CET 2012 Release tagged 2012-01-31 Tue Jan 31 03:55:45 CET 2012 Stephane Popinet * Unified WEBROOT for docs Tue Jan 31 00:37:51 CET 2012 Stephane Popinet * Fixed typo Mon Jan 30 22:40:07 CET 2012 Stephane Zaleski * Do not call boundary_tree on boundaries with no root cell Thu Nov 24 23:10:47 CET 2011 Stephane Popinet * Changed quotes for TecPlot files Mon Jan 30 05:47:24 CET 2012 Stephane Popinet * Consistent use of GFS_VALUE() and GFS_VARIABLE() Mon Jan 30 05:43:50 CET 2012 Stephane Popinet * New object GfsHydrostaticPressure Fri Jan 27 06:44:12 CET 2012 Stephane Popinet * gfs_send_objects() and gfs_union_open() use fread() rather than mmap() Openfabrics/infiniband/OpenMPI somehow does not like mmap(). Mon Jan 30 02:43:59 CET 2012 Stephane Popinet * All GfsModules are kept until the simulation is destroyed This means that in parallel no recompilation of GfsModules should be necessary for GfsFunctions appearing in the boundary conditions of GfsBoxes (when exchanging boxes between PEs for load balancing). This should allow to circumvent the dodgy fork() limitation of openfabrics/infiniband. Mon Jan 30 02:37:45 CET 2012 Stephane Popinet * Simplified box_split() Wed Nov 23 02:46:27 CET 2011 Release tagged 2011-11-23 Wed Nov 23 01:11:09 CET 2011 Stephane Popinet * Cosmetics Tue Nov 15 23:12:55 CET 2011 Vladimir Kolobov * Implementing gfs_domain_write_tecplot_surface Adding capability of outputing Gerris surfaces (either gts or implicitly specified) into Tecplot files Tue Nov 22 23:57:02 CET 2011 Stephane Popinet * Bug fix for charge in electrohydro Tue Nov 22 21:33:49 CET 2011 Stephane Popinet * Removed obsolete GfsSourceCharge Tue Nov 22 21:32:27 CET 2011 Stephane Popinet * More fixes for map module and inverted transforms Tue Nov 22 21:28:41 CET 2011 J.M. Lopez-Herrera * Implicit treatment of the charge density equation for electrohydro Charge volume density is now user-defined by means of the function 'charge'. Tue Nov 22 21:28:21 CET 2011 J.M. Lopez-Herrera * Electrokinetic test: Gouy-Chapman Debye layer Tue Nov 22 06:49:25 CET 2011 J.M. Lopez-Herrera * Bump test also compares the implicit vs explicit charge scheme Fri Nov 18 02:56:51 CET 2011 Stephane Popinet * New --debug option for gerris2D/3D Tue Nov 15 03:47:31 CET 2011 Release tagged 2011-11-15 Tue Nov 15 02:09:46 CET 2011 Stephane Popinet * Important fix for SurfaceBc and Neumann conditions They were completely wrong for values different from zero. Tue Nov 15 02:06:58 CET 2011 Stephane Popinet * Fix for MapProjection and inversion of mapping transforms Thu Nov 10 09:48:20 CET 2011 Release tagged 2011-11-10 Thu Nov 10 07:43:44 CET 2011 Stephane Popinet * Updated test case references for new unified axi solver Thu Nov 10 04:12:37 CET 2011 Stephane Popinet * Removed (hopefully) obsolete check on interface curvature Wed Nov 9 23:18:15 CET 2011 Stephane Popinet * GfsGlobal can include files from working directory Wed Nov 9 23:16:53 CET 2011 Stephane Popinet * New wannier/bipolar test case Wed Nov 9 22:32:34 CET 2011 Stephane Popinet * New wannier test case Wed Nov 9 10:29:07 CET 2011 Stephane Popinet * Cosmetics Mon Nov 7 21:14:34 CET 2011 Stephane Popinet * Axi solver is now just another metric Mon Nov 7 01:23:52 CET 2011 Stephane Popinet * New annulus test case Mon Nov 7 01:00:08 CET 2011 Stephane Popinet * GfsSource takes into account mapping for vector quantities Mon Nov 7 00:54:59 CET 2011 Stephane Popinet * New vector mapping functions Sat Nov 5 06:48:50 CET 2011 Stephane Popinet * Updated conflicting debian packages Wed Nov 2 21:36:27 CET 2011 Stephane Popinet * Fixed m4 options configure test Sun Oct 30 11:13:29 CET 2011 Stephane Popinet * Improved cloneubuntu Fri Oct 28 06:05:26 CEST 2011 Stephane Popinet * First implementation of metric terms for viscosity Tue Oct 25 09:40:46 CEST 2011 Release tagged 2011-10-25 Tue Oct 25 07:36:03 CEST 2011 Stephane Popinet * Moved darcs gts to dalembert Tue Oct 25 05:08:18 CEST 2011 Stephane Popinet * GfsMap uses Newton iterations to compute inverse mapping Tue Oct 25 03:00:14 CEST 2011 Stephane Popinet * DischargeElevation is not an "Init" event Tue Oct 25 01:30:10 CEST 2011 Stephane Popinet * New non-uniform-stretching lid example Mon Oct 24 23:29:03 CEST 2011 Stephane Popinet * New Poiseuille with metric test case Tue Mar 29 21:33:54 CEST 2011 Stephane Popinet * Changed the ordering of mapping/scaling transforms Mon Mar 28 21:37:08 CEST 2011 Stephane Popinet * Commented out GSL use in metric.c Mon Mar 28 21:08:25 CEST 2011 Stephane Popinet * Updated documentation format for new GfsMetric objects Mon Mar 28 20:55:04 CEST 2011 Stephane Popinet * GfsGenericMetric is now truly generic. Mon Mar 28 20:43:30 CEST 2011 Stephane Popinet * Simplified MapFunction Wed Feb 9 21:26:07 CET 2011 Stephane Popinet * New GfsGenericMetric and GfsMetric objects Thu Jan 13 22:26:18 CET 2011 Sebastien Delaux * The Coriolis test now uses the stretch metric Fri Oct 21 05:35:40 CEST 2011 Release tagged 2011-10-08 Sat Oct 8 05:11:25 CEST 2011 Stephane Popinet * Fixes for RPM specfile Tue Oct 18 06:42:59 CEST 2011 Release tagged 2011-10-14 Fri Oct 14 09:15:39 CEST 2011 Daniel Fuster * Initialization of the "old" velocity is skew-symmetric module + other minor changes Fri Oct 14 00:53:03 CEST 2011 Stephane Popinet * Fix for "debugging leftovers" of skewsymmetric module Thu Oct 13 23:25:55 CEST 2011 Stephane Popinet * Various cosmetic improvements Tue Oct 11 11:03:32 CEST 2011 Daniel Fuster * Proper initialization and stockage of face velocities in skew-symmetric module Sun Oct 9 21:51:16 CEST 2011 Daniel Fuster * 3D implementation of viscosity in skew-symmetric formulation Thu Oct 6 10:52:56 CEST 2011 Daniel Fuster * Return to the original skew symmetric formulation + user defined value of beta Sun Aug 7 17:23:30 CEST 2011 Daniel Fuster * new scheme implementation based on the skew-symmetric formulation Mon Aug 1 10:55:46 CEST 2011 Daniel Fuster * variable density in skew symmetric formulation Mon Oct 10 18:13:30 CEST 2011 J.M. Lopez-Herrera * Bug fix in EHD forces Fri Oct 7 11:41:54 CEST 2011 Release tagged 2011-10-07 Fri Oct 7 09:34:47 CEST 2011 Stephane Popinet * Doc fix Fri Oct 7 09:28:36 CEST 2011 Stephane Popinet * Another fix for gfs_domain_forget_boundary() Fri Oct 7 06:26:19 CEST 2011 Stephane Popinet * Debian/Ubuntu packages now include the hypre module Fri Oct 7 06:13:53 CEST 2011 Stephane Popinet * Fix for gfs_domain_forget_boundary() Thu Oct 6 23:36:38 CEST 2011 Stephane Popinet * Hypre module should now work also for diffusion problems Thu Oct 6 00:09:04 CEST 2011 Stephane Popinet * Fix for destroyed boundaries and gfs_domain_boundary_locate() Wed Oct 5 22:43:33 CEST 2011 Stephane Popinet * New 'shore' test case Wed Oct 5 03:42:05 CEST 2011 Release tagged 2011-10-05 Wed Oct 5 02:12:08 CEST 2011 Stephane Popinet * Fixed F77 wrappers configure check Wed Oct 5 01:46:09 CEST 2011 Stephane Popinet * New object GfsVariableVOFConcentration Wed Oct 5 01:23:15 CEST 2011 Stephane Popinet * New time-reversed 'concentration' test case Fri Sep 30 01:27:06 CEST 2011 Daniel Fuster * The dimension of the fft is now defined inside the structure of the object Tue Oct 4 01:39:04 CEST 2011 Release tagged 2011-10-03 Mon Oct 3 22:26:12 CEST 2011 Stephane Popinet * Fix for obsolete gfsconfig.h Mon Oct 3 12:40:50 CEST 2011 Release tagged 2011-10-03 Mon Oct 3 09:49:46 CEST 2011 Stephane Popinet * Fix for configure and mpicc Mon Oct 3 07:00:52 CEST 2011 Stephane Popinet * Made pointer conversion explicit for buggy C libraries (AIX) Mon Oct 3 06:59:39 CEST 2011 Stephane Popinet * Bug fix for --with-suffix configure option Mon Oct 3 06:58:44 CEST 2011 Stephane Popinet * Macros should now work also with standard awk and m4 Sun Oct 2 12:20:43 CEST 2011 Stephane Popinet * GfsFunction should now support libtool compilation Sun Oct 2 12:16:19 CEST 2011 Stephane Popinet * Portability improvements and removal of obsolete "static modules" support Thu Sep 29 12:40:13 CEST 2011 Release tagged 2011-09-28 Wed Sep 28 23:54:36 CEST 2011 Stephane Popinet * Added checks for gfs_domain_locate() Wed Sep 28 23:31:33 CEST 2011 Stephane Popinet * Distribute "multimedia" files also for test cases Wed Sep 28 23:20:19 CEST 2011 Stephane Popinet * Cosmetics for fft module Wed Sep 28 10:43:48 CEST 2011 Daniel Fuster * bug writting 3D spectra Wed Sep 28 10:18:41 CEST 2011 Daniel Fuster * minor corrections in GfsOutputSpectra Thu Sep 29 09:49:09 CEST 2011 Stephane Popinet * Added rotations to GfsMapTransform Wed Sep 28 12:42:03 CEST 2011 Release tagged 2011-09-28 Wed Sep 28 11:24:18 CEST 2011 Stephane Popinet * Fix for typo in bibtex file Wed Sep 28 07:32:02 CEST 2011 Stephane Popinet * New 'plateau' test case Wed Sep 28 07:30:08 CEST 2011 Stephane Popinet * New "format" option for OutputScalar Wed Sep 28 01:03:36 CEST 2011 Stephane Popinet * Various fixes for fft module Mon Sep 26 20:47:16 CEST 2011 Daniel Fuster * Several improvements in the GfsOutputSpectra module Fri Sep 23 12:12:53 CEST 2011 Daniel Fuster * new GfsOutputSpectra object Tue Sep 27 05:31:55 CEST 2011 Release tagged 2011-09-27 Tue Sep 27 02:17:31 CEST 2011 Stephane Popinet * Limit the minimum axisymmetric radius for HF curvature Tue Sep 27 00:46:13 CEST 2011 Stephane Popinet * Redefined g_assert macros for consistent error logging Mon Sep 26 11:36:19 CEST 2011 Stephane Popinet * Important fix for fine -> coarse VOF refinement and metric In particular this should impact axisymmetric VOF simulations. Mon Sep 26 09:43:16 CEST 2011 Stephane Popinet * New object GfsAdaptThickness Sun Sep 25 23:19:34 CEST 2011 Stephane Popinet * Changed defaults to beta = 1 and gc = 1 Fri Sep 23 09:24:22 CEST 2011 Release tagged 2011-09-23 Fri Sep 23 07:10:56 CEST 2011 Stephane Popinet * "Multiband" VOF advection Wed Sep 21 22:38:37 CEST 2011 Stephane Popinet * Bug fix for error message in topics.mod Thu Sep 22 04:36:02 CEST 2011 Stephane Popinet * Fixed units for BcAngle Wed Sep 21 04:31:11 CEST 2011 Release tagged 2011-09-20 Wed Sep 21 01:17:49 CEST 2011 Stephane Popinet * Only consider central-HF values close enough to the cell Wed Sep 21 01:02:50 CEST 2011 Stephane Popinet * Added levelset to 'rotate' test case Wed Sep 21 00:32:17 CEST 2011 Stephane Popinet * Coarse cells can use HF on finer interfacial cells Wed Sep 21 00:27:47 CEST 2011 Stephane Popinet * Coarse cells can use HF information on finer neighbours Wed Sep 21 00:24:01 CEST 2011 Stephane Popinet * For GfsAdvection fixed order of tracer advection and adaptivity Tue Sep 20 13:32:13 CEST 2011 Release tagged 2011-09-20 Tue Sep 20 10:29:32 CEST 2011 Stephane Popinet * Cosmetics Tue Sep 20 09:00:07 CEST 2011 Stephane Popinet * New test case: sheared straight interface Fri Sep 16 06:30:08 CEST 2011 Release tagged 2011-09-16 Fri Sep 16 04:11:29 CEST 2011 Stephane Popinet * New implementation of curvature from height-functions Gives priority to HF defined on equally-spaced columns. Wed Sep 14 08:44:38 CEST 2011 Stephane Popinet * gfs_height_curvature_new() tries to find equally-spaced columns. Wed Sep 14 06:31:03 CEST 2011 Release tagged 2011-09-13 Wed Sep 14 00:41:37 CEST 2011 Stephane Popinet * Optimisation for VariableTracerVOFHeight. Also fixes regression for VariableTracerVOF. Tue Sep 13 09:58:22 CEST 2011 Release tagged 2011-09-13 Tue Sep 13 07:06:02 CEST 2011 Stephane Popinet * A few test cases now use GfsVariableTracerVOFHeight Tue Sep 13 07:03:07 CEST 2011 Stephane Popinet * Contact angle implementation for VariableTracerVOFHeight Tue Sep 13 04:55:33 CEST 2011 Stephane Popinet * New sessile drop test case Fri Sep 9 02:39:16 CEST 2011 Stephane Popinet * New contact angle boundary condition GfsBcAngle Wed Sep 7 10:33:58 CEST 2011 Daniel Fuster * bug fix in skew-symmetric module (dt pointer) Fri Sep 9 00:55:12 CEST 2011 Stephane Popinet * New utility function gfs_cell_message() Tue Sep 6 03:22:08 CEST 2011 Stephane Popinet * New height function implementation "GfsVariableTracerVOFHeight" Tue Sep 6 03:06:00 CEST 2011 Stephane Popinet * New test case for height-function in parallel Mon Sep 5 23:23:22 CEST 2011 Stephane Popinet * Bug fix for gfscompare and field with NODATA values Fri Sep 2 05:24:04 CEST 2011 Stephane Popinet * Preliminary implementation of new height-function algorithm Tue Aug 30 11:24:03 CEST 2011 Release tagged 2011-08-30 Tue Aug 30 07:59:25 CEST 2011 Stephane Popinet * Various fixes for reynolds test case Mon Aug 1 10:48:50 CEST 2011 Daniel Fuster * accuracy plot in reynolds test Mon Aug 1 15:40:33 CEST 2011 Daniel Fuster * minor changes example Fri Jul 29 20:55:43 CEST 2011 Daniel Fuster * bug in the skewsymmetric example Sun Jul 10 16:42:24 CEST 2011 Daniel Fuster * new example for the skewsymmetric module Tue Aug 30 07:17:51 CEST 2011 Stephane Popinet * Properly exported gfs_velocity_face_sources() Sat Jul 23 19:20:19 CEST 2011 Daniel Fuster * surface tension implementation in skewsymmetric module Tue Aug 30 04:30:38 CEST 2011 Release tagged 2011-08-29 Tue Aug 30 01:20:49 CEST 2011 Stephane Popinet * Cosmetics Tue Aug 9 01:42:46 CEST 2011 jose.lopez.herrera.s@gmail.com * diffusion coefficients can be now evaluated using gfs_function_face_value Sat Jul 9 01:29:44 CEST 2011 Release tagged 2011-07-08 Fri Jul 8 22:50:12 CEST 2011 Stephane Popinet * Fix for conflicts with new skew symmetric solver Fri Jul 8 22:49:35 CEST 2011 Stephane Popinet * Cosmetics for skew-symmetric solver Fri Jul 8 21:50:48 CEST 2011 Daniel Fuster * skewsymmetric.mod: Remove useless macros Fri Jul 8 19:12:28 CEST 2011 Daniel Fuster * Cleaning skewsymmetric module Tue May 31 18:59:20 CEST 2011 Daniel Fuster * Skew symmetric formulation with all the possible combinations (I will decide the good ones later) Thu May 26 17:12:54 CEST 2011 Daniel Fuster * AMR implementation for the skew-symmetric module Mon May 23 16:49:43 CEST 2011 Daniel Fuster * 0th order extrapolation for AMR in the skew-symetric formulation Sat May 21 16:17:30 CEST 2011 Daniel Fuster * Initial implementation of the skew symmetric formulation Fri Jul 8 23:28:40 CEST 2011 Release tagged 2011-07-08 Fri Jul 8 21:52:54 CEST 2011 Stephane Popinet * Fixed references in wingtip and starting examples Fri Jul 8 15:48:00 CEST 2011 Stephane Popinet * Cosmetics Tue May 17 06:51:47 CEST 2011 Sebastien Delaux * New topics module for submarine landslides and more Tue May 17 06:56:02 CEST 2011 Sebastien Delaux * Extension of gfs_cell_coarse_fine for 3D metric Fri Jul 8 18:13:40 CEST 2011 G. D. McBain * Wingtip example Fri Jul 8 17:54:58 CEST 2011 G. D. McBain * Starting vortex example Fri Jul 1 09:27:58 CEST 2011 Release tagged 2011-07-01 Fri Jul 1 07:34:31 CEST 2011 Stephane Popinet * Updated test cases references Thu Jun 30 23:05:43 CEST 2011 Stephane Popinet * Fixed surface/solid marginal cases Sun Jun 26 03:13:45 CEST 2011 Stephane Popinet * Removed 'fix' for implicit function intersection Sat Jun 25 20:55:04 CEST 2011 Stephane Popinet * Fixed RPM spec file for Fedora 15 Sat Jun 11 11:03:46 CEST 2011 Release tagged 2011-06-11 Sat Jun 11 09:11:35 CEST 2011 Stephane Popinet * Added reference to Lopez et al for electro test cases Fri Jun 10 23:31:35 CEST 2011 Stephane Popinet * New reynolds test case with streamfunction/vorticity formulation Fri Jun 10 23:28:56 CEST 2011 Stephane Popinet * New object GfsVariablePoisson for vorticity/streamfunction formulation Wed Jun 8 16:52:15 CEST 2011 Stephane Popinet * Bug fix for scaling being ignored in AdaptGradient when restarting Fri May 27 02:30:28 CEST 2011 Release tagged 2011-05-26 Fri May 27 01:01:11 CEST 2011 Stephane Popinet * Added corner definitions for isolines in isocube.h Thu May 26 16:32:05 CEST 2011 Release tagged 2011-05-26 Thu May 26 14:53:34 CEST 2011 Stephane Popinet * Updated daily script for move to gerris.dalembert Thu May 26 15:23:27 CEST 2011 Stephane Popinet * "dV" now takes the metric into account Tue May 24 15:15:00 CEST 2011 Stephane Popinet tagged 2011-05-24 Tue May 24 12:50:28 CEST 2011 Stephane Popinet * Added option to remove bubbles using RemoveDroplets Tue May 24 10:41:07 CEST 2011 Stephane Popinet * For GfsAxi the minimum radius is _half_ the grid size Tue May 24 09:55:03 CEST 2011 Stephane Popinet * Cosmetics Mon May 23 22:18:05 CEST 2011 Stephane Popinet * For GfsAxi the minimum radius of curvature is now limited to the grid size. Fri May 6 20:43:11 CEST 2011 Stephane Popinet tagged 2011-05-05 Thu May 5 11:07:55 CEST 2011 Stephane Popinet * Partial fix for units in gfscompare Thu May 5 10:51:45 CEST 2011 Stephane Popinet * Fixed assertion for function_compile() Fri Apr 29 21:01:51 CEST 2011 Stephane Popinet tagged 2011-04-28 Thu Apr 28 20:35:49 CEST 2011 Stephane Popinet * Fix for preloaded modules in parallel Thu Apr 28 20:51:13 CEST 2011 Stephane Popinet tagged 2011-04-28 Thu Apr 28 17:26:22 CEST 2011 Stephane Popinet * Proper (hopefully) fix for optimised domain traversal Thu Apr 28 10:17:35 CEST 2011 Stephane Popinet * Rollback of partitioning fix Tue Apr 26 17:01:43 CEST 2011 Stephane Popinet * Bug fix for partitioning with the optimised array traversal Tue Apr 5 19:02:28 CEST 2011 Stephane Popinet * Fixed scaling of tx,ty,tz in GfsSurface Fri Apr 1 17:05:11 CEST 2011 Stephane Popinet * Fixed problem with combination of EventBalance and periodic Bcs Fri Apr 1 11:00:41 CEST 2011 Stephane Popinet * Check for location of hypre module Mon Mar 28 22:10:05 CEST 2011 Stephane Popinet * Optimised domain box traversal by caching sorted array. Wed Mar 30 22:34:42 CEST 2011 Stephane Popinet * Important fix for Okada module in longitude/latitude coordinates Wed Mar 30 11:19:12 CEST 2011 Stephane Popinet tagged 2011-03-29 Tue Mar 29 14:11:21 CEST 2011 Stephane Popinet * changed web address in docs Tue Mar 29 02:25:47 CEST 2011 Daniel Fuster * destroy object for FeedParticle + np is now a GfsFunction + assign forces Mon Mar 28 20:02:41 CEST 2011 Stephane Popinet * Cosmetics for GfsFeedParticle Sat Mar 26 15:28:50 CET 2011 Stephane Popinet tagged 2011-03-25 Fri Mar 25 16:00:01 CET 2011 Stephane Popinet * Minor fixes for GfsParticulate Fri Mar 25 15:51:10 CET 2011 Stephane Popinet * Minor fixes for GfsBubbleFraction Fri Mar 25 13:36:13 CET 2011 Daniel Fuster * Corrections in GfsBubbleFractions. The kernel function and projection radius are user defined functions Thu Mar 24 11:13:13 CET 2011 Stephane Popinet * Simplified GfsBubbleFraction implementation Mon Mar 21 15:39:32 CET 2011 Stephane Popinet * New objects GfsBubbleFraction, GfsBubbleFractionDt Tue Mar 22 19:33:18 CET 2011 Daniel Fuster * Particulates advect with fluid velocity when no force is specified Mon Mar 21 17:35:52 CET 2011 Daniel Fuster * feed particle object Mon Mar 21 17:31:42 CET 2011 Daniel Fuster * bug criteria bubble in cell + problem with L Sun Jan 30 20:58:05 CET 2011 Daniel Fuster * bubble concentration field Sat Jan 29 18:12:12 CET 2011 Daniel Fuster * new macro ftt_vector_dist Fri Jan 28 13:46:17 CET 2011 Daniel Fuster * bug: units in GfsParticulateField Fri Dec 17 19:05:54 CET 2010 Daniel Fuster * Temporal object bubbles2 to obtain dbdt at a given time Fri Mar 25 15:24:33 CET 2011 Stephane Popinet tagged 2011-03-17 Thu Mar 17 15:08:59 CET 2011 Stephane Popinet * Added JASON-1 profile for tsunami example Fri Mar 25 14:26:52 CET 2011 Stephane Popinet * New wind-driven lake test case Fri Mar 25 14:16:17 CET 2011 Stephane Popinet * Turn off rank-deficient fix for GfsPoisson This seemed to degrade convergence for test cases. Mon Mar 21 10:29:24 CET 2011 Stephane Popinet * gfs_get_poisson_problem() returns a linear system with a unique solution For Neumann bcs everywhere, the solution of the Poisson problem is defined to within a constant. This causes convergence problems for external linear solvers such as hypre. The solution is to remove the extra degree of freedom by setting the value of the solution in a single row. Note that the check for Neumann bcs assumes a simply connected domain topology. Fri Mar 25 10:15:57 CET 2011 Stephane Popinet * Fix for summary.sh in parallel test suite Fri Mar 25 00:06:29 CET 2011 Stephane Popinet * Bug fix for automake version check Thu Mar 24 17:58:51 CET 2011 Stephane Popinet * Fix for automake options and missing dep files Thu Mar 24 20:59:04 CET 2011 Stephane Popinet * Fix for dependencies in tests Tue Mar 22 15:46:32 CET 2011 Stephane Popinet * Check for increasing order in CGD files Mon Mar 21 12:32:05 CET 2011 Stephane Popinet * Bug fix for cost variable in GfsAdapt Thu Mar 17 11:18:19 CET 2011 Stephane Popinet * "`%-style pattern rules are a GNU make extension" correction Thu Mar 17 11:12:26 CET 2011 Stephane Popinet * Added warning when reading obsolete terrain databases Wed Mar 23 19:45:01 CET 2011 Stephane Popinet * darcs2dist also works with straight directories Wed Mar 23 13:27:11 CET 2011 Stephane Popinet * Various cosmetics for doc generation Mon Mar 21 21:15:43 CET 2011 Stephane Popinet * g_ptr_array_foreach() should not be used for compatibility with old glib Mon Mar 21 22:55:39 CET 2011 Stephane Popinet * Use doxygen to generate programming reference Sat Mar 19 00:25:33 CET 2011 Stephane Popinet * Simplified tolerance criterion for hypre, lis and agmg Fri Mar 18 23:23:19 CET 2011 Stephane Popinet * Added configuration summary Wed Mar 16 22:58:29 CET 2011 Stephane Popinet * Removed warning message from AGMG Wed Mar 16 22:58:16 CET 2011 Stephane Popinet * New agmg Poisson solver module Fri Mar 18 23:17:58 CET 2011 Stephane Popinet * New publish target for examples and tests docs Fri Mar 18 23:15:20 CET 2011 Stephane Popinet * Updated test cases references for 64-bit systems Fri Mar 18 21:43:43 CET 2011 Stephane Popinet * Support for parallel tests Wed Mar 16 09:24:43 CET 2011 Stephane Popinet * New lis module for Poisson solution Sun Feb 13 00:55:30 CET 2011 Stephane Popinet * gfs_get_poisson_problem() does not construct stencils for boundary values (experimental) This reduces the size of the system, increases the minimum degree of each row and leads to better convergence of hypre solvers in all cases tested so far. Including convergence for some previously pathological cases. It also simplifies the code. Thu Jan 20 21:13:10 CET 2011 Stephane Popinet * Support for parallel test suite Sun Feb 13 06:13:27 CET 2011 Stephane Popinet tagged 2011-02-12 Sat Feb 12 15:32:20 CET 2011 Stephane Popinet * Updated Poisson test cases references Sat Feb 12 14:42:03 CET 2011 Stephane Popinet * Adaptivity can be used within GfsPoisson Sat Feb 12 14:39:42 CET 2011 Stephane Popinet * OutputTime uses a global real and cpu timer Thu Feb 10 06:13:44 CET 2011 Stephane Popinet tagged 2011-02-09 Wed Feb 9 10:02:40 CET 2011 Stephane Popinet * Bug fix and simplification of MetricStretch Wed Feb 9 09:45:09 CET 2011 Stephane Popinet * Fixed documentation Wed Feb 9 05:39:44 CET 2011 Sebastien Delaux * Doc for several functions Tue Feb 8 21:28:17 CET 2011 Stephane Popinet * Stretch metric does not need an extra variable Tue Feb 8 14:39:16 CET 2011 Stephane Popinet * Several fixes for weighted terrain database implementation Tue Jan 11 23:05:26 CET 2011 Sebastien Delaux * Weighting of databases for the terrain module Tue Feb 8 13:18:29 CET 2011 Stephane Popinet * Made stretchlid a subcase of lid test case Tue Feb 8 13:00:03 CET 2011 Stephane Popinet * Several fixes for the gaussian test case + new lonlat version Mon Jan 10 03:27:31 CET 2011 Sebastien Delaux * New test case of a stretched lid-driven cavity Tue Feb 8 11:59:58 CET 2011 Stephane Popinet * Stretch metric uses the new face_scale_metric() interface Mon Jan 10 01:33:13 CET 2011 Sebastien Delaux * New stretch metric Tue Feb 8 10:57:25 CET 2011 Stephane Popinet * New test case harmonic/lonlat Tue Feb 8 10:45:11 CET 2011 Stephane Popinet * Cleanup and completion of harmonic test case Tue Feb 8 10:42:08 CET 2011 Stephane Popinet * Cosmetics for GfsPoisson Tue Feb 8 10:40:30 CET 2011 Stephane Popinet * Fixes for face_scale_metric() implementation. Also thoroughly checked the cubed metric and added implementation for lonlat metric. Mon Jan 10 00:08:48 CET 2011 Sebastien Delaux * Poisson solver works with the cubed metric Wed Feb 2 22:58:59 CET 2011 Stephane Popinet * Cosmetics Sun Jan 9 23:30:53 CET 2011 Sebastien Delaux * New test case Gaussian Sun Jan 9 23:28:58 CET 2011 Sebastien Delaux * New harmonic test case Fri Feb 4 05:41:43 CET 2011 Stephane Popinet tagged 2011-01-11 Tue Jan 11 02:42:20 CET 2011 Sebastien Delaux * Bug fix for hypre and relax_dirichlet Wed Feb 2 22:42:16 CET 2011 Stephane Popinet * Cleanup of patches for Dirichlet/hypre Wed Nov 24 05:31:11 CET 2010 Sebastien Delaux * Poisson dirichlet test works with hypre Mon Nov 22 03:50:22 CET 2010 Sebastien Delaux * Poisson problem extraction works with Dirichlet BC Wed Feb 2 16:26:34 CET 2011 Stephane Popinet * New forced isotropic turbulence example Tue Feb 1 05:37:18 CET 2011 Stephane Popinet tagged 2011-01-31 Mon Jan 31 21:30:25 CET 2011 Stephane Popinet * Cosmetics for hypre module Mon Jan 31 13:14:40 CET 2011 Stephane Popinet * Cosmetics Mon Jan 31 11:24:08 CET 2011 Kristjan Gudmundsson * SpatialSum was missing factor L^dimension Mon Jan 31 12:51:24 CET 2011 Stephane Popinet * Important bug fix for diffusion. The scheme was not conservative in 3D on adaptive meshes. This bug was introduced by this patch: Thu Nov 4 18:33:10 CET 2010 J.M. Lopez-Herrera * New interface and implementation for gfs_cm_gradient() Sun Jan 30 20:57:52 CET 2011 Stephane Popinet * GfsConstant is an "init" event Sun Jan 30 05:39:24 CET 2011 Stephane Popinet tagged 2011-01-29 Sat Jan 29 21:49:34 CET 2011 Stephane Popinet * Bug fix for automatic parallel partitioning Sat Jan 29 20:47:05 CET 2011 Stephane Popinet * support for automatic partitioning in parallel Sat Jan 29 09:22:28 CET 2011 Stephane Popinet * Updated reference for electro test Fri Jan 28 21:33:04 CET 2011 Stephane Popinet * Bug fix for deallocation of function cache Fri Jan 28 16:12:30 CET 2011 Stephane Popinet * Bug fix for BCs of AdaptError Fri Jan 28 12:06:19 CET 2011 Stephane Popinet * Added terrain path to test suite script Thu Jan 27 16:59:26 CET 2011 Stephane Popinet * Added cache of already compiled GfsFunctions Thu Jan 27 16:23:58 CET 2011 Stephane Popinet * Need to be more careful when to update H for GfsRiver Thu Jan 27 10:07:05 CET 2011 Stephane Popinet * Fix for initialisation of variables in "leaf" boxes Wed Jan 26 17:17:14 CET 2011 Stephane Popinet * Bug fix for dependencies in BCs + load-balancing Tue Jan 25 15:02:53 CET 2011 Stephane Popinet * Option -s and -b/-p can be combined within a single gerris command Thu Jan 27 17:15:04 CET 2011 Stephane Popinet * Added MPI build for Centos/rhel in RPM spec Sat Jan 22 11:48:20 CET 2011 Stephane Popinet * Fixed gfv file for geo test case Mon Jan 24 15:28:36 CET 2011 Stephane Popinet * Bug fix for initialisation of dx() variables in parallel Thu Jan 20 15:27:44 CET 2011 Stephane Popinet * New Indian Ocean tsunami example Sat Jan 22 05:38:26 CET 2011 Stephane Popinet tagged 2011-01-21 Fri Jan 21 09:27:04 CET 2011 Stephane Popinet * Added *.mp4 to examples dependencies Fri Jan 21 05:40:53 CET 2011 Stephane Popinet tagged 2011-01-20 Thu Jan 20 21:59:28 CET 2011 Stephane Popinet * Fixed monai tsunami script Wed Nov 17 00:46:25 CET 2010 Sebastien Delaux * gfs2oogl now takes mapping and physical values into account Thu Jan 20 22:42:05 CET 2011 Stephane Popinet * Monai example also works in batch mode Thu Jan 20 15:27:09 CET 2011 Stephane Popinet * New Monai tsunami example Thu Jan 20 12:07:53 CET 2011 Stephane Popinet * Fixed inverse mapping when using several maps Thu Jan 6 17:14:10 CET 2011 Stephane Popinet * Cleanup of map_cubed_transform() Mon Nov 29 20:37:43 CET 2010 Sebastien Delaux * map_cubed_transform works for all faces Sat Jan 8 05:36:25 CET 2011 Stephane Popinet tagged 2011-01-07 Fri Jan 7 20:30:09 CET 2011 Stephane Popinet * Fix for column example Tue Jan 4 13:43:48 CET 2011 Stephane Popinet * New utility 'cloneubuntu' for buildservice Thu Jan 6 14:51:33 CET 2011 Stephane Popinet * New granular column collapse example Tue Jan 4 13:43:04 CET 2011 Stephane Popinet * Fixed netcdf header dependency in fes2004 Mon Dec 20 05:39:47 CET 2010 Stephane Popinet tagged 2010-12-19 Sun Dec 19 14:48:22 CET 2010 Stephane Popinet * Simplified volume source implementation Fri Dec 17 17:25:13 CET 2010 Stephane Popinet * SourceVolume is replaced with a modified GfsSource Fri Dec 17 16:51:59 CET 2010 Stephane Popinet * Cleanup of SourceVolume Fri Dec 17 16:43:47 CET 2010 Stephane Popinet * Cleanup of source test case Fri Dec 17 10:35:59 CET 2010 Daniel Fuster * sourcevolume object Wed Dec 15 17:00:51 CET 2010 Daniel Fuster * correction of units in particles and bubble modules Wed Dec 15 08:23:47 CET 2010 Daniel Fuster * source mass Tue Dec 7 15:57:14 CET 2010 Stephane Popinet * Cleanup of particulates module Thu Dec 2 00:16:01 CET 2010 Daniel Fuster * simplified method for gfsparticlefield Sat Nov 13 20:41:35 CET 2010 Daniel Fuster * Generalization of GfsParticulate Now GfsParticulate has as arguments the functions to define the void fraction field and the criteria for the cells where the function is applied. Wed Nov 10 14:20:30 CET 2010 Daniel Fuster * new GfsParticulateField object It allows to obtain the particle concentration field from a list of particles Fri Dec 17 05:39:22 CET 2010 Stephane Popinet tagged 2010-12-16 Thu Dec 16 16:47:49 CET 2010 Stephane Popinet * Bug fix for file flushing in GfsOutput Sat Dec 4 05:32:28 CET 2010 Stephane Popinet tagged 2010-12-03 Fri Dec 3 21:50:55 CET 2010 Stephane Popinet * GfsPoisson takes alpha into account Thu Dec 2 20:47:32 CET 2010 Stephane Popinet * Display diffusion statistics only for a positive number of iterations Thu Dec 2 21:28:15 CET 2010 Stephane Popinet * Bug fix for multiple module loading Fri Dec 3 17:25:40 CET 2010 Stephane Popinet * Minor cleanup of metric bug fix Fri Dec 3 09:29:19 CET 2010 Stephane Popinet * MacOSX needs the "-module" libtool flag Wed Nov 24 18:46:54 CET 2010 Stephane Popinet * InitVorticity should now work also in 3D Sun Nov 14 11:54:38 CET 2010 Daniel Fuster * Initialization of multiple modules in the header of a simulation file Fri Nov 12 14:15:27 CET 2010 Stephane Popinet * Linearised Euler solver Tue Nov 9 21:56:03 CET 2010 Sebastien Delaux * Fix for problems related to the "date line" in the lonlat mapping Fri Nov 12 05:34:02 CET 2010 Stephane Popinet tagged 2010-11-11 Thu Nov 11 21:00:30 CET 2010 Stephane Popinet * lonlat test case uses gfsview module Tue Nov 9 15:32:00 CET 2010 Stephane Popinet * Fixed spec file for CentOS Tue Nov 9 15:31:36 CET 2010 Stephane Popinet * Updated AUTHORS Tue Nov 9 09:25:31 CET 2010 Stephane Popinet * GfsDiffusion needs to maintain a consistent diffusion coefficient Even after the mesh has been adapted. Mon Nov 8 09:47:47 CET 2010 Stephane Popinet * Fixed GSL test in configure Sun Nov 7 18:22:41 CET 2010 Stephane Popinet * GfsBubble now belongs to a separate module Sun Nov 7 13:14:40 CET 2010 Daniel Fuster * GfsBubbles uses now the adaptive RK from GSL Fri Nov 5 14:05:24 CET 2010 J.M. Lopez-Herrera * Potential needs to be centered Fri Nov 5 11:28:22 CET 2010 J.M. Lopez-Herrera * New planar solid electrohydro test case Fri Nov 5 11:14:55 CET 2010 J.M. Lopez-Herrera * SourceElectric should now work with solids Thu Nov 4 18:33:10 CET 2010 J.M. Lopez-Herrera * New interface and implementation for gfs_cm_gradient() Wed Nov 3 17:56:27 CET 2010 J.M. Lopez-Herrera * Planar electrohydro test case Thu Nov 4 12:24:38 CET 2010 jmlopezherrera@gmail.com * gfs_cm_gradient Fri Jul 16 14:51:52 CEST 2010 jmlopezherrera@gmail.com * planar capacitor case (incomplete) Thu Jul 15 15:40:31 CEST 2010 jmlopezherrera@gmail.com * minus_gradient take into account mixed cells Fri Nov 5 23:25:01 CET 2010 Stephane Popinet * Fix for event() method of GfsBubble + cosmetics Tue Nov 2 11:50:08 CET 2010 Daniel Fuster * Gfsbubble object Now the particles can represent compressible spherical bubbles Thu Oct 28 13:10:00 CEST 2010 Daniel Fuster * Adaptive 4/5 Runge Kutta method Fri Nov 5 22:10:59 CET 2010 Stephane Popinet * Cleanup of GfsSpatialSum Tue Jul 27 13:17:22 CEST 2010 kristjang@gmail.com * Addition of EventSpatialSum Fri Nov 5 09:00:45 CET 2010 Stephane Popinet * Cosmetics for bump test case Fri Nov 5 08:37:08 CET 2010 Stephane Popinet * GfsSourceCharge has been replaced with GfsSourceDiffusionExplicit Thu Nov 4 16:35:26 CET 2010 Stephane Popinet * Checks for boundaries for Poisson + dirichlet conditions Mon Jul 12 15:05:40 CEST 2010 jmlopezherrera@gmail.com * popinet patch trasferred to electrohydro Wed Nov 3 16:29:56 CET 2010 J.M. Lopez-Herrera * Cosmetics for electrohydro test cases Fri Nov 5 05:40:30 CET 2010 Stephane Popinet * Improved and simplified flushing for GfsOutput Fri Nov 5 05:32:02 CET 2010 Stephane Popinet tagged 2010-11-04 Thu Nov 4 12:42:41 CET 2010 Stephane Popinet * New tracer diffusion test case Thu Nov 4 12:41:09 CET 2010 Stephane Popinet * Explicit diffusion should now work together with GfsSolid Wed Nov 3 06:06:38 CET 2010 Stephane Popinet * Generalised SourceDiffusionExplicit This can be used e.g. to replace SourceCharge in electrohydro. This is also a preliminary implementation for explicit diffusion with immersed solid boundaries. Wed Oct 20 06:31:20 CEST 2010 Stephane Popinet tagged 2010-10-19 Tue Oct 19 11:35:12 CEST 2010 Stephane Popinet * CFL condition takes sinking velocity into account Fri Oct 15 02:19:53 CEST 2010 Sebastien Delaux * Tracers can now have a sinking velocity Fri Jul 30 01:30:13 CEST 2010 Sebastien Delaux * Fix for VOF with moving boundaries Tue Sep 21 07:29:54 CEST 2010 Stephane Popinet tagged 2010-09-16 Thu Sep 16 13:55:42 CEST 2010 Stephane Popinet * Fix for kdt on 32-bits systems Wed Sep 8 14:47:08 CEST 2010 Stephane Popinet * More statistics in verbose mode for xyz2kdt Wed Sep 8 11:54:27 CEST 2010 Stephane Popinet * Added options to xyz2kdt and made xyz2rsurface obsolete Wed Sep 8 07:29:00 CEST 2010 Stephane Popinet tagged 2010-09-07 Tue Sep 7 14:02:54 CEST 2010 Stephane Popinet * Bug fix for kdt Tue Sep 7 07:29:53 CEST 2010 Stephane Popinet tagged 2010-09-06 Mon Sep 6 16:19:21 CEST 2010 Stephane Popinet * Added progress indicator to kdtree Sun Aug 22 21:35:35 CEST 2010 Stephane Popinet * New "kdtree" implementation for terrain databases Thu Jul 22 07:29:29 CEST 2010 Stephane Popinet tagged 2010-07-21 Thu Jul 22 00:56:55 CEST 2010 Stephane Popinet * Keyword generation for externally installed modules Wed Jul 21 06:20:10 CEST 2010 Stephane Popinet tagged 2010-07-20 Tue Jul 20 23:48:52 CEST 2010 Stephane Popinet * Increased tolerance for Poisson test case runtimes Tue Jul 20 02:58:53 CEST 2010 Stephane Popinet * General functions for file-format string formatting Tue Jul 20 02:56:42 CEST 2010 Stephane Popinet * Parallel cylinder example uses OutputView Tue Jul 20 00:15:42 CEST 2010 Sebastien Delaux * Parallel restart from several simulation files Tue Jul 20 05:53:06 CEST 2010 Stephane Popinet tagged 2010-07-17 Mon Jul 19 08:18:19 CEST 2010 Stephane Popinet * New atomisation example Sat Jul 17 18:00:23 CEST 2010 Stephane Popinet tagged 2010-07-17 Sat Jul 17 09:25:20 CEST 2010 Stephane Popinet * Fix for boundaries entirely contained within solids Sat Jul 17 08:51:27 CEST 2010 Stephane Popinet * Improved error message when reading 2D file with 3D code Sat Jul 17 08:27:13 CEST 2010 Stephane Popinet * Fix for inconsistent box positions when using periodic BC Sat Jul 17 06:09:29 CEST 2010 Stephane Popinet * OutputSolidForce should now work in parallel Fri Jul 16 01:48:57 CEST 2010 Sebastien Delaux * OutputLocation should now work in parallel Fri Jul 16 02:47:02 CEST 2010 Stephane Popinet * It should now be possible to restart (large) parallel simulations Wed Jul 14 18:01:30 CEST 2010 Stephane Popinet tagged 2010-07-14 Wed Jul 14 06:34:35 CEST 2010 Stephane Popinet * Bug fix for partitioning with '-d' option Wed Jul 14 05:21:10 CEST 2010 Stephane Popinet * Cosmetics Wed Jul 14 05:19:55 CEST 2010 Stephane Popinet * Added checks for consistency of partitioning Sat Jul 10 09:09:14 CEST 2010 Stephane Popinet * Important bug fix for point location in parallel This fixes several VOF issues in parallel. Sat Jul 10 09:09:48 CEST 2010 Stephane Popinet tagged 2010-07-10 Sat Jul 10 02:29:51 CEST 2010 Stephane Popinet * Gerris syntax highlighting for GeSHi Thu Jul 8 12:27:38 CEST 2010 Stephane Popinet * SourceControlField uses a relaxation timescale Fri Jul 9 06:10:22 CEST 2010 Stephane Popinet tagged 2010-07-08 Thu Jul 8 23:42:32 CEST 2010 Stephane Popinet * Fixed formatting of poisson/dirichlet test case Thu Jul 8 08:05:48 CEST 2010 Stephane Popinet * Added missing dependency for rpm spec Wed Jul 7 12:51:13 CEST 2010 Stephane Popinet * New Poisson test case with Dirichlet boundary conditions Wed Jul 7 11:52:35 CEST 2010 Stephane Popinet * GfsPoisson should now work with Dirichlet boundary conditions Wed Jul 7 05:23:58 CEST 2010 Stephane Popinet * GfsOutput takes an optional weight (only used by OutputScalarSum for now) Wed Jul 7 05:22:28 CEST 2010 Stephane Popinet * New functions dsx(), dsy(), dsz() and flux() Fri Jul 2 17:11:31 CEST 2010 Stephane Popinet tagged 2010-07-02 Fri Jul 2 10:23:33 CEST 2010 Stephane Popinet * Simplified 3D Coriolis implementation Wed Jun 30 22:48:48 CEST 2010 Sebastien Delaux * Generalisation of Coriolis to 3D Thu Jul 1 08:45:21 CEST 2010 Stephane Popinet tagged 2010-06-30 Wed Jun 30 11:51:56 CEST 2010 Stephane Popinet * Added checks for bump and cylinder test cases Wed Jun 30 08:00:54 CEST 2010 Stephane Popinet * Added comparison with reference for 'bump' test case Tue Jun 29 14:51:50 CEST 2010 "Jose Lopez-Herrera Sanchez" * bump test modified Tue Jun 29 11:08:38 CEST 2010 "Jose Lopez-Herrera Sanchez" * cylinder test Thu Jun 10 01:00:13 CEST 2010 Stephane Popinet * Formatting fixes for new 'bump' test case Thu Jun 10 00:22:01 CEST 2010 Stephane Popinet * Changed gfs_poisson_coefficients() interface to allow for zero coefficients Thu Jun 10 00:11:46 CEST 2010 Stephane Popinet * Rolled back change for zero conductivity Wed Jun 9 18:05:13 CEST 2010 "Jose Lopez-Herrera Sanchez" * Allows isolating mediums Mon Jun 7 19:11:41 CEST 2010 "Jose Lopez-Herrera Sanchez" * another test case Tue Jun 29 18:03:43 CEST 2010 Stephane Popinet tagged 2010-06-29 Tue Jun 29 03:56:05 CEST 2010 Stephane Popinet * SourceControlField uses smooth forcing field Mon Jun 28 18:03:36 CEST 2010 Stephane Popinet tagged 2010-06-27 Sun Jun 27 03:07:14 CEST 2010 Stephane Popinet * New function gfs_enable_floating_point_exceptions() Fri Jun 25 10:26:12 CEST 2010 Stephane Popinet tagged 2010-06-25 Fri Jun 25 03:56:05 CEST 2010 Stephane Popinet * Fixed typo in examples template Wed Jun 23 07:10:07 CEST 2010 Stephane Popinet * Minor cleanup of coriolis test case Wed Jun 23 05:38:41 CEST 2010 Stephane Popinet * Various fixes for GfsOutputObject Tue Jun 22 21:59:44 CEST 2010 Sebastien Delaux * New Coriolis test case Fri Jun 18 01:26:40 CEST 2010 Sebastien Delaux * Important fix in particulate module Fri Jun 18 00:47:48 CEST 2010 Sebastien Delaux * New GfsOutputObject object Wed Jun 23 01:41:11 CEST 2010 Stephane Popinet * Optimised movies for plateau examples Mon Jun 21 06:16:56 CEST 2010 Stephane Popinet tagged 2010-06-20 Sun Jun 20 23:23:31 CEST 2010 Stephane Popinet * Fixes tex path for tests doc Sun Jun 20 12:14:55 CEST 2010 Stephane Popinet * Added doc support for embedded videos Sun Jun 20 10:33:24 CEST 2010 Stephane Popinet * ogg video does not like some resolutions Sun Jun 20 04:11:54 CEST 2010 Stephane Popinet * CSS style for tests and examples matched wiki Sun Jun 20 04:04:10 CEST 2010 Stephane Popinet * plateau example uses embedded videos Sun Jun 20 04:03:50 CEST 2010 Stephane Popinet * replaced cortado with kaltura javascript Fri Jun 18 12:49:03 CEST 2010 Stephane Popinet * New 'video' tag for latex/hevea docs Thu Jun 17 18:06:09 CEST 2010 Stephane Popinet tagged 2010-06-17 Thu Jun 17 05:06:12 CEST 2010 Stephane Popinet * Fixed wavewatch module for older POSIX systems Wed Jun 16 06:45:47 CEST 2010 Sebastien Delaux * VOF and moving boundary can now work together Sun Jun 13 23:19:07 CEST 2010 Sebastien Delaux * Bug fix for parallel moving boundaries Wed Jun 16 10:13:36 CEST 2010 Stephane Popinet * Fix for units of variance in GfsEventHarmonic Wed Jun 16 10:11:22 CEST 2010 Stephane Popinet * Fix for implicit GfsSourceCoriolis Wed Jun 16 10:07:04 CEST 2010 Stephane Popinet * Fixes for NODATA values in gradient computations Wed Jun 16 01:39:27 CEST 2010 Stephane Popinet * Fixes for better C99 compliance Thu Jun 10 17:10:48 CEST 2010 Stephane Popinet tagged 2010-06-09 Thu Jun 10 00:25:21 CEST 2010 Sebastien Delaux * More solvers can be used in the Hypre module Wed Jun 9 23:33:19 CEST 2010 Sebastien Delaux * Fix in hypre tolerance in parallel Wed Jun 9 17:16:54 CEST 2010 Stephane Popinet tagged 2010-06-09 Wed Jun 9 04:48:51 CEST 2010 Stephane Popinet * Minor fixes related to hypre module Tue Jun 8 04:18:04 CEST 2010 Sebastien Delaux * Hypre now works in Parallel Tue Jun 8 04:10:09 CEST 2010 Sebastien Delaux * Bug fix with Hypre Thu May 27 02:55:23 CEST 2010 Sebastien Delaux * Quick fix for moving boundaries in parallel Thu May 27 02:14:06 CEST 2010 Sebastien Delaux * New numbered vertex class Mon Jun 7 17:15:59 CEST 2010 Stephane Popinet tagged 2010-06-07 Mon Jun 7 10:52:29 CEST 2010 Stephane Popinet * Somehow fesetenv() lead to a large decrease in performance Sun Jun 6 10:09:12 CEST 2010 Stephane Popinet * gfs_restore_floating_point_exceptions() restores initial state Mon Jun 7 04:50:03 CEST 2010 Stephane Popinet * New 'plateau' example Wed Jun 2 18:25:21 CEST 2010 Stephane Popinet tagged 2010-06-02 Wed Jun 2 04:56:24 CEST 2010 Stephane Popinet * Updated test cases references for optimised adaptivity Tue Jun 1 10:27:13 CEST 2010 Stephane Popinet * Parallel versions for OutputPPM and OutputGRD Tue Jun 1 06:50:01 CEST 2010 Stephane Popinet * Optimisation for adaptivity on parallel boundaries Tue Jun 1 05:01:15 CEST 2010 Stephane Popinet * GfsDischargeElevation replaces GfsBoundaryDischarge (and also works in parallel) Tue Jun 1 02:35:44 CEST 2010 Stephane Popinet * New object GfsDischargeElevation Mon May 31 12:14:16 CEST 2010 Stephane Popinet * New object GfsConstant Sat May 29 18:18:29 CEST 2010 Stephane Popinet tagged 2010-05-29 Sat May 29 11:36:12 CEST 2010 Stephane Popinet * Important bug fix for adaptivity in parallel (initial conditions) Sat May 29 11:38:54 CEST 2010 Stephane Popinet * Improved error checking for 'electro' test case Sat May 29 05:35:09 CEST 2010 Stephane Popinet * New object GfsOutputPotentialStats Sat May 29 08:11:31 CEST 2010 Stephane Popinet tagged 2010-05-27 Thu May 27 23:41:17 CEST 2010 Stephane Popinet * New electrohydrodynamics test case Thu May 27 11:24:36 CEST 2010 Stephane Popinet * ElectroHydro reuses gfs_poisson_solve() Thu May 27 11:18:37 CEST 2010 Stephane Popinet * New function gfs_poisson_compatibility() Thu May 27 11:17:25 CEST 2010 Stephane Popinet * New "relative" option for GfsEventStop Thu May 27 11:16:26 CEST 2010 Stephane Popinet * Fixed GfsSourceCharge to make it conservative on non-regular meshes It is important to use gfs_face_weighted_gradient() rather than just gfs_face_gradient() in this case. Thu May 27 11:11:13 CEST 2010 Stephane Popinet * Fixed inconsistent timesteping for the potential in ElectroHydro Wed May 26 11:30:58 CEST 2010 Stephane Popinet * Renamed electro_hydro to electrohydro for consistency Wed May 26 02:06:45 CEST 2010 Stephane Popinet * Simplified GfsElectroHydroAxi This could also work with other orthogonal mappings. Tue May 25 10:05:12 CEST 2010 jose.lopez.herrera.s@gmail.com * GfsElectroHydroAxi Wed May 26 18:22:29 CEST 2010 Stephane Popinet tagged 2010-05-25 Wed May 26 00:07:12 CEST 2010 Stephane Popinet * Fixed floating-point exceptions in wavewatch module and GfsOcean Wed May 26 00:06:40 CEST 2010 Stephane Popinet * Updated AUTHORS Tue May 25 06:46:05 CEST 2010 Stephane Popinet * Updated parabola test case reference Tue May 25 06:43:09 CEST 2010 Stephane Popinet * Text-format GfsSimulation output takes "depth" option into account Tue May 25 06:42:06 CEST 2010 Stephane Popinet * Interpolation functions ignore NODATA values Tue May 25 06:40:13 CEST 2010 Stephane Popinet * Catch user-generated floating-point exceptions Tue May 25 05:52:26 CEST 2010 Stephane Popinet * Fixed 3D terrain refinement Fri May 21 12:28:52 CEST 2010 Stephane Popinet * Bug fixes for emacs mode Wed May 19 14:03:39 CEST 2010 Stephane Popinet * Traps on FPE_INVALID as well as FE_DIVBYZERO (i.e. nan and inf) Fri May 21 07:00:58 CEST 2010 Stephane Popinet * Improved initialisation of shallow refined cells for GfsRiver Fri May 21 06:06:36 CEST 2010 Stephane Popinet * New object GfsVariableAge Thu May 20 23:37:00 CEST 2010 Stephane Popinet * SourceCoriolis uses backward Euler scheme for GfsRiver Thu May 20 06:41:46 CEST 2010 Stephane Popinet * Use new GFS_NODATA macro where appropriate Wed May 19 18:20:07 CEST 2010 Stephane Popinet tagged 2010-05-19 Wed May 19 07:30:02 CEST 2010 Stephane Popinet * Updated test cases references for improved adaptivity Wed May 19 05:25:20 CEST 2010 Stephane Popinet * Improved statistics for xyz2rsurface and rsurfaceinfo Tue May 18 05:01:20 CEST 2010 Stephane Popinet * Added 'randomize' option to xyz2rsurface Tue May 18 03:54:28 CEST 2010 Stephane Popinet * Added modules keywords to emacs mode Tue May 18 02:24:00 CEST 2010 Stephane Popinet * Fix for comment handling in emacs mode Sat May 15 23:34:03 CEST 2010 Stephane Popinet * Fixed rpm specfile for emacs mode Fri May 14 04:58:43 CEST 2010 Stephane Popinet * Fixed redundant coarsening/refinement in gfs_simulation_adapt() Note also that ftt_refine_corner() works differently now. Sat May 15 18:20:49 CEST 2010 Stephane Popinet tagged 2010-05-15 Sat May 15 12:15:49 CEST 2010 Stephane Popinet * Automatic keyword detection for modules Sat May 15 08:48:15 CEST 2010 Stephane Popinet * New gerris emacs mode Sat May 15 02:27:17 CEST 2010 Stephane Popinet * R*-tree files are properly closed in read-only mode This could cause "too many open files" obscure bugs when piping into GfsView. Fri May 14 16:30:22 CEST 2010 Stephane Popinet tagged 2010-05-14 Fri May 14 05:45:25 CEST 2010 Stephane Popinet * Fixed scaling changes to electro_hydro module Tue May 11 17:13:09 CEST 2010 jose.lopez.herrera.s@gmail.com * L dimension fixed unnecessary call removed Thu May 13 16:30:37 CEST 2010 Stephane Popinet tagged 2010-05-13 Thu May 13 06:52:33 CEST 2010 Stephane Popinet * New object GfsBoundaryDischarge Thu May 13 06:53:25 CEST 2010 Stephane Popinet * Unified verbosity of xyz2rsurface and rsurfaceinfo Thu May 13 01:35:41 CEST 2010 Stephane Popinet * Added stub for GfsElectroHydroAxi Wed May 12 23:42:00 CEST 2010 Stephane Popinet * Improved error reporting for module loading Tue May 11 16:30:02 CEST 2010 Stephane Popinet tagged 2010-05-11 Tue May 11 06:55:55 CEST 2010 Stephane Popinet * gfs_domain_remove_ponds() uses FIFO rather than recursive function calls Sun May 9 16:35:21 CEST 2010 Stephane Popinet tagged 2010-05-05 Thu May 6 01:41:46 CEST 2010 Stephane Popinet * New object GfsMapTransform Thu May 6 01:39:43 CEST 2010 Stephane Popinet * OutputGRD computes xll,yll automatically Thu May 6 00:18:47 CEST 2010 Stephane Popinet * GfsVariableTerrain defines new "n", "dmax", "dmin" variables Tue May 4 17:35:55 CEST 2010 Stephane Popinet tagged 2010-05-04 Tue May 4 04:07:54 CEST 2010 Stephane Popinet * New GfsOutputGRD object Thu Apr 22 17:37:54 CEST 2010 Stephane Popinet tagged 2010-04-21 Wed Apr 21 04:03:30 CEST 2010 Sebastien Delaux * Rescaling of the residual tolerance for hypre Fri Apr 16 17:36:09 CEST 2010 Stephane Popinet tagged 2010-04-15 Fri Apr 16 00:25:40 CEST 2010 Stephane Popinet * New "bagnold" test case Fri Apr 16 04:36:24 CEST 2010 Stephane Popinet tagged 2010-04-15 Thu Apr 15 06:59:29 CEST 2010 Stephane Popinet * Pressure gradient should now balance source terms at Dirichlet boundaries Thu Apr 15 06:56:40 CEST 2010 Stephane Popinet * Minor cleanup Thu Apr 8 08:19:12 CEST 2010 Stephane Popinet * Fixed bug when splitting domains with periodic boundaries Wed Apr 7 23:26:36 CEST 2010 Stephane Popinet * Added boundary conditions for "-e" option of gerris2D/3D Wed Apr 7 17:43:50 CEST 2010 Stephane Popinet tagged 2010-04-07 Wed Apr 7 04:02:11 CEST 2010 Stephane Popinet * Pressures for small cells are merged for GfsOcean Sun Apr 4 17:42:56 CEST 2010 Stephane Popinet tagged 2010-04-04 Sun Apr 4 10:16:56 CEST 2010 Stephane Popinet * Improvements for 'daily' snapshot script Sat Apr 3 10:55:45 CEST 2010 Stephane Popinet * Fixed dimensioning for electro_hydro Sat Apr 3 10:55:33 CEST 2010 Stephane Popinet * Minor cleanup of electro_hydro module Sat Apr 3 09:48:01 CEST 2010 Jose M. Lopez-Herrera Sanchez * Module for electro-hydrodynamics Sun Apr 4 05:58:26 CEST 2010 Stephane Popinet tagged 2010-04-03 Sat Apr 3 23:11:47 CEST 2010 Stephane Popinet * Fixed url in poisson test case Sat Apr 3 14:06:25 CEST 2010 Stephane Popinet * Refactored GfsStencil/GfsStencilElement Fri Apr 2 11:09:23 CEST 2010 Stephane Popinet * Updated poisson test cases Fri Apr 2 11:07:06 CEST 2010 Stephane Popinet * Simplified GfsLinearProblem Fri Apr 2 09:35:54 CEST 2010 Stephane Popinet * Further fixes to the hypre module Fri Apr 2 09:33:13 CEST 2010 Stephane Popinet * Test cases do not need the "donotrun" variable being set anymore Thu Apr 1 05:25:27 CEST 2010 Stephane Popinet * Fixed malloc for df3 module Wed Mar 31 03:20:03 CEST 2010 Stephane Popinet * Fixed 'Tn' coarse->fine interpolation Wed Mar 31 01:21:45 CEST 2010 Stephane Popinet * Cleanup and bug fixes for hypre module Wed Mar 31 01:00:46 CEST 2010 Stephane Popinet * Bug fix for incorrect use of GPOINTER_TO_UINT This could cause crashes on 64 bits systems (e.g. when using GfsEventHarmonic) Tue Mar 30 04:14:22 CEST 2010 Stephane Popinet * Updated poisson test cases for hypre Thu Mar 25 01:45:02 CET 2010 Sebastien Delaux * GArrays are passed as argument to hypre Thu Mar 25 00:00:18 CET 2010 Sebastien Delaux * Upgrade of circle test case Wed Mar 24 23:57:33 CET 2010 Sebastien Delaux * Upgrade of dumbell and poisson test cases Wed Mar 24 21:41:29 CET 2010 Sebastien Delaux * Fix of bug with boundary conditions in gfs_get_poisson_problem Wed Mar 24 05:06:02 CET 2010 Sebastien Delaux * Bug fix Wed Mar 24 00:52:53 CET 2010 Sebastien Delaux * Cleaning plus documenting Tue Mar 23 21:57:33 CET 2010 Sebastien Delaux * No more GfsStencil structure. Methods are kept as they improve the readability of the code Tue Mar 23 09:35:46 CET 2010 Sebastien Delaux * Poisson solver iterations are now done within the gfs_poisson_solve function Tue Mar 23 04:49:16 CET 2010 Sebastien Delaux * Change of structure for the methods of GfsLinearProblem and GfsStencil Tue Mar 23 03:00:34 CET 2010 Sebastien Delaux * Cleaner of timer and renaming of functions in hypre module Tue Mar 23 02:36:39 CET 2010 Sebastien Delaux * GfsLinearProblem and GfsStencil are now objects with methods Mon Mar 22 21:56:12 CET 2010 Sebastien Delaux * New function that deals with the boundary stencils Mon Mar 22 21:30:12 CET 2010 Sebastien Delaux * New methods to create a GfsLinearProblem Mon Mar 22 20:56:30 CET 2010 Sebastien Delaux * merging of relax_coeff_stencil and relax_coeff_stencil_2D Mon Mar 22 20:54:42 CET 2010 Sebastien Delaux * Change of name of functions used to extract the stencils associated with the poisson problem Mon Mar 22 05:56:50 CET 2010 Sebastien Delaux * No more useless bc_stencil routines Mon Mar 22 05:44:31 CET 2010 Sebastien Delaux * Change of name of hypre module Mon Mar 22 04:04:02 CET 2010 Sebastien Delaux * Replace calloc by malloc in hypre module Mon Mar 22 04:02:00 CET 2010 Sebastien Delaux * Change of name for the main structures associated with the extraction of the poisson problem Thu Mar 18 20:37:58 CET 2010 Sebastien Delaux * Change of name of the hypre module Thu Mar 18 20:20:41 CET 2010 Sebastien Delaux * Fix of hypre test case Thu Mar 18 20:10:06 CET 2010 Sebastien Delaux * Small bug fix Thu Mar 11 21:44:02 CET 2010 Sebastien Delaux * More simplify/cleaning in for get_poisson_problem Thu Mar 11 21:25:12 CET 2010 Sebastien Delaux * Simplification of some the coefficient extraction routines Thu Mar 11 20:07:05 CET 2010 Sebastien Delaux * HUGE PATCH: The whole hypre/poisson problem extraction has been rewritten Thu Feb 4 03:32:15 CET 2010 Sebastien Delaux * poisson_cycle function can have their own internal convergence criterion Thu Feb 4 03:29:17 CET 2010 Sebastien Delaux * Hypre module: Change of the read/write functions Wed Jan 27 05:46:39 CET 2010 Sebastien Delaux * Separate loop for Gerris or other solvers for projection Wed Jan 27 04:08:54 CET 2010 Sebastien Delaux * Bug fix + cleaning Wed Jan 27 04:08:02 CET 2010 Sebastien Delaux * Homogeneous symmetry boundary conditions for poisson problem extraction Wed Jan 27 02:45:50 CET 2010 Sebastien Delaux * Homogeneous Neumann boundary conditions for poisson problem extraction Wed Jan 27 02:37:18 CET 2010 Sebastien Delaux * Homogeneous Dirichlet boundary conditions for poisson problem extraction Wed Jan 27 02:36:18 CET 2010 Sebastien Delaux * New function gfs_add_boundary_element equivalent to add_diagonal_element for ghost cells Wed Jan 27 02:30:19 CET 2010 Sebastien Delaux * Slight change in add_diagional_element Wed Jan 27 02:26:24 CET 2010 Sebastien Delaux * Export of add_stencil_element function Fri Jan 22 05:36:39 CET 2010 Sebastien Delaux * Poisson problem extraction: number of the ghost cells Fri Jan 22 04:55:06 CET 2010 Sebastien Delaux * Poisson solver test for the hypre library. The only things that is working so far Fri Jan 22 04:47:35 CET 2010 Sebastien Delaux * All the functions related to the native poisson solver are modified to extract the rest of the poisson solver on the fly Thu Jan 21 05:27:52 CET 2010 Sebastien Delaux * A bit of cleaning Thu Jan 21 05:13:48 CET 2010 Sebastien Delaux * Hyprepoissonsolvers: the hypre poisson cycle is put together Thu Jan 21 05:06:18 CET 2010 Sebastien Delaux * Hyprepoissonsolvers: functions setting up and running Pre-Conjugate Gradient Thu Jan 21 05:02:47 CET 2010 Sebastien Delaux * Hyprepoissonsolvers: functions setting up and running Boomer-AMG Thu Jan 21 05:01:16 CET 2010 Sebastien Delaux * Hyprepoissonsolvers: main loop call the hypre solver Thu Jan 21 04:57:48 CET 2010 Sebastien Delaux * Hyprepoissonsolvers: functions used to setup the hypre solver and extract the results Thu Jan 21 04:52:30 CET 2010 Sebastien Delaux * Read and write methods for the hypre solvers in the hypre module Thu Jan 21 03:53:12 CET 2010 Sebastien Delaux * Check is hypre is compiled and creates the new module file Thu Jan 21 03:29:13 CET 2010 Sebastien Delaux * Hooks for the poisson_cycle + read/write methods for the parameters Wed Dec 23 00:17:01 CET 2009 Sebastien Delaux * Relax and Relax2D extract the diagonal of the problem if cp->id exists Wed Dec 23 00:06:52 CET 2009 Sebastien Delaux * Two functions are exported allowing to get and destroy the poisson problem Get_poisson has a similar structure to the standard poisson_cycle Prior to extraction all the leafs cell (i.e. diagonal elements) get numbered according to their position in the quadtree Tue Dec 22 23:47:56 CET 2009 Sebastien Delaux * Creation of the main function used to extract the poisson problem The poisson problem will be build as a list of DiagonalElements Each DiagonalElement will have a stencil made of a list of StencilElement Tue Dec 22 23:35:40 CET 2009 Sebastien Delaux * Creation of new structures to extract the poisson problem created by Gerris Tue Mar 30 04:49:07 CEST 2010 Stephane Popinet * Moved repositories to patch-tag.com Fri Mar 26 11:51:16 CET 2010 Stephane Popinet tagged 2010-03-25 Thu Mar 25 02:10:04 CET 2010 Stephane Popinet * New 'implicit' option for GfsSurface Tue Mar 23 21:10:14 CET 2010 Sebastien Delaux * Test on viscosity in the particulate module Tue Mar 23 02:15:32 CET 2010 Stephane Popinet * CFL limitation for GfsRiver Tue Mar 23 02:09:39 CET 2010 Stephane Popinet * Simplified 1D Saint-Venant examples Tue Mar 23 02:07:19 CET 2010 Stephane Popinet * Updated 'classes' Tue Mar 23 02:05:23 CET 2010 Stephane Popinet * Removed obsolete "2D3" version Mon Mar 22 22:15:44 CET 2010 Stephane Popinet * Added openmpi-devel dependency for RPM Sun Mar 21 22:43:12 CET 2010 Stephane Popinet * Fixed use of g_array_free() for compatibility with older glib Sat Jan 16 03:55:12 CET 2010 Stephane Popinet * New keyword GfsInclude Sun Mar 21 14:56:56 CET 2010 Stephane Popinet * old tag: 2010-03-21 Sat Mar 20 14:55:51 CET 2010 Stephane Popinet * old tag: 2010-03-20 Fri Mar 19 14:55:10 CET 2010 Stephane Popinet * old tag: 2010-02-23 Thu Mar 18 14:57:41 CET 2010 Stephane Popinet * old tag: 2010-03-18 Wed Mar 17 14:18:06 CET 2010 Stephane Popinet * old tag: 2010-03-17 Sun Mar 21 08:34:58 CET 2010 Stephane Popinet * Added conflicts with default debian package Sat Mar 20 05:18:06 CET 2010 Stephane Popinet * Moved library files in devel package for RPMs Fri Mar 19 04:15:36 CET 2010 Stephane Popinet * Fixed daily script for OSC Thu Mar 18 08:22:25 CET 2010 Stephane Popinet * Updated packaging rules for debian and buildservice Tue Mar 16 23:54:19 CET 2010 Stephane Popinet * Updated conservation error for test/shear/curvature Wed Mar 17 08:21:32 CET 2010 Stephane Popinet * Updated logo example (uses 'condition' in OutputPPM) Tue Mar 16 04:12:51 CET 2010 Stephane Popinet * Switched from launchpad to buildservice Tue Mar 16 04:04:49 CET 2010 Stephane Popinet * Added buildservice-snapshot makefile target Tue Mar 16 00:45:39 CET 2010 Stephane Popinet * Updated test case references Fri Dec 18 09:20:19 CET 2009 Stephane Popinet * Adaptivity is applied at the initialisation stage Sun Mar 14 01:07:39 CET 2010 Stephane Popinet * Fixed version info for debian symbols Sat Mar 13 06:09:24 CET 2010 Stephane Popinet * Changed RPM spec file for build service Sat Jan 30 19:34:22 CET 2010 Stephane Popinet * old tag: 2010-01-29 Thu Jan 14 15:29:46 CET 2010 Stephane Popinet * old tag: 2010-01-14 Sat Dec 19 15:15:16 CET 2009 Stephane Popinet * old tag: 2009-12-18 Wed Feb 24 23:59:08 CET 2010 Stephane Popinet * Fixed inconsistent (adaptive) H variable in GfsOcean Tue Feb 23 04:30:24 CET 2010 Stephane Popinet * New superbee and Sweby limiters Tue Feb 23 04:28:23 CET 2010 Stephane Popinet * OutputLocation takes optional "interpolate" parameter Mon Feb 15 23:04:42 CET 2010 Stephane Popinet * Fixed warning in vof.c for 2D3 Mon Feb 8 10:54:08 CET 2010 Stephane Popinet * Height of adapted dry cells is set to zero for VariableTerrain Fri Feb 5 02:49:25 CET 2010 Stephane Popinet * MPICH2 is picky about MPI_Allgather() Mon Feb 1 21:36:55 CET 2010 Andris Rudzitis * New module df3 (GfsOutputPovrayDF3) Mon Dec 21 21:16:05 CET 2009 Stephane Popinet * Open Dynamics Engine module Wed Feb 3 08:44:52 CET 2010 Stephane Popinet * Changed ubuntu distribution to jaunty Mon Feb 1 22:21:39 CET 2010 Stephane Popinet * OutputScalar takes an optional condition Mon Feb 1 08:37:41 CET 2010 Stephane Popinet * New GfsFunction utility function "distance()" Tue Jan 26 03:25:54 CET 2010 Stephane Popinet * New object GfsInitMask Fri Jan 29 11:37:37 CET 2010 Stephane Popinet * OutputLocation takes 'precision' and 'label' options Thu Jan 28 02:41:20 CET 2010 Stephane Popinet * New command rsurfaceinfo Wed Jan 27 09:45:34 CET 2010 Stephane Popinet * Fix for terrain and longitude periodicity Tue Jan 26 03:15:19 CET 2010 Stephane Popinet * Important bug fix for ftt_cell_coarsen() Tue Jan 26 01:06:05 CET 2010 Stephane Popinet * xyz2rsurface is more verbose Thu Jan 21 03:25:07 CET 2010 Stephane Popinet * ppm2video overwrites existing files by default Thu Jan 21 03:23:43 CET 2010 Stephane Popinet * New object GfsVariableBoolean Wed Jan 20 22:53:37 CET 2010 Stephane Popinet * Optimisations for okada module Fri Jan 15 08:58:11 CET 2010 Stephane Popinet * Better warning for GfsEventScript Thu Jan 14 21:15:51 CET 2010 Stephane Popinet * Made 'dry' parameter of GfsRiver dimensional Mon Dec 21 09:53:38 CET 2009 Stephane Popinet * Okada fault model module Thu Jan 14 02:16:08 CET 2010 Stephane Popinet * Removed GFS_RIVER_DRY and turned it into a parameter Wed Jan 13 05:31:49 CET 2010 Stephane Popinet * Removed useless dependency on g_array_sized_new() Fri Dec 18 01:59:37 CET 2009 Stephane Popinet * Bug fix for "lake-at-rest" terrain reconstruction Fri Dec 11 15:24:05 CET 2009 Stephane Popinet tagged 2009-12-10 Thu Dec 10 05:01:23 CET 2009 Stephane Popinet * GfsDropletToParticle is now part of the particulates module Thu Dec 10 04:43:06 CET 2009 Stephane Popinet * Review and bug fixes for GfsParticle Thu Dec 10 04:41:40 CET 2009 Stephane Popinet * Review of particulates.mod module Fri Nov 20 20:34:02 CET 2009 Gaurav Tomar * DropletToParticlesMinorModifications Fri Nov 20 20:27:23 CET 2009 Gaurav Tomar * DropletToParticlesObject Fri Nov 20 20:25:48 CET 2009 Gaurav Tomar * ParticulateList with idlast variable for unique id specification Wed Nov 18 16:36:15 CET 2009 Gaurav Tomar * particulateObjects Wed Nov 18 16:18:00 CET 2009 Gaurav Tomar * particlemodifications Tue Nov 10 17:58:20 CET 2009 Gaurav Tomar * ObjectParticleModifications Fri Nov 6 13:39:00 CET 2009 Gaurav Tomar * Gfs(Event)Particle object Tue Nov 17 17:43:24 CET 2009 Gaurav Tomar * bug fix HashTable event objects Mon Nov 16 19:15:37 CET 2009 Gaurav Tomar * HashTable LookUp for Event objects Tue Nov 10 15:10:05 CET 2009 Stephane Popinet * old tag: 2009-11-09 Tue Nov 3 15:10:08 CET 2009 Stephane Popinet * old tag: 2009-11-02 Thu Nov 5 17:30:24 CET 2009 Stephane Popinet * Cyclone-generated wave field example Mon Nov 9 14:32:04 CET 2009 Stephane Popinet * wavewatch module supports version 3.12 Fri Nov 6 15:10:06 CET 2009 Stephane Popinet * New object GfsEventList Thu Nov 5 18:49:24 CET 2009 Stephane Popinet * Wavewatch module supports versions 3.14 and 2.22 Wed Nov 4 19:46:12 CET 2009 Stephane Popinet * Fixed compiler warnings for FES2004 Mon Nov 2 18:46:05 CET 2009 Stephane Popinet * Updated spurious currents test cases Sun Nov 1 12:36:58 CET 2009 Stephane Popinet * Updated advection test case Sun Nov 1 03:18:54 CET 2009 Stephane Popinet * Metrics descend from GfsVariableMetric Sun Nov 1 03:15:55 CET 2009 Stephane Popinet * Macros only work with gawk (i.e. not mawk) Sat Oct 24 16:57:09 CEST 2009 Stephane Popinet * old tag: 2009-10-24 Thu Oct 29 06:36:51 CET 2009 Stephane Popinet * New 'cosine bell' test case Thu Oct 29 04:55:08 CET 2009 Stephane Popinet * OutputScalarSum, OutputScalarNorm etc... take metric into account Wed Oct 28 23:48:18 CET 2009 Stephane Popinet * Godunov advection scheme takes metric into account Fri Aug 7 01:05:42 CEST 2009 Sebastien Delaux * Update of the strouhal testcase Wed Oct 28 02:26:54 CET 2009 Stephane Popinet * coarse->fine and fine->coarse interpolations take metric into account in order to conserve quantities. Wed Oct 28 01:14:41 CET 2009 Stephane Popinet * MetricCubed takes an optional "level" parameter Mon Oct 26 23:59:14 CET 2009 Stephane Popinet * Extended "Cubed" metric to entire "expanded spherical cube" Sat Oct 24 10:09:27 CEST 2009 Stephane Popinet * Updated test cases Fri Oct 23 05:46:58 CEST 2009 Stephane Popinet * gfs_domain_cfl() takes metric into account Tue Oct 20 15:51:19 CEST 2009 Stephane Popinet * old tag: 2009-10-19 Fri Sep 18 16:57:00 CEST 2009 Stephane Popinet * old tag: 2009-09-18 Wed Sep 16 16:56:02 CEST 2009 Stephane Popinet * old tag: 2009-09-16 Fri Oct 16 05:57:51 CEST 2009 Stephane Popinet * Optimisation of GfsMetricLonLat and GfsMetricCubed Wed Oct 14 05:31:18 CEST 2009 Stephane Popinet * "Cubed sphere" metric Tue Oct 13 02:34:58 CEST 2009 Stephane Popinet * Adaptivity takes "minlevel" into account properly Wed Oct 7 23:08:54 CEST 2009 Stephane Popinet * New object GfsMapFunction Wed Oct 7 04:43:27 CEST 2009 Stephane Popinet * CFL calculation for GfsRiver takes metric into account Wed Oct 7 03:43:44 CEST 2009 Stephane Popinet * Hydrostatic balance for 2nd-order curvilinear scheme in GfsRiver Tue Sep 29 04:25:59 CEST 2009 Stephane Popinet * General Orthogonal Coordinates Fri Sep 25 12:36:30 CEST 2009 Stephane Popinet * Longitude-latitude metric Thu Oct 22 05:22:34 CEST 2009 Stephane Popinet * New object GfsVariableStreamFunction Wed Oct 21 01:13:04 CEST 2009 Stephane Popinet * Support for "rotated" periodic boundaries Tue Oct 20 02:28:15 CEST 2009 Stephane Popinet * New "relative" option for GfsOutputErrorNorm Mon Oct 19 22:39:11 CEST 2009 Stephane Popinet * Fixed missing header in OutputSimulation Fri Sep 18 06:18:17 CEST 2009 Stephane Popinet * Support for "preloaded" modules Thu Sep 17 03:14:56 CEST 2009 Stephane Popinet * Units of VariableTerrain are properly reset Wed Sep 16 05:28:20 CEST 2009 Stephane Popinet * Bug fix for CGD/GTS files and multiple GfsFunctions Wed Sep 16 02:14:20 CEST 2009 Matthieu Castellazzi * Some fixes to the rpm spec file Wed Sep 9 17:04:01 CEST 2009 Stephane Popinet * old tag: 2009-09-08 Thu Sep 3 17:06:32 CEST 2009 Stephane Popinet * old tag: 2009-09-02 Wed Aug 26 17:00:40 CEST 2009 Stephane Popinet * old tag: 2009-08-19 Wed Aug 5 17:38:44 CEST 2009 Stephane Popinet * old tag: 2009-08-05 Wed Sep 9 00:43:57 CEST 2009 Stephane Popinet * RPM includes man pages Wed Sep 2 23:20:21 CEST 2009 Stephane Popinet * Cosmetics Wed Sep 2 07:04:08 CEST 2009 Stephane Popinet * New object GfsSourceControlField Thu Aug 20 01:26:34 CEST 2009 Stephane Popinet * New object GfsSourceFlux Wed Aug 26 06:47:18 CEST 2009 Stephane Popinet * Bug fix for gfs_streamline_new() Wed Aug 26 02:03:13 CEST 2009 Stephane Popinet * Cosmetics for wave model Wed Aug 26 02:01:46 CEST 2009 Stephane Popinet * BcSubcritical now tolerates negative depths Thu Aug 20 01:25:31 CEST 2009 Stephane Popinet * H and P terrain reconstruction for GfsVariableTerrain is optional Thu Aug 20 01:21:42 CEST 2009 Stephane Popinet * Bug fix for gfs_function_expression() When specifying two GfsFunctions in a row. Wed Aug 19 23:55:25 CEST 2009 Stephane Popinet * GfsRefineTerrain defines two new variables "dmin" and "dmax" Wed Aug 5 11:56:50 CEST 2009 Stephane Popinet * Added stability correction for wind wave model Wed Aug 5 11:47:56 CEST 2009 Stephane Popinet * GSE alleviation for GfsWave wind wave model Thu Jul 30 05:23:48 CEST 2009 Stephane Popinet * Removed obsolete GfsAdaptCurvature Thu Jul 30 05:23:13 CEST 2009 Stephane Popinet * Important improvements to GfsAdaptError Thu Jul 30 02:16:36 CEST 2009 Stephane Popinet * Minor optimisation of gfs_domain_solid_force() Tue Jul 28 06:37:09 CEST 2009 Stephane Popinet * Fixed negative wave actions in wavewatch module Mon Jul 27 02:35:18 CEST 2009 Stephane Popinet * GfsOutputSolidForce can take an optional weight argument Mon Jul 27 01:03:55 CEST 2009 Stephane Popinet * Fix for incorrect maxtag MPI value Fri Jul 24 03:22:56 CEST 2009 Stephane Popinet * Added option to use "bubble partitioning" Fri Jul 24 01:21:32 CEST 2009 Stephane Popinet * Fixed debian changelog generation Thu Jul 23 23:17:59 CEST 2009 Stephane Popinet * old tag: 2009-07-21 Wed Jul 22 01:54:01 CEST 2009 Stephane Popinet * Improved parallel example graph Tue Jul 14 03:21:20 CEST 2009 Stephane Popinet * New parallel vortex street example Wed Jul 22 00:49:22 CEST 2009 Sebastien Delaux * Fix for moving second order bug with merged cells Thu Jul 23 06:55:44 CEST 2009 Stephane Popinet * New function gfs_traverse_and_bc() For overlapping computation and communications. Wed Jul 22 23:37:38 CEST 2009 Stephane Popinet * New interface for gfs_domain_locate() and gfs_domain_boundary_locate() Wed Jul 22 06:34:37 CEST 2009 Stephane Popinet * Overlapping communications and computations Only using gfs_traverse_and_homogeneous_bc() for now. Wed Jul 22 01:57:30 CEST 2009 Stephane Popinet * Daily script uses the parallel version Sat Jul 18 16:12:41 CEST 2009 Stephane Popinet * old tag: 2009-07-17 Tue Jul 21 10:41:01 CEST 2009 Stephane Popinet * Simplified divergence redistribution of moving boundaries Tue Jul 21 01:59:16 CEST 2009 Stephane Popinet * Moving cylinder test case Mon Jul 20 09:39:08 CEST 2009 Stephane Popinet * Important bug fix for graph partitioning i.e. the "-p" option of gerris. Incorrect object casting between GtsWGnode and GfsBox were causing segfaults for some configurations. Mon Jun 29 01:24:01 CEST 2009 Sebastien Delaux * Divergence redistribution between merged cells for moving boundaries Thu Jun 25 00:30:25 CEST 2009 Sebastien Delaux * Fix for problem with small cells and moving solid interface in second order method Tue Jun 16 00:16:36 CEST 2009 Sebastien Delaux * Bug fix for dividing by zero in moving code Sat Jul 18 00:28:40 CEST 2009 Stephane Popinet * GfsEventBalance flows can transfer more than one box at a time Fri Jul 17 04:55:08 CEST 2009 Stephane Popinet * Various small fixes Thu Jul 16 02:13:49 CEST 2009 Stephane Popinet * gfs_domain_locate() uses a Cartesian array for fast indexing The previous systematic traversal of all the GfsBoxes was very slow (when the number of boxes was large e.g. due to "splitting"). This was particularly noticeable for the VOF algorithm (which does many locate() calls to reconstruct local Cartesian stencils). Wed Jul 15 06:31:22 CEST 2009 Stephane Popinet * New option '--event' for gerris2D/3D Wed Jul 15 10:57:44 CEST 2009 Stephane Popinet * Fixed GfsVariableCurvature timers Wed Jul 15 05:51:13 CEST 2009 Stephane Popinet * New '--pid' option for gerris2D/3D Tue Jul 14 09:18:56 CEST 2009 Stephane Popinet * A few fixes for OutputTiming Tue Jul 14 05:58:43 CEST 2009 Sebastien Delaux * Output timing now outputs sorted timings Tue Jul 14 05:32:49 CEST 2009 Stephane Popinet * Entirely solid boxes can be used They will be automatically removed from the simulation rather than making the simulation abort with an error message. Tue Jul 14 03:36:51 CEST 2009 Stephane Popinet * Dynamic parallel load-balancing (EventBalance) Mon Jul 13 07:30:59 CEST 2009 Stephane Popinet * daily script only generates launchpad snapshots Mon Jul 13 06:59:10 CEST 2009 Stephane Popinet * Fixed header dependency for domain.c Sun Jul 12 03:45:49 CEST 2009 Stephane Popinet * Added openmpi-bin as a dependency for debian package This is a workaround for the broken libopenmpi1 debian package. Sun Jun 28 13:05:55 CEST 2009 Stephane Popinet * GfsBoundaryMpi is included by default (even in the serial version) This simplifies the code and also means that the serial version can be used to join and load simulation files generated by parallel runs (e.g. a serial version of GfsView ran on a different system will now be able to visualise the results of a parallel run). Mon Jun 22 02:16:41 CEST 2009 Stephane Popinet * Fixed Debian version numbering Mon Jun 22 00:36:09 CEST 2009 Stephane Popinet * Automatically include aclocal m4 macros Wed May 13 04:09:17 CEST 2009 Stephane Popinet * Debian packages are built with MPI support Wed May 13 01:52:23 CEST 2009 Stephane Popinet * Added 'launchpad-snapshot' Makefile target Thu Jul 2 13:16:02 CEST 2009 Stephane Popinet * GfsOutputDropletSums and GfsRemoveDroplets should now work in parallel and also for periodic boundary conditions in serial and in parallel. Thu Jul 9 02:39:14 CEST 2009 Stephane Popinet * EventBalance implements dynamic load balancing on 2 PEs only Wed Jul 8 06:46:50 CEST 2009 Stephane Popinet * OutputTime reports average CPU time for parallel runs Wed Jul 8 02:24:53 CEST 2009 Stephane Popinet * OutputBalance ignores box pids for serial runs Mon Jul 6 00:14:36 CEST 2009 Stephane Popinet * Box positions set in the parameter file are preserved Wed Jul 1 06:29:53 CEST 2009 Stephane Popinet * GfsInitFraction should now work also for parallel simulations It used to fail for domains containing disconnected GfsBoxes (which can happen for some domain decompositions in parallel). Sun Jun 28 11:54:13 CEST 2009 Stephane Popinet * Added version info to read()/write() methods of GfsDomain Sun Jun 28 10:50:08 CEST 2009 Stephane Popinet * New functions gfs_send_boxes() and gfs_receive_boxes() To move GfsBoxes between processors in parallel. Thu Jun 25 11:57:17 CEST 2009 Stephane Popinet * Major bug fix for GfsBoundaryPeriodic Amazingly the implementation of the match() method seems to have been wrong right from the initial implementation (then part of BoundaryMpi). Yet, despite being completely inconsistent, this implementation managed to "work" undetected for several years... The bug also affected parallel simulations through inheritance to BoundaryMpi. Tue Jun 23 11:25:28 CEST 2009 Stephane Popinet * Bug fix for file access test in parallel Tue Jun 23 11:24:16 CEST 2009 Stephane Popinet * Improved error messages in parallel (includes processor name) Sun Jun 21 23:39:09 CEST 2009 Stephane Popinet tagged release_21_06_09 Sun Jun 21 10:01:04 CEST 2009 Stephane Popinet * Added configuration options to "--version" info Sun Jun 21 00:30:38 CEST 2009 Stephane Popinet * GfsOutputSimulation can write "joined" parallel simulation files Only for GFS and text formats. Sat Jun 20 23:46:04 CEST 2009 Stephane Popinet * GfsEventScript is only called for rank 0 PE in parallel Sat Jun 20 05:07:20 CEST 2009 Stephane Popinet * Added MPI_Finalize() as required by MPI standard Fri Jun 19 02:40:54 CEST 2009 Stephane Popinet * Added man pages for gfsjoin2D, gfsjoin3D Fri Jun 19 02:22:01 CEST 2009 Stephane Popinet * New 'keep' option for gfsjoin2D Fri Jun 19 02:19:42 CEST 2009 Stephane Popinet * GfsDomain automatically converts GfsBoundaryMPI into edges on read Fri Jun 19 02:18:27 CEST 2009 Stephane Popinet * Updated test case references Fri Jun 19 01:27:50 CEST 2009 Stephane Popinet * Bug fix for GfsSolidMoving/GfsSurface write() method Thu Jun 18 10:14:25 CEST 2009 Stephane Popinet * New gfsjoin2D, gfsjoin3D tools These are replacing the gfsjoin script. Note however that they can only be used to join parallel files created using this and later versions of Gerris. Older parallel simulation files should still use the gfsjoin script. Thu Jun 18 05:18:40 CEST 2009 Stephane Popinet * Bug fix for write() method of GfsSurface Thu May 14 04:02:33 CEST 2009 Stephane Popinet * GfsVariableTerrain also reconstructs H and P of GfsRiver Wed May 13 11:38:58 CEST 2009 Stephane Popinet * Adaptivity cannot coarsen by more than one level per timestep Wed May 13 00:44:30 CEST 2009 Stephane Popinet * Bug fix for incorrect generation of dependencies in tests docs Tue May 12 05:18:55 CEST 2009 Stephane Popinet * Check that SolidMoving is used within SimulationMoving Tue May 12 05:04:30 CEST 2009 Stephane Popinet * Renamed GfsMovingSimulation to GfsSimulationMoving Tue May 12 02:43:40 CEST 2009 Stephane Popinet * Updated moving hexagon test case Tue May 12 02:26:58 CEST 2009 Stephane Popinet * Split 2nd-order moving in moving2.c Tue May 12 01:20:11 CEST 2009 Stephane Popinet * Fix for remeshing of moving solids Tue May 12 01:18:31 CEST 2009 Stephane Popinet * Diffusion now works with moving boundaries Wed May 6 07:58:23 CEST 2009 Stephane Popinet * Fix for SurfaceBc implementation of moving boundaries Tue May 5 13:12:14 CEST 2009 Stephane Popinet * Solid motion is now specified through SurfaceBc Tue May 5 10:07:19 CEST 2009 Stephane Popinet * Simplification of redistribute_destroyed_cells_content() Tue May 5 06:43:04 CEST 2009 Stephane Popinet * Simplified moving_cell_fine_init and removed old_solid_coarse_fine Tue May 5 02:41:44 CEST 2009 Stephane Popinet * Simplified moving_simulation_set_timestep() Mon May 4 11:06:17 CEST 2009 Stephane Popinet * Fixes for memory leaks in initial moving boundary implementation Sat May 2 14:21:46 CEST 2009 Sebastien Delaux * Translating hexagon test case Sat May 2 14:19:51 CEST 2009 Sebastien Delaux * Initial moving solid boundary implementation Tue May 12 01:17:42 CEST 2009 Stephane Popinet * Bug fix for corner refinement bug fix Mon May 11 06:18:28 CEST 2009 Stephane Popinet * Bug fix for violation of 'corner refinement criterion' Sat May 9 01:39:30 CEST 2009 Stephane Popinet * autogen.sh copies missing files Fri May 8 03:02:22 CEST 2009 Stephane Popinet * New 'time_order' parameter for GfsRiver Mon May 4 11:23:46 CEST 2009 Stephane Popinet * More generic valgrind suppression file (ld.so.supp) Mon May 4 11:22:31 CEST 2009 Stephane Popinet * Default boundary conditions can be set for each variable Sat May 2 13:16:28 CEST 2009 Stephane Popinet * New 'cleanup' method for GfsVariable Thu Apr 30 11:08:50 CEST 2009 Stephane Popinet * Changed meaning of gfs_simulation_get_solids() (!!) Sat May 2 11:20:48 CEST 2009 Stephane Popinet * Debian package must depend on libgts-snapshot-dev Sat May 2 09:18:34 CEST 2009 Stephane Popinet * Bug fixes for 'daily' script Fri May 1 13:21:12 CEST 2009 Stephane Popinet * daily script properly signs debian repositories Fri May 1 10:23:08 CEST 2009 Stephane Popinet * Divide-by-zero exceptions use Sat May 2 01:25:23 CEST 2009 Stephane Popinet * Man pages need to be distributed Fri May 1 06:28:27 CEST 2009 Stephane Popinet * Updated debian package build (based on Drew Parson's) Fri May 1 06:13:55 CEST 2009 Stephane Popinet * Added man pages from debian (thanks Ruben and Drew!) Thu Apr 30 10:56:19 CEST 2009 Stephane Popinet * Advection merging updates can be parameterised Thu Apr 30 10:49:25 CEST 2009 Stephane Popinet * New function gfs_surface_transformation() Thu Apr 30 10:42:14 CEST 2009 Stephane Popinet * gfs_cell_traverse_cut() can traverse "destroyed" cells Thu Apr 30 10:38:18 CEST 2009 Stephane Popinet * Projections can use an optional initial divergence field Thu Apr 30 10:35:23 CEST 2009 Stephane Popinet * New function gfs_advance_tracers() Thu Apr 30 10:32:37 CEST 2009 Stephane Popinet * New function gfs_cell_is_small() Mon Apr 20 23:45:49 CEST 2009 Stephane Popinet * New 'ppm2video' script Uses ffmpeg to convert PPM to (almost) any video format. Mon Apr 20 22:51:44 CEST 2009 Stephane Popinet * Updated reference for 'reynolds' test case Sun Apr 19 09:24:50 CEST 2009 Stephane Popinet * Fix for dimensioning of GfsSurfaceBc Thu Apr 2 23:02:10 CEST 2009 Stephane Popinet * Fix for dependencies of examples Wed Apr 1 21:59:25 CEST 2009 Stephane Popinet * Fix for negative clock return values (thanks to G. McBain) Thu Mar 26 19:11:53 CET 2009 Stephane Popinet * gerris.dic is installed in $prefix/share/gerris/gerris.dic Sun Mar 15 17:02:16 CET 2009 Daniel Fuster * vim dictionary Tue Mar 17 17:41:32 CET 2009 Stephane Popinet * Fix for compilation on Mac OSX 10.4, 10.5 Sun Mar 15 22:34:31 CET 2009 Stephane Popinet * OutputDropletSums sorts droplets by volume Sat Mar 14 18:23:12 CET 2009 Stephane Popinet * Fixed dimensioning of GfsVariableCurvature Thu Mar 12 15:26:54 CET 2009 Stephane Popinet * Bug fix for surface tension coefficient and dimensions Thu Feb 26 20:45:04 CET 2009 Stephane Popinet * Fix (again!) for module dependencies Thu Feb 26 03:28:02 CET 2009 Stephane Popinet * Fixed obsolete lseek() call in RStarTree Thu Feb 26 02:41:33 CET 2009 Stephane Popinet * Fix for hardcoded path in wavewatch module Wed Feb 25 01:20:51 CET 2009 Stephane Popinet * Fix for incorrect 'dist' dependency in wavewatch module Mon Feb 23 21:33:43 CET 2009 Stephane Popinet * Fix for 'listing' option of wavewatch Mon Feb 23 21:11:58 CET 2009 Stephane Popinet * Fixed changelog in gerris.spec Mon Feb 23 10:31:36 CET 2009 Stephane Popinet * Fix for wavewatch module makefile Mon Feb 23 10:13:58 CET 2009 Stephane Popinet * Automatic type checking for wavewatch C/Fortran linking Mon Feb 23 06:17:04 CET 2009 Stephane Popinet * Wavewatch initialisation files are created in the background Mon Feb 23 02:08:07 CET 2009 Stephane Popinet * New 'wavewatch' module Fri Feb 20 06:27:36 CET 2009 Stephane Popinet * Fix for energy calculation in GfsWave Tue Feb 3 01:00:35 CET 2009 Stephane Popinet * Applied patch by Laurent Roblou to FES2004 library Mon Feb 2 10:51:53 CET 2009 Stephane Popinet * New object GfsVariableFunction Used to efficiently refine adaptively a variable defined by a GfsFunction. Thu Jan 29 00:53:08 CET 2009 Stephane Popinet * Small optimisation for dry cells in GfsRiver Thu Jan 15 22:01:46 CET 2009 Stephane Popinet UNDO: New GfsBcValve BC for GfsRiver Thu Jan 29 00:45:25 CET 2009 Stephane Popinet * Cron script darcs pull from the correct repositories Thu Jan 29 00:44:08 CET 2009 Stephane Popinet * Added fortran dependency for new stokes module Tue Jan 20 21:34:30 CET 2009 Stephane Popinet * Fix for hardcoding of path in Terrain module Fri Jan 16 03:55:16 CET 2009 Stephane Popinet * New GfsVariableTerrain for adaptive refinement of GfsRiver Thu Jan 15 22:01:46 CET 2009 Stephane Popinet * New GfsBcValve BC for GfsRiver Fri Aug 22 06:18:05 CEST 2008 Stephane Popinet * New object GfsInitStokesWave Mon Jul 28 08:03:05 CEST 2008 Stephane Popinet * Iterative Stokes wave solver of John Chaplin Tue May 6 01:11:31 CEST 2008 Stephane Popinet * Added GFS_FES2004 environment variable Tue Sep 18 00:06:46 CEST 2007 Stephane Popinet * New EventBalance object for parallel load-balancing Sun Sep 2 09:11:05 CEST 2007 Stephane Popinet * New VariableDiagonal for Poisson solver diagonal dominance evaluation Wed Jan 28 07:26:03 CET 2009 Stephane Popinet * Small optimisation for gfs_domain_traverse_merged() Wed Jan 28 07:24:51 CET 2009 Stephane Popinet * Less strict check for parabola test case Tue Jan 27 02:28:46 CET 2009 Stephane Popinet * Updated GfsView parameter files for updated GfsGlLinear object Thu Jan 15 04:19:18 CET 2009 Stephane Popinet * Updated GfsRiver examples Sat Jan 10 11:35:53 CET 2009 Stephane Popinet * New 'hump' GfsRiver example Fri Jan 9 04:54:59 CET 2009 Stephane Popinet * New dam break example Thu Jan 22 05:02:28 CET 2009 Stephane Popinet * Updated parabola test case Wed Jan 21 23:50:03 CET 2009 Stephane Popinet * SourceCoriolis properly takes friction term into account Wed Jan 21 23:33:18 CET 2009 Stephane Popinet * Friction for the River model is implemented using SourceCoriolis Wed Jan 21 23:32:50 CET 2009 Stephane Popinet * Fix for terrain module when refining an existing mesh Wed Jan 21 22:07:21 CET 2009 Stephane Popinet * Log timing statistics for events Fri Jan 16 00:56:08 CET 2009 Stephane Popinet * Bug fix for ppmcombine Thu Jan 15 04:20:22 CET 2009 Stephane Popinet * Updated parabola test case Thu Jan 15 04:19:46 CET 2009 Stephane Popinet * Bug fix for incorrect write() method of GfsRefineTerrain Thu Jan 15 04:08:30 CET 2009 Stephane Popinet * stderr and stdout are muted in parallel Thu Jan 15 04:07:15 CET 2009 Stephane Popinet * Bug fix for gfs_all_reduce() Wed Jan 14 12:19:19 CET 2009 Stephane Popinet * Consistent descriptions and derived variables for GfsRiver Wed Jan 14 12:15:30 CET 2009 Stephane Popinet * Removed Riemann Roe solver from GfsRiver Wed Jan 14 12:14:54 CET 2009 Stephane Popinet * Bug fix for overflow in gfscompare Wed Jan 14 12:14:08 CET 2009 Stephane Popinet * Bug fix for GfsInit erasing variables' descriptions Wed Jan 14 08:56:35 CET 2009 Stephane Popinet * Added timers to GfsRiver Sun Jan 11 10:30:03 CET 2009 Stephane Popinet * Bathymetry reconstruction ensures hydrostatic balance Sat Jan 10 02:39:03 CET 2009 Stephane Popinet * New 'parabola' test case for GfsRiver Sat Jan 10 01:53:47 CET 2009 Stephane Popinet * Cleaned up GfsRiver code Fri Jan 9 08:48:46 CET 2009 Stephane Popinet * Topography source terms for GfsRiver are balanced also with adaptivity Fri Jan 9 08:48:25 CET 2009 Stephane Popinet * Bug fix for gfs_remove_ponds() Wed Dec 17 03:01:10 CET 2008 Stephane Popinet * Uses the standard definitions for H and Zb Wed Dec 10 05:21:25 CET 2008 Stephane Popinet * Implementation of the Audusse et al scheme Wed Dec 10 02:53:56 CET 2008 Stephane Popinet * Wetting-drying for GfsRiver Tue Dec 9 22:59:26 CET 2008 Stephane Popinet * Topographic source terms for River model Tue Dec 9 21:43:48 CET 2008 Stephane Popinet * Bug fix for HLLC riemann solver Mon Dec 8 23:16:40 CET 2008 Stephane Popinet * 2nd-order non-linear shallow-water solver Mon Dec 8 22:58:37 CET 2008 Stephane Popinet * BcSubcritical boundary condition Mon Dec 8 22:50:56 CET 2008 Stephane Popinet * New function gfs_center_minmod_gradient Fri Nov 14 01:53:37 CET 2008 Stephane Popinet * Added "none" option for gradient of AdvectionParams This means that the advection schemes can be made first-order in space. Fri Nov 14 01:51:23 CET 2008 Stephane Popinet * Initial nonlinear shallow-water solver 1D, first-order in space and time. Fri Jan 9 04:55:42 CET 2009 Stephane Popinet * Fix for hevea bug in gfs2doc Wed Dec 17 23:29:58 CET 2008 Stephane Popinet * Parallel outputs are only done for files with '%d' format Wed Dec 17 03:02:55 CET 2008 Stephane Popinet * Bug fix for OutputScalarSum in parallel Thu Jan 8 03:05:31 CET 2009 Stephane Popinet * OutputTime also outputs real elapsed time Tue Dec 9 21:44:10 CET 2008 Stephane Popinet * OutputSimulation was not talking dimensioning into account for text format Tue Dec 2 03:11:13 CET 2008 Stephane Popinet * Bug fix for BC of diffusion equation Fri Nov 28 01:31:55 CET 2008 Stephane Popinet * Gnuplot output from gfs2oogl takes mapping into account Fri Nov 28 01:29:57 CET 2008 Stephane Popinet * OutputParticle now derives from OutputLocation Note also that the syntax has changed. Fri Nov 7 00:24:53 CET 2008 Stephane Popinet * ASCII float conversion format option for OutputSimulation Thu Nov 6 23:08:52 CET 2008 Stephane Popinet * Improved robustness of VOF volume computation Mon Nov 3 22:08:45 CET 2008 Stephane Popinet * Slip length in BcNavier is now a GfsFunction Mon Nov 3 21:55:31 CET 2008 Stephane Popinet * Bug fix for GfsRemoveDroplets (thanks to G. Tomar) Mon Nov 3 21:41:47 CET 2008 Stephane Popinet * Fixed dimensioning of OutputSolidForce. Thu Oct 30 05:26:06 CET 2008 Stephane Popinet * Dimensioning for AdaptGradient Tue Oct 28 04:54:01 CET 2008 Stephane Popinet * Dimensioning of Flather boundary conditions Fri Oct 24 09:23:05 CEST 2008 Stephane Popinet * New 'ppm2theora' script Fri Oct 24 06:10:35 CEST 2008 Stephane Popinet * 'tides' example uses new 3D ocean code and scaling system Fri Oct 24 06:08:37 CEST 2008 Stephane Popinet * rsurfacedraw outputs aspect ratio statistics Wed Oct 22 22:52:22 CEST 2008 Stephane Popinet * Fixed dimensioning of GfsEventHarmonic Wed Oct 22 04:31:41 CEST 2008 Stephane Popinet * GTS and CGD files take mapping into account Wed Oct 22 01:35:48 CEST 2008 Stephane Popinet * Terrain databases were incompatible between 32 and 64 bits This is fixed but you will need to regenerate the databases... Thu Oct 16 03:46:30 CEST 2008 Stephane Popinet * Dimensioning for 3D ocean model Tue Oct 21 02:12:06 CEST 2008 Stephane Popinet * Increased significant digits of text export Thu Oct 16 03:47:01 CEST 2008 Stephane Popinet * New "dL" derived variable Thu Oct 16 03:46:17 CEST 2008 Stephane Popinet * Consistent z-scaling of terrain Thu Oct 16 03:32:14 CEST 2008 Stephane Popinet * Terrain module works only with relative bilinear coordinates Thu Oct 16 01:33:26 CEST 2008 Stephane Popinet * Fixed access modes for Terrain module Thu Oct 9 02:09:37 CEST 2008 Stephane Popinet * New Terrain module uses relative sums This fixes round-off problems in the previous implementation of the new version. Note that the terrain databases need to be regenerated. Thu Oct 9 01:12:15 CEST 2008 Stephane Popinet * New 'rsurfacedraw' command Sun Oct 5 23:43:15 CEST 2008 Stephane Popinet * Added new "min" and "max" derived Terrain variables Thu Oct 2 03:55:47 CEST 2008 Stephane Popinet * New version of the terrain module using region_sum queries This patch contains both the old and the new version, for debugging purposes. Thu Oct 2 03:53:28 CEST 2008 Stephane Popinet * New function r_surface_query_region_sum() Efficiently computes the statistics for a given region using the hierarchical statistics stored in the R*-tree. Sun Oct 5 03:48:59 CEST 2008 Stephane Popinet * Fixed headers for compilation on Mac OSX Sun Oct 5 01:49:42 CEST 2008 Stephane Popinet * Fix for incorrect versioning of debian packages Mon Sep 29 05:41:14 CEST 2008 Stephane Popinet * darcs2dist uses sftp rather than ssh Tue Sep 23 05:30:12 CEST 2008 Stephane Popinet * Updated URL for sourceforge server upgrade Thu Sep 18 03:10:31 CEST 2008 Stephane Popinet * Fix for dimensioning of SourceTension when using reduced gravity Wed Sep 10 23:09:52 CEST 2008 Stephane Popinet * Added missing required files for test cases Tue Sep 9 08:54:21 CEST 2008 Stephane Popinet * Axisymmetric spurious currents test case Tue Sep 9 06:52:46 CEST 2008 Stephane Popinet * Axisymmetric surface tension implementation Tue Sep 9 05:06:31 CEST 2008 Stephane Popinet * Replaced GFS_VARIABLE() with GFS_VALUE() in tension.c, vof.c Tue Sep 9 06:05:13 CEST 2008 Stephane Popinet * Updated test case references Mon Sep 8 00:10:27 CEST 2008 Stephane Popinet * Fixes for missing dimensioning VariableCurvature, VariableDistance, VariableFiltered, SourceTension. Sat Sep 6 00:04:37 CEST 2008 Stephane Popinet * Implicit viscosity now works for axisymmetric domains The explicit viscosity scheme has also been simplified. Fri Sep 5 23:30:55 CEST 2008 Stephane Popinet * Axisymmetric viscous flow past a sphere test case Wed Aug 6 00:50:48 CEST 2008 Stephane Popinet * New object GfsAdaptError Uses an error estimate based on the norm of the Hessian matrix. Fri Aug 1 04:48:18 CEST 2008 Stephane Popinet * Reimplementation of SourceVicosityExplicit Also works for axisymmetric flows (but for 3D flows yet). Fri Aug 1 04:47:02 CEST 2008 Stephane Popinet * Explicit viscosity lid-driven cavity test case Thu Sep 4 06:15:05 CEST 2008 Stephane Popinet * gfs2oogl outputs dimensional values in mixed cells Wed Sep 3 06:56:36 CEST 2008 Stephane Popinet * VariableDistance now works also in 3D Thu Aug 21 03:20:26 CEST 2008 Stephane Popinet * New user function "correctness()" for complexity of VOF interfaces Fri Aug 22 06:04:47 CEST 2008 Stephane Popinet * Spatial functions can now be time-dependent Mon Aug 18 23:19:33 CEST 2008 Stephane Popinet * Updated test cases references Sun Aug 10 08:06:39 CEST 2008 Stephane Popinet * check.py is distributed in the tarball Sun Aug 10 08:29:44 CEST 2008 Stephane Popinet * Computation of maximum interface curvature is more robust Thu Aug 7 11:02:21 CEST 2008 Stephane Popinet * VariableFiltered is initialised This is important if a filtered variable is used for the initial approximate projection (e.g. for the density). Mon Jul 28 23:29:57 CEST 2008 Stephane Popinet * Removed left-over debugging message Sun Jul 27 23:40:22 CEST 2008 Stephane Popinet * Updated test cases references Sat Jul 26 02:25:31 CEST 2008 Stephane Popinet * gfs_init_solid_fractions() always resets the old solids first Thu Jun 19 23:28:01 CEST 2008 Stephane Popinet * Quick fix for surfaces exactly coincident with mesh i.e. it should not be necessary anymore to shift implicit surfaces by epsilon to get the expected results. Thu May 1 02:09:32 CEST 2008 Stephane Popinet * Robust treatment of border cases for gfs_line_center, gfs_plane_center Wed Jul 23 06:10:41 CEST 2008 Stephane Popinet * Cleaner axi test case parameter file Sat Jul 26 00:44:14 CEST 2008 Stephane Popinet * Restructured correct_normal_velocity() This also fixes a bug introduced by the new axisymmetric formulation. Sat Jul 26 00:43:15 CEST 2008 Stephane Popinet * Fix for "corner refinement" topology violation Fri Jul 25 06:01:19 CEST 2008 Stephane Popinet * Fixed incorrect L-dimensioning of force output Tue Jul 22 03:06:05 CEST 2008 Stephane Popinet * Axisymmetric advection Tue Jul 22 02:58:42 CEST 2008 Stephane Popinet * Removed obsolete charset option for html doc generation Sun Jul 20 00:38:43 CEST 2008 Stephane Popinet * Clean target for examples Sat Jul 19 03:31:26 CEST 2008 Stephane Popinet * Axisymmetric Euler solver Fri Jul 18 02:38:12 CEST 2008 Stephane Popinet * Axisymmetric potential flow around a sphere test case Sat Jul 19 03:30:19 CEST 2008 Stephane Popinet * L-dimensioning for OutputScalarSum, VTK and Tecplot Sat Jul 19 03:01:26 CEST 2008 Stephane Popinet * New function "area" for interfacial area density Mon Jun 9 00:22:44 CEST 2008 Stephane Popinet * Wave model uses user-defined length units Sun Jun 8 01:29:51 CEST 2008 Stephane Popinet * Solid flux correction for wave model Sat Jun 7 19:16:39 CEST 2008 Stephane Popinet * New 'garden sprinkler effect' example for wave model Fri Jul 18 12:00:35 CEST 2008 Stephane Popinet * Several important fixes for L-dimensioning Wed Jul 16 05:10:40 CEST 2008 Stephane Popinet * gfs_domain_cfl() should now take source terms into account Wed Jul 16 04:29:38 CEST 2008 Stephane Popinet * Minor fixed to RPM spec file (I. Vari) Sat Jun 7 10:08:55 CEST 2008 Stephane Popinet * Maximum timestep is not limited Wed Jul 9 23:43:55 CEST 2008 Stephane Popinet * Bug fix for cgd files and face boundary conditions Sat Jun 7 19:00:53 CEST 2008 Stephane Popinet * New "Energy" derived variable for wave model Sat Jun 7 12:58:02 CEST 2008 Stephane Popinet * New object GfsInitWave Sat Jun 7 11:35:01 CEST 2008 Stephane Popinet * nk and ntheta are parameters for wave model Sat Jun 7 10:10:07 CEST 2008 Stephane Popinet * Fixed scaling of energy for wave model Sun May 11 12:21:24 CEST 2008 Stephane Popinet * Initial sub-cycling implementation for wave model Fri May 9 09:08:22 CEST 2008 Stephane Popinet * Initial wave model Fri Jun 13 01:34:32 CEST 2008 Stephane Popinet * Bug fix for broken BcNavier Sun Jun 8 16:51:50 CEST 2008 Stephane Popinet * Dimensional size of the unit box can be set Tue Jul 8 06:01:39 CEST 2008 Stephane Popinet * Multigrid "tricks" for diffusion solver Mon Jul 7 09:03:24 CEST 2008 Stephane Popinet * darcs2dist puts tarballs in a tarballs/ directory Mon Jul 7 08:01:06 CEST 2008 Stephane Popinet * Fixed typo in RefineHeight (thanks to G. McBain) Mon Jul 7 07:59:07 CEST 2008 Stephane Popinet * Added missing gfsxref to tarball Fri Jun 20 00:44:41 CEST 2008 Stephane Popinet * More accurate streamlines Uses new function gfs_mixed_cell_interpolate(). Fri Jul 4 05:20:11 CEST 2008 Stephane Popinet * Scripts for automatic cross-reference generation For automatically linking keyword wiki documentation with the examples and test cases. Wed Jul 2 03:13:01 CEST 2008 Stephane Popinet * Updated test cases references Fri Jun 20 01:15:14 CEST 2008 Stephane Popinet * New object GfsBoundaryGradient Tue Jul 1 06:04:32 CEST 2008 Stephane Popinet * RPM spec update for Fedora (I. Vari) Tue Jul 1 05:51:19 CEST 2008 Stephane Popinet * Several fixes for GfsCartesianGrid object Fri Jun 20 11:17:25 CEST 2008 Stephane Popinet * darcs2dist makes tarballs with consistent version numbers Tue Jul 1 04:08:59 CEST 2008 Stephane Popinet * Fix for doc generation with new gfs-highlight script Thu Jun 19 15:15:48 CEST 2008 Stephane Popinet * Bug fix for adaptive refinement (maxlevel was not always respected) Wed Jun 18 23:35:51 CEST 2008 Stephane Popinet * VariableFiltered defines values on all levels This should fix bugs when using a filtered variable within alpha (alpha needs to be defined on all levels for the viscous terms). Wed Jun 18 15:21:21 CEST 2008 Stephane Popinet * Updated spurious currents test case reference Thu Jun 12 14:06:05 CEST 2008 Stephane Popinet * Fix for linking utility libraries with libtool Wed Jun 11 11:39:58 CEST 2008 Stephane Popinet * Fix for OutputSimulation silly bug Tue Jun 10 14:57:31 CEST 2008 Stephane Popinet * Fix for VTK/Tecplot output in parallel Tue Jun 10 14:49:55 CEST 2008 Stephane Popinet * New gfs-highlight script Uses GNU source-highlight for syntax highlighting of simulation files. Sun Jun 8 23:55:16 CEST 2008 Stephane Popinet * GfsAdaptGradient has been generalised to functions Fri May 9 09:06:54 CEST 2008 Stephane Popinet UNDO: gfs_domain_add_variable() takes a class parameter Sat Jun 7 11:33:50 CEST 2008 Stephane Popinet * OutputSimulation really writes all the variables by default Sun May 11 12:20:44 CEST 2008 Stephane Popinet * New function gfs_event_redo() Fri May 9 09:06:54 CEST 2008 Stephane Popinet * gfs_domain_add_variable() takes a class parameter Fri May 9 09:04:50 CEST 2008 Stephane Popinet * Generalised gfs_matrix_new() to non-square matrices Sun Jun 8 10:41:49 CEST 2008 Stephane Popinet * Checks that density is not negative Fri Jun 6 12:42:04 CEST 2008 Stephane Popinet * Fix for inconsistent treatment of maxlevel adaptive parameter This patch should ensure that cells are never more refined than maxlevel. Fri Jun 6 11:41:35 CEST 2008 Stephane Popinet * Fix for automake/libtool object issue Tue Apr 22 23:30:46 CEST 2008 Stephane Popinet UNDO: Use dolt instead of standard libtool Tue May 13 11:34:19 CEST 2008 Stephane Popinet * Improved options for xyz2rsurface Tue May 13 04:58:24 CEST 2008 Stephane Popinet * Improved path system for Terrain module Tue May 13 03:12:38 CEST 2008 Stephane Popinet * Fix for hard-coded module names in parameter files Mon May 12 03:34:01 CEST 2008 Stephane Popinet * New dependencies for RPM packages (I. Vari) Sat May 10 05:54:50 CEST 2008 Stephane Popinet * cron script uses new "devel" branches Sat May 10 05:15:48 CEST 2008 Stephane Popinet * Added cron job script in tools/ Fri May 9 04:53:28 CEST 2008 Stephane Popinet * Fixed missing dependency for Terrain module Tue May 6 00:59:25 CEST 2008 Stephane Popinet * Added debian dependencies for Tide and Map modules Thu May 8 12:43:11 CEST 2008 Stephane Popinet * GFS_MODULES_DIR is defined in Makefile This should fix problems when using the --libdir option of configure Wed May 7 12:27:13 CEST 2008 Stephane Popinet * Poiseuille flow test case Tue May 6 00:52:34 CEST 2008 Stephane Popinet * Integrated FES2004 build within primary build Mon May 5 23:39:20 CEST 2008 Stephane Popinet * Initial import of FES2004_distribution_soft-1.0.9 A GPL-ed library to read FES2004 tidal atlas data. Mon May 5 23:14:02 CEST 2008 Stephane Popinet * New derived variables rx, ry and rz Thu May 1 02:04:43 CEST 2008 Stephane Popinet * Improved robustness of solid fraction checks Thu Apr 24 07:02:49 CEST 2008 Stephane Popinet * New abstract class GfsGenericSurface Tue Apr 29 10:38:10 CEST 2008 Stephane Popinet * Map module also scales z coordinate Tue Apr 29 07:00:27 CEST 2008 Stephane Popinet * Solid boundary generation changes for Terrain module Tue Apr 29 06:58:43 CEST 2008 Stephane Popinet * Extension of GfsRefineTerrain to 3D Tue Apr 29 03:14:58 CEST 2008 Stephane Popinet * Removed "Writing new objects" section of tutorial This has been superseded by the wiki version in the Gerris programming course. Tue Apr 29 00:26:20 CEST 2008 Stephane Popinet * Added missing awk script in debian package Thu Apr 24 07:07:58 CEST 2008 Stephane Popinet * Thin solid cells are flagged and "fixed" before checks Thu Apr 24 07:02:20 CEST 2008 Stephane Popinet * New GfsTerrain class Tue Apr 22 23:31:04 CEST 2008 Stephane Popinet * Terrain module uses R*-tree Tue Apr 22 23:30:46 CEST 2008 Stephane Popinet * Use dolt instead of standard libtool Tue Apr 22 23:30:25 CEST 2008 Stephane Popinet * Minor changes to RStarTree (updated header files etc...) Thu Apr 10 11:32:17 CEST 2008 Stephane Popinet * Large file (> 2GiB) support for RStarTree Thu Apr 10 11:10:52 CEST 2008 Stephane Popinet * Upgraded/integrated Makefile.am for RStarTree Thu Apr 10 10:32:54 CEST 2008 Stephane Popinet * R*-tree implementation of Norbert Beckmann This is the original implementation as unpacked from http://www.rtreeportal.org. Mon Apr 7 23:37:23 CEST 2008 Stephane Popinet * New terrain module for height-field databases Tue Apr 1 03:39:32 CEST 2008 Stephane Popinet * New module for FES2004 tidal boundary conditions Tue Apr 1 02:14:15 CEST 2008 Stephane Popinet * GModule can take parameters Fri Mar 28 03:26:35 CET 2008 Stephane Popinet * New Map module for cartographic projections Tue Mar 25 04:57:21 CET 2008 Stephane Popinet * Support for geometric "mapping" of domain coordinates Tue Jan 29 23:31:34 CET 2008 Stephane Popinet * Single-layer ocean model can now use "3D" code rather than "2D3" Fri Apr 18 02:12:37 CEST 2008 Stephane Popinet * Stricter checking when compiling user-defined GfsFunctions Fri Apr 18 02:07:41 CEST 2008 Stephane Popinet * Need to make sure that all PEs use the same timestep! Important bug fix for the parallel version. Sat Apr 5 05:10:34 CEST 2008 Stephane Popinet * Check for unclosed statement in parameter files Mon Mar 24 23:35:46 CET 2008 Stephane Popinet * Checks that variable names are not reserved keywords Tue Mar 18 00:49:03 CET 2008 Stephane Popinet * Examples files are distributed only if they are version-controlled Thu Mar 13 00:25:11 CET 2008 Stephane Popinet * Removed MRS acceleration While this accelerated convergence somewhat in some cases, it seemed to prevent convergence in other cases. This patch is not an exact "rollback" of the initial MRS implementation because it does not rollback other simple but important changes to the Poisson solver which seem to really improve robustness. Wed Mar 12 22:54:50 CET 2008 Stephane Popinet * Fix for MRS implementation in parallel Tue Mar 11 04:20:04 CET 2008 Stephane Popinet * Minimal Residual Smoothing implementation This guarantees that the Poisson solver does not diverge (but does not guarantee convergence). It can also accelerate convergence depending on the problem. Coupled with other smaller changes included in this patch ('minlevel' tuning in particular) this improves the robustness of the solver. Wed Mar 12 03:41:31 CET 2008 Stephane Popinet * Series 60 ship waves example Mon Mar 10 07:39:25 CET 2008 Stephane Popinet * SourceControl was broken by momentum source term patch Thu Mar 6 23:31:24 CET 2008 Stephane Popinet * 'omega' relaxation parameter is written only if different from default This means that simulation files are backward-compatible with older versions of gerris/gfsview. Thu Mar 6 08:29:16 CET 2008 Stephane Popinet * Bug fix for sign error in new momentum source term implementation Thu Mar 6 01:22:02 CET 2008 Stephane Popinet * GfsOutput pipes now know the pre-defined Gerris shell variables Wed Mar 5 21:41:40 CET 2008 Stephane Popinet * gerris.spec version number fix Wed Mar 5 03:51:18 CET 2008 Stephane Popinet * Optimised temporary variables usage for "gc" option Wed Mar 5 02:41:38 CET 2008 Stephane Popinet * Cosmetics Wed Mar 5 00:55:54 CET 2008 Stephane Popinet * Removed generation of Postscript docs Tue Mar 4 05:11:27 CET 2008 Stephane Popinet * Bug fix for VOF patch introducing "_x", "_y" and "_alpha" variables Fri Feb 29 00:34:18 CET 2008 Stephane Popinet * VOF interface normals and alpha values are named variables e.g. for a VOF tracer called "T" in 2D, three new variables are automatically created "T_x", "T_y" and "T_alpha". Tue Mar 4 03:05:43 CET 2008 Stephane Popinet * GfsSource terms for velocity components are consistent with projection i.e. they are computed in a manner consistent with the pressure gradient discretisation (in a manner similar to the surface tension). This is necessary in particular to guarantee exact hydrostatic balance with non-linear pressure distributions (e.g. the 'hydrostatic/quadratic' test case). Thu Oct 18 06:30:51 CEST 2007 Stephane Popinet * Added stability conditions for SourceDiffusionExplicit and SourceViscosityExplicit Tue Mar 4 01:35:16 CET 2008 Stephane Popinet * New quadratic hydrostatic pressure test case Thu Feb 28 23:27:04 CET 2008 Stephane Popinet * Bug fix for OutputDropletSums when using functions as volume fraction Wed Feb 27 00:03:50 CET 2008 Stephane Popinet * New air/water capillary wave test case Tue Feb 26 23:20:27 CET 2008 Stephane Popinet * Updated test cases for surface tension/advection bug fix Tue Feb 26 22:32:11 CET 2008 Stephane Popinet * Pressure-correction in the Crank-Nicholson scheme is turned off by default This was degrading the results for a number of test cases (capillary waves in particular). The reasons why are still unclear. Note that this does not mean that this version of the code is the same as the version prior to the "Pressure term is included in RHS of viscosity solve" patch, as this version also includes an important bug fix for the advection terms when surface tension is present. The pressure-correction Crank-Nicholson scheme can be turned off explicitly when required (e.g. "hydrostatic" test case). Fri Feb 22 00:28:45 CET 2008 Stephane Popinet * Cleanup of GfsEventScript temporary files handling Thu Feb 21 22:35:36 CET 2008 Stephane Popinet * Pressure term is included in RHS of viscosity solve This is an important change to the timestepping which should improve things significantly in particular when large source terms are included (e.g gravity + hydrostatic pressure). Thu Feb 21 22:01:09 CET 2008 Stephane Popinet * Fix for initial timestep in Boussinesq example Mon Jan 21 23:32:56 CET 2008 Stephane Popinet * New 'hydrostatic' test case Thu Feb 21 04:55:57 CET 2008 Stephane Popinet * Bug fix when restarting simulations using SurfaceBc Wed Feb 20 23:48:23 CET 2008 Stephane Popinet * Bug fixes for VTK/Tecplot output Tue Jan 29 21:51:03 CET 2008 Stephane Popinet * Added 'omega' over-relaxation parameter Fri Jan 25 03:24:16 CET 2008 Stephane Popinet * Removed gfs_get_from_below_extensive Wed Jan 16 02:53:41 CET 2008 Stephane Popinet * GfsInit becomes a standard GfsEvent when either step or istep is specified Mon Feb 11 06:36:08 CET 2008 Stephane Popinet * VTK/Tecplot export Tue Jan 29 04:13:06 CET 2008 Stephane Popinet * Improved robustness of checks for 'beta' and 'waves' test cases Wed Jan 16 05:36:38 CET 2008 Stephane Popinet * Bug fix when using multiple GfsTime objects in parameter files Tue Jan 15 22:52:23 CET 2008 Stephane Popinet * Various 'fixme' comments Tue Jan 15 22:07:47 CET 2008 Stephane Popinet * New "dV" intrinsic domain variable Tue Jan 15 22:04:54 CET 2008 Stephane Popinet * Renamed GfsOutputDropletStats to GfsOutputDropletSums Note that the syntax has changed, please check the doc. Tue Jan 15 22:04:24 CET 2008 Stephane Popinet * Updated gfs_domain_remove_droplets() to use new GFS_VALUE macro Eventually this macro will replace GFS_VARIABLE. Tue Jan 15 21:55:55 CET 2008 Stephane Popinet * RemoveDroplets takes an extra optional argument Which allows flexible selection of the "droplet" criterion. Tue Jan 15 01:12:36 CET 2008 Stephane Popinet * Force reference of domain in Variable and DerivedVariable Mon Jan 14 05:13:25 CET 2008 Stephane Popinet * Fix for missing variable descriptions Sun Jan 13 09:09:06 CET 2008 Stephane Popinet * Deferred GfsFunction compilation Optionally, GfsFunctions are compiled only when they are used for the first time. This greatly improves the speed of GfsView when reading input piped from Gerris (when the simulation contains one or several GfsFunctions). Sun Jan 13 04:36:05 CET 2008 Stephane Popinet * Updated test cases references Sat Jan 12 06:52:58 CET 2008 Stephane Popinet * Timestep is set properly to guarantee CFL condition This should fix CFL problems when using the VOF scheme. Fri Jan 11 03:00:23 CET 2008 Stephane Popinet * New object GfsOutputDropletStats Fri Jan 11 01:48:15 CET 2008 Stephane Popinet * New function gfs_domain_tag_droplets() Used by GfsRemoveDroplets. This is more generic than the previous implementation. Fri Jan 11 00:10:30 CET 2008 Stephane Popinet * New intersection, union and difference predefined macros Thu Jan 10 01:10:48 CET 2008 Stephane Popinet * 'error.gfs' dump files are indexed by PE number Thu Jan 10 00:20:30 CET 2008 Stephane Popinet * Stricter syntax checking for read() method of Domain Mon Jan 7 21:46:09 CET 2008 Stephane Popinet * RPM build fix (I. Vari) Removed %{?_smp_mflags} from make due to intermittent build errors on some SMP systems. Fri Dec 21 02:53:02 CET 2007 Stephane Popinet * gfs_domain_cfl takes MAC velocities into account Thu Dec 20 11:45:56 CET 2007 Daniel Fuster * gfsjoin201207 Gfsjoin bug: fixed Wed Dec 19 05:44:14 CET 2007 Stephane Popinet * New Cook Strait tides example Tue Dec 18 03:54:36 CET 2007 Stephane Popinet * Simplified regular expression in m4.awk Hopefully this will fix issues with POSIX regex etc... Wed Dec 5 21:42:42 CET 2007 Stephane Popinet * Updated debian package dependencies This should fix problems with recent Ubuntu versions (>= 7.10). Tue Dec 4 21:28:46 CET 2007 Stephane Popinet * Bug fix for reading VariablePosition reference position Thu Nov 15 04:24:59 CET 2007 Stephane Popinet * In VOF advection GfsAdvectionParams needs to be initialised properly Mon Nov 12 02:59:18 CET 2007 Stephane Popinet * VOF advection should now work also with embedded solid boundaries Mon Nov 12 03:47:16 CET 2007 Stephane Popinet * Fixed package (install) dependencies Sun Nov 11 21:20:19 CET 2007 Stephane Popinet * Bug fix for refinement of coarse VOF cells in parallel Thanks to Daniel Fuster for reporting the problem. Thu Nov 8 23:09:44 CET 2007 dfuster@gmail.com * gfsjoin1108 Some modifications are introduced to fix some problems which could appear with the older version Checking options are added Minor format changes Fri Nov 9 05:34:30 CET 2007 Stephane Popinet * cell_init() is now a method of GfsDomain This simplifies applying a consistent initialisation when creating children cells, in particular for the complicated initialisation occuring when refining interface cells between direction-sweeps during VOF advection. Tue Nov 6 00:56:45 CET 2007 Stephane Popinet * New script gfsjoin (written by Daniel Fuster) Wed Oct 31 20:38:24 CET 2007 Stephane Popinet * Bug fix for "classes" internal utility with MPI Tue Oct 30 03:52:48 CET 2007 Stephane Popinet * Added spec file for RPM packaging (thanks to Ivan Vari) Tue Oct 30 02:46:10 CET 2007 Stephane Popinet * Bug fix for MPI version of gfs_domain_stats_balance() Wed Oct 24 00:26:43 CEST 2007 Stephane Popinet * Boundary conditions are applied within Init events This is necessary e.g. when subsequent variables are derived from the gradients of previously initialised variables. Mon Oct 22 23:52:25 CEST 2007 Stephane Popinet * Minimised round-off errors in face_fractions() Mon Oct 15 01:08:37 CEST 2007 Stephane Popinet * Updated waves test case references Fri Oct 12 06:10:33 CEST 2007 Stephane Popinet * Bug fix for gfs_domain_boundary_locate() This is important only for VOF boundary conditions. Fri Oct 12 00:45:47 CEST 2007 Stephane Popinet * Improved secant-bisection root-finding for implicit surfaces Wed Oct 10 02:57:32 CEST 2007 Stephane Popinet * Refines cells which are too coarse for VOF advection Cells are too coarse when one of their neighboring cells is finer and contains and interface which will be advected in them at the next timestep. Thu Oct 11 01:50:12 CEST 2007 Stephane Popinet * New pre-defined implicit surface 'cube' Thu Oct 11 00:37:41 CEST 2007 Stephane Popinet * Both GfsRefineSolid and GfsRefineSurface now work with implicit surfaces Wed Oct 10 01:06:14 CEST 2007 Stephane Popinet * New 'cfactor' parameter for GfsAdapt Tue Oct 9 02:45:45 CEST 2007 Stephane Popinet * New function gfs_domain_reshape() Quoting the doc: "Force the grading of the tree hierarchy of domain, matches the boundaries, recomputes merged cells and applies the boundary conditions for all variables." Fri Sep 28 06:05:17 CEST 2007 Stephane Popinet * gfs_cell_is_cut() is more clever when dealing with implicit surfaces This means in particular that GfsRefineSurface now also works with implicit surfaces. Fri Oct 5 04:42:04 CEST 2007 Stephane Popinet * Fix for compatibility with glib-1.2 series Tue Oct 2 22:48:45 CEST 2007 Stephane Popinet * Miscellaneous doc/comments fixes Fri Sep 28 06:18:23 CEST 2007 Stephane Popinet * GfsNorm ignores values with a weight of zero for max norm Fri Sep 28 05:07:18 CEST 2007 Stephane Popinet * Bug fix for text macros within comments Fri Sep 28 04:59:13 CEST 2007 Stephane Popinet * New "w" option for GfsOutputErrorNorm Thu Sep 20 02:05:00 CEST 2007 Stephane Popinet * Fixed incorrect label for capillary wave test case Tue Sep 18 02:26:19 CEST 2007 Stephane Popinet * Added figure to capillary wave test case Tue Sep 18 00:48:09 CEST 2007 Stephane Popinet * Updated Poisson test cases references The errors have been increased somewhat by using the more robust gradient_fine_coarse() implementation. Tue Sep 18 00:23:11 CEST 2007 Stephane Popinet * Improved formatting of test suite doc header Tue Sep 18 00:04:51 CEST 2007 Stephane Popinet * Bug fix for gfs_domain_stats_balance() on serial parameter files Mon Sep 17 23:58:32 CEST 2007 Stephane Popinet * Removed obsolete installation instructions from the tutorial Fri Sep 14 03:28:16 CEST 2007 Stephane Popinet * New option 'data' for gerris (when splitting or partitioning) Fri Sep 14 03:24:18 CEST 2007 Stephane Popinet * OutputBalance takes "pid" into account even for non-parallel simulations Fri Sep 14 01:39:03 CEST 2007 Stephane Popinet * Fixed gfsview parameters for Boussinesq example Fri Sep 14 01:07:59 CEST 2007 Stephane Popinet * Fix for domain splitting with periodic boundary conditions Fri Sep 14 00:10:22 CEST 2007 Stephane Popinet * Domain traversal should now be deterministic ...as well as the rest of Gerris. This was not the case before because of the "randomization" effect of using hash tables indexed on pointers to store the graph nodes (i.e. the GfsBoxes). This was a pain for debugging and also caused boxes to "jump around" when visualising periodic domains with several boxes. Thu Sep 13 05:01:21 CEST 2007 Stephane Popinet * New "Id" and "Pid" derived variables Wed Sep 12 23:53:12 CEST 2007 Stephane Popinet * Added clock start/stop to avoid harmless warnings Wed Sep 12 23:41:44 CEST 2007 Stephane Popinet * Error message when trying to partition a domain composed of too few boxes Wed Sep 12 06:36:43 CEST 2007 Stephane Popinet * Bug fix for bad comment indentation in parameter files views Tue Sep 11 05:42:39 CEST 2007 Stephane Popinet * Bug fix for SourceControl divide by zero Fri Sep 7 06:33:50 CEST 2007 Stephane Popinet * Minor maintenance (comments, valgrind stuff etc...) Sat Sep 8 23:46:51 CEST 2007 Stephane Popinet * Automake 1.6 is OK (I guess 1.4 is not) Sat Sep 8 08:09:40 CEST 2007 Stephane Popinet * Fixed boundary conditions for boussinesq example As pointed out by Phil Rubini, the previous boundary conditions were misleading: they were equivalent to flow in a closed box rather than the expected vertical open channel. Sat Sep 8 05:11:44 CEST 2007 Stephane Popinet * Fixed typo in oscillation.gfs Fri Sep 7 06:27:34 CEST 2007 Stephane Popinet * Updated test cases references Fri Sep 7 03:12:54 CEST 2007 Stephane Popinet * Test cases are run in the order they appear in the final report Fri Sep 7 02:04:09 CEST 2007 Stephane Popinet * Added 'Define' to known classes Fri Sep 7 01:33:20 CEST 2007 Stephane Popinet * Fixed formatting of gfs2tex parameter file view Fri Sep 7 00:57:16 CEST 2007 Stephane Popinet * Bug fix for uninitialised normal z-component in parabola_fit_init() ..or how 4 characters can lead to no end of trouble... Thu Sep 6 06:48:35 CEST 2007 Stephane Popinet * Macro support needs to be turned on explicitly To avoid m4 problems when trying to apply macros to binary simulation files. Thu Sep 6 04:07:39 CEST 2007 Stephane Popinet * Fix for plotting style of reynolds test case Thu Sep 6 04:05:28 CEST 2007 Stephane Popinet * New inviscid droplet oscillation test case Wed Sep 5 08:07:29 CEST 2007 Stephane Popinet * Updated spurious and capwave test cases Wed Sep 5 03:27:01 CEST 2007 Stephane Popinet * 'kinetic' test case uses a mollified volume fraction Wed Sep 5 02:30:59 CEST 2007 Stephane Popinet * Macro support in parameter files Wed Sep 5 02:09:45 CEST 2007 Stephane Popinet * Checks that automake version is >= 1.8 Wed Sep 5 02:09:04 CEST 2007 Stephane Popinet * Added assertions alpha > 0. Alpha (1/rho) is user defined and could take negative values if care is not taken. Thu Aug 30 04:08:31 CEST 2007 Stephane Popinet * gradient_fine_coarse() uses only directly neighbouring cells Using a third cell in the opposite direction, although nominally second-order in space could cause instabilities. The reduced spatial order of this new implementation does not seem to affect the convergence rates for the test cases in the test suite. Mon Sep 3 05:36:26 CEST 2007 Stephane Popinet * Dependency fix for order of variables when writing simulation files Physical parameters can depend on defined variables. The incorrect order could prevent from restarting a simulation. Fri Aug 31 08:31:16 CEST 2007 Stephane Popinet * Initial projection is skipped when restarting a simulation Fri Aug 31 04:42:54 CEST 2007 Stephane Popinet * Constants can be expressions (not for all objects yet) Sun Aug 19 02:19:48 CEST 2007 Stephane Popinet * VariableFiltered was not taking the number of iterations into account Thu Aug 30 03:18:34 CEST 2007 Stephane Popinet * Updated CSS stylesheet for consistency with wiki Wed Aug 29 01:33:14 CEST 2007 Stephane Popinet * Bug fix for adaptation with 'maxcells' set Wed Aug 29 00:59:38 CEST 2007 Stephane Popinet * Bug fix for memory corruption when trying to do "twisted" streamlines in 2D Wed Aug 22 02:58:07 CEST 2007 Stephane Popinet * Major bug fix for VOF advection scheme The previous implementation did not take into account properly the compression/expansion of cell volumes at each step of the split scheme. As a result the overall scheme had very poor mass conservation. Mon Jul 23 23:50:32 CEST 2007 Stephane Popinet * New test case for kinetic energy conservation in multiphase flows Thu May 24 05:10:02 CEST 2007 Stephane Popinet UNDO: Refines cells which are too coarse for VOF advection Cells are too coarse when one of their neighboring cells is finer and contains and interface which will be advected in them at the next timestep. Thu May 24 05:10:02 CEST 2007 Stephane Popinet * Refines cells which are too coarse for VOF advection Cells are too coarse when one of their neighboring cells is finer and contains and interface which will be advected in them at the next timestep. Wed Aug 22 06:14:41 CEST 2007 Stephane Popinet * Updated spurious currents test case Wed Aug 22 05:26:02 CEST 2007 Stephane Popinet * Updated 'shear' VOF advection test case Including test for mass conservation. Wed Aug 22 05:25:07 CEST 2007 Stephane Popinet * New VOF advection test case with adaptive refinement Wed Aug 22 02:43:09 CEST 2007 Stephane Popinet * Ignore white spaces at the start of a parameter file Wed May 30 04:53:30 CEST 2007 Stephane Popinet * Capillary wave test case uses a larger domain aspect ratio This improves the convergence significantly and the results compare well with those of Gerlach et al (added in the biblio). Wed May 23 06:36:26 CEST 2007 Stephane Popinet * Face curvature does not use vof-weighted averaging anymore Wed Aug 15 07:06:45 CEST 2007 Stephane Popinet * Automated darcs versioning ignores changes in the doc/ directory Fri May 25 02:28:28 CEST 2007 Stephane Popinet * Kmax values for "nearly empty" interfacial cells are filtered Wed May 23 02:41:23 CEST 2007 Stephane Popinet * VariableCurvature optionally computes the maximum curvature Tue May 22 03:28:48 CEST 2007 Stephane Popinet * Cleanup of HF curvature calculation Tue May 22 00:53:44 CEST 2007 Stephane Popinet * Several improvements to height-function curvature calculation - Interface positions are taken into account only if they are far enough apart. - Nearest neighbour interpolation is used before resorting to facet-fitting. - Various options for circle-fitting and paraboloids of different degrees etc... Thu May 10 01:59:46 CEST 2007 Stephane Popinet * Paraboloid fitting for curvature calculation in 3D Sat May 5 03:53:43 CEST 2007 Stephane Popinet * Parabola fitting uses normal direction and local interface position Wed May 2 23:43:42 CEST 2007 Stephane Popinet * Parabola fitting for gfs_height_curvature() Mon Apr 30 12:15:19 CEST 2007 Stephane Popinet * More robust implementation of gfs_height_curvature() Tries all directions of integration (based on normal orientation) rather than only the first guess. Sun Aug 12 09:31:36 CEST 2007 Stephane Popinet * Fix for ffmpeg options and mktemp in ppm2mpeg Newer ffmpeg versions seem to have stricter syntax for the bitrate. Also mktemp does not seem to accept the "-t" option on all systems. Sat Jul 28 09:26:30 CEST 2007 Stephane Popinet * BcNavier for Navier slip condition Thu Jul 26 04:02:05 CEST 2007 Stephane Popinet * Explicit message when trying to use implicit surfaces with RefineSolid Tue Aug 7 07:06:21 CEST 2007 Stephane Popinet * Fixed comment formatting for logo example Tue Aug 7 07:03:38 CEST 2007 Stephane Popinet * Testing framework now depends on bash So that we can use the "set -o pipefail" option to be sure to capture all errors when running a test command which is made of independent piped commands (e.g. "gerris2D logo.gfs | gfsview2D logo.gfv"). Thu Aug 2 05:32:28 CEST 2007 Stephane Popinet * Improved error checking for ppm2mpeg Thu Jul 5 14:58:23 CEST 2007 Stephane Popinet * Fix for corner case in face_bilinear() Sat Jun 9 12:05:22 CEST 2007 Stephane Popinet * New object GfsSourceViscosityExplicit Wed May 23 04:42:52 CEST 2007 Stephane Popinet * Bug fix for marginal case in myc (3D version) Wed May 23 01:18:42 CEST 2007 Stephane Popinet * GfsFunction does not use variable index anymore The index of a variable can vary during the simulation. Use the variable's address instead. Tue May 22 00:53:05 CEST 2007 Stephane Popinet * Fix for degenerate case in gfs_domain_remove_droplets Sun May 20 11:51:55 CEST 2007 Stephane Popinet * G_MAXDOUBLE values are ignored by gfs_norm_add() and gts_range_add_value() Fri Apr 27 00:35:25 CEST 2007 Stephane Popinet * Fix for inconsistent momentum diffusion When using SourceDiffusion for variable density flows (thanks to Shahriar Afkhami for reporting this). Thu Apr 26 23:58:03 CEST 2007 Stephane Popinet * New exported function gfs_multilevel_params_stats_write() Thu Apr 26 02:57:34 CEST 2007 Stephane Popinet * Reformatted bibtex reference Wed Apr 25 00:21:24 CEST 2007 Stephane Popinet * More detailed versioning of test cases summary Wed Apr 25 00:15:42 CEST 2007 Stephane Popinet * Bug fix for GfsSurface transformations Tue Apr 24 09:09:50 CEST 2007 Stephane Popinet * Moved 'shear' example to test cases Tue Apr 24 03:35:07 CEST 2007 Stephane Popinet * Fix for gfs2doc when used on test cases Tue Apr 24 03:02:06 CEST 2007 Stephane Popinet * Updated examples to use implicit surfaces Tue Apr 24 02:56:18 CEST 2007 Stephane Popinet * Configure checks for linker flags required for module compilation This should fix issues on the various versions of Mac OSX. Tue Apr 24 08:48:25 CEST 2007 Stephane Popinet * Rotations for GfsSurface are defined only via principal axis Tue Apr 24 01:09:40 CEST 2007 Stephane Popinet * Bug fix for Fedora tarball Mon Apr 23 09:10:49 CEST 2007 Stephane Popinet * Minor bug fixes Fri Apr 20 07:47:10 CEST 2007 Stephane Popinet * Bug fix for expression parsing Fri Apr 20 07:35:50 CEST 2007 Stephane Popinet * Updated wave tests to use implicit surfaces Fri Apr 20 06:53:56 CEST 2007 Stephane Popinet * New function gfs_surface_segment_normal() Fri Apr 20 06:53:29 CEST 2007 Stephane Popinet * New predefined spatial function 'sphere()' Fri Apr 20 05:44:55 CEST 2007 Stephane Popinet * Updated tests with new implicit surfaces Fri Apr 20 05:44:00 CEST 2007 Stephane Popinet * Bug fix for "flattened" surfaces in RefineSurface Fri Apr 20 03:45:51 CEST 2007 Stephane Popinet * Secant/bisection root-finding for implicit surfaces Wed Apr 18 07:39:26 CEST 2007 Stephane Popinet * Solid boundaries can be defined using implicit surfaces # a cylinder of radius 0.0625 Solid (x*x + y*y - 0.0625*0.0625) This can also be used to define volume fractions (using GfsInitFraction). Fri Apr 20 00:28:39 CEST 2007 Stephane Popinet * Docs are not included in the distribution tarball anymore Tue Apr 17 02:17:48 CEST 2007 Stephane Popinet * All surfaces are now defined using a new GfsSurface object Note that this is a new object, the previous "GfsSurface" has been replaced with "GfsSolid". Mon Apr 16 01:29:55 CEST 2007 Stephane Popinet * Detailed versioning based on darcs Mon Apr 16 01:08:28 CEST 2007 Stephane Popinet * darcs2dist checks that the tarball builds properly Mon Apr 16 01:07:10 CEST 2007 Stephane Popinet * Added missing desktop files to tarball distribution Fri Apr 13 07:56:32 CEST 2007 Stephane Popinet * GfsSurface allows transformations of the input GTS surface Fri Apr 13 07:46:36 CEST 2007 Stephane Popinet * New GfsSurface class replaces GtsSurfaceFile and GtsSurface The GtsSurfaceFile keyword is still supported, however the GtsSurface keyword is not and should be replaced by "GfsSurface {}" in old simulation files. Fri Apr 13 04:00:20 CEST 2007 Stephane Popinet * New tool gfs2gfs to convert old simulations to the current format Fri Apr 13 03:00:37 CEST 2007 Stephane Popinet * First parameter block of GfsEvent is now optional Provided it is not followed by another parameter block. Thu Apr 12 04:33:04 CEST 2007 Stephane Popinet * curvature_coarse_fine() did not work when using a VariableDistance Thu Apr 12 02:02:04 CEST 2007 Stephane Popinet * Simplified layered (2D3) GfsOcean implementation A first step towards a full 3D (non-layered) ocean model. Note that variables "HU" and "HV" are no longer defined. "U" and "V" should be used instead (particularly for Flather BCs in parameter files). Thu Apr 12 01:42:54 CEST 2007 Stephane Popinet * Updated nz test case Thu Apr 12 00:08:55 CEST 2007 Stephane Popinet * Updated circle/refined test case for new fine/coarse gradient calculation Wed Apr 11 07:23:17 CEST 2007 Stephane Popinet * Changed fine_coarse gradient calculation Fine cells on the left-hand-side of the fine-coarse boundary are taken into account only if they are not mixed. This is to ensure the stability of the GfsOcean model (the nz test case). Wed Apr 11 07:20:53 CEST 2007 Stephane Popinet * New adaptive coastally-trapped wave test case Wed Apr 11 07:19:25 CEST 2007 Stephane Popinet * New gravity waves in Cook strait test case Thu Apr 5 03:45:14 CEST 2007 Stephane Popinet * Simplified Poisson coefficients calculation Thu Mar 29 02:45:42 CEST 2007 Stephane Popinet * Bug fix for gfs_domain_traverse_cut_2D() Thu Mar 29 01:20:41 CEST 2007 Stephane Popinet * Merged advection fluxes redistribution is done differently This mitigates the appearance of negative values for positive tracers near solid boundaries. Tue Mar 27 06:16:21 CEST 2007 Stephane Popinet * Bug fix for non-initialised fractions in GfsOcean Tue Mar 27 02:24:42 CEST 2007 Stephane Popinet * New derived variables for surface fractions Tue Mar 27 02:23:04 CEST 2007 Stephane Popinet * Adaptivity along solid boundaries should now work (but not for 2D3 yet) Thu Mar 22 22:28:08 CET 2007 Stephane Popinet * Added check for positiveness of solid->s[0] Thu Mar 22 22:16:55 CET 2007 Stephane Popinet * ftt_cell_locate() works for 2D3 Tue Mar 20 02:06:56 CET 2007 Stephane Popinet UNDO: Source terms for non-advected variables are taken into account Tue Mar 20 02:06:56 CET 2007 Stephane Popinet * Source terms for non-advected variables are taken into account Tue Mar 20 01:57:58 CET 2007 Stephane Popinet * Improved error messages for Cartesian grid interpolation Mon Mar 19 01:39:13 CET 2007 Cedric Penard * Cartesian functions Mon Mar 19 06:07:37 CET 2007 Stephane Popinet * gfs_plane_center() works with any normal Not just with normals in the positive quadrant. Mon Mar 19 06:05:45 CET 2007 Stephane Popinet * New functions gfs_vof_plane_facet() and gfs_vof_plane_center() Sun Mar 18 01:18:19 CET 2007 Stephane Popinet * Simplified circular wave test case (using GfsGlobal) Fri Mar 16 05:13:03 CET 2007 Stephane Popinet * "Permanent" cells cannot be coarsened At the moment this is used to prevent coarsening of the initial embedded solid surface: a first step towards adaptivity of embedded solid surfaces. Fri Mar 16 03:03:01 CET 2007 Stephane Popinet * Special 2D3 case for interpolate_1D1 upwinding Fri Mar 16 02:32:20 CET 2007 Stephane Popinet * Initial timestep is set to zero (not one) Fri Mar 16 02:31:31 CET 2007 Stephane Popinet * Small fix for GfsCartesianGrid Thu Mar 15 04:14:21 CET 2007 Stephane Popinet * New "twod" option for GfsRefineSurface Wed Mar 14 23:51:11 CET 2007 Stephane Popinet * Merged cells work for 2D3 Wed Mar 14 23:47:58 CET 2007 Stephane Popinet * Small cells cannot be close to boundaries Wed Mar 14 23:03:13 CET 2007 Stephane Popinet * New derived variable "dt" (timestep) Wed Mar 14 05:21:29 CET 2007 Stephane Popinet * GfsOcean uses new variables "HU" and "HV" to store the barotropic velocity field This simplifies the implementation of Flather boundary conditions. Tue Mar 13 04:18:40 CET 2007 Stephane Popinet * Cleanup of GfsCartesianGrid Tue Mar 13 03:45:54 CET 2007 Cedric Penard * Fix for merge with stable branch Tue Mar 13 02:01:28 CET 2007 C[__]dric P[__]nard * New object GfsCartesianGrid Tue Mar 13 03:25:43 CET 2007 Stephane Popinet * Updated couette.gfs Comments in functions must now use the C format ('/*' not '#'). Fri Mar 9 04:37:42 CET 2007 Stephane Popinet * Further bug fixing for comments in GfsFunction expressions Thu Mar 8 22:00:43 CET 2007 Stephane Popinet * Updated examples doc Thu Mar 8 04:54:54 CET 2007 Stephane Popinet * Bug fix for Dirichlet BC for VOF tracers Wed Mar 7 22:04:53 CET 2007 Stephane Popinet * GfsVariablePosition takes an optional 'ref' argument Sun Mar 4 23:45:42 CET 2007 Stephane Popinet * Updated Rayleigh-Taylor example Sun Mar 4 09:03:24 CET 2007 Stephane Popinet * Fix for reseting 'status' when computing solid fractions Sun Mar 4 09:02:30 CET 2007 Stephane Popinet * Init events are turned into standard events when specifying 'step' Sun Mar 4 09:01:33 CET 2007 Stephane Popinet * Updated shear example Sat Dec 2 07:33:35 CET 2006 Stephane Popinet UNDO: Init events are also realised at half timesteps Fri Mar 2 02:51:18 CET 2007 Stephane Popinet * Fixed dependencies for gfsclasses.py Fri Mar 2 02:33:12 CET 2007 Stephane Popinet * Cleanup of Couette flow test case Fri Mar 2 02:29:57 CET 2007 Stephane Popinet * Fix for face interpolation of diffusion coefficients Fri Mar 2 02:25:30 CET 2007 Stephane Popinet * Unified script/code treatment for GfsGlobal, GfsEventScript and GfsOutput This fixes a bug in GfsOutput and GfsEventScript where "#!" were treated as comments. Thu Mar 1 21:14:32 CET 2007 Stephane Popinet * Debian package recommends various bits and bobs Thu Mar 1 21:10:36 CET 2007 Stephane Popinet * Updated surface tension test cases Fri Mar 2 04:42:49 CET 2007 Stephane Popinet * Added Gerris logo example Thu Mar 1 04:53:23 CET 2007 Stephane Popinet * Fixed face_bc() for GfsBcDirichlet Wed Feb 28 21:54:14 CET 2007 Stephane Popinet * VOF normal is computed using "myc" in 2D (thanks to Ruben Scardovelli) Wed Feb 28 04:33:59 CET 2007 Stephane Popinet * Updated test cases Wed Feb 28 04:32:00 CET 2007 Stephane Popinet * Temporary bug fix for GfsEventStop For more "complex" variables (e.g. VariableTracerVOF) EventStop will not work properly if adaptivity is used. There is no simple solution to this problem. Wed Feb 28 04:29:55 CET 2007 Stephane Popinet * Added icons for mime types Tue Feb 27 03:15:31 CET 2007 Stephane Popinet * Fix for merge with CSF branch Tue Feb 27 02:59:13 CET 2007 Stephane Popinet * Added tolerance to avoid "missed" synchronised events Tue Feb 27 02:56:33 CET 2007 Stephane Popinet * Fix for overflow exception Wed Feb 21 22:34:27 CET 2007 Stephane Popinet * Updated gfs_classes() Mon Feb 12 02:46:56 CET 2007 Stephane Popinet * Mixed Youngs-Centered VOF normal calculation Fri Feb 9 05:24:41 CET 2007 Stephane Popinet * Symmetry boundary conditions for VOF These are approximate only, in particular the boundary conditions for the normal should be anti-symmetric not symmetric (as implemented in this patch). The effect of this approximation should be small however. Also, not sure what the symmetry conditions actually do when combined with complex solid boundaries. Fri Feb 9 01:54:16 CET 2007 Stephane Popinet * Bug fix for periodic boundary conditions Wed Feb 7 05:00:23 CET 2007 Stephane Popinet * Fix for small VOF fragments in vof_fine_coarse() Tue Jan 30 23:42:48 CET 2007 Stephane Popinet * Simplified and more robust Youngs stencil routine Tue Jan 30 04:59:30 CET 2007 Stephane Popinet * Removed obsolete AdaptNotBox stuff Sun Jan 28 09:02:01 CET 2007 Stephane Popinet * VOF Tracers are now defined using GfsVariableTracerVOF Normal directions and alpha are pre-computed and stored together with the VOF fraction. Fri Jan 26 22:33:46 CET 2007 Stephane Popinet * Stability criterion for gravity waves only takes into account interface cells Mon Dec 11 02:54:57 CET 2006 Stephane Popinet * VariableCurvature uses either height-function method or levelset According to the arguments (i.e. the second argument specifies a VariableTracer or a VariableDistance). Wed Dec 6 03:32:16 CET 2006 Stephane Popinet * New object GfsVariablePosition For implementation of "reduced gravity". Sun Aug 13 09:34:40 CEST 2006 Stephane Popinet * Periodic boundary conditions do not use connectivity This made calculating geometric relationships difficult (e.g. distance between cells etc...). Periodic links are now automatically replaced by a new type of boundary condition (GfsBoundaryPeriodic). This is also used as a base class for a simplified GfsBoundaryMPI implementation. This should fix the bug when using the diffusion solver with embedded solid boundaries combined with periodic boundary conditions. Mon Aug 14 01:55:46 CEST 2006 Stephane Popinet * New function gfs_domain_filter() Sat Apr 22 04:07:37 CEST 2006 Stephane Popinet * New object GfsEventSumDirection Wed Feb 21 22:44:09 CET 2007 Stephane Popinet * gfs_simulation_adapt() does not take a "stats" parameter anymore Tue Feb 13 04:22:44 CET 2007 Stephane Popinet * Removed warning for interpolation of GTS files in functions Wed Jan 31 22:27:33 CET 2007 Stephane Popinet * Merged advection fluxes were not correctly weighted For solid boundaries with a variable resolution. Sun Jan 28 09:11:17 CET 2007 Stephane Popinet * Updated SourceTensionCSS to reflect new staggered timestepping of tracers Sun Jan 28 08:52:57 CET 2007 Stephane Popinet * Initialisation of simulation is done using gfs_simulation_init() Sun Jan 21 06:48:29 CET 2007 Stephane Popinet * Optimised implementation of ftt_cell_locate() Sat Dec 2 07:33:35 CET 2006 Stephane Popinet * Init events are also realised at half timesteps Fri Jan 19 04:53:31 CET 2007 Stephane Popinet * VOF works (as in "does not crash") with embedded solid boundaries Thu Jan 18 22:42:07 CET 2007 Stephane Popinet * New gravity wave test case Thu Jan 18 21:32:43 CET 2007 Stephane Popinet * Updated capillary wave test cases Thu Jan 18 21:28:36 CET 2007 Stephane Popinet * Tracers are now defined at time n+1/2 The resulting "leap-frog" time integration allows to recover second-order accuracy for variable-density and surface-tension-driven flows. Wed Jan 17 22:47:30 CET 2007 Stephane Popinet * Fix for face coordinates calculation in GfsFunction Fri Dec 22 05:19:58 CET 2006 Stephane Popinet * New test case for capillary wave with fluids of different densities Mon Dec 18 20:54:38 CET 2006 Stephane Popinet * gfs_vof_facet() could fail for degenerate cases Mon Dec 18 20:52:43 CET 2006 Stephane Popinet * Changed the format used by gfs_write_mac_velocity() to gnuplot Mon Dec 18 20:48:40 CET 2006 Stephane Popinet * Default CFL for VOF advection has been set to 0.45 To have some margin. Also a warning has been added in case the true CFL is larger than 0.5 (when doing the VOF advection proper). Thu Dec 14 02:30:56 CET 2006 Stephane Popinet * Density (and viscosity) is computed using face-interpolated volume fraction values This uses the new gfs_function_face_value(). Large density ratio flows can now be computed correctly. Needs further testing. Thu Dec 14 04:19:10 CET 2006 Stephane Popinet * Updated Rayleigh-Taylor example Now it really works, thanks to the new density calculation. The results compare well to other simulations (Surfer and Marker code results in my thesis). Thu Dec 14 01:03:31 CET 2006 Stephane Popinet * gfs_function_face_value() uses the face-interpolated values of variables Mon Dec 11 03:22:30 CET 2006 Stephane Popinet * Added description for VariableDistance Mon Dec 11 03:03:53 CET 2006 Stephane Popinet * Fixed constant for stability constraint of surface tension Wed Dec 6 01:20:18 CET 2006 Stephane Popinet * Functions to compute cell/plane intersections have been moved from GfsView They are used to compute 3D VOF facets. Note also that the interface of gfs_vof_facet() has changed. Tue Dec 5 00:26:07 CET 2006 Stephane Popinet * "Non-hydrostatic pressure" implementation This is useful for two-phase flows with a (flattish) interface, variable density and gravity. The hydrostatic pressure is substracted off and the remaining pressure jump across the interface due to gravity is discretised using the same technique as for surface tension. This guarantees an accurate solution free of spurious (gravity) currents. Fri Dec 1 03:35:09 CET 2006 Stephane Popinet * Bug fix for VOF boundary conditions Tue Nov 28 00:30:19 CET 2006 Stephane Popinet * VOF plane is defined in full cells This prevents floating point exceptions when assigning undefined values to VOF plane variables. Tue Nov 28 00:28:36 CET 2006 Stephane Popinet * Code cleanup for tension coefficients Tue Nov 28 00:24:16 CET 2006 Stephane Popinet * Generic boundary conditions cannot be applied for VOF fractions A special case treatment has been added for symmetry and Dirichlet conditions. Fri Nov 24 04:13:31 CET 2006 Stephane Popinet * Multiple SourceTension terms are permitted For example a combination of surface tension and "reduced gravity". Thu Nov 23 02:56:30 CET 2006 Stephane Popinet * SourceTension can be used to implement "reduced gravity" Wed Nov 22 22:54:20 CET 2006 Stephane Popinet * Maximum CFL is 0.5 for VOF Tue Nov 7 06:54:44 CET 2006 Stephane Popinet * More robust algorithm for computation of local interface height Fri Nov 3 05:31:30 CET 2006 Stephane Popinet * Height-Function curvature calculation should now work in 3D and also on 3D adaptive grids. Fri Nov 3 01:26:59 CET 2006 Stephane Popinet * Limit on the size of the HF-curvature calculation "stencil" Thu Nov 2 05:27:08 CET 2006 Stephane Popinet * 3D implementation of gfs_youngs_normal() Thu Nov 2 05:25:01 CET 2006 Stephane Popinet * "Exact" implementation of gfs_plane_alpha() in 3D This replaces the Newton iterations version. It is much more accurate and hence ensures better volume conservation. Wed Nov 1 23:39:24 CET 2006 Stephane Popinet * Singular 3D VOF volume calculations use the 2D algorithm This guarantees exact volume representation. Wed Nov 1 03:24:50 CET 2006 Stephane Popinet * Bug fix for VOF advection with periodic boundary conditions Mon Oct 23 07:00:48 CEST 2006 Stephane Popinet * Added missing variable descriptions Sun Oct 22 11:06:34 CEST 2006 Stephane Popinet * Important bug fix for boundary conditions on alpha Sat Oct 21 06:58:40 CEST 2006 Stephane Popinet * Fixed VOF-plane calculation for isolated interface fragments The zero-norm of the singular interface normal in this case was causing NaN problems. Fri Oct 20 06:00:04 CEST 2006 Stephane Popinet * Fixed VOF advection boundary conditions Fri Oct 20 05:59:51 CEST 2006 Stephane Popinet * Capillary wave test case took too long to run with 7 levels Fri Oct 20 03:40:04 CEST 2006 Stephane Popinet * Figure for PLIC height calculation Fri Oct 20 03:39:50 CEST 2006 Stephane Popinet * Updated spurious currents test case Thu Oct 19 06:16:31 CEST 2006 Stephane Popinet * Added warnings when HF-curvature fails Thu Oct 19 06:16:12 CEST 2006 Stephane Popinet * SourceTension and SourceTensionCSS are derived from a new SourceTensionGeneric object Also SourceTensionCSS "works" again thanks to the new function gfs_youngs_gradient (actually a renamed version of the old gfs_youngs_normal implementation). Wed Oct 18 06:27:32 CEST 2006 Stephane Popinet * GfsSourceTension takes an extra 'sigma' argument Wed Oct 18 06:02:13 CEST 2006 Stephane Popinet * Updated capillary wave test case Wed Oct 18 05:58:11 CEST 2006 Stephane Popinet * Cleanup of HF-curvature implementation Wed Oct 18 00:50:16 CEST 2006 Stephane Popinet * HF curvature calculation works on adaptive meshes! But in 2D only for the moment. This patch also contains various (unused) routines implementing other ways of computing the curvature (based on VOF interface reconstructions, mean-square parabola and circle fit etc...) Sun Oct 8 10:26:16 CEST 2006 Stephane Popinet * New function gfs_vof_interpolate() Fri Oct 6 04:09:51 CEST 2006 Stephane Popinet * New functions gfs_fit_curvature() and gfs_shahriar_curvature() Fri Oct 6 04:07:56 CEST 2006 Stephane Popinet * New function gfs_domain_boundary_locate() Tue Aug 15 11:44:55 CEST 2006 Stephane Popinet * VariableCurvature uses height method rather than levelset Tue Aug 15 11:14:43 CEST 2006 Stephane Popinet * New function gfs_height_curvature() Only works in 2D and on non-refined grids for the moment. Tue Aug 15 11:13:48 CEST 2006 Stephane Popinet * Normal computation with the "column" method Tue Aug 15 11:02:12 CEST 2006 Stephane Popinet * Volume fraction weighting of surface tension term Tue Aug 15 10:58:51 CEST 2006 Stephane Popinet * Density is taken into account for surface tension term Mon Aug 14 03:05:09 CEST 2006 Stephane Popinet * New VOF advection implementation Works with variable interface resolution but not with solid boundaries yet. Uses "Eulerian" rather than "Lagrangian" PLIC advection. Mon Aug 14 02:56:01 CEST 2006 Stephane Popinet * GfsVariableCurvature has moved to levelset.c Mon Aug 14 02:54:30 CEST 2006 Stephane Popinet * Filtering of curvature along the interface For levelset curvature only and disabled by default. Mon Aug 14 02:15:29 CEST 2006 Stephane Popinet * New implementation of Youngs gradient Works on adaptive meshes but only in 2D for the moment. Mon Aug 14 02:11:29 CEST 2006 Stephane Popinet * Updated stability criterion for surface tension Mon Aug 14 01:57:14 CEST 2006 Stephane Popinet * Tracer advection does not save "half" values anymore Tue May 23 08:23:43 CEST 2006 Stephane Popinet * gfs_line_alpha() uses explicit formula ... rather than Newton iterations. Tue Feb 21 18:06:05 CET 2006 Stephane Popinet * VOF should work across refinement levels Also gfs_plane_volume() and gfs_plane_alpha() now do their own symmetries (i.e. do not require m.x, m.y and m.z to be positive anymore). Mon Feb 20 17:18:27 CET 2006 Stephane Popinet * Simplification of gfs_plane_volume() Sun Feb 5 14:08:32 CET 2006 Stephane Popinet * CSF uses volume-fraction-weighted tension terms Sun Feb 5 02:32:49 CET 2006 Stephane Popinet * VariableCurvature must be interpolated with care on adaptive mesh Sun Feb 5 02:29:25 CET 2006 Stephane Popinet * Sigma and theta have nothing to do in VariableCurvature ...they will be back in a latter version of SourceTension. Sat Feb 4 14:43:22 CET 2006 Stephane Popinet * Updated spurious current test case Sat Feb 4 14:38:44 CET 2006 Stephane Popinet * Bug fix for VariableCurvature computation near boundaries Sat Feb 4 10:37:47 CET 2006 Stephane Popinet * VariableDistance computes the distance function only locally i.e. in a neighbourhood of the interface just large enough for VariableCurvature. Sat Feb 4 10:34:43 CET 2006 Stephane Popinet * New functions gfs_center_gradient_stencil() and gfs_interpolate_stencil() Fri Feb 3 04:26:15 CET 2006 Stephane Popinet * For curvature estimation, normals are computed using simple gradients ...rather than Youngs gradients. This stabilises the surface tension, improves the spurious currents and it is simpler. Fri Feb 3 02:43:15 CET 2006 Stephane Popinet * Renamed VariableLevelSet as VariableDistance Fri Feb 3 02:15:29 CET 2006 Stephane Popinet * Back to semi-implicit surface tension for capillary wave test case Although the explicit scheme appeared to be more accurate it was just by chance (i.e. the error increased when the timestep decreased). Fri Feb 3 02:13:12 CET 2006 Stephane Popinet * VariableCurvature is defined only on the interface It now is defined as the curvature of the piece of interface cutting the cell. If the cell is not cut by the interface it is set to G_MAXDOUBLE. Fri Feb 3 02:01:19 CET 2006 Stephane Popinet * VOF-based levelset function computation is back It works well with the new curvature calculation. Wed Feb 1 18:37:13 CET 2006 Stephane Popinet UNDO: Levelset function is computed using the VOF-reconstructed interface Thu Feb 2 11:39:56 CET 2006 Stephane Popinet * Youngs-averaging of normal divergence was unstable in some cases Thu Feb 2 11:38:10 CET 2006 Stephane Popinet * The distance function value was not always correct for cells cut by the isoline Wed Feb 1 12:11:25 CET 2006 Stephane Popinet * Control of "implicitness" of VariableCurvature Tue Jan 31 15:34:46 CET 2006 Stephane Popinet * "Semi-implicit" scheme for VariableCurvature Mon Jan 30 10:46:30 CET 2006 Stephane Popinet * VariableCurvature uses Youngs divergence Rather than gfs_center_gradient(). This improves the spurious currents slightly. Wed Feb 1 22:06:42 CET 2006 Stephane Popinet * Stability condition for surface tension was still too restrictive Wed Feb 1 18:37:13 CET 2006 Stephane Popinet * Levelset function is computed using the VOF-reconstructed interface Wed Feb 1 15:17:26 CET 2006 Stephane Popinet * Updated spurious and capwave test cases Wed Feb 1 12:16:06 CET 2006 Stephane Popinet * Stability constraint for surface tension was too restrictive Mon Jan 30 10:42:31 CET 2006 Stephane Popinet * K8 smoothing kernel doesn't work Bubbles appear to be unstable for all smoothing lengths larger than twice the grid size. For these lengths K8 does not improve over the default vertex filter. Mon Jan 30 10:40:57 CET 2006 Stephane Popinet * VariableFiltered uses K8 smoothing kernel Sun Jan 29 23:28:39 CET 2006 Stephane Popinet * Levelset sign was not computed properly Sun Jan 29 21:07:20 CET 2006 Stephane Popinet * VariableLevelSet computes the levelset function Sat Jan 28 13:46:09 CET 2006 Stephane Popinet * Stability criterion for CSF surface tension Sat Jan 28 12:36:29 CET 2006 Stephane Popinet * Source terms have a new generic stability() method Sat Jan 28 12:32:11 CET 2006 Stephane Popinet * CSF surface tension implementation This is the default. The old CSS implementation (2D only) is still available as SourceTensionCSS. Mon Feb 26 23:13:06 CET 2007 Stephane Popinet * Added missing html doc titles Thu Feb 22 05:22:22 CET 2007 Stephane Popinet * Added mime-types Tue Feb 13 04:23:32 CET 2007 Stephane Popinet * Bug fix for mixed-cells output in gfs2oogl Wed Feb 21 01:20:19 CET 2007 Stephane Popinet * darcs2dist creates 'versioned' snapshots Tue Feb 20 22:28:12 CET 2007 Stephane Popinet * MacOSX does not like nested functions They were used to implement dx(), dy(), dz() in GfsFunction. They have been replaced by using ugly (but portable) global variables. Tue Feb 20 21:52:17 CET 2007 Stephane Popinet * Fixed labels in tutorial Tue Feb 20 21:51:54 CET 2007 Stephane Popinet * Fix for darcs2dist Tue Feb 20 21:51:05 CET 2007 Stephane Popinet * Updated source doc templates Tue Feb 20 04:15:30 CET 2007 Stephane Popinet * Bigger fonts and thicker lines for lid test figures Tue Feb 20 04:14:52 CET 2007 Stephane Popinet * Added anchor points for some sections of the tutorial Tue Feb 20 04:14:13 CET 2007 Stephane Popinet * Workaround for character encoding bug in hevea 1.08 Tue Feb 20 04:12:43 CET 2007 Stephane Popinet * FAQ is now in the wiki not in the source doc Mon Feb 19 23:18:18 CET 2007 Stephane Popinet * GfsOutputAdaptStats works again Mon Feb 19 04:23:30 CET 2007 Stephane Popinet * Option for color names in tests documentation Sun Feb 18 22:25:24 CET 2007 Stephane Popinet * Parameter files in docs now link to "Object Hierarchy" wiki Fri Feb 16 03:55:50 CET 2007 Stephane Popinet * Uses hevea rather than latex2html to generate HTML docs Wed Feb 14 23:23:02 CET 2007 Stephane Popinet * Poisson test cases were not reliable due to race conditions in command pipes Wed Feb 14 23:20:59 CET 2007 Stephane Popinet * Much simplified GfsOutput command pipe implementation Wed Feb 14 05:22:58 CET 2007 Stephane Popinet * Fix for variables in POSIX shells (for test suite) Wed Feb 14 02:52:27 CET 2007 Stephane Popinet * Fix for getopt_long and unknown arguments Wed Feb 14 02:21:35 CET 2007 Stephane Popinet * Updated Rayleigh-Taylor example Wed Feb 14 02:18:07 CET 2007 Stephane Popinet * New ppm2mpeg helper script (uses ffmpeg) ffmpeg is better than mjpegtools and simpler to install (debian packages are readily available). Wed Jan 31 00:01:41 CET 2007 Stephane Popinet * Python test script works with dash Mon Jan 29 23:34:50 CET 2007 Stephane Popinet * New GfsGlobal object defines "global" functions Fri Jan 19 02:22:41 CET 2007 Stephane Popinet * Improved gfs_domain_remove_droplets() Wed Jan 17 22:49:19 CET 2007 Stephane Popinet * GfsAdaptNotBox is deprecated Tue Dec 19 04:29:27 CET 2006 Stephane Popinet * Thin cells filled with fluid could create an incorrect topology Tue Dec 19 01:51:59 CET 2006 Stephane Popinet * Replaced assertion with warning in solid fractions calculation Mon Dec 11 02:52:40 CET 2006 Stephane Popinet * "levelmin" is taken into account only for coarsening the mesh Wed Dec 6 04:22:46 CET 2006 Stephane Popinet * Fixed Tangaroa example doc Wed Dec 6 04:21:25 CET 2006 Stephane Popinet * Default boundary conditions for velocity diffusion were not applied properly Mon Dec 4 23:46:04 CET 2006 Stephane Popinet * Added Tangaroa example Thu Nov 23 02:12:03 CET 2006 Stephane Popinet * Aborts if the Poisson solver fails to converge Fri Nov 24 04:08:42 CET 2006 Stephane Popinet * Fixed function inlining mess Thu Nov 23 22:22:12 CET 2006 Stephane Popinet * glib.h is not needed if gts.h is already included Thu Nov 23 21:44:13 CET 2006 Stephane Popinet * Updated merging test case for new adaptive algorithm Wed Nov 22 22:40:56 CET 2006 Stephane Popinet * Added "hysteresis" to adaptive algorithm This prevents cells being created and destroyed in quick succession. Wed Nov 22 21:36:29 CET 2006 Stephane Popinet * Standard error should be used rather than standard output in the examples Wed Nov 22 21:31:53 CET 2006 Stephane Popinet * GfsVariableResidual wasn't scaled properly Wed Nov 22 08:25:39 CET 2006 Stephane Popinet * Adaptive algorithm uses a simpler technique by default The "global optimisation" technique is overkill when "maxcells" is not set. Also, it does not allow for the simple "boolean" combination of several criteria which is possible with the simple algorithm. Sat Nov 4 07:30:25 CET 2006 Stephane Popinet * Improved error messages for non-closed solid surfaces Thu Nov 2 03:15:01 CET 2006 Stephane Popinet * Creeping Couette flow does not need advection terms Wed Nov 1 23:42:27 CET 2006 Stephane Popinet * bat2gts sets higher output precision Wed Nov 1 23:41:33 CET 2006 Stephane Popinet * gfs2oogl can output all variables in mixed cells Not just P and Vorticity. Wed Oct 25 02:45:14 CEST 2006 Stephane Popinet * Thin cells are replaced either with fluid cells or solid cells They were replaced blindly by solid cells which was a very bad approximation in some cases. Wed Oct 25 00:41:50 CEST 2006 Stephane Popinet * Removed non-standard C++-style comments Sat Oct 21 05:45:54 CEST 2006 Stephane Popinet * Gerris abort generates an error.gfs dump (for post-mortem debugging) Thu Oct 19 05:34:35 CEST 2006 Stephane Popinet * Bug fix for GfsEventStop EventStop was using a temporary variable to store the previous timestep values. This variable was not initialised when adapting the mesh (temporary variables are not initialised by default). This has been fixed by using a "real" variable instead but with a NULL name. This meant allowing variables with a NULL name i.e. hidden permanent variables. Tue Sep 26 17:35:10 CEST 2006 Stephane Popinet * Inlined functions are defined once in a separate file Wed Oct 18 23:34:09 CEST 2006 Stephane Popinet * Simplified Debian package dependencies (again) Wed Oct 18 00:23:56 CEST 2006 Stephane Popinet * Simplified Debian package dependencies To make them compatible with Ubuntu. It's a bit messy though as I am not sure what the issues are with binary compatibility of Ubuntu/Debian libraries etc... Sat Oct 14 09:18:41 CEST 2006 Stephane Popinet * Bug fix for OutputPPM for 2D GfsOcean Sun Aug 13 10:15:12 CEST 2006 Stephane Popinet * Bug fix for error handling in gfs_domain_read() Sat Aug 12 04:21:25 CEST 2006 Stephane Popinet * Removed DX support (use GfsView instead!) Wed Oct 11 23:06:30 CEST 2006 Stephane Popinet * Updated test cases references for new timestep calculation Wed Oct 11 23:05:08 CEST 2006 Stephane Popinet * Fixed timestep calculation for 'infinite' events Wed Oct 11 06:08:25 CEST 2006 Stephane Popinet * Fixed stupid timestep calculation (thanks to Chris Johnson for the bug report) Tue Oct 10 03:35:15 CEST 2006 Stephane Popinet * Increased tolerance for capillary wave test case Sun Oct 8 23:59:49 CEST 2006 Stephane Popinet * Updated test cases references Sun Oct 8 23:51:37 CEST 2006 Stephane Popinet * Z-moments need to be computed in 2D for solid force Fri Oct 6 02:21:18 CEST 2006 Stephane Popinet * Fixed autogen.sh for Mac OSX Fri Oct 6 02:00:31 CEST 2006 Stephane Popinet * Fixed dependencies for Debian snapshots Tue Aug 8 01:30:06 CEST 2006 Stephane Popinet * Set the default minimum of iterations for multilevel solvers to one Thu Aug 3 01:30:21 CEST 2006 Stephane Popinet * Fixed obsolete simulation file in FAQ Wed Jul 19 02:18:59 CEST 2006 Stephane Popinet * Configure was not working properly with empty "modules" directory This was a problem only for systems not supporting dynamic modules. Tue Jul 18 07:31:23 CEST 2006 Stephane Popinet * Advection update using averaged values for momentum in mixed cells was ignored This caused the channel test case to fail. Ultimately however this average value hack should not be used at all. Fri May 12 03:29:04 CEST 2006 Stephane Popinet * Quirk's merged fluxes are used for tracer advection rather than averaging They should be used also for momentum advection but this needs testing. Mon Jul 3 06:14:40 CEST 2006 Stephane Popinet * Check for ensuring that solid fractions are positive Round-off errors could cause the solid fractions to be a small negative value. This could cause problems for algorithms assuming (correctly) that volume fraction is always positive. Sun Jun 18 01:51:00 CEST 2006 Stephane Popinet * Unbuffered python for test cases (to force "realtime" status) Sun Jun 11 08:31:39 CEST 2006 Stephane Popinet * Variables have a new "description" field Sun Jun 11 06:35:55 CEST 2006 Stephane Popinet * DerivedVariable is now a proper object ... and also has a new "description" field. Sun May 28 09:12:03 CEST 2006 Stephane Popinet * More explicit message for systems which do not support functions Fri May 12 03:35:21 CEST 2006 Stephane Popinet * Coarse cells on the Poisson hierarchy with only one neighbor are "turned off" these cells could cause poor convergence of the Poisson solver (see the dumbell test case). Tue Apr 25 08:14:22 CEST 2006 Stephane Popinet * Added "dumbbell" Poisson test case Sat Apr 22 04:08:47 CEST 2006 Stephane Popinet * GfsFunction understands dx(), dy() and dz() Mon Jun 12 03:02:23 CEST 2006 Stephane Popinet * Missing script in lid test case Mon Apr 3 00:26:22 CEST 2006 Stephane Popinet tagged release_0_9_2 Mon Apr 3 00:25:13 CEST 2006 Stephane Popinet * Updated docs Fri Mar 31 02:02:06 CEST 2006 Stephane Popinet * Removed obsolete pdflatex doc stuff Thu Mar 30 07:40:12 CEST 2006 Stephane Popinet * Cells with solid volume fraction of 0 are removed Fri Mar 24 05:40:02 CET 2006 Stephane Popinet * Bug fix for relaxation on lowest level Fri Mar 24 01:13:50 CET 2006 Stephane Popinet * Implicit Coriolis should now work with the Navier-Stokes solver Fri Mar 24 01:10:56 CET 2006 Stephane Popinet * RefineDistance uses a lower-bound for the distance... ... rather than the distance from the center of the cell. Wed Mar 15 05:20:29 CET 2006 Stephane Popinet * Thin cells are removed "Thin" cells are topologically complex cut cells which lead to inaccurate volume-of-fluid representation of solid surfaces. In some cases the presence of these cells could lead to instabilities in the projection. In all cases they would lead to inaccurate velocities. Tue Mar 14 20:43:33 CET 2006 Stephane Popinet * Updated tests for modified initial approx projection Tue Mar 14 04:17:14 CET 2006 Stephane Popinet * RefineSolid defines a new derived variable "SolidCurvature" Tue Mar 14 04:15:46 CET 2006 Stephane Popinet * New function gfs_solid_is_thin() Tue Mar 14 04:12:21 CET 2006 Stephane Popinet * New interface for gfs_domain_add_derived_variable() Tue Mar 14 04:05:06 CET 2006 Stephane Popinet * Fix for gradient computation at coarse/fine solid boundaries The previous version could use information from the wrong side of the solid surface when constructing interpolants for cells close to a solid boundary i.e. information was "leaking through" the solid surface. New weighting and checks with solid surface fractions should now avoid this. Tue Mar 14 04:02:42 CET 2006 Stephane Popinet * Merged cells can be formed using children cells at coarse/fine interfaces Fri Mar 10 05:51:08 CET 2006 Stephane Popinet * Time step is set before the first projection Previously the scaling for the tolerance on the divergence of the first projection was based on a timestep of unity (i.e. usually much larger than the subsequent timesteps). Thu Mar 9 22:42:39 CET 2006 Stephane Popinet * Debian snapshot packages were not correctly versioned Wed Mar 8 05:37:00 CET 2006 Stephane Popinet * Leave "specks" alone Wed Mar 8 05:33:41 CET 2006 Stephane Popinet * Updated boundaries and channel tests for weighted-centered pressure-gradient Wed Mar 8 05:32:45 CET 2006 Stephane Popinet * Approximate projection uses fraction-weighted average pressure gradients The previous unweighted averages were unstable for the "thin plate" test case which has been added to the test suite. Wed Mar 8 04:45:26 CET 2006 Stephane Popinet * Topology was not computed correctly for solid fractions computation in 3D Sun Mar 5 08:59:59 CET 2006 Stephane Popinet * Fix for special cases when computing solid fractions Solid fractions of cells cut more than once by the surface were not consistently computed by the approximate "VOF" technique. This was causing convergence problems in some cases. These cells (rare) are now treated using a simple approximation. Wed Mar 8 04:26:27 CET 2006 Stephane Popinet * Removed obsolete "GtsInterface" stuff Thu Mar 2 22:26:11 CET 2006 Stephane Popinet * Updated test cases for changes in projection Fri Mar 3 00:12:59 CET 2006 Stephane Popinet * Examples tarball did not include animations Tue Feb 14 09:01:54 CET 2006 Stephane Popinet * gfs_domain_norm_residual() was not computing a dimensionless divergence It now returns the error in volume conservation per timestep relative to the volume of the cell. Wed Feb 8 14:53:10 CET 2006 Stephane Popinet * OutputSimulation has an optional "text" format Wed Feb 8 14:52:41 CET 2006 Stephane Popinet * Updated Debian dependencies Mon Jan 30 02:47:49 CET 2006 Stephane Popinet * New functions gfs_vof_plane() and gfs_vof_facet() Sun Feb 5 02:21:11 CET 2006 Stephane Popinet * Bug fix for inconsistent calls for divergence calculation Sun Feb 5 02:20:02 CET 2006 Stephane Popinet * OutputTiming also reports the maximum number of variables allocated Sun Feb 5 02:15:27 CET 2006 Stephane Popinet * Bug fix for "Pmac" Pmac was allocated as a temporary variable and thus was not interpolated from one timestep to the next when using adaptive refinement (causing trouble with the convergence rate of the Poisson solver). It is now a default variable. Sun Feb 5 02:10:24 CET 2006 Stephane Popinet * GfsAdapts should be treated as standard events ... in particular to avoid problems due to a changed order of events in output files. Thu Feb 2 21:19:10 CET 2006 Stephane Popinet * New "nitermin" param for multilevel solvers This is optional but useful in some cases to prevent noise building up in a stationary solution (spurious currents test case for example). Tue Jan 31 15:33:01 CET 2006 Stephane Popinet * OutputTiming computes the total running time i.e. does not exclude the time taken by Outputs and Events. Mon Jan 30 11:18:56 CET 2006 Stephane Popinet * Bug fix for GfsVariable half-events Half-events were never processed for GfsVariables. Mon Jan 30 10:38:17 CET 2006 Stephane Popinet * VariableFiltered works with odd numbers of iterations Fri Feb 3 11:50:52 CET 2006 Stephane Popinet * Updated macros for automake 1.8 Fri Jan 27 18:43:49 CET 2006 Stephane Popinet * Generalised gfs_correct_normal_velocities() for CSF surface tension Sat Jan 28 02:23:57 CET 2006 Stephane Popinet * New object GfsVariableCurvature Fri Jan 27 22:33:58 CET 2006 Stephane Popinet * MAC pressure is saved Both the MAC and approximate projections thus have better initial guesses. When looking for stationary solutions this makes a big difference. Fri Jan 27 22:33:13 CET 2006 Stephane Popinet * Simplification of Boussinesq example Fri Jan 27 18:47:49 CET 2006 Stephane Popinet * Fixed typo in spurious currents test case description Fri Jan 27 18:46:55 CET 2006 Stephane Popinet * Bug fix for GfsSourceDiffusionExplicit Fri Jan 27 23:06:45 CET 2006 Stephane Popinet * Bug fix for generic coarse_fine() method for GfsVariable Fri Jan 27 11:08:33 CET 2006 Stephane Popinet * Bug fix for special case of solid boundary When children mixed cells are all empty, a divide-by-zero would occur when computing the center of "mass" of the parent cell. Fri Jan 27 11:07:10 CET 2006 Stephane Popinet * Better checks for construction of merged cells lists Sat Jan 21 00:29:32 CET 2006 Stephane Popinet * VOF tracers are adaptively refined consistently Fri Jan 20 22:45:13 CET 2006 Stephane Popinet * Generic coarse_fine() method for GfsVariable Wed Jan 18 14:55:04 CET 2006 Stephane Popinet * New criterion for "small" cells Each direction is tested independently and the presence or absence of neighbors is taken into account. Mon Jan 16 15:42:08 CET 2006 Stephane Popinet * S now returns normalised surface fraction Mon Jan 16 14:27:31 CET 2006 Stephane Popinet * New object GfsOutputScalarMaxima Wed Dec 7 01:29:57 CET 2005 Stephane Popinet * Fixed typo in tutorial Mon Dec 5 22:26:46 CET 2005 Stephane Popinet * Updated test references GCC version 4 seems to produce slightly different results. Sun Dec 4 23:45:18 CET 2005 Stephane Popinet * Updated debian packaging and docs Fri Dec 2 06:06:32 CET 2005 Stephane Popinet * Debian package suggests gfsview Fri Dec 2 04:33:19 CET 2005 Stephane Popinet * cvs2dist user proper versioning Fri Dec 2 04:22:30 CET 2005 Stephane Popinet * Debian package snapshots Wed Nov 30 10:01:47 CET 2005 Stephane Popinet * Debian package stuff (from Marcelo's official debian archive) Mon Nov 28 22:35:08 CET 2005 Stephane Popinet * Workaround for bug in latex2html Tue Nov 29 04:23:49 CET 2005 Stephane Popinet * Fix for use of uninitialised heap info in adaptive refinement Mon Nov 28 04:17:25 CET 2005 Stephane Popinet * Updated release instructions Mon Oct 17 01:52:21 CEST 2005 Stephane Popinet tagged 0.8.0 Mon Oct 17 01:49:07 CEST 2005 Stephane Popinet * Updated docs for release 0.8.0 Fri Oct 14 04:06:14 CEST 2005 Stephane Popinet * OutputSolidForce also computes moments Fri Oct 14 00:03:59 CEST 2005 Stephane Popinet * Added missing dependencies for building docs Thu Oct 13 03:58:19 CEST 2005 Stephane Popinet * Couette test case uses RMS-norm rather than maximum Thu Oct 13 03:56:53 CEST 2005 Stephane Popinet * gfs_mixed_cell_gradient uses Dirichlet conditions if set Wed Oct 12 23:18:33 CEST 2005 Stephane Popinet * Thin-wall and waves test fixes Wed Oct 12 01:14:34 CEST 2005 Stephane Popinet * GfsFunction aborts on user declaration of reserved variable names Tue Oct 11 22:56:25 CEST 2005 Stephane Popinet * Updated channel test reference Tue Oct 11 02:21:03 CEST 2005 Stephane Popinet * Couette flow test case Tue Oct 11 01:52:48 CEST 2005 Stephane Popinet * New functions to compute 2nd invariant of shear strain rate tensor Mon Oct 10 06:33:53 CEST 2005 Stephane Popinet * Multilevel diffusion params are defined as part of GfsDiffusion Fri Oct 7 06:59:35 CEST 2005 Stephane Popinet * Variable viscosity needs to be defined on all levels Fri Oct 7 00:40:58 CEST 2005 Stephane Popinet * New parameter "beta" controls the implicitness of the diffusion solver Fri Oct 7 07:09:58 CEST 2005 Stephane Popinet * Makefile.deps are cleaned (to force them to be updated) Thu Oct 6 00:48:58 CEST 2005 Stephane Popinet * Variable viscosity coupled with variable density should now work Thu Oct 6 00:05:42 CEST 2005 Stephane Popinet * Geometry is generated rather than stored in rt example Tue Oct 4 08:11:07 CEST 2005 Stephane Popinet * Surface tension should work with variable density Wed Oct 5 02:48:12 CEST 2005 Stephane Popinet * Moved lid-driven cavity example to test suite Wed Oct 5 02:47:24 CEST 2005 Stephane Popinet * Added examples.tar.gz target Wed Oct 5 00:09:02 CEST 2005 Stephane Popinet * Fix for upwinding of MAC velocities The "lid-driven cavity" test case was broken by patch "Face boundary conditions modified for consistent upwinding". When Dirichlet conditions are imposed on the normal velocities, strict upwinding can cause a violation of the solvability condition for the Poisson equation. This patch fixes this problem by imposing the boundary condition but only for normal MAC velocities (in effect reverting to the old formulation in this case only). Tue Oct 4 06:54:58 CEST 2005 Stephane Popinet * Fix for type cast bothering gcc Tue Oct 4 07:16:14 CEST 2005 Stephane Popinet * Restructured test/ directory Tue Oct 4 06:37:52 CEST 2005 Stephane Popinet * Removed obsolete tests Tue Oct 4 05:19:31 CEST 2005 Stephane Popinet * Simple advection test case Tue Oct 4 05:19:00 CEST 2005 Stephane Popinet * Geostrophic adjustment test cases Tue Oct 4 00:17:58 CEST 2005 Stephane Popinet * New Rayleigh-Taylor example Thu Sep 29 12:35:00 CEST 2005 Stephane Popinet * SourceControl does not need a timescale Thu Sep 29 05:47:56 CEST 2005 Stephane Popinet * Updated capillary wave test Wed Sep 28 11:54:20 CEST 2005 Stephane Popinet * Capillary wave test case Wed Sep 28 02:45:44 CEST 2005 Stephane Popinet * Solid fractions are matched at coarse/fine boundaries Wed Sep 28 01:18:36 CEST 2005 Stephane Popinet * Updated channel test Tue Sep 27 01:10:59 CEST 2005 Stephane Popinet * Variable half-events for ocean models Mon Sep 26 11:15:20 CEST 2005 Stephane Popinet * New GfsVariableFiltered class Mon Sep 26 11:10:00 CEST 2005 Stephane Popinet * Variable density has been fixed Mon Sep 26 04:01:45 CEST 2005 Stephane Popinet * Some derived variables can be used in GfsFunction even with cell = NULL Mon Sep 26 02:02:07 CEST 2005 Stephane Popinet * OutputHistogram can take an optional dependent variable Fri Sep 23 06:03:05 CEST 2005 Stephane Popinet * Updated tests and examples for obsolete gfsview option Fri Sep 23 01:18:32 CEST 2005 Stephane Popinet * EventHarmonic can optionally compute the mean-squares error Wed Sep 21 00:29:02 CEST 2005 Stephane Popinet * Unified implementation of 2D and 2D3 ocean models The 2D3 "baroclinic" model only works with a single layer for the moment. The results should be exactly identical to the 2D ocean model. Tue Sep 20 10:33:27 CEST 2005 Stephane Popinet * Pressure is centered in coastally-trapped waves test case Tue Sep 20 07:51:09 CEST 2005 Stephane Popinet * New function gfs_set_2D_solid_fractions_from_surface Tue Sep 20 07:48:29 CEST 2005 Stephane Popinet * New function gfs_cell_traverse_cut_2D Tue Sep 20 02:48:24 CEST 2005 Stephane Popinet * RefineHeight uses same interpolation routine as GfsFunction Mon Sep 19 03:23:44 CEST 2005 Stephane Popinet * Updated channel test reference Mon Sep 19 02:46:05 CEST 2005 Stephane Popinet * Weaker criteria for Poisson test cases Fri Sep 16 05:20:32 CEST 2005 Stephane Popinet * Removed obsolete gerris_dir stuff Fri Sep 16 00:47:38 CEST 2005 Stephane Popinet * OutputEnergy has been removed (it can be done better using functions) Fri Sep 16 00:06:11 CEST 2005 Stephane Popinet * Removed old Poisson tests Thu Sep 15 23:21:46 CEST 2005 Stephane Popinet * Updated Poisson test cases Thu Sep 15 06:47:48 CEST 2005 Stephane Popinet * Updated channel and boundaries tests for "old" centered pressure gradient calculation Thu Sep 15 06:12:49 CEST 2005 Stephane Popinet * New circular waves shallow-water test case Wed Sep 14 07:32:59 CEST 2005 Stephane Popinet * Weighted centered pressure gradient is now an option used only by the ocean models Wed Sep 14 04:34:25 CEST 2005 Stephane Popinet * Cosmetics Wed Sep 14 03:25:43 CEST 2005 Stephane Popinet * EventFilter takes a time scale as extra argument Exponential filtering with the given timescale is used rather than discrete full filtering. Wed Sep 14 01:00:26 CEST 2005 Stephane Popinet * Updated references for Poisson tests Fri Sep 9 08:37:09 CEST 2005 Stephane Popinet * Updated tests for default erelax of one Fri Sep 9 00:30:48 CEST 2005 Stephane Popinet * Coriolis source term takes an optional linear drag parameter Wed Sep 7 07:57:10 CEST 2005 Stephane Popinet * Update of 'channel' and 'boundaries' test cases for centered error estimation Wed Sep 7 07:56:08 CEST 2005 Stephane Popinet * 'erelax' is one by default (rather than 2) In most cases this is more efficient. Wed Sep 7 07:54:48 CEST 2005 Stephane Popinet * Bug fix for OutputCorrelation Tue Sep 6 08:11:01 CEST 2005 Stephane Popinet * @ is replaced with # before compiling functions Lines starting with # are treated as comments and ignored, which is a problem if precompiler directives are used in the function. Using @ instead of # allows the use of precompiler directives. Mon Sep 5 02:32:24 CEST 2005 Stephane Popinet * Channel and boundaries test cases compare non-centered variables Fri Sep 2 01:47:51 CEST 2005 Stephane Popinet * Variables are NOT centered by default All variables were set to centered by default. Not sure how this crept into the code but this could have potentially important follow up effects. Need to check on this. Tue Aug 30 08:12:52 CEST 2005 Stephane Popinet * Cleanup of ocean divergence calculation Tue Aug 30 06:22:58 CEST 2005 Stephane Popinet * Fix for missing params following changes in gfs_poisson_cycle Mon Aug 29 02:39:24 CEST 2005 Stephane Popinet * CFL is applicable only if some advection scheme is used Mon Aug 29 00:12:45 CEST 2005 Stephane Popinet * Simplified center-of-mass checks Fri Aug 26 03:32:09 CEST 2005 Stephane Popinet * Small fixes for pickier gcc-4.0 warnings Fri Aug 26 03:28:13 CEST 2005 Stephane Popinet * "Exponential" relaxation is controlable ("erelax" parameter) Fri Aug 26 03:27:27 CEST 2005 Stephane Popinet * Fixed typos in FAQ Fri Aug 26 03:26:20 CEST 2005 Stephane Popinet * Compilation of functions on MacOSX Thu Aug 18 03:10:31 CEST 2005 Stephane Popinet * Fix for stupid bug in gfs_init_write Wed Aug 17 08:36:30 CEST 2005 Stephane Popinet * Extrusion of closed profiles is done correctly (no duplicate vertices) Tue Aug 16 08:52:42 CEST 2005 Stephane Popinet * Bi-directional streamlines had duplicate vertices Mon Aug 15 06:09:40 CEST 2005 Stephane Popinet * Bug fix for 2nd order streamline integration Streamline interval length is not constrained by cell size anymore. Mon Aug 15 06:04:26 CEST 2005 Stephane Popinet * New functions gfs_domain_cell_traverse_condition, gfs_domain_cell_point_distance2 And also ftt_cell_box. gfs_domain_cell_traverse_condition is used as a generic replacement for gfs_domain_cell_traverse_box. Fri Aug 12 07:42:33 CEST 2005 Stephane Popinet * Updated references for test cases (for the improved Poisson solver) Fri Aug 12 07:35:43 CEST 2005 Stephane Popinet * Change to GFV files for new format Fri Aug 12 06:55:56 CEST 2005 Stephane Popinet * Generalisation of streamline creation functions Wed Aug 10 11:40:52 CEST 2005 Stephane Popinet * Bug fix for environment variables in gfs2tex Tue Aug 9 07:46:34 CEST 2005 Stephane Popinet * Fix for incorrect merging test case reference Tue Aug 9 06:37:26 CEST 2005 Stephane Popinet * New and updated Poisson test cases Rather than plotting residual vs multigrid cycles, we plot residual vs CPU time which is much more meaningful. A new thin plate test is representative of pathological cases which did not work well with the former version of the multigrid Poisson solver. Tue Aug 9 06:29:26 CEST 2005 Stephane Popinet * Improvements to the Poisson solver After a full review of the Poisson solver: convergence tests with pre and post relaxations, FMG implementation etc... the following relatively minor changes were made: (1) the prolongation operator uses "second-order" gradient-based interpolation rather than straight injection, (2) the number of relaxations increases exponentially for coarser levels. None of the more complex changes seemed to improve convergence. Tue Aug 9 01:51:00 CEST 2005 Stephane Popinet * New GfsClock object replaces GTimer Times are now given as user CPU time rather than wall-clock time. Mon Aug 8 05:37:22 CEST 2005 Stephane Popinet * Changes to GFV files for new GfsView file format Thu Aug 4 07:11:49 CEST 2005 Sebastien Delaux * cell->data is set to NULL by gfs_cell_cleanup Thu Aug 4 07:10:44 CEST 2005 Sebastien Delaux * Fix for incorrect error message in FTT I/O Thu Aug 4 07:09:35 CEST 2005 Sebastien Delaux * Bug fix for stupid use of destroyed event Wed Aug 3 08:01:18 CEST 2005 Stephane Popinet * gfs_face_ca was failing in particular cases on 3D meshes Tue Aug 2 05:50:33 CEST 2005 Stephane Popinet * Introduced a new GFS_FLAG_GRADIENT_BOUNDARY cell flag to fix Flather ocean bc The Flather ocean bc do not like the centered pressure gradient interpolation used to correct the centered velocities. To revert to the old "upwind" gradient interpolation a new flag has been introduced. This flag is set automatically by the Flather bc. Mon Aug 1 03:52:37 CEST 2005 Stephane Popinet * ca.z is initialised to zero in 2D Mon Aug 1 05:04:38 CEST 2005 Stephane Popinet * Updated poisson test cases with solid boundaries Thu Jul 21 06:02:28 CEST 2005 Stephane Popinet * Changed the way gfs2tex sets environment variables Thu Jul 21 05:59:36 CEST 2005 Stephane Popinet * Added new-style Poisson test cases Wed Jul 20 12:37:10 CEST 2005 Stephane Popinet * New GfsPoisson solver Wed Jul 20 02:07:38 CEST 2005 Stephane Popinet * `shapes' has been moved to tools and is installed Mon Jul 18 05:57:47 CEST 2005 Stephane Popinet * gfs_function_value() can take NULL as cell argument Thu Jul 14 01:26:18 CEST 2005 Stephane Popinet * Cosmetics Thu Jul 14 00:09:12 CEST 2005 Stephane Popinet * Face function evaluation knows about mixed cells This means that boundary conditions dependent on spatial coordinates will correctly account for cell faces on the boundaries of the domain being cut by an embdedded surface. Thu Jul 14 00:08:47 CEST 2005 Stephane Popinet * Fixed broken FAQ link Wed Jul 13 02:10:12 CEST 2005 Stephane Popinet * Cleaned up darcs2dist script Wed Jul 13 01:27:02 CEST 2005 Stephane Popinet * Added ChangeLog target Tue Jul 12 08:50:19 CEST 2005 Stephane Popinet * Added tarball target for tests docs Tue Jul 12 07:58:31 CEST 2005 Stephane Popinet * Changed computation of centered pressure gradients This influences only the pressure gradient in mixed cells. It is now computed as the surface-fraction-weighted averaged rather than just the average. This is intuitively more consistent as this provides a continuous interpolation when the face fractions vanish on one side of the cell. More importantly this greatly stabilises the ocean model near sharp headlands. It has a minimal influence on the convergence rates of the test cases with boundaries (slightly improves the V component and slightly degrades the U component). Tue Jul 12 06:02:03 CEST 2005 Stephane Popinet * Version set to 0.8.0 prior to release Mon Jul 11 23:42:40 CEST 2005 Stephane Popinet * Variable "P" is centered by default Mon Jul 11 04:58:07 CEST 2005 Stephane Popinet * Merged Ocean1 model from 'ocean' branch This does not include the "fraction-weighted pressure correction" of centered velocities which means that some coastlines configurations will not be stable. Mon Jul 11 01:36:09 CEST 2005 Stephane Popinet * Bug fix for VOF plane center calculation Assertions were too limiting when cells were completely full or empty. Fri Jul 8 06:51:20 CEST 2005 Stephane Popinet * Restructuring of source terms class hierarchy Former "vector" source terms (coriolis, surface tension, viscosity...) are now derived from a common "velocity" source class which automatically checks for U,V,W variables. This means that the syntax in parameter files for these source terms has changed (no need to specify a variable anymore). Fri Jul 8 06:42:57 CEST 2005 Stephane Popinet * Spurious currents test updated for new syntax Fri Jul 8 17:18:47 CEST 2005 Sebastien Delaux * Fix for locale-independent parsing of parameter files Thu Jul 7 23:31:32 CEST 2005 Stephane Popinet * Minor layout changes for merging test Thu Jul 7 23:25:01 CEST 2005 Stephane Popinet * Updated channel test reference Thu Jul 7 09:02:10 CEST 2005 Stephane Popinet * New function gfs_function_expression() Thu Jul 7 03:01:07 CEST 2005 Stephane Popinet * Removed obsolete "derived" variable stuff Thu Jul 7 02:17:27 CEST 2005 Stephane Popinet * Fix for floating-point bug in calculation of 2D center of mass Also added checks for consistency of the center of mass and center of area positions. Wed Jul 6 23:28:09 CEST 2005 Stephane Popinet * gfs2tex test() method uses gfsview-batch instead of gfsview (tests are non-interactive) Wed Jul 6 02:55:04 CEST 2005 Stephane Popinet * Updated reference for spurious current test Wed Jul 6 02:54:14 CEST 2005 Stephane Popinet * Fix for merging conflict of speck removal stuff Wed Jul 6 02:53:25 CEST 2005 Stephane Popinet * Fix for deprecated casts in gfs_object_simulation() Wed Jul 6 02:51:32 CEST 2005 Stephane Popinet * Upgrade of EventFilter to new memory management Tue Mar 8 05:41:29 CET 2005 Stephane Popinet * Specks are removed automatically from the simulation "Specks" are tiny (less than one cell volume) solid domains. Tue Mar 8 05:34:25 CET 2005 Stephane Popinet * New ocean test energy.sh, temporary modification of waves.sh waves.sh uses the Ocean1 2D model. Mon Feb 14 05:33:44 CET 2005 Stephane Popinet * New GfsEventFilter class Uses averages of corner values as a filter. This is very efficient to filter out grid-scale oscillations of crappy schemes... Wed Jul 6 00:33:33 CEST 2005 Stephane Popinet * Updated boundaries test Tue Jul 5 23:52:21 CEST 2005 Stephane Popinet * Changed BC for boussinesq example Tue Jul 5 08:03:57 CEST 2005 Stephane Popinet * New memory management changes for ocean model Tue Jul 5 04:32:46 CEST 2005 Stephane Popinet * EventSum takes a function rather than a variable, EventSum2 has been removed Tue Jul 5 04:32:03 CEST 2005 Stephane Popinet * Replaced SourceViscosity with SourceDiffusion in examples for now Tue Jul 5 04:31:04 CEST 2005 Stephane Popinet * Cleanup of test script for doc/examples Tue Jul 5 00:51:33 CEST 2005 Stephane Popinet * Spurious currents convergence is computed for finer grids Tue Jul 5 00:51:04 CEST 2005 Stephane Popinet * VOF scheme was not allocating temporary variable Tue Jul 5 00:30:09 CEST 2005 Stephane Popinet * GfsFunction identifier-finding routine was too naive Mon Jul 4 06:11:14 CEST 2005 Stephane Popinet * Updated tutorial Mon Jul 4 05:23:09 CEST 2005 Stephane Popinet * Updated reference doc Mon Jul 4 05:01:40 CEST 2005 Stephane Popinet * Fix for non-advected tracers with sources Thu Jun 30 11:48:14 CEST 2005 Stephane Popinet * Allows for "tracers" only governed by source terms Thu Jun 30 11:46:27 CEST 2005 Stephane Popinet * Updated reference manual Mon Jul 4 03:36:02 CEST 2005 Stephane Popinet * boussinesq example updated for new gfsview option Fri Jul 1 00:21:20 CEST 2005 Stephane Popinet * Fix for expression parsing in GfsFunction Fri Jul 1 00:20:23 CEST 2005 Stephane Popinet * Fix for I/O of GfsDomain Thu Jun 30 07:43:09 CEST 2005 Stephane Popinet * Generalised parsing of GfsFunction Thu Jun 30 07:38:20 CEST 2005 Stephane Popinet * Fixed bug in dynamic variable allocation Wed Jun 29 07:27:34 CEST 2005 Stephane Popinet * gfs_function_description() can return long or short descriptions Wed Jun 29 07:26:38 CEST 2005 Stephane Popinet * Non-repetitive outputs are always overwritten Wed Jun 29 07:22:43 CEST 2005 Stephane Popinet * Derived variables are associated with GfsDomain Tue Jun 28 06:07:16 CEST 2005 Stephane Popinet * GfsInit creates unknown variables and preserves the order of initialisation Tue Jun 28 05:43:24 CEST 2005 Stephane Popinet * Fix for incorrect parsing of GfsFunction Tue Jun 28 03:27:16 CEST 2005 Stephane Popinet * Removed obsolete MPI tests Tue Jun 28 01:55:10 CEST 2005 Stephane Popinet * Restructured GfsVariable implementation All the variables are now dynamically allocated. Temporary variables are allocated when needed. There is no limit (other than memory) on the maximum number of variables per cell. This also uncovered a serious bug: when using diffusive tracers, the solution of the diffusion equation would overwrite the stored values of the pressure gradients used to correct the advective terms for the velocity. With the new temporary variable allocation scheme messes like that should be avoided. Mon Jun 27 08:11:24 CEST 2005 Stephane Popinet * Removed obsolete gfs2other and unsupported gfs2vtk Wed Jun 22 23:39:21 CEST 2005 Stephane Popinet * Removed Makefile for old-style surface tension test Wed Jun 22 08:55:00 CEST 2005 Stephane Popinet * New-style spurious current test case Tue Jun 21 02:11:19 CEST 2005 Stephane Popinet * New-style channel test, old tests have been removed Tue Jun 21 01:05:27 CEST 2005 Stephane Popinet * OutputScalarHistogram correctly uses new variable definition and computes instantaneous histograms Tue Jun 21 00:14:20 CEST 2005 Stephane Popinet * gfscompare uses gfs_cell_interpolate() for error calculation of centred variables Tue Jun 21 00:13:58 CEST 2005 Stephane Popinet * Fixed FAQ broken link Tue Jun 21 00:12:53 CEST 2005 Stephane Popinet * Added 'boundaries' test case Tue Jul 12 05:45:54 CEST 2005 Stephane Popinet tagged 0.6.4 Fri Jun 17 07:53:32 CEST 2005 Stephane Popinet * merging test uses batch-mode gfsview for figure generation Fri Jun 17 02:44:24 CEST 2005 Stephane Popinet * New 4-way vortex merging test case Thu Jun 16 06:00:25 CEST 2005 Stephane Popinet * Added simple periodic test case Wed Jun 15 06:54:52 CEST 2005 Stephane Popinet * Added biblio to tests doc and a few bug fixes Wed Jun 15 06:19:05 CEST 2005 Stephane Popinet * Automated generation of summary for test docs Wed Jun 15 06:17:22 CEST 2005 Stephane Popinet * Updated reference for 'reynolds/box' test case, removal of corresponding old tests Wed Jun 15 00:28:18 CEST 2005 Stephane Popinet * Added PPM animate question to FAQ Tue Jun 14 08:23:15 CEST 2005 Stephane Popinet * Auto-documented Euler test cases replace old-style tests Only the equivalent test cases for reference2D/stationary1.xmgr and reference2D/stationary4box1.xmgr have been implemented at this point. Mon Jun 13 12:01:28 CEST 2005 Stephane Popinet * New 'Reynolds' test case, replacement for 'stationary' Using auto-documenting with gfs2doc. Mon Jun 13 07:42:21 CEST 2005 Stephane Popinet * cast fix for gfs2oogl Mon Jun 13 07:41:49 CEST 2005 Stephane Popinet * New macro ftt_vector_norm() Mon Jun 13 07:27:32 CEST 2005 Stephane Popinet * Numbers are allowed in identifiers of macros and variables Mon Jun 13 07:26:29 CEST 2005 Stephane Popinet * "S" is a derived macro for solid area Mon Jun 13 07:23:10 CEST 2005 Stephane Popinet * OutputScalarHistogram takes weight as argument Fri Jun 10 08:43:58 CEST 2005 Stephane Popinet * OutputScalar takes the new GfsFunction as argument instead of a GfsVariable Fri Jun 10 07:04:31 CEST 2005 Stephane Popinet * GfsFunction now knows about "derived variables" This is the first step toward removing old-style derived variables altogether. Thu Jun 9 07:27:00 CEST 2005 Stephane Popinet * OutputScalarHistogram starts when specified and properly reopens static files Thu Jun 9 06:44:24 CEST 2005 Stephane Popinet * GfsFunction recognises domain variables directly Wed Jun 8 08:12:44 CEST 2005 Stephane Popinet * Face boundary conditions modified for consistent upwinding The former face boundaries were not "upwind aware", this was causing problems when, for example, a negative normal velocity was set as inflow condition on the left of the domain and at the same time a Dirichlet BC on a tracer. Tue Jun 7 00:12:24 CEST 2005 Stephane Popinet * New object GfsOutputScalarHistogram Wed Jun 8 07:05:07 CEST 2005 Stephane Popinet * Bug fix for tracer advection (thanks to David Sterling) Tue Jun 7 00:10:59 CEST 2005 Stephane Popinet * New macro gfs_cell_volume() Thu Jun 2 08:05:49 CEST 2005 Stephane Popinet * New gfs_solid_normal() and gfs_pressure_force() functions Wed Jun 1 08:22:57 CEST 2005 Stephane Popinet * Fixed FAQ icons (part 2) Wed Jun 1 08:17:44 CEST 2005 Stephane Popinet * Fixed FAQ icons Wed Jun 1 07:54:12 CEST 2005 Stephane Popinet * Restructuring of checks for interpolation in face_bilinear Wed Jun 1 07:52:57 CEST 2005 Stephane Popinet * Added FAQ and updated links and style sheets Tue May 31 01:57:21 CEST 2005 Stephane Popinet * New SourceControl object Tue May 31 00:23:10 CEST 2005 Stephane Popinet * OutputSimulation uses binary format by default Fri May 27 04:16:26 CEST 2005 Stephane Popinet * Preliminary restructuring of Euler test cases Fri May 27 00:35:57 CEST 2005 Stephane Popinet * Cosmetics for advection tests Fri May 27 00:24:10 CEST 2005 Stephane Popinet * Restructured advection order test cases Thu May 26 05:53:39 CEST 2005 Stephane Popinet * Updated installation instructions Thu May 26 03:15:56 CEST 2005 Stephane Popinet * Fix for GfsEventScript unused handling of error output Wed May 25 07:50:41 CEST 2005 Stephane Popinet * Added boussinesq.gfv gfsview parameter file Sat Apr 23 20:29:11 CEST 2005 Stephane Popinet * InitVorticity takes vorticity function as argument Test cases have been updated and obsolete modules have been removed. Tue Apr 19 18:33:29 CEST 2005 Stephane Popinet * Bug fix for InitVorticity Wed Apr 13 18:53:16 CEST 2005 Stephane Popinet * Update for xmgr -> xmgrace transition Wed Apr 13 18:51:11 CEST 2005 Stephane Popinet * VOF scheme has a CFL limit of one (not 0.5) Wed Apr 13 18:48:57 CEST 2005 Stephane Popinet * gerris can take parameter file on standard input Sat Apr 9 15:56:34 CEST 2005 Stephane Popinet * Minor bugfix for gfs2tex Sat Apr 9 15:55:33 CEST 2005 Stephane Popinet * Updated boussinesq example Sat Apr 9 15:24:46 CEST 2005 Stephane Popinet * Boussinesq example now uses scripting mode of GfsView Fri Apr 8 02:30:11 CEST 2005 Stephane Popinet * Updated examples Makefile.am dependencies Fri Apr 8 02:29:07 CEST 2005 Stephane Popinet * Added Boussinesq example to doc Wed Apr 6 12:48:16 CEST 2005 Stephane Popinet * New Boussinesq example Thu Apr 7 06:08:10 CEST 2005 Stephane Popinet * More robust (hopefully) FPU exceptions control Thu Apr 7 06:06:51 CEST 2005 Stephane Popinet * Decent autogen.sh script Mon Apr 4 02:03:56 CEST 2005 Stephane Popinet * Automatic dependency of examples doc on files generated by examples Mon Apr 4 02:00:45 CEST 2005 Stephane Popinet * Shear example updated for new C expressions in GfsFunction Mon Apr 4 01:56:21 CEST 2005 Stephane Popinet * Fixed problems with C expressions in GfsFunction Also added check for pkg-config in configure. pkg-config is required for inlined functions in parameter files. Sun Apr 3 11:54:34 CEST 2005 Stephane Popinet * GfsInit and GfsOutputErrorNorm can use functions of variables Sun Apr 3 11:54:14 CEST 2005 Stephane Popinet * Fixed lid example typos Sun Apr 3 11:52:43 CEST 2005 Stephane Popinet * New time-reversed VOF advection example Fri Apr 1 08:04:31 CEST 2005 Stephane Popinet * New lid-driven cavity example Fri Apr 1 06:24:48 CEST 2005 Stephane Popinet * Force flushing of OutputLocation Fri Apr 1 04:46:14 CEST 2005 Stephane Popinet * OutputLocation can now work with a list of several locations Fri Apr 1 01:21:36 CEST 2005 Stephane Popinet * EventStop can now store the difference used as criterion Wed Mar 23 05:03:56 CET 2005 Stephane Popinet * Added missing signal header in utils.c (for BSD) Fri Mar 18 05:34:14 CET 2005 Stephane Popinet * doc/examples/Makefile.deps is distributed to avoid a python dependency Tue Mar 8 05:40:36 CET 2005 Stephane Popinet * bat2gts does not need to construct closed geometry anymore Tue Mar 8 01:06:58 CET 2005 Stephane Popinet * Removed obsolete CVS usermap file Thu Mar 17 06:23:45 CET 2005 Stephane Popinet * Added automated testing of examples collection Thu Mar 17 05:30:45 CET 2005 Stephane Popinet * autogen.sh must not be distributed in tarballs Thu Mar 17 03:00:02 CET 2005 Stephane Popinet * Added simple autogen.sh script Thu Mar 17 01:33:30 CET 2005 Stephane Popinet * Automatic distribution of examples + improved gfs2tex code Thu Mar 17 00:18:00 CET 2005 Stephane Popinet * gfs2doc checks that the example runs Wed Mar 16 06:22:31 CET 2005 Stephane Popinet * gfs2doc script for automatically generated example documentation Also improved cross-links for colorised parameter files. Tue Mar 15 06:36:08 CET 2005 Stephane Popinet * Initial implementation of examples scripts Tue Feb 22 00:40:11 CET 2005 Stephane Popinet * Added scripts in tools to distribution Tue Feb 22 00:16:40 CET 2005 Stephane Popinet * Bug fix for boundary matching of solid fractions Tue Feb 22 00:13:39 CET 2005 Stephane Popinet * Mixed cell refinement fixes in 3D The advection fix could be improved (it does not currently take into account the solid fractions, unlike the 2D version of the fix). Tue Nov 9 03:15:59 CET 2004 Stephane Popinet * Removed some of the "mixed cell refinement" constraints (gerris--ocean--0.7--patch-2) gerris--ocean--0.7--patch-2 Keywords: Probably needs more careful review. Fri Feb 18 05:44:08 CET 2005 Stephane Popinet * GfsFunction can use C statements (instead of full functions) but modules are not supported anymore by GfsFunction (that was never used anyway). This patch means that things like: Init {} { U = sqrt(x) } are now legal. Fri Feb 18 05:15:45 CET 2005 Stephane Popinet * GfsFunction can take a GTS surface as argument and interpolates the z-coordinate at location (x,y) to get the value of the function. Fri Feb 18 00:40:30 CET 2005 Stephane Popinet * Added ChangeLog to distribution target Fri Feb 18 00:38:26 CET 2005 Stephane Popinet * Removed arch obsolete garbage Tue Feb 15 00:03:56 CET 2005 Stephane Popinet * Spurious current test with adaptivity Tue Feb 15 00:03:04 CET 2005 Stephane Popinet * gfs_object_simulation() does not work for GfsBc objects Mon Feb 14 21:45:54 CET 2005 Stephane Popinet * Changed interface to gfs_function_read() Fri Feb 11 07:13:08 CET 2005 Stephane Popinet * New GfsAdaptFunction class Which uses the new GfsFunction to allow users to specify adaptive criteria based on the values of local variables. This can be used for example to refine around an interface depending on the local value of the surface tension. Fri Feb 11 03:35:30 CET 2005 Stephane Popinet * Cosmetics Fri Feb 11 03:26:48 CET 2005 Stephane Popinet * GfsFunction can now use model variables This can be used for example to define source terms dependent on other variables. Thu Feb 10 23:58:31 CET 2005 Stephane Popinet * Cosmetics Thu Feb 10 02:38:54 CET 2005 Stephane Popinet * Capillary wave test Thu Feb 10 01:07:37 CET 2005 Stephane Popinet * Surface tension only works in 2D for now Wed Feb 9 00:07:03 CET 2005 Stephane Popinet * Renamed _gfs_source_tension_ to _T Wed Feb 9 00:05:18 CET 2005 Stephane Popinet * gfs_cell_corner_interpolator now works for periodic BCs But only when the periodic BCs are not cut by a solid boundary. Tue Feb 8 05:05:32 CET 2005 Stephane Popinet * Added surface tension tests to configure Tue Feb 8 04:29:09 CET 2005 Stephane Popinet * Minimum timestep is 1e-9 Several functions implicitly rely on the timestep being strictly positive. Tue Feb 8 04:28:23 CET 2005 Stephane Popinet * Spurious currents test Tue Feb 8 01:08:20 CET 2005 Stephane Popinet * Replaced gfs_youngs_gradient with gfs_youngs_normal Which computes the three components in one operation and should be about three times as fast as three calls to gfs_youngs_gradient. Tue Feb 8 00:30:22 CET 2005 Stephane Popinet * Proper scaling of surface tension terms The surface tension term also uses the volume fraction at time n+1 which improves the stability significantly. Fri Feb 4 04:39:22 CET 2005 Stephane Popinet * Replaced "marker" surface tension implementation with tensorial-CSF formulation Sun Jan 30 08:07:21 CET 2005 Stephane Popinet * Implementation of Young's normal calculation for VOF Sun Jan 30 08:04:00 CET 2005 Stephane Popinet * Default adaptive maxlevel set to 5 The previous default was infinite which was not too good for memory use... Sun Jan 30 08:02:45 CET 2005 Stephane Popinet * VOF advection tests Sun Jan 30 04:28:09 CET 2005 Stephane Popinet * Timestep is computed using minimum CFL of all variables Sun Jan 30 04:27:38 CET 2005 Stephane Popinet * New GfsAdvection simulation class Sun Jan 30 04:26:21 CET 2005 Stephane Popinet * Tracers now take advection/diffusion parameters Sun Jan 30 04:23:18 CET 2005 Stephane Popinet * Graphic advection test restructured Uses gerris/gfsview rather than advection.c/gts2oogl/geomview etc... Thu Jan 27 12:23:13 CET 2005 Stephane Popinet * Fix for cygwin built Wed Jan 19 06:57:30 CET 2005 Stephane Popinet * darcs2dist and bat2gts are installed Wed Jan 19 06:45:44 CET 2005 Stephane Popinet * darcs2dist takes URL argument Tue Jan 18 22:25:22 CET 2005 Stephane Popinet * Clearer error message for boundaries outside fluid domain Tue Jan 18 06:04:31 CET 2005 Stephane Popinet * Automatic ChangeLog generation and darcs2dist snapshot script Tue Jan 18 05:19:24 CET 2005 Stephane Popinet * Added GTS dependency to pkgconfig files Tue Jan 18 05:08:34 CET 2005 Stephane Popinet * Fixed test/mpi Tue Jan 18 05:05:24 CET 2005 Stephane Popinet * Fixed test/advection The results needs checking. Tue Jan 18 04:53:51 CET 2005 Stephane Popinet * Fixed test/poisson test/poisson/order still gives some inconsistent results. Tue Jan 18 04:53:18 CET 2005 Stephane Popinet * Updated test/poisson/convergence/reference2D Wed Dec 8 23:36:12 CET 2004 Stephane Popinet * Matching of surface fractions for refined mixed cells (gerris--ocean--0.7--patch-27) gerris--ocean--0.7--patch-27 Keywords: Also removal of obsolete gfs_refine_mixed() function and improvement in error reporting for check_area_fractions(). Tue Dec 7 04:33:05 CET 2004 Stephane Popinet * Important bug fix for GfsEventHarmonic (gerris--ocean--0.7--patch-26) gerris--ocean--0.7--patch-26 Keywords: The right-hand-side for the least-mean-square of the offset was not properly computed. Mon Dec 6 23:11:25 CET 2004 Stephane Popinet * isocube.h is added to distribution (gerris--ocean--0.7--patch-25) gerris--ocean--0.7--patch-25 Keywords: Mon Dec 6 23:10:26 CET 2004 Stephane Popinet * gfs2oogl profile output now works without -c option (gerris--ocean--0.7--patch-24) gerris--ocean--0.7--patch-24 Keywords: Wed Dec 1 03:31:46 CET 2004 Stephane Popinet * Changed the way "special cases" are handled in VOF (gerris--ocean--0.7--patch-23) gerris--ocean--0.7--patch-23 Keywords: This is simpler and fixes a serious bug in the new solid fraction algorithm. Wed Dec 1 00:07:37 CET 2004 Stephane Popinet * New function gfs_domain_combine_traverse() (gerris--ocean--0.7--patch-22) gerris--ocean--0.7--patch-22 Keywords: For traversing two GfsDomain "simultaneously". Mon Nov 29 00:31:51 CET 2004 Stephane Popinet * Made gfs_divergence() interface consistent with gfs_velocity_norm() etc... (gerris--ocean--0.7--patch-21) gerris--ocean--0.7--patch-21 Keywords: i.e. it now takes an extra GfsVariable argument. Mon Nov 29 00:26:29 CET 2004 Stephane Popinet * Replaced static cell_is_cut function with exported gfs_cell_is_cut (gerris--ocean--0.7--patch-20) gerris--ocean--0.7--patch-20 Keywords: Used for new gfsview solid entity. Thu Nov 25 00:24:12 CET 2004 Stephane Popinet * Added isocube.h to sources (gerris--ocean--0.7--patch-19) gerris--ocean--0.7--patch-19 Keywords: Mon Nov 22 04:55:09 CET 2004 Stephane Popinet * Refinements interpolate existing values (gerris--ocean--0.7--patch-18) gerris--ocean--0.7--patch-18 Keywords: This allows to restart a simulation while changing the refinements of some parts. Wed Nov 17 05:57:12 CET 2004 Stephane Popinet * In 2D3 ftt_cell_child_corner() now works for all directions (gerris--ocean--0.7--patch-17) gerris--ocean--0.7--patch-17 Keywords: Wed Nov 17 02:35:45 CET 2004 Stephane Popinet * New GfsEventHarmonic class (gerris--ocean--0.7--patch-16) gerris--ocean--0.7--patch-16 Keywords: Does on-the-fly harmonic analysis of a variable. Tue Nov 16 05:53:23 CET 2004 Stephane Popinet * New utility function gfs_matrix_inverse() (gerris--ocean--0.7--patch-14) gerris--ocean--0.7--patch-14 Keywords: Tue Nov 16 01:33:03 CET 2004 Stephane Popinet * Option not to output solid surface in GfsOutputSimulation (gerris--ocean--0.7--patch-13) gerris--ocean--0.7--patch-13 Keywords: Mon Nov 15 22:57:45 CET 2004 Stephane Popinet * Weaker solid fraction consistency checks to accomodate mixed cell refinement (gerris--ocean--0.7--patch-12) gerris--ocean--0.7--patch-12 Keywords: Mon Nov 15 22:27:08 CET 2004 Stephane Popinet * Added tolerance on timestep calculation (gerris--ocean--0.7--patch-11) gerris--ocean--0.7--patch-11 Keywords: To try to avoid very small timesteps (< 1e-9) due to round-off errors on times of multiple simultaneous events. Mon Nov 15 22:23:00 CET 2004 Stephane Popinet * Removed mixed cell refinement constraint for face traversal (gerris--ocean--0.7--patch-10) gerris--ocean--0.7--patch-10 Keywords: Mon Nov 15 21:07:48 CET 2004 Stephane Popinet * bat2gts needs units specified (gerris--ocean--0.7--patch-7) gerris--ocean--0.7--patch-7 Keywords: The default length unit for GMT is inches, bat2gts works only if units are cm. I have added options to the mapproject commands to override the defaults. Tue Nov 9 03:21:44 CET 2004 Stephane Popinet * More robust GfsRefineHeight algorithm (gerris--ocean--0.7--patch-4) gerris--ocean--0.7--patch-4 Keywords: Uses the four cell corner height values rather than just the central one. Tue Nov 9 03:11:09 CET 2004 Stephane Popinet * Uses g[0] rather than res for temporary storage in adaptive algorithm (gerris--ocean--0.7--patch-1) gerris--ocean--0.7--patch-1 Keywords: We want to keep res in case its value is required for monitoring the poisson solver. Thu Nov 4 06:47:41 CET 2004 Stephane Popinet * New class GfsRefineHeight (gerris--mainline--0.7--patch-29) gerris--mainline--0.7--patch-29 Keywords: For height/depth dependent refinement in ocean model. Thu Nov 4 06:36:58 CET 2004 Stephane Popinet * gfs_domain_remove_ponds() now matches boundaries (gerris--mainline--0.7--patch-28) gerris--mainline--0.7--patch-28 Keywords: Only if ponds have been removed. Wed Nov 3 22:27:31 CET 2004 Stephane Popinet * Added targets libdx2D3 and gerris2D3.pc (gerris--mainline--0.7--patch-27) gerris--mainline--0.7--patch-27 Keywords: Wed Nov 3 06:10:36 CET 2004 Stephane Popinet * New function gfs_domain_remove_specks() (gerris--mainline--0.7--patch-26) gerris--mainline--0.7--patch-26 Keywords: "Specks" are solid islands not containing any empty cell. They cause stability problems for the free-surface solver of the ocean model. They cannot be considered resolved anyway (by definition their maximum thickness is smaller than one grid cell). Wed Nov 3 04:06:02 CET 2004 Stephane Popinet * New class GfsRemovePonds (gerris--mainline--0.7--patch-25) gerris--mainline--0.7--patch-25 Keywords: Removes small "ponds" from the domain. Wed Nov 3 03:02:44 CET 2004 Stephane Popinet * GfsVariable are now events (gerris--mainline--0.7--patch-24) gerris--mainline--0.7--patch-24 Keywords: These events are activated at the start of the timestep loop in run() methods. This means that the syntax for variables in parameter files has been changed. This involved a substantial cleanup and restructuring of the events and their links with simulations. The first application of this new mechanism is the new GfsVariableResidual. Wed Nov 3 00:36:57 CET 2004 Stephane Popinet * Split GfsVariable in new variable.{ch} file (gerris--mainline--0.7--patch-23) gerris--mainline--0.7--patch-23 Keywords: It was getting a bit too big and dispersed all over the place. Tue Nov 2 04:39:40 CET 2004 Stephane Popinet * Fixes to solid fraction algorithm for 2D3 (gerris--mainline--0.7--patch-22) gerris--mainline--0.7--patch-22 Keywords: Because the aspect ratios of the 2D3 cells are not constant. Tue Nov 2 03:07:33 CET 2004 Stephane Popinet * New GfsRefineSurface class (gerris--mainline--0.7--patch-21) gerris--mainline--0.7--patch-21 Keywords: The GfsRefineSolid and GfsRefineDistance classes have also been reworked. Tue Nov 2 01:49:45 CET 2004 Stephane Popinet * Fractions initialisation uses new solid fraction algorithm (gerris--mainline--0.7--patch-20) gerris--mainline--0.7--patch-20 Keywords: The gfs_cell_init_fraction() function has been replaced by gfs_domain_init_fraction() which now calls gfs_domain_init_solid_fractions(). The GfsInitFraction event has been changed accordingly. Tue Nov 2 00:32:17 CET 2004 Stephane Popinet * New calculation of 3D center of mass of solid fractions (gerris--mainline--0.7--patch-19) gerris--mainline--0.7--patch-19 Keywords: Uses the new 3D VOF gfs_plane_center() function. Mon Nov 1 06:35:18 CET 2004 Stephane Popinet * Fixed bug when computing fractions of degenerate intersections (gerris--mainline--0.7--patch-18) gerris--mainline--0.7--patch-18 Keywords: We don't want to use VOF when the normal is undefined (|n| = 0), rather use the face fractions directly (since the flux contribution of the "normal" part is zero) to compute the fraction. Mon Nov 1 00:08:09 CET 2004 Stephane Popinet * Added VOF calculation of 3D solid fraction (gerris--mainline--0.7--patch-17) gerris--mainline--0.7--patch-17 Keywords: The center of mass calculation is not done yet. Mon Nov 1 00:07:30 CET 2004 Stephane Popinet * Changed 2D bounding boxes for cut cells traversal (gerris--mainline--0.7--patch-16) gerris--mainline--0.7--patch-16 Keywords: Only the faces crossing the z=0 plane should be considered. Mon Nov 1 00:06:48 CET 2004 Stephane Popinet * Removed upstream self-intersection checks (gerris--mainline--0.7--patch-15) gerris--mainline--0.7--patch-15 Keywords: This can cause the solid fractions algorithm to fail due to consistency checks being violated by self-intersecting surfaces. The messages will be a bit obscure. We'll fix that as we go. The advantage is that in possibly a large number of cases with "minor" self-intersections (e.g. nearly collocated vertices etc...) the algorithm will proceed and should produce valid solid fractions. Mon Nov 1 00:06:09 CET 2004 Stephane Popinet * Domain traversal for painting algorithm (gerris--mainline--0.7--patch-14) gerris--mainline--0.7--patch-14 Keywords: The previous "box" traversal did not work for the painting algorithm (which does not know box boundaries). Traversing the whole domain rather than each box fixes the problem. Also, the painting algorithm used to also traverse boundary cells. A check has been added to avoid that. Mon Nov 1 00:05:05 CET 2004 Stephane Popinet * preliminary version of new 3D solid fraction computation (gerris--mainline--0.7--patch-13) gerris--mainline--0.7--patch-13 Keywords: Only computes the face fractions at this point (the painting algorithm works fine unchanged from 2D). Mon Nov 1 00:03:11 CET 2004 Stephane Popinet * Changed "temporary" to "permanent" for GfsVariable (gerris--mainline--0.7--patch-12) gerris--mainline--0.7--patch-12 Keywords: temporary permanent is a pointer to the permanent variable stored in this temporary variable. Thu Oct 28 07:42:27 CEST 2004 Stephane Popinet * New algorithm for 2D solid fractions computation (gerris--mainline--0.7--patch-11) gerris--mainline--0.7--patch-11 Keywords: Does not use the gts_surface_inter etc... functions but a simple computation of the intersections of the sides of the cell with the surface, combined with a linear approximation of the piece of the surface contained in the cell. This is *much* faster, simpler and should be robust. It is also much less picky about the degeneracies of the surfaces it can deal with. It does not work yet for a varying level of refinement along the surface. Thu Oct 28 01:43:56 CEST 2004 Stephane Popinet * Check for diffusion terms before warning (gerris--mainline--0.7--patch-10) gerris--mainline--0.7--patch-10 Keywords: The "soid surface cuts boundary cells" warning is only relevant if diffusion terms are present. Thu Oct 28 01:34:13 CEST 2004 Stephane Popinet * Improved solid fractions computation (gerris--mainline--0.7--patch-9) gerris--mainline--0.7--patch-9 Keywords: Both solid fractions computation and GfsRefineSolid use the new gfs_cell_traverse_cut function. This has several advantages: no need for pre-computation of a bounding-box tree, faster (O(log(N))). GfsRefineSolid is *much* faster (at least one order of magnitude). A paiting algorithm is used to set fractions for cells which are not cut by the solid boundary. This is simpler than the ray-casting technique (no need for bounding-box tree). Thu Oct 28 01:01:04 CEST 2004 Stephane Popinet * Added timers for initial refinement and solid fractions (gerris--mainline--0.7--patch-8) gerris--mainline--0.7--patch-8 Keywords: Wed Oct 27 04:09:37 CEST 2004 Stephane Popinet * New function gfs_cell_traverse_cut (gerris--mainline--0.7--patch-7) gerris--mainline--0.7--patch-7 Keywords: Fast traversal of cells cut by a surface. The cost of traversal scales roughly like log(N) where N is the total number of cells traversed. Wed Oct 27 01:22:55 CEST 2004 Stephane Popinet * Added bat2gts script (gerris--mainline--0.7--patch-6) gerris--mainline--0.7--patch-6 Keywords: For generating ocean bathymetry files. Tue Jan 18 03:28:17 CET 2005 Stephane Popinet * Bumped micro version Thu Oct 21 04:51:33 CEST 2004 Stephane Popinet * Automatically adds PS and Div variables to ocean model (gerris--mainline--0.7--patch-5) gerris--mainline--0.7--patch-5 Keywords: Using a overloading of the read() method of GfsOcean. Wed Oct 20 06:56:25 CEST 2004 Stephane Popinet * Replaced GfsOutputStreakline with GfsOutputParticle (gerris--mainline--0.7--patch-4) gerris--mainline--0.7--patch-4 Keywords: GfsOutputStreakline was weird. GfsOutputParticle is a lagrangian tracer integrator. Wed Oct 20 06:08:17 CEST 2004 Stephane Popinet * Fixed cloning of GfsVariable. (gerris--mainline--0.7--patch-3) gerris--mainline--0.7--patch-3 Keywords: The (non)-cloning of the surface_bc field of GfsVariable was crashing the code when destroying cloned variables. This has been solved by not cloning surface_bc and source terms. Wed Oct 20 01:19:10 CEST 2004 Stephane Popinet * Fixed DX modules (gerris--mainline--0.7--patch-2) gerris--mainline--0.7--patch-2 Keywords: Tue Oct 19 04:10:19 CEST 2004 Stephane Popinet * Updates for release 0.6.0 (gerris--mainline--0.5--patch-8) gerris--mainline--0.5--patch-8 Keywords: 0.6.0 Tutorial and reference manual have been updated. A fix for MacOSX libtool has been included. Fix for incorrect call to gfs_interpolate in gfs2oogl. Fix for branch "stable" in cvs2cl.pl Mon Oct 18 04:36:26 CEST 2004 Stephane Popinet * GTS solid files can also be written in binary format. (gerris--mainline--0.5--patch-7) gerris--mainline--0.5--patch-7 Keywords: Thu Oct 14 05:31:51 CEST 2004 Stephane Popinet * gfs_interpolate uses proper bi(tri)linear interpolation (gerris--mainline--0.5--patch-6) gerris--mainline--0.5--patch-6 Keywords: Corner values for the cell are computed using gfs_cell_corner_value and then used to do the bi(tri)linear interpolation. This has been tested succinctly and provides true continuous (C1) interpolation. This was not the case before. An important note is that the value at the center of the cell obtained by (bi)trilinear interpolation is NOT equal to the variable value at the center (it is equal to the mean of the corner values). Thu Oct 14 00:12:50 CEST 2004 Stephane Popinet * Support for binary simulation files (gerris--mainline--0.5--patch-5) gerris--mainline--0.5--patch-5 Keywords: Binary files speed up reading time by a factor of ~5 for big simulations. There is no consideration of endianess at this point. Tue Oct 12 22:01:45 CEST 2004 Stephane Popinet * Checks for periodic bc in interpolations (gerris--mainline--0.5--patch-4) gerris--mainline--0.5--patch-4 Keywords: Periodic boundary conditions do not work yet with interpolations for solid boundary fluxes and for corner values. Mon Oct 11 03:39:00 CEST 2004 Stephane Popinet * Control of diffusion bc on immersed boundaries (gerris--mainline--0.5--patch-3) gerris--mainline--0.5--patch-3 Keywords: Boundary conditions on immersed boundaries for the diffusion equation can now be set in parameter files. Fri Oct 8 06:35:00 CEST 2004 Stephane Popinet * Conversion of .cvsignore to .arch-inventory (gerris--mainline--0.5--patch-1) gerris--mainline--0.5--patch-1 Keywords: Tue Jan 18 01:32:33 CET 2005 Stephane Popinet * Initial commit (s.popinet@niwa.co.nz--2004/gerris--mainline--0.5) gerris-snapshot-131206/build_function_libtool0000644000175100017510000000202712250371171016336 00000000000000#!/bin/sh # file generated automatically by configure from 'build_function_libtool' DIMENSION=$1 # gerris2D or gerris3D WDIR=$2 # simulation directory CC="PREFIX/share/gerris/libtool --tag=CC --silent --mode=compile COMPILER" LD="PREFIX/share/gerris/libtool --tag=CC --silent --mode=link COMPILER" CFLAGS="-O" LDFLAGS="-O -rpath PREFIX/lib/gerris" touch links if sed 's/@/#/g' < function.c | awk '{ if ($1 == "#" && $2 == "link") { for (i = 3; i <= NF; i++) printf ("%s ", $i) >> "links"; print ""; } else if ($1 == "#link") { for (i = 2; i <= NF; i++) printf ("%s ", $i) >> "links"; print ""; } else print $0; }' > module.c; then : else exit 1 fi if $CC `pkg-config $DIMENSION --cflags` $CFLAGS -I"$WDIR" \ -c module.c; then : if $LD `pkg-config $DIMENSION --libs` $LDFLAGS -o libmodule.la `cat links` module.lo; then : else exit 1 fi else exit 1 fi ln -s .libs/`grep dlname= libmodule.la | sed -e 's/dlname=//' -e "s/'//g"` module.so gerris-snapshot-131206/ltmain.sh0000644000175100017510000105202612250371201013502 00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool 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 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.1 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.2 Debian-2.4.2-1.1" TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 gerris-snapshot-131206/Makefile.in0000644000175100017510000007207112250371210013730 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ THANKS TODO compile config.guess config.sub depcomp install-sh \ ltmain.sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgdatadir)" SCRIPTS = $(pkgdata_SCRIPTS) SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ ACLOCAL_AMFLAGS = -I m4 # change this to your OSC directory OSC_DIR = $(HOME)/local/src/osc/home:popinet/$(PACKAGE)-snapshot # change this to your dput command DPUT = socksify dput # change this to your launchpad PPA # configured in ~/.dput.cf PPA = gerris-ppa # change this to the ID of the PPA GPG key KEY = 07AB22DC LOG = $(WEBROOT)/version/gerris_changes SUBDIRS = src modules tools test doc desktop debian EXTRA_DIST = ChangeLog m4 build_function_gcc build_function_libtool @DARCS_CONTROLLED_FALSE@DARCS_CHANGELOG = @DARCS_CONTROLLED_TRUE@DARCS_CHANGELOG = changelog pkgdata_SCRIPTS = build_function libtool all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-pkgdataSCRIPTS: $(pkgdata_SCRIPTS) @$(NORMAL_INSTALL) @list='$(pkgdata_SCRIPTS)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(pkgdatadir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(pkgdatadir)$$dir" || exit $$?; \ } \ ; done uninstall-pkgdataSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(pkgdata_SCRIPTS)'; test -n "$(pkgdatadir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(SCRIPTS) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pkgdataSCRIPTS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgdataSCRIPTS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgdataSCRIPTS install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-pkgdataSCRIPTS ChangeLog: $(DARCS_CHANGELOG) changelog: darcs changes | grep -v Ignore-this: > ChangeLog debian-snapshot: $(DARCS_CHANGELOG) config.h src/version.h sh debian/changelog.sh dpkg-buildpackage -rfakeroot -b rm -f debian/repo/* mv -f ../*.changes ../*.deb debian/repo cd debian/repo && dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz launchpad-snapshot: $(DARCS_CHANGELOG) config.h src/version.h dist tar xzf gerris-?.?.?.tar.gz cd gerris-?.?.? && ./configure && sh debian/changelog.sh $(LOG) && chmod +x debian/rules && dpkg-buildpackage -rfakeroot -k$(KEY) -S -sa rm -f gerris-?.?.?.tar.gz rm -r -f gerris-?.?.? $(DPUT) $(PPA) gerris-snapshot_*_source.changes rm -f gerris-snapshot_* buildservice-snapshot: $(DARCS_CHANGELOG) config.h src/version.h dist tar xzf $(PACKAGE)-?.?.?.tar.gz rm -f $(PACKAGE)-?.?.?.tar.gz mv -f $(PACKAGE)-?.?.? $(PACKAGE)-snapshot cd $(PACKAGE)-snapshot && ./configure && sh debian/changelog.sh $(LOG) && chmod +x debian/rules && make distclean tar czvf $(PACKAGE)-snapshot.tar.gz $(PACKAGE)-snapshot dpkg-source -b $(PACKAGE)-snapshot rm -r -f $(PACKAGE)-snapshot cd $(OSC_DIR) && osc update && rm -f $(OSC_DIR)/* cp -f rpm/$(PACKAGE).spec $(OSC_DIR) mv -f $(PACKAGE)-snapshot.tar.gz $(PACKAGE)-snapshot_*.tar.gz $(PACKAGE)-snapshot_*.dsc $(OSC_DIR) cd $(OSC_DIR) && osc addremove && osc commit -m "snapshot release" # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/NEWS0000644000175100017510000002437712250371171012376 0000000000000003/04/2006: Release 0.9.2 The most significant improvements in this release are: - Important bug fixes and improvements for the multilevel Poisson solver can reduce the overall computational cost by a factor of five or more depending on the problem. - Variable mesh resolution along solid boundaries is now allowed and has been well tested (note however that time-adaptive variable resolution is not allowed on solid boundaries yet). - The robustness of the solution procedure has been much improved in the case of very complex solid boundaries. Other improvements include: - Debian package snapshots. - Adaptive refinement of VOF-advected tracers. - Preliminary implementation of CSF surface tension using Renardy et al. "proper discretisation". - Solid boundaries can be refined according to the local curvature. - Implicit Coriolis terms work with the Navier-Stokes solver. - Support for "thin" 3D domains. Bug fixes: - Several bug fixes for special cases of solid boundaries. - Bug fixes for "GfsAdapt" events. 17/10/2005: Release 0.8.0 Quite a lot of important new features and bug fixes in this release. I will just give a summary below, the ChangeLog has all the details. - Variable density Navier-Stokes is back (but still needs more testing). Have a look at the new Rayleigh-Taylor example. - Solid fractions of embedded boundaries are computed using a new algorithm. This algorithm does not attempt to compute exact volume fractions (as was done before using the boolean operations of GTS) but is at least second-order accurate (which is enough). Consequently it is much faster (approx. 20 times) and also much more robust. It can tolerate some degeneracy in surfaces, as well as non-closed surfaces (with cracks etc...). - Embedded boundaries can now have a variable resolution, but this needs more testing. They cannot be adaptively refined yet, however. - The linearised shallow-water 2D ocean model has been tested for prediction of tides around New Zealand (see the paper by Rym Msadek in the bibliography section). - Volume-of-fluid Continuum-Surface-Stresses (CSS) formulation and associated tests (spurious currents, capillary waves...). Only 2D for now. - GfsFunction can use model variables (have a look at the Boussinesq example). Complex source terms can be defined directly in the parameter file. - The dynamic allocation of variables has been restructured. There is no "pre-allocated" or static variables anymore. Everything is dynamic. Temporary variables are also dynamically allocated and freed. This eliminates implicit dependencies between different routines relying on the same temporary variables. Not surprisingly, several bugs were uncovered when this was implemented (i.e. "routines stepping on each others toes"). - After a full review, the Poisson solver has been improved slightly. Some pathological now converge (see the thin-wall test case). - Support for variable viscosity in the diffusion solver can be used to solve for non-Newtonian fluids (including LES turbulence viscosity models). This works even for very stiff material laws (e.g. Bingham fluids). - The diffusion solver can be tuned from semi-implicit to fully implicit. This is useful for Stokes flows and/or non-Newtonian fluids. - Switched to darcs for version control (after a short period of trying to use arch). Darcs is very nice. - An automated test suite is ran automatically every night (if the code changes). - Examples and associated Latex and HTML documentation can be generated easily. Several examples are included on the web site. Contributed examples from users should be easy (see the last section of the examples page for details). - A FAQ has been added. Feel free to send corrections and additions. - Snapshots are generated only if the test suite passes. Minor changes and improvements: - OutputSimulation uses binary format by default. - GfsFunction can use C statements (instead of full functions). - New objects to compute online histograms (OutputScalarHistogram) and perform harmonic analysis (EventHarmonic). - Several MacOSX specific fixes. 20/10/2004: Release 0.6.0 First the good news: Diffusion equations with complex boundary conditions can now be solved in 3D! Now the bad news: Variable density support is broken in this version (use 0.3.0 if you need it). The reason is that this part of the code needs to be reviewed/generalised to make sure it does the right thing. The main changes/improvements in this version are: - Support for diffusion equations in 3D complex geometries - Flexible boundary conditions on embedded solid surfaces for diffusion equation in parameter files (see the tutorial) - Updated tutorial and reference manual - An initial implementation of a shallow-water 2D and 3D hydrostatic ocean model with semi-implicit Coriolis source terms and barotropic equation (multigrid for Helmoltz equation) - Support for different types of simulations (ocean and incompressible Euler/NS for the moment) - Support for multiple tracers - Much improved interpolation of variables - New consistent pressure correction formulation (which works with momentum source terms near boundaries) - MPI configuration reworked (uses mpicc): tested with mpich and lam-mpi - Bounding boxes for PPM output: allows to select a limited area for PPM output - Optional binary file format (4 to 5 times faster file read) Minor bug corrections and improvements: - pkgconfig support - MacOSX support - Bug fix for 64 bits machines - Relaxed constraints on refinement (still needs work) - External library links in GfsFunction - Short keyword support - Lambda2 criterion of Jeong and Hussain (for vortex detection) - etc... 20/05/2004: Release 0.3.0 Quite a lot has happened since 0.2.0. The main changes/improvements are: - On systems supporting dynamic linking, functions of space and time can be used instead of constants for most objects which require a numerical argument. This is particularly useful for initialisation (each field can be set using functions of space and time) where almost any mathematical description of the initial conditions can be written directly in the parameter file (no need to create a custom module etc...). The same mechanism can also be used to define the initial refinement of the grid (i.e. specify the mesh density as a mathematical function directly in the parameter file) or variable source terms. - The boundary condition subsystem has been entirely revamped. It is now possible to define complex boundary conditions by combining independent boundary conditions (Dirichlet, Neumann etc...) for each variable. Dynamic functions can be used within this framework which allows for variable in space (e.g. profiles) and in time boundary conditions. - The code now includes a multigrid semi-implicit diffusion solver. It can work together with embedded solid boundaries in 2D but not yet in 3D. It is possible to accurately specify the boundary conditions (Dirichlet or Neumann) for the diffused variable on the solid boundaries. All this allows for the solution of advection-diffusion equations such as incompressible Navier-Stokes. Due to the stability of the semi-implicit scheme it is also possible to solve pure Stokes flows with no restriction on the time step. - The adaptive engine has been rewritten. It is now possible to control the maximum size of the simulation. When this maximum size is reached, the algorithm will optimally distribute this maximum number of cells so that the adaptive criterion is minimized. - Note that the parameter file arguments of several objects have changed (GfsAdapt in particular), so that full parameter file compatibility with 0.2.0 is not guaranteed. - Volume of Fluid or standard Godunov advection schemes can now be selected in parameter files. - New object outputs the pressure and viscous forces exerted on the embedded solid boundary. - The pressure is now properly scaled. - Plus a large number of bug fixes, small improvements etc... Have a look at the ChangeLog for details. 08/01/2003: Release 0.2.0 This new release of Gerris includes a number of new features as well as some major code restructuring. The GTS library version 0.7.1 is required. It includes major improvements for boolean operations between surfaces which greatly improve the robustness of the treatment of solid boundaries within Gerris. The major changes are listed below. For a detailed summary see the ChangeLog. New features: - Support for the variable density incompressible Euler equations. - Support for user-defined source terms for any variable. Gaussian tracer source terms and constant source terms (e.g. acceleration of gravity in momentum equation) are provided. - Base domain does not have to be cubic anymore. Independent length scales can be provided for each dimension. - Module for OpenDX allowing direct import of Gerris simulation files. - Updated documentation and tutorial: section about user-defined extension modules for initial conditions. - Support for dynamic allocation of additional cell variables i.e. extension modules can dynamically add additional variables if needed. - Automatic compilation and installation of 2D and 3D versions. - Preliminary implementation of a second-order Volume Of Fluid (VOF) advection scheme. - A new GfsAdaptNotBox class can be used to specify parts of the domain which do not need to be refined. This is particularly useful for implementing absorbing outflow conditions. Improvements and restructuring: - Improved adaptive refinement algorithm. - Restructuring of the test suite. 19/06/2002: Release 0.1.0 Hi all, I am glad to announce the first "official" release of Gerris. It needs the latest version of GTS (0.6.0) to compile. A major change since last month is the addition of "dynamic adaptive mesh refinement" i.e. the distribution of cells changes according to what is happening to the solution. Have a look at the gallery on the web site for a graphical illustration. here: http://gfs.sourceforge.net/gallery.html and here (at the bottom of the page): http://gfs.sourceforge.net/tangaroa.html I also wrote a short tutorial which should help you get started with the code (available online and in the distribution in doc/tutorial). http://gfs.sourceforge.net/tutorial/tutorial1.html Any feedback is of course welcome, Enjoy, Stephane 11/12/2001: Inital CVS checkin 01/08/2001: Initial setup LocalWords: GfsAdaptNotBox gerris-snapshot-131206/INSTALL0000644000175100017510000003660012250371210012712 00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. gerris-snapshot-131206/aclocal.m40000644000175100017510000126121612250371204013530 00000000000000# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # 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 2 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, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, # 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_PROG_CC_C_O # -------------- # Like AC_PROG_CC_C_O, but changed for automake. AC_DEFUN([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC_C_O])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi dnl Make sure AC_PROG_CC is never called again, or it will override our dnl setting of CC. m4_define([AC_PROG_CC], [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([acinclude.m4]) gerris-snapshot-131206/AUTHORS0000644000175100017510000000164212250371171012735 00000000000000Original Authors ---------------- Stéphane Popinet Sébastien Delaux : Moving solid boundaries Gaurav Tomar : particulates module Andris Rudzītis : df3 povray module Jose M. López-Herrera Sánchez : electrohydro module Kristján Gudmundsson : GfsSpatialSum Contributors ------------ Marcelo E. Magallon, Ruben Molina, Drew Parsons: Debian packages Ruben Scardovelli: - author of the Fortran version of gfs_plane_alpha() - Mixed Youngs-Centered VOF normal calculation Ivan Adam Vari, Matthieu Castellazzi: RPM packages. Daniel Fuster: gfsjoin script Rohallah Tavakoli: initial implementation of VTK and Tecplot output Norbert Beckmann: R*-tree implementation used in the terrain module Thierry Letellier, Laurent Roblou: FES2004 tidal atlas library gerris-snapshot-131206/configure0000755000175100017510000262573312250371211013606 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="configure.ac" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS DARCS_CONTROLLED_FALSE DARCS_CONTROLLED_TRUE GFS3D_LIBS GFS2D_LIBS OPEN_MEMSTREAM_FALSE OPEN_MEMSTREAM_TRUE HAS_FFTW3_FALSE HAS_FFTW3_TRUE FFTW3_LIBS FFTW3_CFLAGS BUILD_LIS_FALSE BUILD_LIS_TRUE BUILD_HYPRE_FALSE BUILD_HYPRE_TRUE BUILD_ODE_FALSE BUILD_ODE_TRUE ODE_LIBS ODE_CFLAGS ode W3INIT BUILD_WAVEWATCH_FALSE BUILD_WAVEWATCH_TRUE BUILD_AGMG_FALSE BUILD_AGMG_TRUE ac_ct_FC FCFLAGS FC BUILD_STOKES_FALSE BUILD_STOKES_TRUE FLIBS ac_ct_F77 FFLAGS F77 BUILD_TIDE_FALSE BUILD_TIDE_TRUE HAS_NETCDF_FALSE HAS_NETCDF_TRUE HAS_GSL_FALSE HAS_GSL_TRUE GSL_LIBS GSL_CFLAGS GSL_CONFIG HAS_LIBPROJ_FALSE HAS_LIBPROJ_TRUE have_m4 have_pkg_config GTS_LIBS GTS_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG NO_UNDEFINED CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL OBJDUMP DLLTOOL AS host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC use_mpicc MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM LT_AGE LT_REVISION LT_CURRENT LT_RELEASE WEBROOT GFS_COMPILATION_FLAGS GFS_VERSION GFS_MICRO_VERSION GFS_MINOR_VERSION GFS_MAJOR_VERSION target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_maintainer_mode with_mpicc with_suffix enable_mpi enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_libtool_verbose enable_gts_check with_gsl_prefix with_gsl_exec_prefix enable_gsltest enable_agmg ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GTS_CFLAGS GTS_LIBS F77 FFLAGS FC FCFLAGS FFTW3_CFLAGS FFTW3_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-mpi do not compile MPI support --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-libtool-verbose enable verbose libtool output (default disabled) --enable-gts-check enable object type cast checks in GTS --disable-gsltest Do not try to compile and run a test GSL program --enable-agmg enable the AGMG module (beware of non-free license) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-mpicc=path pick a specific path to mpicc --with-suffix=.a override the glib dynamic module suffix --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-gsl-prefix=PFX Prefix where GSL is installed (optional) --with-gsl-exec-prefix=PFX Exec prefix where GSL is installed (optional) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GTS_CFLAGS C compiler flags for GTS, overriding pkg-config GTS_LIBS linker flags for GTS, overriding pkg-config F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags FC Fortran compiler command FCFLAGS Fortran compiler flags FFTW3_CFLAGS C compiler flags for FFTW3, overriding pkg-config FFTW3_LIBS linker flags for FFTW3, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_f77_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_f77_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_f77_try_compile # ac_fn_f77_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_f77_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_f77_try_link # ac_fn_fc_try_compile LINENO # --------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_fc_try_compile # ac_fn_fc_try_link LINENO # ------------------------ # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_fc_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_fc_try_link cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu #AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl # Making releases: # GFS_MICRO_VERSION += 1; # GFS_INTERFACE_AGE += 1; # GFS_BINARY_AGE += 1; # if any functions have been added, set GFS_INTERFACE_AGE to 0. # if backwards compatibility has been broken, # set GFS_BINARY_AGE and GFS_INTERFACE_AGE to 0. # # Remember to update rpm/gerris.spec when changing the version number. GFS_MAJOR_VERSION=1 GFS_MINOR_VERSION=3 GFS_MICRO_VERSION=2 GFS_INTERFACE_AGE=0 GFS_BINARY_AGE=0 GFS_VERSION=$GFS_MAJOR_VERSION.$GFS_MINOR_VERSION.$GFS_MICRO_VERSION GFS_COMPILATION_FLAGS=$CFLAGS #AC_DIVERT_POP()dnl # change this to the gerris web site root WEBROOT=/var/www/site-gerris/gerris # libtool versioning LT_RELEASE=$GFS_MAJOR_VERSION.$GFS_MINOR_VERSION LT_CURRENT=`expr $GFS_MICRO_VERSION - $GFS_INTERFACE_AGE` LT_REVISION=$GFS_INTERFACE_AGE LT_AGE=`expr $GFS_BINARY_AGE - $GFS_INTERFACE_AGE` # For automake. VERSION=$GFS_VERSION PACKAGE=gerris am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=$PACKAGE VERSION=$VERSION # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Specify a configuration file ac_config_headers="$ac_config_headers config.h" cat >>confdefs.h <<_ACEOF #define GFS_MAJOR_VERSION $GFS_MAJOR_VERSION _ACEOF cat >>confdefs.h <<_ACEOF #define GFS_MINOR_VERSION $GFS_MINOR_VERSION _ACEOF cat >>confdefs.h <<_ACEOF #define GFS_MICRO_VERSION $GFS_MICRO_VERSION _ACEOF cat >>confdefs.h <<_ACEOF #define GFS_INTERFACE_AGE $GFS_INTERFACE_AGE _ACEOF cat >>confdefs.h <<_ACEOF #define GFS_BINARY_AGE $GFS_BINARY_AGE _ACEOF cat >>confdefs.h <<_ACEOF #define GFS_VERSION "$GFS_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define GFS_COMPILATION_FLAGS "$GFS_COMPILATION_FLAGS" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # Check whether --with-mpicc was given. if test "${with_mpicc+set}" = set; then : withval=$with_mpicc; with_mpicc=$withval else with_mpicc='' fi # Check whether --with-suffix was given. if test "${with_suffix+set}" = set; then : withval=$with_suffix; with_suffix=$withval else with_suffix=default fi if test ! "x$with_suffix" = "xdefault"; then cat >>confdefs.h <<_ACEOF #define MODULES_SUFFIX "$with_suffix" _ACEOF fi # check if MPI support is disabled # Check whether --enable-mpi was given. if test "${enable_mpi+set}" = set; then : enableval=$enable_mpi; case "${enableval}" in yes) ;; *) with_mpicc=no ;; esac fi if test "x$with_mpicc" != "xno" ; then if test "x$with_mpicc" != "x" ; then if test -x "$with_mpicc" ; then use_mpicc=yes CC="$with_mpicc" fi else # Extract the first word of "mpicc", so it can be a program name with args. set dummy mpicc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_use_mpicc+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$use_mpicc"; then ac_cv_prog_use_mpicc="$use_mpicc" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_use_mpicc="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_use_mpicc" && ac_cv_prog_use_mpicc="no" fi fi use_mpicc=$ac_cv_prog_use_mpicc if test -n "$use_mpicc"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_mpicc" >&5 $as_echo "$use_mpicc" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$use_mpicc" = "xyes" ; then CC=mpicc fi fi if test "x$use_mpicc" = "xyes" ; then $as_echo "#define HAVE_MPI 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI not found. No MPI support will be compiled in." >&5 $as_echo "$as_me: WARNING: MPI not found. No MPI support will be compiled in." >&2;} fi else use_mpicc=no fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi # -D_GNU_SOURCE is only necessary for old (< 2.10) glibc implementations of open_memstream() CFLAGS="$CFLAGS -D_XOPEN_SOURCE=700 -D_BSD_SOURCE -D_GNU_SOURCE" if test x$GCC = xyes ; then CFLAGS="$CFLAGS -Wall -Werror-implicit-function-declaration -Wmissing-prototypes -Wmissing-declarations -pipe -std=c99" fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: if test "x$CC" != xcc; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 $as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi # Check whether --enable-libtool-verbose was given. if test "${enable_libtool_verbose+set}" = set; then : enableval=$enable_libtool_verbose; with_libtool_verbose=$enableval else with_libtool_verbose='no' fi if test "$with_libtool_verbose" = 'no' then LIBTOOL="$LIBTOOL --silent" fi case "$build" in *-apple-darwin*) NO_UNDEFINED="" CFLAGS="$CFLAGS -D_DARWIN_C_SOURCE" ;; *-pc-cygwin*) NO_UNDEFINED="" ;; *) NO_UNDEFINED="-no-undefined" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # check that pointers can be stored in doubles { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pointers can be stored in doubles" >&5 $as_echo_n "checking whether pointers can be stored in doubles... " >&6; } if test "$cross_compiling" = yes; then : can_store_pointers=yes; echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ main () { if (sizeof (void *) > sizeof (double)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : can_store_pointers=yes else can_store_pointers=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_store_pointers" >&5 $as_echo "$can_store_pointers" >&6; } if test x$can_store_pointers = xno ; then as_fn_error $? " *** Pointers cannot be stored in doubles on this architecture." "$LINENO" 5 fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTS" >&5 $as_echo_n "checking for GTS... " >&6; } if test -n "$GTS_CFLAGS"; then pkg_cv_GTS_CFLAGS="$GTS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gts >= 0.7.4\""; } >&5 ($PKG_CONFIG --exists --print-errors "gts >= 0.7.4") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTS_CFLAGS=`$PKG_CONFIG --cflags "gts >= 0.7.4" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTS_LIBS"; then pkg_cv_GTS_LIBS="$GTS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gts >= 0.7.4\""; } >&5 ($PKG_CONFIG --exists --print-errors "gts >= 0.7.4") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTS_LIBS=`$PKG_CONFIG --libs "gts >= 0.7.4" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gts >= 0.7.4" 2>&1` else GTS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gts >= 0.7.4" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTS_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gts >= 0.7.4) were not met: $GTS_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTS_CFLAGS and GTS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTS_CFLAGS and GTS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTS_CFLAGS=$pkg_cv_GTS_CFLAGS GTS_LIBS=$pkg_cv_GTS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi # check if we want to enable GTS casts checks # Check whether --enable-gts-check was given. if test "${enable_gts_check+set}" = set; then : enableval=$enable_gts_check; case "${enableval}" in *) gts_check_casts="--check" ;; esac fi if test -n "$gts_check_casts"; then GTS_CFLAGS="$GTS_CFLAGS -DGTS_CHECK_CASTS" fi # check whether GModules are supported { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether modules are supported" >&5 $as_echo_n "checking whether modules are supported... " >&6; } OLD_CFLAGS=$CFLAGS CFLAGS=$GTS_CFLAGS OLD_LIBS=$LIBS LIBS=$GTS_LIBS if test "$cross_compiling" = yes; then : have_gmodule=yes; echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include main () { if (!g_module_supported ()) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : have_gmodule=yes else have_gmodule=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gmodule" >&5 $as_echo "$have_gmodule" >&6; } CFLAGS=$OLD_CFLAGS LIBS=$OLD_LIBS # checking how to build modules if test "$have_gmodule" = "yes"; then # try gcc first module_flags="" if test x$GCC = xyes; then gcc_flags="-fpic -x c" for flags in \ "-shared" \ "-dynamiclib -undefined dynamic_lookup" \ "-bundle" do if test x"$module_flags" = x; then if echo "void test(){}" | $CC $flags $gcc_flags - 2> /dev/null; then module_flags="$flags" fi fi done fi if test x"$module_flags" = x; then # use libtool if not using gcc sed -e "s|PREFIX|$prefix|g" -e "s|COMPILER|$CC|g" < build_function_libtool > build_function else sed -e "s|MODULE_FLAGS|$module_flags|" -e "s|COMPILER|$CC|g" < build_function_gcc > build_function fi else # cannot use modules cat < build_function #!/bin/sh echo "functions are not supported on this system" exit 1 EOF fi # checks for pkg-config if test "$have_gmodule" = "yes"; then # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_pkg_config+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_pkg_config"; then ac_cv_prog_have_pkg_config="$have_pkg_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_pkg_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_pkg_config" && ac_cv_prog_have_pkg_config="no" fi fi have_pkg_config=$ac_cv_prog_have_pkg_config if test -n "$have_pkg_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_pkg_config" >&5 $as_echo "$have_pkg_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$have_pkg_config" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pkg-config is required for functions in parameter files." >&5 $as_echo "$as_me: WARNING: pkg-config is required for functions in parameter files." >&2;} fi fi if test x"$have_pkg_config" = x"yes"; then $as_echo "#define HAVE_PKG_CONFIG 1" >>confdefs.h else $as_echo "#define HAVE_PKG_CONFIG 0" >>confdefs.h fi if test x"$have_pkg_config" = x""; then have_pkg_config=undefined fi # checks for m4 # Extract the first word of "m4", so it can be a program name with args. set dummy m4; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_m4+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_m4"; then ac_cv_prog_have_m4="$have_m4" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_m4="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_m4" && ac_cv_prog_have_m4="no" fi fi have_m4=$ac_cv_prog_have_m4 if test -n "$have_m4"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_m4" >&5 $as_echo "$have_m4" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi options_m4="" if test "$have_m4" = "yes"; then $as_echo "#define HAVE_M4 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking check whether m4 accepts the -P option" >&5 $as_echo_n "checking check whether m4 accepts the -P option... " >&6; } if m4 -P < /dev/null 2> /dev/null; then options_m4="-P" accepts_P="yes" else accepts_P="no" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $accepts_P" >&5 $as_echo "$accepts_P" >&6; } else $as_echo "#define HAVE_M4 0" >>confdefs.h fi cat >>confdefs.h <<_ACEOF #define M4_OPTIONS "$options_m4" _ACEOF # checks for libproj { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pj_fwd in -lproj" >&5 $as_echo_n "checking for pj_fwd in -lproj... " >&6; } if ${ac_cv_lib_proj_pj_fwd+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lproj -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pj_fwd (); int main () { return pj_fwd (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_proj_pj_fwd=yes else ac_cv_lib_proj_pj_fwd=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_proj_pj_fwd" >&5 $as_echo "$ac_cv_lib_proj_pj_fwd" >&6; } if test "x$ac_cv_lib_proj_pj_fwd" = xyes; then : proj="yes" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libproj not found. Map module will not be available." >&5 $as_echo "$as_me: WARNING: libproj not found. Map module will not be available." >&2;} fi for ac_header in proj_api.h do : ac_fn_c_check_header_mongrel "$LINENO" "proj_api.h" "ac_cv_header_proj_api_h" "$ac_includes_default" if test "x$ac_cv_header_proj_api_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PROJ_API_H 1 _ACEOF proj="yes" else proj="no" fi done if test x$proj = xyes; then HAS_LIBPROJ_TRUE= HAS_LIBPROJ_FALSE='#' else HAS_LIBPROJ_TRUE='#' HAS_LIBPROJ_FALSE= fi # checks for GNU Scientific Library # Check whether --with-gsl-prefix was given. if test "${with_gsl_prefix+set}" = set; then : withval=$with_gsl_prefix; gsl_prefix="$withval" else gsl_prefix="" fi # Check whether --with-gsl-exec-prefix was given. if test "${with_gsl_exec_prefix+set}" = set; then : withval=$with_gsl_exec_prefix; gsl_exec_prefix="$withval" else gsl_exec_prefix="" fi # Check whether --enable-gsltest was given. if test "${enable_gsltest+set}" = set; then : enableval=$enable_gsltest; else enable_gsltest=yes fi if test "x${GSL_CONFIG+set}" != xset ; then if test "x$gsl_prefix" != x ; then GSL_CONFIG="$gsl_prefix/bin/gsl-config" fi if test "x$gsl_exec_prefix" != x ; then GSL_CONFIG="$gsl_exec_prefix/bin/gsl-config" fi fi # Extract the first word of "gsl-config", so it can be a program name with args. set dummy gsl-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GSL_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $GSL_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GSL_CONFIG="$GSL_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GSL_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GSL_CONFIG" && ac_cv_path_GSL_CONFIG="no" ;; esac fi GSL_CONFIG=$ac_cv_path_GSL_CONFIG if test -n "$GSL_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GSL_CONFIG" >&5 $as_echo "$GSL_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi min_gsl_version=0.2.5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSL - version >= $min_gsl_version" >&5 $as_echo_n "checking for GSL - version >= $min_gsl_version... " >&6; } no_gsl="" if test "$GSL_CONFIG" = "no" ; then no_gsl=yes else GSL_CFLAGS=`$GSL_CONFIG --cflags` GSL_LIBS=`$GSL_CONFIG --libs` gsl_major_version=`$GSL_CONFIG --version | \ sed 's/^\([0-9]*\).*/\1/'` if test "x${gsl_major_version}" = "x" ; then gsl_major_version=0 fi gsl_minor_version=`$GSL_CONFIG --version | \ sed 's/^\([0-9]*\)\.\{0,1\}\([0-9]*\).*/\2/'` if test "x${gsl_minor_version}" = "x" ; then gsl_minor_version=0 fi gsl_micro_version=`$GSL_CONFIG --version | \ sed 's/^\([0-9]*\)\.\{0,1\}\([0-9]*\)\.\{0,1\}\([0-9]*\).*/\3/'` if test "x${gsl_micro_version}" = "x" ; then gsl_micro_version=0 fi if test "x$enable_gsltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GSL_CFLAGS" LIBS="$LIBS $GSL_LIBS" rm -f conf.gsltest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include char* my_strdup (const char *str); char* my_strdup (const char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (void) { int major = 0, minor = 0, micro = 0; int n; char *tmp_version; system ("touch conf.gsltest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_gsl_version"); n = sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) ; if (n != 2 && n != 3) { printf("%s, bad version string\n", "$min_gsl_version"); exit(1); } if (($gsl_major_version > major) || (($gsl_major_version == major) && ($gsl_minor_version > minor)) || (($gsl_major_version == major) && ($gsl_minor_version == minor) && ($gsl_micro_version >= micro))) { exit(0); } else { printf("\n*** 'gsl-config --version' returned %d.%d.%d, but the minimum version\n", $gsl_major_version, $gsl_minor_version, $gsl_micro_version); printf("*** of GSL required is %d.%d.%d. If gsl-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If gsl-config was wrong, set the environment variable GSL_CONFIG\n"); printf("*** to point to the correct copy of gsl-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); exit(1); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_gsl=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gsl" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$GSL_CONFIG" = "no" ; then echo "*** The gsl-config script installed by GSL could not be found" echo "*** If GSL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GSL_CONFIG environment variable to the" echo "*** full path to gsl-config." else if test -f conf.gsltest ; then : else echo "*** Could not run GSL test program, checking why..." CFLAGS="$CFLAGS $GSL_CFLAGS" LIBS="$LIBS $GSL_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GSL or finding the wrong" echo "*** version of GSL. If it is not finding GSL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GSL was incorrectly installed" echo "*** or that you have moved GSL since it was installed. In the latter case, you" echo "*** may want to edit the gsl-config script: $GSL_CONFIG" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi # GSL_CFLAGS="" # GSL_LIBS="" : fi rm -f conf.gsltest if test x$no_gsl != xyes; then HAS_GSL_TRUE= HAS_GSL_FALSE='#' else HAS_GSL_TRUE='#' HAS_GSL_FALSE= fi # checks for netCDF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nc_open in -lnetcdf" >&5 $as_echo_n "checking for nc_open in -lnetcdf... " >&6; } if ${ac_cv_lib_netcdf_nc_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnetcdf -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char nc_open (); int main () { return nc_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_netcdf_nc_open=yes else ac_cv_lib_netcdf_nc_open=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_netcdf_nc_open" >&5 $as_echo "$ac_cv_lib_netcdf_nc_open" >&6; } if test "x$ac_cv_lib_netcdf_nc_open" = xyes; then : netcdf="true" else netcdf="false" fi for ac_header in netcdf.h do : ac_fn_c_check_header_mongrel "$LINENO" "netcdf.h" "ac_cv_header_netcdf_h" "$ac_includes_default" if test "x$ac_cv_header_netcdf_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NETCDF_H 1 _ACEOF netcdf="true" else netcdf="false" fi done if test x$netcdf = xtrue; then HAS_NETCDF_TRUE= HAS_NETCDF_FALSE='#' else HAS_NETCDF_TRUE='#' HAS_NETCDF_FALSE= fi # Tide module requires both netCDF and GSL if test x$netcdf = xfalse -o x$no_gsl = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GSL and/or netCDF not found. Tide module will not be available." >&5 $as_echo "$as_me: WARNING: GSL and/or netCDF not found. Tide module will not be available." >&2;} tide=no else tide=yes fi if test x$netcdf = xtrue -a x$no_gsl = x; then BUILD_TIDE_TRUE= BUILD_TIDE_FALSE='#' else BUILD_TIDE_TRUE='#' BUILD_TIDE_FALSE= fi # Stokes module requires a fortran compiler ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_F77+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $F77" >&5 $as_echo "$F77" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_F77+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5 $as_echo "$ac_ct_F77" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_F77" && break done if test "x$ac_ct_F77" = x; then F77="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac F77=$ac_ct_F77 fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran 77 compiler" >&5 $as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; } if ${ac_cv_f77_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5 $as_echo "$ac_cv_f77_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5 $as_echo_n "checking whether $F77 accepts -g... " >&6; } if ${ac_cv_prog_f77_g+:} false; then : $as_echo_n "(cached) " >&6 else FFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_cv_prog_f77_g=yes else ac_cv_prog_f77_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5 $as_echo "$ac_cv_prog_f77_g" >&6; } if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi if test $ac_compiler_gnu = yes; then G77=yes else G77= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_direct_absolute_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no inherit_rpath_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds reload_flag_F77=$reload_flag reload_cmds_F77=$reload_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC compiler_F77=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` GCC=$G77 if test -n "$compiler"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } GCC_F77="$G77" LD_F77="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_F77='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_F77= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl_F77='-Xlinker ' if test -n "$lt_prog_compiler_pic_F77"; then lt_prog_compiler_pic_F77="-Xcompiler $lt_prog_compiler_pic_F77" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='--shared' lt_prog_compiler_static_F77='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_F77='-Wl,-Wl,,' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-qpic' lt_prog_compiler_static_F77='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; *Portland\ Group*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; rdos*) lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_F77=$lt_prog_compiler_pic_F77 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_F77" >&5 $as_echo "$lt_cv_prog_compiler_pic_F77" >&6; } lt_prog_compiler_pic_F77=$lt_cv_prog_compiler_pic_F77 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... " >&6; } if ${lt_cv_prog_compiler_pic_works_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_F77=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_F77" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_F77" >&6; } if test x"$lt_cv_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_F77=yes fi else lt_cv_prog_compiler_static_works_F77=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_F77" >&5 $as_echo "$lt_cv_prog_compiler_static_works_F77" >&6; } if test x"$lt_cv_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_F77=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5 $as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_F77=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5 $as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag_F77= always_export_symbols_F77=no archive_cmds_F77= archive_expsym_cmds_F77= compiler_needs_object_F77=no enable_shared_with_static_runtimes_F77=no export_dynamic_flag_spec_F77= export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic_F77=no hardcode_direct_F77=no hardcode_direct_absolute_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported inherit_rpath_F77=no link_all_deplibs_F77=unknown module_cmds_F77= module_expsym_cmds_F77= old_archive_from_new_cmds_F77= old_archive_from_expsyms_cmds_F77= thread_safe_flag_spec_F77= whole_archive_flag_spec_F77= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs_F77=no ;; esac ld_shlibs_F77=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='' ;; m68k) archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' export_dynamic_flag_spec_F77='${wl}--export-all-symbols' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_F77='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_F77=no fi ;; haiku*) archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_F77=yes ;; interix[3-9]*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec_F77= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_F77=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_F77=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec_F77='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs_F77=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes file_list_spec_F77='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs_F77=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_F77='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__F77+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__F77=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__F77 fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__F77+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__F77=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__F77 fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_F77='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' fi archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='' ;; m68k) archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes file_list_spec_F77='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, F77)='true' enable_shared_with_static_runtimes_F77=yes exclude_expsyms_F77='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds_F77='chmod 644 $oldlib' postlink_cmds_F77='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes_F77=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_F77='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' compiler_needs_object_F77=yes else whole_archive_flag_spec_F77='' fi link_all_deplibs_F77=yes allow_undefined_flag_F77="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_F77="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_F77="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs_F77=no fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat > conftest.$ac_ext <<_ACEOF subroutine foo end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc_F77='no' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: inherit_rpath_F77=yes link_all_deplibs_F77=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no hardcode_direct_absolute_F77=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs_F77=no fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc_F77='no' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi archive_cmds_need_lc_F77='no' hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds_F77='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-R,$libdir' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec_F77='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_F77" >&5 $as_echo "$ld_shlibs_F77" >&6; } test "$ld_shlibs_F77" = no && can_build_shared=no with_gnu_ld_F77=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_F77+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_F77=no else lt_cv_archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_F77" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_F77" >&6; } archive_cmds_need_lc_F77=$lt_cv_archive_cmds_need_lc_F77 ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_F77\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_F77\"" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || test -n "$runpath_var_F77" || test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_F77" >&5 $as_echo "$hardcode_action_F77" >&6; } if test "$hardcode_action_F77" = relink || test "$inherit_rpath_F77" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x$F77 != x; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $F77" >&5 $as_echo_n "checking how to get verbose linking output from $F77... " >&6; } if ${ac_cv_prog_f77_v+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_cv_prog_f77_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_verb" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_f77_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_f77_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_f77_v"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $F77" >&5 $as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 $as_echo "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_v" >&5 $as_echo "$ac_cv_prog_f77_v" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 libraries of $F77" >&5 $as_echo_n "checking for Fortran 77 libraries of $F77... " >&6; } if ${ac_cv_f77_libs+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$FLIBS" != "x"; then ac_cv_f77_libs="$FLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_cv_prog_f77_v" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac ac_cv_f77_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_f77_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) case $host_os in *cygwin*) ;; *) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`$as_echo "$ac_f77_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_libs" >&5 $as_echo "$ac_cv_f77_libs" >&6; } FLIBS="$ac_cv_f77_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran 77 libraries" >&5 $as_echo_n "checking for dummy main to link with Fortran 77 libraries... " >&6; } if ${ac_cv_f77_dummy_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_f77_dm_save_LIBS=$LIBS LIBS="$LIBS $FLIBS" ac_fortran_dm_var=F77_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_fortran_dummy_main=none else ac_cv_fortran_dummy_main=unknown fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_cv_f77_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_f77_dm_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_dummy_main" >&5 $as_echo "$ac_cv_f77_dummy_main" >&6; } F77_DUMMY_MAIN=$ac_cv_f77_dummy_main if test "$F77_DUMMY_MAIN" != unknown; then : if test $F77_DUMMY_MAIN != none; then cat >>confdefs.h <<_ACEOF #define F77_DUMMY_MAIN $F77_DUMMY_MAIN _ACEOF if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then $as_echo "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 name-mangling scheme" >&5 $as_echo_n "checking for Fortran 77 name-mangling scheme... " >&6; } if ${ac_cv_f77_mangling+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_f77_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no extra underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, extra underscore" fi else ac_cv_f77_mangling="unknown" fi else ac_cv_f77_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_mangling" >&5 $as_echo "$ac_cv_f77_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in "lower case, no underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) name" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) name" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 $as_echo "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi if test x$F77 != x; then BUILD_STOKES_TRUE= BUILD_STOKES_FALSE='#' else BUILD_STOKES_TRUE='#' BUILD_STOKES_FALSE= fi # Enable the AGMG module (disabled by default due to non-free license) # Check whether --enable-agmg was given. if test "${enable_agmg+set}" = set; then : enableval=$enable_agmg; with_agmg=$enableval else with_agmg="no" fi # AGMG module requires the gfortran compiler and lapack/blas if test x$with_agmg != xno; then ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran f90 xlf90 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_FC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 $as_echo "$FC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran f90 xlf90 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_FC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 $as_echo "$ac_ct_FC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5 $as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; } if ${ac_cv_fc_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 $as_echo "$ac_cv_fc_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+set} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 $as_echo_n "checking whether $FC accepts -g... " >&6; } if ${ac_cv_prog_fc_g+:} false; then : $as_echo_n "(cached) " >&6 else FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO"; then : ac_cv_prog_fc_g=yes else ac_cv_prog_fc_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 $as_echo "$ac_cv_prog_fc_g" >&6; } if test "$ac_test_FCFLAGS" = set; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi archive_cmds_need_lc_FC=no allow_undefined_flag_FC= always_export_symbols_FC=no archive_expsym_cmds_FC= export_dynamic_flag_spec_FC= hardcode_direct_FC=no hardcode_direct_absolute_FC=no hardcode_libdir_flag_spec_FC= hardcode_libdir_separator_FC= hardcode_minus_L_FC=no hardcode_automatic_FC=no inherit_rpath_FC=no module_cmds_FC= module_expsym_cmds_FC= link_all_deplibs_FC=unknown old_archive_cmds_FC=$old_archive_cmds reload_flag_FC=$reload_flag reload_cmds_FC=$reload_cmds no_undefined_flag_FC= whole_archive_flag_spec_FC= enable_shared_with_static_runtimes_FC=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o objext_FC=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu compiler_FC=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } GCC_FC="$ac_cv_fc_compiler_gnu" LD_FC="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_FC= postdep_objects_FC= predeps_FC= postdeps_FC= compiler_lib_search_path_FC= cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_FC"; then compiler_lib_search_path_FC="${prev}${p}" else compiler_lib_search_path_FC="${compiler_lib_search_path_FC} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_FC"; then postdeps_FC="${prev}${p}" else postdeps_FC="${postdeps_FC} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_FC"; then predep_objects_FC="$p" else predep_objects_FC="$predep_objects_FC $p" fi else if test -z "$postdep_objects_FC"; then postdep_objects_FC="$p" else postdep_objects_FC="$postdep_objects_FC $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling FC test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case " $postdeps_FC " in *" -lc "*) archive_cmds_need_lc_FC=no ;; esac compiler_lib_search_dirs_FC= if test -n "${compiler_lib_search_path_FC}"; then compiler_lib_search_dirs_FC=`echo " ${compiler_lib_search_path_FC}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_FC= lt_prog_compiler_pic_FC= lt_prog_compiler_static_FC= if test "$GCC" = yes; then lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_static_FC='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_FC='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_FC='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_FC='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_FC='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_FC='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_FC= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic_FC='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_FC=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_FC='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_FC=-Kconform_pic fi ;; *) lt_prog_compiler_pic_FC='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl_FC='-Xlinker ' if test -n "$lt_prog_compiler_pic_FC"; then lt_prog_compiler_pic_FC="-Xcompiler $lt_prog_compiler_pic_FC" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_FC='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_FC='-Bstatic' else lt_prog_compiler_static_FC='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_FC='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_FC='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_FC='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_FC='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_FC='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_FC='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fPIC' lt_prog_compiler_static_FC='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='--shared' lt_prog_compiler_static_FC='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_FC='-Wl,-Wl,,' lt_prog_compiler_pic_FC='-PIC' lt_prog_compiler_static_FC='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fpic' lt_prog_compiler_static_FC='-Bstatic' ;; ccc*) lt_prog_compiler_wl_FC='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_FC='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-qpic' lt_prog_compiler_static_FC='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' lt_prog_compiler_wl_FC='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' lt_prog_compiler_wl_FC='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' lt_prog_compiler_wl_FC='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fPIC' lt_prog_compiler_static_FC='-static' ;; *Portland\ Group*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fpic' lt_prog_compiler_static_FC='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_FC='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_FC='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_FC='-non_shared' ;; rdos*) lt_prog_compiler_static_FC='-non_shared' ;; solaris*) lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl_FC='-Qoption ld ';; *) lt_prog_compiler_wl_FC='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_FC='-Qoption ld ' lt_prog_compiler_pic_FC='-PIC' lt_prog_compiler_static_FC='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_FC='-Kconform_pic' lt_prog_compiler_static_FC='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' ;; unicos*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_can_build_shared_FC=no ;; uts4*) lt_prog_compiler_pic_FC='-pic' lt_prog_compiler_static_FC='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_FC=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_FC= ;; *) lt_prog_compiler_pic_FC="$lt_prog_compiler_pic_FC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_FC+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_FC=$lt_prog_compiler_pic_FC fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_FC" >&5 $as_echo "$lt_cv_prog_compiler_pic_FC" >&6; } lt_prog_compiler_pic_FC=$lt_cv_prog_compiler_pic_FC # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_FC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_FC works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_FC works... " >&6; } if ${lt_cv_prog_compiler_pic_works_FC+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_FC=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_FC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_FC=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_FC" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_FC" >&6; } if test x"$lt_cv_prog_compiler_pic_works_FC" = xyes; then case $lt_prog_compiler_pic_FC in "" | " "*) ;; *) lt_prog_compiler_pic_FC=" $lt_prog_compiler_pic_FC" ;; esac else lt_prog_compiler_pic_FC= lt_prog_compiler_can_build_shared_FC=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_FC eval lt_tmp_static_flag=\"$lt_prog_compiler_static_FC\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_FC+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_FC=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_FC=yes fi else lt_cv_prog_compiler_static_works_FC=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_FC" >&5 $as_echo "$lt_cv_prog_compiler_static_works_FC" >&6; } if test x"$lt_cv_prog_compiler_static_works_FC" = xyes; then : else lt_prog_compiler_static_FC= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_FC+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_FC=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_FC=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_FC" >&5 $as_echo "$lt_cv_prog_compiler_c_o_FC" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_FC+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_FC=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_FC=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_FC" >&5 $as_echo "$lt_cv_prog_compiler_c_o_FC" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_FC" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag_FC= always_export_symbols_FC=no archive_cmds_FC= archive_expsym_cmds_FC= compiler_needs_object_FC=no enable_shared_with_static_runtimes_FC=no export_dynamic_flag_spec_FC= export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic_FC=no hardcode_direct_FC=no hardcode_direct_absolute_FC=no hardcode_libdir_flag_spec_FC= hardcode_libdir_separator_FC= hardcode_minus_L_FC=no hardcode_shlibpath_var_FC=unsupported inherit_rpath_FC=no link_all_deplibs_FC=unknown module_cmds_FC= module_expsym_cmds_FC= old_archive_from_new_cmds_FC= old_archive_from_expsyms_cmds_FC= thread_safe_flag_spec_FC= whole_archive_flag_spec_FC= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_FC= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_FC='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs_FC=no ;; esac ld_shlibs_FC=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_FC='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_FC="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_FC= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_FC=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_FC='' ;; m68k) archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_minus_L_FC=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_FC=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_FC='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_FC=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, FC) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_FC='-L$libdir' export_dynamic_flag_spec_FC='${wl}--export-all-symbols' allow_undefined_flag_FC=unsupported always_export_symbols_FC=no enable_shared_with_static_runtimes_FC=yes export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_FC='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_FC='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_FC=no fi ;; haiku*) archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_FC=yes ;; interix[3-9]*) hardcode_direct_FC=no hardcode_shlibpath_var_FC=no hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir' export_dynamic_flag_spec_FC='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_FC='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec_FC= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_FC=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec_FC='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_FC=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds_FC='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec_FC='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' archive_cmds_FC='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs_FC=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_FC='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs_FC=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_FC=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_FC=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_FC=no fi ;; esac ;; sunos4*) archive_cmds_FC='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_FC=yes hardcode_shlibpath_var_FC=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_FC=no fi ;; esac if test "$ld_shlibs_FC" = no; then runpath_var= hardcode_libdir_flag_spec_FC= export_dynamic_flag_spec_FC= whole_archive_flag_spec_FC= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_FC=unsupported always_export_symbols_FC=yes archive_expsym_cmds_FC='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_FC=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_FC=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_FC='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_FC='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_FC='' hardcode_direct_FC=yes hardcode_direct_absolute_FC=yes hardcode_libdir_separator_FC=':' link_all_deplibs_FC=yes file_list_spec_FC='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_FC=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_FC=yes hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_libdir_separator_FC= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs_FC=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_FC='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_FC=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_FC='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__FC+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__FC=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__FC"; then lt_cv_aix_libpath__FC=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__FC"; then lt_cv_aix_libpath__FC="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__FC fi hardcode_libdir_flag_spec_FC='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_FC='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_FC='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_FC="-z nodefs" archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__FC+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__FC=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__FC"; then lt_cv_aix_libpath__FC=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__FC"; then lt_cv_aix_libpath__FC="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__FC fi hardcode_libdir_flag_spec_FC='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_FC=' ${wl}-bernotok' allow_undefined_flag_FC=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_FC='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_FC='$convenience' fi archive_cmds_need_lc_FC=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_FC='' ;; m68k) archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_minus_L_FC=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec_FC=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec_FC=' ' allow_undefined_flag_FC=unsupported always_export_symbols_FC=yes file_list_spec_FC='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_FC='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_FC='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, FC)='true' enable_shared_with_static_runtimes_FC=yes exclude_expsyms_FC='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds_FC='chmod 644 $oldlib' postlink_cmds_FC='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec_FC=' ' allow_undefined_flag_FC=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_FC='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds_FC='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_FC='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes_FC=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_FC=no hardcode_direct_FC=no hardcode_automatic_FC=yes hardcode_shlibpath_var_FC=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_FC='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' compiler_needs_object_FC=yes else whole_archive_flag_spec_FC='' fi link_all_deplibs_FC=yes allow_undefined_flag_FC="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_FC="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_FC="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_FC="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_FC="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs_FC=no fi ;; dgux*) archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_shlibpath_var_FC=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_FC='-R$libdir' hardcode_direct_FC=yes hardcode_shlibpath_var_FC=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_FC=yes hardcode_minus_L_FC=yes hardcode_shlibpath_var_FC=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_FC='-R$libdir' hardcode_direct_FC=yes hardcode_shlibpath_var_FC=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_FC='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_FC='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir' hardcode_libdir_separator_FC=: hardcode_direct_FC=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_FC=yes export_dynamic_flag_spec_FC='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_FC='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir' hardcode_libdir_separator_FC=: hardcode_direct_FC=yes hardcode_direct_absolute_FC=yes export_dynamic_flag_spec_FC='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_FC=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_FC='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir' hardcode_libdir_separator_FC=: case $host_cpu in hppa*64*|ia64*) hardcode_direct_FC=no hardcode_shlibpath_var_FC=no ;; *) hardcode_direct_FC=yes hardcode_direct_absolute_FC=yes export_dynamic_flag_spec_FC='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_FC=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat > conftest.$ac_ext <<_ACEOF subroutine foo end _ACEOF if ac_fn_fc_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc_FC='no' hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_FC=: inherit_rpath_FC=yes link_all_deplibs_FC=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_FC='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_FC='-R$libdir' hardcode_direct_FC=yes hardcode_shlibpath_var_FC=no ;; newsos6) archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_FC=yes hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_FC=: hardcode_shlibpath_var_FC=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_FC=yes hardcode_shlibpath_var_FC=no hardcode_direct_absolute_FC=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir' export_dynamic_flag_spec_FC='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_FC='-R$libdir' ;; *) archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs_FC=no fi ;; os2*) hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_minus_L_FC=yes allow_undefined_flag_FC=unsupported archive_cmds_FC='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds_FC='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_FC=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_FC=' -expect_unresolved \*' archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc_FC='no' hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_FC=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_FC=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_FC='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_FC=' -expect_unresolved \*' archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_FC='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_FC='-rpath $libdir' fi archive_cmds_need_lc_FC='no' hardcode_libdir_separator_FC=: ;; solaris*) no_undefined_flag_FC=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_FC='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds_FC='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds_FC='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec_FC='-R$libdir' hardcode_shlibpath_var_FC=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec_FC='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec_FC='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs_FC=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_FC='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_FC='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_direct_FC=yes hardcode_minus_L_FC=yes hardcode_shlibpath_var_FC=no ;; sysv4) case $host_vendor in sni) archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_FC=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_FC='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_FC='$CC -r -o $output$reload_objs' hardcode_direct_FC=no ;; motorola) archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_FC=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_FC=no ;; sysv4.3*) archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_FC=no export_dynamic_flag_spec_FC='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_FC=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_FC=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_FC='${wl}-z,text' archive_cmds_need_lc_FC=no hardcode_shlibpath_var_FC=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_FC='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_FC='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_FC='${wl}-z,text' allow_undefined_flag_FC='${wl}-z,nodefs' archive_cmds_need_lc_FC=no hardcode_shlibpath_var_FC=no hardcode_libdir_flag_spec_FC='${wl}-R,$libdir' hardcode_libdir_separator_FC=':' link_all_deplibs_FC=yes export_dynamic_flag_spec_FC='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_FC='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_FC='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_shlibpath_var_FC=no ;; *) ld_shlibs_FC=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec_FC='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_FC" >&5 $as_echo "$ld_shlibs_FC" >&6; } test "$ld_shlibs_FC" = no && can_build_shared=no with_gnu_ld_FC=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_FC" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_FC=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_FC in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_FC+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_FC pic_flag=$lt_prog_compiler_pic_FC compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_FC allow_undefined_flag_FC= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_FC=no else lt_cv_archive_cmds_need_lc_FC=yes fi allow_undefined_flag_FC=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_FC" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_FC" >&6; } archive_cmds_need_lc_FC=$lt_cv_archive_cmds_need_lc_FC ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_FC\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_FC\"" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_FC= if test -n "$hardcode_libdir_flag_spec_FC" || test -n "$runpath_var_FC" || test "X$hardcode_automatic_FC" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_FC" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, FC)" != no && test "$hardcode_minus_L_FC" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_FC=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_FC=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_FC=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_FC" >&5 $as_echo "$hardcode_action_FC" >&6; } if test "$hardcode_action_FC" = relink || test "$inherit_rpath_FC" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sorg2l_ in -llapack" >&5 $as_echo_n "checking for sorg2l_ in -llapack... " >&6; } if ${ac_cv_lib_lapack_sorg2l_+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-llapack -lblas -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sorg2l_ (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return sorg2l_ (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lapack_sorg2l_=yes else ac_cv_lib_lapack_sorg2l_=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lapack_sorg2l_" >&5 $as_echo "$ac_cv_lib_lapack_sorg2l_" >&6; } if test "x$ac_cv_lib_lapack_sorg2l_" = xyes; then : lapack="true" else lapack="false" fi fi if test x$FC = xgfortran -a x$lapack = xtrue -a x$with_agmg != xno; then BUILD_AGMG_TRUE= BUILD_AGMG_FALSE='#' else BUILD_AGMG_TRUE='#' BUILD_AGMG_FALSE= fi # Build wavewatch module if wavewatch is installed if test -r $HOME/.wwatch3.env; then BUILD_WAVEWATCH_TRUE= BUILD_WAVEWATCH_FALSE='#' else BUILD_WAVEWATCH_TRUE='#' BUILD_WAVEWATCH_FALSE= fi if test -r $HOME/.wwatch3.env; then ww3_dir=`grep WWATCH3_DIR $HOME/.wwatch3.env | awk '{print $2}'` ww3_version=`grep "WWVER = " $ww3_dir/ftn/*.ftn | \ awk '{print substr($(NF-1),2)}' | \ sed 's/\.//'` W3INIT="w3init$ww3_version" cat >>confdefs.h <<_ACEOF #define WW3_VERSION $ww3_version _ACEOF fi # Build ode module if ODE is installed # Extract the first word of "ode-config", so it can be a program name with args. set dummy ode-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ode+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ode"; then ac_cv_prog_ode="$ode" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ode="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_ode" && ac_cv_prog_ode="no" fi fi ode=$ac_cv_prog_ode if test -n "$ode"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ode" >&5 $as_echo "$ode" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$ode = xyes; then ODE_CFLAGS=`ode-config --cflags` ODE_LIBS="`ode-config --libs` -lstdc++" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ODE not found. ode module will not be available." >&5 $as_echo "$as_me: WARNING: ODE not found. ode module will not be available." >&2;} fi if test x$ode = xyes; then BUILD_ODE_TRUE= BUILD_ODE_FALSE='#' else BUILD_ODE_TRUE='#' BUILD_ODE_FALSE= fi # Build hypre module if HYPRE is installed hypre=no if test "x$use_mpicc" = "xyes" ; then # HYPRE needs MPI { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HYPRE_IJMatrixCreate in -lHYPRE" >&5 $as_echo_n "checking for HYPRE_IJMatrixCreate in -lHYPRE... " >&6; } if ${ac_cv_lib_HYPRE_HYPRE_IJMatrixCreate+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lHYPRE -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char HYPRE_IJMatrixCreate (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return HYPRE_IJMatrixCreate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_HYPRE_HYPRE_IJMatrixCreate=yes else ac_cv_lib_HYPRE_HYPRE_IJMatrixCreate=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_HYPRE_HYPRE_IJMatrixCreate" >&5 $as_echo "$ac_cv_lib_HYPRE_HYPRE_IJMatrixCreate" >&6; } if test "x$ac_cv_lib_HYPRE_HYPRE_IJMatrixCreate" = xyes; then : hypre="yes" else hypre="no" fi if test x$hypre = xyes; then for ac_header in HYPRE.h do : ac_fn_c_check_header_mongrel "$LINENO" "HYPRE.h" "ac_cv_header_HYPRE_h" "$ac_includes_default" if test "x$ac_cv_header_HYPRE_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_HYPRE_H 1 _ACEOF hypre="yes" else hypre="no" fi done fi if test x$hypre = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: HYPRE not found. hypre Module won't be available." >&5 $as_echo "$as_me: WARNING: HYPRE not found. hypre Module won't be available." >&2;} fi fi if test x$hypre = xyes; then BUILD_HYPRE_TRUE= BUILD_HYPRE_FALSE='#' else BUILD_HYPRE_TRUE='#' BUILD_HYPRE_FALSE= fi # Build lis module if lis is installed { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lis_initialize in -llis" >&5 $as_echo_n "checking for lis_initialize in -llis... " >&6; } if ${ac_cv_lib_lis_lis_initialize+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-llis -lgfortran -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char lis_initialize (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return lis_initialize (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lis_lis_initialize=yes else ac_cv_lib_lis_lis_initialize=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lis_lis_initialize" >&5 $as_echo "$ac_cv_lib_lis_lis_initialize" >&6; } if test "x$ac_cv_lib_lis_lis_initialize" = xyes; then : lis="yes" else lis="no" fi if test x$lis = xyes; then for ac_header in lis.h do : ac_fn_c_check_header_mongrel "$LINENO" "lis.h" "ac_cv_header_lis_h" "$ac_includes_default" if test "x$ac_cv_header_lis_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIS_H 1 _ACEOF lis="yes" else lis="no" fi done fi if test x$lis = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: lis not found. lis Module won't be available." >&5 $as_echo "$as_me: WARNING: lis not found. lis Module won't be available." >&2;} fi if test x$lis = xyes; then BUILD_LIS_TRUE= BUILD_LIS_FALSE='#' else BUILD_LIS_TRUE='#' BUILD_LIS_FALSE= fi # Build fft module if fttw3 is installed pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FFTW3" >&5 $as_echo_n "checking for FFTW3... " >&6; } if test -n "$FFTW3_CFLAGS"; then pkg_cv_FFTW3_CFLAGS="$FFTW3_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" fftw3 >= 3 \""; } >&5 ($PKG_CONFIG --exists --print-errors " fftw3 >= 3 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFTW3_CFLAGS=`$PKG_CONFIG --cflags " fftw3 >= 3 " 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFTW3_LIBS"; then pkg_cv_FFTW3_LIBS="$FFTW3_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" fftw3 >= 3 \""; } >&5 ($PKG_CONFIG --exists --print-errors " fftw3 >= 3 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFTW3_LIBS=`$PKG_CONFIG --libs " fftw3 >= 3 " 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFTW3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " fftw3 >= 3 " 2>&1` else FFTW3_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " fftw3 >= 3 " 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFTW3_PKG_ERRORS" >&5 fftw3="no" elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fftw3="no" else FFTW3_CFLAGS=$pkg_cv_FFTW3_CFLAGS FFTW3_LIBS=$pkg_cv_FFTW3_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fftw3="yes" fi if test x$fftw3 = xyes; then HAS_FFTW3_TRUE= HAS_FFTW3_FALSE='#' else HAS_FFTW3_TRUE='#' HAS_FFTW3_FALSE= fi # header file checks for ac_header in fenv.h do : ac_fn_c_check_header_mongrel "$LINENO" "fenv.h" "ac_cv_header_fenv_h" "$ac_includes_default" if test "x$ac_cv_header_fenv_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FENV_H 1 _ACEOF $as_echo "#define HAVE_FENV_H 1" >>confdefs.h fi done for ac_header in unistd.h do : ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UNISTD_H 1 _ACEOF $as_echo "#define HAVE_UNISTD_H 1" >>confdefs.h fi done for ac_header in getopt.h do : ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_H 1 _ACEOF $as_echo "#define HAVE_GETOPT_H 1" >>confdefs.h fi done # functions checks OLD_CFLAGS=$CFLAGS CFLAGS=$GTS_CFLAGS OLD_LIBS=$LIBS LIBS=$GTS_LIBS for ac_func in getopt_long g_mkdtemp open_memstream funopen do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done CFLAGS=$OLD_CFLAGS LIBS=$OLD_LIBS # use alternative implementation of open_memstream() if the system # (e.g. MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8.) does not # support POSIX 2008 natively ac_fn_c_check_func "$LINENO" "open_memstream" "ac_cv_func_open_memstream" if test "x$ac_cv_func_open_memstream" = xyes; then : have_open_memstream=yes else have_open_memstream=no fi if test x$have_open_memstream = xno; then OPEN_MEMSTREAM_TRUE= OPEN_MEMSTREAM_FALSE='#' else OPEN_MEMSTREAM_TRUE='#' OPEN_MEMSTREAM_FALSE= fi # link flags GFS2D_LIBS="\$(top_builddir)/src/libgfs2D.la $GTS_LIBS" GFS3D_LIBS="\$(top_builddir)/src/libgfs3D.la $GTS_LIBS" # check whether the code is under darcs if test -d _darcs; then DARCS_CONTROLLED_TRUE= DARCS_CONTROLLED_FALSE='#' else DARCS_CONTROLLED_TRUE='#' DARCS_CONTROLLED_FALSE= fi ac_config_files="$ac_config_files Makefile src/Makefile src/gerris2D.pc src/gerris3D.pc tools/Makefile modules/Makefile modules/RStarTree/Makefile modules/kdt/Makefile modules/fes2004/Makefile modules/wavewatch/Makefile modules/culvert/Makefile test/Makefile doc/Makefile doc/tutorial/Makefile doc/examples/Makefile doc/manpages/Makefile doc/examples/gfs2doc doc/examples/gfs-highlight doc/examples/crossref.sh desktop/Makefile debian/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAS_LIBPROJ_TRUE}" && test -z "${HAS_LIBPROJ_FALSE}"; then as_fn_error $? "conditional \"HAS_LIBPROJ\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAS_GSL_TRUE}" && test -z "${HAS_GSL_FALSE}"; then as_fn_error $? "conditional \"HAS_GSL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAS_NETCDF_TRUE}" && test -z "${HAS_NETCDF_FALSE}"; then as_fn_error $? "conditional \"HAS_NETCDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_TIDE_TRUE}" && test -z "${BUILD_TIDE_FALSE}"; then as_fn_error $? "conditional \"BUILD_TIDE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_STOKES_TRUE}" && test -z "${BUILD_STOKES_FALSE}"; then as_fn_error $? "conditional \"BUILD_STOKES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_AGMG_TRUE}" && test -z "${BUILD_AGMG_FALSE}"; then as_fn_error $? "conditional \"BUILD_AGMG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_WAVEWATCH_TRUE}" && test -z "${BUILD_WAVEWATCH_FALSE}"; then as_fn_error $? "conditional \"BUILD_WAVEWATCH\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_ODE_TRUE}" && test -z "${BUILD_ODE_FALSE}"; then as_fn_error $? "conditional \"BUILD_ODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_HYPRE_TRUE}" && test -z "${BUILD_HYPRE_FALSE}"; then as_fn_error $? "conditional \"BUILD_HYPRE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_LIS_TRUE}" && test -z "${BUILD_LIS_FALSE}"; then as_fn_error $? "conditional \"BUILD_LIS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAS_FFTW3_TRUE}" && test -z "${HAS_FFTW3_FALSE}"; then as_fn_error $? "conditional \"HAS_FFTW3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPEN_MEMSTREAM_TRUE}" && test -z "${OPEN_MEMSTREAM_FALSE}"; then as_fn_error $? "conditional \"OPEN_MEMSTREAM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DARCS_CONTROLLED_TRUE}" && test -z "${DARCS_CONTROLLED_FALSE}"; then as_fn_error $? "conditional \"DARCS_CONTROLLED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_F77='`$ECHO "$LD_F77" | $SED "$delay_single_quote_subst"`' LD_FC='`$ECHO "$LD_FC" | $SED "$delay_single_quote_subst"`' reload_flag_F77='`$ECHO "$reload_flag_F77" | $SED "$delay_single_quote_subst"`' reload_flag_FC='`$ECHO "$reload_flag_FC" | $SED "$delay_single_quote_subst"`' reload_cmds_F77='`$ECHO "$reload_cmds_F77" | $SED "$delay_single_quote_subst"`' reload_cmds_FC='`$ECHO "$reload_cmds_FC" | $SED "$delay_single_quote_subst"`' old_archive_cmds_F77='`$ECHO "$old_archive_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_cmds_FC='`$ECHO "$old_archive_cmds_FC" | $SED "$delay_single_quote_subst"`' compiler_F77='`$ECHO "$compiler_F77" | $SED "$delay_single_quote_subst"`' compiler_FC='`$ECHO "$compiler_FC" | $SED "$delay_single_quote_subst"`' GCC_F77='`$ECHO "$GCC_F77" | $SED "$delay_single_quote_subst"`' GCC_FC='`$ECHO "$GCC_FC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_F77='`$ECHO "$lt_prog_compiler_no_builtin_flag_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_FC='`$ECHO "$lt_prog_compiler_no_builtin_flag_FC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_F77='`$ECHO "$lt_prog_compiler_pic_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_FC='`$ECHO "$lt_prog_compiler_pic_FC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_F77='`$ECHO "$lt_prog_compiler_wl_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_FC='`$ECHO "$lt_prog_compiler_wl_FC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_F77='`$ECHO "$lt_prog_compiler_static_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_FC='`$ECHO "$lt_prog_compiler_static_FC" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_F77='`$ECHO "$lt_cv_prog_compiler_c_o_F77" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_FC='`$ECHO "$lt_cv_prog_compiler_c_o_FC" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_F77='`$ECHO "$archive_cmds_need_lc_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_FC='`$ECHO "$archive_cmds_need_lc_FC" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_F77='`$ECHO "$enable_shared_with_static_runtimes_F77" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_FC='`$ECHO "$enable_shared_with_static_runtimes_FC" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_F77='`$ECHO "$export_dynamic_flag_spec_F77" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_FC='`$ECHO "$export_dynamic_flag_spec_FC" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_F77='`$ECHO "$whole_archive_flag_spec_F77" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_FC='`$ECHO "$whole_archive_flag_spec_FC" | $SED "$delay_single_quote_subst"`' compiler_needs_object_F77='`$ECHO "$compiler_needs_object_F77" | $SED "$delay_single_quote_subst"`' compiler_needs_object_FC='`$ECHO "$compiler_needs_object_FC" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_F77='`$ECHO "$old_archive_from_new_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_FC='`$ECHO "$old_archive_from_new_cmds_FC" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_F77='`$ECHO "$old_archive_from_expsyms_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_FC='`$ECHO "$old_archive_from_expsyms_cmds_FC" | $SED "$delay_single_quote_subst"`' archive_cmds_F77='`$ECHO "$archive_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_FC='`$ECHO "$archive_cmds_FC" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_F77='`$ECHO "$archive_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_FC='`$ECHO "$archive_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`' module_cmds_F77='`$ECHO "$module_cmds_F77" | $SED "$delay_single_quote_subst"`' module_cmds_FC='`$ECHO "$module_cmds_FC" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_F77='`$ECHO "$module_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_FC='`$ECHO "$module_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`' with_gnu_ld_F77='`$ECHO "$with_gnu_ld_F77" | $SED "$delay_single_quote_subst"`' with_gnu_ld_FC='`$ECHO "$with_gnu_ld_FC" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_F77='`$ECHO "$allow_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_FC='`$ECHO "$allow_undefined_flag_FC" | $SED "$delay_single_quote_subst"`' no_undefined_flag_F77='`$ECHO "$no_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' no_undefined_flag_FC='`$ECHO "$no_undefined_flag_FC" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_F77='`$ECHO "$hardcode_libdir_flag_spec_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_FC='`$ECHO "$hardcode_libdir_flag_spec_FC" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_F77='`$ECHO "$hardcode_libdir_separator_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_FC='`$ECHO "$hardcode_libdir_separator_FC" | $SED "$delay_single_quote_subst"`' hardcode_direct_F77='`$ECHO "$hardcode_direct_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_FC='`$ECHO "$hardcode_direct_FC" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_F77='`$ECHO "$hardcode_direct_absolute_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_FC='`$ECHO "$hardcode_direct_absolute_FC" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_F77='`$ECHO "$hardcode_minus_L_F77" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_FC='`$ECHO "$hardcode_minus_L_FC" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_F77='`$ECHO "$hardcode_shlibpath_var_F77" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_FC='`$ECHO "$hardcode_shlibpath_var_FC" | $SED "$delay_single_quote_subst"`' hardcode_automatic_F77='`$ECHO "$hardcode_automatic_F77" | $SED "$delay_single_quote_subst"`' hardcode_automatic_FC='`$ECHO "$hardcode_automatic_FC" | $SED "$delay_single_quote_subst"`' inherit_rpath_F77='`$ECHO "$inherit_rpath_F77" | $SED "$delay_single_quote_subst"`' inherit_rpath_FC='`$ECHO "$inherit_rpath_FC" | $SED "$delay_single_quote_subst"`' link_all_deplibs_F77='`$ECHO "$link_all_deplibs_F77" | $SED "$delay_single_quote_subst"`' link_all_deplibs_FC='`$ECHO "$link_all_deplibs_FC" | $SED "$delay_single_quote_subst"`' always_export_symbols_F77='`$ECHO "$always_export_symbols_F77" | $SED "$delay_single_quote_subst"`' always_export_symbols_FC='`$ECHO "$always_export_symbols_FC" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_F77='`$ECHO "$export_symbols_cmds_F77" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_FC='`$ECHO "$export_symbols_cmds_FC" | $SED "$delay_single_quote_subst"`' exclude_expsyms_F77='`$ECHO "$exclude_expsyms_F77" | $SED "$delay_single_quote_subst"`' exclude_expsyms_FC='`$ECHO "$exclude_expsyms_FC" | $SED "$delay_single_quote_subst"`' include_expsyms_F77='`$ECHO "$include_expsyms_F77" | $SED "$delay_single_quote_subst"`' include_expsyms_FC='`$ECHO "$include_expsyms_FC" | $SED "$delay_single_quote_subst"`' prelink_cmds_F77='`$ECHO "$prelink_cmds_F77" | $SED "$delay_single_quote_subst"`' prelink_cmds_FC='`$ECHO "$prelink_cmds_FC" | $SED "$delay_single_quote_subst"`' postlink_cmds_F77='`$ECHO "$postlink_cmds_F77" | $SED "$delay_single_quote_subst"`' postlink_cmds_FC='`$ECHO "$postlink_cmds_FC" | $SED "$delay_single_quote_subst"`' file_list_spec_F77='`$ECHO "$file_list_spec_F77" | $SED "$delay_single_quote_subst"`' file_list_spec_FC='`$ECHO "$file_list_spec_FC" | $SED "$delay_single_quote_subst"`' hardcode_action_F77='`$ECHO "$hardcode_action_F77" | $SED "$delay_single_quote_subst"`' hardcode_action_FC='`$ECHO "$hardcode_action_FC" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_F77='`$ECHO "$compiler_lib_search_dirs_F77" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_FC='`$ECHO "$compiler_lib_search_dirs_FC" | $SED "$delay_single_quote_subst"`' predep_objects_F77='`$ECHO "$predep_objects_F77" | $SED "$delay_single_quote_subst"`' predep_objects_FC='`$ECHO "$predep_objects_FC" | $SED "$delay_single_quote_subst"`' postdep_objects_F77='`$ECHO "$postdep_objects_F77" | $SED "$delay_single_quote_subst"`' postdep_objects_FC='`$ECHO "$postdep_objects_FC" | $SED "$delay_single_quote_subst"`' predeps_F77='`$ECHO "$predeps_F77" | $SED "$delay_single_quote_subst"`' predeps_FC='`$ECHO "$predeps_FC" | $SED "$delay_single_quote_subst"`' postdeps_F77='`$ECHO "$postdeps_F77" | $SED "$delay_single_quote_subst"`' postdeps_FC='`$ECHO "$postdeps_FC" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_F77='`$ECHO "$compiler_lib_search_path_F77" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_FC='`$ECHO "$compiler_lib_search_path_FC" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in AS \ DLLTOOL \ OBJDUMP \ SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_F77 \ LD_FC \ reload_flag_F77 \ reload_flag_FC \ compiler_F77 \ compiler_FC \ lt_prog_compiler_no_builtin_flag_F77 \ lt_prog_compiler_no_builtin_flag_FC \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_pic_FC \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_wl_FC \ lt_prog_compiler_static_F77 \ lt_prog_compiler_static_FC \ lt_cv_prog_compiler_c_o_F77 \ lt_cv_prog_compiler_c_o_FC \ export_dynamic_flag_spec_F77 \ export_dynamic_flag_spec_FC \ whole_archive_flag_spec_F77 \ whole_archive_flag_spec_FC \ compiler_needs_object_F77 \ compiler_needs_object_FC \ with_gnu_ld_F77 \ with_gnu_ld_FC \ allow_undefined_flag_F77 \ allow_undefined_flag_FC \ no_undefined_flag_F77 \ no_undefined_flag_FC \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_FC \ hardcode_libdir_separator_F77 \ hardcode_libdir_separator_FC \ exclude_expsyms_F77 \ exclude_expsyms_FC \ include_expsyms_F77 \ include_expsyms_FC \ file_list_spec_F77 \ file_list_spec_FC \ compiler_lib_search_dirs_F77 \ compiler_lib_search_dirs_FC \ predep_objects_F77 \ predep_objects_FC \ postdep_objects_F77 \ postdep_objects_FC \ predeps_F77 \ predeps_FC \ postdeps_F77 \ postdeps_FC \ compiler_lib_search_path_F77 \ compiler_lib_search_path_FC; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_F77 \ reload_cmds_FC \ old_archive_cmds_F77 \ old_archive_cmds_FC \ old_archive_from_new_cmds_F77 \ old_archive_from_new_cmds_FC \ old_archive_from_expsyms_cmds_F77 \ old_archive_from_expsyms_cmds_FC \ archive_cmds_F77 \ archive_cmds_FC \ archive_expsym_cmds_F77 \ archive_expsym_cmds_FC \ module_cmds_F77 \ module_cmds_FC \ module_expsym_cmds_F77 \ module_expsym_cmds_FC \ export_symbols_cmds_F77 \ export_symbols_cmds_FC \ prelink_cmds_F77 \ prelink_cmds_FC \ postlink_cmds_F77 \ postlink_cmds_FC; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/gerris2D.pc") CONFIG_FILES="$CONFIG_FILES src/gerris2D.pc" ;; "src/gerris3D.pc") CONFIG_FILES="$CONFIG_FILES src/gerris3D.pc" ;; "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; "modules/Makefile") CONFIG_FILES="$CONFIG_FILES modules/Makefile" ;; "modules/RStarTree/Makefile") CONFIG_FILES="$CONFIG_FILES modules/RStarTree/Makefile" ;; "modules/kdt/Makefile") CONFIG_FILES="$CONFIG_FILES modules/kdt/Makefile" ;; "modules/fes2004/Makefile") CONFIG_FILES="$CONFIG_FILES modules/fes2004/Makefile" ;; "modules/wavewatch/Makefile") CONFIG_FILES="$CONFIG_FILES modules/wavewatch/Makefile" ;; "modules/culvert/Makefile") CONFIG_FILES="$CONFIG_FILES modules/culvert/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/tutorial/Makefile") CONFIG_FILES="$CONFIG_FILES doc/tutorial/Makefile" ;; "doc/examples/Makefile") CONFIG_FILES="$CONFIG_FILES doc/examples/Makefile" ;; "doc/manpages/Makefile") CONFIG_FILES="$CONFIG_FILES doc/manpages/Makefile" ;; "doc/examples/gfs2doc") CONFIG_FILES="$CONFIG_FILES doc/examples/gfs2doc" ;; "doc/examples/gfs-highlight") CONFIG_FILES="$CONFIG_FILES doc/examples/gfs-highlight" ;; "doc/examples/crossref.sh") CONFIG_FILES="$CONFIG_FILES doc/examples/crossref.sh" ;; "desktop/Makefile") CONFIG_FILES="$CONFIG_FILES desktop/Makefile" ;; "debian/Makefile") CONFIG_FILES="$CONFIG_FILES debian/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="F77 FC " # ### BEGIN LIBTOOL CONFIG # Assembler program. AS=$lt_AS # DLL creation program. DLLTOOL=$lt_DLLTOOL # Object dumper program. OBJDUMP=$lt_OBJDUMP # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: F77 # The linker used to build libraries. LD=$lt_LD_F77 # How to create reloadable object files. reload_flag=$lt_reload_flag_F77 reload_cmds=$lt_reload_cmds_F77 # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_F77 # A language specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU compiler? with_gcc=$GCC_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_F77 # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_F77 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_F77 # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_F77 # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_F77 # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_F77 # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_F77 # Specify filename containing input files. file_list_spec=$lt_file_list_spec_F77 # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_F77 # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_F77 postdep_objects=$lt_postdep_objects_F77 predeps=$lt_predeps_F77 postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # ### END LIBTOOL TAG CONFIG: F77 _LT_EOF cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: FC # The linker used to build libraries. LD=$lt_LD_FC # How to create reloadable object files. reload_flag=$lt_reload_flag_FC reload_cmds=$lt_reload_cmds_FC # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_FC # A language specific compiler. CC=$lt_compiler_FC # Is the compiler the GNU compiler? with_gcc=$GCC_FC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_FC # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_FC # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_FC # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_FC # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_FC # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_FC # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_FC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_FC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_FC # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_FC # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_FC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_FC # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_FC archive_expsym_cmds=$lt_archive_expsym_cmds_FC # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_FC module_expsym_cmds=$lt_module_expsym_cmds_FC # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_FC # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_FC # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_FC # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_FC # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_FC # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_FC # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_FC # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_FC # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_FC # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_FC # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_FC # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_FC # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_FC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_FC # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_FC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_FC # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_FC # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_FC # Specify filename containing input files. file_list_spec=$lt_file_list_spec_FC # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_FC # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_FC # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_FC postdep_objects=$lt_postdep_objects_FC predeps=$lt_predeps_FC postdeps=$lt_postdeps_FC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_FC # ### END LIBTOOL TAG CONFIG: FC _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo echo "Configuration summary" echo echo " System = $build" echo " C Compiler = $CC" echo " C Flags = $CFLAGS" echo " MPI enabled = $use_mpicc" echo " GModule support = $have_gmodule" echo " pkg-config = $have_pkg_config" echo " m4 = $have_m4" if test x$have_m4 = xyes; then echo " m4 options = $options_m4" fi echo " open_memstream = $have_open_memstream" echo echo "Modules" echo echo " map = $proj" echo " tide = $tide" if test x$F77 != x; then echo " stokes = yes" else echo " stokes = no" fi if test -r $HOME/.wwatch3.env; then echo " wavewatch = yes" echo " wavewatch version = $ww3_version" else echo " wavewatch = no" fi echo " hypre = $hypre" echo " lis = $lis" if test x$FC = xgfortran -a x$lapack = xtrue -a x$with_agmg != xno; then echo " agmg = yes" else echo " agmg = no" fi echo " ode = $ode" if test x$no_gsl != xyes; then echo " bubbles = yes" else echo " bubbles = no" fi if test x$fftw3 != xno; then echo " fft = yes" else echo " fft = no" fi echo gerris-snapshot-131206/depcomp0000755000175100017510000005064312250371206013246 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gerris-snapshot-131206/test/0000755000175100017510000000000012250371672012727 500000000000000gerris-snapshot-131206/test/capwave.sh0000755000175100017510000000003212250371662014626 00000000000000python -u test.py capwave gerris-snapshot-131206/test/hexagon.sh0000755000175100017510000000003212250371662014631 00000000000000python -u test.py hexagon gerris-snapshot-131206/test/template.tex0000644000175100017510000000611112250371172015176 00000000000000\documentclass[a4paper]{article} \usepackage{hevea} \usepackage[usenames]{color} \usepackage{graphicx} \usepackage{gfs} \oddsidemargin=4mm \evensidemargin=-1mm \topmargin=-7mm \textwidth=15.42cm \textheight=23.2cm \renewcommand{\cuttingunit}{subsection} \title{Gerris test suite} \begin{document} \mbox{}\vspace{1cm} \begin{center} {\huge Gerris Tests}\\ \vspace{1cm} \input{summary.tex} \vspace{5mm} \end{center} \section{Introduction} This document is automatically generated from the results obtained when running the Gerris test suite. The test suite is run daily on the development branch of the version-controlled source code. Note that the stable branch (from which snapshot versions and packages are generated) is only updated when all of the tests succeed i.e. the status of the test cases below reflects the state of the development branch only. \section{Poisson} \test{poisson} \test{poisson/circle} \test{poisson/dirichlet} \test{circle} \test{circle/star} \test{circle/refined} \test{circle/thin} \test{dumbell} \section{Advection and diffusion} \test{advection} \test{shear} \test{shear/curvature} \test{shear/concentration} \test{rotate} \test{diffusion} \test{diffusion/concentration} \test{conservation} \section{Euler} \test{reynolds} \test{reynolds/box} \test{reynolds/stream} \test{reynolds/skew} \test{reynolds/skewbox} \test{periodic} \test{merging} \test{source} \section{Axisymmetric} \test{axi} \test{axi/viscous} \test{axiadvection} \test{axiadvection/solid} \test{swirl} \section{Navier-Stokes} \test{lid} \test{lid/explicit} \test{lid/stretch} \test{lid/metric} \test{poiseuille} \test{poiseuille/metric} \test{poiseuille/river} \test{poiseuille/bagnold} \test{couette} \test{kinetic} \test{hydrostatic} \test{hydrostatic/quadratic} \test{coriolis} \test{lake} \test{lake/river} \test{lake/stratified} \section{Solid boundaries} \test{boundaries} \test{channel} \test{plate} \section{Moving solid boundaries} \test{hexagon} \test{strouhal} \section{Surface tension} \test{spurious} \test{spurious/axi} \test{capwave} \test{capwave/density} \test{capwave/air-water} \test{capwave/gravity} \test{oscillation} \test{height} \test{plateau} \section{Contact lines} \test{sessile} \section{Shallow-water} \test{geo} \test{geo/beta} \test{geo/river} \test{nonlinear} \test{waves} \test{waves/adaptive} \test{nz} \section{Saint-Venant} \test{parabola} \test{parabola/solid} \test{shock} \test{shock/layered} \test{shore} \test{still} \test{still/bipolar} \test{terrain} \section{General Orthogonal Coordinates} \test{lonlat} \test{lonlat/cubed} \test{lonlat/coriolis} \test{cosine} \test{harmonic} \test{harmonic/lonlat} \test{gaussian} \test{gaussian/lonlat} \test{annulus} \test{wannier} \test{wannier/bipolar} \test{wannier/stretch} \test{rossby} \test{rossby/ocean} \test{rossby/river} \test{injectionaxi} \section{Electrohydrodynamics} \test{planar} \test{planar/solid} \test{bump} \test{cylinder} \test{cylinder/planar} \test{electro} \test{debye} \section{Groundwater} \test{groundwater} \test{groundwater/piecewise} \bibliographystyle{plain} \bibliography{gerris} \end{document} gerris-snapshot-131206/test/coriolis.sh0000755000175100017510000000003312250371662015024 00000000000000python -u test.py coriolis gerris-snapshot-131206/test/hydrostatic/0000755000175100017510000000000012250371673015265 500000000000000gerris-snapshot-131206/test/hydrostatic/hydrostatic.gfs0000644000175100017510000000151512250371171020236 00000000000000# Title: Hydrostatic balance with solid boundaries and viscosity # # Description: # # Checks that hydrostatic balance is accurately computed when coupled # with the Crank-Nicholson discretisation of viscous terms. # # Author: St\'ephane Popinet # Command: gerris2D hydrostatic.gfs # Version: 1.1.3 # Required files: 1 0 GfsSimulation GfsBox GfsGEdge {} { Refine 3 Source V -1 SourceViscosity 1e-2 Solid (ellipse(0.,0.,0.24,0.24)) Time { iend = 10 } ApproxProjectionParams { tolerance = 1e-12 } ProjectionParams { tolerance = 1e-12 } OutputScalarNorm { istep = 1 } v { v = V } EventScript { start = end } { if awk '{if ($9 > 1.5e-12) { print $9 > "/dev/stderr"; exit (1); }}' < v ; then exit 0; else exit $GFS_STOP; fi } } GfsBox { bottom = Boundary } gerris-snapshot-131206/test/hydrostatic/quadratic/0000755000175100017510000000000012250371673017242 500000000000000gerris-snapshot-131206/test/hydrostatic/quadratic/quadratic.gfs0000644000175100017510000000247512250371171021641 00000000000000# Title: Hydrostatic balance with quadratic pressure profile # # Description: # # Same test as before but for a quadratic pressure profile. # # Author: St\'ephane Popinet # Command: gerris2D quadratic.gfs # Version: 1.2.0 # Required files: quadratic.gfs 1 0 GfsSimulation GfsBox GfsGEdge {} { Refine 3 # This test case only works for constant refinement # Refine (x*x + y*y < 0.2*0.2 ? 4 : 3) # Note: it is important to use 'cy' rather than 'y' in the formula # below so that the hydrostatic density distribution is correct # even for 'cut cells' Init {} { rho = (cy + 0.5) } Source V -rho SourceViscosity 1e-2 Solid (ellipse(0.,0.,0.24,0.24)) Time { iend = 10 } ApproxProjectionParams { tolerance = 1e-12 } ProjectionParams { tolerance = 1e-12 } OutputScalarNorm { istep = 1 } v { v = V } # Checks that the pressure profile is close to the exact solution OutputErrorNorm { istep = 1 } p { v = P } { s = -(cy*cy/2. + 0.5*cy) unbiased = 1 } EventScript { start = end } { if awk '{if ($9 > 1.5e-12) exit (1);}' < v ; then : else exit $GFS_STOP; fi if awk '{if ($9 > 1e-12) exit (1);}' < p ; then : else exit $GFS_STOP; fi } } GfsBox { bottom = Boundary } gerris-snapshot-131206/test/poisson.sh0000755000175100017510000000003212250371662014672 00000000000000python -u test.py poisson gerris-snapshot-131206/test/conservation/0000755000175100017510000000000012250371673015442 500000000000000gerris-snapshot-131206/test/conservation/conservation.gfs0000644000175100017510000000316412250371171020572 00000000000000# Title: Conservation of diffusive tracer # # Description: # # Tests that the total amount of a diffusive tracer is conserved # exactly on adaptive meshes. Also compares solutions obtained using # the implicit and explicit schemes. # # Author: St\'ephane Popinet and Ye Tao # Command: gerris3D conservation.gfs # Version: 110131 # Required files: # 1 0 GfsSimulation GfsBox GfsGEdge {} { Time { iend = 100 dtmax = 2e-1 } Refine 3 VariableTracer T VariableTracer Te InitFraction T (0.01 - (x*x + y*y + z*z)) InitFraction Te (0.01 - (x*x + y*y + z*z)) SourceDiffusion T 1e-4 { beta = 0.5 } SourceDiffusionExplicit Te 1e-4 AdaptGradient { istep = 1 } { minlevel = 3 maxlevel = 5 cmax = 1e-2 } T OutputScalarSum { istep = 1 } st { v = T } OutputScalarSum { istep = 1 } ste { v = T } OutputScalarStats { istep = 1 } t { v = T } OutputScalarStats { istep = 1 } te { v = T } OutputScalarNorm { istep = 1 } diff { v = (T - Te) } EventScript { start = end } { if awk '{if ($9 > 8e-3) { print "diff: " $9 > "/dev/stderr"; exit (1); }}' < diff && awk 'BEGIN{ s=-1 } { if (s < 0.) s = $5; else if ($5 - s != 0.) { print "st: " $5 - s > "/dev/stderr"; exit (1); } }' < st && awk 'BEGIN{ s=-1 } { if (s < 0.) s = $5; else if ($5 - s != 0.) { print "ste: " $5 - s > "/dev/stderr"; exit (1); } }' < ste ; then : else exit $GFS_STOP; fi } } GfsBox{} gerris-snapshot-131206/test/gaussian.sh0000755000175100017510000000003312250371662015013 00000000000000python -u test.py gaussian gerris-snapshot-131206/test/wannier.sh0000755000175100017510000000003212250371662014643 00000000000000python -u test.py wannier gerris-snapshot-131206/test/bump/0000755000175100017510000000000012250371674013674 500000000000000gerris-snapshot-131206/test/bump/bump.gfs0000644000175100017510000000677312250371171015265 00000000000000# Title: Relaxation of a charge bump # # Description: # # A concentrated bump of charge of the form, # $$ # \rho_e(x,t=0)=\frac{\exp{-\frac{x^2+y^2}{2a^2}}}{a \sqrt{2 \pi}} # $$ # is initially set in a single fluid of conductivity $K$ and # permittivity $\varepsilon$. Due to conduction the bump decays # exponentially in time (see figure \ref{decay}) as # $$ # \rho_e(x,t)=\rho_e(x,t=0) \exp{(-K t/\varepsilon)} \label{td} # $$ # while preserving the initial geometry (see figure \ref{profile}). # # A more detailed discussion of this simulation is given in # \cite{lopez-herrera2011}. # # \begin{figure}[htbp] # \caption{\label{decay} Temporal decay of the charge density at # (0,0). (Continuous) analytical solution, (symbols) # Gerris EHD module.} # \begin{center} # \includegraphics[width=0.8\hsize]{profile.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{profile} Spatial distribution of charge density # along the radial axis (times equal 0, 2, 4 and 6 are shown). (continuous) # analytical solution, (symbols) present simulation.} # \begin{center} # \includegraphics[width=0.8\hsize]{figure.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{norms}Evolution of the norms of the error on the charge density # distribution shown in figure \ref{profile}.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # Author: Jose M. L\'opez-Herrera S\'anchez # Command: sh bump.sh # Version: 100610 # Required files: bump.sh norms-explicit.ref norms-implicit.ref # Running time: 30 seconds # Generated files: profile.eps figure.eps error.eps GModule electrohydro 1 0 GfsElectroHydro GfsBox GfsGEdge {} { Global { #define a 0.05 #define perm 2.0 #define K 1.0 double gaussbell (double x, double y, double t) { double alpha = (x*x + y*y)/2./a/a; double beta = a*sqrt(2.*M_PI); double te = perm/K; return exp(-alpha)/beta*exp(-t/te); } } VariableTracer Rhoe Refine 7*(1. - 4.*(x*x + y*y)) Time { end = 6 dtmax = 1e-2 } Init {} { Rhoe = gaussbell(x,y,0) } # OutputTime { istep = 5 } stderr # OutputScalarNorm { istep = 5 } stderr { v = Rhoe } SourceDiffusionExplicit Rhoe 1 Phi # SourceDiffusion Rhoe 1 { beta = 0.5 } Phi OutputSimulation { start = 0 } { awk '{ if ($1 != "#") print sqrt($1*$1+$2*$2),$11 > "t_0-SCHEME"; }' } { format = text } OutputSimulation { start = 2 } { awk '{ if ($1 != "#") print sqrt($1*$1+$2*$2),$11 > "t_2-SCHEME"; }' } { format = text } OutputSimulation { start = 4 } { awk '{ if ($1 != "#") print sqrt($1*$1+$2*$2),$11 > "t_4-SCHEME"; }' } { format = text } OutputSimulation { start = 6 } { awk '{ if ($1 != "#") print sqrt($1*$1+$2*$2),$11 > "t_6-SCHEME"; }' } { format = text } OutputErrorNorm { istep = 10 } norms-SCHEME { v = Rhoe } { s = gaussbell(x,y,t) } OutputLocation { istep = 10 } { awk ' BEGIN { a = 0.05 perm = 2. K = 1. rhoinic = 1./a/sqrt(2.*3.14159265358979) } { if ($1 != "#") print $1, rhoinic*exp(-$1*K/perm), $12; }' > timevol-SCHEME } { 0. 0. 0. } } { # Electric parameters perm = 2 charge = Rhoe GfsElectricProjectionParams { tolerance = 1e-7 } } GfsBox { left = Boundary { BcDirichlet Phi 0 } right = Boundary { BcDirichlet Phi 0 } top = Boundary { BcDirichlet Phi 0 } bottom = Boundary { BcDirichlet Phi 0 } } gerris-snapshot-131206/test/bump/norms-explicit.ref0000644000175100017510000001254212250371171017263 00000000000000Rhoe time: 0 first: 0.000e+00 second: 0.000e+00 infty: 0.000e+00 bias: 0.000e+00 Rhoe time: 0.0995025 first: 1.481e-05 second: 8.354e-05 infty: 9.369e-04 bias: -1.481e-05 Rhoe time: 0.199005 first: 2.817e-05 second: 1.590e-04 infty: 1.783e-03 bias: -2.817e-05 Rhoe time: 0.298507 first: 4.021e-05 second: 2.268e-04 infty: 2.544e-03 bias: -4.021e-05 Rhoe time: 0.39801 first: 5.100e-05 second: 2.878e-04 infty: 3.227e-03 bias: -5.100e-05 Rhoe time: 0.497512 first: 6.066e-05 second: 3.422e-04 infty: 3.838e-03 bias: -6.066e-05 Rhoe time: 0.597015 first: 6.925e-05 second: 3.907e-04 infty: 4.382e-03 bias: -6.925e-05 Rhoe time: 0.696517 first: 7.687e-05 second: 4.337e-04 infty: 4.864e-03 bias: -7.687e-05 Rhoe time: 0.79602 first: 8.358e-05 second: 4.715e-04 infty: 5.288e-03 bias: -8.358e-05 Rhoe time: 0.895522 first: 8.946e-05 second: 5.047e-04 infty: 5.660e-03 bias: -8.946e-05 Rhoe time: 0.995025 first: 9.456e-05 second: 5.335e-04 infty: 5.984e-03 bias: -9.456e-05 Rhoe time: 1.09453 first: 9.897e-05 second: 5.584e-04 infty: 6.262e-03 bias: -9.897e-05 Rhoe time: 1.19403 first: 1.027e-04 second: 5.795e-04 infty: 6.500e-03 bias: -1.027e-04 Rhoe time: 1.29353 first: 1.059e-04 second: 5.973e-04 infty: 6.699e-03 bias: -1.059e-04 Rhoe time: 1.39303 first: 1.085e-04 second: 6.120e-04 infty: 6.864e-03 bias: -1.085e-04 Rhoe time: 1.49254 first: 1.106e-04 second: 6.239e-04 infty: 6.997e-03 bias: -1.106e-04 Rhoe time: 1.59204 first: 1.122e-04 second: 6.331e-04 infty: 7.101e-03 bias: -1.122e-04 Rhoe time: 1.69154 first: 1.134e-04 second: 6.400e-04 infty: 7.178e-03 bias: -1.134e-04 Rhoe time: 1.79104 first: 1.143e-04 second: 6.447e-04 infty: 7.231e-03 bias: -1.143e-04 Rhoe time: 1.89055 first: 1.148e-04 second: 6.475e-04 infty: 7.261e-03 bias: -1.148e-04 Rhoe time: 1.99005 first: 1.149e-04 second: 6.484e-04 infty: 7.272e-03 bias: -1.149e-04 Rhoe time: 2.0896 first: 1.148e-04 second: 6.478e-04 infty: 7.265e-03 bias: -1.148e-04 Rhoe time: 2.1891 first: 1.144e-04 second: 6.456e-04 infty: 7.241e-03 bias: -1.144e-04 Rhoe time: 2.2886 first: 1.138e-04 second: 6.422e-04 infty: 7.202e-03 bias: -1.138e-04 Rhoe time: 2.3881 first: 1.130e-04 second: 6.375e-04 infty: 7.150e-03 bias: -1.130e-04 Rhoe time: 2.4876 first: 1.120e-04 second: 6.318e-04 infty: 7.086e-03 bias: -1.120e-04 Rhoe time: 2.5871 first: 1.108e-04 second: 6.252e-04 infty: 7.011e-03 bias: -1.108e-04 Rhoe time: 2.6866 first: 1.095e-04 second: 6.177e-04 infty: 6.927e-03 bias: -1.095e-04 Rhoe time: 2.7861 first: 1.080e-04 second: 6.094e-04 infty: 6.835e-03 bias: -1.080e-04 Rhoe time: 2.8856 first: 1.064e-04 second: 6.005e-04 infty: 6.735e-03 bias: -1.064e-04 Rhoe time: 2.9851 first: 1.048e-04 second: 5.910e-04 infty: 6.628e-03 bias: -1.048e-04 Rhoe time: 3.0846 first: 1.030e-04 second: 5.810e-04 infty: 6.517e-03 bias: -1.030e-04 Rhoe time: 3.1841 first: 1.011e-04 second: 5.706e-04 infty: 6.400e-03 bias: -1.011e-04 Rhoe time: 3.2836 first: 9.923e-05 second: 5.599e-04 infty: 6.279e-03 bias: -9.923e-05 Rhoe time: 3.3831 first: 9.727e-05 second: 5.488e-04 infty: 6.155e-03 bias: -9.727e-05 Rhoe time: 3.4826 first: 9.527e-05 second: 5.375e-04 infty: 6.028e-03 bias: -9.527e-05 Rhoe time: 3.5821 first: 9.323e-05 second: 5.260e-04 infty: 5.899e-03 bias: -9.323e-05 Rhoe time: 3.6816 first: 9.116e-05 second: 5.143e-04 infty: 5.768e-03 bias: -9.116e-05 Rhoe time: 3.7811 first: 8.908e-05 second: 5.026e-04 infty: 5.636e-03 bias: -8.908e-05 Rhoe time: 3.8806 first: 8.698e-05 second: 4.907e-04 infty: 5.504e-03 bias: -8.698e-05 Rhoe time: 3.9801 first: 8.487e-05 second: 4.789e-04 infty: 5.370e-03 bias: -8.487e-05 Rhoe time: 4.08 first: 8.317e-05 second: 4.693e-04 infty: 5.263e-03 bias: -8.317e-05 Rhoe time: 4.18 first: 8.105e-05 second: 4.573e-04 infty: 5.129e-03 bias: -8.105e-05 Rhoe time: 4.28 first: 7.894e-05 second: 4.454e-04 infty: 4.995e-03 bias: -7.894e-05 Rhoe time: 4.38 first: 7.684e-05 second: 4.335e-04 infty: 4.862e-03 bias: -7.684e-05 Rhoe time: 4.48 first: 7.475e-05 second: 4.218e-04 infty: 4.730e-03 bias: -7.475e-05 Rhoe time: 4.58 first: 7.269e-05 second: 4.101e-04 infty: 4.600e-03 bias: -7.269e-05 Rhoe time: 4.68 first: 7.065e-05 second: 3.986e-04 infty: 4.471e-03 bias: -7.065e-05 Rhoe time: 4.78 first: 6.864e-05 second: 3.873e-04 infty: 4.343e-03 bias: -6.864e-05 Rhoe time: 4.88 first: 6.665e-05 second: 3.761e-04 infty: 4.218e-03 bias: -6.665e-05 Rhoe time: 4.98 first: 6.470e-05 second: 3.650e-04 infty: 4.094e-03 bias: -6.470e-05 Rhoe time: 5.08 first: 6.277e-05 second: 3.542e-04 infty: 3.972e-03 bias: -6.277e-05 Rhoe time: 5.18 first: 6.088e-05 second: 3.435e-04 infty: 3.853e-03 bias: -6.088e-05 Rhoe time: 5.28 first: 5.903e-05 second: 3.330e-04 infty: 3.735e-03 bias: -5.903e-05 Rhoe time: 5.38 first: 5.721e-05 second: 3.228e-04 infty: 3.620e-03 bias: -5.721e-05 Rhoe time: 5.48 first: 5.543e-05 second: 3.127e-04 infty: 3.507e-03 bias: -5.543e-05 Rhoe time: 5.58 first: 5.368e-05 second: 3.029e-04 infty: 3.397e-03 bias: -5.368e-05 Rhoe time: 5.68 first: 5.198e-05 second: 2.933e-04 infty: 3.289e-03 bias: -5.198e-05 Rhoe time: 5.78 first: 5.031e-05 second: 2.838e-04 infty: 3.183e-03 bias: -5.031e-05 Rhoe time: 5.88 first: 4.868e-05 second: 2.747e-04 infty: 3.080e-03 bias: -4.868e-05 Rhoe time: 5.98 first: 4.709e-05 second: 2.657e-04 infty: 2.980e-03 bias: -4.709e-05 gerris-snapshot-131206/test/bump/norms-implicit.ref0000644000175100017510000001254212250371171017254 00000000000000Rhoe time: 0 first: 1.557e-04 second: 8.784e-04 infty: 9.851e-03 bias: -1.557e-04 Rhoe time: 0.0995025 first: 1.482e-04 second: 8.358e-04 infty: 9.374e-03 bias: -1.482e-04 Rhoe time: 0.199005 first: 1.411e-04 second: 7.953e-04 infty: 8.919e-03 bias: -1.411e-04 Rhoe time: 0.298507 first: 1.343e-04 second: 7.568e-04 infty: 8.486e-03 bias: -1.343e-04 Rhoe time: 0.39801 first: 1.279e-04 second: 7.201e-04 infty: 8.075e-03 bias: -1.278e-04 Rhoe time: 0.497512 first: 1.217e-04 second: 6.852e-04 infty: 7.683e-03 bias: -1.217e-04 Rhoe time: 0.597015 first: 1.159e-04 second: 6.520e-04 infty: 7.311e-03 bias: -1.158e-04 Rhoe time: 0.696517 first: 1.103e-04 second: 6.204e-04 infty: 6.956e-03 bias: -1.103e-04 Rhoe time: 0.79602 first: 1.050e-04 second: 5.903e-04 infty: 6.619e-03 bias: -1.050e-04 Rhoe time: 0.895522 first: 9.996e-05 second: 5.617e-04 infty: 6.298e-03 bias: -9.992e-05 Rhoe time: 0.995025 first: 9.516e-05 second: 5.344e-04 infty: 5.992e-03 bias: -9.512e-05 Rhoe time: 1.09453 first: 9.059e-05 second: 5.085e-04 infty: 5.702e-03 bias: -9.055e-05 Rhoe time: 1.19403 first: 8.623e-05 second: 4.839e-04 infty: 5.425e-03 bias: -8.620e-05 Rhoe time: 1.29353 first: 8.209e-05 second: 4.604e-04 infty: 5.162e-03 bias: -8.205e-05 Rhoe time: 1.39303 first: 7.815e-05 second: 4.381e-04 infty: 4.912e-03 bias: -7.811e-05 Rhoe time: 1.49254 first: 7.439e-05 second: 4.169e-04 infty: 4.674e-03 bias: -7.435e-05 Rhoe time: 1.59204 first: 7.082e-05 second: 3.967e-04 infty: 4.447e-03 bias: -7.078e-05 Rhoe time: 1.69154 first: 6.742e-05 second: 3.774e-04 infty: 4.231e-03 bias: -6.737e-05 Rhoe time: 1.79104 first: 6.418e-05 second: 3.592e-04 infty: 4.026e-03 bias: -6.414e-05 Rhoe time: 1.89055 first: 6.110e-05 second: 3.417e-04 infty: 3.831e-03 bias: -6.105e-05 Rhoe time: 1.99005 first: 5.816e-05 second: 3.252e-04 infty: 3.645e-03 bias: -5.812e-05 Rhoe time: 2.0896 first: 5.536e-05 second: 3.094e-04 infty: 3.468e-03 bias: -5.532e-05 Rhoe time: 2.1891 first: 5.270e-05 second: 2.944e-04 infty: 3.300e-03 bias: -5.266e-05 Rhoe time: 2.2886 first: 5.017e-05 second: 2.801e-04 infty: 3.140e-03 bias: -5.013e-05 Rhoe time: 2.3881 first: 4.776e-05 second: 2.665e-04 infty: 2.987e-03 bias: -4.772e-05 Rhoe time: 2.4876 first: 4.547e-05 second: 2.536e-04 infty: 2.843e-03 bias: -4.542e-05 Rhoe time: 2.5871 first: 4.328e-05 second: 2.413e-04 infty: 2.705e-03 bias: -4.324e-05 Rhoe time: 2.6866 first: 4.120e-05 second: 2.296e-04 infty: 2.573e-03 bias: -4.116e-05 Rhoe time: 2.7861 first: 3.922e-05 second: 2.185e-04 infty: 2.449e-03 bias: -3.918e-05 Rhoe time: 2.8856 first: 3.734e-05 second: 2.079e-04 infty: 2.330e-03 bias: -3.730e-05 Rhoe time: 2.9851 first: 3.555e-05 second: 1.978e-04 infty: 2.217e-03 bias: -3.550e-05 Rhoe time: 3.0846 first: 3.384e-05 second: 1.882e-04 infty: 2.109e-03 bias: -3.380e-05 Rhoe time: 3.1841 first: 3.221e-05 second: 1.791e-04 infty: 2.007e-03 bias: -3.217e-05 Rhoe time: 3.2836 first: 3.067e-05 second: 1.704e-04 infty: 1.910e-03 bias: -3.063e-05 Rhoe time: 3.3831 first: 2.894e-05 second: 1.623e-04 infty: 1.820e-03 bias: -2.890e-05 Rhoe time: 3.4826 first: 2.735e-05 second: 1.545e-04 infty: 1.734e-03 bias: -2.727e-05 Rhoe time: 3.5821 first: 2.599e-05 second: 1.471e-04 infty: 1.652e-03 bias: -2.573e-05 Rhoe time: 3.6816 first: 2.478e-05 second: 1.400e-04 infty: 1.575e-03 bias: -2.428e-05 Rhoe time: 3.7811 first: 2.365e-05 second: 1.333e-04 infty: 1.501e-03 bias: -2.290e-05 Rhoe time: 3.8806 first: 2.259e-05 second: 1.269e-04 infty: 1.430e-03 bias: -2.160e-05 Rhoe time: 3.9801 first: 2.159e-05 second: 1.209e-04 infty: 1.363e-03 bias: -2.038e-05 Rhoe time: 4.08 first: 2.104e-05 second: 1.173e-04 infty: 1.324e-03 bias: -1.962e-05 Rhoe time: 4.18 first: 2.011e-05 second: 1.117e-04 infty: 1.262e-03 bias: -1.851e-05 Rhoe time: 4.28 first: 1.922e-05 second: 1.063e-04 infty: 1.202e-03 bias: -1.745e-05 Rhoe time: 4.38 first: 1.837e-05 second: 1.012e-04 infty: 1.145e-03 bias: -1.645e-05 Rhoe time: 4.48 first: 1.757e-05 second: 9.638e-05 infty: 1.091e-03 bias: -1.551e-05 Rhoe time: 4.58 first: 1.680e-05 second: 9.175e-05 infty: 1.039e-03 bias: -1.462e-05 Rhoe time: 4.68 first: 1.607e-05 second: 8.736e-05 infty: 9.903e-04 bias: -1.378e-05 Rhoe time: 4.78 first: 1.537e-05 second: 8.317e-05 infty: 9.435e-04 bias: -1.299e-05 Rhoe time: 4.88 first: 1.470e-05 second: 7.918e-05 infty: 8.989e-04 bias: -1.225e-05 Rhoe time: 4.98 first: 1.406e-05 second: 7.539e-05 infty: 8.564e-04 bias: -1.154e-05 Rhoe time: 5.08 first: 1.345e-05 second: 7.178e-05 infty: 8.159e-04 bias: -1.087e-05 Rhoe time: 5.18 first: 1.287e-05 second: 6.835e-05 infty: 7.773e-04 bias: -1.025e-05 Rhoe time: 5.28 first: 1.231e-05 second: 6.508e-05 infty: 7.406e-04 bias: -9.654e-06 Rhoe time: 5.38 first: 1.178e-05 second: 6.197e-05 infty: 7.055e-04 bias: -9.095e-06 Rhoe time: 5.48 first: 1.127e-05 second: 5.901e-05 infty: 6.722e-04 bias: -8.567e-06 Rhoe time: 5.58 first: 1.078e-05 second: 5.619e-05 infty: 6.404e-04 bias: -8.069e-06 Rhoe time: 5.68 first: 1.031e-05 second: 5.351e-05 infty: 6.101e-04 bias: -7.600e-06 Rhoe time: 5.78 first: 9.865e-06 second: 5.095e-05 infty: 5.812e-04 bias: -7.157e-06 Rhoe time: 5.88 first: 9.439e-06 second: 4.852e-05 infty: 5.537e-04 bias: -6.739e-06 Rhoe time: 5.98 first: 9.031e-06 second: 4.621e-05 infty: 5.275e-04 bias: -6.345e-06 gerris-snapshot-131206/test/bump/bump.sh0000644000175100017510000000602012250371171015101 00000000000000if test x$donotrun != xtrue; then if gerris2D -DSCHEME=explicit bump.gfs; then : else exit 1 fi if sed -e 's/SourceDiffusionExplicit Rhoe/#/' \ -e 's/# SourceDiffusion/ SourceDiffusion/' < bump.gfs | \ gerris2D -DSCHEME=implicit -; then : else exit 1 fi fi if gnuplot < 1e-5 or \ (Curve('norms-explicit',3,9) - Curve('norms-explicit.ref',3,9)).max() > 1e-5 or \ (Curve('norms-implicit',3,7) - Curve('norms-implicit.ref',3,7)).max() > 1e-5 or \ (Curve('norms-implicit',3,9) - Curve('norms-implicit.ref',3,9)).max() > 1e-5: print (Curve('norms-explicit',3,7) - Curve('norms-explicit.ref',3,7)).max() print (Curve('norms-explicit',3,9) - Curve('norms-explicit.ref',3,9)).max() print (Curve('norms-explicit',3,7) - Curve('norms-explicit.ref',3,7)).max() print (Curve('norms-explicit',3,9) - Curve('norms-explicit.ref',3,9)).max() print (Curve('norms-implicit',3,7) - Curve('norms-implicit.ref',3,7)).max() print (Curve('norms-implicit',3,9) - Curve('norms-implicit.ref',3,9)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/coriolis/0000755000175100017510000000000012250371673014553 500000000000000gerris-snapshot-131206/test/coriolis/coriolis.sh0000644000175100017510000000166312250371171016651 00000000000000if test x$donotrun != xtrue; then if gerris3D -m $1; then : else exit 1 fi fi if gnuplot < 1e-6: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/coriolis/coriolis.gfs0000644000175100017510000000654412250371171017021 00000000000000# Title: Coriolis formulation in 3-D # # Description: # # This test case is taken from the test cases of the Advanced Regional # Prediction System \cite{arps}. # A Coriolis term is applied to a cubic domain with periodic boundary # conditions in the x, y and z directions. Provided the flow has a unidirectional # initial velocity field and a zero initial pressure perturbation, # the spatial derivatives are initially zero and a solution exists to the # Navier-Stokes equations for which spatial derivatives are zero at # all times. # # In this case the velocity field is given by: # $$ # u = A \cos(2\Omega t) + B \sin(2\Omega t) # $$ # $$ # v = - A \sin \Phi \sin(2\Omega t) + B \sin \Phi \cos(2\Omega t) + C # $$ # $$ # w = A \cos \Phi \sin(2\Omega t) - B \cos \Phi \cos(2\Omega t) + D # $$ # where $A$, $B$, $C$ and $D$ are constants of integration: # $$ # A = U_0 # $$ # $$ # B = \sin \Phi V_0 - \cos \Phi W_0 # $$ # $$ # C = \cos \Phi \left( \cos \Phi V_0 + \sin \Phi W_0 \right) # $$ # $$ # D = \sin \Phi \left( \cos \Phi V_0 + \sin \Phi W_0 \right) # $$ # # Here $\Phi = \frac{\pi}{2}$ so that the z component of the Coriolis # force is equal to zero. Figure \ref{velocity} shows the evolution # of the three components of the velocity with time. # # \begin{figure}[htbp] # \caption{\label{velocity} Evolution of the velocity with time. # The solid lines are the analytical solution.} # \begin{center} # \includegraphics[width=0.8\hsize]{velocity.eps} # \end{center} # \end{figure} # # Author: S\'ebastien Delaux # Command: sh coriolis.sh coriolis.gfs # Version: 100621 # Required files: coriolis.sh # Generated files: velocity.eps error.dat # # Initial velocity Define U0 2 Define V0 3 Define W0 1 # Latitude (so that rotation is only along z) Define Phi (M_PI/4.) # Coriolis frequency Define Omega 7.292e-5 # Analytical solution Define A0 U0 Define B0 (sin(Phi)*V0-cos(Phi)*W0) Define C0 (cos(Phi)*(cos(Phi)*V0+sin(Phi)*W0)) Define D0 (sin(Phi)*(cos(Phi)*V0+sin(Phi)*W0)) Define Usol0 (A0*cos(2*Omega*t)+B0*sin(2*Omega*t)) Define Vsol0 (-A0*sin(Phi)*sin(2*Omega*t) + B0*sin(Phi)*cos(2*Omega*t) + C0) Define Wsol0 (A0*cos(Phi)*sin(2*Omega*t) - B0*cos(Phi)*cos(2*Omega*t) + D0) 1 3 GfsSimulation GfsBox GfsGEdge {} { Time { end = 30000 } Refine 2 # The reference length is set to 60 m PhysicalParams { L = 60 } # The domain is 60 x 30 x 15 m with an anisotropic mesh MetricStretch {} { sy = 0.5 sz = 0.25 } # Initialisation of the velocity field Init {} { U = U0 V = V0 W = W0 } # Viscosity (or eddy-viscosity) SourceViscosity 10 # Coriolis forces SourceCoriolis (2.*Omega) 0. { x = 0. y = 1. z = 1. } # Output of the integral of each component of the velocity field over the domain every # 1000 time steps OutputScalarStats { step = 3000 } { awk '{print $3, $7}' > u.dat } { v = U } OutputScalarStats { step = 3000 } { awk '{print $3, $7}' > v.dat } { v = V } OutputScalarStats { step = 3000 } { awk '{print $3, $7}' > w.dat } { v = W } # Output of some kind of error measurement OutputScalarStats { istep = 10 } { awk '{print $3,$7}' > error.dat } { v = sqrt((U - Usol0)*(U - Usol0) + (V - Vsol0)*(V - Vsol0) + (W - Wsol0)*(W - Wsol0)) } # Output of the final simulation file OutputSimulation { start = end } end.gfs } GfsBox {} # Setup of periodic boundary conditions in the 3 directions of space 1 1 top 1 1 right 1 1 front gerris-snapshot-131206/test/source/0000755000175100017510000000000012250371673014230 500000000000000gerris-snapshot-131206/test/source/source.gfv0000644000175100017510000000116212250371172016146 00000000000000# GfsView 2D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 2.90339 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Vectors { r = 0 g = 0 b = 0 shading = Constant maxlevel = 9 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } U V { scale = 0.2 use_scalar = 0 } Linear { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Velocity2 { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } gerris-snapshot-131206/test/source/error.ref0000644000175100017510000000024212250371172015767 000000000000007 5.801e-02 9.586e-02 1.809e-01 8 1.208e-02 2.953e-02 7.790e-02 9 2.826e-03 1.090e-02 4.512e-02 10 7.770e-04 3.813e-03 2.320e-02 11 4.808e-04 1.441e-03 1.249e-02 gerris-snapshot-131206/test/source/error.gfv0000644000175100017510000000064712250371172016006 00000000000000# GfsView 2D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 2.72829 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Linear { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } E { amin = 0 min = -0.0005 amax = 0 max = 0.0005 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } gerris-snapshot-131206/test/source/source.sh0000644000175100017510000000301612250371172015776 00000000000000levels="7 8 9 10 11" if test x$donotrun != xtrue; then for i in $levels; do if gerris2D -DLEVEL=$i source.gfs 2> log-$i; then : else exit 1 fi done fi rm -rf error for i in $levels; do tail -n 1 error-$i >> error done if gnuplot < 1e-4 or\ (Curve('error',1,3) - Curve('error.ref',1,3)).max() > 1e-4: print (Curve('error',1,4) - Curve('error.ref',1,4)).max() print (Curve('error',1,3) - Curve('error.ref',1,3)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/source/source.gfs0000644000175100017510000000354012250371172016145 00000000000000# Title: Flow created by a cylindrical volume source # # Description: # # The flow created by a cylindrical volume source is compared # against the analytical solution. # # $$ # u_r = { s r \over 2 } \; \; if \; \; r \le R_c # $$ # $$ # u_r = { s R_c^2 \over 2 r} \; \; if \; \; r > R_c # $$ # # \begin{figure}[htbp] # \caption{\label{Velocity Norm} Velocity field.} # \begin{center} # \includegraphics[width=0.8\hsize]{velfield.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{Error Norms} Error Norms.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{Relative Local Error} Local error at level 11. Color scale [-5e-4:5e-4].} # \begin{center} # \includegraphics[width=0.8\hsize]{localerror.eps} # \end{center} # \end{figure} # # Author: Daniel Fuster # Command: sh source.sh source.gfs # Version: 101217 # Required files: source.sh source.gfv error.gfv error.ref # Generated files: velfield.eps error.eps localerror.eps # 1 0 GfsSimulation GfsBox GfsGEdge { } { Global { #define R0 (0.05) double sol (double x, double y) { double r = sqrt(x*x+y*y); return r >= R0 ? R0*R0*0.5/r : r*0.5; } } Time { iend = 10 } Refine (LEVEL - 4*pow((x*x+y*y)/0.25, 0.5)) Variable F InitFraction F (R0*R0 - x*x - y*y) Source P F PhysicalParams { L = 2 } OutputTime { istep = 1 } stderr OutputErrorNorm { start = end } { awk '{ print LEVEL,$5,$7,$9 }' > error-LEVEL } { v = Velocity } { s = sol(x,y) v = E w = (x*x + y*y < 25.*R0*R0) relative = 1 } OutputSimulation { start = end } end-LEVEL.gfs } GfsBox { left = GfsBoundaryOutflow right = GfsBoundaryOutflow top = GfsBoundaryOutflow bottom = GfsBoundaryOutflow } gerris-snapshot-131206/test/axiadvection.sh0000755000175100017510000000003712250371662015663 00000000000000python -u test.py axiadvection gerris-snapshot-131206/test/lake.sh0000755000175100017510000000002712250371662014120 00000000000000python -u test.py lake gerris-snapshot-131206/test/test.py0000644000175100017510000000172712250371172014202 00000000000000import sys import commands import os import os.path sys.path.append("../doc/examples") import gfs2tex env = "export PYTHONPATH=$PYTHONPATH:" + os.getcwd() + " &&" n = 0 failed = 0 for start in sys.argv[1:]: for root, dirs, files in os.walk(start,topdown=True): if not ".xvpics" in root: test = gfs2tex.Example(root) status,msg = test.run(env) if status != None: print "FAIL:",root if len(msg) > 0: print " ".join(msg) print >>open(test.path + "/status",'w'), "{\color{Red}FAIL}:" failed += 1 else: print "PASS:",root print >>open(test.path + "/status",'w'), "{\color{OliveGreen}PASS}:" n += 1 if failed: msg = repr(failed) + " of " + repr(n) + " tests failed" else: msg = "All " + repr(n) + " tests passed" print len(msg)*"=" print msg print len(msg)*"=" if failed: sys.exit(1) gerris-snapshot-131206/test/height/0000755000175100017510000000000012250371673014200 500000000000000gerris-snapshot-131206/test/height/height5.gfs0000644000175100017510000000062112250371171016146 000000000000004 8 GfsAdvection GfsBox GfsGEdge {} { Refine 4 VariableTracerVOFHeight T VariableCurvature K T InitFraction T (ellipse (-0.5, -1.5, 0.6, 1.2)) Init {} { U = 2 } Time { end = 1. } OutputSimulation { start = end } stdout } GfsBox { pid = 0 } GfsBox { pid = 1 } GfsBox { pid = 2 } GfsBox { pid = 3 } 1 2 right 1 2 left 1 3 top 1 3 bottom 2 4 top 2 4 bottom 3 4 right 3 4 left gerris-snapshot-131206/test/height/height4.gfs0000644000175100017510000000113412250371171016145 000000000000002 1 GfsSimulation GfsBox GfsGEdge { x = -0.19 y = -0.38 } { # Refine (x > 0 && y > 0 ? 4 : 3) Refine 4 VariableTracerVOFHeight T VariableCurvature K T InitFraction T (ellipse (0, 0, 0.2, 0.3)) AdaptFunction { istep = 1 } { cmax = 0 minlevel = ((x > -0.314 && y > 0.1216 && x < -0.1921 && y < 0.2418) || (x > 0.186 && y > 0.124 && x < 0.305 && y < 0.244) ? 4 : 3) maxlevel = (x == -0.1275 && y == 0.3075 ? 3 : 4) } (T > 0 && T < 1) Time { end = 0 } OutputSimulation { start = end } stdout } GfsBox { pid = 0 } GfsBox { pid = 1 } 1 2 top gerris-snapshot-131206/test/height/height2.gfs0000644000175100017510000000050012250371171016137 000000000000002 1 GfsSimulation GfsBox GfsGEdge { y = -0.38 } { # Refine (x > 0 && y > 0 ? 4 : 3) Refine 4 VariableTracerVOFHeight T VariableCurvature K T InitFraction T (ellipse (0, 0, 0.2, 0.3)) Time { end = 0 } OutputSimulation { start = end } stdout } GfsBox { pid = 0 } GfsBox { pid = 1 } 1 2 top gerris-snapshot-131206/test/height/height.gfs0000644000175100017510000000134112250371171016061 00000000000000# Title: Height-Function on parallel subdomains # # Description: # # Checks that the height-function implementation gives identical # results when parallel subdomains are used. This is repeated for # various interface/mesh configurations. # # Author: St\'ephane Popinet # Command: sh height.sh # Version: 110906 # Required files: height.sh height1.gfs height2.gfs height3.gfs height4.gfs height5.gfs 2 1 GfsSimulation GfsBox GfsGEdge { # x = -0.5 x = -0.38 } { # Refine (x > 0 && y > 0 ? 4 : 3) Refine 4 VariableTracerVOFHeight T VariableCurvature K T InitFraction T (ellipse (0, 0, 0.2, 0.3)) Time { end = 0 } OutputSimulation { start = end } stdout } GfsBox { pid = 0 } GfsBox { pid = 1 } 1 2 right gerris-snapshot-131206/test/height/height3.gfs0000644000175100017510000000075212250371171016151 000000000000002 1 GfsSimulation GfsBox GfsGEdge { x = -0.2 y = -0.38 } { # Refine (x > 0 && y > 0 ? 4 : 3) Refine 4 VariableTracerVOFHeight T VariableCurvature K T InitFraction T (ellipse (0, 0, 0.2, 0.3)) AdaptFunction { istep = 1 } { cmax = 0 minlevel = (x > 0.051 && y > -0.0033 && x < 0.1722 && y < 0.114 ? 4 : 0) maxlevel = 4 } (T > 0 && T < 1) Time { end = 0 } OutputSimulation { start = end } stdout } GfsBox { pid = 0 } GfsBox { pid = 1 } 1 2 top gerris-snapshot-131206/test/height/height.sh0000644000175100017510000000126612250371171015722 00000000000000for f in height*.gfs; do if gerris2D $f > ref.gfs; then : else echo " FAIL: gerris2D $f" exit 1 fi np=`awk 'BEGIN{max = 0}{ if ($3 == "pid" && $4 == "=" && $5 > max) max = $5; }END{print max+1}' < $f` if mpirun -np $np gerris2D $f > run.gfs; then : else echo " FAIL: mpirun -np $np gerris2D $f" exit 1 fi for v in T_Hbx T_Hby T_Htx T_Hty K; do if gfscompare2D -v run.gfs ref.gfs $v 2> log; then : else cat log echo " FAIL: $v $f" exit 1 fi if awk '{ if ($1 == "total" && $8 > 1e-10) exit 1; }' < log; then : else cat log echo " FAIL: $v $f" exit 1 fi done done gerris-snapshot-131206/test/height/height1.gfs0000644000175100017510000000050112250371171016137 000000000000002 1 GfsSimulation GfsBox GfsGEdge { x = -0.5 } { # Refine (x > 0 && y > 0 ? 4 : 3) Refine 4 VariableTracerVOFHeight T VariableCurvature K T InitFraction T (ellipse (0, 0, 0.2, 0.3)) Time { end = 0 } OutputSimulation { start = end } stdout } GfsBox { pid = 0 } GfsBox { pid = 1 } 1 2 right gerris-snapshot-131206/test/kinetic/0000755000175100017510000000000012250371673014356 500000000000000gerris-snapshot-131206/test/kinetic/kinetic.gfs0000644000175100017510000000363612250371171016426 00000000000000# Title: Momentum conservation for large density ratios # # Description: # # A dense droplet moves through a lighter background fluid. The # kinetic energy decreases due to viscous dissipation (Figure # \ref{k}). For these density and viscosity ratios of 1000, the # calculation is stable only if a "mollified" volume fraction is used # to compute the average density and viscosity. # # \begin{figure}[htbp] # \caption{\label{k}Evolution of the kinetic energy.} # \begin{center} # \includegraphics[width=0.8\hsize]{k.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: gerris2D kinetic.gfs # Version: 1.1.0 # Required files: kinetic.gfs # Generated files: k.eps 1 0 GfsSimulation GfsBox GfsGEdge {} { Time { end = 0.5 } Global { #define var(T,min,max) (CLAMP(T,0,1)*(max - min) + min) #define rho(T) var(T, 0.001, 1.) #define mu(T) var(T, 1e-6, 1e-3) #define level 7 #define radius 0.05 } Refine level ProjectionParams { tolerance = 1e-6 } ApproxProjectionParams { tolerance = 1e-6 } VariableTracerVOFHeight T VariableFiltered T1 T 1 InitFraction T (- ellipse(-0.3,0,radius,radius)) Init {} { U = T } PhysicalParams { alpha = 1./rho(T1) } SourceViscosity mu(T1) AdaptVorticity { istep = 1 } { cmax = 0.3 maxlevel = level } AdaptGradient { istep = 1 } { cmax = 1e-3 maxlevel = level } T OutputScalarSum { istep = 1 } k { v = Velocity2*rho(T1) } OutputScalarSum { istep = 1 } t { v = T } EventScript { start = end } { gnuplot < 7.2e-3) exit (1);}' < k ; then return 0; else return $GFS_STOP; fi } } GfsBox {} gerris-snapshot-131206/test/plate.sh0000755000175100017510000000003012250371662014303 00000000000000python -u test.py plate gerris-snapshot-131206/test/spurious.sh0000755000175100017510000000003312250371662015072 00000000000000python -u test.py spurious gerris-snapshot-131206/test/diffusion.sh0000755000175100017510000000003412250371662015170 00000000000000python -u test.py diffusion gerris-snapshot-131206/test/sessile/0000755000175100017510000000000012250371673014377 500000000000000gerris-snapshot-131206/test/sessile/error-6.ref0000644000175100017510000000014112250371172016277 0000000000000030 0.0249579 45 0.0350761 60 0.000796892 90 0.0014 120 0.00136956 150 0.00224199 180 0.000838938 gerris-snapshot-131206/test/sessile/sessile.gfs0000644000175100017510000000506612250371172016470 00000000000000# Title: Sessile drop # # Description: # # A sessile drop is a drop of liquid at rest on a solid surface. In # the absence of gravity, the shape of the drop is controlled by # surface tension only. An important parameter is the "contact angle" # $\theta$ between the solid surface and the interface. In the absence # of gravity, the drop is hemispherical and it is easy to show that # the relation between the radius of the drop $R$ and its volume $V$ # is (for two-dimensional drops) # $$V=R^2(\theta-\sin\theta\cos\theta)$$ # # To test this relation, a drop is initialised as a half-disk # (i.e. the initial contact angle is 90$^\circ$) and the contact angle # is varied between 30 and 180$^\circ$. The drop oscillates and # eventually relaxes to its equilibrium position. This equilibrium is # exact to within machine accuracy (for most contact angles). The # curvature along the interface is constant. Figure \ref{rk} # illustrates the dependence of the equilibrium radius $R$ as a # function of the contact angle $\theta$ (for a constant volume # $V$). The method is between first- and second-order accurate (Figure # \ref{convergence}). # # \begin{figure}[htbp] # \caption{\label{rk}Dependence of the equilibrium radius on the # contact angle for several spatial resolutions.} # \begin{center} # \includegraphics[width=0.8\hsize]{rk.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{convergence}Convergence of the equilibrium curvature # with the spatial resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{convergence.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh sessile.sh # Version: 110912 # Required files: sessile.sh error-6.ref # Running time: 6 minutes # Generated files: rk.eps convergence.eps 1 0 GfsSimulation GfsBox GfsGEdge { x = 0.5 y = 0.5 } { Refine LEVEL VariableTracerVOFHeight T VariableCurvature K T SourceTension T 1. K PhysicalParams { alpha = 1./(T + 0.01*(1. - T)) } SourceViscosity 0.2/(T + 100.*(1. - T)) InitFraction T (- ellipse (0, 0, 0.3, 0.3)) AdaptFunction { istep = 1 } { cmax = 0 maxlevel = LEVEL } (T > 0 && T < 1) Time { end = 3 } EventStop { istep = 10 } K 1e-5 DK OutputScalarNorm { istep = 10 } v-ANGLE { v = Velocity } OutputScalarStats { istep = 10 } k { v = (T > 0.05 && T < 0.95 ? K : NODATA) } OutputScalarSum { start = end } vol { v = T } # OutputSimulation { istep = 10 } stdout OutputSimulation { start = end } end-ANGLE.gfs } GfsBox { bottom = Boundary { BcAngle T ANGLE } left = Boundary # axis of symmetry } gerris-snapshot-131206/test/sessile/sessile.sh0000644000175100017510000000504412250371172016317 00000000000000angles="30 45 60 90 120 150 180" for level in 4 5 6; do for theta in $angles; do if gerris2D -DANGLE=$theta -DLEVEL=$level sessile.gfs; then : else exit 1 fi tail -n 1 k | awk -v theta=$theta '{ print theta,-$5,-$7,-$11 }' done > rk-$level done for theta in $angles; do rm -f convergence-$theta for level in 4 5 6; do awk -v theta=$theta -v level=$level ' BEGIN { pi = 3.14159265358979 } function R(theta, vol) { vol=pi*0.3**2/2. return sqrt(vol/(theta-cos(theta)*sin(theta))); } { kexact = 1./R(theta*pi/180.) if ($1 == theta) print 0.3*(2**level),($3 - kexact)/kexact; }' < rk-$level >> convergence-$theta done done awk 'BEGIN { pi = 3.14159265358979 } function R(theta, vol) { vol=pi*0.3**2/2. return sqrt(vol/(theta-cos(theta)*sin(theta))); } { theta = $1 kexact = 1./R(theta*pi/180.) if ($3 > kexact) error = $3 - kexact; else error = kexact - $3; print $1,error/kexact; }' < rk-6 > error-6 if gnuplot < 0.: print (Curve('error-6',1,2) - Curve('error-6.ref',1,2)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/kinetic.sh0000755000175100017510000000003212250371662014626 00000000000000python -u test.py kinetic gerris-snapshot-131206/test/circle/0000755000175100017510000000000012250371672014170 500000000000000gerris-snapshot-131206/test/circle/refined/0000755000175100017510000000000012250371672015604 500000000000000gerris-snapshot-131206/test/circle/refined/order.ref0000644000175100017510000000040212250371171017323 000000000000004 1.5165 1.86758 2.31956 4 1.5165 1.86758 2.31956 5 2.17551 2.21896 2.15824 5 2.17551 2.21896 2.15824 6 2.11511 2.09858 2.06684 6 2.11511 2.09858 2.06721 7 2.15306 2.13213 2.06564 7 2.15306 2.13213 2.06527 8 2.05318 2.04291 1.48521 8 2.05301 2.04291 1.48348 gerris-snapshot-131206/test/circle/refined/refined.gfs0000644000175100017510000000416712250371171017643 00000000000000# Title: Star-shaped solid boundary with refinement # # Description: # # Same as the star test but with two levels of refinement added near # the solid boundary. # # \begin{figure}[htbp] # \caption{\label{solution}Solution of the Poisson equation.} # \begin{center} # \includegraphics[width=0.6\hsize]{solution.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{residual}Evolution of the residual.} # \begin{center} # \includegraphics[width=0.8\hsize]{residual.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{rate}Average reduction factor.} # \begin{center} # \includegraphics[width=0.8\hsize]{rate.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Evolution of the error as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Corresponding convergence order.} # \begin{center} # \includegraphics[width=0.8\hsize]{order.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../circle.sh refined.gfs # Version: 100325 # Required files: res-7.ref error.ref order.ref solution.gfv # Generated files: residual.eps rate.eps error.eps order.eps solution.eps # 1 0 GfsPoisson GfsBox GfsGEdge {} { Time { iend = 1 } Refine LEVEL RefineSolid (LEVEL + 2) Solid ({ double dr = 0.1; double theta = atan2 (y, x); double radius = 0.79*(0.45 - dr + dr*cos (6.*theta)); return x*x + y*y - radius*radius; }) GModule hypre ApproxProjectionParams { tolerance = 1e-30 nitermin = CYCLE nitermax = CYCLE } Init {} { Div = { int k = 3, l = 3; return -M_PI*M_PI*(k*k + l*l)*sin (M_PI*k*x)*sin (M_PI*l*y); } } OutputTime { istep = 1 } { awk '{if ($2 == 1) {print "CYCLE " $8}}' >> time } OutputProjectionStats { start = end } { awk '{ if ($1 == "residual.infty:") print "CYCLE "$3 " " $4; }' >> proj } OutputSimulation { start = end } sim-LEVEL-SOLVER { variables = P } } GfsBox {} gerris-snapshot-131206/test/circle/refined/solution.gfv0000644000175100017510000000077612250371171020110 00000000000000# GfsView 2D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 30 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Boundaries { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } Solid { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 30 } gerris-snapshot-131206/test/circle/refined/error.ref0000644000175100017510000000060012250371171017341 000000000000003 8.477e-02 1.317e-01 3.652e-01 3 8.477e-02 1.317e-01 3.652e-01 4 2.963e-02 3.609e-02 7.316e-02 4 2.963e-02 3.609e-02 7.316e-02 5 6.559e-03 7.752e-03 1.639e-02 5 6.559e-03 7.752e-03 1.639e-02 6 1.514e-03 1.810e-03 3.912e-03 6 1.514e-03 1.810e-03 3.911e-03 7 3.404e-04 4.129e-04 9.345e-04 7 3.404e-04 4.129e-04 9.345e-04 8 8.202e-05 1.002e-04 3.338e-04 8 8.203e-05 1.002e-04 3.342e-04 gerris-snapshot-131206/test/circle/refined/res-7.ref0000644000175100017510000000103712250371171017152 000000000000001 0.42000000 7.967e+01 2.2 1 0.47000000 4.088e+02 0.43 2 0.53000000 3.404e+01 2.3 2 0.48000000 7.751e+01 1.5 3 0.81000000 4.312e+00 3.5 3 0.49000000 1.283e+01 2.4 4 0.92000000 1.104e+00 3.6 4 0.51000000 2.025e+00 3.1 5 1.14000000 3.463e-01 3.5 5 0.54000000 3.244e-01 3.5 6 1.04000000 1.017e-01 3.5 6 0.55000000 5.464e-02 3.8 7 1.09000000 2.778e-02 3.5 7 0.55000000 9.848e-03 4.1 8 1.17000000 8.372e-03 3.5 8 0.57000000 1.903e-03 4.2 9 1.24000000 2.247e-03 3.5 9 0.58000000 3.899e-04 4.3 10 1.41000000 6.869e-04 3.5 10 0.61000000 8.343e-05 4.3 gerris-snapshot-131206/test/circle/order.ref0000644000175100017510000000020012250371171015703 000000000000004 2.13518 2.1844 2.50965 5 1.96661 1.97821 1.75776 6 2.0458 2.03747 1.98811 7 1.95162 1.94935 0.927251 8 2.0225 2.02845 2.35893 gerris-snapshot-131206/test/circle/circle.gfs0000644000175100017510000000421112250371171016042 00000000000000# Title: Convergence of the Poisson solver with solid boundaries # # Description: # # Another of the test cases presented in Popinet \cite{popinet2003}. A # circular solid boundary of radius 0.25 is embedded in the # domain. The same right-hand-side is used. # # This time the problem does not have an analytical solution and we # use Richardson extrapolation to estimate the error for a given # resolution. # # \begin{figure}[htbp] # \caption{\label{solution}Solution of the Poisson equation.} # \begin{center} # \includegraphics[width=0.6\hsize]{solution.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{residual}Evolution of the residual.} # \begin{center} # \includegraphics[width=0.8\hsize]{residual.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{rate}Average reduction factor.} # \begin{center} # \includegraphics[width=0.8\hsize]{rate.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Evolution of the error as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Corresponding convergence order.} # \begin{center} # \includegraphics[width=0.8\hsize]{order.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh circle.sh circle.gfs # Version: 100325 # Required files: circle.sh res-7.ref error.ref order.ref solution.gfv # Generated files: residual.eps rate.eps error.eps order.eps solution.eps # 1 0 GfsPoisson GfsBox GfsGEdge {} { Time { iend = 1 } Refine LEVEL Solid (ellipse (0, 0, 0.25, 0.25)) GModule hypre ApproxProjectionParams { tolerance = 1e-30 erelax = 2 nitermin = CYCLE nitermax = CYCLE } Init {} { Div = { int k = 3, l = 3; return -M_PI*M_PI*(k*k + l*l)*sin (M_PI*k*x)*sin (M_PI*l*y); } } OutputTime { istep = 1 } { awk '{if ($2 == 1) {print "CYCLE " $8}}' >> time } OutputProjectionStats { start = end } { awk '{ if ($1 == "residual.infty:") print "CYCLE "$3 " " $4; }' >> proj } OutputSimulation { start = end } sim-LEVEL-SOLVER { variables = P } } GfsBox {} gerris-snapshot-131206/test/circle/solution.gfv0000644000175100017510000000077612250371171016474 00000000000000# GfsView 2D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 30 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Boundaries { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } Solid { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 30 } gerris-snapshot-131206/test/circle/error.ref0000644000175100017510000000060012250371171015725 000000000000003 7.692e-02 9.918e-02 2.467e-01 3 7.692e-02 9.918e-02 2.467e-01 4 1.751e-02 2.182e-02 4.332e-02 4 1.751e-02 2.182e-02 4.332e-02 5 4.480e-03 5.538e-03 1.281e-02 5 4.480e-03 5.538e-03 1.281e-02 6 1.085e-03 1.349e-03 3.229e-03 6 1.085e-03 1.349e-03 3.229e-03 7 2.805e-04 3.493e-04 1.698e-03 7 2.805e-04 3.493e-04 1.698e-03 8 6.904e-05 8.562e-05 3.310e-04 8 6.904e-05 8.562e-05 3.310e-04 gerris-snapshot-131206/test/circle/thin/0000755000175100017510000000000012250371672015132 500000000000000gerris-snapshot-131206/test/circle/thin/order.ref0000644000175100017510000000020512250371171016652 000000000000004 1.29721 1.35687 1.08182 5 1.1163 1.16674 0.586372 6 1.05362 1.07402 0.527474 7 1.02634 1.03291 0.509811 8 1.01346 1.01553 0.503821 gerris-snapshot-131206/test/circle/thin/solution.gfv0000644000175100017510000000125012250371171017422 00000000000000# GfsView 2D View { tx = -0.591968 ty = 0.496337 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 37.9885 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Boundaries { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } Solid { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 30 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } gerris-snapshot-131206/test/circle/thin/error.ref0000644000175100017510000000060012250371171016667 000000000000003 1.577e-01 1.943e-01 4.335e-01 3 1.577e-01 1.943e-01 4.335e-01 4 6.417e-02 7.586e-02 2.048e-01 4 6.417e-02 7.586e-02 2.048e-01 5 2.960e-02 3.379e-02 1.364e-01 5 2.960e-02 3.379e-02 1.364e-01 6 1.426e-02 1.605e-02 9.463e-02 6 1.426e-02 1.605e-02 9.463e-02 7 7.001e-03 7.844e-03 6.646e-02 7 7.002e-03 7.844e-03 6.646e-02 8 3.468e-03 3.880e-03 4.687e-02 8 3.469e-03 3.880e-03 4.687e-02 gerris-snapshot-131206/test/circle/thin/res-7.ref0000644000175100017510000000102312250371171016473 000000000000001 0.61000000 2.892e+02 0.61 1 0.99000000 3.048e+01 5.8 2 0.86000000 8.184e+01 1.5 2 1.06000000 1.982e+00 9.5 3 1.11000000 2.229e+01 2 3 1.17000000 1.158e-01 12 4 1.37000000 6.010e+00 2.3 4 1.27000000 6.862e-03 13 5 1.64000000 1.618e+00 2.6 5 1.33000000 4.156e-04 13 6 1.88000000 4.356e-01 2.7 6 1.39000000 2.552e-05 14 7 2.16000000 1.172e-01 2.8 7 1.46000000 1.578e-06 14 8 2.35000000 3.156e-02 2.9 8 1.56000000 9.788e-08 14 9 2.67000000 8.494e-03 3 9 1.64000000 6.067e-09 15 10 2.92000000 2.286e-03 3.1 10 1.73000000 3.627e-10 15 gerris-snapshot-131206/test/circle/thin/thin.gfs0000644000175100017510000000366212250371171016516 00000000000000# Title: Thin wall at box boundary # # Description: # # Boxes are used to setup a similar problem but with an infinitely # thin wall. # # \begin{figure}[htbp] # \caption{\label{solution}Solution of the Poisson equation.} # \begin{center} # \includegraphics[width=0.6\hsize]{solution.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{residual}Evolution of the residual.} # \begin{center} # \includegraphics[width=0.8\hsize]{residual.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{rate}Average reduction factor.} # \begin{center} # \includegraphics[width=0.8\hsize]{rate.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Evolution of the error as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Corresponding convergence order.} # \begin{center} # \includegraphics[width=0.8\hsize]{order.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../circle.sh thin.gfs # Version: 100325 # Required files: res-7.ref error.ref order.ref solution.gfv # Generated files: residual.eps rate.eps error.eps order.eps solution.eps # 4 3 GfsPoisson GfsBox GfsGEdge {} { Time { iend = 1 } Refine LEVEL GModule hypre ApproxProjectionParams { erelax = 2 tolerance = 1e-30 nitermin = CYCLE nitermax = CYCLE } Init {} { Div = { int k = 3, l = 3; x = (x - 0.5)/2.; y = (y + 0.5)/2.; return -M_PI*M_PI*(k*k + l*l)*sin (M_PI*k*x)*sin (M_PI*l*y); } } OutputTime { istep = 1 } { awk '{if ($2 == 1) {print "CYCLE " $8}}' >> time } OutputProjectionStats { start = end } { awk '{ if ($1 == "residual.infty:") print "CYCLE "$3 " " $4; }' >> proj } OutputSimulation { start = end } sim-LEVEL-SOLVER { variables = P } } GfsBox {} GfsBox {} GfsBox {} GfsBox {} 1 2 right 2 3 bottom 3 4 left gerris-snapshot-131206/test/circle/circle.sh0000644000175100017510000000742412250371171015706 00000000000000if test x$donotrun != xtrue; then for solver in gerris hypre; do if test x$solver = xhypre; then gmodule=GModule else gmodule="# GModule" fi for level in 3 4 5 6 7 8 9; do for cycle in 1 2 3 4 5 6 7 8 9 10; do if ( sed "s/GModule/$gmodule/" < $1 | \ gerris2D -DLEVEL=$level -DCYCLE=$cycle -DSOLVER=$solver - ) ; then : else exit 1 fi done join time proj > res-$level-$solver rm -f proj time done done fi rm -f error error-hypre error-gerris for solver in gerris hypre; do for level in 3 4 5 6 7 8; do next=`expr $level + 1` echo -n "$level " >> error-$solver if gfscompare2D -C -c -v sim-$level-$solver sim-$next-$solver P 2>&1 | \ awk '{if ($1 == "total") print $4 " " $6 " " $8;}' >> error-$solver; then : else exit 1 fi done if echo "Save solution.eps { format = EPS line_width = 0.25}" | \ gfsview-batch2D sim-9-$solver solution.gfv; then : else exit 1 fi if awk ' BEGIN { n = 0 } { l[n] = $1; n1[n] = $2; n2[n] = $3; ni[n++] = $4; } END { for (i = 1; i < n; i++) print l[i] " " log(n1[i-1]/n1[i])/log(2.) " " log(n2[i-1]/n2[i])/log(2.) " " log(ni[i-1]/ni[i])/log(2.); }' < error-$solver > order-$solver; then : else exit 1 fi done if cat < 1e-8 or\ (Curve('res-7-hypre',1,3) - Curve('res-7.ref',1,7)).max() > 1e-8 or\ (Curve('error-gerris',1,4) - Curve('error.ref',1,4)).max() > 1e-6 or\ (Curve('error-hypre',1,4) - Curve('error.ref',1,8)).max() > 1e-6: print (Curve('res-7-gerris',1,3) - Curve('res-7.ref',1,3)).max() print (Curve('res-7-hypre',1,3) - Curve('res-7.ref',1,7)).max() print (Curve('error-gerris',1,4) - Curve('error.ref',1,4)).max() print (Curve('error-hypre',1,4) - Curve('error.ref',1,8)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/circle/star/0000755000175100017510000000000012250371672015141 500000000000000gerris-snapshot-131206/test/circle/star/order.ref0000644000175100017510000000040212250371171016660 000000000000004 2.8889 2.78023 2.47118 4 2.8889 2.78023 2.47118 5 1.49155 1.58049 1.70206 5 1.49155 1.58049 1.70206 6 2.64122 2.53471 2.36017 6 2.64122 2.53471 2.36017 7 2.04478 2.03391 1.12512 7 2.04478 2.03391 1.12512 8 1.19447 1.31796 1.27408 8 1.19447 1.31796 1.27408 gerris-snapshot-131206/test/circle/star/solution.gfv0000644000175100017510000000077612250371171017445 00000000000000# GfsView 2D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 30 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Boundaries { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } Solid { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 30 } gerris-snapshot-131206/test/circle/star/error.ref0000644000175100017510000000060012250371171016676 000000000000003 1.454e-01 1.681e-01 2.966e-01 3 1.454e-01 1.681e-01 2.966e-01 4 1.963e-02 2.447e-02 5.349e-02 4 1.963e-02 2.447e-02 5.349e-02 5 6.981e-03 8.182e-03 1.644e-02 5 6.981e-03 8.182e-03 1.644e-02 6 1.119e-03 1.412e-03 3.202e-03 6 1.119e-03 1.412e-03 3.202e-03 7 2.712e-04 3.448e-04 1.468e-03 7 2.712e-04 3.448e-04 1.468e-03 8 1.185e-04 1.383e-04 6.070e-04 8 1.185e-04 1.383e-04 6.070e-04 gerris-snapshot-131206/test/circle/star/star.gfs0000644000175100017510000000445112250371171016531 00000000000000# Title: Star-shaped solid boundary # # Description: # # A similar but more difficult test using a star-shaped solid boundary # defined in polar coordinates as # $$ # r(\theta)=0.2765+0.079\cos(6\theta) # $$ # # The convergence rate is smaller because the shape of the boundary is # not represented properly on the coarsest levels of the multigrid # hierarchy. # # \begin{figure}[htbp] # \caption{\label{solution}Solution of the Poisson equation.} # \begin{center} # \includegraphics[width=0.6\hsize]{solution.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{residual}Evolution of the residual.} # \begin{center} # \includegraphics[width=0.8\hsize]{residual.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{rate}Average reduction factor.} # \begin{center} # \includegraphics[width=0.8\hsize]{rate.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Evolution of the error as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Corresponding convergence order.} # \begin{center} # \includegraphics[width=0.8\hsize]{order.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../circle.sh star.gfs # Version: 100325 # Required files: res-7.ref error.ref order.ref solution.gfv # Generated files: residual.eps rate.eps error.eps order.eps solution.eps # 1 0 GfsPoisson GfsBox GfsGEdge {} { Time { iend = 1 } Refine LEVEL Solid ({ double dr = 0.1; double theta = atan2 (y, x); double radius = 0.79*(0.45 - dr + dr*cos (6.*theta)); return x*x + y*y - radius*radius; }) GModule hypre ApproxProjectionParams { erelax = 2 tolerance = 1e-30 nitermin = CYCLE nitermax = CYCLE } Init {} { Div = { int k = 3, l = 3; return -M_PI*M_PI*(k*k + l*l)*sin (M_PI*k*x)*sin (M_PI*l*y); } } OutputTime { istep = 1 } { awk '{if ($2 == 1) {print "CYCLE " $8}}' >> time } OutputProjectionStats { start = end } { awk '{ if ($1 == "residual.infty:") print "CYCLE "$3 " " $4; }' >> proj } OutputSimulation { start = end } sim-LEVEL-SOLVER { variables = P } } GfsBox {} gerris-snapshot-131206/test/circle/star/res-7.ref0000644000175100017510000000101412250371171016502 000000000000001 0.19000000 2.218e+01 8 1 0.27000000 2.403e+01 7.4 2 0.23000000 7.923e-01 15 2 0.29000000 1.314e+00 12 3 0.30000000 2.020e-02 21 3 0.28000000 7.628e-02 13 4 0.34000000 9.980e-04 21 4 0.31000000 7.682e-03 12 5 0.40000000 3.119e-05 22 5 0.30000000 9.982e-04 11 6 0.43000000 1.313e-06 23 6 0.32000000 1.630e-04 10 7 0.51000000 6.384e-08 22 7 0.34000000 2.649e-05 9.4 8 0.55000000 2.329e-09 23 8 0.34000000 4.296e-06 9 9 0.59000000 1.336e-10 22 9 0.36000000 6.967e-07 8.6 10 0.65000000 3.254e-11 19 10 0.36000000 1.131e-07 8.3 gerris-snapshot-131206/test/circle/res-7.ref0000644000175100017510000000101212250371171015527 000000000000001 0.17000000 4.896e+00 36 1 0.28000000 1.639e+01 11 2 0.23000000 1.524e-01 34 2 0.29000000 7.106e-01 16 3 0.28000000 5.873e-03 31 3 0.30000000 3.688e-02 17 4 0.34000000 2.203e-04 30 4 0.31000000 2.544e-03 16 5 0.41000000 7.269e-06 30 5 0.31000000 2.213e-04 15 6 0.44000000 2.317e-07 30 6 0.32000000 2.223e-05 14 7 0.48000000 7.092e-09 31 7 0.34000000 2.445e-06 13 8 0.52000000 2.873e-10 30 8 0.35000000 2.857e-07 13 9 0.65000000 2.882e-11 26 9 0.36000000 3.478e-08 12 10 0.72000000 3.223e-11 19 10 0.36000000 4.337e-09 12 gerris-snapshot-131206/test/axiadvection/0000755000175100017510000000000012250371673015406 500000000000000gerris-snapshot-131206/test/axiadvection/vof.gfv0000644000175100017510000000061112250371171016613 00000000000000# GfsView 2D View { tx = -0.0177224 ty = -0.490634 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 22.0083 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } VOF { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } T { reversed = 0 use_scalar = 0 draw_edges = 0 } gerris-snapshot-131206/test/axiadvection/solid/0000755000175100017510000000000012250371673016520 500000000000000gerris-snapshot-131206/test/axiadvection/solid/axi.sh0000644000175100017510000000101612250371171017544 00000000000000if test x$donotrun != xtrue; then gerris2D solid.gfs fi if awk ' BEGIN { min = 1000.; max = -1000.; }{ if ($5 < min) min = $5; if ($5 > max) max = $5; } END { e = 2.*(max - min)/(max + min); print "VOF:", e; if (e > 2.5e-2) exit (1); }' < srt; then : else exit 1 fi if awk ' BEGIN { min = 1000.; max = -1000.; }{ if ($5 < min) min = $5; if ($5 > max) max = $5; } END { e = 2.*(max - min)/(max + min); print "Standard:", e; if (e > 0.) exit (1); }' < srt1; then : else exit 1 fi gerris-snapshot-131206/test/axiadvection/solid/solid.gfs0000644000175100017510000000162012250371171020243 00000000000000# Title: Mass conservation with solid boundary # # Description: # # A similar test but for tracers advected around a solid sphere. # # Author: St\'ephane Popinet # Command: sh axi.sh # Version: 1.3.0 # Required files: axi.sh # 1 0 GfsAxi GfsBox GfsGEdge {} { Time { end = 0.55 } Refine (x < 0. ? 7 : 8) Init {} { U = 1 } ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } Solid (ellipse (0., 0., 0.05, 0.05)) VariableTracerVOF T VariableTracer T1 InitFraction T (- ellipse (-0.2, 0., 0.05, 0.05)) InitFraction T1 (- ellipse (-0.2, 0., 0.05, 0.05)) AdaptGradient { istep = 1 } { cmax = 1e-3 minlevel = 4 maxlevel = (x < 0. ? 7 : 8) } T1 OutputScalarSum { istep = 1 } srt { v = T } OutputScalarSum { istep = 1 } srt1 { v = T1 } } GfsBox { left = Boundary { BcDirichlet U 1 BcDirichlet V 0 } right = BoundaryOutflow } gerris-snapshot-131206/test/axiadvection/axi.sh0000644000175100017510000000154712250371171016443 00000000000000if test x$donotrun != xtrue; then gerris2D axiadvection.gfs | gfsview-batch2D -s vof.gfv > vof.gnu fi if cat < max) max = $5; } END { e = 2.*(max - min)/(max + min); print "VOF:", e; if (e > 4e-4) exit (1); }' < srt; then : else exit 1 fi if awk ' BEGIN { min = 1000.; max = -1000.; }{ if ($5 < min) min = $5; if ($5 > max) max = $5; } END { e = 2.*(max - min)/(max + min); print "Standard:", e; if (e > 4e-7) exit (1); }' < srt1; then : else exit 1 fi gerris-snapshot-131206/test/axiadvection/axiadvection.gfs0000644000175100017510000000310112250371171020471 00000000000000# Title: Mass conservation # # Description: # # A standard and a VOF tracer are advected by an axisymmetric # flow. The initial interface is a torus which is then advected by the # flow illustrated in Figure \ref{vof}. As the torus is flattened # against the right-hand-side wall, its cross-sectional surface area # decreases but the volume should remain constant. This is indeed the # case to within 0.04\% for the VOF tracer and $1.5\times 10^{-5}$\% for # the standard tracer. # # \begin{figure}[htbp] # \caption{\label{vof}VOF interface (red) and velocity field (green).} # \begin{center} # \includegraphics[width=0.8\hsize]{vof.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh axi.sh # Version: 1.3.0 # Required files: axi.sh vectors.gfv vof.gfv # Generated files: vof.eps # 1 0 GfsAxi GfsBox GfsGEdge {} { Time { end = 1.3 } Refine 6 Init {} { U = 1 } VariableTracerVOF T VariableTracer T1 InitFraction T (- ellipse (0, 0.3, 0.1, 0.1)) InitFraction T1 (- ellipse (0, 0.3, 0.1, 0.1)) AdaptGradient { istep = 1 } { cmax = 1e-3 minlevel = 4 maxlevel = (x < 0.25 ? 6 : 7) } T1 OutputScalarSum { istep = 1 end = 0.8 } srt { v = T } OutputScalarSum { istep = 1 end = 0.8 } srt1 { v = T1 } OutputSimulation { step = 0.2 } stdout EventScript { step = 0.2 } { echo "Save stdout { format = Gnuplot }" } EventScript { start = 1.2 } { echo "Clear" cat vectors.gfv echo "Save vectors.gnu { format = Gnuplot }" } } GfsBox { left = Boundary { BcDirichlet U 1 BcDirichlet V 0 } top = BoundaryOutflow } gerris-snapshot-131206/test/axiadvection/vectors.gfv0000644000175100017510000000060012250371171017504 00000000000000# GfsView 2D View { tx = -0.0177224 ty = -0.490634 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 22.0083 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Vectors { r = 0 g = 0 b = 0 shading = Constant maxlevel = 4 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } U V { scale = 0.07499 use_scalar = 0 } gerris-snapshot-131206/test/rotate/0000755000175100017510000000000012250371672014225 500000000000000gerris-snapshot-131206/test/rotate/n1-5.gnu0000644000175100017510000000051512250371172015334 00000000000000 0.5 0.0533103 0.00199978 0.286659 -3.12192e-08 0.00199978 0.75 0.176083 0.00199978 0.5 0.0738005 0.00199978 0.942015 0.25 0.00199978 0.75 0.190921 0.00199978 -0.75 -0.190921 0.00199978 -0.942015 -0.25 0.00199978 -0.5 -0.0738005 0.00199978 -0.75 -0.176083 0.00199978 -0.286659 -3.12192e-08 0.00199978 -0.5 -0.0533103 0.00199978 gerris-snapshot-131206/test/rotate/rotate.gfs0000644000175100017510000000714712250371172016150 00000000000000# Title: Rotation of a straight interface # # Description: # # A straight interface is advected by a pure shear flow. The exact # solution is simply a rotation of the interface around the center of # the box. Note that both the interface and the velocity field should # be described exactly by a second-order method. # # Figure \ref{evolution} illustrates what happens when using a VOF # scheme to follow the interface. The green segments are the # VOF-reconstructed interface obtained when using a "naive" Eulerian # PLIC method. The red segments are the VOF-reconstructed interface # obtained when using a "multiband" Eulerian PLIC method (with $n = 4$ # bands). # # Figure \ref{error} illustrates the evolution of the error with # time. For $t=1$ the interface is at 45 degrees and the errors in # fluxes cancel out exactly. # # \begin{figure}[htbp] # \caption{\label{evolution}Evolution of the VOF interface (green $n = # 1$, red $n = 4$) in a shear flow. (a) $t=0$, (b) $t=1$, (c) $t=2$, # (d) $t=5$.} # \begin{center} # \begin{tabular}{cc} # (a) \includegraphics[width=0.45\hsize]{rotate-0.eps} & # (b) \includegraphics[width=0.45\hsize]{rotate-1.eps} \\ # (c) \includegraphics[width=0.45\hsize]{rotate-2.eps} & # (d) \includegraphics[width=0.45\hsize]{rotate-5.eps} # \end{tabular} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Volume fraction error as a function of time.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: gerris2D rotate.gfs # Version: 110920 # Required files: rotate.gfv cells.gfv error.ref n1-0.gnu n1-1.gnu n1-2.gnu n1-5.gnu error.n1 # Running time: 1 second # Generated files: error.eps rotate-0.eps rotate-1.eps rotate-2.eps rotate-5.eps # 1 0 GfsAdvection GfsBox GfsGEdge {} { PhysicalParams { L = 2. } Refine 3 VariableTracerVOFHeight T Init {} { U = y } # fixme: 1e-9 to circumvent a bug in GfsView InitFraction T (x - 1e-9) Variable Tref InitFraction { istep = 1 } Tref (x - t*y) OutputErrorNorm { istep = 1 } error { v = T } { s = Tref } Time { end = 5 } GModule gfsview OutputScalarSum { istep = 1 } t { v = T } OutputView { step = 1 } rotate-%g.gnu { format = Gnuplot } rotate.gfv OutputView { start = end } cells.gnu { format = Gnuplot } cells.gfv EventScript { start = end } { gnuplot < "/dev/stderr"; exit (1); }}' < t ; then : else status=$GFS_STOP; fi paste error error.ref > tmp if awk '{ if ($9 > $20) { print $3,$9,$20 > "/dev/stderr" exit (1); } }' < tmp; then : else status=$GFS_STOP; fi exit $status } } GfsBox { left = Boundary { BcDirichlet U y BcAngle T (90. + atan2(1.,t)*180./M_PI) } right = Boundary { BcDirichlet U y BcAngle T (90. - atan2(1.,t)*180./M_PI) } top = Boundary { BcDirichlet U y BcAngle T (180. - atan2(1.,t)*180./M_PI) } bottom = Boundary { BcDirichlet U y BcAngle T atan2(1.,t)*180./M_PI } } gerris-snapshot-131206/test/rotate/n1-2.gnu0000644000175100017510000000066512250371172015337 00000000000000 0.25 0.102404 0.00199978 0.0451919 -3.12192e-08 0.00199978 0.451225 0.25 0.00199978 0.25 0.145773 0.00199978 0.75 0.360791 0.00199978 0.520162 0.25 0.00199978 0.962748 0.5 0.00199978 0.75 0.38031 0.00199978 -0.75 -0.380309 0.00199978 -0.962748 -0.5 0.00199978 -0.520162 -0.25 0.00199978 -0.75 -0.360791 0.00199978 -0.25 -0.145773 0.00199978 -0.451225 -0.25 0.00199978 -0.045192 -3.12192e-08 0.00199978 -0.25 -0.102404 0.00199978 gerris-snapshot-131206/test/rotate/error.ref0000644000175100017510000000660412250371172015775 00000000000000T time: 0 first: 5.000e-10 second: 1.414e-09 infty: 4.000e-09 bias: -5.000e-10 T time: 0.125 first: 5.000e-10 second: 1.414e-09 infty: 4.000e-09 bias: -5.000e-10 T time: 0.25 first: 5.000e-10 second: 1.414e-09 infty: 4.000e-09 bias: -5.000e-10 T time: 0.375 first: 5.086e-05 second: 2.035e-04 infty: 8.138e-04 bias: -5.000e-10 T time: 0.5 first: 5.000e-10 second: 1.414e-09 infty: 4.000e-09 bias: -5.000e-10 T time: 0.625 first: 4.033e-04 second: 1.400e-03 infty: 5.525e-03 bias: -5.000e-10 T time: 0.75 first: 1.371e-04 second: 3.979e-04 infty: 1.348e-03 bias: -5.000e-10 T time: 0.875 first: 6.701e-04 second: 2.154e-03 infty: 8.447e-03 bias: -5.000e-10 T time: 1 first: 5.000e-10 second: 1.414e-09 infty: 4.000e-09 bias: -5.000e-10 T time: 1.14286 first: 3.836e-04 second: 1.436e-03 infty: 7.813e-03 bias: -4.375e-10 T time: 1.26531 first: 3.887e-04 second: 1.053e-03 infty: 5.104e-03 bias: -3.939e-10 T time: 1.38776 first: 4.070e-04 second: 1.153e-03 infty: 5.603e-03 bias: -3.681e-10 T time: 1.5102 first: 4.428e-04 second: 1.268e-03 infty: 5.839e-03 bias: -3.363e-10 T time: 1.63265 first: 5.203e-04 second: 1.532e-03 infty: 7.172e-03 bias: -3.099e-10 T time: 1.7551 first: 4.881e-04 second: 1.275e-03 infty: 4.447e-03 bias: -2.856e-10 T time: 1.87755 first: 4.803e-04 second: 1.220e-03 infty: 3.700e-03 bias: -2.657e-10 T time: 2 first: 3.398e-04 second: 9.968e-04 infty: 3.466e-03 bias: -2.500e-10 T time: 2.14286 first: 3.390e-04 second: 9.525e-04 infty: 3.753e-03 bias: -2.345e-10 T time: 2.26531 first: 3.703e-04 second: 1.053e-03 infty: 4.236e-03 bias: -2.209e-10 T time: 2.38776 first: 4.604e-04 second: 1.270e-03 infty: 4.845e-03 bias: -2.099e-10 T time: 2.5102 first: 5.059e-04 second: 1.433e-03 infty: 5.503e-03 bias: -1.993e-10 T time: 2.63265 first: 5.547e-04 second: 1.569e-03 infty: 6.154e-03 bias: -1.894e-10 T time: 2.7551 first: 5.894e-04 second: 1.696e-03 infty: 6.763e-03 bias: -1.815e-10 T time: 2.87755 first: 6.486e-04 second: 1.931e-03 infty: 7.299e-03 bias: -1.737e-10 T time: 3 first: 6.672e-04 second: 2.175e-03 infty: 7.737e-03 bias: -1.660e-10 T time: 3.14286 first: 7.199e-04 second: 2.179e-03 infty: 8.098e-03 bias: -1.578e-10 T time: 3.26531 first: 7.679e-04 second: 2.171e-03 infty: 8.282e-03 bias: -1.525e-10 T time: 3.38776 first: 8.314e-04 second: 2.234e-03 infty: 8.340e-03 bias: -1.473e-10 T time: 3.5102 first: 8.777e-04 second: 2.313e-03 infty: 8.274e-03 bias: -1.421e-10 T time: 3.63265 first: 9.065e-04 second: 2.403e-03 infty: 8.087e-03 bias: -1.370e-10 T time: 3.7551 first: 8.989e-04 second: 2.460e-03 infty: 9.211e-03 bias: -1.319e-10 T time: 3.87755 first: 8.520e-04 second: 2.486e-03 infty: 1.017e-02 bias: -1.269e-10 T time: 4 first: 7.926e-04 second: 2.510e-03 infty: 1.076e-02 bias: -1.250e-10 T time: 4.14286 first: 7.380e-04 second: 2.365e-03 infty: 9.741e-03 bias: -1.228e-10 T time: 4.28571 first: 6.845e-04 second: 2.231e-03 infty: 8.534e-03 bias: -1.188e-10 T time: 4.42857 first: 6.622e-04 second: 2.125e-03 infty: 7.437e-03 bias: -1.149e-10 T time: 4.57143 first: 6.723e-04 second: 2.098e-03 infty: 7.713e-03 bias: -1.111e-10 T time: 4.71429 first: 6.811e-04 second: 2.100e-03 infty: 8.069e-03 bias: -1.075e-10 T time: 4.85714 first: 7.009e-04 second: 2.155e-03 infty: 8.494e-03 bias: -1.040e-10 T time: 5 first: 7.189e-04 second: 2.223e-03 infty: 8.976e-03 bias: -1.007e-10 gerris-snapshot-131206/test/rotate/cells.gfv0000644000175100017510000000130612250371172015746 00000000000000# GfsView 2D View { tx = 0.0172595 ty = -0.00356258 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 23.9229 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Boundaries { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } Vectors { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } U V { scale = 0.114 use_scalar = 0 } Cells { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } gerris-snapshot-131206/test/rotate/rotate.gfv0000644000175100017510000000072212250371172016143 00000000000000# GfsView 2D View { tx = 0.0172595 ty = -0.00356258 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 23.9229 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } VOF { r = 0.00114443 g = 0 b = 1 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 3 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } T { reversed = 0 use_scalar = 0 draw_edges = 0 interpolate = 0 } gerris-snapshot-131206/test/rotate/n1-0.gnu0000644000175100017510000000041212250371172015323 00000000000000 -9.49269e-09 1 0.00199978 -9.49269e-09 0.75 0.00199978 -9.49269e-09 0.5 0.00199978 -9.49269e-09 0.25 0.00199978 -9.49269e-09 -3.12192e-08 0.00199978 -9.49269e-09 -0.25 0.00199978 -9.49269e-09 -0.5 0.00199978 -9.49269e-09 -0.75 0.00199978 -9.49269e-09 -1 0.00199978 gerris-snapshot-131206/test/rotate/n1-1.gnu0000644000175100017510000000041212250371172015324 00000000000000 0.992188 1 0.00199978 0.757812 0.75 0.00199978 0.75 0.75 0.00199978 0.5 0.5 0.00199978 0.25 0.25 0.00199978 -9.49269e-09 -3.12192e-08 0.00199978 -0.25 -0.25 0.00199978 -0.5 -0.5 0.00199978 -0.75 -0.75 0.00199978 -0.757813 -0.75 0.00199978 -0.992187 -1 0.00199978 gerris-snapshot-131206/test/rotate/error.n10000644000175100017510000000660412250371172015537 00000000000000T time: 0 first: 5.000e-10 second: 1.414e-09 infty: 4.000e-09 bias: -5.000e-10 T time: 0.125 first: 5.000e-10 second: 1.414e-09 infty: 4.000e-09 bias: -5.000e-10 T time: 0.25 first: 5.000e-10 second: 1.414e-09 infty: 4.000e-09 bias: -5.000e-10 T time: 0.375 first: 8.138e-04 second: 3.255e-03 infty: 1.302e-02 bias: -5.000e-10 T time: 0.5 first: 5.000e-10 second: 1.414e-09 infty: 4.000e-09 bias: -5.000e-10 T time: 0.625 first: 1.639e-03 second: 4.677e-03 infty: 1.484e-02 bias: -5.000e-10 T time: 0.75 first: 2.140e-03 second: 6.184e-03 infty: 2.070e-02 bias: -5.000e-10 T time: 0.875 first: 3.058e-03 second: 7.483e-03 infty: 2.283e-02 bias: -5.000e-10 T time: 1 first: 5.000e-10 second: 1.414e-09 infty: 4.000e-09 bias: -5.000e-10 T time: 1.14286 first: 3.034e-03 second: 7.105e-03 infty: 2.567e-02 bias: -4.375e-10 T time: 1.26531 first: 4.390e-03 second: 9.656e-03 infty: 2.494e-02 bias: -3.858e-10 T time: 1.38776 first: 4.400e-03 second: 1.108e-02 infty: 3.397e-02 bias: -3.704e-10 T time: 1.5102 first: 5.405e-03 second: 1.383e-02 infty: 3.758e-02 bias: -3.350e-10 T time: 1.63265 first: 6.041e-03 second: 1.515e-02 infty: 4.918e-02 bias: -3.076e-10 T time: 1.7551 first: 6.435e-03 second: 1.711e-02 infty: 6.060e-02 bias: -2.819e-10 T time: 1.87755 first: 7.389e-03 second: 2.037e-02 infty: 7.169e-02 bias: -2.553e-10 T time: 2 first: 8.031e-03 second: 2.359e-02 infty: 8.221e-02 bias: -2.500e-10 T time: 2.14286 first: 8.514e-03 second: 2.528e-02 infty: 9.353e-02 bias: -2.450e-10 T time: 2.26531 first: 8.419e-03 second: 2.562e-02 infty: 1.021e-01 bias: -2.303e-10 T time: 2.38776 first: 8.615e-03 second: 2.597e-02 infty: 1.096e-01 bias: -2.158e-10 T time: 2.5102 first: 9.431e-03 second: 2.678e-02 infty: 1.160e-01 bias: -2.018e-10 T time: 2.63265 first: 1.004e-02 second: 2.827e-02 infty: 1.214e-01 bias: -1.884e-10 T time: 2.7551 first: 1.037e-02 second: 3.025e-02 infty: 1.256e-01 bias: -1.754e-10 T time: 2.87755 first: 1.049e-02 second: 3.210e-02 infty: 1.289e-01 bias: -1.648e-10 T time: 3 first: 1.042e-02 second: 3.368e-02 infty: 1.313e-01 bias: -1.567e-10 T time: 3.14286 first: 1.064e-02 second: 3.538e-02 infty: 1.359e-01 bias: -1.486e-10 T time: 3.26531 first: 1.147e-02 second: 3.653e-02 infty: 1.464e-01 bias: -1.425e-10 T time: 3.38776 first: 1.224e-02 second: 3.750e-02 infty: 1.523e-01 bias: -1.366e-10 T time: 3.5102 first: 1.292e-02 second: 3.836e-02 infty: 1.540e-01 bias: -1.307e-10 T time: 3.63265 first: 1.350e-02 second: 3.925e-02 infty: 1.517e-01 bias: -1.250e-10 T time: 3.7551 first: 1.409e-02 second: 4.041e-02 infty: 1.459e-01 bias: -1.250e-10 T time: 3.87755 first: 1.475e-02 second: 4.192e-02 infty: 1.377e-01 bias: -1.250e-10 T time: 4 first: 1.547e-02 second: 4.377e-02 infty: 1.274e-01 bias: -1.250e-10 T time: 4.14286 first: 1.622e-02 second: 4.611e-02 infty: 1.449e-01 bias: -1.250e-10 T time: 4.28571 first: 1.673e-02 second: 4.833e-02 infty: 1.656e-01 bias: -1.250e-10 T time: 4.42857 first: 1.701e-02 second: 5.032e-02 infty: 1.822e-01 bias: -1.250e-10 T time: 4.57143 first: 1.708e-02 second: 5.202e-02 infty: 1.948e-01 bias: -1.250e-10 T time: 4.71429 first: 1.696e-02 second: 5.341e-02 infty: 2.034e-01 bias: -1.250e-10 T time: 4.85714 first: 1.666e-02 second: 5.447e-02 infty: 2.082e-01 bias: -1.250e-10 T time: 5 first: 1.620e-02 second: 5.519e-02 infty: 2.092e-01 bias: -1.250e-10 gerris-snapshot-131206/test/wannier/0000755000175100017510000000000012250371674014374 500000000000000gerris-snapshot-131206/test/wannier/bipolar/0000755000175100017510000000000012250371674016024 500000000000000gerris-snapshot-131206/test/wannier/bipolar/error.ref0000644000175100017510000000024012250371172017560 000000000000002 8.531e-03 1.052e-02 2.864e-02 3 2.716e-03 3.181e-03 8.800e-03 4 7.189e-04 8.553e-04 2.531e-03 5 1.945e-04 2.290e-04 6.832e-04 6 5.043e-05 5.930e-05 2.493e-04 gerris-snapshot-131206/test/wannier/bipolar/mesh.gfv0000644000175100017510000000053412250371172017377 00000000000000# GfsView 2D View { tx = -0.278679 ty = -3.04114 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 33.5906 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Cells { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } gerris-snapshot-131206/test/wannier/bipolar/bipolar.sh0000644000175100017510000000263312250371172017725 00000000000000if test x$donotrun != xtrue; then for level in 2 3 4 5 6; do if gerris2D -DLEVEL=$level $1; then : else exit 1 fi done > error fi # fixme: for the moment GfsView doesn't do coordinate transformations, # but the Gnuplot output does if echo "Save mesh.gnu { format = Gnuplot }" | \ gfsview-batch2D end-3.gfs mesh.gfv; then : else exit 1 fi if gnuplot < 1e-6: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/wannier/bipolar/bipolar.gfs0000644000175100017510000000742412250371172020075 00000000000000# Title: Flow between eccentric cylinders using bipolar coordinates # # Description: # # Same case as before but using \htmladdnormallinkfoot{bipolar # coordinates}{http://en.wikipedia.org/wiki/Bipolar\_coordinates} to # map the rectangular computational domain to the circular boundaries # of the physical domain. # # With these coordinates, solid embedded boundaries are not required # and the number of grid points across the gap is constant (Figure # \ref{mesh}). This markedly improves the convergence rate compared to # the case using embedded solid boundaries (Figure \ref{convergence}). # # Note also that this convergence can only be obtained when including # the non-trivial viscous metric terms induced by the coordinate # transformation. # # \begin{figure}[htbp] # \caption{\label{mesh}Bipolar computational mesh for Stokes flow # between eccentric cylinders.} # \begin{center} # \includegraphics[width=\hsize]{mesh.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{convergence}Convergence of the maximum and RMS # errors on velocity magnitude toward the analytical solution.} # \begin{center} # \includegraphics[width=\hsize]{convergence.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh bipolar.sh bipolar.gfs # Version: 111108 # Required files: bipolar.sh error.ref mesh.gfv # Running time: 2 minutes # Generated files: convergence.eps mesh.eps # 8 8 GfsSimulation GfsBox GfsGEdge { x = 0.5 y = 0.5 } { # GModule hypre Time { end = 100 } # Bipolar coordinates. see http://en.wikipedia.org/wiki/Bipolar_coordinates Metric M { x = sinh(rx/2. + 1.)/(cosh(rx/2. + 1.) - cos (M_PI*ry/4.)) y = sin(M_PI*ry/4.)/(cosh(rx/2. + 1.) - cos (M_PI*ry/4.)) } Refine LEVEL ApproxProjectionParams { tolerance = 1e-6 } AdvectionParams { scheme = none } SourceViscosity 1. Global { // The radii R1,R2 and center positions X1,X2 below // correspond to the extent of the computational domain // i.e. tau=rx/2+1 in [1:1.5] // and sigma=pi*ry/4 in [0:2*pi] #define R1 (1./sinh(1.5)) #define R2 (1./sinh(1.)) #define X1 (1./tanh(1.5)) #define X2 (1./tanh(1.)) #define ECC (X2 - X1) #include "../wannier.c" } EventStop { step = 1e-2 } U 1e-4 DU # OutputProjectionStats { istep = 1 } stderr # OutputDiffusionStats { istep = 1 } stderr # OutputScalarNorm { istep = 1 } stderr { v = DU } OutputScalarNorm { istep = 1 } du { v = DU } # Note that the U and V components are defined in the "normalised # basis" so that U^2+V^2 is independent from the basis (which is why # we chose to compute the error on the norm of the velocity rather # than on individual components). OutputErrorNorm { start = end } { awk '{ print LEVEL,$5,$7,$9 }' } { v = Velocity } { s = { double p, u, v; // we need to rotate coordinates by 90 degrees psiuv (y, x - X2, R1, R2, ECC, 1., 0., &u, &v, &p); return sqrt (u*u + v*v); } v = EU } OutputSimulation { start = end } end-LEVEL.gfs } GfsBox { left = Boundary { BcDirichlet V 0 } right = Boundary { BcDirichlet V 1 } } GfsBox { left = Boundary { BcDirichlet V 0 } right = Boundary { BcDirichlet V 1 } } GfsBox { left = Boundary { BcDirichlet V 0 } right = Boundary { BcDirichlet V 1 } } GfsBox { left = Boundary { BcDirichlet V 0 } right = Boundary { BcDirichlet V 1 } } GfsBox { left = Boundary { BcDirichlet V 0 } right = Boundary { BcDirichlet V 1 } } GfsBox { left = Boundary { BcDirichlet V 0 } right = Boundary { BcDirichlet V 1 } } GfsBox { left = Boundary { BcDirichlet V 0 } right = Boundary { BcDirichlet V 1 } } GfsBox { left = Boundary { BcDirichlet V 0 } right = Boundary { BcDirichlet V 1 } } 1 2 top 2 3 top 3 4 top 4 5 top 5 6 top 6 7 top 7 8 top 8 1 top gerris-snapshot-131206/test/wannier/wannier.sh0000644000175100017510000000216412250371172016307 00000000000000if test x$donotrun != xtrue; then for level in 4 5 6 7 8; do if gerris2D -DLEVEL=$level $1; then : else exit 1 fi done > error fi if echo "Save streamlines.eps { format = EPS line_width = 0.5 }" | \ gfsview-batch2D end-8.gfs streamlines.gfv; then : else exit 1 fi if gnuplot < 1e-6: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/wannier/streamlines.gfv0000644000175100017510000000112512250371172017336 00000000000000# GfsView 2D View { tx = -0.0160296 ty = -0.0799081 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 18.2741 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Solid { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } psi(x,y-(1./tanh(1.)-1./tanh(1.5))) { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 27 } gerris-snapshot-131206/test/wannier/stretch/0000755000175100017510000000000012250371674016050 500000000000000gerris-snapshot-131206/test/wannier/stretch/streamlines.gfv0000644000175100017510000000112712250371172021014 00000000000000# GfsView 2D View { tx = -0.0160296 ty = -0.0799081 sx = 1 sy = 0.5 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 18.2741 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Solid { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } psi(x,y-(1./tanh(1.)-1./tanh(1.5))) { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 27 } gerris-snapshot-131206/test/wannier/stretch/error.ref0000644000175100017510000000024012250371172017604 000000000000004 1.457e-02 1.896e-02 5.561e-02 5 6.077e-03 8.005e-03 2.273e-02 6 2.034e-03 2.832e-03 1.559e-02 7 5.993e-04 8.650e-04 7.207e-03 8 1.807e-04 2.591e-04 2.352e-03 gerris-snapshot-131206/test/wannier/stretch/stretch.gfs0000644000175100017510000000451412250371172020142 00000000000000# Title: Flow between eccentric cylinders on a stretched grid # # Description: # # Here we test that the Wannier solution is recovered on a grid # stretched in one direction. This validates the combination of # stretched grids and embedded solid boundaries with Dirichlet # conditions. # # \begin{figure}[htbp] # \caption{\label{convergence}Convergence of the maximum and RMS # errors on velocity magnitude toward the analytical solution.} # \begin{center} # \includegraphics[width=\hsize]{convergence.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../wannier.sh stretch.gfs # Version: 120229 # Required files: error.ref streamlines.gfv # Running time: 1 minute # Generated files: convergence.eps # The strange choices for radii R1,R2 and eccentricity ECC come from # the 'bipolar' variant Define R1 (1./sinh(1.5)) Define R2 (1./sinh(1.)) Define X1 (1./tanh(1.5)) Define X2 (1./tanh(1.)) Define ECC (X2 - X1) 2 1 GfsSimulation GfsBox GfsGEdge { y = -0.5 } { MetricStretch {} { sy = 0.5 } PhysicalParams { L = 2.5 } # Upper bound on time, it should converge much before this Time { end = 100 } Refine LEVEL Solid (- ellipse (0.,ECC,R2,R2)) Solid (ellipse (0.,0.,R1,R1)) ApproxProjectionParams { tolerance = 1e-6 } AdvectionParams { scheme = none } SourceViscosity 1 # Fixed outer cylinder and rotating inner cylinder (tangential velocity unity) SurfaceBc U Dirichlet (x*x + y*y > 1.5*R1*R1 ? 0. : - ay/R1) SurfaceBc V Dirichlet (x*x + y*y > 1.5*R1*R1 ? 0. : ax/R1) # Stop when stationnary EventStop { step = 1e-2 } U 1e-4 DU Global { #include "../wannier.c" double psi (double x, double y) { double p, u, v; psiuv (x, y, R1, R2, ECC, 1., 0., &u, &v, &p); return p; } double ux (double x, double y) { double p, u, v; psiuv (x, y, R1, R2, ECC, 1., 0., &u, &v, &p); return u; } double uy (double x, double y) { double p, u, v; psiuv (x, y, R1, R2, ECC, 1., 0., &u, &v, &p); return v; } } OutputScalarNorm { istep = 1 } du { v = DU } OutputErrorNorm { start = end } { awk '{ print LEVEL,$5,$7,$9 }' } { v = Velocity } { s = { double p, u, v; psiuv (x, y - ECC, R1, R2, ECC, 1., 0., &u, &v, &p); return sqrt (u*u + v*v); } v = EU } OutputSimulation { start = end } end-LEVEL.gfs } GfsBox {} GfsBox {} 1 2 top gerris-snapshot-131206/test/wannier/error.ref0000644000175100017510000000030012250371172016125 000000000000004 2.506e-02 3.268e-02 7.832e-02 5 1.231e-02 1.531e-02 3.725e-02 6 4.807e-03 5.829e-03 1.685e-02 7 1.667e-03 2.026e-03 1.016e-02 8 4.733e-04 5.815e-04 4.216e-03 9 1.494e-04 1.880e-04 1.630e-03 gerris-snapshot-131206/test/wannier/wannier.c0000644000175100017510000000306712250371172016122 00000000000000/* Analytical solution from: "A contribution to the hydrodynamics of lubrication" G.H. Wannier - Quarterly of Appl. Math., vol VIII, No.1, April 1950 */ void psiuv (double x, double y, double r1, double r2, double e, double v1, double v2, double * ux, double * uy, double * psi) { double d1 = (r2*r2 - r1*r1)/(2.*e) - e/2.; double d2 = d1 + e; double s = sqrt((r2 - r1 - e)*(r2 - r1 + e)*(r2 + r1 + e)*(r2 + r1 - e))/(2.*e); double l1 = log((d1 + s)/(d1 - s)); double l2 = log((d2 + s)/(d2 - s)); double den = (r2*r2 + r1*r1)*(l1 - l2) - 4.*s*e; double curlb = 2.*(d2*d2 - d1*d1)*(r1*v1 + r2*v2)/((r2*r2 + r1*r1)*den) + r1*r1*r2*r2*(v1/r1 - v2/r2)/(s*(r1*r1 + r2*r2)*(d2 - d1)); double A = -0.5*(d1*d2-s*s)*curlb; double B = (d1 + s)*(d2 + s)*curlb; double C = (d1 - s)*(d2 - s)*curlb; double D = (d1*l2 - d2*l1)*(r1*v1 + r2*v2)/den - 2.*s*((r2*r2 - r1*r1)/(r2*r2 + r1*r1))*(r1*v1 + r2*v2)/den - r1*r1*r2*r2*(v1/r1 - v2/r2)/((r1*r1 + r2*r2)*e); double E = 0.5*(l1 - l2)*(r1*v1 + r2*v2)/den; double F = e*(r1*v1 + r2*v2)/den; y += d2; double spy = s + y; double smy = s - y; double zp = x*x + spy*spy; double zm = x*x + smy*smy; double l = log(zp/zm); double zr = 2.*(spy/zp + smy/zm); *psi = A*l + B*y*spy/zp + C*y*smy/zm + D*y + E*(x*x + y*y + s*s) + F*y*l; *ux = -A*zr - B*((s + 2.*y)*zp - 2.*spy*spy*y)/(zp*zp) - C*((s - 2.*y)*zm + 2.*smy*smy*y)/(zm*zm) - D - E*2.*y - F*(l + y*zr); *uy = -A*8.*s*x*y/(zp*zm) - B*2.*x*y*spy/(zp*zp) - C*2.*x*y*smy/(zm*zm) + E*2.*x - F*8.*s*x*y*y/(zp*zm); } gerris-snapshot-131206/test/wannier/wannier.gfs0000644000175100017510000000616412250371172016460 00000000000000# Title: Creeping Couette flow between eccentric cylinders # # Description: # # This test case is similar to \ref{couette} but with eccentric # cylinders. While the concentric cylinders case can be reduced to a # one-dimensional equation in polar coordinates (the radial velocity # component vanishes), this is not the case for eccentric # cylinders. For this problem (also known as "journal bearing" flow), # an exact analytical solution in the limit of Stokes flows was # obtained by Wannier using conformal mapping \cite{wannier1950}. # # The result of a computation using embedded solid boundaries is # illustrated in Figure \ref{streamlines}. The inner cylinder is # rotating while the outer cylinder is fixed. Note the weak # recirculation in the top part of the gap. # # Figure \ref{convergence} illustrates the rate of convergence with # spatial resolution toward the analytical solution of Wannier. # # \begin{figure}[htbp] # \caption{\label{streamlines}Streamlines for Stokes flow between # eccentric cylinders.} # \begin{center} # \includegraphics[width=0.8\hsize]{streamlines.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{convergence}Convergence of the maximum and RMS # errors on velocity magnitude toward the analytical solution.} # \begin{center} # \includegraphics[width=\hsize]{convergence.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh wannier.sh wannier.gfs # Version: 111108 # Required files: wannier.c wannier.sh error.ref streamlines.gfv # Running time: 1 minute # Generated files: convergence.eps streamlines.eps # The strange choices for radii R1,R2 and eccentricity ECC come from # the 'bipolar' variant Define R1 (1./sinh(1.5)) Define R2 (1./sinh(1.)) Define X1 (1./tanh(1.5)) Define X2 (1./tanh(1.)) Define ECC (X2 - X1) 1 0 GfsSimulation GfsBox GfsGEdge {} { PhysicalParams { L = 2.5 } # Upper bound on time, it should converge much before this Time { end = 100 } Refine LEVEL Solid (- ellipse (0.,ECC,R2,R2)) Solid (ellipse (0.,0.,R1,R1)) ApproxProjectionParams { tolerance = 1e-6 } AdvectionParams { scheme = none } SourceViscosity 1 # Fixed outer cylinder and rotating inner cylinder (tangential velocity unity) SurfaceBc U Dirichlet (x*x + y*y > 1.5*R1*R1 ? 0. : - ay/R1) SurfaceBc V Dirichlet (x*x + y*y > 1.5*R1*R1 ? 0. : ax/R1) # Stop when stationnary EventStop { step = 1e-2 } U 1e-4 DU Global { #include "wannier.c" double psi (double x, double y) { double p, u, v; psiuv (x, y, R1, R2, ECC, 1., 0., &u, &v, &p); return p; } double ux (double x, double y) { double p, u, v; psiuv (x, y, R1, R2, ECC, 1., 0., &u, &v, &p); return u; } double uy (double x, double y) { double p, u, v; psiuv (x, y, R1, R2, ECC, 1., 0., &u, &v, &p); return v; } } OutputScalarNorm { istep = 1 } du { v = DU } OutputErrorNorm { start = end } { awk '{ print LEVEL,$5,$7,$9 }' } { v = Velocity } { s = { double p, u, v; psiuv (x, y - ECC, R1, R2, ECC, 1., 0., &u, &v, &p); return sqrt (u*u + v*v); } v = EU } OutputSimulation { start = end } end-LEVEL.gfs } GfsBox {} gerris-snapshot-131206/test/parabola.sh0000755000175100017510000000003312250371662014762 00000000000000python -u test.py parabola gerris-snapshot-131206/test/lid.sh0000755000175100017510000000002612250371662013753 00000000000000python -u test.py lid gerris-snapshot-131206/test/shore/0000755000175100017510000000000012250371673014050 500000000000000gerris-snapshot-131206/test/shore/t220.csv0000644000175100017510000000374312250371172015175 00000000000000# "x(m)" "eta(m)" "u(m/s)" 805 0.13 -3.06266 795.3 0.14 -3.06756 785.6 0.16 -3.07667 775.9 0.19 -3.08857 766.2 0.23 -3.10258 756.5 0.27 -3.11589 746.8 0.32 -3.12920 737.1 0.39 -3.14180 727.4 0.45 -3.15371 717.7 0.5 -3.16491 708 0.55 -3.17472 698.3 0.6 -3.18452 688.6 0.66 -3.19363 678.9 0.72 -3.20343 669.2 0.78 -3.21254 659.5 0.84 -3.22024 649.8 0.91 -3.22795 640.1 0.98 -3.23425 630.4 1.05 -3.23915 620.7 1.13 -3.24335 611 1.22 -3.24545 601.3 1.31 -3.24756 591.6 1.41 -3.24896 581.9 1.5 -3.25036 572.2 1.6 -3.25036 562.5 1.69 -3.24966 552.8 1.79 -3.24826 543.1 1.89 -3.24545 533.4 1.99 -3.24125 523.7 2.1 -3.23635 514 2.21 -3.23005 504.3 2.33 -3.22304 494.6 2.45 -3.21674 484.9 2.56 -3.20974 475.2 2.68 -3.20063 465.5 2.79 -3.19013 455.8 2.91 -3.17822 446.1 3.02 -3.16631 436.4 3.13 -3.15301 426.7 3.27 -3.13760 417 3.44 -3.11939 407.3 3.6 -3.10118 397.6 3.74 -3.08437 387.9 3.85 -3.06826 378.2 3.97 -3.05005 368.5 4.13 -3.02904 358.8 4.31 -3.00593 349.1 4.47 -2.98282 339.4 4.62 -2.95901 329.7 4.76 -2.93310 320 4.93 -2.90368 310.3 5.1 -2.87356 300.6 5.26 -2.84275 290.9 5.42 -2.80983 281.2 5.6 -2.77131 271.5 5.79 -2.72929 261.8 5.97 -2.68587 252.1 6.15 -2.64385 242.4 6.32 -2.60113 232.7 6.5 -2.55630 223 6.7 -2.50868 213.3 6.91 -2.45825 203.6 7.11 -2.40853 193.9 7.3 -2.36090 184.2 7.49 -2.31188 174.5 7.71 -2.25585 164.8 7.96 -2.19282 155.1 8.19 -2.12838 145.4 8.39 -2.06815 135.7 8.57 -2.01213 126 8.74 -1.95610 116.3 8.92 -1.89727 106.6 9.12 -1.83213 96.9 9.34 -1.76000 87.2 9.58 -1.68296 77.5 9.83 -1.60522 67.8 10.08 -1.52258 58.1 10.33 -1.43573 48.4 10.56 -1.35099 38.7 10.77 -1.27185 29 10.95 -1.19621 19.3 11.17 -1.11287 9.6 11.42 -1.01482 -0.1 11.72 -0.90346 -9.8 12.01 -0.79000 -19.5 12.26 -0.68565 -29.2 12.48 -0.58984 -38.9 12.69 -0.49445 -48.6 12.93 -0.38772 -58.3 13.2 -0.26915 -68 13.49 -0.14455 -77.7 13.76 -0.02424 -87.4 14 0.08909 -97.1 14.24 0.20478 -106.8 14.52 0.33610 -116.5 14.83 0.48465 -126.2 15.14 0.63284 -135.9 15.39 0.75989 -145.6 15.58 0.86144 -155.3 15.7 0.93778 -165 15.78 0.98120 gerris-snapshot-131206/test/shore/t175.csv0000644000175100017510000000356712250371172015212 00000000000000# "x(m)" "eta(m)" "u(m/s)" 804.5 -0.86 -1.89 798.48 -0.87 -1.9 792.45 -0.9 -1.91 786.43 -0.92 -1.92 780.4 -0.95 -1.94 774.38 -0.98 -1.95 768.35 -1.01 -1.97 762.33 -1.04 -1.98 756.3 -1.07 -2 750.28 -1.1 -2.01 744.25 -1.13 -2.03 738.23 -1.16 -2.04 732.2 -1.19 -2.06 726.18 -1.23 -2.08 720.15 -1.26 -2.09 714.12 -1.3 -2.11 708.1 -1.33 -2.13 702.07 -1.37 -2.15 696.05 -1.41 -2.17 690.02 -1.45 -2.19 684 -1.48 -2.21 677.97 -1.52 -2.22 671.95 -1.56 -2.24 665.92 -1.61 -2.26 659.9 -1.65 -2.29 653.87 -1.69 -2.31 647.85 -1.74 -2.33 641.82 -1.79 -2.35 635.8 -1.83 -2.37 629.77 -1.88 -2.4 623.75 -1.93 -2.42 617.72 -1.98 -2.45 611.7 -2.04 -2.47 605.67 -2.09 -2.5 599.65 -2.15 -2.52 593.62 -2.2 -2.55 587.6 -2.26 -2.58 581.57 -2.32 -2.6 575.55 -2.38 -2.63 569.52 -2.45 -2.66 563.5 -2.51 -2.68 557.47 -2.58 -2.71 551.45 -2.65 -2.74 545.42 -2.72 -2.77 539.4 -2.79 -2.8 533.37 -2.87 -2.83 527.35 -2.94 -2.86 521.32 -3.02 -2.9 515.3 -3.1 -2.93 509.27 -3.17 -2.96 503.25 -3.26 -3 497.22 -3.35 -3.04 491.2 -3.44 -3.08 485.17 -3.54 -3.12 479.15 -3.64 -3.16 473.12 -3.75 -3.2 467.1 -3.85 -3.24 461.07 -3.96 -3.28 455.05 -4.08 -3.33 449.02 -4.19 -3.37 443 -4.32 -3.41 436.97 -4.44 -3.46 430.95 -4.57 -3.51 424.92 -4.69 -3.55 418.9 -4.83 -3.6 412.87 -4.98 -3.66 406.85 -5.13 -3.72 400.82 -5.3 -3.78 394.8 -5.47 -3.85 388.77 -5.64 -3.91 382.75 -5.82 -3.98 376.72 -6.02 -4.05 370.7 -6.21 -4.12 364.67 -6.42 -4.19 358.65 -6.63 -4.26 352.62 -6.86 -4.35 346.6 -7.1 -4.43 340.57 -7.34 -4.52 334.55 -7.61 -4.63 328.52 -7.9 -4.74 322.5 -8.21 -4.85 316.47 -8.52 -4.96 310.45 -8.86 -5.09 304.42 -9.23 -5.23 298.4 -9.61 -5.39 292.37 -10.04 -5.56 286.35 -10.49 -5.74 280.32 -10.99 -5.96 274.3 -11.54 -6.22 268.27 -12.15 -6.5 262.25 -12.84 -6.86 256.22 -13.61 -7.28 250.2 -14.52 -7.84 244.17 -15.6 -8.59 238.15 -16.88 -9.64 232.12 -18.29 -11.03 226.1 -19.53 -12.52 220.07 -20.39 -13.79 214.05 -20.94 -14.76 208.02 -21.23 -15.3 202 -21.35 -15.53 gerris-snapshot-131206/test/shore/shore.sh0000644000175100017510000000337212250371172015443 00000000000000levelmin=11 levelmax=14 if test x$donotrun != xtrue; then for i in `seq $levelmin 1 $levelmax`; do if gerris2D -DLEVEL=$i shore.gfs 2> log-$i; then : else exit 1 fi done fi if python < convergence; then : from check import * from sys import * for i in range($levelmin,$levelmax + 1): ref = Curve('t220.csv',1,2) sol = Curve('sim-' + str(i) + '-220.txt',1,8) diff = ref - sol print i,diff.norm1(),diff.normi() EOF else exit 1 fi if gnuplot < 0. or\ (Curve('convergence',1,3) - Curve('convergence.ref',1,3)).max() > 0.: exit(1) EOF else exit 1 figerris-snapshot-131206/test/shore/t160.csv0000644000175100017510000000354312250371172015176 00000000000000# "x(m)" "eta(m)" "u(m/s)" 815.04 -1.88 -1.06 808.46 -1.91 -1.06 801.89 -1.95 -1.05 795.31 -2 -1.05 788.74 -2.05 -1.04 782.16 -2.11 -1.04 775.58 -2.17 -1.03 769.01 -2.23 -1.02 762.43 -2.3 -1.01 755.85 -2.37 -1.01 749.28 -2.44 -1 742.7 -2.52 -0.99 736.13 -2.59 -0.98 729.55 -2.67 -0.97 722.97 -2.75 -0.95 716.4 -2.83 -0.94 709.82 -2.92 -0.92 703.24 -3.01 -0.91 696.67 -3.11 -0.89 690.09 -3.2 -0.87 683.52 -3.3 -0.86 676.94 -3.39 -0.84 670.36 -3.49 -0.82 663.79 -3.59 -0.8 657.21 -3.69 -0.78 650.63 -3.79 -0.76 644.06 -3.9 -0.74 637.48 -4.01 -0.72 630.91 -4.13 -0.69 624.33 -4.24 -0.67 617.75 -4.37 -0.64 611.18 -4.49 -0.61 604.6 -4.62 -0.58 598.02 -4.75 -0.55 591.45 -4.89 -0.51 584.87 -5.04 -0.47 578.3 -5.17 -0.44 571.72 -5.32 -0.4 565.14 -5.48 -0.35 558.57 -5.66 -0.3 551.99 -5.84 -0.24 545.41 -6.02 -0.18 538.84 -6.21 -0.12 532.26 -6.4 -0.06 525.69 -6.58 0 519.11 -6.78 0.06 512.53 -6.98 0.13 505.96 -7.18 0.2 499.38 -7.4 0.28 492.8 -7.62 0.36 486.23 -7.85 0.45 479.65 -8.1 0.55 473.08 -8.35 0.65 466.5 -8.6 0.75 459.92 -8.85 0.86 453.35 -9.12 0.97 446.77 -9.39 1.09 440.19 -9.67 1.22 433.62 -9.95 1.35 427.04 -10.24 1.49 420.47 -10.53 1.63 413.89 -10.82 1.77 407.31 -11.12 1.93 400.74 -11.42 2.09 394.16 -11.71 2.25 387.58 -12.01 2.41 381.01 -12.3 2.58 374.43 -12.59 2.75 367.86 -12.87 2.92 361.28 -13.15 3.1 354.7 -13.42 3.27 348.13 -13.68 3.45 341.55 -13.92 3.62 334.97 -14.16 3.79 328.4 -14.38 3.96 321.82 -14.59 4.13 315.25 -14.78 4.29 308.67 -14.97 4.45 302.09 -15.14 4.6 295.52 -15.29 4.76 288.94 -15.43 4.91 282.36 -15.56 5.05 275.79 -15.67 5.19 269.21 -15.77 5.33 262.64 -15.85 5.45 256.06 -15.93 5.58 249.48 -15.99 5.71 242.91 -16.05 5.82 236.33 -16.08 5.94 229.75 -16.1 6.04 223.18 -16.12 6.15 216.6 -16.13 6.25 210.03 -16.13 6.35 203.45 -16.12 6.45 196.87 -16.1 6.55 190.3 -16.06 6.64 183.72 -16 6.72 177.14 -15.95 6.8 170.57 -15.89 6.87 163.99 -15.83 6.93 157.42 -15.79 6.99 gerris-snapshot-131206/test/shore/init.cgd0000644000175100017510000004314712250371172015415 00000000000000# Initial water surface displacement from # http://isec.nacse.org/workshop/2004_cornell/data/benchmark_1.txt 1 x 1001 0 50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900 950 1000 1050 1100 1150 1200 1250 1300 1350 1400 1450 1500 1550 1600 1650 1700 1750 1800 1850 1900 1950 2000 2050 2100 2150 2200 2250 2300 2350 2400 2450 2500 2550 2600 2650 2700 2750 2800 2850 2900 2950 3000 3050 3100 3150 3200 3250 3300 3350 3400 3450 3500 3550 3600 3650 3700 3750 3800 3850 3900 3950 4000 4050 4100 4150 4200 4250 4300 4350 4400 4450 4500 4550 4600 4650 4700 4750 4800 4850 4900 4950 5000 5050 5100 5150 5200 5250 5300 5350 5400 5450 5500 5550 5600 5650 5700 5750 5800 5850 5900 5950 6000 6050 6100 6150 6200 6250 6300 6350 6400 6450 6500 6550 6600 6650 6700 6750 6800 6850 6900 6950 7000 7050 7100 7150 7200 7250 7300 7350 7400 7450 7500 7550 7600 7650 7700 7750 7800 7850 7900 7950 8000 8050 8100 8150 8200 8250 8300 8350 8400 8450 8500 8550 8600 8650 8700 8750 8800 8850 8900 8950 9000 9050 9100 9150 9200 9250 9300 9350 9400 9450 9500 9550 9600 9650 9700 9750 9800 9850 9900 9950 10000 10050 10100 10150 10200 10250 10300 10350 10400 10450 10500 10550 10600 10650 10700 10750 10800 10850 10900 10950 11000 11050 11100 11150 11200 11250 11300 11350 11400 11450 11500 11550 11600 11650 11700 11750 11800 11850 11900 11950 12000 12050 12100 12150 12200 12250 12300 12350 12400 12450 12500 12550 12600 12650 12700 12750 12800 12850 12900 12950 13000 13050 13100 13150 13200 13250 13300 13350 13400 13450 13500 13550 13600 13650 13700 13750 13800 13850 13900 13950 14000 14050 14100 14150 14200 14250 14300 14350 14400 14450 14500 14550 14600 14650 14700 14750 14800 14850 14900 14950 15000 15050 15100 15150 15200 15250 15300 15350 15400 15450 15500 15550 15600 15650 15700 15750 15800 15850 15900 15950 16000 16050 16100 16150 16200 16250 16300 16350 16400 16450 16500 16550 16600 16650 16700 16750 16800 16850 16900 16950 17000 17050 17100 17150 17200 17250 17300 17350 17400 17450 17500 17550 17600 17650 17700 17750 17800 17850 17900 17950 18000 18050 18100 18150 18200 18250 18300 18350 18400 18450 18500 18550 18600 18650 18700 18750 18800 18850 18900 18950 19000 19050 19100 19150 19200 19250 19300 19350 19400 19450 19500 19550 19600 19650 19700 19750 19800 19850 19900 19950 20000 20050 20100 20150 20200 20250 20300 20350 20400 20450 20500 20550 20600 20650 20700 20750 20800 20850 20900 20950 21000 21050 21100 21150 21200 21250 21300 21350 21400 21450 21500 21550 21600 21650 21700 21750 21800 21850 21900 21950 22000 22050 22100 22150 22200 22250 22300 22350 22400 22450 22500 22550 22600 22650 22700 22750 22800 22850 22900 22950 23000 23050 23100 23150 23200 23250 23300 23350 23400 23450 23500 23550 23600 23650 23700 23750 23800 23850 23900 23950 24000 24050 24100 24150 24200 24250 24300 24350 24400 24450 24500 24550 24600 24650 24700 24750 24800 24850 24900 24950 25000 25050 25100 25150 25200 25250 25300 25350 25400 25450 25500 25550 25600 25650 25700 25750 25800 25850 25900 25950 26000 26050 26100 26150 26200 26250 26300 26350 26400 26450 26500 26550 26600 26650 26700 26750 26800 26850 26900 26950 27000 27050 27100 27150 27200 27250 27300 27350 27400 27450 27500 27550 27600 27650 27700 27750 27800 27850 27900 27950 28000 28050 28100 28150 28200 28250 28300 28350 28400 28450 28500 28550 28600 28650 28700 28750 28800 28850 28900 28950 29000 29050 29100 29150 29200 29250 29300 29350 29400 29450 29500 29550 29600 29650 29700 29750 29800 29850 29900 29950 30000 30050 30100 30150 30200 30250 30300 30350 30400 30450 30500 30550 30600 30650 30700 30750 30800 30850 30900 30950 31000 31050 31100 31150 31200 31250 31300 31350 31400 31450 31500 31550 31600 31650 31700 31750 31800 31850 31900 31950 32000 32050 32100 32150 32200 32250 32300 32350 32400 32450 32500 32550 32600 32650 32700 32750 32800 32850 32900 32950 33000 33050 33100 33150 33200 33250 33300 33350 33400 33450 33500 33550 33600 33650 33700 33750 33800 33850 33900 33950 34000 34050 34100 34150 34200 34250 34300 34350 34400 34450 34500 34550 34600 34650 34700 34750 34800 34850 34900 34950 35000 35050 35100 35150 35200 35250 35300 35350 35400 35450 35500 35550 35600 35650 35700 35750 35800 35850 35900 35950 36000 36050 36100 36150 36200 36250 36300 36350 36400 36450 36500 36550 36600 36650 36700 36750 36800 36850 36900 36950 37000 37050 37100 37150 37200 37250 37300 37350 37400 37450 37500 37550 37600 37650 37700 37750 37800 37850 37900 37950 38000 38050 38100 38150 38200 38250 38300 38350 38400 38450 38500 38550 38600 38650 38700 38750 38800 38850 38900 38950 39000 39050 39100 39150 39200 39250 39300 39350 39400 39450 39500 39550 39600 39650 39700 39750 39800 39850 39900 39950 40000 40050 40100 40150 40200 40250 40300 40350 40400 40450 40500 40550 40600 40650 40700 40750 40800 40850 40900 40950 41000 41050 41100 41150 41200 41250 41300 41350 41400 41450 41500 41550 41600 41650 41700 41750 41800 41850 41900 41950 42000 42050 42100 42150 42200 42250 42300 42350 42400 42450 42500 42550 42600 42650 42700 42750 42800 42850 42900 42950 43000 43050 43100 43150 43200 43250 43300 43350 43400 43450 43500 43550 43600 43650 43700 43750 43800 43850 43900 43950 44000 44050 44100 44150 44200 44250 44300 44350 44400 44450 44500 44550 44600 44650 44700 44750 44800 44850 44900 44950 45000 45050 45100 45150 45200 45250 45300 45350 45400 45450 45500 45550 45600 45650 45700 45750 45800 45850 45900 45950 46000 46050 46100 46150 46200 46250 46300 46350 46400 46450 46500 46550 46600 46650 46700 46750 46800 46850 46900 46950 47000 47050 47100 47150 47200 47250 47300 47350 47400 47450 47500 47550 47600 47650 47700 47750 47800 47850 47900 47950 48000 48050 48100 48150 48200 48250 48300 48350 48400 48450 48500 48550 48600 48650 48700 48750 48800 48850 48900 48950 49000 49050 49100 49150 49200 49250 49300 49350 49400 49450 49500 49550 49600 49650 49700 49750 49800 49850 49900 49950 50000 0.001386879 0.001418557 0.001448675 0.001476851 0.001502653 0.001525595 0.001545127 0.001560637 0.001571436 0.001576752 0.001575726 0.0015674 0.001550705 0.001524456 0.001487337 0.001437888 0.001374497 0.001295378 0.001198562 0.00108188 0.000942942 0.000779122 0.000587533 0.000365013 0.000108095 -0.000187012 -0.000524455 -0.000908755 -0.001344846 -0.001838098 -0.002394354 -0.00301996 -0.003721805 -0.004507353 -0.005384687 -0.006362547 -0.007450373 -0.008658349 -0.009997448 -0.011479481 -0.013117144 -0.014924068 -0.016914873 -0.019105216 -0.021511848 -0.024152665 -0.027046767 -0.030214509 -0.033677557 -0.037458945 -0.041583128 -0.046076034 -0.050965122 -0.056279425 -0.062049605 -0.068307999 -0.075088659 -0.082427396 -0.090361815 -0.098931345 -0.10817727 -0.118142745 -0.128872819 -0.140414434 -0.152816431 -0.166129544 -0.180406381 -0.195701401 -0.212070878 -0.229572857 -0.248267096 -0.268215 -0.289479539 -0.312125157 -0.336217664 -0.361824121 -0.389012704 -0.417852558 -0.44841364 -0.480766537 -0.514982285 -0.55113216 -0.589287466 -0.629519299 -0.671898307 -0.716494437 -0.763376645 -0.812612645 -0.8642686 -0.918408824 -0.975095469 -1.034388211 -1.096343923 -1.161016343 -1.228455744 -1.298708591 -1.371817204 -1.447819424 -1.526748269 -1.608631608 -1.693491827 -1.781345512 -1.872203133 -1.966068741 -2.062939676 -2.162806291 -2.265651683 -2.371451433 -2.480173427 -2.59177757 -2.70621564 -2.823431106 -2.94335898 -3.06592569 -3.191048978 -3.318637827 -3.448592406 -3.58080405 -3.715155257 -3.851519724 -3.989762401 -4.129739578 -4.271298998 -4.414279999 -4.558513686 -4.703823128 -4.850023589 -4.996922778 -5.144321137 -5.292012151 -5.439782687 -5.58741336 -5.734678926 -5.881348704 -6.02718702 -6.171953678 -6.315404461 -6.457291647 -6.597364561 -6.735370141 -6.871053531 -7.004158697 -7.13442906 -7.261608157 -7.385440311 -7.505671328 -7.622049208 -7.73432487 -7.842252895 -7.945592275 -8.044107177 -8.137567719 -8.225750741 -8.308440589 -8.385429907 -8.456520381 -8.521523565 -8.580261612 -8.632568033 -8.678288437 -8.717281245 -8.749418381 -8.774585933 -8.792684782 -8.803631188 -8.807357334 -8.803811821 -8.792960111 -8.774784909 -8.74928648 -8.716482902 -8.676410242 -8.629122662 -8.574692438 -8.513209897 -8.444783276 -8.369538491 -8.287618787 -8.199184364 -8.104411852 -8.003493726 -7.896637634 -7.784065634 -7.666013357 -7.542729099 -7.414472831 -7.28151516 -7.144136223 -7.002624539 -6.857275816 -6.708391729 -6.55627867 -6.401246492 -6.243607241 -6.083673894 -5.921759116 -5.758174032 -5.593227037 -5.427222643 -5.26046037 -5.093233695 -4.925829065 -4.758524964 -4.591591061 -4.42528743 -4.259863844 -4.095559149 -3.932600726 -3.77120402 -3.611572165 -3.453895679 -3.298352239 -3.145106536 -2.994310197 -2.846101782 -2.700606845 -2.557938053 -2.418195373 -2.281466301 -2.147826147 -2.01733836 -1.890054895 -1.76601661 -1.645253691 -1.527786148 -1.413624219 -1.302768919 -1.195212528 -1.090939108 -0.989925023 -0.892139465 -0.797544971 -0.706097946 -0.617749174 -0.532444323 -0.450124438 -0.37072642 -0.2941835 -0.220425684 -0.149380187 -0.080971874 -0.015123622 0.048243274 0.109208742 0.167853593 0.224259202 0.278507202 0.330679203 0.38085653 0.429119979 0.475549594 0.520224462 0.563222526 0.604620415 0.644493293 0.682914725 0.719956554 0.755688801 0.790179575 0.823494994 0.855699125 0.886853934 0.917019246 0.946252721 0.974609831 1.002143855 1.028905882 1.054944815 1.08030739 1.105038199 1.129179719 1.152772344 1.175854426 1.19846232 1.220630429 1.242391253 1.263775447 1.284811872 1.305527654 1.325948243 1.346097472 1.365997618 1.385669461 1.40513235 1.424404255 1.443501836 1.462440499 1.481234451 1.499896764 1.518439428 1.536873406 1.555208689 1.573454347 1.591618579 1.609708764 1.627731507 1.645692682 1.663597478 1.681450441 1.699255512 1.717016065 1.734734946 1.752414505 1.770056627 1.787662769 1.805233984 1.82277095 1.840273998 1.857743134 1.875178066 1.892578223 1.909942775 1.927270656 1.944560578 1.961811051 1.979020396 1.996186764 2.013308145 2.030382385 2.047407193 2.064380161 2.081298763 2.098160374 2.114962276 2.131701664 2.148375657 2.164981307 2.181515598 2.197975461 2.214357776 2.230659377 2.246877059 2.26300758 2.27904767 2.294994031 2.310843342 2.326592264 2.342237442 2.35777551 2.373203091 2.388516803 2.403713262 2.41878908 2.433740874 2.448565264 2.463258875 2.477818341 2.492240309 2.506521436 2.520658395 2.534647874 2.54848658 2.562171241 2.575698605 2.589065444 2.602268555 2.615304762 2.628170916 2.640863898 2.65338062 2.665718025 2.677873093 2.689842836 2.701624304 2.713214585 2.724610805 2.735810131 2.746809772 2.757606981 2.768199051 2.778583325 2.788757189 2.798718078 2.808463476 2.817990916 2.827297982 2.83638231 2.845241588 2.853873559 2.862276021 2.870446825 2.878383883 2.886085162 2.893548687 2.900772544 2.907754877 2.914493892 2.920987859 2.927235105 2.933234026 2.938983077 2.944480781 2.949725724 2.954716558 2.959452001 2.963930838 2.968151923 2.972114175 2.975816582 2.979258201 2.982438159 2.985355651 2.98800994 2.990400364 2.992526325 2.9943873 2.995982835 2.997312547 2.998376124 2.999173324 2.999703978 2.999967986 2.999965321 2.999696026 2.999160217 2.998358077 2.997289863 2.995955903 2.994356594 2.992492403 2.990363869 2.987971598 2.985316269 2.982398627 2.979219488 2.975779735 2.972080318 2.968122258 2.96390664 2.959434617 2.954707406 2.949726292 2.944492623 2.939007812 2.933273336 2.927290733 2.921061605 2.914587616 2.907870488 2.900912004 2.893714009 2.886278402 2.878607142 2.870702244 2.862565779 2.854199872 2.845606703 2.836788504 2.827747559 2.818486204 2.809006824 2.799311854 2.789403774 2.779285116 2.768958452 2.758426404 2.747691633 2.736756847 2.72562479 2.714298252 2.702780057 2.691073071 2.679180194 2.667104362 2.654848547 2.642415751 2.629809013 2.617031396 2.604085999 2.590975945 2.577704385 2.564274497 2.550689483 2.536952567 2.523066996 2.509036039 2.494862982 2.480551132 2.466103811 2.451524357 2.436816124 2.421982477 2.407026795 2.391952467 2.376762891 2.361461475 2.346051632 2.330536781 2.314920348 2.299205759 2.283396444 2.267495835 2.251507362 2.235434454 2.219280538 2.203049036 2.186743366 2.17036694 2.153923164 2.137415433 2.120847134 2.104221643 2.087542326 2.070812535 2.054035608 2.037214869 2.020353625 2.003455168 1.986522771 1.969559689 1.952569155 1.935554385 1.918518571 1.901464882 1.884396465 1.867316442 1.85022791 1.83313394 1.816037576 1.798941834 1.781849703 1.764764141 1.747688077 1.73062441 1.713576006 1.696545701 1.679536296 1.662550559 1.645591227 1.628660998 1.611762539 1.594898478 1.578071408 1.561283886 1.544538431 1.527837523 1.511183606 1.494579083 1.478026321 1.461527644 1.44508534 1.428701653 1.412378788 1.396118911 1.379924144 1.363796569 1.347738226 1.331751115 1.31583719 1.299998367 1.284236516 1.268553468 1.252951008 1.23743088 1.221994785 1.206644381 1.191381282 1.176207061 1.161123246 1.146131323 1.131232734 1.116428881 1.101721119 1.087110763 1.072599084 1.058187312 1.043876633 1.029668191 1.015563088 1.001562384 0.987667098 0.973878206 0.960196644 0.946623306 0.933159047 0.919804678 0.906560973 0.893428665 0.880408447 0.867500972 0.854706856 0.842026675 0.829460966 0.817010231 0.80467493 0.79245549 0.7803523 0.76836571 0.756496039 0.744743567 0.733108539 0.721591168 0.710191629 0.698910068 0.687746594 0.676701284 0.665774186 0.654965311 0.644274643 0.633702133 0.623247703 0.612911246 0.602692623 0.592591668 0.582608189 0.572741963 0.562992741 0.553360248 0.543844184 0.534444221 0.525160009 0.51599117 0.506937307 0.497997995 0.48917279 0.480461223 0.471862806 0.463377028 0.455003358 0.446741246 0.438590122 0.430549396 0.422618462 0.414796694 0.40708345 0.399478071 0.391979882 0.384588193 0.377302298 0.370121476 0.363044993 0.356072102 0.349202042 0.342434038 0.335767307 0.329201052 0.322734465 0.316366727 0.310097012 0.30392448 0.297848286 0.291867575 0.285981483 0.28018914 0.274489668 0.268882181 0.263365791 0.257939599 0.252602704 0.247354198 0.242193171 0.237118706 0.232129885 0.227225784 0.222405478 0.217668039 0.213012537 0.208438039 0.203943613 0.199528323 0.195191234 0.190931411 0.186747918 0.18263982 0.178606182 0.17464607 0.170758552 0.166942696 0.163197575 0.159522259 0.155915825 0.152377351 0.148905918 0.14550061 0.142160514 0.138884723 0.13567233 0.132522435 0.129434142 0.126406559 0.1234388 0.120529981 0.117679227 0.114885667 0.112148433 0.109466666 0.106839512 0.104266122 0.101745655 0.099277274 0.096860151 0.094493463 0.092176394 0.089908134 0.087687883 0.085514845 0.083388232 0.081307265 0.079271169 0.07727918 0.07533054 0.073424497 0.071560311 0.069737245 0.067954573 0.066211576 0.064507542 0.062841768 0.06121356 0.05962223 0.058067099 0.056547497 0.05506276 0.053612234 0.052195273 0.05081124 0.049459503 0.048139441 0.046850441 0.045591897 0.044363213 0.043163799 0.041993075 0.040850469 0.039735416 0.038647359 0.037585751 0.036550051 0.035539728 0.034554257 0.033593122 0.032655815 0.031741836 0.030850693 0.029981899 0.02913498 0.028309465 0.027504892 0.026720809 0.025956767 0.025212329 0.024487062 0.023780543 0.023092354 0.022422086 0.021769336 0.021133708 0.020514815 0.019912273 0.01932571 0.018754757 0.018199053 0.017658243 0.017131981 0.016619923 0.016121737 0.015637093 0.015165668 0.014707148 0.014261223 0.013827587 0.013405945 0.012996004 0.012597478 0.012210087 0.011833556 0.011467616 0.011112004 0.010766462 0.010430738 0.010104584 0.009787757 0.009480021 0.009181144 0.0088909 0.008609065 0.008335422 0.00806976 0.00781187 0.007561549 0.007318599 0.007082824 0.006854036 0.006632048 0.00641668 0.006207753 0.006005094 0.005808536 0.005617911 0.005433059 0.005253823 0.005080047 0.004911583 0.004748283 0.004590004 0.004436607 0.004287955 0.004143915 0.004004358 0.003869157 0.003738188 0.003611331 0.003488469 0.003369488 0.003254275 0.003142722 0.003034723 0.002930175 0.002828977 0.002731032 0.002636243 0.002544518 0.002455766 0.002369899 0.002286831 0.002206478 0.00212876 0.002053596 0.00198091 0.001910627 0.001842674 0.00177698 0.001713475 0.001652093 0.001592769 0.001535438 0.001480039 0.001426512 0.001374799 0.001324842 0.001276588 0.001229981 0.001184971 0.001141507 0.001099538 0.001059019 0.001019903 0.000982143 0.000945698 0.000910524 0.000876581 0.000843827 0.000812226 0.000781738 0.000752328 0.00072396 0.0006966 0.000670214 0.00064477 0.000620238 0.000596585 0.000573784 0.000551804 0.00053062 0.000510204 0.000490529 0.000471572 0.000453306 0.00043571 0.000418759 0.000402432 0.000386707 0.000371563 0.000356981 0.000342941 0.000329423 0.000316411 0.000303885 0.000291829 0.000280227 0.000269061 0.000258318 0.000247982 0.000238038 0.000228473 0.000219272 0.000210423 0.000201914 0.000193731 0.000185863 0.0001783 0.000171028 0.000164039 0.000157321 0.000150865 0.000144661 0.0001387 0.000132973 0.00012747 0.000122185 0.000117109 0.000112233 0.000107551 0.000103055 9.87377E-05 9.45932E-05 9.06147E-05 8.67957E-05 8.31303E-05 7.96127E-05 7.62371E-05 7.29981E-05 6.98906E-05 6.69094E-05 6.40496E-05 6.13066E-05 5.86759E-05 5.61531E-05 5.3734E-05 5.14145E-05 4.91908E-05 4.7059E-05 4.50157E-05 4.30572E-05 4.11803E-05 3.93817E-05 3.76583E-05 3.60072E-05 3.44253E-05 3.29101E-05 3.14587E-05 3.00687E-05 2.87375E-05 2.74628E-05 2.62423E-05 2.50739E-05 2.39553E-05 2.28846E-05 2.18598E-05 2.08791E-05 1.99405E-05 1.90425E-05 1.81833E-05 1.73613E-05 1.6575E-05 1.5823E-05 1.51037E-05 1.44158E-05 1.3758E-05 1.3129E-05 1.25278E-05 1.19529E-05 1.14035E-05 1.08783E-05 1.03764E-05 9.89677E-06 9.43847E-06 9.0006E-06 8.58228E-06 8.18267E-06 7.80097E-06 7.43642E-06 7.08828E-06 6.75583E-06 6.4384E-06 6.13535E-06 5.84603E-06 5.56987E-06 5.30628E-06 5.05471E-06 4.81464E-06 4.58557E-06 4.36701E-06 4.15849E-06 3.95958E-06 3.76985E-06 3.58889E-06 3.41631E-06 3.25175E-06 3.09483E-06 2.94523E-06 2.80261E-06 2.66665E-06 2.53707E-06 2.41357E-06 2.29588E-06 2.18373E-06 2.07688E-06 1.97507E-06 1.8781E-06 1.78572E-06 1.69774E-06 1.61395E-06 1.53415E-06 1.45818E-06 1.38584E-06 1.31697E-06 1.25142E-06 1.18902E-06 1.12963E-06 1.07312E-06 1.01934E-06 9.68169E-07 9.19486E-07 8.73173E-07 8.29119E-07 7.87218E-07 7.47368E-07 7.09472E-07 6.73438E-07 6.39177E-07 gerris-snapshot-131206/test/shore/shore.gfs0000644000175100017510000000502312250371172015603 00000000000000# Title: Tsunami runup onto a plane beach # # Description: # # This test case is the \htmladdnormallinkfoot{first benchmark # problem}{http://isec.nacse.org/workshop/2004\_cornell/bmark1.html} of # "The Third International Workshop on Long-Wave Runup Models". A # solitary wave runs up a plane inclined beach. Reference solutions # are provided by the initial-value-problem (IVP) technique introduced # by Carrier et al \cite{carrier2003}. # # Figure \ref{profile} illustrates the topography and wave profiles at # $t=160$, $175$ and $220$ seconds. Figure \ref{order} gives the # convergence in wave elevation error with spatial resolution. # # \begin{figure}[htbp] # \caption{\label{profile}Topography, analytical (lines) and numerical # (symbols) wave profiles for the times indicated in the legend. The # numerical results are for a maximum spatial resolution of $\approx # 3.6$ metres.} # \begin{center} # \includegraphics[width=\hsize]{profile.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Convergence of the average and maximum errors # with spatial resolution. The errors are for the predicted wave # profile at $t=220$ sec.} # \begin{center} # \includegraphics[width=\hsize]{order.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Version: 100406 # Command: sh shore.sh # Required files: shore.sh init.cgd t160.csv t175.csv t220.csv convergence.ref # Generated files: profile.eps order.eps # Define MINLEVEL 7 Define DRY 1e-3 1 0 GfsRiver GfsBox GfsGEdge { x = 0.3333333 } { PhysicalParams { L = 60000 } # Set a solid boundary close to the top boundary to limit the # domain width to less than one cell (i.e. a 1D domain) RefineSolid (MINLEVEL + (LEVEL - MINLEVEL)*(1. - x/50000.)) Solid (y - 60000.*(0.5 - 0.99/pow(2,LEVEL))) # Set the topography Zb and the initial water surface elevation P Init {} { Zb = -x/10. P = init.cgd P = MAX (0., P - Zb) } PhysicalParams { g = 9.81 } AdvectionParams { gradient = gfs_center_sweby_gradient } # Force the flow to stay 1D Init { istep = 10 } { V = 0 } Time { end = 220 } # OutputTime { istep = 10 } stderr OutputSimulation { start = 0 } sim-LEVEL-%g.txt { format = text } OutputSimulation { start = 160 } sim-LEVEL-%g.txt { format = text } OutputSimulation { start = 175 } sim-LEVEL-%g.txt { format = text } OutputSimulation { start = 220 } sim-LEVEL-%g.txt { format = text } } { dry = DRY time_order = 2 } GfsBox { left = Boundary right = Boundary top = Boundary } gerris-snapshot-131206/test/shore/convergence.ref0000644000175100017510000000020312250371172016751 0000000000000011 0.587774983303 2.63420490169 12 0.293673688405 1.68232821353 13 0.150514513963 0.993646450027 14 0.0758431717493 0.766888885855 gerris-snapshot-131206/test/nz/0000755000175100017510000000000012250371673013357 500000000000000gerris-snapshot-131206/test/nz/bath.gts0000644000175100017510000161053312250371171014736 000000000000004790 14338 9549 GtsSurface GtsFace GtsEdge GtsVertex 0.3451344905 -8.730459598e-05 -0.446294 0.3624423858 0.01685363459 -0.442784 0.3516275209 -0.008120873138 -0.477514 0.05285171953 -0.06664108081 0.00062 0.04599628715 -0.06317421995 0.00062 0.04886727341 -0.0671151552 0.00062 0.01690420945 -0.07633392018 0.00062 0.01570319756 -0.0759521268 -0.000648 0.0143755659 -0.07672322959 0.000612 0.2400202103 -0.5815862475 -0.003066 0.2306217651 -0.5855598924 -0.002526 0.2311775762 -0.5643968917 -0.003684 0.09406943404 -0.06885489612 0.000616 0.09435346608 -0.06997810487 -0.000938 0.09345542456 -0.0694260657 -0.001078 0.8738353702 0.04014279389 -0.072202 0.8480579764 0.03425717981 -0.073444 0.8449067731 0.007208984554 -0.0756 -0.52766537 -0.0476957138 -0.14546 -0.553979437 -0.06813257572 -0.165458 -0.5060428429 -0.11232722 -0.150042 -0.008038642829 -0.0866469038 0.00062 -0.00592370856 -0.08159933604 -0.00138 -0.005053181461 -0.08601204409 -0.00138 -0.1121349845 0.1652994804 -0.007062 -0.1116055982 0.1540134057 -0.008438 -0.1031030519 0.159566355 -0.008904 -0.2579562128 -0.1641692562 -0.011278 -0.2715616123 -0.1697008921 -0.021602 -0.2684712036 -0.1547169724 -0.020192 -0.1393187306 0.7685157023 0.00062 -0.1401681769 0.7712735641 0.00042 -0.1436153264 0.768806042 0.00042 0.0043673514 -0.04710594415 0.00062 0.005812314195 -0.04646985625 -0.001076 0.002593265809 -0.04395399237 0.00062 -0.4350433933 0.348685445 -0.03938 -0.4391275139 0.3238283307 -0.149362 -0.4160428463 0.3371349351 -0.046582 0.2536382058 0.5971323608 -0.01444 0.2607783485 0.6143348048 -0.0143 0.264597253 0.592284208 -0.017248 0.5302997213 0.3780466628 -0.506042 0.4905815315 0.3256881325 -0.473512 0.4859200325 0.3647617858 -0.47356 -0.02074628118 -0.003128718443 -0.003428 -0.01324727699 -0.002075746333 0.00062 -0.01568577061 0.002663585597 0.000616 0.03971708488 -0.09922557618 0.00062 0.03882731541 -0.1025905099 0.00062 0.0406347177 -0.1008341685 -0.001252 0.06898439648 -0.06890929905 -0.00538 0.07166882288 -0.06689179696 -0.00538 0.06900050785 -0.06527344964 0.000598 0.2917356752 -0.4251925441 -0.054524 0.2827281062 -0.4442809803 -0.023946 0.2715469258 -0.4285701248 -0.025764 -0.1647714588 -0.3951824705 -0.003466 -0.1725861322 -0.3888672686 -0.00572 -0.1762435149 -0.3993148013 -0.006226 0.2517680434 0.7901759558 -0.003926 0.2498935809 0.7977716924 0.000618 0.2434788004 0.7912723229 -0.003048 -0.4872663631 0.2269501832 -0.081094 -0.5159047977 0.2483484387 -0.214982 -0.5175215683 0.2075808611 -0.19489 0.2224270154 0.5780724944 -0.008918 0.2086046477 0.5686272447 -0.005504 0.2125847748 0.5777983698 -0.007868 0.3067582596 -0.6328120964 -0.001318 0.3030870473 -0.6347112627 0.00062 0.3060270051 -0.6400942173 0.00062 0.08625811345 -0.03726735315 0.00062 0.08645055123 -0.03513998332 -0.003928 0.08417748739 -0.03582132183 0.00062 -0.1757616569 -0.4121573181 -0.004568 -0.1833366779 -0.40512749 -0.008284 -0.1869459347 -0.4121026655 -0.00964 -0.1169765312 0.8053054214 -0.00239 -0.1122523556 0.7962471383 -0.003488 -0.1229055081 0.7974492115 -0.00338 0.1882348205 -0.5210844878 0.00062 0.1890981792 -0.5103695965 0.00062 -0.1233330672 -0.5531733428 0.00038 -0.006980574151 -0.04330737763 0.00062 -0.0050627606 -0.04140064545 -0.000464 -0.004304152017 -0.04413058839 -0.002586 0.03442655978 -0.04991897752 -0.005112 0.03484225066 -0.04832282024 -0.005274 0.03301160509 -0.04954103249 -0.00875 0.1381748955 -0.07680955284 -0.017472 0.142818299 -0.06540536233 -0.023232 0.1314727652 -0.06640653484 -0.020168 -0.02698362551 -0.03658657286 -0.007588 -0.03656578006 -0.03805163867 -0.011236 -0.02980012643 -0.0447508161 -0.009688 0.270846353 -0.4872865087 -0.013422 0.2589759667 -0.4913942427 -0.00924 0.2606891496 -0.4808825242 -0.011512 -0.4232105622 0.3891045298 -0.108598 -0.4044450916 0.379400058 -0.033638 -0.4025623175 0.3991300472 -0.03546 0.0737696106 0.964896881 -0.00775 0.05736806368 0.9641822827 -0.03201 0.06560498875 0.95466813 -0.01528 0.2039950352 0.5588722061 -0.004058 0.1917345019 0.5580390872 -0.002478 0.1986753955 0.5486373669 -0.001994 0.2612971764 0.7034498818 0.000492 0.2628345694 0.6952177673 -0.00453 0.2696949166 0.701334417 -0.003244 0.6607718152 -0.1844878336 -0.056236 0.6315126144 -0.1857473707 -0.066598 0.642684176 -0.1653178972 -0.067516 -0.1813801226 -0.4211239787 -0.003494 -0.1892526749 -0.427050688 -0.006092 -0.1911981393 -0.4188517745 -0.012092 -0.2366685024 0.1760773923 -0.020436 -0.2297170013 0.1875718825 -0.01817 -0.2362253671 0.1982062324 -0.014464 -0.1353410628 0.09256615719 -0.017124 -0.1335246015 0.107084639 -0.02022 -0.1453212048 0.1141888705 -0.020336 0.02845940334 0.8228093259 0.000416 0.02965421487 0.824418224 0.00022 0.02737178613 0.8253398031 0.00062 0.1871869073 -0.1250273588 -0.025456 0.1746278297 -0.1255390648 -0.008092 0.177769522 -0.1147451431 -0.020972 -0.3590883947 0.4743355284 -0.01811 -0.367579203 0.4628913388 -0.020944 -0.3734785815 0.4748568846 -0.019864 0.3028429201 0.05435892837 0.00062 0.2435600688 0.0221163906 0.00062 0.2950066089 0.02980671249 0.00062 -0.1632504347 0.7786565276 0.00052 -0.1621496741 0.7806727604 0.000616 -0.1653264815 0.779554007 0.00052 0.241584942 -0.6258871313 0.00062 0.2367318936 -0.6212740625 0.00062 0.2397970944 -0.6218522792 0.000618 -0.1443383706 -0.78774766 -0.01189 -0.1324713404 -0.7864634958 -0.00338 -0.1344813483 -0.7965578683 -0.003768 0.02536193648 -0.0265582743 0.000616 0.0281356427 -0.02750757838 0.00062 0.0234387408 -0.02976650397 0.000586 0.1039393171 0.05384931428 -0.034554 0.1049057165 0.04421766052 -0.036464 0.0953878396 0.04885538732 -0.031078 0.01890037836 -0.05809760893 0.00062 0.02250288099 -0.05767851918 0.00062 0.01998603828 -0.05233635455 -0.00138 0.4925738692 -0.2471245002 -0.039958 0.476540521 -0.2310152184 -0.084498 0.4712387698 -0.2516350015 -0.064914 -0.1507399256 0.1689827905 -0.009322 -0.1609853995 0.1707863849 -0.009468 -0.1569212243 0.1590302111 -0.011166 0.04006950149 -0.08324637462 -0.001778 0.04005404471 -0.08244648666 -0.00235 0.03876750095 -0.08143907548 0.00062 0.08711530089 -0.04196156139 -0.005874 0.08457262535 -0.04231897605 0.000602 0.08536763136 -0.04405677808 -0.00692 0.2179252518 0.6368826523 -0.006056 0.2210753459 0.6258022882 -0.008724 0.229038002 0.6324380005 -0.009402 0.3648249589 0.1731722107 -0.234898 0.3557898061 0.1694487777 -0.167404 0.3568647143 0.1815723241 -0.177362 -0.04187641896 -0.1249396871 -0.005606 -0.03221335634 -0.1233326921 -0.004318 -0.03602388932 -0.1149676396 -0.005712 -0.1465911797 -0.5667533439 -0.011892 -0.1373022934 -0.5736426942 -0.007538 -0.1368456031 -0.5625519289 -0.005234 0.03392856174 -0.003998272187 -0.007722 0.04573458903 0.00210482613 -0.011974 0.03509393037 0.007484188885 -0.013176 -0.2745385598 -0.2247292418 -0.025742 -0.2481245388 -0.2233304565 -0.01938 -0.2575763627 -0.2043771216 -0.01938 0.2904843716 0.7473161781 -0.008798 0.2993501155 0.7471285355 -0.007014 0.2945189973 0.7374858309 -0.006962 0.1128075275 0.08151632535 -0.024254 0.1081167869 0.07235707271 -0.022216 0.1041854503 0.07924823907 -0.022728 0.08662251626 -0.03953778103 -0.00938 0.08519721079 -0.03861533528 0.00062 0.1795835766 -0.2340884906 0.00062 0.1848552131 -0.2467789754 0.00062 0.1871826384 -0.2390182464 0.00062 0.3858448228 0.03285367064 -0.457502 0.414930787 0.03560742418 -0.5349 0.3935515799 0.0219198576 -0.509768 -0.1958885444 -0.3741300006 -0.016516 -0.1811970263 -0.3879445454 -0.008328 -0.2048916003 -0.3828521374 -0.02073 -0.1320555622 0.7993034243 -0.005346 -0.1299915016 0.7918983826 -0.003396 -0.1399780421 0.8015928237 -0.007638 0.3020816664 0.6149633261 -0.023736 0.3114533257 0.6270351176 -0.02025 0.3013373689 0.6348037221 -0.016296 0.0974752023 -0.03500080817 0.00062 0.0984987848 -0.03622953348 -0.00074 0.09927111839 -0.03584632774 -0.003772 0.03125389561 -0.04849383946 -0.007528 0.03113852051 -0.05018614417 0.000612 0.02896617362 -0.04890723697 -0.00907 0.3210203244 0.1315858892 -0.004438 0.3199050185 0.1372677756 -0.003398 0.3178372099 0.1328776021 0.00062 -0.01943408625 -0.02800996867 -0.001152 -0.02096661456 -0.0277622441 -0.00225 -0.02000772556 -0.02942307609 -0.001402 0.01820561895 0.8205156388 0.00062 0.02070646568 0.8215972829 0.00062 0.01924608516 0.8265977441 -0.00195 0.08037422592 -0.05586965279 -0.00655 0.07813389377 -0.05528198799 0.000596 0.07818731389 -0.05769856743 -0.00538 0.3276287622 -0.5052585943 -0.036728 0.3234359174 -0.4885453975 -0.023562 0.3084208047 -0.5014001646 -0.102232 -0.4607030506 -0.002303171069 -0.049994 -0.487309127 -0.00022677054 -0.059482 -0.4716646943 -0.02370606573 -0.057966 -0.1643094068 0.182205442 -0.008016 -0.3119942177 -0.365139346 -0.037284 -0.2825883775 -0.3451290213 -0.031432 -0.3166373276 -0.3301939261 -0.045852 0.2899015741 -0.1593842538 -0.402978 0.2978444749 -0.1156746404 -0.429866 0.3153377837 -0.1674069157 -0.467692 0.7590611901 -0.06180144368 -0.051324 0.7939056866 -0.08508675022 -0.049354 0.8123675927 -0.06918933067 -0.054768 0.2490421718 -0.5222470329 -0.005048 0.2519315269 -0.5106494485 -0.005628 0.2412707697 -0.5134310969 -0.005946 0.3893191217 0.1305223982 -0.26123 0.3791955011 0.1236537142 -0.239814 0.3921071909 0.1184320181 -0.297084 0.1414354462 -0.1088792089 -0.006202 0.147102238 -0.09796368164 -0.010282 0.1358424138 -0.1000939152 -0.00725 0.3973001701 0.1967017211 -0.215476 0.3876873099 0.1767125123 -0.22346 0.377489194 0.1960675915 -0.238196 -0.01618312443 0.8775634565 -0.037342 -0.005744269065 0.8696631151 -0.020976 -0.003625340103 0.8789752393 -0.033982 0.4028859103 -0.005345080788 -0.516586 0.3869991659 0.0001219262217 -0.514308 0.3773384131 -0.03492514706 -0.480222 0.1161007385 0.09823063039 -0.015822 0.1225294573 0.09572250348 0.000598 0.1143481581 0.09132675878 -0.020088 -0.1562796793 -0.6525624658 -0.039638 -0.1457685416 -0.6653754958 -0.045448 -0.1391792056 -0.6557880226 -0.03216 -0.2473457181 -0.750023299 -0.144204 -0.2627246032 -0.7667434097 -0.16788 -0.2296452319 -0.7604830001 -0.111388 -0.1540529473 -0.5961619316 -0.025838 -0.1439930936 -0.6070753932 -0.023216 -0.1410429292 -0.5948577209 -0.0177 -0.01102700306 -0.08181438126 -0.002648 -0.2065783987 -0.3449087136 -0.019642 -0.2073062631 -0.3572092008 -0.020206 -0.1973106119 -0.351096033 -0.0122 -0.238356347 -0.06080730033 -0.01864 -0.2210419757 -0.06915101294 -0.015908 -0.2154688577 -0.05299000012 -0.014738 -0.09188266568 -0.06573958178 -0.009184 -0.09411126305 -0.04826757321 -0.00942 -0.08282487755 -0.05788196247 -0.00948 0.2092749056 -0.3039281626 -0.049858 0.2214478351 -0.2930940825 -0.191986 0.2216854785 -0.3148200398 -0.208698 -0.1670401525 -0.7596351826 -0.025836 -0.1711864636 -0.7734731318 -0.028866 -0.182269138 -0.7609334266 -0.03255 -0.1513645772 0.1471060207 -0.013418 -0.1637579301 0.1490664531 -0.013756 0.1940540431 0.6183261959 -0.002388 0.212884449 0.6203027504 -0.00704 0.1970851265 0.6091144024 -0.003592 0.5475459634 -0.2026500878 -0.094384 0.5185016995 -0.2089499482 -0.10092 0.5275932142 -0.1822653276 -0.115782 -0.0161092373 -0.006280770477 -0.003318 -0.01937922482 -0.007377082824 -0.001788 0.2481525086 0.7612008351 0.000576 0.2541187745 0.755141447 0.00062 0.2551618091 0.74922506 0.00062 0.2756808679 -0.01646637856 -0.048444 0.2742267798 -0.006243725437 0.000618 0.2841181153 -0.01336951617 -0.0556 0.02191116499 -0.01011943944 0.000608 0.01680288031 -0.01425678443 -0.004524 0.0136944555 -0.009500958679 -0.00575 0.3651407945 -0.02959003843 -0.49648 -0.2829666595 0.5380728464 0.00062 -0.2896070298 0.5331662989 0.00062 -0.2888003815 0.5302628389 0.0002 0.2157382983 0.5989637867 -0.009618 0.2165432279 0.5875659153 -0.009472 0.2262600097 0.5846388939 -0.009824 -0.05394718942 -0.1735871668 0.00055 -0.07706888917 -0.1641554052 0.00062 -0.06039013849 -0.1691630272 0.00062 0.04074299647 -0.08482788323 -0.00138 0.0406420487 -0.0841870321 -0.00138 0.04001471814 -0.08474415839 0.00062 0.3047801007 0.01325109963 -0.050954 0.296744572 0.01230789914 -0.0242 0.3009779607 0.01820424555 -0.020104 0.3172020478 0.169927564 -0.00298 0.3155096707 0.1766219966 -0.003824 0.3120102694 0.1686207308 0.00062 0.03114136151 -0.04600692051 -0.004774 0.02984025365 -0.04602645053 0.000612 0.03023964579 -0.04728630978 -0.00796 0.2659688415 -0.2254301616 -0.284548 0.2687918892 -0.2009589141 -0.293344 0.2905051622 -0.2175799108 -0.407782 0.08829057416 -0.07029955959 -0.001248 0.08984784404 -0.06798368732 0.000614 0.08832271543 -0.06668212377 0.00062 0.3442082845 0.2413451227 -0.039214 0.3540285128 0.2547225585 -0.06279 0.3364703427 0.2570918161 -0.03938 0.1937526149 -0.3717867038 0.00062 0.2043245471 -0.3702972744 -0.005592 0.1980686551 -0.3847077323 0.00062 0.09328284066 -0.07078631366 -0.001342 0.09316693958 -0.07273624488 -0.00138 0.09485099753 -0.07161767521 0.000614 0.260998079 -0.5080118992 -0.006854 0.255514363 -0.5010978076 -0.007158 0.1827153458 -0.181892164 -0.010858 0.1739728481 -0.1652276782 0.00062 0.1757064469 -0.2233032865 0.00062 0.1075600127 0.01620032563 -0.03774 0.1105661177 0.02575416928 -0.043368 0.09964145626 0.02602289887 -0.03969 0.3220836357 0.1667767584 -0.005364 0.3294947064 0.1717565654 -0.011376 0.3217315754 0.1744842903 -0.007194 -0.1919074371 -0.2672371458 0.000618 -0.1836281678 -0.2782053625 0.000414 0.2648812233 -0.6995837462 -0.015244 0.298088337 -0.672935726 -0.00825 0.2882419881 -0.6777529442 -0.007136 0.2447265498 -0.03205550768 -0.12865 0.2572014691 -0.02255721941 -0.03552 0.2428090245 -0.01576509296 -0.020998 -0.002422516009 -0.08625964335 0.000596 -0.003486941202 -0.08396006123 0.000604 0.0003777505778 -0.08592786423 0.000618 0.2910852524 0.5372099745 -0.032292 0.2773278082 0.5294899615 -0.023736 0.2887899868 0.5214686464 -0.030728 0.02123992521 -0.02714648289 -0.00533 0.01708822226 -0.02822475676 0.000616 0.02006015968 -0.03097866538 -0.007396 -0.09431041716 0.1546452062 -0.00938 -0.09431364572 0.1461313171 -0.011344 -0.07480458859 0.1536635746 -0.013758 -0.4644183059 0.5246302828 -0.19071 -0.4234962796 0.5640493747 -0.023778 -0.4287547321 0.5499668217 -0.037268 -0.01509593028 0.8447397508 -0.014494 -0.01819436609 0.8361366166 -0.01077 -0.02334804947 0.8429831535 -0.014368 -0.2062007472 -0.584948301 -0.043278 -0.2177627657 -0.5780897536 -0.041612 -0.2171312717 -0.5898651251 -0.047174 0.3431883363 -0.4398015141 -0.097538 0.3298862989 -0.456502399 -0.024892 0.3497717578 -0.4607127385 -0.072712 -0.3736290453 0.4526383366 -0.024104 -0.3811021764 0.4634613708 -0.02619 0.04539686769 -0.02872051783 -0.002238 0.04187960262 -0.0284501614 0.00062 0.03953872064 -0.03299010996 0.000616 -0.3953181212 -0.2715760677 -0.100922 -0.3520207198 -0.2208520737 -0.06554 -0.3694276079 -0.1999510243 -0.073486 0.06395186852 -0.05820248098 -0.001194 0.0627072106 -0.06089713629 0.000618 0.06589006202 -0.06260574607 0.00062 -0.3844666393 0.1653849931 -0.02775 -0.3414495203 0.1712580589 -0.024622 -0.362966501 0.2878540628 -0.026662 0.3305222689 -0.01981262947 -0.342776 0.3256283599 -0.005591459036 -0.23774 0.3388196842 -0.008140447793 -0.41079 0.3977434787 -0.5153924445 -0.019196 0.4158924963 -0.5269425228 -0.022512 0.3933375487 -0.551869295 -0.018214 -0.1248252274 -0.5850743501 -0.003856 -0.11480161 -0.5824466145 0.00062 -0.1209223058 -0.5780860426 -0.001916 0.3227213742 0.6366525841 -0.019492 0.3148410749 -0.5184493692 -0.016744 0.2988005673 -0.5155903701 -0.017248 -0.02607811506 -0.1445112695 0.00062 -0.02764216597 -0.1338804454 9.2e-05 -0.02929351905 -0.1422904109 0.00061 -0.2609663965 -0.1915439707 -0.01938 -0.2479127436 -0.183358594 -0.005742 -0.2461070087 -0.1956814712 -0.011166 -0.1376550821 0.1864485429 -0.005578 -0.1228149322 0.1724610396 -0.006486 -0.1193299838 0.1827021088 -0.003752 0.2872068973 0.4862145772 -0.02852 0.2758276286 0.4874434916 -0.017854 0.2798363474 0.4770449206 -0.01806 0.1023893328 -0.05215748885 0.000618 0.1019801695 -0.04538482636 0.00062 0.0991526836 -0.04592006301 0.00062 0.3147804522 0.109915853 0.00062 0.3238092791 0.1029510555 -0.009002 0.3266001047 0.1131106068 -0.017336 -0.1541153931 0.0756737876 -0.016124 -0.143555419 0.07058951978 -0.015322 -0.1553828446 0.06266444627 -0.016624 -0.1278306045 -0.576549523 -0.004286 -0.120387251 -0.5695553523 0.000616 -0.241856238 -0.1535309579 -0.00938 -0.2347010738 -0.1460285421 -0.007358 -0.2446613282 -0.145162178 -0.00938 0.1845606056 -0.02827233355 -0.043836 0.1936439737 -0.02326046965 -0.017892 0.1862189863 -0.01950639753 -0.01345 -0.03529689008 0.0275811001 -0.014514 -0.05173789372 0.02661055032 -0.015022 -0.0427038012 0.01430042111 -0.013018 -0.1419045786 0.1279003659 -0.018686 -0.1130631033 0.1360717979 -0.015342 -0.1201537509 0.1463845321 -0.012866 0.3322497233 0.05380309289 -0.281704 0.3249612211 0.05460371799 -0.213306 0.328820452 0.06045410413 -0.244776 -0.1743955771 -0.6440896544 -0.044422 -0.178188564 -0.6558091318 -0.054068 -0.167642144 -0.6576410543 -0.044696 0.02596969729 -0.02335268519 -0.004024 0.0231203777 -0.02414805131 -0.007558 0.1193395416 0.06059585625 -0.025524 0.1120500259 0.05752104424 -0.026298 0.1205796582 0.0678336821 -0.023506 0.07078712821 -0.009795756068 0.00062 0.0675267357 -0.009824713944 0.000608 0.06980602339 -0.01177040179 0.00062 -0.002001234796 0.8545890182 -0.015816 -0.006442839288 0.861118525 -0.019366 -0.01088128045 0.8542112392 -0.018424 0.09687172989 -0.04030312266 -0.002072 0.09880430843 -0.03869254471 0.00062 0.09716212465 -0.03881776739 -0.003786 -0.1745785091 0.1512724983 -0.01427 -0.1137462912 0.2228197395 -0.002134 -0.1043153922 0.2219450005 -0.001882 -0.1060870884 0.2299740486 0.00059 -0.1489685626 -0.5069025672 0.000618 -0.1495069859 -0.5008331002 0.000618 -0.156895883 -0.5049849843 -0.004644 -0.0156993152 -0.1106081986 0.000618 0.03523230375 -0.1030076341 0.00062 0.07851905244 -0.004626554134 -0.009854 0.08774871988 -0.005730186181 -0.019558 0.08511773787 0.001903712665 -0.019744 0.110346106 -0.04023803235 -0.019374 0.1040725719 -0.03846684081 -0.013572 -0.1787777589 -0.5465040206 -0.025286 -0.1971083566 -0.5129796136 -0.02788 -0.1686224142 -0.5305866788 -0.015472 0.06715819236 -0.06673032767 -0.004244 -0.1873884886 0.1971218555 -0.00723 -0.1802501493 0.2035853371 -0.002392 -0.1865872507 0.208991712 0.000618 0.3105707225 0.4549165468 -0.054942 0.2985380714 0.4448349028 -0.02073 0.3111752911 0.4369821023 -0.037188 -0.08563555339 -0.07515227139 -0.00844 -0.1007492743 -0.08396059006 -0.008398 -0.09388380463 -0.09173730433 -0.008086 0.2471297023 -0.2102735721 -0.174978 0.2442654499 -0.2318352907 -0.216446 0.3021453275 -0.5284990281 -0.01321 0.3143836973 -0.5326344727 -0.0148 0.02337741174 -0.08453071801 0.00062 0.0222076281 -0.08522674734 0.00062 0.02358011829 -0.08581253795 0.00062 0.2723604818 -0.6054729975 0.00062 0.2745214995 -0.6062503032 0.00062 0.2628118103 -0.6072509136 0.00062 0.3183711498 0.05639381249 -0.089584 0.312090214 0.05115086155 -0.025494 0.3199121583 0.04890224661 -0.058386 -0.4667980696 -0.2760166886 -0.128588 -0.4998930048 -0.2303984753 -0.144978 -0.5021710144 -0.2667768555 -0.142842 -0.1763597212 -0.4714965741 -0.00971 -0.1644185015 -0.4706743028 0.00062 -0.1746110458 -0.461485853 -0.005256 0.4202246517 -0.304080219 -0.109692 0.4415307691 -0.299982319 -0.060168 0.4364602257 -0.3181621906 -0.075672 0.1060230516 0.08789865507 -0.02291 0.3270509491 0.1401445638 -0.009816 0.3286066275 0.1481313856 -0.010046 0.3216656291 0.1449957954 -0.003482 0.08194821888 0.97453597 0.0003 0.08867533811 0.9953532767 0.00062 0.07937794345 0.9836710083 -0.008736 -0.1191289945 -0.7234323799 -0.003082 -0.1096189765 -0.7224828041 -0.001614 -0.1118864818 -0.7144008312 -0.002968 0.3853009507 0.09510649685 -0.334152 0.3706198327 0.09824785526 -0.22303 0.3816041347 0.1088397169 -0.280384 0.5410193938 -0.2210339097 -0.05884 0.5620702559 -0.2222715094 -0.087846 -0.00723249376 -0.05424091504 -0.002154 -0.009000096628 -0.05997631508 -0.001686 -0.006068635654 -0.05901309845 -0.001024 0.7154267648 -0.1990617063 -0.046574 0.6838210419 -0.1717917744 -0.051672 0.6889768999 -0.1945376185 -0.058054 0.3045076746 -0.3331264619 -0.312472 0.2738920287 -0.2955153131 -0.427588 0.3138458263 -0.3072926502 -0.329954 -0.4316224251 -0.2248945473 -0.119638 -0.4506010745 -0.166294283 -0.12978 -0.01513539502 -0.05009908952 -0.00565 -0.02005210583 -0.05602508549 -0.007728 0.06064593655 0.2091238446 -0.011404 0.05759590139 0.2203742749 -0.00896 0.04645966436 0.2218766996 -0.008078 -0.05368823617 0.8188565259 -0.008856 -0.04292233317 0.8259758564 -0.006848 -0.06028299731 0.839739211 -0.018568 -0.05078892328 -0.003144185529 -0.011518 -0.05726873324 -0.01800737398 -0.010774 -0.06006855703 -0.0005431806371 -0.012426 -0.1803214571 -0.3695524175 -0.008508 -0.1659750408 -0.3837631589 -0.005208 0.4272732463 -0.2772253167 -0.122962 0.3999169968 -0.2861015909 -0.155952 -0.4485273716 0.4377549818 -0.205464 -0.449597978 0.4042412745 -0.201636 -0.4021600537 0.4391595879 -0.041306 0.2511573568 -0.6730438135 0.00062 0.06748829059 -0.06372969501 -0.005338 0.06833183789 -0.06212475689 0.000612 -0.1344533113 -0.5511361467 -0.00346 -0.1426601956 -0.5466739206 -0.005828 -0.1443620667 -0.5556538913 -0.00736 0.2359181278 0.01323680674 -0.003424 0.2448150744 0.01132704726 -0.004058 -0.2984494931 -0.05438519771 -0.03458 -0.2804853057 -0.03241626076 -0.029528 -0.3012695169 -0.0136351798 -0.02988 -0.02824055135 -0.08699406551 -0.007406 -0.02294465911 -0.09193856098 -0.004316 -0.01634340976 -0.08698453212 0.000618 0.292935424 -0.6475656192 0.000618 0.2924764492 -0.6499862158 -0.000966 0.2962155368 -0.6501338594 -0.00317 0.3867149784 0.554530614 -0.269012 0.4286695757 0.5598613973 -0.260088 0.4027298078 0.5920966132 -0.251188 0.3074588147 0.0207996776 -0.03374 0.301198086 0.02481777996 -0.005408 0.01717227366 -0.0421947287 0.00062 0.0155534683 -0.04785123644 0.00062 0.0203308715 -0.04621317403 -0.008266 0.1190121577 -0.09583045973 -0.005006 0.1101800273 -0.0899540252 -0.00436 0.1101679752 -0.1006203711 -0.003392 -0.3998119499 -0.3465064037 -0.097858 -0.3947819418 -0.3737180202 -0.085306 -0.4488130565 -0.3756366797 -0.133032 -0.05590586085 0.2215505716 -0.00346 -0.06150516758 0.2119512676 -0.00338 -0.05056172776 0.2100030553 -0.005168 -0.2594601469 0.1638503792 -0.021788 -0.2468930814 0.1095823763 -0.02137 -0.2846097697 0.1334152537 -0.02393 -0.1562280163 -0.7365935425 -0.01656 -0.1589866133 -0.7255750682 -0.015124 -0.1721245876 -0.723576124 -0.023288 0.3809165755 0.3596040034 -0.203068 0.3676376924 0.3779827485 -0.231814 0.3574678281 0.3579886936 -0.147548 -0.2975791369 0.001426789165 -0.026276 -0.2928506949 0.02133136825 -0.02335 -0.3117482826 0.01310024606 -0.030562 0.4090671576 0.1774878273 -0.312518 0.4008818271 0.1587109482 -0.264322 -0.3582961275 -0.09371675015 -0.065012 -0.3652643822 -0.06919541409 -0.05615 -0.3839188075 -0.08083953021 -0.061738 0.05486603563 -0.07321523999 0.00062 0.05439421645 -0.07082718506 -0.001058 0.05248140358 -0.07246236089 -0.001626 0.2930315947 0.459900657 -0.023412 -0.2203066566 0.3822306314 -0.004762 -0.2248800951 0.3926303331 -0.005654 -0.2309691763 0.383645725 -0.006818 0.2900692395 -0.6476917626 0.00061 0.2883848841 -0.6489403566 0.00062 0.2893196932 -0.6465781113 0.00062 -0.1061983101 0.804791548 -0.00452 -0.09993129213 0.795201725 0.000116 0.2665717955 0.7828468149 -0.00725 0.2565515615 0.7816450838 -0.005272 0.2621979084 0.7717049149 -0.007542 0.356424314 -0.4197173343 -0.140622 0.3685327153 -0.446007352 -0.121924 0.1552858459 0.03440744243 0.000614 0.1495836252 0.02548188061 0.000318 0.1699399804 0.01712589522 0.00062 0.2748931653 -0.5933281727 0.00062 0.2736912476 -0.6025681283 0.000618 0.2757895097 -0.605744704 0.00062 0.301286572 0.5831144846 -0.029072 0.3169779939 0.5774166624 -0.030842 0.3160580781 0.5929247709 -0.026358 0.6004165288 0.1067984261 -0.592786 0.6212599737 0.13092515 -0.560072 0.6250119441 0.06013812735 -0.522738 0.3184895063 0.3291985681 -0.019594 0.3324668868 0.3371803763 -0.032708 0.3152309382 0.3453803859 -0.017204 -0.225323896 -0.1157760883 -0.007736 -0.2200440591 -0.120310569 0.000618 -0.2170438284 -0.09919490919 0.00062 -0.1550053452 -0.5383432693 -0.009434 -0.1491834992 -0.5297347384 -0.00449 -0.1462107024 -0.5389988482 -0.005192 0.3869177022 0.08078878423 -0.40316 0.3771408294 0.08821689439 -0.250398 0.1332562481 0.141522665 0.000618 0.1356050083 0.1309062909 0.000404 0.1212548163 0.1375026406 -0.008258 0.2234271811 -0.2388009871 -0.090116 0.2123413125 -0.2242687338 -0.01938 0.2092924532 -0.2360650104 -0.020414 0.2624110328 0.4868181526 0.00062 0.2609561475 0.4945072253 -0.003404 0.2484533559 0.506861841 0.00062 0.2659605563 0.5672752187 -0.019426 0.2655120184 0.579892561 -0.018462 0.2552998891 0.573136887 -0.014614 0.09440279382 -0.0501712119 -0.003212 0.09548948329 -0.04938019451 0.00061 0.09582837489 -0.05083307831 0.00062 0.2035738962 -0.05053920407 -0.0474 0.2174034281 -0.04633860388 -0.108582 0.2138337473 -0.06036065804 -0.07271 -0.1652135932 -0.06536206416 0.00062 -0.1695208173 -0.0655478208 0.00062 -0.1699378402 -0.0676627754 0.00062 0.0961372609 -0.069239811 0.000618 -0.001020045443 -0.01190545354 -0.00538 0.004369310759 -0.004944686773 -0.00138 -0.003744239611 -0.006826232036 -0.003352 0.1923547047 -0.3188297373 -0.025956 0.1943765925 -0.3105167624 0.000616 0.2035318895 -0.3165073813 -0.041348 -0.2240350772 -0.3304844286 -0.022494 -0.2056142583 -0.3346294071 -0.017274 0.1299452383 -0.08337709115 -0.01059 0.137885496 -0.08925032113 -0.011044 -0.3172499358 0.6064522932 0.000618 -0.3182135605 0.5912810411 0.000618 -0.3137761583 0.5828588657 0.00062 0.06016395441 -0.0633478981 0.00062 0.06019385371 -0.06103304871 -0.001102 0.05819442233 -0.06126014025 -0.001304 0.06888750464 -0.0004211601966 -0.011944 0.07192623539 -0.007747622382 0.00062 0.3043049579 0.4704259534 -0.047086 0.2909641863 0.4744661168 -0.028286 0.3000463763 0.4847664812 -0.05091 -0.3425464787 -0.04611336334 -0.051866 -0.3513475413 -0.02847630606 -0.050466 -0.3710269945 -0.03534050481 -0.053344 -0.0656526206 0.8163762272 -0.010192 -0.07366889784 0.824526382 -0.022628 -0.07576813396 0.8135365367 -0.00914 0.1195281109 0.08635584961 -0.016724 0.1243669089 0.08949968572 0.000614 0.08726457292 -0.05809996673 0.000618 0.08871995457 -0.05827318685 -0.000544 0.08602069507 -0.05948696964 -0.002134 0.1771274724 -0.1022510531 -0.01891 0.1709602644 -0.09065435098 -0.015962 0.1852118162 -0.09086270852 -0.02144 -0.1664732989 -0.4075764123 -0.002226 0.388000165 -0.5684656305 -0.017636 0.4064488564 -0.5651304289 -0.019916 -0.002157106704 0.01045288981 -0.012754 -0.004109672481 0.0009582408434 -0.00523 -0.009244920261 0.00865251573 -0.00608 0.3006881885 -0.623295222 0.000618 0.321793692 -0.6160032783 0.000616 0.3223215217 -0.6096992075 0.00062 0.3345188395 0.03080358538 -0.132856 0.3314849187 0.02209890826 -0.154354 0.3398440222 0.02393992378 -0.26034 0.04158242079 -0.05922377714 -0.00338 0.04273958709 -0.05981823424 -0.001426 0.04258273832 -0.05858678716 -0.001742 0.318939546 0.3590398895 -0.032182 0.32588106 0.3650316294 -0.064256 0.3152580027 0.371685457 -0.077964 0.2907160614 0.7188331636 0.000618 0.289608786 0.7168661433 0.00062 0.2966542596 0.7099532913 0.00062 -0.2464395426 -0.209647045 -0.01324 0.4210364743 -0.4039606945 -0.113792 0.3975585298 -0.3688536759 -0.11071 0.3688118096 -0.3980752774 -0.117562 0.3128283734 0.1257270857 0.00062 0.3137200585 0.09680665004 0.00062 -0.007837146449 -0.00484021062 0.00062 -0.01433332136 -0.006818698052 0.000604 -0.242470196 -0.07734949398 -0.017202 -0.2998895671 -0.4422923434 -0.042472 -0.2916722836 -0.4576455407 -0.046118 -0.260847092 -0.4394921776 -0.031152 0.1410905493 -0.0232262892 -0.029564 0.1328815818 -0.0214612908 -0.05203 0.1331527059 -0.0322884313 -0.043966 -0.2944964942 -0.42503806 -0.03624 -0.3093215321 -0.4118078029 -0.038806 -0.3156223794 -0.4323349543 -0.051272 -0.002625626018 -0.08003244679 -0.001174 -2.344747215e-05 -0.08024689135 0.00062 0.3036176978 0.5272300308 -0.047228 0.03158373906 -0.04705661043 -0.005346 0.03234222642 -0.04612965427 -0.003746 0.09224452819 -0.06797754815 0.00062 0.08941662598 -0.07138467894 -0.001268 0.4097890662 -0.422606158 -0.111236 0.4361106668 -0.4205757065 -0.11101 0.2571286517 0.003372028625 0.000616 0.2823508566 -0.001171420679 0.000618 0.7722735964 -0.2582373426 -0.096732 0.8031705055 -0.2377345118 -0.111104 0.7721594152 -0.2177035398 -0.093102 -0.145414906 0.7702091951 -0.003008 -0.1458919322 0.7730658702 0.00042 -0.1439385292 0.7709051267 0.00042 0.1251065966 0.1621959317 0.000618 0.1189050543 0.1740776992 0.000582 0.1115704657 0.1696648894 -0.004482 -0.3304873744 0.005707830004 -0.040274 -0.3321984863 -0.01451348531 -0.044194 -0.2368650122 -0.1862371353 -0.006362 -0.2322902748 -0.1922391443 0.000618 0.5034308697 -0.259712638 -0.023078 0.5023341746 -0.2733205491 -0.020436 0.5205943058 -0.2666613169 -0.015576 0.4043337827 -0.259330731 -0.17646 0.2702920534 0.7073667938 0.00062 0.2740123986 0.7124635774 0.00062 0.2732610857 0.7083309536 -0.001402 0.02046231741 -0.04192453638 -0.008562 0.01723187408 -0.03912704278 0.00062 -0.434726738 -0.113944934 -0.11477 -0.4872194686 -0.08754094491 -0.135026 0.09680906956 -0.04206142469 -0.00321 0.09644010584 -0.04135690883 -0.003152 0.3005088065 0.4326405501 -0.019728 0.2942019626 0.4241144218 -0.011376 0.2907455335 0.4365323405 -0.010872 0.3863397504 -0.4677181703 -0.047434 0.4133752705 -0.469023008 -0.098808 0.3970603363 -0.4460059161 -0.117632 0.03069216123 0.82736869 0.00062 0.0326921152 0.8253815301 0.00062 0.03641609082 0.8280335706 0.00062 0.03743318487 -0.1040569101 0.000618 0.03971665905 -0.1041649362 0.00062 -0.5362077433 -0.2976497137 -0.148628 0.03239545017 -0.0644785536 -0.003736 0.03366781584 -0.06599141537 0.000612 0.03561040851 -0.06464811761 0.00062 0.3217421778 -0.3537231921 -0.241842 0.2938251288 -0.362113525 -0.297542 0.3155467603 -0.3834090797 -0.224852 -0.09497395158 -0.1438128994 0.00062 -0.09072473896 -0.1363634606 -0.001926 -0.09799106624 -0.1317685824 0.00062 0.05700992693 -0.05984749516 -0.000544 0.05549427041 -0.06352476328 0.00062 0.04712628089 -0.05799162694 0.00062 0.05120986437 -0.07016564969 0.000614 0.05586713839 -0.07701525432 0.00062 0.05699472489 -0.07679341427 -0.001706 0.05667997621 -0.07537550117 0.00062 0.2489047009 -0.5992988844 0.000618 0.2507773863 -0.5997367518 0.00062 0.247528515 -0.6016605711 0.00062 0.2977447203 -0.6472307901 0.000616 0.3023099486 -0.6471077193 -0.001862 -0.09894778318 0.181528481 -0.00549 -0.1011907004 0.1946366972 -0.00338 -0.1112143454 0.1882104846 -0.005428 0.06247080009 0.2292089602 -0.004316 0.09218798124 0.2143364195 0.000616 0.06920779888 0.2190833677 -0.007534 -0.180344137 -0.820817832 -0.035648 -0.1914679601 -0.8267935254 -0.03938 -0.192196984 -0.8094398897 -0.054378 -0.2742373344 0.3850426217 -0.013028 -0.2617479006 0.36629002 -0.01237 -0.2714845457 0.3603214128 -0.01416 0.2043532671 -0.55864209 -0.002396 0.1977307978 -0.5412917361 -0.002222 0.1868914631 -0.534713956 0.00062 -0.2440764213 0.4610818742 0.000616 -0.2603219591 0.5029450629 0.00062 -0.2324941177 0.4479039458 0.000616 -0.3049387697 -0.3926146067 -0.033914 -0.3246312756 -0.3982969949 -0.052236 0.08259474207 -0.0195004834 0.000616 0.0763915974 -0.01966872968 -0.00138 0.07579257511 -0.01264996143 -0.003196 0.09226364253 -0.08261450693 -0.002196 0.09135109324 -0.08595672083 0.00062 0.09420257337 -0.08571300559 -0.003568 -0.2285351991 0.3750154245 -0.006078 -0.2394132969 0.3840142084 -0.008482 0.08824926895 -0.03991614514 0.000592 0.2878615624 -0.6581689267 -0.00318 0.2889578795 -0.6525544154 -0.001256 0.2811947402 -0.6509536666 0.000618 0.1800790539 -0.3330998919 0.00062 0.1898069908 -0.3498992968 0.00062 0.2686793227 -0.4433213939 -0.02046 0.4970930687 0.4102555644 -0.465018 0.4606674663 0.4437945419 -0.42951 0.4203501809 0.380818865 -0.381328 0.01462589759 0.01408112757 -0.012248 0.001494883225 0.02898340346 -0.017144 0.2928233109 0.3250646642 0.00062 0.2960280487 0.3114559162 -0.005 0.301217873 0.3196391499 -0.007852 0.1152791548 0.01979453565 -0.050378 0.1172840129 0.01289078471 -0.05979 0.8325152606 0.08363301031 -0.138142 0.8583212689 0.06577875833 -0.080042 0.8235151764 0.05766014764 -0.087336 0.05580334783 -0.01231780055 0.00062 0.05764901475 -0.01216556537 0.00062 0.05628465037 -0.006592196392 0.00062 -0.302674817 0.4264514895 -0.016274 -0.3175026379 0.3960263877 -0.0178 0.09041261237 -0.05376254361 0.00062 0.08902834671 -0.05367425261 -0.000614 0.08891181725 -0.05484236812 0.000616 0.3958616435 0.1040699116 -0.378494 0.4067536156 0.1134219589 -0.400942 0.2663342794 0.5212863123 -0.015558 0.2583898003 0.51280025 -0.00918 0.2699308273 0.5072166561 -0.0138 -0.1308229055 -0.7462343033 -0.004814 -0.1142288938 -0.7326992133 -0.001408 -0.1253645201 -0.7345340786 -0.0036 0.05854996148 -0.0752555662 0.000616 0.05889180019 -0.07253271647 0.00062 0.04633061484 -0.0773987335 0.00062 0.04530503622 -0.07982822229 -0.000836 0.04724644198 -0.07953060455 0.000618 -0.02536439677 -0.01232826851 0.00062 -0.02153539566 -0.01084626579 0.00062 -0.02558088123 -0.01338176806 0.000614 0.11617437 0.07318293476 -0.025066 0.1216076143 0.07374356587 -0.023894 0.1199407808 0.07921783699 -0.02184 -0.3472552844 -0.2639256431 -0.05541 -0.3452573521 -0.2425005113 -0.05984 -0.6193357905 0.2183028596 -0.291788 -0.6961429849 0.2774428478 -0.339976 -0.6617121686 0.1594124699 -0.302622 0.3113989983 -0.6386945267 0.000618 0.3096202609 -0.6346573754 0.00062 0.03141787298 -0.07479330757 -0.00322 0.03217337632 -0.07334440962 0.0006 0.03050150302 -0.07292267529 -0.004522 0.2348332014 -0.4480475322 -0.010232 0.2283791806 -0.4645908369 -0.009444 0.2375140158 -0.4662556006 -0.010826 -0.1422245006 0.7763902621 0.00062 -0.1400381214 0.7747843797 -0.002436 -0.1430778333 0.7749144034 0.00062 0.2417298111 -0.06751392402 -0.078088 0.2551575918 -0.07939232549 -0.083104 0.2591626402 -0.06095260049 -0.242492 0.01452770737 -0.06177970296 0.000618 0.01531091427 -0.0561836836 -0.002176 0.01110848317 -0.05902607015 -0.005168 0.332530212 -0.4203200496 -0.12944 -0.134400782 -0.6034660488 -0.015808 -0.1236148067 -0.6061095744 -0.006596 -0.1298507402 -0.5947479558 -0.008038 0.06464617348 -0.06556092172 0.00062 0.06674515035 -0.06493196286 0.00062 -0.06131167934 0.2010038588 -0.004742 -0.212906346 0.3744092985 -0.003266 -0.2098957551 0.3846407595 -0.001968 0.04353513216 -0.08970682743 -0.000902 0.04314701581 -0.08820439687 0.00061 0.04553397195 -0.08999843974 -0.000958 0.3282391661 0.3201113535 -0.031464 0.3476463047 0.3044922239 -0.06413 0.3239857252 0.3058358546 -0.03295 0.1836219281 -0.2977929835 0.00062 0.1845372027 -0.2699874534 0.00062 0.1853533095 -0.285281953 0.00062 -0.06720207509 0.1920421991 -0.008096 -0.05646766759 0.1887474787 -0.008818 -0.09468405692 0.7936975216 0.00013 -0.08621557384 0.799755735 -0.003482 -0.09536759419 0.8044836107 -0.004428 -0.4063984792 -0.0964311205 -0.082 -0.4015697639 -0.1238393823 -0.090282 0.2508310314 -0.5970793186 -0.000978 -0.2219331869 0.3697937124 -0.004692 0.03287005321 -0.04754261107 -0.00938 -0.2060927855 -0.4888084462 -0.028684 -0.2090053355 -0.5039540562 -0.031176 0.2405570755 -0.1264162064 -0.147622 0.2281324882 -0.1420999264 -0.035984 0.2470436163 -0.1462191767 -0.1882 -0.01816927342 0.2341399899 -0.00341 -0.007448978964 0.2299939889 -0.0049 -0.007716302104 0.2410758531 -0.00255 0.1378580524 0.05955984228 -0.01053 0.1406294913 0.07129818253 -0.0055 0.1336261346 0.06602968316 -0.011402 0.2735105933 0.693258784 -0.00464 0.2762077339 0.6993928439 -0.003568 0.3729499379 0.6423330184 -0.149466 0.3522123258 0.6462479195 -0.051026 0.3609922837 0.6613733752 -0.06113 -0.1789985748 -0.6798138041 -0.062722 -0.1722207506 -0.6672569849 -0.041762 -0.1865802852 -0.6629518291 -0.058456 -0.2694682989 -0.08513294692 -0.025658 -0.30393059 -0.08286301129 -0.040352 -0.3008634702 -0.1019107893 -0.037502 -0.08769317285 0.2169663073 -0.002668 -0.07801081915 0.2160310119 -0.00338 -0.07957975349 0.2291858783 0.000618 0.2533813525 -0.5330388944 -0.004756 0.2586877536 -0.5252755495 -0.004604 0.2582902839 -0.5419973165 -0.004398 0.1082931317 -0.04824867064 -0.01873 -0.5684676553 0.04679879264 -0.191306 -0.5960026757 0.02038080307 -0.180032 -0.5567562881 0.006149199505 -0.164204 -0.01552549099 -0.04467379791 -0.003758 -0.01070076041 -0.04673481915 0.000612 0.3281979216 0.1620799976 -0.009264 0.3333958865 0.1555707199 -0.015508 0.3363501288 0.1642395323 -0.02034 -0.06890094941 0.219261566 -0.00338 0.02638015574 0.2125001474 -0.00938 0.01925383967 0.2238612376 -0.007274 0.01447832386 0.2127496626 -0.009188 0.3391079143 0.4111973452 -0.163944 0.3212196146 0.4073024334 -0.040554 0.3248286525 0.4253258367 -0.06268 -0.1317223511 -0.6449508694 -0.021144 -0.1235215814 -0.6591588941 -0.017358 0.5297157062 -0.4045690862 -0.085392 0.528861401 -0.3816491662 -0.07345 0.4864557651 -0.4020343949 -0.088152 -0.01149446348 0.04371423454 -0.020274 -0.001476586239 0.03912268118 -0.020618 0.0008113041951 0.04957426249 -0.025382 -0.3446034121 0.03743715808 -0.037802 -0.3135384472 0.04058286433 -0.027112 0.03521215226 -0.05085447115 -0.003478 0.03549884182 -0.04962764098 -0.003982 0.5149448121 -0.309639445 -0.024588 0.5353200238 -0.306163242 -0.015614 0.5240223942 -0.324366065 -0.019274 0.0422739887 -0.086906968 0.00062 0.0418194062 -0.0881897499 -0.000978 -0.224161339 -0.03717334552 -0.016682 -0.2514571075 -0.05137815281 -0.023078 -0.2344419743 -0.02967371358 -0.019932 0.3644802391 0.2108711185 -0.210906 0.3602198176 0.1951597122 -0.206096 -0.1598236038 -0.5156148777 -0.007478 -0.1528447591 -0.5120007688 -0.003282 0.04171045646 -0.008840266219 -0.002528 0.1471137328 -0.03286020774 -0.036394 0.1492592312 -0.02416204455 -0.021324 0.03773465453 -0.07786662649 -0.00383 0.03707803031 -0.07812893011 -0.004916 0.038250161 -0.07900040878 -0.003846 -0.1890712193 0.7620124088 0.00062 -0.1701039631 0.761234158 0.00062 -0.1724519298 0.7644432469 0.00062 0.3635406201 -0.5612807092 -0.01641 0.3748656159 -0.5549641976 -0.016126 0.3674202007 -0.5431924049 -0.016028 0.5489759772 -0.2386779263 -0.041262 -0.1021733927 -0.1108398919 -0.00549 -0.1090525288 -0.1155061916 0.00062 -0.1114650413 -0.1093244709 -0.005368 0.811150189 -0.1641530145 -0.079658 0.7835202107 -0.1720030146 -0.074468 0.7833711936 -0.1935825305 -0.094358 0.3222808505 0.2807337991 -0.034286 0.332943119 0.2931250598 -0.053334 0.3121536548 0.3036219249 -0.019074 0.01864400344 -0.0164520682 0.00062 0.01529065861 -0.01796054368 0.00062 -0.1199235598 -0.5932424649 -0.00338 -0.1149352657 -0.5997811708 -0.002114 -0.1107952345 -0.5906097421 0.000362 0.0883719187 -0.07692160493 0.00062 0.08995505133 -0.07698692629 -0.00122 0.08992591407 -0.07851743536 0.00062 -0.2990620255 -0.2901828386 -0.040264 -0.3133893675 -0.3080393005 -0.047814 -0.2931630812 -0.3069603011 -0.038618 -0.3257115117 0.5879155279 -0.005696 -0.3165683365 0.5845834795 0.000618 -0.4382645915 0.05208541239 -0.06347 -0.4534882967 0.03806347737 -0.051654 -0.46053925 0.06499831491 -0.093252 0.3967796993 -0.3148501174 -0.130264 -0.3440779607 0.6115448291 -0.005 -0.3478774208 0.622247994 -0.002288 -0.3544856318 0.6147224179 -0.00573 0.2094169241 -0.01086133759 0.00061 0.2149656151 0.007684092271 0.00062 0.2180626827 -0.00189780574 -0.074196 0.265881798 0.6853160166 -0.005852 0.2759946951 0.6832340908 -0.005828 0.2246044556 0.5512548975 -0.004442 0.2268111663 0.562674692 -0.006274 0.02483171151 -0.02042288604 -0.005038 0.02826640961 -0.02032595078 0.00061 0.02816990294 -0.01889992311 0.00062 -0.6072353625 -0.3752631959 -0.172894 -0.2469181394 -0.8085686413 -0.174528 -0.4463027444 -0.5486146355 -0.170806 0.3302353154 -0.06184044989 -0.441556 0.3343261833 -0.04110287367 -0.441044 0.3386038581 -0.05268302258 -0.469998 -0.2907834158 0.279416882 -0.024272 -0.2785945074 0.2856574341 -0.022112 -0.2745827373 0.2973053966 -0.02019 0.0405471844 0.1066505066 -0.022996 0.05818456371 0.1345280052 -0.022136 0.04203694712 0.1530499602 -0.020434 0.3638535146 -0.1877991295 -0.4232 0.3848534922 -0.197870705 -0.321154 0.3792536614 -0.1458057458 -0.491372 0.04290007802 -0.05269451361 0.00062 0.04419805814 -0.05659265307 0.000606 0.04287017552 -0.05474941167 -0.001602 0.2386503029 -0.2872269299 -0.203682 0.2161133389 -0.1554008195 -0.030678 0.2108967933 -0.1387387108 -0.024832 -0.1253363236 -0.6351238261 -0.01563 -0.1136946742 -0.6350457161 -0.005416 -0.119358023 -0.646156435 -0.011574 -0.1626362584 -0.07512238559 -0.002208 0.3648579742 0.1303763974 -0.197466 0.3674687967 0.1137010149 -0.297378 0.7088641059 -0.03803496621 -0.075282 0.7589193915 -0.0003011256956 -0.0716 0.7360395598 -0.04963338816 -0.05943 0.04357678073 -0.04722700789 -0.002738 0.04250627568 -0.04595069603 -0.001388 0.04198980527 -0.04768850599 -0.002686 0.1349465476 0.09761034519 -0.00681 0.1394429886 0.0913303939 0.00061 0.1416790658 0.1026983815 0.000618 -0.5576644931 -0.03289129926 -0.164238 0.04309252534 -0.08032512825 0.00062 0.04439404759 -0.08213277275 -0.001212 -0.3473755646 0.01654381476 -0.042958 0.7188002219 -0.2445153462 -0.084038 0.6974929817 -0.2246075167 -0.079216 0.6715981363 -0.2452716351 -0.07307 0.01306700837 -0.07986148683 0.00062 0.01349251517 -0.07828185198 -0.00131 0.01189133016 -0.07794734439 0.00062 0.2643091779 -0.6827754763 -0.003224 0.2708785799 -0.6913101527 -0.040692 0.2613647948 -0.6916317544 -0.006536 -0.2628095452 0.1957491313 -0.021724 -0.2576799203 0.2078328981 -0.018994 -0.2716805372 0.2078183031 -0.022314 -0.5439458796 0.07901676332 -0.159454 -0.5475913844 0.1192068816 -0.172496 -0.5740241979 0.1011048848 -0.19313 0.2305991177 -0.4249575033 -0.009542 0.2422412123 -0.4280628119 -0.012714 0.2335840502 -0.433501203 -0.00964 -0.1371212092 0.006730420262 -0.012828 -0.1262224691 0.008329155563 -0.013056 -0.1306577077 0.02667591803 -0.01409 0.3403309204 -0.3009955946 -0.264022 0.01931061721 0.2372389609 -0.003792 0.02121206737 0.2526958526 0.00062 0.02841689163 0.2417467173 -0.003054 0.03542669535 -0.03751005333 -0.004652 0.0344097252 -0.0386530301 -0.00538 0.0361669992 -0.03970109951 -0.00461 0.2327308571 -0.1049592587 -0.025434 0.2111422798 -0.1065012303 -0.031686 0.2210094913 -0.1236239844 -0.030804 0.09387326589 -0.06600827362 0.000614 0.09429686099 -0.05972110121 0.00062 0.09294934964 -0.06359630274 0.00062 0.004031847978 0.2106807951 -0.009028 0.01045928061 0.2047540949 -0.009842 -0.3313147148 0.5980234668 -0.005432 -0.3221197705 0.5979548218 -0.003724 -0.3885436193 0.0858036615 -0.034914 -0.3513537714 0.08702547619 -0.029566 -0.3820596479 0.1041313907 -0.030786 0.2772265981 0.5170783407 -0.020296 0.2939096699 0.4973591501 -0.03608 0.2995799882 0.5112341299 -0.04526 -0.006099319117 -0.02630351237 0.00062 -0.002403372411 -0.02493541252 0.000564 -0.004854293874 -0.0269974683 0.000618 -0.1612985476 -0.004446627174 -0.013348 -0.1769503101 0.009435385766 -0.01606 -0.1515785864 0.009561096763 -0.014762 -0.3424053753 0.1548557341 -0.025178 -0.3840711603 0.134194961 -0.027864 -0.1397941911 0.7770229781 0.00062 0.3190261551 0.08807490857 -0.012776 0.3272112064 0.08830142371 -0.028718 0.3230152114 0.09459024156 -0.015258 0.07449749957 -0.03418004179 0.00062 0.07601673394 -0.032593303 0.00062 0.07349993648 -0.02879196725 0.00062 -0.1154831256 -0.1137061441 0.000614 -0.1380176541 -0.1216462017 0.00062 -0.1100377181 -0.1192770269 0.00062 -0.1392946822 0.2188887115 -0.002334 -0.1356977858 0.2295851842 0.000618 -0.1303498466 0.2170137625 -0.00282 0.294610832 0.6675433449 -0.007358 0.3041323968 0.6695922834 -0.003 0.298210002 0.6620180448 -0.007916 0.2824814701 0.6347100925 -0.016988 0.2717272044 0.6531458231 -0.01003 0.2656410777 0.6452212168 -0.012584 0.3135248078 0.01516515836 -0.099516 0.3243040703 0.1277556223 -0.00987 0.3244603529 0.1347977102 -0.010248 -0.2618511247 0.2975091636 -0.015884 -0.2521615898 0.2921655821 -0.006208 -0.2681671982 0.2886024979 -0.019522 0.2067734958 -0.4932082894 -0.003392 0.2036408051 -0.50480149 -0.003372 0.1985420025 -0.494626141 0.00062 -0.002401712126 0.8371153307 -0.008152 -0.005000510131 0.845566354 -0.012356 -0.009659241977 0.83724082 -0.009554 -0.02098292879 -0.03506830242 0.000586 -0.01869117145 -0.03255446689 0.00062 -0.01791840072 -0.03713240126 0.000616 0.2309358988 -0.3765954315 -0.03938 0.2490963256 -0.3838663002 -0.04476 0.2482687369 -0.3626083378 -0.13343 0.1438767713 0.08353381213 0.000594 0.1482060394 0.07639823211 0.000618 0.3382399143 0.1723671644 -0.023306 0.1317762673 0.07411314756 -0.00722 -0.1503799397 -0.7231118871 -0.010068 0.3009206948 0.349289876 -0.007106 0.2967425364 0.3406175427 0.00062 0.304337764 0.340301429 -0.00619 0.03220135155 -0.0438698424 -0.002332 0.03570393418 -0.04411967854 -0.004572 0.03402040381 -0.04106718904 0.00062 0.320882893 0.007403910343 -0.205794 0.313154252 -0.003153691575 -0.194836 0.3537186821 0.3958047025 -0.23131 0.3754882926 0.399063977 -0.254484 0.6444859828 -0.3468642143 -0.08435 0.672070344 -0.3585869941 -0.102382 0.6159600344 -0.3944251716 -0.093352 0.1196440113 0.1168010788 -0.012038 0.1247182494 0.1068872641 -0.009726 0.1310914976 0.1134914819 -0.006538 0.2443501321 -0.5035418744 -0.006476 0.2500614647 -0.4844589159 -0.008956 0.2074728943 -0.357781313 -0.050036 0.2171530923 -0.365650597 -0.034958 -0.2674059668 -0.2601064796 -0.025648 -0.2456578719 -0.2659218824 -0.022596 -0.2356972325 -0.2387562947 -0.016988 0.02500003868 -0.01616638713 -0.00938 -0.03031570596 -0.006974068655 -0.01272 -0.02731174396 -0.002934962046 0.00062 -0.02769526773 -0.008774246288 0.000614 0.2459508576 -0.0006242765287 -0.010962 0.2556139892 -0.009021217519 -0.014862 -0.1413544465 -0.9308351361 -0.003284 -0.1543729941 -0.9189966478 -0.008452 -0.1441693821 -0.9211671065 -0.004616 0.2055109899 0.6367949504 -0.002624 0.04341079783 -0.06140087875 0.000612 0.0440107128 -0.06237630353 -0.00047 -0.03480954499 0.1984819607 -0.00893 -0.03849642317 0.1804594521 -0.013296 -0.01076116323 0.1726374167 -0.016572 0.01266484144 -0.05434667601 0.000618 -0.2528688927 0.3008185284 -0.006416 -0.2460379066 0.2996809761 0.000618 0.2710896233 0.7239375464 0.00062 0.2793687511 0.716852868 0.00062 0.3834670669 0.2144801437 -0.238868 0.3687709972 0.2292822711 -0.180886 0.03942208827 -0.08872757849 0.00062 0.04073448947 -0.08820312795 -0.001202 0.04040403789 -0.08702954604 0.00062 -0.1538995755 -0.6844751417 -0.018742 -0.1491319839 -0.7011572617 -0.009284 -0.1646605342 -0.6909211268 -0.036746 -0.3063326259 -0.640808409 -0.168384 -0.3270848534 -0.6673685951 -0.184122 -0.2914766869 -0.6725753731 -0.179532 0.1974594776 0.6457244303 0.00062 0.2096264257 0.6630532075 0.00062 0.2097843204 0.6459405025 -0.003068 -0.02840084862 -0.01082047316 0.000606 -0.03729565486 -0.01756383812 -0.011164 -0.1190954532 -0.6718676762 -0.01075 -0.131868994 -0.6716749747 -0.035862 -0.1205276526 -0.6839461494 -0.009418 0.06391668965 -0.07408628449 0.000604 0.06174699654 -0.07358720496 -0.00299 0.06278958183 -0.07613379696 0.000616 0.08671568287 -0.0624089802 0.00062 0.09049196873 -0.06614228715 0.00062 0.7090061848 -0.1147586505 -0.05468 0.7125335817 -0.1382264202 -0.054268 0.6877003198 -0.129997084 -0.059586 0.01192854284 0.1962684942 -0.011866 0.002759939263 0.2004247627 -0.0112 -0.2614893466 0.4539244047 -0.008878 -0.2554514452 0.4455509436 -0.008614 -0.2502035206 0.4564433582 -0.006188 -0.4050059994 0.02941720003 -0.04873 -0.4306743853 0.03291615135 -0.049738 -0.4248547038 0.0108350601 -0.04999 0.03961641953 -0.07462889674 0.00062 0.0414487635 -0.07889248091 0.000608 0.3067376801 -0.6446122411 -0.005058 0.3028541095 -0.644292892 0.00062 -0.04696321219 0.8402196648 -0.014532 -0.04367241307 0.8542911359 -0.0196 -0.05631363539 0.8523775617 -0.03427 0.3227129854 -0.03892084041 -0.390742 0.2360543632 0.6512834221 -0.005618 0.2455145173 0.6551514562 -0.005716 0.239796981 0.6599940731 -0.00476 0.2920378238 -0.5475524304 -0.006718 0.2937795102 -0.536394369 -0.009852 0.2832149485 -0.5382325339 -0.006114 -0.2316731922 0.3644025962 -0.006988 -0.2413040114 0.3656538528 -0.009054 0.274528836 0.7100882716 -0.000712 0.08584762635 -0.04620228535 0.000606 0.08270923684 -0.04506116403 -0.008342 0.8004088478 0.08967151558 -0.173708 0.7855039253 0.05065788919 -0.107772 0.3540341426 0.1412637089 -0.169542 0.3669002966 0.1476852347 -0.178868 0.2722429995 -0.5974251783 -0.00108 0.03636911683 -0.05223219933 0.00062 0.03795435467 -0.05464246894 0.00062 0.039484326 -0.05306777008 -0.0052 -0.003031904695 -0.06235010215 0.00062 -0.005548337428 -0.06302100282 0.000618 0.06168777723 0.9429923737 -0.012432 0.03547934561 0.9373397003 -0.040518 -0.1906188179 -0.6311158635 -0.046148 -0.1900857509 -0.6476138403 -0.05108 -0.278316278 -0.6466197795 -0.156686 -0.1205629701 0.08826900313 -0.01857 -0.1183834719 0.07194840369 -0.016358 -0.1063272008 0.08617969838 -0.01994 -0.03944788488 -0.0886105441 -0.008192 -0.03666064873 -0.0721187546 -0.009264 -0.04520534748 -0.0675120583 -0.009544 0.07195163262 -0.0755805388 0.00062 0.06991167156 -0.07914637237 -0.001762 0.06872674893 -0.07695132439 -0.004212 0.3084048099 0.3329568845 -0.010278 0.3024193864 0.3265903286 -0.006662 0.3088833361 0.3227794862 -0.01265 -0.04779836007 -0.1732917911 0.00062 -0.05158286893 -0.1675842693 -0.00017 -0.05408005831 -0.1731744969 0.000558 -0.04235921568 0.00233702535 -0.00938 -0.04250103812 -0.005102443879 -0.009614 -0.03489668288 -0.002847052339 -0.010374 -0.4811387979 0.200695573 -0.05968 -0.4634103603 0.2169016075 -0.028748 -0.2051409872 -0.03659637322 -0.014856 -0.1828545178 -0.01349510924 -0.013292 -0.1937865299 -0.01066495423 -0.012888 0.8576434434 -0.08878621657 -0.070982 0.8790340451 -0.1023631723 -0.081846 0.8840188153 -0.07351322613 -0.072212 -0.1209767883 -0.04986075246 -0.009212 -0.1422311259 -0.04453194202 -0.009342 -0.1348092578 -0.0318255336 -0.010406 0.07550186783 -0.05893170436 0.00062 0.07704192488 -0.06024957333 -0.001896 -0.09783509863 -0.1008707658 -0.006184 -0.08621892895 -0.09915259788 -0.007714 0.3456035821 -0.01942576597 -0.453394 0.405778787 0.2717223612 -0.312604 0.4055180663 0.2472806686 -0.285094 0.4214963122 0.2582172646 -0.328904 0.2465938325 -0.5943978331 -0.002146 0.2391172547 -0.5914314433 -0.002178 0.2436713756 -0.5969494784 -0.001286 0.2751338057 0.7044767665 -0.002608 0.3095683764 0.1797506332 0.00062 0.3190109402 0.5624539966 -0.061372 0.3323607771 0.5723712283 -0.078142 0.3317836806 0.5481837533 -0.094166 -0.04762900554 -0.01239290963 -0.009526 -0.03685717136 -0.009436695866 -0.010116 0.1111874257 0.005763958849 -0.047494 0.1148262368 -0.003625552436 -0.058198 0.1208938347 0.004316190632 -0.05639 0.2365533724 -0.08504248827 -0.01938 0.03372327979 -0.05979285319 -0.002956 0.03303728519 -0.05845447465 0.00062 0.03466646504 -0.05856492806 0.00061 -0.2517794038 0.2382804507 0.000618 -0.2404309063 0.2232211542 0.000596 -0.2555065757 0.2638845005 0.000618 0.03793336244 -0.07679951777 -0.00217 0.03661883416 -0.07628006704 0.00059 0.02057136365 -0.02503999075 0.000614 0.09609748697 -0.04618301607 -0.001978 0.09499488879 -0.0474787334 0.00062 0.09480070258 -0.04541353507 0.00062 -0.05875177882 0.09011640845 -0.018848 -0.04136928825 0.0976804386 -0.019448 -0.05285214957 0.09922509953 -0.019972 -0.1864864441 -0.001666183146 -0.015684 -0.2090165133 0.007110112057 -0.018582 -0.4222525809 -0.3241466578 -0.120096 -0.4005168347 -0.296461873 -0.10446 0.02320666606 -0.04414416928 0.000594 0.02604990004 -0.0480504469 0.000572 0.1047331945 -0.0630740307 0.000618 0.1040816486 -0.06072482299 0.00062 0.336160021 -0.4749871745 -0.018294 0.08369979355 -0.04886415194 0.000604 0.2531681738 0.7649327784 -0.005236 0.08696587935 -0.04440073005 0.00062 0.08865512067 -0.04275949756 -0.001892 0.08946200373 -0.04529729299 0.00062 -0.2656245734 0.0621278105 -0.0252 -0.2903505838 0.1892897197 -0.024034 -0.5349032532 0.1734093089 -0.224336 -0.4959243909 0.1728804675 -0.149898 0.1855984081 0.01444428545 0.000606 0.1806519616 0.01043547933 -0.003448 0.182970055 0.004979537976 -0.002104 -0.266835428 -0.3418719025 -0.027466 -0.2295670135 -0.371428236 -0.02571 -0.2711207842 -0.3773779765 -0.030178 0.2486140478 -0.6036581101 0.000408 0.2511477004 -0.6033783758 -0.00138 0.2294862115 -0.3571322969 -0.04533 -0.3132656003 0.2577014577 -0.025812 -0.3354086317 0.3037345579 -0.025794 -0.4413532039 0.1870816927 -0.02869 -0.45838244 0.1988336102 -0.029304 -0.0903734651 0.8351196301 -0.027806 -0.08055416923 0.8323812388 -0.033832 -0.08169182268 0.8432156682 -0.054864 -0.1252938962 -0.6945261496 -0.008494 -0.1168006429 -0.6941482843 -0.006966 0.03690771838 -0.07896902633 -0.003394 0.03459355957 -0.07856538095 0.000618 0.033123311 -0.07916449547 -0.000342 0.3536590421 0.07350334226 -0.261116 0.350452409 0.06497332689 -0.231068 0.3446320016 0.0711536331 -0.207472 0.1439588678 -0.1306198512 0.00062 0.1100249562 -0.1137187092 0.00062 -0.3323286492 -0.1549876595 -0.049248 -0.3097904859 -0.1577358569 -0.036174 -0.3158396518 -0.137717873 -0.040798 0.1479495676 0.04623329245 0.00012 0.1452402118 0.04688032354 0.000602 0.1452883335 0.04999760467 0.000566 -0.1336148181 -0.8068854503 -0.003796 -0.1321538868 -0.8178477887 -0.004334 -0.1234243156 -0.8232581693 0.00062 0.1257134963 0.02484864621 -0.043152 0.1326506701 0.02542162395 -0.03708 0.1299248102 0.01922365772 -0.044536 0.2734591114 -0.5894342436 -0.002784 0.2708831929 -0.5923824389 0.00062 0.2663290895 -0.5861029448 -0.003222 0.7101301605 -0.2722423469 -0.085704 0.6491119224 -0.2929393804 -0.066308 0.09660192629 -0.09743632328 -0.002104 0.1016363947 -0.1026649533 -0.002436 0.1024144461 -0.09448096344 -0.003714 0.2312022153 -0.02608346677 -0.136864 0.2191375966 -0.02006640372 -0.118138 0.2300705999 -0.01549126091 -0.055844 0.03149600602 -0.06601872068 -0.005336 0.04893275927 -0.01354286361 0.00062 0.04960072179 -0.007254044841 -0.01654 0.05396885958 -0.01327121556 0.00061 0.04454043241 -0.05778420743 -0.002082 0.04308314479 -0.05761559763 -0.002972 -0.2922381608 0.5338715984 0.000618 -0.1438305785 -0.7166987245 -0.007564 -0.1348011604 -0.7091212095 -0.006934 0.1124367597 0.1333230002 -0.013984 0.1139367229 0.1419021026 -0.012282 0.1119268486 -0.1089677005 -0.001254 0.1191148933 -0.1055881996 -0.002868 -0.1408577522 -0.5219379611 0.000444 -0.1416491657 -0.5322075103 -0.0019 0.07312265367 -0.02230846271 0.00062 0.07338930232 -0.0163304503 0.00062 0.06743664132 -0.02152812395 0.000618 0.293497654 0.006522022996 -0.014578 0.3001789858 0.00622617865 -0.070566 0.5719821525 -0.2692688646 -0.039166 0.5537606018 -0.2580591266 -0.024374 0.5531093473 -0.2768741717 -0.023876 0.0728588933 -0.03771918047 0.000618 0.07161235809 -0.03386941109 0.00062 0.07080332488 -0.03709223497 -0.00335 0.0319317589 -0.02522340723 0.000614 0.03148255716 -0.02783157258 -0.00138 0.03567667797 -0.02654775712 0.00061 0.08036637298 -0.0398990885 -0.00938 0.07639862383 -0.03881402874 0.000608 0.07888961482 -0.04205833771 0.00062 0.2986937777 -0.5863592251 0.000618 0.2984146072 -0.5835557504 -0.001642 0.2895768343 -0.5853992919 0.00062 -0.2443596968 -0.4720699556 -0.032146 -0.237197775 -0.4999274231 -0.033416 -0.2162381424 -0.477494906 -0.029708 0.06901062768 0.9759927309 -0.02048 0.01746442916 0.9346218005 -0.091306 0.8223048621 -0.1908627101 -0.099574 0.3150949598 0.4821315421 -0.106546 0.06013483931 -0.07636111689 0.000612 0.06153387958 -0.07698470513 0.00062 0.3511654403 0.3374941951 -0.080396 0.3415601964 0.3500043971 -0.064602 0.3417058476 0.03118019566 -0.252854 0.3389396555 0.03779618105 -0.1746 0.09052960095 -0.04134025041 0.000612 0.09454610362 -0.04458465416 0.00062 0.2548438125 -0.5962879398 -0.002144 0.2529919304 -0.5990877124 8e-06 0.2554242464 -0.6004219741 0.000616 -0.7300921711 -0.1578248451 -0.127064 -0.7003725337 -0.1834332525 -0.139298 -0.6866269361 -0.1506457068 -0.138944 -0.3250129879 -0.1787043704 -0.042136 -0.3029402258 -0.1740104232 -0.032078 -0.1711930571 -0.4208145987 0.000618 -0.1833595616 -0.436674996 0.000618 -0.1817472666 -0.428225608 -0.001716 0.3609747912 0.3195237132 -0.095088 0.3653745359 0.2975258109 -0.125008 0.3860696446 0.3146177943 -0.186296 0.3332108623 -0.6246188975 -0.01209 0.3340303161 -0.6102584528 -0.013036 0.3294745172 -0.6165580668 -0.01078 0.1460080516 0.0451534532 0.000602 0.1433971628 0.04700315711 -0.004434 0.0415107779 -0.09745237821 -0.000804 0.04209258673 -0.09606175353 0.000618 0.01350104975 -0.07516535339 -0.001244 0.01428687849 -0.07505462024 0.000608 0.01378523806 -0.07419924531 -0.001966 0.172479757 -0.0191479108 0.000618 0.1772252375 -0.01174985468 0.00062 0.1772965301 -0.01551985855 -0.00542 -0.2915850106 -0.2577007618 -0.03278 -0.3085582796 -0.2545720287 -0.034908 -0.3045473088 -0.2733398456 -0.036532 0.350085368 0.4829929902 -0.167418 0.3303815758 0.4747200995 -0.094746 0.3445112728 0.4568380604 -0.153416 -0.02988466325 0.2346418184 -0.002962 -0.02661507727 0.225305735 -0.004734 0.6807923672 -0.03335646808 -0.098656 0.6777645028 0.02762656194 -0.275408 0.6279278784 -0.01065498949 -0.24993 0.8334613479 -0.0564506493 -0.064852 0.8356686878 -0.1015872061 -0.058888 -0.003128894106 -0.05022775828 0.00061 -0.005490201372 -0.04951691098 -0.001784 -0.2202462004 -0.2481874771 -0.008568 -0.2134722568 -0.2574332376 -0.010636 -0.2082931207 -0.2465086343 0.00062 0.2913052701 -0.579234265 -0.003098 0.285666746 -0.5830760886 -0.002828 0.2844392053 -0.574704715 -0.003632 -0.2585427967 0.4626797641 -0.005832 -0.3357537156 0.6219747757 0.000618 -0.3341720266 0.6084105584 -0.0042 -0.1585257619 -0.7821834235 -0.021868 -0.1716726306 -0.7910244754 -0.030912 -0.1507004653 -0.8075449629 -0.014214 0.2958463868 -0.4896103669 -0.030474 0.2831536032 -0.4801956318 -0.016456 0.2818905169 -0.4952412685 -0.014434 0.06191697073 -0.01071515106 -0.00338 0.0656462532 -0.01492199703 0.000598 0.04537229144 -0.02711897087 0.000612 0.04265600954 -0.02675706675 -0.003004 -0.1889027859 -0.3249827356 -0.00951 -0.2002234325 -0.325811831 -0.016248 -0.1952755984 -0.337739803 -0.009666 0.4028154798 0.4283069754 -0.313042 0.4508664025 -0.2372355207 -0.116772 0.3534267951 0.5084813337 -0.177632 0.3701308254 0.4916344391 -0.267008 0.3801095752 0.5155333157 -0.246666 0.05638165869 0.06473795465 -0.026012 0.07434883324 0.0697880195 -0.02859 0.06217150099 0.05669950061 -0.028152 0.09488764166 -0.081055713 -0.001208 -0.1025651316 -0.1259184005 0.000606 -0.09543420807 -0.119485058 -0.004864 -0.1045373317 -0.1212896801 0.00062 0.5076421763 0.2129972294 -0.564486 0.4860877578 0.1684993478 -0.5636 0.4787263599 0.2169151767 -0.482754 0.09012818407 -0.04714254052 0.00062 0.08980926524 -0.0491157551 -0.001282 0.09062245538 -0.04930492175 -0.001714 0.2540562962 -0.6966947709 -0.00309 0.2547431967 -0.7065246371 -0.004618 -0.0662831516 0.1572999519 -0.015068 -0.03387813439 0.1482131154 -0.016298 0.03391137487 -0.0508737196 -0.006298 -0.1205636552 0.7860128307 0.000318 -0.1075267984 0.7886066114 0.000496 0.2670925402 -0.3922431751 -0.118718 0.2621624922 -0.3750081505 -0.157828 0.02380998296 0.02257021351 -0.015232 0.0131096714 0.02642152741 -0.01582 0.02353785829 0.0350157752 -0.022314 -0.1462304608 0.7825349206 1.4e-05 -0.1465449354 0.7885861187 -0.003836 -0.1529317458 0.7815880454 -0.00038 -0.1051095103 -0.09262555113 -0.007156 -0.1274769328 -0.09713162162 -0.00592 -0.1192409649 -0.1041423422 -0.00486 -0.2382701276 -0.1784680932 -0.00732 -0.2460345164 -0.1711240635 -0.00938 -0.1441033065 0.7654626062 0.00062 -0.2844387816 0.5492300385 0.00062 -0.267646911 -0.002648814147 -0.0224 -0.2662124943 -0.01971780793 -0.02437 -0.2551754457 -0.008227673533 -0.022106 -0.4735029603 0.271350929 -0.03912 -0.4646715109 0.2378292326 -0.019092 -0.4455240148 0.244408418 -0.028868 -0.3870686393 0.4332068689 -0.031612 -0.1567518853 -0.09780005614 -0.00538 -0.1477637319 -0.1074707779 -0.00472 -0.1454095872 -0.0975093243 -0.005548 0.2803666304 -0.673817941 -0.004586 0.2781840556 -0.682823087 -0.013048 0.2717336145 -0.6739213866 -0.003562 -0.04798188185 0.1985862014 -0.00679 -0.04314691174 0.1890081882 -0.0106 0.2515307039 -0.7148069824 -0.006098 0.2498003174 -0.4011396782 -0.022054 0.2619829393 -0.4127415333 -0.03572 -0.4223996808 0.4522910077 -0.139634 -0.149793338 0.2258287803 0.000548 -0.2127122209 0.3448880008 0.00062 0.07572743432 -0.02516841444 0.00062 0.07704992131 -0.02308185383 -0.003168 0.07887081082 -0.02526521653 -0.00538 0.1902859188 -0.2154470031 -0.009 0.1989678512 -0.1997764349 -0.01938 0.1997157768 -0.2151100446 -0.016248 0.03237201729 0.06269678113 -0.02517 0.01474143127 0.07515707546 -0.026076 0.02824737053 0.07347812963 -0.026086 -0.2764360323 0.5224541869 0.000618 -0.2688045689 0.5126650279 0.000292 0.4619388216 0.3110395811 -0.391188 0.4541505552 0.2816369106 -0.356896 0.4893254933 0.2861775291 -0.45455 0.3416278424 -0.06402446103 -0.479438 0.2541709321 -0.1105920074 -0.08478 0.2489782979 -0.09489397592 -0.080306 0.05789365348 -0.07603859153 -0.002348 0.3209046167 0.1196763867 -0.006188 0.3180559407 0.1259060438 -0.002492 -0.5302787016 0.03938733867 -0.162118 0.2076793523 -0.2490431877 -0.020422 -0.2552274458 -0.1082442357 -0.018804 -0.233392901 -0.1160453839 -0.014066 -0.2340142736 -0.09773541546 -0.015902 0.02822090843 -0.05925386623 0.000618 0.02539166639 -0.06163386721 0.000618 0.02660540782 -0.05654951302 0.00062 0.1249923845 0.05664882018 -0.022412 0.1255248942 0.05017984786 -0.028158 0.1298391544 0.05367769087 -0.01407 0.03373212411 -0.0749355843 0.000612 0.03503400306 -0.07674296717 -0.004708 -0.4386128179 0.5186035005 -0.121166 -0.450256145 0.5006713969 -0.185972 -0.4306592059 0.4978972151 -0.111938 0.136458276 0.009207343409 -0.032292 0.1408050268 0.01501611259 -0.01634 0.1342764731 0.01501112996 -0.03276 -0.06788532869 0.8058473762 -0.005292 0.1103345726 0.1497744919 -0.012406 0.1510673998 -0.1092327049 -0.009482 0.1567748702 -0.1022792868 -0.01221 0.006588907852 -0.03641058828 -0.004894 0.006306223707 -0.03241114045 0.000606 0.009706839322 -0.03854771909 0.00062 0.4105670947 0.08533775028 -0.41819 -0.2037531555 0.3832169539 0.00062 -0.2061494471 0.380941145 0.000618 0.009403200981 -0.04576953595 0.00062 0.005884267623 -0.04341876905 -0.003082 -0.1736429797 0.7772212677 0.00062 -0.1704841252 0.7797771295 0.00062 -0.1708097914 0.773121564 0.00042 -0.1377875385 0.775358782 0.00062 -0.1378054153 0.7773599696 0.00062 0.1283808275 0.08647352311 0.00062 0.1274699372 0.08014761509 0.000616 0.1350380477 0.08527314531 -0.005372 0.04985009142 0.245998181 0.00062 0.05396480124 0.231807319 -0.00386 0.5021826983 -0.2289622651 -0.054978 0.3256954571 -0.5648176354 -0.012796 0.3166817087 -0.5694162324 -0.010732 0.319140283 -0.5583801906 -0.012486 -0.02252276507 -0.00993553895 0.00062 -0.02438549985 -0.002214029515 0.000618 -0.2254358747 -0.1538348357 0.000616 -0.2246875051 -0.1425842854 0.000616 -0.2801473061 -0.5663116818 -0.095386 -0.2602420649 -0.5514517946 -0.0588 -0.2545618316 -0.5798984202 -0.075918 -0.164624758 -0.02408551741 -0.013486 -0.1892586483 -0.04517291143 -0.0131 -0.1735836877 -0.04910236171 -0.012178 0.008584161164 0.8179765948 0.00062 -0.009213991765 0.8155914741 0.00062 -0.02841584732 0.8072824826 0.00062 -0.1436404967 -0.002902427452 -0.013294 0.1087166625 -0.01256325061 -0.024688 0.1054027402 -0.02091911545 -0.0138 0.11246691 -0.02180632072 -0.038424 0.001560382991 0.8420465039 -0.00943 0.2948144663 -0.6219019446 0.00062 0.2906638915 -0.6207850259 0.00062 0.2924645415 -0.6204074754 0.00062 -0.2399364384 -0.5967203395 -0.068614 -0.2313821183 -0.5820290001 -0.047664 0.02722460447 -0.04474270743 0.00062 0.02746687405 -0.0458155228 0.00062 -0.2492860305 0.2214124666 -0.006036 -0.2504093103 0.2313025012 0.000616 -0.007941463682 0.1505492271 -0.019594 -0.02818292361 0.1379013207 -0.018476 -0.02347679969 0.1263906391 -0.01938 0.2585400732 -0.5877074526 -0.00324 0.258703905 -0.5933421136 -0.002096 0.2640665895 -0.5923878217 -0.002384 0.2774057087 0.560952006 -0.024224 0.2898321903 0.5698637121 -0.028658 0.05763230323 0.01124740987 -0.023562 0.07030371281 0.01234701435 -0.02606 0.06506061807 0.003646695904 -0.017126 0.08178977606 -0.03662769464 0.00054 -0.227559249 -0.7404989678 -0.102916 -0.208001939 -0.7447982521 -0.042832 -0.203518983 -0.7215719913 -0.037584 -0.002069625563 -0.03580147873 -0.00938 -0.004389639362 -0.03880060594 0.00062 -0.00335926271 -0.03950083727 -0.000368 0.08064208123 -0.05801986114 0.000614 0.03588394934 -0.02365041644 0.00062 0.03795277254 -0.02035341518 -0.00164 0.0348391553 -0.01847040518 0.00062 -0.6158870387 0.2909228144 -0.293506 -0.5905094439 0.3257697242 -0.319428 -0.573922215 0.2926551717 -0.295732 0.06423712687 -0.02949603217 0.00062 0.06608707498 -0.03223400348 -0.00319 0.06331769218 -0.03651757509 0.00062 -0.1631991297 -0.8725991524 -0.039418 -0.1593365906 -0.8889217238 -0.047896 -0.1736908881 -0.8791982209 -0.04552 0.03959353216 -0.0798148823 -0.00191 0.03912001154 -0.07794910298 0.000614 0.3031698094 -0.5834010492 -0.002174 0.299460721 -0.5783300711 -0.00265 -0.0009982744706 -0.0420423294 0.000616 0.1120074881 0.04910539648 -0.031018 0.1188747778 0.05321747935 -0.028728 0.2267401801 0.5206619798 0.00062 0.2660081832 0.4622676757 0.00062 0.3342139205 -0.07722342384 -0.496268 0.3310448022 0.6668001152 -0.019298 0.3180648729 0.6712660392 -0.010264 0.3219674097 0.6574096388 -0.01425 0.142940418 0.03882996191 -0.006018 0.1404706117 0.03627704864 0.000596 0.1436460319 0.03506583608 0.00062 -0.0005533137385 -0.05067100749 0.00062 -0.005285780776 -0.05524289463 0.00061 0.001755563516 -0.05889231685 0.00062 0.09210644259 -0.049512857 0.000612 0.09116208812 -0.05047470771 -0.003256 -0.8081903772 -0.03513298381 -0.137124 -0.7770412082 -0.06133096629 -0.1318 -0.7815556661 0.04835063024 -0.185032 0.3816106742 0.1568886049 -0.22708 -0.2016390117 -0.4748618676 -0.024322 -0.1885798284 -0.4717718455 -0.016934 -0.09364873215 0.8480864803 -0.072834 -0.1030274143 0.8391503081 -0.035872 0.4220810655 0.04581552428 -0.540102 0.4205014298 0.05845402711 -0.496754 0.4098254395 0.04864831498 -0.440118 0.2906185573 -0.6155487099 0.00062 0.03675016814 -0.02625682388 0.000616 0.03867817547 -0.02751012528 0.00062 0.0398973491 -0.02608330339 -0.005098 0.1965714386 -0.006553967558 0.000616 0.1878093023 0.00384041384 0.000618 0.3468677249 -0.5486298607 -0.017714 0.2758171346 -0.113135812 -0.27622 0.2920488497 -0.07670513238 -0.430746 0.8676951358 -0.1328954565 -0.077446 0.8553596541 -0.1102260881 -0.063476 0.8369817401 -0.124211677 -0.062338 0.2663050511 0.556204546 -0.018946 0.2547114713 0.5604647222 -0.0142 0.3426873423 0.3214515987 -0.0535 0.00397475115 -0.02073387217 -0.007864 0.009822850536 -0.01747531496 0.000608 0.004718510719 -0.014017792 -0.009228 -0.1575732004 0.7803239656 0.000174 -0.1538625932 0.7776638918 0.000254 0.03580967163 -0.06070856749 0.00062 0.0386533333 -0.05887040142 0.00062 0.4000503174 0.404207002 -0.310754 0.3817280509 0.4222667129 -0.296222 -0.1388516055 -0.06359092315 -0.00946 -0.1367176969 -0.07752510888 -0.007306 0.2771309604 0.7092579116 0.000616 0.2435611442 0.5784104031 -0.011984 0.02926431643 -0.07744882931 -0.0011 0.03102057906 -0.0769280285 0.000618 0.03063395441 -0.07620826185 -0.00304 -0.146554438 -0.9010116483 -0.019412 -0.1416156421 -0.8863258973 -0.01345 -0.1983243714 0.209858514 0.00062 -0.1797168623 0.2107015967 0.00062 0.02881609711 -0.07326734749 0.00062 0.02940390871 -0.07500819631 -0.001266 0.2111324881 -0.1885153898 -0.020396 0.2289317039 -0.1992693071 -0.04824 0.2275581485 -0.1818534697 -0.058986 -0.1361842599 0.2103474545 -0.00338 0.1210249372 0.1010110871 -0.00866 0.1273149681 0.09787024547 0.00062 0.02925528332 -0.009965292907 -0.006536 0.03021275414 -0.0150443112 0.000612 0.03447008833 -0.01278327911 -0.013502 0.2418911897 -0.6230363524 -0.000316 0.2435008737 -0.6207031562 0.00062 0.2455135387 -0.6227804358 0.00062 0.04272380836 -0.01792426837 -0.003036 0.04552995109 -0.02180270437 0.00062 0.04662832579 -0.01813296969 0.000604 0.1656090753 -0.1318710524 0.00062 0.1700851278 -0.1320427353 0.00062 0.1679224309 -0.1286691657 0.00062 -0.6030032661 -0.3388983788 -0.1721 -0.629737706 -0.3166134246 -0.16707 0.07339742201 -0.06477759848 -0.00538 0.07489836533 -0.06239114696 -0.00538 0.07178579139 -0.06311423971 0.00062 0.08655231572 0.08975304243 -0.024704 0.07545281515 0.0981590841 -0.0255 0.07256519046 0.08281051888 -0.026764 -0.4323792474 0.1687234058 -0.02986 -0.1349533483 -0.584638979 -0.00882 0.0825391444 0.1095012078 -0.023722 0.07168128443 0.1109700676 -0.023338 0.2689169343 0.6748711554 -0.006652 -0.1798726242 -0.09558160915 -0.001274 -0.1691020153 -0.102894182 -0.004784 -0.1680076675 -0.09172179662 -0.004068 0.07014560189 -0.06141686144 0.00062 0.07038625604 -0.06379384948 0.00062 0.07462075162 -0.04139905786 0.00062 0.07427005372 -0.03888457188 -0.00538 0.07211156437 -0.03944348909 -0.00307 0.06794242283 -0.0788848605 -0.000384 0.05232442098 0.08658714237 -0.025312 0.04525254714 0.09486058676 -0.023542 0.03895535561 0.08283250491 -0.023822 -0.3827941953 -0.1048753188 -0.091824 -0.3673737842 -0.1283181423 -0.075652 0.2081280199 -0.2634307557 -0.033802 0.1997142497 -0.273409514 -0.010774 0.1968446859 -0.2602636406 -0.017296 0.0133888035 -0.07633517892 -0.00229 0.04188754747 -0.09972004676 0.00062 0.04401970294 -0.101989772 0.000618 0.04470538302 -0.09656162156 0.00062 0.1497673168 0.04243648802 -0.003268 0.1502985171 0.03993959007 0.000614 0.1474479843 0.04208110969 -0.001948 0.07927814292 0.2019293401 -0.010492 0.08700283829 0.2091301882 -0.00575 0.07799831842 0.2115536626 -0.008122 -0.06858936696 -0.06784645912 -0.009248 -0.04142341824 -0.04928686124 -0.009822 0.3352045598 0.2312877699 -0.02979 0.3252432438 0.2343561662 -0.022634 0.3235360483 0.2156619443 -0.01924 0.09573612444 -0.04784384654 0.000186 0.09434848103 -0.04905939554 -0.00524 -0.2969398321 0.5596913245 -0.003394 -0.2959507967 0.5491126888 -0.00586 0.2588575946 -0.5994559727 -0.00048 0.2573337452 -0.5994206074 -0.00104 0.2569295437 -0.6011771129 0.00062 0.1488390723 0.03272497931 0.00062 0.1513832057 0.03703511448 0.000618 0.1538524128 0.03535644875 0.00052 0.2862032021 -0.587416707 0.000618 0.2798601332 -0.5822642768 -0.00346 0.211203067 -0.02750742999 -0.100918 0.2195171777 -0.03315162415 -0.063722 0.09399357083 -0.07346374729 -0.000984 0.09701516105 -0.07577239721 0.00062 -0.4479303965 -0.06851543634 -0.073058 -0.4705801298 -0.06568945492 -0.089212 0.2666608566 -0.5773213643 -0.003902 0.03278631788 0.8204142643 0.00062 0.02920196081 0.820150131 0.000588 0.02936702211 0.8176594315 0.00062 -0.219685965 -0.7777783789 -0.09636 -0.2497108286 -0.7875228026 -0.160172 0.09584746034 -0.01205236677 0.00062 0.09038104321 -0.01362378513 -0.003224 0.09253869157 -0.008073107814 0.000618 0.1459828194 0.03143676774 -0.00449 0.1478124677 0.03582156981 -0.001944 0.1916902372 -0.1075387307 -0.022794 0.05356105273 0.9168928564 -0.011402 0.05807483651 0.929496116 -0.012522 0.06449876321 0.9188915002 -0.006446 0.2024091209 -0.02654525032 -0.083796 0.1941444141 -0.03306578 -0.03938 0.2533872463 -0.6878537891 -0.001602 -0.3182257633 -0.3793155691 -0.040672 -0.2430699926 -0.09091910672 -0.017226 -0.2634621352 -0.09877566289 -0.022058 0.07637171197 -0.05055950353 0.00062 0.07721626689 -0.04947707828 -0.00291 0.07707812249 -0.04721876454 0.000608 0.7238319672 -0.221468937 -0.047872 0.7446285965 -0.2348264983 -0.075674 -0.1836900834 -0.3131731682 -0.007876 -0.1794016068 -0.3015669627 -0.006358 -0.1956827054 -0.2957357898 -0.010242 0.3476904107 0.2077045805 -0.075446 0.3436687791 0.1919673586 -0.03938 0.3316793025 0.2043427766 -0.024398 0.2814065141 0.7227244063 -0.003346 0.504234923 -0.5017871773 -0.111162 0.4754282233 -0.457796796 -0.110874 0.4705663974 -0.481169282 -0.111036 0.03243351929 -0.07599969043 -0.002806 0.1005296212 -0.03526061395 0.000618 0.1002645491 -0.02996086464 0.00062 0.3156790495 -0.6320845327 0.000616 0.3172947821 -0.6295247662 0.00062 0.3132247805 -0.6324366186 0.000618 0.2311192627 -0.04017729591 -0.142624 0.07922154361 -0.05370658858 0.00062 -0.1434246352 0.08152120585 -0.015596 -0.1322543378 0.07860487568 -0.015746 0.138013984 0.07846266078 -0.007378 -0.009096540427 -0.04915903097 0.000566 0.2157571616 -0.3502993952 -0.069014 0.6048573839 0.1748768114 -0.606108 0.5859380251 0.1348615702 -0.652406 -0.5848813324 0.2073359121 -0.272068 0.04117848527 -0.08899074262 0.00062 0.3405860126 0.697155649 -0.026014 0.4552357319 0.5267884427 -0.422906 0.5812776183 0.3897169755 -0.58885 0.0970378446 -0.0467870225 -0.001344 0.09654847456 -0.04829427188 0.000606 0.09747324322 -0.04940296196 -0.000252 -0.01513991025 0.2447169761 -0.001526 0.1198405334 0.04543357074 -0.036286 0.1155823861 0.03209341157 -0.027134 0.1134390832 0.04023411439 -0.028874 0.05345159439 -0.06944347899 0.00062 -0.1013251436 0.04673522978 -0.014458 -0.1118214725 0.03152001071 -0.012818 -0.1176047845 0.03808859207 -0.012844 0.1019151075 -0.01567319074 -0.018184 0.1018184838 -0.02080857968 -0.01071 0.09830174504 -0.0184178469 0.00062 0.3346699191 0.004390648139 -0.379732 0.3379217286 0.0151910481 -0.305614 -0.3283820866 -0.4919816749 -0.100828 -0.3030892398 -0.5128935296 -0.082562 -0.3006061555 -0.4811226343 -0.062504 0.348004035 0.05790311462 -0.206756 0.3372062526 0.06840372143 -0.150384 0.01739215616 -0.03617819561 -0.001184 0.02088080379 -0.03797565099 -0.007462 0.372526699 0.04546424024 -0.396888 0.3856714755 0.05754380448 -0.421078 0.3663780487 0.06217759427 -0.329802 -0.006034685607 -0.03553992423 0.00062 -0.004673454487 -0.03323214239 0.00062 0.1325877463 0.04848865771 -0.019706 0.1354643197 0.05399419694 -0.012606 0.1374491636 0.04973040614 -0.013642 -0.1120089394 0.813524952 -0.00868 -0.1088566124 0.8308597809 -0.018524 -0.1023198654 0.8140960745 -0.00908 -0.338302297 -0.133265468 -0.056028 -0.3420910203 -0.1124421936 -0.060736 -0.307587265 0.5449984303 -0.008484 -0.299747429 0.5366204935 -0.00669 0.3666787143 -0.4679656754 -0.046704 0.3738785822 -0.4853079596 -0.019012 -0.2521652858 -0.4216642161 -0.028466 -0.2307881328 -0.4014765422 -0.027206 -0.2568045284 -0.4049515446 -0.030386 0.1128338249 0.1858070322 0.000618 0.1033753149 0.1880060076 -0.005524 0.1029785375 0.1791072131 -0.005492 0.1826900695 -0.0401847266 -0.030438 0.1668881754 -0.04048042279 -0.039688 0.1615677863 -0.0534510336 -0.060758 0.02125047066 -0.02191891119 0.00062 0.308295527 0.4207672165 -0.026144 0.3415551483 0.137836123 -0.03395 0.3444964018 0.1196799768 -0.045582 0.3314645915 0.1327513578 -0.021676 0.6055963736 -0.2954950953 -0.05156 0.6255489877 -0.3068905324 -0.05961 0.6260963986 -0.2823020313 -0.057542 -0.05468870731 -0.128043144 -0.005914 -0.04741960667 -0.118953612 -0.00653 0.8900513405 -0.0009216998688 -0.065644 0.9002158203 0.02762289147 -0.073316 -0.1087278565 -0.1018904659 -0.006356 0.1406036573 0.05569242471 -0.007112 0.04477424792 0.06390737605 -0.02624 0.03900624263 0.07164675544 -0.026272 0.356373644 0.05733511951 -0.29086 0.3651979758 0.05140233294 -0.354246 -0.6392243964 -0.2518514078 -0.163028 -0.719766535 -0.2453296545 -0.129652 -0.1583116172 -0.04294486426 -0.011212 0.08145797507 0.01156985908 -0.028006 0.09169419537 0.008725577474 -0.02789 0.09791732526 0.01544861093 -0.040202 0.155469905 -0.06494438098 -0.028924 0.1483985518 -0.05433094525 -0.02366 0.02930048027 -0.0720175217 -0.001778 0.2381913151 0.6389481407 -0.009324 0.2443109858 0.6468348843 -0.007364 -0.2376834665 -0.2088838727 -0.006628 -0.2320236065 -0.213552291 0.000616 -0.232418953 -0.2020897527 0.000618 0.07681237146 0.03640887545 -0.030902 0.07697211205 0.02329174304 -0.026632 0.06623137735 0.03068294946 -0.026458 0.08797111962 -0.03748710312 0.000606 -0.4157280544 -0.1752131814 -0.110714 -0.3837203132 -0.1776846632 -0.082602 0.02861592588 -0.03069936541 0.00062 0.0249799228 -0.03212656577 0.000618 0.340139889 -0.5576463485 -0.014906 -0.1394937667 -0.1106117124 -0.002332 -0.1450462384 -0.1163253071 -0.00268 -0.1388943678 -0.1182985658 0.000618 0.19126965 -0.294589909 -0.003088 -0.1571336461 -0.7547264761 -0.019796 -0.1557938316 -0.7631977418 -0.019542 0.001507359992 -0.07450511555 0.000612 0.001002689416 -0.07234399102 -0.000284 -0.001467177046 -0.07411014867 0.00062 -0.05062349311 0.132393151 -0.017714 -0.3459898468 -0.2854096299 -0.053508 -0.3714912741 -0.2855191436 -0.082394 -0.3544098706 -0.3074047485 -0.061176 0.1890323041 0.6124065066 -0.001252 0.3015642803 0.3025519498 -0.009536 -0.1601854441 -0.111687852 -0.004164 -0.4445225507 0.3725309027 -0.154008 -0.06219601376 0.1247301714 -0.016814 0.04388275276 -0.01353805439 0.000612 0.04532232143 -0.01106062186 0.000614 0.7526463699 0.05642649817 -0.1861 0.7570463625 0.02973181254 -0.109644 -0.01594875286 0.2228480029 -0.005392 -0.01475368968 0.2136150357 -0.007742 -0.004552151098 0.2186862 -0.005544 0.2615002757 0.7515093215 -0.005786 0.2663859437 0.7457124541 -0.007128 0.2708833708 0.7532399799 -0.009066 0.2948339719 -0.6544362834 -0.003598 0.2959605617 -0.6626203025 -0.005236 0.3021879965 -0.6568042763 -0.00655 0.1994878699 0.5920280481 -0.006152 0.2071511395 0.5948285456 -0.007708 -0.06914493095 0.7943846532 0.00062 -0.05371190376 0.7981468153 -0.000202 0.1811920415 0.6112126854 0.00062 0.01622176837 0.001397734911 -0.011232 0.02647227258 0.0004493057898 -0.019368 0.02508390708 0.01078324599 -0.014926 0.2664506395 -0.09443591819 -0.254568 -0.2494960058 -0.7232390416 -0.147482 -0.2753641113 -0.7349690181 -0.186214 0.1522332468 0.04314218286 -0.001226 0.1505543229 0.04386060332 -0.001226 0.1521767396 0.04453368535 0.00052 0.2987536422 -0.4709704524 -0.03591 0.3180567623 -0.4719103014 -0.024854 0.3107814718 -0.4550208563 -0.117574 0.506669093 -0.417668796 -0.09454 0.5285531959 -0.432073488 -0.091886 -0.2093102039 -0.2654843835 -0.011792 -0.2249456283 -0.2586413478 -0.016302 0.03902899743 -0.03814149509 -0.00338 0.03735553794 -0.03850128767 -0.003674 0.03861074723 -0.04052131143 -0.00338 -0.158568797 0.7750685074 -0.000708 -0.1573881195 0.7781141819 -0.00018 -0.1608986668 0.7779793163 0.00052 -0.2378110625 -0.2276658063 -0.012684 0.1014831968 -0.07119868086 0.000616 0.0989818408 -0.07734177825 0.00062 -0.3852163463 -0.0008518065459 -0.053414 -0.3814960935 0.03802464967 -0.044886 0.0885724114 -0.02168997684 0.000618 0.08746032606 -0.02114202504 0.00062 0.08575222372 -0.02302758276 0.00062 -0.1648174474 -0.7160369575 -0.01713 -0.1640078442 -0.7050185312 -0.022588 -0.1750648872 -0.7104060892 -0.024306 -0.2014601275 -0.2886587919 -0.012462 -0.2204752019 -0.2807717745 -0.018244 -0.2108371464 -0.3056731488 -0.018788 0.008964860862 -0.06065813002 0.00062 0.01093993558 -0.06274060626 -0.003686 0.06715780784 -0.03796807286 -0.00488 0.06601055252 -0.0397379379 0.00062 0.06952635095 -0.03923046095 0.00062 0.3066333974 0.2586079441 -0.014332 0.3001484647 0.2632437228 -0.009722 0.3017232947 0.2531181225 -0.009824 0.09412112018 -0.0307123248 0.00062 0.09112833218 -0.03288812003 0.00062 0.002574608092 0.1423908595 -0.02087 -0.08530571364 0.8093917429 -0.007648 -0.07693326852 0.8027985591 -0.00412 0.01000138915 0.8629738437 -0.013772 0.005244554222 0.8724940735 -0.01744 -0.130509776 0.153406566 -0.010076 -0.1316305443 0.1640604969 -0.007938 -0.1216590135 0.1590904822 -0.0084 -0.1530902217 -0.04747956066 -0.010888 -0.1520291169 -0.04063740601 -0.010444 0.0007398078565 -0.03076627432 -0.006204 0.03768542554 -0.05014093586 -0.003256 0.03662785911 -0.04992677661 0.00061 0.03731432463 -0.04943747813 -0.00363 -0.267336011 0.2776656358 -0.017796 -0.3726610071 0.4381237201 -0.025254 -0.3781151313 0.420928687 -0.026314 -0.01745176876 -0.01124121853 -0.002336 -0.01997145911 -0.009820220444 0.00062 0.08630778541 -0.02002073896 0.000616 0.08692210293 -0.016820943 -0.002674 -0.02377921305 -0.1195115853 0.00062 -0.02692916178 -0.1207322779 0.00062 -0.02697702963 -0.1222309477 0.000592 0.007572026898 -0.0493435052 0.00062 -0.04373204139 0.815622622 -0.00456 -0.03889611364 0.8086385241 -0.002178 -0.04873546647 0.8083189496 -0.004256 0.03281097045 -0.06679916739 -0.00488 0.03386837684 -0.06701264908 -0.002154 0.03242605997 -0.0681678578 -0.00515 -0.1605317384 0.2038692338 -0.004162 -0.1771619427 0.1951016265 -0.006804 -0.171132038 0.2058181199 -0.003224 0.1007175339 -0.08541653455 -0.004798 -0.1325944872 0.8147240863 -0.008202 -0.1343660947 0.8061713883 -0.007574 0.09718527578 -0.04513125621 0.000614 0.09742559276 -0.0459430776 -0.000744 -0.3988648786 0.4646940573 -0.047476 -0.3952109019 0.490411741 -0.02888 -0.3857739525 0.4761395387 -0.027052 0.2239425711 -0.5281553512 -0.0063 0.2157557098 -0.5291018531 -0.00569 0.2284120035 -0.5467846116 -0.004836 -0.2177783471 -0.2379862922 0.000568 -0.2275580915 -0.2291316772 0.000616 -0.2264406392 -0.240620268 -0.009714 -0.3123161587 0.5703106555 -0.005768 -0.3045733914 0.5650751776 -0.005318 -0.3031308713 0.5743773688 0.000616 0.04496272431 -0.04757202364 -0.004738 0.0461785915 -0.04666838493 0.000612 0.0466628695 -0.04803045405 -0.00133 0.04412495745 -0.06381765566 0.00062 0.0005241947515 0.8299624988 -0.005334 0.394800601 0.008163757536 -0.49027 -0.2198719192 -0.6547668288 -0.100504 -0.2057114015 -0.6370430858 -0.06238 -0.2512210545 -0.6507697671 -0.137492 0.2126406339 -0.3836347026 -0.00803 -0.1312636145 -0.001465757953 -0.011484 -0.1473020651 -0.01352389586 -0.012966 -0.1964981831 -0.4341829776 -0.014728 -0.1996618947 -0.4228711696 -0.019708 -0.1912783157 -0.4042147452 -0.013822 0.5881010632 -0.2833216576 -0.048168 0.5932939813 -0.2611034922 -0.060314 -0.347846953 0.34893577 -0.024152 -0.3977898132 0.3466658661 -0.029588 -0.3929016748 0.3649465947 -0.02863 0.1872075551 0.0003545839682 0.000614 -0.3263288717 0.613867601 0.000532 -0.3262650096 0.6049202395 -0.003608 0.0002194185706 0.2467645304 -0.00231 0.2486915978 -0.6077001913 -0.00085 0.2496093798 -0.609255701 0.00062 0.2508362815 -0.6062296726 -0.00138 0.09477612038 -0.03936078072 0.00062 0.09542786088 -0.04092841917 0.00062 0.09916211242 -0.04278917935 0.00062 0.03171797639 -0.03177911595 -0.001122 0.03226424225 -0.03033548947 -0.001352 -0.07843898966 0.1056648476 -0.01938 -0.1218031226 0.1130365703 -0.018988 -0.09086112746 0.1273872012 -0.017 -0.1667185875 -0.1343679953 0.00062 -0.1818931451 -0.1286955877 0.00062 0.4713511452 -0.1092158305 -0.327626 0.4993882019 -0.1173720501 -0.236634 0.4982162605 -0.07176033888 -0.34863 0.09525579235 -0.1046795976 0.00062 0.3412957341 -0.3961084517 -0.14264 0.2918770276 -0.5042139632 -0.024788 -0.1505720234 -0.8510986754 -0.016972 -0.1426881101 -0.8610586825 -0.016376 -0.1178764851 0.2328746492 0.00062 0.3025076781 0.3942373987 -0.024414 0.2958425352 0.3853822661 -0.01296 0.2921950619 0.3991003935 -0.010644 0.04266316121 0.9136818954 -0.016164 0.04979419966 0.9044927621 -0.009688 0.04119217242 -0.04516860851 0.00062 0.4175158315 0.1973213745 -0.294012 0.4060462695 0.2202729817 -0.223216 0.4249910994 0.214097249 -0.288962 0.04384659545 -0.04885604974 0.000618 -0.1641640397 -0.4961061809 -0.007312 -0.153426641 -0.4956960328 0.000618 -0.3095632295 0.05776603964 -0.028162 -0.3273696124 0.04741544853 -0.032436 -0.3134781014 0.07414721997 -0.02836 0.2133524122 0.5396841817 -0.002708 0.3044246431 0.6595951145 -0.008838 0.297871951 0.6528485833 -0.009448 0.4972897419 -0.1852768174 -0.134638 -0.3018598886 -0.7031756896 -0.195264 -0.271383895 -0.7009522321 -0.17092 -0.1472234945 -0.6390699316 -0.032208 -0.1626614164 -0.6376907328 -0.03921 -0.1927727725 -0.09307023676 -0.001184 -0.185203465 -0.08498787225 -0.000136 0.075104379 0.003945989237 -0.023874 -0.2363832067 0.4045757264 -0.007146 -0.2358054 0.3935401154 -0.007264 -0.2703887574 0.3489935624 -0.015574 -0.3096380063 0.3441133647 -0.01938 -0.3931680339 0.06615425989 -0.038014 -0.4091337161 0.07928607386 -0.03647 -0.4149174867 0.0544176539 -0.053394 0.2274143362 -0.2771692482 -0.170266 0.2137870762 -0.2760557452 -0.096696 -0.828709472 -0.1043301295 -0.115802 -0.7859331609 -0.1550221661 -0.116994 0.329286432 0.0136933412 -0.216094 0.0550054843 0.09555301081 -0.0249 0.3356767045 0.04609429393 -0.1833 0.3305048256 0.03869712813 -0.108254 -0.1168535735 0.8201916658 -0.011814 -0.04076964547 -0.1023835511 -0.007096 -0.05434405806 -0.1046028911 -0.007578 -0.05118372452 -0.09377528825 -0.008178 -0.1798476824 -0.5892298976 -0.038206 -0.1928669072 -0.5947590029 -0.042276 -0.2308272885 0.2155781691 0.000618 -0.2240311857 0.2125956178 0.000618 -0.2298038207 0.2068842427 -0.00666 -0.09684733118 0.05565826875 -0.01683 0.02623592174 -0.06368112923 -0.00138 0.02534925693 -0.06262748242 -0.00138 0.02699246107 -0.061709326 -0.002136 0.1270870851 -0.1028902459 -0.00578 0.1334669062 -0.1102665598 -0.0025 -0.1668047988 -0.1278097819 -0.001962 -0.1737947872 -0.1230761129 -0.002128 0.02766278845 0.8672509959 -0.010346 0.02125198302 0.8542948584 -0.008954 -0.1548867196 -0.7147739403 -0.010968 0.0363140582 -0.04903020156 -0.00382 0.03731562174 -0.04787046005 -0.003494 0.339974271 -0.5387759042 -0.016232 0.334561145 -0.529413317 -0.016544 0.3160154499 -0.5422744622 -0.013158 0.2101032603 -0.5215400428 -0.004806 0.220656666 -0.5198490278 -0.006568 -0.1406424084 -0.8541846274 -0.011656 -0.1351693227 -0.8376065936 -0.004376 -0.06745877357 0.2279847369 0.000618 -0.03309024672 0.2425617725 0.00062 -0.04021822112 0.2366810754 0.00062 -0.2965467619 0.5269697074 -0.005744 0.2659376672 0.4701141842 0.00062 0.01326503834 -0.04774480179 0.00062 0.2262072559 -0.4147535777 -0.008682 0.2367080518 -0.4182767694 -0.012022 0.2371772813 -0.4074744083 -0.016576 0.1831711925 -0.001327029049 0.00062 0.1789667093 -0.004385994464 0.00062 0.1822574785 -0.006538798893 0.000616 0.3377038544 0.6349372136 -0.028942 0.3395370729 0.649216082 -0.026052 0.2923043926 -0.6184938396 0.000616 0.2935417863 -0.6162278019 -0.000164 0.3042751184 -0.5695598091 -0.006062 0.3082457832 -0.5597948682 -0.009444 -0.02867550835 -0.1049303389 -0.005522 0.2474308537 -0.4160205001 -0.017372 0.08137690897 -0.02381174166 0.000598 0.08384951882 -0.0236301698 -0.002154 0.08264081424 -0.02217987607 0.00062 -0.4508354617 0.1651469494 -0.032844 0.287642071 0.3886523922 -0.005462 0.2803384946 0.3913265361 0.00062 0.2830697217 0.3831859897 -0.004148 0.2008796414 -0.09097586585 -0.027936 0.5488320945 -0.1015018876 -0.1621 0.5163085704 -0.1355810277 -0.170692 0.5359870461 -0.1559349977 -0.124702 -0.1215608394 0.8139075281 -0.001534 -0.3502464172 -0.4067190441 -0.09087 -0.06455607817 0.0507996403 -0.01674 -0.07766224008 0.04844792433 -0.016414 -0.07007823754 0.03970761568 -0.01532 0.2807610604 0.6251044407 -0.019504 0.2911842119 0.6299231053 -0.01866 -0.05536134369 0.04065691467 -0.016294 -0.02569478603 0.08209707074 -0.020796 -0.03519472683 0.06172902429 -0.026792 -0.02106091184 0.06148233006 -0.022324 0.004516435894 -0.07051141852 0.000618 0.002668717944 -0.07614078684 0.00062 0.03415153341 0.01940009291 -0.015576 0.04348532589 0.03033536303 -0.023334 0.03206087588 0.02954430732 -0.020264 0.06003734747 -0.01974922751 0.00062 0.06182376261 -0.01611616839 -0.00366 0.06266721136 -0.02001259667 -0.00538 0.03266599579 -0.06140708857 -0.002228 0.2317785459 0.5778461038 -0.01026 0.2570237023 -0.6663024062 0.00062 0.3382572249 0.6139125518 -0.044878 0.325741042 0.6245470394 -0.02074 0.3182015869 0.6106744784 -0.02218 0.2542933845 0.6878830504 -0.005078 0.2451356088 0.6853079299 -0.003586 0.249611948 0.6783831276 -0.004978 0.04777116719 -0.07546237629 0.00062 0.04965388918 -0.07170457049 -0.003212 0.02854129553 -0.02510941537 -0.00303 0.2367497935 0.5678385743 -0.009488 0.1284875397 -0.04554579814 -0.02089 0.1408020027 -0.04360518925 -0.030804 0.5182680636 0.04887158585 -0.544212 0.5578700458 0.1312397554 -0.565404 0.4809954849 0.1165012668 -0.561626 0.7000766373 0.0559125305 -0.378324 0.6606650763 0.06630667833 -0.490482 0.6968913783 0.09342680939 -0.477596 -0.2628125597 -0.03903066068 -0.025898 0.005524514955 0.006546033643 -0.00779 -0.1716499485 -0.6130490771 -0.038198 -0.1596070879 -0.6251354718 -0.033752 0.2939739812 -0.5711842176 -0.003072 0.2873982686 -0.5659948519 -0.003372 0.04600510172 -0.1027856026 -0.00028 0.04493871849 -0.1041200369 0.00062 0.2510091923 0.007437610662 -0.005586 0.1068920943 0.03441829343 -0.037258 -0.0493538971 -0.02370562841 -0.011346 -0.03954951976 -0.02850595137 -0.011982 0.1552863603 0.03995905979 0.00022 0.1553312347 0.0414914369 0.00032 0.1543833935 0.04105696109 0.00022 -0.08274932568 0.2064647847 -0.00338 -0.0830914154 0.1967067938 -0.004708 -0.07386358455 0.1987197849 -0.00338 0.3064826375 0.04507531382 -0.01613 0.3139343386 0.04275930165 -0.060734 0.1433547696 0.04970102114 -0.00303 0.03263320282 -0.04124548516 0.000616 0.03194568584 -0.04225751054 -0.00138 0.03106033085 -0.04120277736 0.00062 0.2831521842 -0.02404545626 -0.159432 0.2942219328 -0.01891937659 -0.114918 0.2951641655 -0.03351095454 -0.214838 -0.3793160056 0.5413680813 -0.015564 -0.3988284607 0.5468874627 -0.019008 -0.3952463259 0.5241782523 -0.019212 0.2300698843 -0.4414540262 -0.009418 0.2229656492 -0.4331196152 -0.005294 0.1402971495 0.04177482251 -0.01241 0.1147952633 0.1579581019 -0.004512 0.1210573379 0.148963199 -0.003912 0.3387227922 -0.6332645813 -0.014084 0.3501594835 -0.6184720512 -0.013468 0.2623607949 0.7603643821 -0.00843 0.321220634 -0.5908439218 -0.007922 0.3143838817 -0.5855845079 -0.00528 0.3122005294 -0.5914597587 0.00062 0.007330012981 0.8423867841 -0.008906 0.03738486184 0.8387810961 -0.002262 0.03327736091 0.834903773 -0.001738 0.225402017 -0.7334627542 -0.002482 0.2084703923 -0.7455749043 0.00062 0.213361261 -0.735572452 0.000612 -0.4053278558 0.5354199195 -0.025292 -0.4126294849 0.5504865899 -0.022962 -0.4223753922 0.5329957622 -0.038372 0.2948221794 0.3564746343 -0.005654 0.2965239677 0.3663853864 -0.009228 0.3012980817 0.3600516223 -0.01059 0.01509758794 -0.07262770588 0.000616 0.3139830679 -0.6343039665 -0.00277 0.3105495404 -0.6332721172 -0.001218 0.1757541862 0.008476926208 -0.003516 0.177525518 0.005533382476 0.00062 -0.1827301225 -0.4641098666 -0.010318 0.06546055205 0.02053902921 -0.021776 0.1185249759 0.02510248795 -0.036042 0.1220988884 0.03001581752 -0.032598 0.3337645332 0.1065840444 -0.036718 0.3496480817 0.09104673334 -0.207812 0.3441814156 0.1104356362 -0.100518 0.2829864756 0.4677503143 -0.0169 -0.1865791558 -0.7361594733 -0.027026 0.07298030334 -0.07002357023 0.000608 0.07439471982 -0.06727412283 0.00062 0.05886460369 -0.07667347997 0.000618 0.06050465646 0.08148048812 -0.025382 0.05075713386 0.07496193061 -0.02375 0.03270928039 -0.06302478053 0.000604 0.08616298383 -0.07297749026 0.00062 -0.1974783839 -0.0595650974 -0.013018 0.0824689809 -0.05811361106 -0.008392 0.2625342858 -0.5960528562 0.00062 0.2586590095 -0.5967530589 0.000616 0.261600823 -0.5974435313 0.00062 -0.4223203434 -0.01449102761 -0.05368 -0.4469754707 0.01572206587 -0.047978 0.5626466996 -0.3653583163 -0.072556 0.5312927459 -0.3435225144 -0.028582 0.5402623612 -0.3642200372 -0.061922 0.1971584401 -0.3293434159 -0.13906 0.2133049845 -0.3329105781 -0.193224 0.08836576777 -0.05680353124 0.000616 0.08933369098 -0.05822349057 0.000618 -0.2291016266 0.3512877605 -0.00544 -0.2188025862 0.3429933978 0.00062 -0.2331159596 0.3387744432 -0.002558 0.02514357164 -0.006629554242 0.00062 -0.0409388026 0.2123186916 -0.006284 -0.04415657106 0.2194267596 -0.005178 0.1057449602 -0.1080897613 -0.001472 0.4248804953 0.08900914635 -0.399552 0.4160716638 0.07361792105 -0.417538 0.4120878508 -0.03951307487 -0.507078 0.4240465556 -0.06174366795 -0.543852 0.4535215488 -0.05679220276 -0.53455 0.4389685022 0.2169185384 -0.305578 0.4272725539 0.2350765056 -0.254772 0.4517169477 0.2310685652 -0.36523 -0.1660187684 0.7705317244 0.000518 -0.1621219552 0.7707501623 0.000302 -0.1620798937 0.7752167036 0.00022 0.371833564 0.01526202076 -0.490092 0.3834873817 0.01243636403 -0.512986 0.2446064942 -0.04924966924 -0.220452 0.2617106585 -0.039906888 -0.171272 0.255467207 -0.4270016398 -0.01982 0.3296520998 0.1224198875 -0.022458 0.3359216224 0.1161999138 -0.039198 -0.06231647246 0.8016474975 -0.003498 -0.0586456632 0.8080796014 -0.006034 0.01936866816 -0.03434370312 -0.003064 0.01796637508 -0.03450639542 0.000616 -0.2703786298 0.4531550584 -0.009894 -0.2728745161 0.4662837532 -0.009834 -0.2952449628 0.4524632715 -0.012918 0.05847963672 -0.07751875562 -0.002276 0.05763707052 -0.07677608631 0.000594 0.1001694996 -0.03613867776 -0.002138 0.09953934661 -0.03669248901 0.00062 -0.1525066392 -0.006637348068 -0.013778 -0.1693313717 -0.01361632526 -0.013286 -0.4318499761 0.2962118839 -0.03165 -0.4105939706 0.3126827764 -0.034132 -0.3912660761 0.2988468346 -0.028406 0.2991610082 0.6978847338 0.00062 0.2814127984 0.6912089003 0.000612 0.2946982594 0.6818656957 0.00061 -0.08703462907 0.7939825195 0.000264 -0.1440366557 -0.6777777892 -0.037318 0.2444540534 -0.7018198698 -0.002902 0.2451442639 -0.6933213084 -0.001464 0.2318148985 -0.6973692961 0.00062 0.04317720082 -0.09604833408 -0.001094 -0.50221174 -0.02707906626 -0.090054 -0.4793956556 -0.04431159584 -0.073774 0.08492061564 -0.06026186231 0.00062 0.07708256352 -0.06212708244 0.000618 0.0814538802 -0.05925197711 0.00062 0.1196298014 -0.08431732703 -0.00705 0.1282421491 -0.09254986386 -0.007992 0.3300213186 0.4979852954 -0.08601 0.3090810915 0.4981950473 -0.090078 0.5250217573 -0.08031281725 -0.244178 0.1287738774 -0.01361474912 -0.05206 0.1383486364 -0.01413424778 -0.022334 0.3344441754 0.5235064183 -0.093996 -0.04153848467 0.205538552 -0.007482 0.3180171389 -0.6345564079 -0.005468 0.435493268 -0.5162470658 -0.072822 0.4150761905 -0.508706485 -0.027144 0.4273352168 -0.492477235 -0.073986 0.2515545636 0.773598994 -0.005262 0.3295355184 -0.09689634994 -0.528558 0.3371414769 -0.151328605 -0.5132 -0.1872984224 -0.3966451216 -0.011092 0.2368137211 0.7919592391 0.00062 -0.3608201415 0.449907521 -0.020272 0.08886124161 0.1982601322 -0.009716 -0.2178323325 -0.3780901409 -0.02462 -0.2163744382 -0.3940603463 -0.024168 -0.01116841454 0.003325717289 0.00062 -0.4363505311 0.1476161581 -0.029884 0.04961188119 -0.0734804002 -0.00434 0.05044042843 -0.07420577191 0.00062 0.05068228449 -0.07240712381 -0.003794 -0.2026833937 -0.270484975 -0.010386 -0.1964898065 -0.2785558098 -0.009496 0.02012823305 0.8192010883 0.000608 0.02660848694 0.8171943971 0.00062 0.01692943555 0.8190104007 0.00062 0.0315714075 -0.08227201361 0.00062 0.06651437726 -0.0745744192 -0.004774 0.06667188857 -0.07737041453 0.000618 0.06411700956 -0.07641167649 -0.004732 0.03916204676 0.05294704075 -0.02802 0.0008948818044 0.2362538381 -0.004338 0.07250409253 -0.05874697748 0.000608 0.0732442611 -0.06067640536 0.000592 0.2801028729 0.4335209811 0.00062 0.2809926246 0.4390183342 -0.003594 0.2772243182 0.4476924296 -0.004942 -0.1102181555 -0.05282710076 -0.009734 0.3622918791 -0.599031486 -0.014066 0.3746013548 -0.5986133703 -0.015506 0.3777191476 -0.5876506296 -0.016038 0.3431361468 0.4322885088 -0.115836 0.2849455311 -0.5896678496 0.00062 0.2894096907 -0.588177215 0.00062 -0.6159789299 0.1757346397 -0.271526 -0.6288331584 0.1343132241 -0.275516 -0.585718329 0.1354748585 -0.209662 0.1330043407 0.09173598624 -0.00573 0.1420032785 0.04499262188 -0.00855 0.1406788245 0.04818895955 -0.010086 0.1350104576 0.0421099049 -0.02034 0.585114484 -0.3274799029 -0.054758 0.5671459165 -0.3258391699 -0.032522 0.5752608366 -0.3453204423 -0.054884 -0.3969552317 -0.01636033492 -0.055492 0.02262220335 0.8331219878 -0.003464 0.01709060675 0.8304913711 -0.003864 0.01541435284 0.8337734054 -0.00509 -0.2369774005 -0.3006543141 -0.022586 0.03252881765 -0.04530595021 -0.002896 -0.02421251867 0.2156847014 -0.00637 0.2732767834 -0.6501644606 0.00062 -0.233326515 -0.1710255961 -0.005224 0.01445051275 0.8270191623 -0.003278 0.01093822853 0.8226659053 -0.001524 0.008202880484 0.8292909992 -0.003836 -0.003001213513 -0.047505673 0.000608 -0.005334099265 -0.04630585192 -0.002844 -0.01729888257 -0.0915784437 0.000616 0.06099327929 -0.08025163129 0.00062 0.06012518409 -0.08338810354 -0.003372 0.05916871065 -0.08303123035 -0.003246 0.5737836958 -0.2448696953 -0.046258 0.4441427334 -0.3698548793 -0.08538 0.2060868912 -0.5507176589 -0.003008 0.2016478726 -0.5323979976 -0.003216 0.3997446288 -0.5773513585 -0.02213 -0.09406728883 0.01395988437 -0.013658 -0.102162658 0.02930729542 -0.014004 -0.1126709616 0.0217492678 -0.013286 0.2021274642 -0.1738402642 -0.028816 0.194795515 -0.1854878231 -0.02156 0.4084784185 -0.1943565434 -0.298826 0.4469993159 -0.1647718661 -0.248848 0.4181922883 -0.1680887559 -0.337462 0.4537321859 -0.498425553 -0.101536 0.4806294855 -0.502044254 -0.110952 0.2250793034 -0.343027962 -0.142604 0.08456686408 -0.0582704925 0.00059 0.08459412847 -0.05908725864 -0.007638 0.03660729786 -0.104637385 -0.000138 0.03594151797 -0.1061872146 0.00062 0.8270754437 0.1103309094 -0.231416 0.6880753334 0.2732665189 -0.564516 0.7514907159 0.1883259483 -0.462576 0.2156185449 -0.4091206075 -0.005236 0.2142466547 -0.3984187006 -0.006126 0.2063043092 -0.4070139451 0.00062 0.1188530856 -0.01321357584 -0.06172 0.3110650229 -0.2356796499 -0.437028 0.3313341677 -0.2544835435 -0.357444 0.3044154885 -0.2629105136 -0.39699 -0.1790018391 -0.06959665178 0.00062 0.5013380839 0.2453154785 -0.529682 0.07219731001 -0.05341388861 0.00062 0.07402204323 -0.05533343807 0.000596 0.07720903647 -0.05339161468 0.00062 -0.0449358483 -0.1518730112 -0.002168 -0.06144717464 -0.1503863601 -0.002336 -0.046581123 -0.1432294854 -0.003294 0.5265127862 -0.2326113893 -0.032514 -0.1030978012 -0.6475384629 0.000538 -0.10285726 -0.6583243233 0.00062 -0.1003395864 -0.6711304132 0.00034 -0.1540379677 -0.3846905999 0.000618 -0.1593020866 -0.3802405071 -0.003418 -0.1527664961 -0.3727863598 0.00062 -0.475450362 0.04349828899 -0.067114 0.5713750141 -0.1214029121 -0.11933 -0.2299236368 -0.2223438388 0.00062 -0.2386241174 -0.2175352863 -0.008612 -0.1606364805 0.7731315223 -0.000856 -0.1557599136 0.7690175052 0.00062 -0.2736027624 0.4907284588 -0.0083 -0.268374568 0.4819456254 -0.00716 -0.2596697174 0.4810238212 0.000612 0.1963486273 -0.1373425668 -0.028296 0.2021794072 -0.1511004643 -0.029152 0.3291719056 0.6468961422 -0.018728 0.3444920616 -0.5306272864 -0.015862 0.1186808206 -0.1133944787 0.000604 0.2862238956 0.4478316989 -0.011108 0.02670125299 0.8430342195 -0.005358 0.02885917511 0.8359902793 -0.003344 0.4629483622 0.1385972333 -0.535684 0.4670440581 0.1627775158 -0.526444 0.6971677479 0.1401222725 -0.485448 0.4578619794 -0.1380229731 -0.283064 0.06267571673 -0.07704126776 -0.002578 0.06319048463 -0.07921904737 -0.003356 -0.008670414345 0.9146906408 -0.14871 -0.05194923775 0.8793921337 -0.04938 0.3122737782 -0.6468510657 -0.007336 -0.1556325921 0.04794769827 -0.014658 -0.1432049945 0.05883848984 -0.015936 0.464718883 0.338479533 -0.419576 -0.01979793594 -0.008977524021 -0.00172 0.4501938649 -0.002412551525 -0.523708 0.4604472864 -0.02795002138 -0.548538 0.4930490713 -0.02752491774 -0.5379 -0.1757093916 -0.08718651109 -0.001116 0.05090460454 -0.08283902919 0.00062 0.03559953549 -0.0290755744 0.00062 0.1555238519 0.03808365392 0.00042 0.1542653142 0.039349226 0.00032 0.2880595015 -0.5262068424 -0.010246 0.3887523699 0.4478449585 -0.347786 0.3970096687 0.4824760075 -0.37618 0.4187834983 0.4509315045 -0.357132 0.5390678975 -0.2675220902 -0.018592 0.5338483158 -0.2842857511 -0.016314 -0.2216256402 -0.1319187601 0.000354 0.2529456073 -0.549451734 -0.004212 0.2416008201 -0.5486844368 -0.004654 0.2432471663 -0.5627680627 -0.00408 0.1795041115 -0.1321736357 -0.013954 0.003157754853 0.9001019267 -0.042964 -0.01296577162 0.9012453076 -0.130244 0.1964673474 -0.5129356439 -0.002816 -0.07165418948 0.8364894649 -0.02981 0.3348914437 0.2751311332 -0.044896 0.3218662202 0.2662958861 -0.030762 -0.09780567366 -0.03452774393 -0.010428 -0.1010371312 -0.04430452977 -0.010206 -0.03155191654 -0.02306282056 -0.009928 -0.02418824836 -0.02498783869 0.0006 -0.02359970482 -0.02332975123 0.00062 0.2206457419 -0.444234732 -0.00412 0.2197408112 -0.4522207806 -0.005022 0.2269568171 -0.4501215168 -0.006918 0.3504018593 0.2253935833 -0.059044 0.3354439552 0.2182608517 -0.029968 0.1740999845 -0.03057052166 -0.030228 0.1779654131 -0.0215904336 -0.013606 -0.2437362553 0.4445349176 -0.005846 0.3222780871 0.139937154 -0.004628 0.3153740065 0.1421196259 0.00062 0.04374956724 -0.04612546655 -0.00338 0.0446204891 -0.04690243902 -0.00338 0.2664882635 -0.01416367939 -0.014946 0.2706125028 -0.02553717131 -0.077908 0.3023510502 -0.5516545372 -0.009306 0.05539376867 -0.06549362771 -0.000576 0.05503651736 -0.06898301933 -0.000612 -0.03342847128 0.8455426963 -0.014798 -0.02259476634 0.8537247261 -0.01938 0.3015691866 0.6907758775 0.00062 0.296473641 0.682388579 0.000614 -0.01436270997 0.8210035055 -0.002958 -0.004861309295 0.8234325945 -0.002566 -0.2389054217 -0.2015981081 -0.007558 0.08008408479 -0.05892085984 0.0006 -0.1172977811 0.8281374926 -0.016748 -0.1341447518 -0.5314317736 0.000468 -0.6128828302 0.09545910036 -0.22154 -0.6665844985 0.1077154052 -0.227536 -0.3277796981 -0.2045201418 -0.043708 0.06066022201 -0.02154414373 -0.002776 0.1891603703 -0.3382141122 -0.006986 0.2016066701 -0.345020427 -0.073708 0.4869358084 -0.2801694751 -0.026338 0.4896404222 -0.2958282484 -0.027488 0.499765798 -0.286130072 -0.021124 0.08095023724 -0.02329993228 0.000608 0.07939933038 -0.05025769779 0.000618 0.08033392448 -0.0471900004 0.00062 0.07062600524 -0.08156226192 0.00062 0.08991080497 -0.08293308693 0.00062 -0.1779060239 -0.3232920261 -0.00686 0.1853514329 -0.003186101336 -0.002532 0.1890214239 -0.004222078459 0.000612 0.4530332607 -0.2834454294 -0.067332 0.4696490765 -0.2718582694 -0.045294 0.4722778182 -0.2902541373 -0.038098 0.123090839 -0.0240995479 -0.053294 0.1209043914 -0.03694541077 -0.029612 -0.3026323406 0.18854692 -0.023508 -0.3145046614 0.136861976 -0.024674 0.5288379238 0.2691045585 -0.570584 0.1928062661 0.5753835596 -0.003922 0.1850104415 0.5791788622 0.000524 0.1846964577 0.567844171 0.00062 0.2149731096 -0.4184509133 -0.004224 0.2073823664 -0.4221467902 0.00062 -0.1652199316 -0.6783678866 -0.04235 0.0336624309 -0.07641683195 -0.00447 0.003725143568 -0.05287448922 0.00062 0.3485773347 0.2850321612 -0.066888 0.0313289022 -0.04413830156 -0.003702 0.03161610754 -0.04291116286 -0.00204 -0.289609526 0.5403315441 -0.002262 -0.1925230056 -0.2866310785 -0.009342 0.1899133175 -0.05233977201 -0.039212 0.1953642768 -0.0426837419 -0.023746 0.09313227767 -0.06538281336 -0.000894 0.3050249956 0.3811305825 -0.030134 0.3458541277 0.1773542581 -0.05866 0.05655014734 -0.06713282933 0.00062 -0.1760831728 -0.5564191439 -0.026188 -0.1871138967 -0.5515780814 -0.029772 0.05519339809 -0.01473718434 0.00062 0.3289995967 0.5991979006 -0.034184 0.6152479765 -0.363161468 -0.086054 0.597499928 -0.3427759602 -0.06921 0.5725391331 -0.387188866 -0.086152 -0.149790627 0.7739857439 2e-05 -0.1495909952 0.7771271659 -0.001074 -0.02569720667 -0.1258079769 0.000616 -0.3647584671 0.4064077615 -0.02514 -0.3837937378 0.403757017 -0.027494 0.3220817973 -0.6306546959 -0.00859 0.3245603514 -0.62589245 -0.007766 0.329222287 -0.6318146238 -0.01236 0.2378344685 -0.5443058368 -0.00512 0.2310767234 -0.530723574 -0.005878 -0.1862928118 -0.05331236898 -0.010604 0.08136909925 -0.05052198632 -0.00877 0.07876851263 -0.05159555798 -0.002754 0.1696980654 -0.1094690811 -0.016392 0.1454787488 0.05426683674 0.000618 0.1491311663 0.06094923414 0.000616 0.1440414523 0.05866360769 -0.005242 -0.1537137175 0.2120421051 -0.00294 -0.1504296036 0.2017017484 -0.004428 0.8014329525 -0.2072939041 -0.098514 0.2468185465 0.7792025613 0.00062 0.3400708526 -0.5913304685 -0.014162 0.3486790583 -0.5867889164 -0.01374 0.3391858369 -0.5813682935 -0.014076 -0.4969706256 0.2758702922 -0.13864 0.5141771659 -0.2840170857 -0.01724 0.01883871419 0.2034250174 -0.010818 0.240760752 -0.251552279 -0.277314 0.03566737893 0.815876286 0.00062 0.1883920572 0.6281042705 0.00059 0.1838345389 0.6193360721 0.00062 -0.4538888514 -0.04542565299 -0.05458 -0.4320157281 -0.03571627467 -0.05015 -0.03651088014 -0.1519213819 -0.001974 -0.03290136563 -0.1597628199 -0.000526 -0.0294362954 -0.1511692297 -0.001416 -0.1266379441 0.8061059751 -0.004282 0.09174043649 -0.05352188375 -0.000782 0.09225073836 -0.05517920661 0.00062 0.2031403253 -0.5669131844 0.00062 0.217819146 -0.7262845626 0.00062 0.2465369154 -0.6071837534 0.000366 0.2471745912 -0.610390446 -0.000626 0.3057302082 -0.6303853926 0.000618 0.3076672418 -0.6316492487 0.000618 -0.1623145608 -0.3212687889 0.000586 -0.1576291812 -0.3498638102 0.00041 -0.1604017369 -0.3396392647 0.000538 0.09554411351 -0.04028207014 -0.00172 0.1552790724 0.03653043614 0.00052 0.2517787027 0.01362801226 0.000616 0.2554181674 0.009430430095 0.000616 -0.5500045808 -0.1619451018 -0.163276 0.259313404 -0.5710121414 -0.00418 0.2843172273 -0.5574319199 -0.003826 0.05008345281 0.1831126616 -0.01702 0.03707610808 0.1967996076 -0.013308 0.04616184116 0.1935139958 -0.014378 0.3530113733 -0.03094930404 -0.438394 0.2281750221 -0.3314313425 -0.245734 -0.2544992607 0.2415050661 0.000618 -0.2593263695 0.23597869 -0.005696 0.9017082538 -0.1200591516 -0.098144 0.08913142535 -0.04097359521 -0.004088 0.6010284479 0.04106206342 -0.500816 0.5690073366 0.05681003781 -0.49067 0.3940694907 0.1428125426 -0.252412 -0.2681639354 -0.1295580702 -0.020876 -0.01098412269 -0.02809321486 0.00062 -0.01314717131 -0.02892777088 -0.000112 -0.01194518003 -0.03035462282 0.00062 -0.06433680053 -0.135379333 -0.005008 0.1729807412 -0.1557515563 0.00062 0.1525819826 -0.1354843872 0.00062 -0.3942392575 0.04901334922 -0.048002 -0.3704351506 -0.4264370656 -0.107268 -0.3652641252 -0.3797869801 -0.096058 0.03957519154 -0.03643725657 -0.002192 0.03829147244 -0.0346441126 -0.002996 -0.4992859886 0.06491456398 -0.136728 -0.4967241351 0.02900227909 -0.091292 -0.2228523583 0.3600472247 -0.004368 0.8131019943 -0.04564809975 -0.059278 0.02706781148 -0.06806133526 0.00062 0.02649380624 -0.06477042266 0.00062 0.03056675957 -0.06517503786 -0.003946 0.2119027237 -0.449830118 0.00062 0.2153780151 -0.4586652893 -0.003696 0.3579753629 -0.3744488917 -0.132822 -0.2536347434 -0.151103494 -0.010912 0.733299727 -0.1757353539 -0.048364 0.7587990543 -0.1568675274 -0.05316 -0.1552655819 -0.3933617121 0.000566 -0.1565991904 -0.4049184711 0.00062 -0.1409737934 0.7731293404 0.00042 -0.1731398922 -0.3117368356 -0.005492 -0.1444104335 0.7777125187 0.00062 0.08460246594 -0.01167132851 -0.004516 0.04251178913 -0.08380362751 0.000614 -0.3613888133 0.0476316016 -0.037576 -0.3644021759 0.02725633323 -0.042634 -0.1359327533 0.7736018241 0.00062 -0.1061452287 0.7871530219 0.00062 0.2013927653 -0.2392396375 -0.014928 0.1942543231 -0.2471768966 -0.007568 -0.102002558 0.7870415447 0.000454 0.1826041048 -0.1613167476 -0.016144 0.1885245228 -0.1487130062 -0.025562 0.7805480363 0.1502876226 -0.458696 0.7992181438 0.1221348603 -0.335854 -0.03408268748 0.8033880798 0.00062 0.2121909084 -0.4393598665 0.00062 0.1899790617 -0.2400341661 -0.003558 -0.3716886323 0.5171014517 -0.01605 -0.3795366873 0.486746321 -0.019364 -0.09230463927 0.2091177478 -0.00338 0.1551514049 -0.1193338973 -0.00638 0.1608814221 -0.1100751511 -0.013582 -0.1648458054 0.786586137 -0.002678 -0.168077084 0.7793152273 0.00052 0.1248617048 0.07880810222 0.000592 0.7900288518 -0.120318246 -0.049858 0.7840140605 -0.1006550288 -0.051044 0.8145367376 -0.1131186646 -0.05464 -0.2539079306 0.06740160782 -0.023082 -0.2565129996 0.2524693996 0.00044 -0.2280696221 0.4089944694 -0.005282 -0.2125902981 -0.711198384 -0.10574 -0.2291667482 -0.7152405898 -0.160502 0.2651757677 -0.6582639053 0.000598 0.1431484593 0.02167300795 -0.013544 0.1368078194 0.02038571848 -0.026426 0.06571572884 -0.03755245679 -0.003702 0.06617686326 -0.03600893719 0.000616 0.1931338513 0.636924945 0.000444 0.8382292198 -0.1733010002 -0.097626 0.2527340792 -0.6074378819 0.00062 0.260764421 -0.6078433726 0.00062 0.2587566477 -0.6045294643 0.00062 -0.08966554396 0.1901642567 -0.004434 -0.07677091764 0.1880417621 -0.005514 -0.08522784944 0.1794961193 -0.00547 -0.4516102586 0.2790617102 -0.03415 0.1545507107 0.03794457735 0.00052 0.1535499523 0.03651706136 0.00052 0.04155667004 -0.08475265365 -0.001606 0.04064456033 -0.08575273437 -0.00184 -0.4447208425 -0.2502640702 -0.120778 0.6068401718 0.01120663324 -0.388576 -0.3894718375 0.5041007187 -0.018892 0.2016445226 -0.2289977252 -0.016588 0.194796484 -0.235234653 -0.00941 -0.3019144117 -0.3216764399 -0.042104 0.3312238164 0.09665496847 -0.074268 0.004151204857 0.06326893133 -0.024708 0.02472804719 0.04994683903 -0.028114 0.3910867077 0.3806908895 -0.352666 0.09338671485 -0.05130849266 0.00062 0.09281804688 -0.05036549008 -0.007956 0.2595162024 -0.4385705317 -0.019948 0.2601134395 -0.4498387857 -0.017252 0.1013379212 -0.03675535838 -0.006026 -0.2370986158 0.4144260615 -0.00617 -0.2381210593 0.4252012779 -0.005604 -0.2576487385 0.4288139071 -0.00938 0.1888660106 -0.2315123501 -0.0046 0.3128505612 0.1479537502 0.00062 -0.2075574829 0.1946539659 -0.010232 -0.1985585198 0.1951801967 -0.009734 -0.2049085899 0.2040567376 -0.00521 0.6507281245 -0.09746431959 -0.077462 0.639957282 -0.06923928102 -0.091328 0.6256871691 -0.09390398339 -0.086624 0.02125415262 -0.01458231887 -0.017438 0.0228202591 -0.01251618517 0.000598 0.3455804126 0.1661168654 -0.05897 0.621498155 -0.2263097201 -0.072874 0.6678013665 -0.2155294996 -0.068314 0.3635633812 0.04014243839 -0.42494 0.3576764018 0.04826440922 -0.395014 0.3529127911 0.041694825 -0.342148 0.0696631938 -0.05848926178 0.00062 0.0684567715 -0.0528658568 0.00062 0.07237775006 -0.0570279528 0.000618 0.3295013959 -0.5742430695 -0.013114 0.3301766202 -0.5857006088 -0.012906 0.2602486207 0.7916819676 -0.005284 0.2516143131 0.8043962756 0.00062 0.2808125987 0.7685173509 -0.00829 -0.05334205809 0.006179282364 -0.012688 -0.1551681275 -0.05417172355 -0.009812 -0.160712962 -0.05915889739 -0.006446 -0.1512086524 -0.06139591199 -0.004768 0.3331920151 0.656358648 -0.02158 -0.1086715266 -0.6902093206 -0.004062 0.03363001255 -0.03432081206 0.00062 0.03198638687 -0.03367015361 0.000618 0.03419176395 -0.03211056159 0.00062 0.5135705938 -0.2476709195 -0.023122 0.5338864961 -0.2518215636 -0.016894 -0.8932913531 -0.02592003909 -0.137608 -0.8655890375 -0.04838173439 -0.122786 -0.224999275 -0.4237575743 -0.025502 0.0259679016 -0.04272360527 0.00062 0.4565147637 -0.212341388 -0.147198 0.4259652777 -0.2193976503 -0.201106 0.09604522079 -0.03983542811 -0.003126 -0.02352896795 -0.1133232962 -0.003734 -0.6254275516 0.3893476142 -0.310434 -0.5109936863 0.4758164744 -0.256578 -0.5315631288 0.3915432767 -0.275144 0.3293400052 0.3768384672 -0.202248 0.3161170273 0.3898413692 -0.08461 -0.2376286494 -0.162752581 -0.009092 -0.2476207631 -0.1605657109 -0.00938 -0.1724456667 0.7791173402 0.00062 -0.1882209554 0.7668772109 0.00058 0.57986535 -0.4358030091 -0.09112 0.04875435811 -0.1011083345 0.000216 0.04695852038 -0.1018370278 0.000618 0.08307390259 -0.02846975074 -0.005442 0.08301348129 -0.02551259439 -0.00538 0.04382570457 -0.05876123878 0.000618 -0.09873462226 0.8251999918 -0.01298 -0.09340563722 0.8150676881 -0.009204 -0.154865546 -0.3600687205 0.000606 -0.163765152 -0.3719129008 -0.005238 0.3691813174 0.4667117054 -0.305308 -0.3622529013 0.6066622466 -0.007408 -0.3647623525 0.6188399258 -0.00637 -0.1226373095 -0.02938555943 -0.010126 0.03648179347 0.8185397562 0.00062 0.057303457 0.8604031087 -0.002376 -0.1659259071 0.7763468203 0.00062 -0.2354930657 -0.2591313891 -0.01938 -0.230999327 -0.2492053775 -0.015154 0.2062834402 -0.1627714643 -0.031618 0.2161403157 -0.1712422477 -0.022096 0.006880853153 -0.03047703672 0.000608 -0.2118564103 0.2112396693 0.000618 -0.6569394377 -0.1848002087 -0.150526 -0.119789404 0.2139967692 -0.00338 -0.1132047958 0.2018212786 -0.00338 -0.1277067 0.2039464813 -0.00338 0.04534546239 0.01572303424 -0.016046 -0.2507979333 0.3504734452 -0.012092 0.2522236804 0.699913401 0.00062 0.2651923102 0.7353117627 0.00062 0.7479242014 -0.1368845099 -0.049144 0.7495229111 -0.1186337593 -0.041958 0.7668213942 -0.1318803933 -0.047352 0.4016790247 0.3621350013 -0.359544 0.09035064115 -0.008332833742 0.00062 0.3221079564 0.04033941949 -0.124272 0.3247202633 0.02994132204 -0.102434 0.3152495671 0.03396722975 -0.082214 0.316305711 0.3155644979 -0.021176 0.07138850816 -0.06054991566 -0.004002 -0.1714969177 -0.1135812016 -0.003852 -0.1662683 -0.120158484 -0.003112 0.312688499 0.1992964601 -0.006252 0.3023005952 0.2015219058 0.00062 0.3054910749 0.1921306788 0.00062 -0.02145431862 -0.04104566827 -0.005428 -0.5409120838 0.2949504844 -0.276378 -0.5079955577 0.3114833387 -0.254306 -0.09017661288 -0.1087876151 -0.005936 -0.1114126388 0.1767016592 -0.003388 0.435841532 0.1989464366 -0.334478 0.4547349431 0.205232685 -0.415534 -0.01875922045 0.005795927814 0.000614 -0.02154718537 0.01305521257 0.000606 -0.0293297431 0.004974867782 -0.017524 0.2277209425 -0.5935857128 0.00062 0.3469198592 -0.04266611424 -0.389054 -0.03715769953 0.226796047 -0.00338 -0.228438805 -0.1243333748 -0.010894 0.2124070398 -0.5595239324 -0.00323 -0.04072053178 0.04747412905 -0.017446 -0.03357852947 0.03975384079 -0.013004 -0.04358753109 0.03639552521 -0.014664 -0.07342942666 -0.06032971124 -0.009014 -0.01210661433 -0.01104022396 0.00062 -0.01616979553 -0.01590998945 0.00062 -0.01617485951 -0.01039906157 0.00061 -0.1301012937 0.05811947098 -0.014906 -0.13351098 0.06742309007 -0.01453 0.3229046096 -0.28104901 -0.3437 0.4821980096 -0.05251219022 -0.492514 0.2984745619 0.4048805441 -0.015562 0.2910417073 0.4129669457 -0.008794 -0.2003136138 -0.3970560459 -0.018836 0.1264652434 0.07049246314 -0.017706 -0.2001451122 -0.2588616761 0.00062 0.5925754669 -0.1417509559 -0.097296 0.3520679957 -0.07214063756 -0.486952 0.3516104171 -0.05634024286 -0.491068 0.3338271898 0.3928556959 -0.214118 0.3313588448 -0.5189025905 -0.0288 0.3458075688 -0.5111954495 -0.016948 -0.08792562561 0.02561018351 -0.014864 -0.08261924681 0.01276422967 -0.014044 0.2197812747 -0.5670682272 -0.002902 -0.2472428836 0.3051606169 -0.00297 0.09144540155 -0.05839846255 -0.00085 0.09270078138 -0.05859430288 -0.000326 0.09373130448 -0.05695233264 0.000618 0.07064738977 -0.04240415964 0.00062 0.3040169962 -0.6320938105 -0.001268 0.3017129686 -0.6323769265 0.00062 0.3026603732 -0.630272053 -0.001146 -0.245668083 0.31406922 -0.004304 -0.2563830369 0.3101286617 -0.011106 0.2764488902 0.5873943757 -0.022772 -0.2061558789 -0.06431437356 -0.01347 -0.02752322949 -0.1562523721 0.00062 0.0304505018 -0.05903315091 -0.005164 0.03087921623 -0.05719285421 -0.00538 0.02853515084 -0.05753859466 0.00062 0.1841484649 -0.2212615407 -0.004614 0.1828969194 -0.2094673064 -0.004536 -0.2328712007 -0.1555985623 -0.006444 -0.4533639806 0.3028438217 -0.106826 -0.4762285145 0.2940904727 -0.168188 -0.09023062017 0.1391238023 -0.014974 0.03419535542 -0.05539241054 0.00062 0.03200851979 -0.05566337972 0.00061 0.3953273315 0.3411503813 -0.297286 0.3720376603 0.3385600004 -0.12217 -0.1688254109 -0.0827270243 -0.002344 -0.176750824 -0.08078574959 -0.000706 -0.1718774852 -0.07580212989 -0.000894 0.02856704178 -0.07922687772 0.00022 0.03255032543 -0.07796284911 0.00062 -0.1368402167 -0.1022991497 -0.00538 -0.0851175891 0.05703512053 -0.017442 -0.08414662348 0.07779286928 -0.021006 0.04956218898 -0.04939655868 0.00062 -0.1692498173 0.05502879627 -0.017412 -0.1682391159 0.09208571953 -0.015394 -0.02422146638 0.2425616881 -0.002124 0.2599128427 0.745032299 0.000618 0.29886615 -0.05724081341 -0.395494 0.3192731229 -0.08511532925 -0.507376 0.003184885249 0.1894622154 -0.014976 0.3571083317 0.6076908143 -0.140044 0.3559413295 0.6269753431 -0.094376 0.275120005 -0.5300145755 -0.005972 -0.2408962404 -0.5609385248 -0.040906 0.02470685032 -0.06395192722 0.00062 0.2948459113 -0.6160143778 0.000618 0.304135718 -0.5872536619 0.00062 0.09164055162 -0.07299935895 0.000618 -0.0154819251 -0.02955890842 0.00062 -0.01787371139 -0.02959949817 -0.000318 -0.2277204696 0.3355567271 0.00062 -0.2334709636 0.32757302 0.000618 0.1747316177 0.02106720791 0.00062 -0.3520850317 0.6312326822 0.00062 0.3854706956 -0.2407615477 -0.237748 0.4080100911 -0.2369965271 -0.208174 -0.1702013073 0.7650232052 0.00041 -0.1694261721 0.7685721494 -7.4e-05 -0.1731597104 0.768994395 0.000148 0.08630896171 -0.05774072068 -0.002228 0.08741019041 -0.05644418228 -0.001022 0.08726591708 -0.0573173043 -0.00127 0.2759977499 0.4980614678 -0.018086 0.3018381602 0.2825918714 -0.012052 0.31203549 0.2833322383 -0.020982 0.3023876548 0.2726509015 -0.010734 -0.188611478 -0.7036060273 -0.037346 -0.1465923536 -0.07016360792 -0.004258 -0.1512779102 -0.07795730109 -0.002866 0.8509195625 -0.04084052209 -0.05952 -0.2469185713 -0.6978731704 -0.16313 -0.2253560807 -0.6936327536 -0.16276 0.01595284108 0.8900049797 -0.02169 0.02014528211 0.9029904319 -0.02407 0.3783554512 -0.2671432622 -0.22168 0.108550232 0.09731344682 -0.019756 0.1019791124 0.1055686434 -0.01955 -0.4663706318 0.1809744372 -0.034616 0.08348850114 0.9673236277 0.000618 0.07141622479 0.9056384362 0.000618 -0.01654345677 -0.04033108909 0.000598 -0.01363724561 -0.03933278749 0.00062 -0.1717667184 -0.3575538934 -0.0069 -0.1657381771 -0.3618633838 -0.005828 -0.01746169467 -0.008869472515 0.000618 -0.1286044358 -0.1051518063 -0.00383 0.001827378598 0.8177601025 0.000542 -0.2119481381 0.4154326272 0.000618 -0.213753124 0.3936418887 -0.003222 0.1488264469 -0.084907745 -0.014054 0.09540378199 -0.07567214049 0.00062 0.09320690479 -0.07669882993 0.000606 0.3252855947 0.06670604978 -0.19144 0.3232532239 0.06044608288 -0.212246 0.3669060069 -0.5311109874 -0.017284 0.3643049706 -0.5157958596 -0.016912 0.3529919374 -0.5246725721 -0.01701 0.688268901 -0.07503556707 -0.075986 0.007602889425 -0.03944688663 0.000618 -0.206116986 -0.6007835044 -0.042278 -0.2068830198 -0.618600168 -0.050552 -0.03017860098 -0.03018618336 -0.009514 -0.02327365789 -0.02973653449 0.00062 0.3222310332 0.2525255895 -0.027168 -0.02752060588 -0.1629666568 0.00062 0.289387778 0.6604724844 -0.00788 -0.2853299398 -0.3238649643 -0.031064 -0.2680507097 -0.3162386617 -0.025676 -0.2776671054 -0.3064182581 -0.026754 -0.182189883 -0.335381226 -0.007736 0.01439471809 -0.05143876911 0.00062 -0.3919559343 -0.6052260192 -0.18464 0.2236063615 -0.390730705 -0.025504 0.7513403138 -0.09983192534 -0.041042 0.7385999443 -0.08026849125 -0.048458 0.7686440508 -0.08558402395 -0.045514 0.04204179595 -0.05402381555 -0.002744 0.04104237776 -0.05257183568 0.00061 0.296085166 -0.5604881377 -0.005638 0.2400843443 0.6782656263 -0.003552 0.2371885927 0.6885158007 0.00062 0.2307769668 0.683225839 0.000596 0.3436766499 -0.6113896276 -0.014172 0.2891662643 -0.06321922538 -0.332418 0.2902519206 -0.04853083956 -0.32808 0.09751521325 -0.02167255379 0.000616 -0.2241400932 0.1980375779 -0.011672 0.3180503224 0.06344154338 -0.093704 0.3111463565 0.05949718669 -0.018162 0.06929742053 -0.07293634828 -0.004594 0.03299456182 0.09505710002 -0.02495 0.02432212396 0.08508792952 -0.024424 0.280639881 -0.4090343925 -0.086416 -0.1615760922 0.7836309283 -0.000556 0.04780701073 -0.04730301922 -0.000874 0.04977943872 -0.04704073327 0.000618 0.09803833884 -0.03724916918 -0.002448 0.1505739994 0.04568871234 0.000612 -0.3830842662 0.5640729676 -0.014384 0.3423491504 0.1561811342 -0.043254 0.3541338935 0.1559188373 -0.180372 0.4377136366 0.4856359788 -0.385964 0.05589332392 -0.07026474313 -0.00138 0.2541522508 0.7987899343 0.00062 0.2276770814 -0.2189176395 -0.097662 0.2128303321 -0.2078465936 -0.027174 0.06714100284 -0.03349523392 -0.00537 0.06977934234 -0.03534286872 0.00062 0.04752061235 0.8924829194 -0.008848 0.05866735284 0.8967921296 -0.005626 0.05702606043 0.8868462659 -0.005574 -0.2757882634 0.4383596059 -0.011616 0.004660747984 0.8849843275 -0.030628 -0.1433725188 -0.7278797891 -0.007902 -0.1365169905 -0.7363626243 -0.006064 -0.1320194669 -0.7231064734 -0.004902 0.2145321277 -0.5017423707 -0.005524 0.2124797304 -0.5120846507 -0.005598 0.2227633875 -0.5090804538 -0.00738 0.2943331491 0.02030715827 0.00062 0.06866009575 -0.03714656135 -0.003728 0.115780472 -0.07344064164 -0.010714 -0.1622398099 -0.3107098382 0.00062 -0.1681257798 -0.321495386 -0.00393 -0.3504314972 -0.004500972428 -0.048312 0.2536947652 0.6485351992 -0.009672 0.2628758677 0.6561337769 -0.009726 0.2536969648 0.6601010744 -0.006608 0.08512370259 -0.05056882376 0.00062 0.08663040694 -0.05368036159 0.00062 0.08938869192 -0.05201321755 0.000618 -0.1555097799 -0.4856481218 0.000618 0.1879918579 -0.3060243614 0.00062 -0.2115624874 -0.3271387341 -0.019974 0.6462617297 -0.3200473354 -0.072648 0.5632384934 0.1632549328 -0.572054 0.2246639005 -0.07218812111 -0.021518 0.228936915 -0.0556317435 -0.104626 -0.0005314473284 -0.07704134973 -0.000656 -0.138116535 -0.7786177548 -0.007476 -0.130678725 -0.7773270498 -0.003598 -0.3333175605 -0.3428440199 -0.043844 0.2675888756 0.4943658011 -0.008952 0.2600635195 0.5017608535 -0.006144 0.05929215919 -0.06518049318 0.00062 0.1471584811 -0.01557917046 0.000608 0.1555687921 -0.02101763602 -0.000766 0.1492702682 -0.00524465353 0.00062 0.3866489128 0.2367480808 -0.205162 0.3862933571 0.260845612 -0.21947 0.2851001587 0.430468686 -0.002112 0.2959771153 -0.6207843236 -0.001068 0.2944803229 -0.6197864542 -0.000714 -0.01862002974 0.2521772336 0.00062 -0.325545066 -0.09074091016 -0.05047 -0.2674408242 0.4611005706 -0.008974 -0.1468296632 -0.03289020717 -0.010692 0.3259652423 0.1796823614 -0.010598 0.3340004419 0.1819982105 -0.018514 0.3313485135 0.1926091447 -0.018898 0.08714476549 -0.03256548636 0.000612 0.08637851849 -0.03112220755 0.0006 0.08462697039 -0.03373976907 -0.00616 -0.3481425017 0.4290532109 -0.019252 -0.349953034 0.4154256809 -0.020522 -0.3620853889 0.4241654196 -0.02367 0.1094553052 -0.05618541092 -0.016846 -0.1466581712 -0.7584272707 -0.012428 -0.1483916834 -0.7727190845 -0.01417 -0.2801077354 0.481853942 -0.0103 -0.291170626 0.4817633805 -0.01168 0.3163187556 0.1904285252 -0.00605 0.3121225658 0.1846344494 -0.00322 0.05499064574 0.1921412133 -0.015132 0.0694300389 0.1745428836 -0.017686 0.07339059385 0.1847117081 -0.015512 0.1811490113 0.01906779835 0.00062 0.179472031 0.01688441424 -0.002898 0.1785941207 0.02191317965 0.000618 -0.1389688513 0.7723156725 0.00042 -0.009340506441 0.1040905241 -0.022432 0.02044819078 0.09691172655 -0.02222 0.1135432413 -0.06474949901 -0.014362 0.105875896 -0.07071330008 -0.007676 0.2697355494 0.4777435439 -0.009006 0.2676027794 0.4851842393 -0.006822 0.08084285083 -0.04334983706 0.00062 -0.3702584233 0.3814615559 -0.02642 0.06512983014 -0.07292368837 0.00062 0.06667141439 -0.07163086328 0.00062 -0.1225523901 -0.7118959073 -0.004856 0.2977194351 0.2929608775 -0.007022 -0.2000670128 0.1349698454 -0.01679 -0.1903220384 0.1436199246 -0.018244 -0.1986184511 0.1518427777 -0.017012 -0.3746788959 0.6117037642 -0.008564 -0.4047153187 0.5787539084 -0.016656 0.1223617697 0.01887946176 -0.04765 -0.1947219253 -0.3148335571 -0.010828 0.06010700515 -0.07789251962 -0.002598 0.4035968489 -0.07374195035 -0.54454 0.4183150039 -0.09038046863 -0.52646 0.390754298 -0.09409212344 -0.530928 -0.1094053547 0.005563189048 -0.013782 -0.1155838046 0.0110102099 -0.013276 -0.2232628927 -0.6037603103 -0.052532 0.0001582246695 -0.07186518757 0.000614 -0.1634400222 0.03556991459 -0.014736 -0.1363397777 0.03863056295 -0.014114 -0.1085586096 0.2136447792 -0.00338 0.1445917868 0.008320509432 -0.01248 0.36750348 0.08611060554 -0.24795 0.3555751764 0.1034233389 -0.210234 -0.1765717416 -0.288030335 0.000378 0.05669411875 -0.06286618609 -0.000242 0.147490754 -0.124194872 -0.002708 0.1534249008 -0.1287023274 -0.001956 0.413194845 -0.5798181829 -0.032488 0.4296839473 -0.5655124668 -0.042466 0.004167829668 -0.04137977848 -0.00412 0.003639503868 -0.03866008076 -0.003948 0.0005902959927 -0.04157556098 0.00062 -0.00864174557 -0.07552060338 0.000618 0.4064197633 0.06250531911 -0.403468 -0.1220077112 0.01621962428 -0.013546 0.1167560317 -0.04741598427 -0.020392 0.003780327811 -0.02600362406 -0.00538 -0.1509839375 0.1354958595 -0.017714 -0.1596083361 0.1388279325 -0.016512 -0.1597416611 0.1246558551 -0.017762 0.001201681518 0.2272769489 -0.00538 -0.007131082254 -0.06610179155 0.000614 0.08094495797 -0.03273300078 -0.009164 -0.5709678799 0.1731124127 -0.22898 -0.3449857714 0.5366950744 -0.01379 -0.3754016648 0.5713812613 -0.012812 -0.1264340726 -0.8468416491 0.000618 -0.1337909722 -0.8510752766 -0.004846 0.2495328593 -0.4665450469 -0.011744 0.2424077546 -0.4509035983 -0.010574 0.2600861339 -0.4603594694 -0.014634 0.4778684808 -0.162270258 -0.19328 0.1316564657 0.03692640772 -0.02734 0.1358347318 0.03133211227 -0.020822 0.5721122008 -0.06862228833 -0.220632 0.5750781182 -0.09293178464 -0.137068 0.5538896573 -0.07889808704 -0.194888 0.3180009793 -0.641190515 -0.00799 0.3259719304 -0.6442976407 -0.01233 -0.1342436266 -0.9351494949 0.00062 -0.1331690086 -0.9450706778 0.00062 0.3191457657 -0.0274203779 -0.249062 0.329447979 -0.03167165241 -0.390394 -0.8634963718 -0.006620555952 -0.15672 0.3654495452 0.2718009403 -0.103202 0.386039407 0.2859651774 -0.238908 -0.1095606781 0.1449207463 -0.012118 -0.1006061527 0.1384883396 -0.013848 -0.1118038549 -0.6239027556 -0.003834 -0.1207232557 -0.6255291902 -0.00918 -0.1487716118 -0.05252409466 -0.009776 0.02580496455 -0.03520374266 0.00062 0.03216854427 -0.03598153667 0.00062 0.2811693149 0.7005988382 0.000618 -0.6114708866 -0.1834761481 -0.171232 0.2469029035 -0.6221658725 0.00062 0.03871639121 -0.02362480411 -0.003524 0.04052281419 -0.02211228786 0.000616 0.3418017371 -0.4931965745 -0.01649 -0.2522923521 0.3222477573 -0.011116 -0.3393666278 -0.3811630587 -0.070172 0.180151251 0.0007614296998 0.00062 0.0363447055 -0.07360792609 0.00062 0.04188785473 -0.04965858313 -0.001536 0.1886856345 0.6035970995 -0.002446 0.1851462601 0.5893545519 0.00062 0.2776481734 -0.6677384373 -0.003166 0.2693125479 -0.664261371 -0.0019 -0.2243397409 -0.8220609289 -0.135026 -0.2075178458 -0.8137882603 -0.093726 -0.2064967682 -0.7946958168 -0.085148 -0.3179717657 -0.4589351137 -0.069178 -0.3436686642 -0.4382596595 -0.090534 0.3500507496 0.0505691061 -0.254102 -0.1416072055 0.1397605586 -0.01461 0.6880832467 -0.3305419182 -0.105436 0.7388258537 -0.2643911144 -0.094614 0.2876078604 0.6509176369 -0.010084 -0.4596392501 0.3489567112 -0.187318 0.08964437551 -0.06016368771 0.00062 0.0869696709 -0.05539399171 0.00062 0.08281602654 -0.05539162535 0.00062 0.07702248361 -0.05395298174 0.000618 0.09568610352 -0.09087305347 -0.002674 0.183119078 -0.2298119709 -0.002322 -0.1859427984 -0.7760111991 -0.037728 0.9001028624 -0.05247551362 -0.063356 0.9393988487 -0.02106481774 -0.068672 0.9539904609 -0.04683776623 -0.073734 -0.162224438 -0.06572315678 0.00062 -0.07160747134 -0.1159991521 -0.006786 -0.08872417437 -0.1262837 -0.004198 -0.08313558451 -0.1165020085 -0.006052 -0.2906343563 -0.616534856 -0.138806 -0.2532417458 -0.6059360817 -0.099812 0.01045370523 0.08693102179 -0.024662 0.2533283059 -0.6017019693 -0.001344 -0.3256858567 -0.2734268496 -0.049362 0.3403081922 -0.1767516967 -0.490514 -0.369792744 -0.1564594331 -0.06528 -0.1775278152 -0.06012900684 -0.007266 -0.1887853766 -0.0655036106 -0.008524 0.2150062493 0.6547193286 -0.003414 -0.7336250728 0.0517597462 -0.186268 0.1290458579 0.1520215407 0.000602 -0.2746855476 -0.2460001432 -0.028034 0.03964589121 -0.04750960645 -0.002992 0.180054071 -0.1719853753 -0.007566 0.6499034447 -0.03712904077 -0.124612 0.6025320406 -0.07459896846 -0.126402 0.04219803736 -0.05577761869 -0.000858 0.04138280404 -0.05768017347 -0.00338 -0.1174651263 -0.6163846424 -0.005704 0.175728514 0.005607720593 0.000614 0.0882700137 -0.02945863981 0.000618 0.09007791357 -0.03110348158 0.000604 0.09279304187 -0.02701993382 0.000614 -0.02264309283 -0.0289142528 0.000618 0.3121137152 -0.6363216337 0.00062 0.3146162352 -0.6370113429 -0.003068 0.09602766487 -0.04086214167 -0.0025 0.03690405101 -0.0348218259 0.00062 0.03527264618 -0.0354941304 -0.001858 0.03744452179 -0.03651354947 -0.003574 0.02811244998 -0.06982395821 -0.001216 0.03045474195 -0.06869445892 0.00061 0.2032950345 -0.2899392825 -0.012812 0.1962472685 -0.3066098024 0.00062 0.09673641657 -0.03804492366 0.000612 0.09621927691 -0.0389963771 -0.002868 -0.2142427274 0.1288946178 -0.018632 -0.2323489526 0.1128698314 -0.020816 -0.2168456505 0.1144803783 -0.019094 0.4457188109 -0.469724755 -0.104608 -0.4176666834 0.479971885 -0.10061 -0.118550805 -0.566421656 0.00062 -0.1158572081 -0.5768311093 0.00062 0.3098659065 0.7015227909 -0.009158 0.3263108902 0.7016266535 -0.019276 0.3244809391 0.7145371048 -0.022404 -0.01021022455 0.03163874096 -0.034468 0.09038331181 -0.03356696151 0.00061 0.2945492146 0.0007354673783 -0.048598 0.06234987033 0.1979168759 -0.013226 0.07009534683 0.2056367721 -0.01006 0.2443420638 0.5302067211 0.00062 0.2440913578 0.5363806454 -0.003112 0.2269355398 0.5282066587 -0.00138 -0.2577619274 0.2252970468 -0.009944 -0.2650696458 0.2176350028 -0.01894 -0.2545618564 0.2164315035 -0.013704 0.04065886181 -0.04950108237 -0.002304 0.03881455081 -0.05017907475 -0.004192 0.06603740138 -0.05755655268 0.000618 0.06351283907 -0.05480361022 0.00062 -0.4065720336 -0.5574139929 -0.1675 -0.3497225922 -0.4717150941 -0.110066 -0.3750904943 -0.4537564826 -0.11669 0.193352349 -0.5292553913 -0.00231 0.2001498449 -0.5231910199 -0.003178 0.03573518294 -0.07783662899 -0.005086 -0.1807073951 -0.1176596982 -0.001864 -0.1891445135 -0.1120345873 -0.00159 -0.1951214227 -0.1154699606 0.00062 0.2214463373 -0.423529697 -0.004494 0.085274089 0.0769762135 -0.025152 -0.3315362744 0.3166584833 -0.0241 -0.3046315029 0.3152195035 -0.023034 -0.320333074 0.3349378674 -0.021414 -0.1199473046 -0.7646728043 0.000618 -0.1262719186 -0.7577500559 -0.002124 -0.0219526237 -0.02397478391 0.00062 -0.02214047162 -0.0263697852 -0.001484 0.3186200853 0.07072056809 -0.035408 0.3192999865 0.07680258739 -0.016414 0.3132541122 0.07578207875 -0.009428 0.3965648967 0.0527199478 -0.415818 0.04430770011 0.8481947222 -0.003514 0.03601089699 0.8451115052 -0.004466 0.1705501595 0.002407714312 0.00062 -0.3342412893 0.5141421651 -0.01437 0.2873321504 0.7548575145 -0.007898 -0.1912546248 -0.4445664787 -0.011926 -0.1844646585 -0.4539298064 -0.008732 -0.1811873537 -0.4433658912 0.000618 -0.05181107439 -0.03805974168 -0.009464 0.05574947609 -0.08808064066 0.00062 0.05701452995 -0.08385474048 0.00062 -0.5157038595 -0.3876028658 -0.153808 -0.4608106802 -0.4015766785 -0.146702 0.3189784262 0.5322889475 -0.06956 0.3160037765 0.5151945397 -0.083156 0.06374526659 -0.07231662935 0.00062 0.05882053324 -0.06670668934 0.00062 0.3662668927 0.1622002083 -0.23324 0.3025143889 -0.001406763099 -0.11567 0.02443712371 -0.06650157447 0.00062 0.01506141964 -0.066848334 0.000618 -0.1856750144 0.1344057124 -0.017594 0.09029837995 -0.07504881696 -0.00138 0.08950092643 -0.07305167505 -0.001272 0.08825968461 -0.0733951308 0.00062 0.7417505474 -0.2058638645 -0.065952 0.09579443645 -0.04241573554 -0.00338 -0.8362959933 -0.06538110144 -0.119736 -0.288377791 0.5192956265 -0.006314 -0.2791762681 0.5139432687 -0.005264 -0.08114166436 -0.01493580898 -0.012024 -0.06694647542 -0.03874375941 -0.010106 -0.4328267645 0.07235763859 -0.0766 -0.4754461621 0.09652537472 -0.173712 -0.512295523 0.1039423342 -0.219144 0.2613402937 -0.6732330218 -0.001276 0.5633525514 0.2911990396 -0.584904 0.1440730676 0.04194956012 -0.00446 0.02642715252 -0.01262351133 -0.00921 0.02496385103 -0.009039752945 0.000604 -0.4224143078 0.5143776105 -0.064068 0.01267178718 -0.07496406799 0.00062 -0.8920854162 0.1599120376 -0.364614 -0.723791447 0.318613266 -0.310056 -0.7455648204 0.2778444446 -0.348848 -0.08288261755 -0.1548026998 0.00062 -0.1435817735 0.01353886164 -0.013276 0.3112150473 0.06765974927 -0.028502 -0.2006286022 -0.06916739474 -0.010454 -0.1950770428 -0.07353052872 -0.005562 0.2941781284 0.2495862666 0.00062 0.2995262177 0.2466599322 -0.004624 0.062134138 -0.07874278979 0.00062 0.5111492865 0.4563861077 -0.48344 -0.108530698 -0.01720610893 -0.012018 -0.1250020672 -0.01013489375 -0.010694 0.09071434811 -0.05281609146 -0.000906 0.09192834294 -0.05243907402 0.00061 0.0916163656 -0.05154215755 -0.004582 -0.2490984659 0.1982245841 -0.01938 0.2446287211 -0.6197861025 -0.000592 0.2422120457 -0.6177352199 -0.000822 0.2454132877 0.7741821832 0.000502 0.2454944378 0.7697960465 0.00062 0.2507413551 -0.4453569896 -0.013764 0.5249458983 -0.02474040875 -0.479226 0.5466034218 -0.05256362819 -0.277188 0.5582348144 -0.02117357819 -0.39988 0.3398438011 -0.03104351317 -0.433188 -0.09171361933 0.1709925731 -0.005396 0.09023816277 -0.01975364605 0.00062 0.09414535641 -0.01525923368 0.00062 0.3264509784 0.1553951646 -0.009004 0.7332619752 -0.1486483929 -0.048116 0.3246326144 0.07470836329 -0.092438 0.3301932251 0.08032365712 -0.149004 0.3228535027 0.08171710905 -0.031984 0.03232323931 -0.0544705232 -0.003792 0.03120871616 -0.05314416669 -0.004344 0.03006465314 -0.05544026156 -0.00538 -0.007821595942 0.8892137927 -0.06786 -0.02297226401 0.8925381682 -0.047478 -0.3316952322 -0.2971275323 -0.049136 -0.3149543768 -0.2887938727 -0.048752 0.184473084 0.0007799031917 -0.00138 0.1867954763 -0.01310295153 -0.008708 0.1828372658 -0.01066544354 -0.005142 0.1818020703 -0.01546142158 -0.009302 -0.219684374 -0.4519560106 -0.026348 -0.2092758328 -0.4618417884 -0.026508 -0.2064319255 -0.4453009272 -0.023378 -0.1219869778 0.1922895912 -0.003876 0.05879548322 -0.05936494517 0.000618 0.04701558359 -0.08837405932 -0.00137 0.04859250326 -0.09233048672 0.00062 -0.2025184793 0.1652337263 -0.017118 -0.2127385859 0.1784004862 -0.016678 -0.183470656 0.1857932849 -0.009358 -0.2178751807 0.07026924675 -0.019984 -0.2566180799 0.05083652404 -0.02421 0.06644001375 -0.01666065906 0.00062 0.06541457533 -0.01936805696 0.00061 0.04239650132 -0.06097650536 -0.003104 0.06641672082 -0.02292933652 0.00062 0.06500745526 -0.02124142839 -0.002818 0.0630603216 -0.02205717029 -0.003016 0.2123486845 -0.4269619248 0.00062 0.2572439651 0.6369051632 -0.013144 -0.1184728138 0.0005170873491 -0.011994 -0.1280858821 -0.7943778551 0.00062 0.006714054876 -0.05093721834 0.00062 0.2783759371 -0.5894549307 0.000618 -0.1779594486 0.1632629987 -0.012434 -0.1854337435 0.1532417513 -0.016188 0.01387595564 0.8551577915 -0.010536 0.1725482382 0.005780112418 -0.002336 0.1724301366 0.01014245718 -0.003012 0.03795639337 -0.05098646045 0.00062 0.4205780797 0.1580705385 -0.366398 0.4107412064 0.1416935634 -0.363298 -0.08533771454 0.1609548221 -0.010314 0.3355612703 0.06086358536 -0.20913 0.3412019904 0.05385499993 -0.200904 -0.01585382077 -0.07376604227 -0.005684 -0.02648508198 -0.07761550049 -0.007654 0.2452599863 -0.6128673033 0.00062 0.2449075629 -0.6156680779 0.000618 -0.2871396698 -0.3858550288 -0.033586 0.08475805173 -0.02157199752 -0.003112 0.1453374598 -0.1177165176 -0.00338 0.1365196068 -0.1196416888 0.00062 0.1403953388 -0.1250581486 0.000498 0.0147432893 0.8786570904 -0.017046 0.02463378065 0.8820215491 -0.015636 0.3163204043 -0.01497566573 -0.210804 -0.3861025779 0.3839781285 -0.028084 0.08336614759 -0.05134251793 0.00061 0.3071003615 0.03714588463 -0.028676 0.4660528976 -0.3856950269 -0.080886 0.4911298135 -0.3499096585 -0.0495 0.3659917462 0.02650070647 -0.471814 -0.1446134742 -0.1326021182 0.00062 0.05666483165 -0.06492010845 -0.00059 0.178845483 -0.1412522505 -0.008778 0.08568492386 -0.02557013493 0.000604 0.05117914672 0.05513780487 -0.028114 0.4103185683 -0.1174381012 -0.494586 0.06652764986 -0.053698615 -0.000684 0.5830294756 -0.2247448755 -0.07717 0.6016810233 -0.214512645 -0.071918 0.585605485 -0.1704167921 -0.082918 -0.009040123291 -0.04765861948 0.000616 -0.00703667665 -0.04742176208 0.00062 -0.7006107222 0.02957558355 -0.171782 0.07591412414 0.04726351896 -0.02996 0.20458879 -0.5148851641 -0.003336 -0.06533977911 -0.08753594227 -0.008584 -0.07674331443 -0.09649575008 -0.00734 -0.06509626892 -0.1078136681 -0.007694 -0.02264412551 0.0359389823 -0.016986 0.0097944888 0.1630086154 -0.017818 -0.01049828643 0.05624468485 -0.02546 -0.01054345258 0.06818814904 -0.023102 0.3042700508 0.3691766478 -0.016264 0.1440725787 0.02741577308 -0.007268 -0.2109577713 -0.4169549606 -0.024518 -0.21021605 -0.4303085653 -0.022608 -0.9268946182 0.02921651539 -0.172128 0.02412036561 -0.08463055638 2.2e-05 0.02397453373 -0.08315558792 0.00062 0.2880403945 0.3535571775 0.00062 -0.09495324612 0.03761116857 -0.01502 0.006594241094 0.2521986364 0.000618 0.1891898664 0.5442707325 0.00062 0.3065452888 -0.02378157101 -0.206252 0.3103603406 -0.0363722157 -0.29631 0.03106833001 -0.06759760444 0.00062 0.2527594616 0.6697872533 -0.00575 0.2460426075 0.6640657292 -0.00512 -0.4796055002 -0.4287732578 -0.157328 -0.001426981187 -0.02295338438 0.00062 0.838612553 -0.1493020882 -0.075236 0.81266337 -0.1363301616 -0.05857 0.02652793064 0.8922086226 -0.01686 0.03098620234 0.8747295727 -0.01165 0.02183175619 -0.01815578286 -0.012988 0.3192631329 0.6465151308 -0.013912 0.3102190818 0.6517791867 -0.010722 -0.01897091394 -0.1049365147 0.000616 0.2812720947 -0.463430368 -0.020242 0.2701327313 -0.4545885427 -0.019106 0.2288851914 -0.523440297 -0.006532 0.316807327 0.08149772291 -0.011362 0.3477547278 0.02712637824 -0.305634 0.3467805527 0.03550041865 -0.245872 -0.09541359844 0.1631580746 -0.007816 0.1233554286 0.08090514689 0.000566 -0.3574789158 0.6258337206 -0.003234 0.3668678525 -0.06226745801 -0.452418 0.3092048107 0.6799780988 -0.00338 0.3119132477 0.6880694344 -0.006772 -0.08200100014 -3.537610786e-05 -0.012272 0.1755201357 0.01403719324 -0.00379 0.1912394327 -0.2820309836 -0.0046 -0.5331468185 -0.01918321566 -0.135432 0.2944733781 0.7275819639 -0.004848 0.2872277838 0.7299240015 -0.005058 0.3541296079 0.1175434192 -0.179274 -0.1342150434 -0.861618196 -0.00694 0.08868042859 -0.04959523335 0.000618 0.3043736167 0.7058495977 -0.005676 -0.1819591644 -0.7273848392 -0.026156 0.44656301 -0.08471094216 -0.486256 -0.4489899792 0.08854888078 -0.116948 -0.4264720816 0.09898915307 -0.043462 -0.1103288478 -0.700068172 -0.00387 -0.114096996 -0.7073480543 -0.004456 0.04746430344 0.04402162641 -0.028538 0.05604882164 0.03660174274 -0.027596 0.1643409066 -0.02978908257 -0.010772 0.1623252151 -0.0215707901 0.000616 0.1696972894 -0.02366292992 -0.009274 0.252326727 -0.4758393578 -0.010438 -0.274245445 0.3314243844 -0.017906 -0.2695574495 0.3088383785 -0.01862 -0.2649786839 0.3225358523 -0.017322 -0.3478176726 0.4551173105 -0.018316 -0.2381685109 -0.1260510348 -0.014472 0.04498321996 -0.08491712062 0.00062 0.2845534547 -0.006252982783 -0.005284 -0.08337697804 -0.09079826028 -0.007792 0.009581059673 0.9168475801 -0.049538 0.3091543139 0.2256216257 -0.005918 0.3010916602 0.2292529903 0.00062 0.3088332895 0.2355007119 -0.009964 0.2358901628 -0.5539768797 -0.004276 -0.1307744026 -0.6246820243 -0.018712 0.3285039312 -0.6040533414 -0.01009 0.3228080564 -0.5996307449 -0.005892 0.09661755499 -0.04916223803 4.2e-05 0.09707351871 -0.04944715164 0.00062 0.2424775322 -0.6210011698 0.00062 -0.1311561472 0.1931041054 -0.003616 -0.1315984058 -0.9239944129 0.000522 0.08215960462 -0.04806698079 -0.00784 0.5497989111 -0.2928829074 -0.017848 0.3006783864 0.6786164114 0.000614 0.4278209278 0.278493186 -0.37779 0.4346304234 0.3039397263 -0.397602 -0.2001444725 -0.003244608672 -0.01445 -0.2046229787 -0.01527662219 -0.013498 0.08840838749 -0.030673403 0.00062 -0.5957439633 -0.2446392371 -0.160974 0.2960446829 -0.6287565131 0.00062 -0.1403831572 0.04708195012 -0.015504 -0.2568499364 0.3320119692 -0.015116 0.191598221 -0.009724492483 -0.005958 0.0813971438 0.1327248608 -0.020934 0.0970264574 0.158540272 -0.01555 0.1029853018 -0.02483606741 0.00062 0.09349809203 0.1770354339 -0.014468 -0.6188763059 -0.04991868413 -0.169404 0.341592356 -0.5227170704 -0.01626 0.3046976395 0.5658146024 -0.034576 -0.5168534892 0.1413370007 -0.206686 -0.4914226393 0.1222185675 -0.15163 -0.2615397981 0.2452964189 -0.00609 -0.05915176707 -0.1574559663 -0.001562 -0.04342768828 -0.162155214 -0.000844 0.09767504772 -0.02763700848 0.00062 -0.01372701578 0.07993764458 -0.02322 -0.01913385024 0.09145003347 -0.021134 0.05844259835 -0.08477263373 -0.001874 0.06202306179 -0.08330242447 0.00062 0.1657232687 -0.101304697 -0.015506 -0.1369228751 -0.09156899965 -0.006354 -0.147748561 -0.08804110088 -0.005596 0.09528477634 -0.02214172656 -0.003582 0.09535105008 -0.02668175192 0.000572 0.2185645518 -0.08937721328 -0.023548 -0.429303695 -0.05723447348 -0.053134 0.1616394259 -0.1271120374 -0.002666 0.279775406 -0.3382622063 -0.337156 0.2697531421 -0.35939964 -0.218418 -0.1546447753 -0.07013509628 -0.001138 0.06220222558 0.9074679768 -0.005948 -0.4701109335 0.02041113827 -0.052608 -0.1580286146 -0.1240211162 -0.001972 0.2796833543 0.3762180496 0.00044 0.2785356107 0.3848164859 0.00062 -0.1675737945 -0.3003188004 0.000618 0.05769264249 -0.06614529076 -0.000116 0.2920850776 0.253030373 0.00062 0.295785765 0.2559742124 -0.004336 0.1404473743 0.05191083411 -0.008536 -0.2569116836 -0.07002732683 -0.023632 -0.1650237059 -0.5583397585 -0.020952 -0.4770000557 0.4229608293 -0.2383 -0.3750418716 -0.3528360468 -0.08693 0.03016516289 -0.06156566974 -0.004236 0.3441081155 0.04413058803 -0.224774 0.009644254033 0.231256715 -0.00538 0.007297074455 0.2206738517 -0.007284 -0.2145947182 -0.7603670634 -0.067856 0.4857618416 -0.2092158508 -0.113188 0.466632633 -0.1876903532 -0.171508 -0.6527848148 0.3613332769 -0.338696 -0.2697535432 0.5006236879 -0.005864 -0.2853526262 0.5079429657 -0.008352 0.06655042456 -0.03016810383 0.000608 0.3928484556 0.06616178199 -0.42466 0.3781028848 0.06833090446 -0.383164 0.08105015729 -0.05301747531 -0.006328 0.2843361004 0.7399598991 -0.007268 0.02636956418 -0.08781837482 0.00062 0.007317805763 -0.05739877578 0.000602 0.005187118639 -0.05774219669 0.000616 0.2360190838 0.5561983861 -0.006874 0.02493942684 0.1834216033 -0.015312 -0.01225343546 0.8294275678 0.000452 0.005785593978 -0.05427507995 -0.001206 0.0258908572 -0.0530876563 0.00062 0.02737859017 -0.05015422274 -0.007972 0.3565816215 0.5359586055 -0.213434 0.3533220797 0.5656712984 -0.205448 -0.005717437644 0.8313621893 -0.006704 -0.1985781916 -0.4110555075 -0.018754 0.5359828504 0.003261258767 -0.513362 0.3583500905 -0.5705889283 -0.014994 0.3453344678 -0.567226671 -0.014692 0.02236944319 0.8231786851 0.000532 0.4811738725 0.4917239118 -0.468136 -0.1479440114 0.7705468861 0.00042 -0.1459185089 0.7674496632 0.00062 0.3987034294 0.08980078567 -0.40514 0.3803768593 -0.5397900097 -0.017284 -0.02217938852 -0.04854711976 -0.007838 0.4271872417 -0.2482770134 -0.145046 0.1916984499 0.59442381 -0.004068 0.2119097261 -0.5678780378 -0.002574 -0.07206693433 0.175979545 -0.009228 -0.06654117229 0.1845637733 -0.009524 0.3175492612 0.241606096 -0.018514 0.3136579407 0.2500322324 -0.01869 -0.08958390694 -0.007330473703 -0.012576 0.2023929377 -0.3976241583 0.00055 0.02907139848 -0.08190961989 0.00062 0.02716872925 -0.08017268457 0.00062 0.1516634832 0.0419831986 2e-05 -0.2595580073 -0.5267376112 -0.03938 0.03603673343 0.2488747957 0.000442 0.03796469667 -0.1052067796 2e-05 -0.2046181699 -0.6551196806 -0.079996 -0.1966918859 -0.6728443341 -0.106034 0.1535790693 0.0433575992 0.00042 0.2575286811 -0.3413215845 -0.31047 0.1309977273 0.05889032206 -0.004152 0.707821188 0.02791097396 -0.210008 0.08641433187 0.04278249231 -0.032554 0.01423315698 -0.02403865889 0.00062 0.01646203481 -0.02616940547 0.00062 0.009001279095 -0.02881068283 0.00062 0.2685119385 0.7065592938 0.00062 -0.1822931718 -0.07330727323 0.00062 -0.2264979232 -0.1058868227 -0.011642 0.0005548508492 0.07683931111 -0.025072 0.2243529505 0.6039012494 -0.010892 -0.07318924499 -0.0894957112 -0.00819 -0.02847495674 0.1031795484 -0.02218 0.4223136592 0.1083084846 -0.409194 0.4401478161 0.1029781154 -0.531104 0.4345612333 0.1210296953 -0.391958 -0.2432764397 0.2108231327 -0.007888 -0.3211613304 0.4737483104 -0.015498 -0.113280083 -0.6553350245 -0.006316 0.04457142343 -0.0940608649 -0.001098 0.04386716321 -0.09166303568 0.00062 -0.3391446195 -0.5309652686 -0.123536 -0.2222524864 -0.4395914855 -0.022526 0.3700262269 0.2485900826 -0.130304 0.3989180391 -0.4924867832 -0.029916 0.2911679686 0.5544284297 -0.029996 0.03450196734 -0.07350387213 -0.000126 0.2168854971 0.01405244313 0.00062 0.1831657635 0.01951746685 0.00062 0.2818711476 0.3687780133 0.00062 0.05914726352 -0.02078216218 0.000618 0.05852874356 -0.02187778417 -9.2e-05 0.2918826753 0.302506143 0.00062 0.142447016 0.03229332593 0.000608 -0.07073014584 0.07160442363 -0.023366 -0.06986728646 0.08511619936 -0.020184 0.4419628773 0.2568659744 -0.321676 0.2017244438 0.5416867142 0.00062 0.106713706 -0.03456295902 -0.017528 0.1027614911 -0.03400913473 -0.008362 0.3547406438 -0.4801735356 -0.018566 0.5145130334 -0.3636251052 -0.058936 0.3207167091 0.1520889963 -0.00317 0.3211044717 0.1593966557 -0.00263 0.2262758693 0.0002096953741 -0.03272 0.2194064298 0.005694532227 -0.009228 0.2736990976 -0.6045546824 0.000356 -0.06476716574 0.0299816365 -0.015428 0.0284667581 -0.04726718224 -0.00651 0.3626691053 -0.619265176 -0.014432 -0.8582286222 0.04224501247 -0.179376 0.5097214501 -0.3388641649 -0.026324 0.4922559727 -0.3277561934 -0.02699 -0.3040997028 0.5036545481 -0.011696 -0.3023567189 0.5161108927 -0.009984 0.7121062434 -0.06477761416 -0.067152 0.01223787274 -0.07184326509 0.00062 0.01359739131 -0.07293396214 -0.002208 -0.3269208486 0.5551302611 -0.00972 -0.3207024958 0.576596919 -0.00568 0.732622105 0.1095451927 -0.45669 0.7695109749 0.1172794458 -0.346062 0.057049798 -0.06825029267 0.000262 0.2793655455 -0.5077828635 -0.012396 0.2870931012 -0.5145930865 -0.012786 -0.1351888286 -0.8863464282 0.000618 -0.135661711 -0.8946524008 0.00062 0.3056943888 0.7126491245 -0.009244 0.3809466969 -0.05071959381 -0.49094 -0.7667149624 -0.1764527721 -0.123384 -0.735877132 -0.2054237489 -0.123272 0.1485423542 0.04418987619 -0.003268 0.3576060846 -0.5826262109 -0.01485 0.02759391305 -0.07807180276 0.00062 -0.3862275074 0.44855561 -0.031258 -0.1466753389 -0.7373531108 -0.011048 0.02736641771 -0.03366123536 0.00062 0.09372903164 -0.02184726703 0.00062 0.2781159951 0.4579012259 -0.010118 0.3036974005 0.6990659845 -0.00338 -0.2127244467 -0.07358877595 -0.012222 -0.7540012572 0.160188431 -0.333212 -0.7665616462 0.09134926664 -0.23199 -0.7934479624 0.1389586562 -0.302604 0.2924439822 0.2740307109 0.00062 0.2472784146 -0.5436017239 -0.004392 0.4815741344 -0.4295861671 -0.105588 0.03058031699 -0.06362535778 -0.003354 0.03169474283 -0.06312340365 -0.001904 0.03148104034 -0.06469620723 -0.005206 0.3023049144 -0.4399636616 -0.216212 0.2948242639 -0.45452898 -0.052574 0.04526558968 -0.09150186371 -0.00086 -0.1592978692 0.1055852081 -0.01697 0.04041617433 -0.03796393679 -0.002788 -0.146080766 0.7769758638 0.00062 -0.1737129086 0.1033094784 -0.015514 0.1929758656 -0.01561005336 -0.011154 0.2173838379 0.6705579525 -0.000324 0.2222169929 0.6646105805 -0.003522 -0.2697914704 0.2414093183 -0.016286 -0.2674598295 0.255261843 -0.013826 -0.2794903006 0.2577165939 -0.022484 -0.4600875289 0.1456358699 -0.025188 -0.449477708 0.1302374272 -0.035876 0.009620097323 -0.07056442275 0.00062 0.3119542438 0.6619607808 -0.009322 -0.6785458142 0.3250687763 -0.345646 -0.4884786399 0.3433478836 -0.248136 -0.2625661352 -0.1413874439 -0.018156 0.29499722 -0.6176715296 -0.000554 0.1666674163 -0.1191030619 -0.008804 0.0692735248 0.9320234615 0.00062 0.06918910876 0.9119680572 -0.002696 0.1861969282 -0.1370929443 -0.02144 0.2933408931 -0.007548975464 -0.089048 -0.1708717149 0.1726850942 -0.010504 0.6919124033 -0.05399123735 -0.074696 -0.1836230263 0.1105144142 -0.01517 -0.2094509895 0.09150459855 -0.019218 0.2580652364 0.5466639106 -0.014132 0.2533356209 0.5351453284 -0.008482 0.2588326555 0.5278281376 -0.012426 -0.06852646675 -0.1570924917 -0.0017 -0.06955328798 -0.1453085449 -0.003026 -0.1741866199 0.7742277387 0.00022 -0.1793774471 0.7719471972 2e-05 -0.1630799494 -0.4866229568 -0.005494 -0.157687235 -0.4909225696 -0.00349 -0.3574822713 0.3888007448 -0.023542 -0.1818469683 0.1442097751 -0.017234 0.1976902819 -0.3586796305 -0.005688 0.08073590812 0.1907552267 -0.013092 -0.1904913083 -0.07937113338 0.00062 -0.1955280935 -0.08001845777 0.00062 0.009223586483 -0.02383724856 0.00062 -0.1281279996 0.03525704384 -0.01345 0.2460914166 -0.6017274509 0.00062 0.2447383042 -0.5996674318 0.00062 0.2437569666 -0.6113770798 0.00062 -0.1394199715 0.1995083008 -0.003816 -0.1980597046 -0.7611619314 -0.04361 -0.1923700917 -0.7472823151 -0.032332 -0.3281740283 -0.2275856391 -0.051492 -0.3101108011 -0.234468127 -0.038514 0.3824124067 -0.4216813655 -0.118766 -0.05108156691 0.8637119798 -0.039176 -0.04019612873 0.8670031484 -0.028062 0.3380758892 -0.2268263356 -0.382856 0.3158170213 -0.2091691234 -0.489542 -0.2051052098 0.121299949 -0.016514 0.03999416125 -0.04295562267 0.000614 0.03922305092 -0.04229787815 0.00062 0.03817867135 -0.0428840388 0.000604 -0.311065774 0.5346031794 -0.010316 -0.3063514743 0.5264332598 -0.010094 0.4311305893 0.03527392422 -0.540506 0.9684223696 -0.06863454732 -0.083744 0.2991912424 0.7202856415 0.00062 0.3077100591 0.7299276743 -0.014996 0.0907095936 -0.0810187268 0.00062 -0.3278390554 -0.3633187235 -0.045612 -0.1359555273 -0.7674601593 -0.0054 -0.1264483935 -0.7703633438 -0.002348 0.2468809138 -0.1854299075 -0.210778 0.2699907951 -0.1749770134 -0.356724 -0.3666119449 -0.5656295723 -0.149658 0.3650171021 0.07427037001 -0.325694 0.3748896326 0.0798160173 -0.268126 0.2964548203 -0.619611508 0.000616 -0.01759072396 0.01254965258 0.00062 -0.01697258254 0.008660300677 0.000618 -0.2045237538 -0.6818184423 -0.116044 -0.2153698111 -0.6833563226 -0.11293 -0.2053307081 -0.696516849 -0.105048 0.1616947972 -0.07871520265 -0.01801 0.1587206471 -0.09262561167 -0.013732 -0.7100854071 -0.1204940455 -0.13527 -0.08177488084 0.1705501324 -0.00538 -0.4159401464 0.3621232581 -0.03405 0.02872262988 -0.06376585543 0.00062 0.2492082735 -0.60558097 -0.00138 -0.1709866238 0.1135867955 -0.0186 0.3304879368 -0.3269951276 -0.26167 0.3738548673 -0.3296045328 -0.15759 -0.4066942614 -0.0686623269 -0.051788 0.232708841 -0.7232854206 -0.003822 -0.1245639826 -0.1103769911 0.00062 -0.136152952 -0.1124260719 0.000618 -0.1331970625 -0.1078363956 0.00062 -0.1463043717 0.1586433154 -0.010072 0.02402382518 -0.04171701557 0.00061 -0.1514845863 -0.8187079769 -0.016 -0.1418307335 -0.8128552394 -0.009834 0.04197901949 -0.1019087827 -0.000776 -0.4686489648 0.1245726374 -0.109854 0.02840777196 -0.05059488382 -0.00938 -0.1092079286 -0.6468806628 -0.003142 0.2202659442 -0.4776648303 -0.006784 0.3013611581 0.2235034627 0.00062 0.01622310793 -0.02378903097 -0.003202 0.01923093987 -0.02265649686 0.000616 0.2973484361 0.2377440222 0.00062 0.4616006605 -0.4122960366 -0.101914 -0.209502989 -0.4055490645 -0.022236 0.01080472328 -0.0777018001 0.00062 0.05050793033 -0.1005897631 0.00062 0.3404388235 -0.6024097243 -0.01466 0.3012857073 0.2401118034 -0.003602 0.1143284261 0.1059729951 -0.014512 -0.8205645558 0.08533272141 -0.230088 -0.8440381203 0.1339710531 -0.31984 -0.9068219274 0.06043194204 -0.205478 -0.1335944899 -0.9130580248 0.000522 -0.135750915 -0.9016983385 0.000618 -0.1398442346 -0.9122751174 -0.003822 -0.2924937811 0.3183280744 -0.02031 0.01340097055 0.8314956972 -0.00464 0.1272069058 -0.1131829644 0.00062 0.2393626133 0.5223656477 0.00062 0.1260420427 0.06358508641 -0.017542 0.3743984986 0.1702809176 -0.239602 -0.1370817555 0.7821091868 0.000306 0.08785505516 -0.05514631446 -0.001142 -0.007643720351 0.01883726645 -0.015518 -0.0977477696 -0.6852209435 0.00062 0.09832489124 -0.0512089936 0.00062 -0.007457669512 -0.007915461399 0.00062 0.1984580345 -0.01095543799 0.000618 0.2476869501 0.542935686 -0.008418 0.08289522022 -0.03480843962 0.000596 -0.2026603086 -0.7771679337 -0.056294 0.2608974465 -0.1302117412 -0.16368 -0.3126088687 0.4449030944 -0.015412 0.01306671418 -0.02029095563 0.00062 0.2537499664 -0.6039200713 0.000618 -0.1111907989 -0.6659575505 -0.006578 0.1972138433 0.5675243212 -0.004226 0.2448870018 0.6938389206 3e-05 -0.1377727621 -0.5400065399 -0.002358 0.1921789905 -0.07732991516 -0.031762 0.1492334249 -0.07416819638 -0.0203 -0.3053853187 0.5555700018 -0.006548 -0.1172227829 -0.1111601809 -0.001932 -0.1282954407 -0.5681364959 -0.00369 0.2889240936 0.3749323377 -0.006346 0.290546902 0.3635412282 -0.005094 0.2951493023 -0.188297065 -0.38938 -0.4704358223 0.3214522603 -0.219358 -0.006912533405 -0.09005853062 0.00062 0.8427626989 -0.01893124958 -0.060926 0.2384584184 -0.4871549266 -0.008684 0.2844225897 0.4219462613 0.000618 0.3285873742 0.3536271275 -0.034834 0.05827765889 -0.07023545862 0.00062 0.2370087002 0.5448826919 -0.005028 0.01401574698 -0.06482494928 0.00062 0.1531644578 0.04200999742 0.00042 0.299894238 0.7307482414 -0.006966 0.08997432156 -0.02127397364 0.000618 0.09209314103 -0.02355610669 0.000604 -0.1336940851 -0.6135886035 -0.018396 -0.1430714655 -0.6893205056 -0.015954 0.02096276388 0.830108008 -0.00284 0.02292946387 0.8270247548 -0.001024 0.02466860518 0.829650439 -0.001738 0.3030432531 0.6004995256 -0.02706 0.09003516367 -0.05017133061 0.00062 0.02611549247 -0.08230936379 -0.000758 0.02590477097 -0.08414285903 0.000618 -0.421694475 -0.3982140767 -0.112452 0.2308200465 -0.5157197033 -0.006962 -0.4123900173 0.5018726321 -0.04917 0.03718244386 0.2380465942 -0.004056 -0.1094548969 -0.6781297654 -0.004982 0.3032303791 0.06398275102 0.00062 0.05195660428 -0.07835688215 0.00062 -0.7815623367 0.1911364392 -0.34724 0.02734884388 -0.0542993535 0.00062 0.09742647894 0.185096362 -0.010948 0.0974871737 0.1936062176 -0.007278 0.3199711032 -0.6496338155 -0.011552 0.2946662764 0.6759605784 -0.005906 0.2465371552 -0.5891367802 -0.002678 0.2509123504 -0.5838110564 -0.003102 0.4136023147 -0.5476931467 -0.022432 0.3176658396 0.2227716688 -0.015518 0.02841926106 0.231784985 -0.00538 0.02937906287 0.2225480071 -0.007746 0.1544734087 0.03460180954 0.00052 0.1551218291 0.03513542666 0.00052 0.02245844108 -0.03462028386 0.00062 0.2482783849 0.5307457129 0.00062 0.2338754691 -0.006170490461 -0.014242 0.2355510634 0.004443589147 -0.008072 0.0851959182 0.05376955052 -0.02947 -0.3414604857 0.3884698861 -0.02061 -0.3392701909 0.4103068024 -0.018988 0.5931903926 -0.01718609757 -0.35158 0.03476974589 -0.06912780086 0.00062 0.03548649642 -0.07232713725 0.000618 0.2191045684 0.6466274957 -0.005454 -0.1776392989 0.1238395689 -0.019186 -0.2660522753 0.03582751882 -0.023246 -0.1692196763 -0.4797448676 -0.007222 0.2672292297 -0.1516610738 -0.33174 0.03201089587 -0.06689169883 -0.003354 0.3205089823 0.6913205923 -0.013794 0.05854058725 -0.05670938273 0.000618 0.34685675 0.3778642666 -0.26612 0.2269697128 0.009390232636 -0.00497 0.2481997215 0.5185914932 0.00062 0.2478889667 0.5251143802 0.00062 -0.02506928519 0.04964112673 -0.020564 0.409191785 0.296298572 -0.282382 -0.1644641733 0.7776293581 0.00057 0.7297606914 0.04346249512 -0.217752 0.7313719799 0.01348810482 -0.119468 0.2888241383 -0.002260617156 -0.01249 0.3142628142 0.1558575551 0.000484 0.02468448812 0.8230718845 0.00062 -0.1504969322 -0.5475777406 -0.009036 0.3275546849 0.04713482592 -0.15479 0.2064650287 -0.4810924518 0.000618 0.15373403 -0.04321117755 -0.048948 0.2522871102 -0.3006640699 -0.33208 -0.03332205253 0.1166895276 -0.019574 -0.2742935057 0.2663149734 -0.018836 0.08772386098 -0.03037653307 0.00062 0.2630602476 -0.597652164 0.00062 0.2648276348 -0.5952502284 0.000618 -0.2099081727 0.1566908813 -0.019216 0.9079128628 -0.06968666939 -0.07231 0.1011981354 -0.03999385669 -0.00938 -0.09829170732 0.2157777627 -0.002696 0.05783582383 -0.06474957503 0.00061 0.01172971305 -0.06602547641 -0.00445 -0.2173826901 0.4255445136 0.00062 -0.2288901637 0.4285259543 -0.003386 -0.2279681694 0.4192290672 -0.00382 -0.2182629541 -0.02342256038 -0.0174 -0.2138503182 -0.03324871304 -0.015074 -0.09192387574 0.2003630758 -0.00338 0.3697900203 0.5883597459 -0.23642 0.05609306719 -0.02342125261 0.00062 -0.1252772703 -0.617283359 -0.010414 -0.3774848031 0.05700955017 -0.038268 -0.1751635827 -0.8926301935 -0.067732 -0.1605283419 -0.9059703192 -0.025804 -0.4708590418 -0.4570131857 -0.154066 0.6203011751 -0.2551620551 -0.069626 0.2401336453 -0.6202681965 -0.000148 -0.1632432106 0.217269218 0.00062 0.1950913337 -0.1620358455 -0.028266 0.04454202882 0.2035335056 -0.01348 0.03620721802 0.2069780124 -0.012104 -0.09471820989 0.2272968547 0.00062 0.2013449783 -0.01683512723 -0.012368 0.4540660618 0.1183920676 -0.545824 0.4452022767 0.08401787602 -0.555084 0.05810772089 -0.06324600056 0.000618 0.3971429221 -0.3418605548 -0.112134 0.4192269794 -0.3289781083 -0.099094 0.155956556 -0.02752853398 -0.014116 0.1576132897 -0.03451856349 -0.029482 0.3084671891 0.5466797123 -0.04634 -0.09910330569 0.7913257853 0.00024 0.5449217869 0.03534921582 -0.506002 -0.2251835945 0.4371554547 0.0006 -0.2353826969 0.4360906312 -0.00486 0.3095668862 0.2668632798 -0.01823 0.3146689954 0.2745650567 -0.024486 0.09707737823 0.07142778899 -0.02858 0.1047539247 0.06345084341 -0.03055 0.009873365032 -0.06773584086 0.00062 -0.08543446326 -0.04855556923 -0.009312 0.3757826415 -0.3566555265 -0.13073 0.3497564797 -0.3467924899 -0.178638 0.274081817 0.7425153623 -0.00787 0.7841016527 0.01460265534 -0.064502 0.8253270344 -0.004406408343 -0.069836 0.2253046885 -0.4020814123 -0.013248 0.2359463087 -0.3938957059 -0.01938 0.4492580384 -0.2615867971 -0.086568 0.3217808732 -0.4388405021 -0.12646 -0.04742089118 0.1203155313 -0.01816 0.0924665025 -0.07476986224 -0.00138 0.09337907136 -0.07507797341 0.000608 0.9819974109 -0.09409124377 -0.118852 0.9515552876 -0.09010764337 -0.097974 -0.1944490063 0.2041817563 -0.002718 -0.01392024593 -0.02853355294 0.00062 0.1403010482 0.00192323122 -0.019488 0.1455236763 -0.006237737808 0.00061 0.1495152059 0.002621009445 0.00061 0.0277961235 0.829360385 -0.000664 -0.1621828683 -0.05041395104 -0.010576 0.08776361409 0.03112166302 -0.0355 -0.2632149108 0.2676680827 -0.01168 0.2078590777 -0.07537316809 -0.029026 0.1988228438 -0.06364943122 -0.097856 0.4295318333 0.1780242546 -0.328098 0.2718438331 0.6634442137 -0.00789 0.2784277828 0.6730005197 -0.006802 0.2757143714 0.7076945829 -0.00138 0.2784768591 0.706371435 0.000618 -0.1032711342 -0.7272843096 0.00062 -0.2407313375 0.3565635525 -0.009646 -0.03437649226 0.2180615507 -0.005972 0.3596756734 0.4168752281 -0.110846 0.3880872176 -0.5956301833 -0.018974 0.09317549689 -0.02433122898 -0.004872 0.2814027446 0.7494874128 -0.008554 0.4018262747 0.1287457654 -0.348522 -0.3834270104 -0.05339844895 -0.051834 0.1544840833 0.03564616168 -0.000606 0.06256125532 -0.004132641605 -0.00669 0.1461147533 0.03894088191 -0.00338 0.03374374905 -0.03471822055 0.00062 -0.1599983324 -0.4776261957 0.000412 0.02859180455 -0.07665039197 0.00062 0.09003216439 -0.02449213282 -0.00538 0.3315918359 0.06579549389 -0.178708 0.2228245449 -0.009023646284 -0.07638 0.06046470837 -0.02445700937 0.00062 0.03387831388 -0.0777158141 -0.00242 -0.3986350139 0.5090219524 -0.022602 -0.02183891964 0.001582296928 -0.001354 0.02006873633 -0.01919950747 0.00062 0.02920928246 0.9189278453 -0.02884 -0.2397558029 0.3315792708 -0.003462 0.3093227006 0.359189585 -0.01668 -0.1963407571 -0.4553521777 -0.017428 0.6394020957 0.3274279056 -0.596888 0.2980562757 0.3754231385 -0.01274 0.03415342591 -0.05272985134 0.000618 -0.003788035603 0.08946682215 -0.022702 0.3000960565 -0.629020687 -0.00094 0.06865610788 -0.07947482274 0.000608 0.03284902186 -0.07701450436 -0.003736 0.07772732369 -0.02940086526 0.000618 -0.5178851223 0.004711846271 -0.106316 0.2613156896 0.666908395 -0.006996 -0.02089413261 -0.02627778499 0.000616 -0.2228695042 0.1773400361 -0.019206 -0.2333049647 0.1553531974 -0.02137 -0.2410905397 -0.6759835271 -0.14278 -0.01513358857 -0.06262790849 -0.006294 -0.1244955919 0.2247307725 -0.001912 0.1248182029 -0.004633058116 -0.057166 -0.2952191235 0.2299820287 -0.024476 -0.2940275837 0.1997440596 -0.02428 0.242107219 0.6136535403 -0.012666 0.250293254 0.6188525229 -0.012738 0.241792935 0.6224900349 -0.012208 -0.3063605564 -0.5503603351 -0.107092 -0.1656504023 0.7638622996 0.00062 0.2488239457 -0.5737070829 -0.003756 -0.1020955912 0.1695551895 -0.004506 -0.2185026439 0.4127147365 -0.002692 0.206246893 -0.03751289994 -0.023388 0.2230039575 0.6148955731 -0.010112 0.3171595917 -0.5977413235 0.00062 -0.1066629321 -0.7070296732 -0.002052 -0.3936442677 -0.1518480708 -0.081876 0.2200387444 -0.4844097645 -0.007762 -0.2846595487 -0.4937820821 -0.047142 0.2582426834 -0.5799322242 -0.003524 -0.2796429968 -0.2887233883 -0.026672 0.06578319045 0.8913517497 -0.003 0.309679842 -0.5788509938 -0.0047 0.01175245993 -0.03914900351 0.00062 0.3149687766 0.1633070797 0.00062 0.2903793552 0.2828857939 0.00062 0.2945423034 0.2847150708 -0.004178 -0.08526686498 0.8221264627 -0.016306 -0.003304046762 -0.07740686416 0.000618 0.2589605064 -0.246102856 -0.288868 0.2829468149 -0.2458357462 -0.433942 0.3153511806 0.02456254654 -0.09602 0.05617084417 -0.0001496688081 -0.012292 0.3054805908 0.2196854267 0.00062 -0.1259349298 -0.8729654212 0.00062 0.3780338583 0.6156333845 -0.209064 0.9045526262 -0.02649314637 -0.067316 0.2688700899 -0.5124765319 -0.007826 0.07135608156 -0.06495171666 0.000568 0.03588956219 0.9011324548 -0.015286 0.4145580287 0.3228235886 -0.35348 0.1798869732 -0.0123480509 -0.005162 -0.1993257643 -0.8552055946 -0.064972 -0.2302310174 -0.01420743984 -0.020464 0.2652124574 -0.3188742022 -0.367704 0.3374920604 0.1477547183 -0.023854 0.3332569224 0.141240974 -0.02125 0.8648350085 -0.1650827648 -0.110642 0.3005000762 0.3333959436 0.00062 0.2864199375 0.6815842873 -0.006224 0.2364184221 -0.7141113677 -0.003572 0.244542062 -0.7104684148 -0.004442 0.2529385878 -0.164498181 -0.221042 0.2903373406 0.2911043274 0.000116 0.189433178 -0.1728616963 -0.021876 -0.03428370452 -0.1377299511 -0.003042 0.3035958648 0.2198876641 0.00062 0.1274915408 0.01162155848 -0.047438 -0.04800805441 0.06724681278 -0.02379 -0.1650067277 -0.3531047136 -0.004526 0.2339555448 -0.1639107972 -0.124576 -0.5227109427 0.2797573218 -0.205912 0.2165345092 -0.4918297848 -0.006168 0.5990508392 -0.2382337443 -0.063318 -0.02224629158 -0.09821958554 -0.004576 0.3204879826 -0.5805684606 -0.009746 0.5110014609 -0.05190951186 -0.376156 -0.171830387 -0.3329773326 -0.003512 -0.1632418759 -0.3293283509 0.00062 0.01247711878 -0.06925912627 -0.00266 0.01395218256 -0.07126927428 0.000618 0.35743727 0.2395490724 -0.083036 -0.5739569357 -0.3556847634 -0.169302 -0.1492388229 -0.8345789512 -0.014514 -0.1401033597 -0.8250578052 -0.00783 0.2568584244 0.5214402164 -0.009056 0.2522813623 0.5264606195 -0.00408 0.03674844958 -0.07721605872 -0.003318 0.04015466148 -0.05569513471 -0.003518 0.4594390577 -0.3002544454 -0.04343 -0.03460678197 0.8165611927 -0.00338 -0.03114700563 0.8261130129 -0.00338 -0.9286407923 0.1098123433 -0.300122 -0.1761340323 -0.4477905401 0.00062 -0.04590346557 0.2279809418 -0.00338 -0.2576578903 -0.1318002566 -0.018282 -0.2416217956 -0.1365342795 -0.012324 0.5692715513 0.007356680099 -0.48512 0.3372067083 -0.3709349309 -0.167696 0.2665947526 -0.2603896172 -0.377606 0.280547371 -0.2719784841 -0.4422 0.9452668958 -0.06739590871 -0.081876 -0.1903483952 -0.1020976872 -0.002042 -0.200944321 -0.09760347302 0.00062 0.0744220258 -0.06939527818 0.00062 0.2764997669 -0.3755287311 -0.192388 -0.2200209981 0.402287399 -0.004294 0.04175142909 -0.04374290559 0.00062 -0.1120620526 -0.03788199169 -0.009836 -0.1131265242 -0.6081879289 -0.002162 -0.1068711302 -0.6003986301 0.000618 -0.1100652437 -0.6157703052 -0.002076 0.4287963972 0.1387944712 -0.356604 -0.07384414215 0.1642383522 -0.011798 -0.2762780236 -0.4734704507 -0.039618 -0.2755042062 -0.5106036222 -0.04308 0.3555648448 0.02220927618 -0.366504 0.3119083249 -0.4220895052 -0.178848 0.301765379 -0.4055091909 -0.213998 0.2702249955 -0.600276278 0.00062 -0.06586700745 -0.07547331616 -0.008918 -0.03631353345 0.8346713027 -0.009718 0.3555662335 0.03202405637 -0.354472 0.04999521701 -0.03106987065 0.00062 0.009718227046 0.2424670067 -0.00338 0.04812062785 -0.0479385974 -0.00138 -0.355607674 -0.334122866 -0.054052 -0.3832107514 -0.3210471995 -0.106694 -0.1222715157 0.1014079971 -0.01938 0.03384341978 -0.04608731329 0.000592 0.3682338979 -0.08233144453 -0.523646 -0.4414471968 -0.4372922733 -0.140812 0.01380574113 0.1851530327 -0.015694 0.3543116529 -0.6079998584 -0.01358 -0.02062331333 0.02247301734 -0.01826 0.3058817803 -0.6505100905 -0.005288 0.3125079905 -0.6564705582 -0.010622 0.3717701785 -0.5689796061 -0.016756 0.3377607328 0.07677417013 -0.177606 0.3311528194 0.0722004943 -0.15994 0.04960555433 -0.02195510746 0.00062 -0.03322245221 0.8798502276 -0.03478 0.2851015228 0.4100519146 -0.000122 0.2827186807 0.4172188928 0.00062 0.03472931798 0.8673486635 -0.00899 0.2715508411 0.7643475286 -0.009148 0.2732445121 0.774697624 -0.008742 0.1678340908 0.005177579128 0.00062 0.1284676168 0.03075293631 -0.040602 -0.1352373208 -0.6974534461 -0.009046 0.1306537121 0.00279351307 -0.048814 -0.1331784965 -0.6858390795 -0.020186 0.8166134553 0.02202870711 -0.070756 0.3257799394 -0.6208953542 -0.007804 -0.1374414393 -0.8707915581 -0.010162 -0.1501385596 -0.8809505441 -0.027654 -0.2202094992 -0.08231582189 -0.015378 -0.2218365903 -0.09262179315 -0.0114 -0.2308866605 -0.08424098332 -0.016666 -0.1515155387 -0.5196909875 -0.00372 -0.1922852446 0.1218021703 -0.015888 0.1348229614 -0.005403756105 -0.037704 0.2432153341 -0.6139597248 -0.001108 -0.17996664 -0.107131125 -0.003304 -0.4316684605 0.1244973028 -0.038948 0.1288804435 0.1236526989 -0.006174 -0.2776514943 -0.142416013 -0.024742 -0.02169095629 0.2051233463 -0.009794 -0.2316109174 -0.1346238436 -0.00936 -0.06344631046 0.8654309949 -0.0815 -0.01461157711 0.864114893 -0.027016 0.04091918505 -0.02363432579 0.000616 -0.3142768621 -0.06580750805 -0.044408 0.2777693004 -0.518898241 -0.009506 -0.2142236682 -0.6692525226 -0.107928 -0.5810229063 0.07568011714 -0.206978 0.7683673448 -0.1095800079 -0.045544 0.05803384319 0.8677697418 -0.003292 -0.2988117006 0.2551043759 -0.025158 0.3285411122 0.6802670124 -0.017856 0.3176951129 0.6822304473 -0.009688 0.1015328485 0.006875717078 -0.043468 -0.1800160245 -0.8642751105 -0.041972 -0.1282659844 -0.5602676747 -0.00339 0.002611081808 -0.03534539997 -0.007408 -0.2206422046 0.206972587 -0.00393 -0.214102197 0.2005500244 -0.008866 -0.05775778763 0.1111898806 -0.019124 -0.4113723407 0.1190227786 -0.031472 -0.4093222897 0.5198722356 -0.029796 0.1129803299 -0.03108367348 -0.030542 0.03511234126 0.04038644033 -0.026952 -0.6436775621 0.06251383455 -0.187958 -0.6867519884 0.06190280429 -0.187148 -0.6633250375 0.02235651425 -0.174274 0.04062394118 -0.08156041638 -0.000938 0.04098335485 -0.08329007655 -0.00221 -0.142949489 -0.1213486393 -0.001204 -0.152037018 -0.1167462419 -0.003284 -0.2409873948 0.3457666408 -0.00734 -0.2498918949 0.3399178057 -0.012494 0.2334159268 -0.5062663109 -0.007138 0.3092542033 0.006411709588 -0.13181 0.03708462404 0.2274021248 -0.00538 0.03660004264 0.2172406199 -0.008724 -0.1308394093 -0.827198727 -0.00278 -0.1246901459 -0.8319601417 0.00062 0.2611049126 -0.5514942777 -0.004368 -0.2644127018 0.4711339362 -0.006494 0.09526290366 0.05958789302 -0.03134 -0.1592721099 -0.08578972736 -0.005598 -0.003818665761 -0.08773148597 0.00062 -0.02739180786 0.8352981635 -0.009628 -0.03860449881 -0.1440424483 -0.0029 -0.04016585235 -0.1380753606 -0.003706 0.3278173617 0.5866787048 -0.046018 -0.1268829383 -0.5407931067 0.00062 -0.2417320418 -0.4592935372 -0.028822 0.05063846674 0.8535115159 -0.002724 0.02789940662 -0.07113563083 0.00062 0.03141291738 -0.06983308188 -0.004782 0.03261290578 -0.06969419478 -0.0034 0.07934819941 -0.03632217908 -0.00938 0.3440757971 0.5908728849 -0.082082 -0.1294057843 0.2322297785 0.00062 0.1945934679 0.5848472825 -0.004516 0.2054753964 0.5857714421 -0.007332 0.2606843945 -0.6045389407 -0.000478 0.03271042184 -0.05127331978 -0.006922 0.2385211725 -0.3429305029 -0.25731 0.2581135584 -0.2784505173 -0.398204 0.02277836991 0.8223713543 0.000388 -0.1667619335 0.7655310306 7.8e-05 -0.3343005199 -0.3200281126 -0.047576 0.5782155052 0.03036851043 -0.502794 0.2853877619 0.3978447395 0.00062 0.2756306141 -0.07447901024 -0.354354 0.0425746717 -0.0381833113 0.000612 0.2890551077 0.002738175238 -0.014742 0.4556435731 -0.3171657819 -0.059972 0.4454150948 -0.3402864969 -0.080054 -0.333641621 0.577882704 -0.008122 0.321036072 -0.1885871189 -0.500696 -0.187537678 -0.07500898582 0.00062 -0.1538362856 0.7923372578 -0.005168 -0.15643226 0.7831381749 -0.000892 0.1041376092 -0.02910704225 0.000616 -0.1442426649 -0.1268294748 -0.000618 0.295775947 -0.6240051675 0.00062 0.2965736628 -0.621970671 -0.000524 0.2981489258 -0.6228131268 -0.001346 0.2960917238 -0.6477764126 0.00061 -0.2113945381 -0.09225158436 0.00062 -0.2027454952 -0.09240883526 0.00062 -0.2046668265 -0.08966620037 0.00062 0.2589594096 -0.6030345587 -0.00076 0.09999127629 0.1680287591 -0.01461 0.7001829415 -0.003942127436 -0.12407 0.2365099748 -0.706893851 -0.002228 0.3105843804 0.6951922673 -0.007722 -0.2049232845 -0.834578743 -0.073214 0.09311598757 -0.06693064872 -0.000946 0.2736329132 0.4686089959 -0.010314 0.04997340238 0.862665161 -0.003964 0.04260442489 0.8558132092 -0.005156 0.02454223165 -0.08122441959 0.00062 0.4882149134 -0.2637052867 -0.029784 -0.102137634 0.1498924095 -0.00938 0.324231834 -0.5274927016 -0.016154 -0.1981330481 -0.7121550269 -0.037652 0.05192572119 -0.07493058719 -0.000814 0.5059875349 -0.2971082926 -0.020286 0.3100856899 0.2068806554 -0.005164 0.3041509728 0.2113532179 0.000342 0.02652223219 0.8238595403 0.00062 -0.02356579289 0.8173343865 -0.00338 0.3440939459 0.6613752709 -0.026628 -0.1065422681 -0.6297487922 -0.001598 0.04116994418 -0.0542916943 0.000616 0.1774232321 -0.07807434932 -0.024742 -0.2309395891 -0.6619464453 -0.118172 -0.4453209075 0.4729392092 -0.176596 -0.4756297112 0.4567140049 -0.234754 0.3083684987 0.2528944593 -0.013822 0.186381592 -0.007861775868 -0.004894 -0.2839137536 0.5271023269 0.000298 -0.0837633144 0.8541025288 -0.088116 -0.07065391597 0.8511782641 -0.064114 0.3045244607 -0.01153791937 -0.205448 0.3082893357 -0.5861525244 -0.001982 0.2895000942 -0.3884229247 -0.208592 0.2543030227 -0.6798453956 -0.000764 0.07580509532 -0.05641908776 -0.003638 0.1413732685 0.1091946672 0.000618 0.252921792 -0.2612181088 -0.290932 0.0951563296 -0.002546894451 -0.019312 -0.5514048184 0.1483705034 -0.222334 0.09315307155 -0.05364455466 0.000618 0.3076451607 0.4050463334 -0.03352 -0.18968364 -0.7926774479 -0.057324 0.2794124232 -0.6599537741 -0.00249 0.03931327639 -0.01515969624 -0.00683 -0.03718336885 0.1287639007 -0.019314 0.03194298927 -0.07150615218 0.00062 0.02988512587 -0.07088664927 -0.00344 0.0884684679 -0.03389098957 -0.003694 -0.216277602 0.1887220463 -0.014776 0.3172871554 0.4682126632 -0.105094 0.299901165 0.413538641 -0.016706 0.09648108398 0.0832880624 -0.025892 0.1543239901 0.04218723152 0.00032 0.8563066498 -0.1966486964 -0.126768 -0.4715368918 0.1614805283 -0.048444 0.03016855047 0.8317468682 -0.001104 0.6384747675 -0.1419186326 -0.070164 0.6158008374 -0.1348066945 -0.089154 0.6318767753 -0.1170205066 -0.083668 0.1334431125 0.1047646954 -0.007046 0.06441618225 -0.07337734258 -0.003186 0.06477310585 -0.07432456789 -0.004998 -0.148383043 -0.5815297282 -0.018104 0.1827097513 -0.3247542729 0.00062 0.2086099918 -0.02040843496 -0.027934 0.2228145689 -0.2604115014 -0.14953 0.2593158035 -0.6019645966 -0.001578 0.231751549 0.6723574075 -0.003532 0.3090677342 -0.4848835168 -0.097266 0.04496648747 -0.01457165123 0.000598 0.2771384629 0.7322682404 -0.005752 0.2292840855 -0.4814382919 -0.0094 0.2408520472 -0.476432193 -0.009554 0.1219206501 -0.06748226521 -0.018712 0.04811492818 -0.02305717122 0.00062 0.04751080616 -0.02967365541 -0.000924 0.04810356935 -0.01753627591 0.00062 0.06721762466 0.9430502049 0.000468 0.06547617827 0.9352061742 -0.004242 0.09140970383 -0.07715987291 -0.00138 0.1518776891 0.005291400371 0.00062 0.1486248434 0.01582492566 0.000612 0.03197982277 -0.06006880437 -0.004064 0.3643967677 0.4401382198 -0.27789 -0.140816185 -0.8790805313 -0.012528 0.3507524747 0.6744866632 -0.029884 0.06662877117 0.04155163517 -0.02852 0.6023957555 -0.1113250557 -0.101158 0.02802464972 0.2005712131 -0.01291 0.04037124868 -0.03921893287 -0.00338 -0.4500866886 0.110616432 -0.085152 -0.02112224752 0.8273239067 -0.002674 -0.1577068431 0.1919517395 -0.006238 -0.213415555 0.1435686474 -0.018382 -0.004526764991 -0.01061645511 0.00062 0.1053024341 -0.002666867297 -0.033476 0.08764627781 -0.02818581211 -0.005068 0.05279648885 -0.07466325045 0.000618 -0.101529221 -0.6326219515 0.00062 -0.1030383458 -0.6375632782 0.000618 0.2503689698 -0.5935762556 -0.002356 0.2532696958 -0.5907527289 -0.0029 0.4405248182 0.3306353814 -0.40119 0.1383335384 0.1203689532 0.00043 -0.1689214987 0.04306505875 -0.01587 0.2706150266 -0.54243538 -0.004112 -0.1978380954 -0.5594403448 -0.03367 -0.186386268 -0.8449762326 -0.03938 -0.352084602 -0.1492735542 -0.057698 0.5613710226 0.3380639445 -0.584808 -0.2402665274 -0.00280300831 -0.021644 0.04152635543 -0.04111994287 0.00062 -0.3437809851 0.3176745548 -0.025486 0.3058707453 -0.6652450342 -0.008772 0.2027536322 -0.1229509749 -0.023824 0.2400847093 -0.2697315999 -0.269428 0.05755854097 0.8769802892 -0.00442 0.6670168411 -0.152592518 -0.05731 0.2682038688 -0.5964469888 0.00062 0.0367498297 -0.04222727189 -0.003846 0.07579001378 -0.0367757233 -0.003678 0.07722501422 -0.03456475955 0.00059 -0.1895589428 0.03706727579 -0.018512 -0.2619249463 -0.2747066574 -0.02529 -0.1440833753 -0.6221993704 -0.025352 0.06654353493 -0.06886854905 0.000616 0.3207612423 -0.4053145588 -0.137734 0.3226340113 0.01874026756 -0.174586 0.02810632177 -0.05598392532 -0.002912 -0.1467003438 -0.5129182002 0.000618 0.5818325124 -0.04547975512 -0.23527 -0.09652456707 -0.1293407123 0.00062 0.1855853363 -0.2586773433 0.00028 -0.005883544304 -0.00873948554 0.00062 0.0848447216 0.06477879811 -0.029528 0.06989823211 0.9467958374 0.00057 0.4632507783 -0.527096565 -0.104598 0.5077774593 -0.3221452742 -0.026364 0.3080435478 0.0288208147 -0.031246 0.3015166385 0.03210979422 -0.008612 0.2245468262 0.6782671904 0.00062 -0.203371217 -0.07845398292 -0.006954 -0.2123824367 -0.08488554639 -0.011442 0.8301268445 -0.2197819956 -0.097786 -0.2689524151 0.2294435555 -0.017526 -0.2810996544 0.2355113367 -0.022642 -0.09853186425 -0.1272583172 0.00062 0.7868864978 -0.1466076673 -0.05848 -0.2142506193 0.3627271954 -0.00284 0.02203408904 0.8199020459 0.00062 -0.3838875605 0.5760738079 -0.013532 0.025536231 -0.06467638724 -0.00062 -0.9571774338 0.06153780101 -0.217624 -0.2434740056 0.4335663939 -0.00679 0.476530925 -0.310342786 -0.028472 0.3037476956 0.7385267878 -0.008394 -0.2595065709 -0.1773011202 -0.012244 -0.1996790605 -0.7335139906 -0.032958 0.3375999122 0.0876443909 -0.172108 0.09374012664 -0.05277835761 0.00062 -0.1915005353 -0.6887665272 -0.109852 0.3380197384 0.3635745685 -0.134988 -0.4838208927 0.144656978 -0.137664 0.3276456083 -0.6514123019 -0.013314 0.09260678638 -0.07911230684 -0.00138 -0.1603150644 0.7888417137 -0.003624 -0.3127491068 0.5796785102 0.000616 0.09079560143 -0.07929570514 -0.00138 0.1493859855 0.04554550704 0.00022 -0.0809475741 -0.1420833644 -0.002932 -0.02984579286 -0.05409617525 -0.009266 -0.2863551138 -0.1818493535 -0.026148 0.02216632246 0.843410111 -0.006418 0.2911826814 -0.6191661059 -0.000434 -0.267671909 -0.2020969175 -0.02086 -0.2922862748 -0.2201777693 -0.03158 0.08813194141 -0.07245941987 -0.001278 0.0380905417 -0.04487148608 -0.00338 0.2723774893 -0.6025267737 0.00062 0.6454768869 -0.2360971106 -0.073304 0.05574957137 0.02430491211 -0.019422 0.3459532784 0.1476323196 -0.073406 0.02476638451 -0.08617770131 -0.000296 0.4682441879 -0.3593250837 -0.070772 0.582587607 -0.3066286467 -0.044662 0.4977461004 -0.3103760974 -0.025082 0.3307076074 -0.5957369882 -0.01269 -0.2172294515 0.3524802031 -0.002708 -0.2513980596 0.4360215733 -0.008212 0.2802366548 0.7589948855 -0.008962 -0.02992725647 0.01645701598 -0.021114 0.04480605861 0.9261731277 -0.019546 0.2634732173 -0.004667537868 -0.008804 0.2987115177 -0.6259334595 -0.00138 0.3015163185 -0.627710613 -0.000976 0.03184897597 -0.07686929434 -0.00083 0.02372658213 -0.006512551459 0.000618 0.09584589354 -0.04431046804 -0.000922 -0.1413810939 -0.7467794738 -0.009216 -0.1168312425 0.05692243093 -0.01561 0.4448915351 0.134304281 -0.460644 0.3465475143 0.08049923305 -0.222938 0.01850981119 -0.02546532708 -0.002098 -0.2706922807 -0.1827612373 -0.020836 0.1013493369 -0.009212133344 -0.02012 0.3127030805 0.2157548834 -0.007032 0.2973679838 -0.2888127019 -0.375302 -0.1361717502 -0.7553815219 -0.007132 0.2721107393 -0.6007338438 -0.00039 0.2275060131 -0.49012304 -0.008862 0.4506690818 0.1809036396 -0.408618 0.1853590541 -0.1958998175 -0.009072 -0.159819949 -0.3874550907 -0.002856 -0.2209034649 0.02649095341 -0.021026 -0.01765860301 -0.02906963667 0.00062 -0.01622645105 -0.02919878792 -0.000422 -0.3419906797 -0.06700513903 -0.053992 0.3570509193 0.08314458858 -0.249562 0.04466252686 0.2329482951 -0.005302 -0.08245867723 0.03807288804 -0.015166 0.1058106386 0.1590444691 -0.011082 0.1838042925 -0.06485631316 -0.094986 0.3102320352 -0.09813463778 -0.497934 -0.1683172266 -0.05810379415 -0.008196 0.2253487677 0.6535232732 -0.004738 -0.3998324735 -0.431029851 -0.112898 0.7618146439 0.08353964307 -0.235308 0.06090959937 -0.05875218301 0.00062 0.1691260366 -0.06518879965 -0.04432 -0.3202987186 0.4355643958 -0.017238 0.005528849684 -0.05553705348 -0.00344 0.2289870874 -0.4725736453 -0.008868 0.4436988378 0.1554713789 -0.352264 0.2273586409 0.5418776021 -0.003614 -0.1578633327 -0.6691396404 -0.035642 -0.3272781504 0.1631921958 -0.025194 0.1083179799 -0.07990230167 -0.006282 -0.112968104 -0.1130120962 0.00062 0.2485194848 0.7624335733 0.000578 0.2843268731 0.3670374076 0.00062 0.04773485752 -0.02102958272 -0.000882 -0.8303241215 0.002946012497 -0.162182 -0.1859530901 -0.2923319133 -0.007736 0.0001335604387 -0.03789519366 0.00062 0.4712638517 -0.333628065 -0.063876 0.0359590786 -0.04625428292 -0.004336 0.02702738276 -0.08104699156 -0.000376 0.04314107262 -0.08455136524 0.000138 1 2 3 2 3 1 4 5 6 4 6 5 7 8 9 7 9 8 10 11 12 11 12 10 13 14 15 14 15 13 16 17 16 18 17 18 19 20 19 21 20 21 22 23 24 23 24 22 25 26 25 27 26 27 28 29 30 29 30 28 31 32 31 33 33 32 34 35 36 34 36 35 37 38 39 37 39 38 40 41 42 41 42 40 43 44 45 44 45 43 46 47 46 48 48 47 49 50 51 49 51 50 52 53 52 54 53 54 55 56 57 56 57 55 58 59 60 58 60 59 61 62 61 63 62 63 64 65 66 64 66 65 67 68 69 68 69 67 70 71 72 70 72 71 73 74 73 75 74 75 76 77 78 76 78 77 79 80 81 80 81 79 82 83 82 84 83 84 85 86 87 86 87 85 88 89 88 90 90 89 91 92 93 91 93 92 94 95 96 94 96 95 97 98 99 98 99 97 100 101 102 100 102 101 103 104 105 103 105 104 106 107 106 108 107 108 109 110 109 111 110 111 112 113 114 113 114 112 115 116 117 116 117 115 118 119 118 120 120 119 121 122 121 123 122 123 124 125 126 124 126 125 127 128 129 128 129 127 130 131 132 131 132 130 133 134 135 133 135 134 136 137 138 136 138 137 139 140 141 140 141 139 142 143 144 143 144 142 145 146 147 146 147 145 148 149 150 149 150 148 151 152 151 153 152 153 154 155 156 154 156 155 157 158 159 157 159 158 160 161 160 162 161 162 163 164 163 165 164 165 166 167 166 168 167 168 169 170 171 170 171 169 172 173 174 172 174 173 175 176 175 177 176 177 178 179 180 178 180 179 181 182 181 183 183 182 184 185 186 185 186 184 187 188 189 188 189 187 190 164 191 164 191 190 192 193 192 194 194 193 195 196 197 196 197 195 198 199 200 199 200 198 201 202 203 202 203 201 204 205 204 206 205 206 207 208 209 207 209 208 210 211 212 211 212 210 213 214 213 215 214 215 216 217 216 218 217 218 219 220 221 219 221 220 222 223 224 222 224 223 225 226 225 227 226 227 228 229 230 228 230 229 231 158 231 157 232 233 232 234 233 234 235 236 237 236 237 235 238 239 240 238 240 239 241 242 243 241 243 242 244 245 244 246 246 245 247 248 249 247 249 248 250 251 252 251 252 250 253 254 255 253 255 254 256 257 256 258 257 258 259 260 261 260 261 259 262 263 264 262 264 263 265 266 265 267 267 266 268 269 268 270 269 270 271 22 271 23 272 273 272 274 273 274 275 276 275 277 277 276 278 279 280 279 280 278 281 282 283 282 283 281 284 285 286 285 286 284 159 287 288 287 288 159 289 290 291 290 291 289 292 293 294 293 294 292 46 295 296 295 296 46 297 298 299 298 299 297 300 301 302 301 302 300 303 304 305 304 305 303 257 306 258 306 307 308 307 309 309 308 310 311 310 312 312 311 313 314 315 314 315 313 316 317 316 318 317 318 319 320 321 320 321 319 322 323 322 324 323 324 325 326 325 327 327 326 328 329 330 329 330 328 331 332 333 331 333 332 334 335 336 334 336 335 337 338 339 338 339 337 340 341 340 342 341 342 343 242 344 242 344 343 345 346 345 347 346 347 348 349 350 348 350 349 351 352 353 351 353 352 314 354 355 314 355 354 356 357 356 358 358 357 359 360 359 361 360 361 362 363 364 363 364 362 365 366 365 367 367 366 368 369 370 368 370 369 371 372 371 373 372 373 374 375 376 375 376 374 377 378 379 378 379 377 380 381 380 382 381 382 383 384 385 383 385 384 386 131 386 387 131 387 388 389 388 390 389 390 391 392 393 391 393 392 394 395 396 394 396 395 397 398 397 399 398 399 400 401 402 401 402 400 403 404 405 404 405 403 406 407 408 406 408 407 206 409 205 409 410 227 411 410 411 227 412 413 414 412 414 413 415 416 417 416 417 415 418 419 418 420 420 419 421 422 423 421 423 422 424 425 424 426 425 426 427 428 429 427 429 428 430 431 432 431 432 430 433 408 433 434 408 434 435 436 437 435 437 436 438 439 440 438 440 439 441 442 443 441 443 442 444 445 446 444 446 445 447 448 449 448 449 447 450 451 450 452 452 451 453 145 454 145 454 453 455 456 457 456 457 455 458 459 458 460 460 459 461 462 461 463 463 462 464 465 466 464 466 465 159 467 288 467 468 469 468 470 470 469 471 472 473 471 473 472 474 475 364 474 364 475 476 477 478 476 478 477 479 425 480 425 480 479 481 482 483 482 483 481 54 484 52 484 485 486 485 487 487 486 488 489 490 488 490 489 491 492 491 493 492 493 494 495 494 328 328 495 496 497 496 410 497 410 498 499 500 498 500 499 501 502 503 502 503 501 504 505 504 506 505 506 507 508 509 507 509 508 510 511 512 510 512 511 513 514 515 514 515 513 516 189 516 187 517 518 517 519 519 518 520 521 522 520 522 521 523 524 523 525 525 524 526 527 528 527 528 526 529 530 292 529 292 530 531 532 531 533 532 533 534 535 536 534 536 535 537 538 539 538 539 537 540 541 540 508 508 541 542 543 542 532 543 532 544 545 546 544 546 545 547 548 547 549 548 549 550 551 552 551 552 550 553 59 554 553 554 59 555 556 555 513 556 513 557 558 557 559 558 559 140 560 139 560 396 561 562 396 562 561 563 564 563 565 565 564 134 566 567 134 567 566 568 569 568 570 570 569 571 572 571 573 572 573 574 575 574 576 575 576 577 578 579 577 579 578 580 581 321 580 321 581 582 583 584 582 584 583 585 586 585 587 587 586 588 589 590 589 590 588 591 592 593 591 593 592 594 595 596 595 596 594 597 598 597 599 598 599 600 601 602 600 602 601 603 604 603 605 605 604 606 251 607 606 607 251 608 609 610 608 610 609 611 612 613 611 613 612 614 489 614 488 615 616 617 615 617 616 618 619 620 619 620 618 621 80 621 622 80 622 623 624 623 625 624 625 626 383 626 627 383 627 628 629 630 628 630 629 631 632 631 633 632 633 634 635 634 636 636 635 637 638 639 638 639 637 640 641 640 642 641 642 643 644 643 645 645 644 646 647 648 647 648 646 649 650 526 650 526 649 651 652 653 652 653 651 654 655 656 654 656 655 657 658 659 657 659 658 660 661 662 660 662 661 663 664 665 664 665 663 666 667 668 667 668 666 669 670 671 669 671 670 14 672 13 672 673 674 675 673 675 674 676 677 678 677 678 676 679 680 272 680 272 679 91 681 91 682 681 682 683 684 683 685 685 684 686 687 688 686 688 687 689 690 476 689 476 690 691 692 693 692 693 691 694 695 694 696 696 695 697 698 697 699 698 699 700 260 701 260 701 700 702 703 704 703 704 702 705 706 707 706 707 705 58 708 60 708 405 709 405 710 709 710 711 712 713 712 713 711 714 715 714 716 715 716 717 718 719 717 719 718 720 721 722 720 722 721 723 724 725 723 725 724 726 727 726 728 727 728 183 729 183 417 417 729 730 731 730 732 731 732 733 734 427 733 427 734 735 47 735 736 736 47 276 737 275 737 738 739 738 740 740 739 741 742 743 741 743 742 744 745 744 746 746 745 747 748 363 748 363 747 367 749 365 749 750 325 751 325 751 750 752 332 753 752 753 332 730 754 730 755 754 755 756 757 301 757 301 756 758 759 760 758 760 759 761 762 763 762 763 761 764 765 764 766 765 766 767 768 767 570 570 768 769 770 417 770 417 769 771 772 771 773 772 773 774 556 774 555 775 776 777 776 777 775 778 779 582 778 582 779 780 781 21 780 21 781 782 464 783 782 783 464 784 785 786 785 786 784 787 788 789 787 789 788 790 791 792 790 792 791 50 793 50 794 794 793 795 590 795 507 590 507 796 797 798 796 798 797 799 800 799 801 800 801 802 803 804 802 804 803 805 806 807 806 807 805 6 808 808 4 809 810 809 811 811 810 812 813 814 813 814 812 576 815 816 815 816 576 817 818 817 819 818 819 820 821 822 821 822 820 823 824 825 824 825 823 826 827 828 827 828 826 829 830 829 831 831 830 832 833 834 833 834 832 745 835 836 745 836 835 837 838 839 838 839 837 840 841 842 840 842 841 617 843 844 843 844 617 190 845 163 845 163 190 846 847 846 848 847 848 849 337 850 849 850 337 851 56 851 57 852 853 852 854 853 854 855 856 711 855 711 856 857 858 859 857 859 858 860 348 861 860 861 348 862 863 864 863 864 862 865 866 865 867 866 867 826 868 826 869 869 868 870 871 870 872 872 871 97 343 98 343 873 874 873 246 246 874 875 876 875 877 877 876 878 879 880 878 880 879 881 811 882 811 882 881 883 884 883 885 885 884 886 887 888 887 888 886 504 448 448 506 889 890 889 891 891 890 391 892 893 391 893 892 894 895 894 896 895 896 72 897 72 898 898 897 899 900 899 901 901 900 902 903 902 904 904 903 905 906 907 906 907 905 908 909 910 908 910 909 911 912 913 911 913 912 914 383 914 626 915 916 915 917 916 917 396 918 396 919 919 918 593 920 920 592 921 922 615 921 615 922 923 924 925 924 925 923 926 927 928 927 928 926 929 930 931 930 931 929 920 932 933 920 933 932 934 935 936 934 936 935 937 780 938 937 938 780 813 939 812 939 615 843 615 940 843 940 750 941 751 941 942 943 942 482 943 482 944 945 946 944 946 945 947 948 947 949 949 948 950 951 952 950 952 951 111 953 954 111 954 953 955 956 957 956 957 955 958 959 958 960 960 959 961 962 961 963 962 963 964 965 964 966 965 966 967 968 969 968 969 967 970 479 970 425 971 972 971 973 972 973 974 975 542 975 542 974 976 977 978 976 978 977 592 979 591 979 980 981 982 980 982 981 983 984 985 984 985 983 986 987 264 987 264 986 988 989 988 990 989 990 991 992 991 993 993 992 994 767 994 995 767 995 88 996 997 88 997 996 998 999 1000 999 1000 998 1001 924 1002 924 1002 1001 1003 1004 1005 1004 1005 1003 1006 1007 1006 252 252 1007 473 1008 473 1009 1008 1009 179 1010 178 1010 1011 1012 1011 741 1012 741 1013 1014 1013 1015 1014 1015 1016 1017 1016 1018 1018 1017 1019 1020 1021 1019 1021 1020 1022 530 1022 529 1023 1024 1025 1024 1025 1023 1026 1027 1026 1028 1027 1028 1029 1030 1029 1031 1031 1030 1032 304 1033 1032 1033 304 1034 1035 1034 1036 1035 1036 1037 1038 1039 1038 1039 1037 1040 1041 1040 1042 1041 1042 171 252 171 1007 1043 1044 1043 684 1044 684 1045 1046 1047 1046 1047 1045 1048 513 556 1048 1049 1050 1051 1049 1051 1050 1052 1053 1054 1053 1054 1052 1055 1056 1055 953 1056 953 106 1057 1058 106 1058 1057 1059 1060 1061 1059 1061 1060 1062 1063 1064 1062 1064 1063 1065 1066 1067 1066 1067 1065 1068 1069 1068 1070 1069 1070 1071 1072 1073 1071 1073 1072 1074 1075 1074 1076 1075 1076 1077 1078 1079 1078 1079 1077 1080 282 283 1080 1081 945 1081 1082 1082 945 1083 1084 1085 1084 1085 1083 1086 669 1086 671 1087 1088 245 1087 245 1088 1089 1090 1091 1090 1091 1089 248 682 249 682 1092 1093 1094 1092 1094 1093 1095 1096 1097 1095 1097 1096 1098 973 972 1098 1099 884 1100 884 1100 1099 1101 767 1101 994 1102 1103 1104 1102 1104 1103 1105 1106 1107 1105 1107 1106 1108 1109 1110 1109 1110 1108 1111 1112 1111 1113 1112 1113 1114 1115 1116 1114 1116 1115 1117 1118 1119 1118 1119 1117 1120 1121 1120 1122 1121 1122 1123 1048 1123 556 1124 1125 1126 1125 1126 1124 1127 1128 1129 1127 1129 1128 1130 1131 1132 1130 1132 1131 1133 1134 1135 1133 1135 1134 1136 1137 982 1136 982 1137 1138 1043 1138 1139 1139 1043 1140 1141 1142 1140 1142 1141 1143 1144 1143 1145 1145 1144 1146 1147 1148 1147 1148 1146 1149 1150 1151 1150 1151 1149 1152 1153 1152 1141 1153 1141 1154 905 1154 906 1155 1156 1157 1155 1157 1156 1158 1159 1158 1160 1159 1160 1161 1162 1163 1161 1163 1162 1164 1165 1166 1165 1166 1164 784 489 786 489 1167 1168 1169 1168 1169 1167 1170 1171 1170 1172 1172 1171 1173 580 1173 319 319 580 1174 1175 1174 213 1175 213 1176 1177 1178 1177 1178 1176 1179 1180 1181 1180 1181 1179 1182 1183 1182 1184 1183 1184 1185 1186 1187 1186 1187 1185 1188 1189 1188 1190 1190 1189 1097 1191 1097 1192 1192 1191 978 1193 978 352 352 1193 1194 952 1194 951 1195 598 1195 597 1196 1197 1198 1196 1198 1197 1199 1200 1199 1201 1200 1201 1202 1203 1202 401 1203 401 1204 601 1205 1204 1205 601 1206 1207 1208 1207 1208 1206 1209 1210 1209 1211 1211 1210 1212 1213 344 1213 344 1212 1214 338 1215 1214 1215 338 1216 1217 1216 1218 1218 1217 1219 1059 1219 1061 1220 1221 1222 1221 1222 1220 1223 1224 1223 756 1224 756 1225 1226 1227 1226 1227 1225 1228 289 1228 290 1229 1230 5 1229 5 1230 1231 1232 1233 1231 1233 1232 1234 912 913 1234 1235 1177 1235 1236 1177 1236 1237 776 1237 1238 1238 776 1239 1240 1006 1239 1006 1240 1241 1242 1243 1241 1243 1242 1244 1245 1246 1245 1246 1244 1247 1248 1247 1249 1248 1249 1250 1251 1252 1251 1252 1250 888 1253 888 1254 1254 1253 919 561 1255 1256 1257 1255 1257 1256 1258 1259 1260 1258 1260 1259 333 1261 1262 1261 1262 333 1263 1264 1265 1264 1265 1263 1266 1137 1267 1266 1267 1137 1268 1269 1268 1270 1269 1270 1271 1272 1273 1271 1273 1272 1274 883 1275 883 1275 1274 1276 1277 72 1277 72 1276 1278 1279 1278 1280 1280 1279 1065 1281 1066 1281 1282 1283 1284 1282 1284 1283 1285 1286 1285 1287 1286 1287 1288 1289 843 1289 843 1288 777 1290 776 1290 1291 165 1291 1292 1292 165 1293 1294 864 1293 864 1294 1295 1087 1296 1295 1296 1087 631 1297 1297 632 1298 1299 1298 1300 1300 1299 1301 533 1302 1301 1302 533 104 1303 1304 1303 1304 104 1305 1306 450 1305 450 1306 1307 1249 1247 1307 1308 1309 1308 1310 1309 1310 1311 1312 1311 1313 1313 1312 955 578 579 955 1314 1315 1316 1315 1316 1314 1317 1318 1319 1317 1319 1318 1320 1321 1322 1320 1322 1321 1323 1324 1323 1325 1324 1325 64 1326 64 1327 1326 1327 1328 1329 1330 1328 1330 1329 1331 1332 1333 1331 1333 1332 1334 1335 1336 1335 1336 1334 1337 1338 224 1337 224 1338 1339 493 1340 493 1340 1339 402 1341 402 3 3 1341 1342 1343 1344 1342 1344 1343 1345 1346 1345 1347 1346 1347 1348 775 111 1348 111 775 1349 651 1349 652 1350 1351 1352 1351 1352 1350 1324 1353 1354 1324 1354 1353 1355 1356 1355 1357 1356 1357 909 1358 908 1358 1359 1360 1361 1360 1361 1359 1362 1363 1362 1364 1363 1364 1365 1366 1274 1366 1274 1365 454 1367 454 368 368 1367 1368 1369 1370 1369 1370 1368 1371 1372 1373 1371 1373 1372 1374 1150 1374 1375 1375 1150 507 1376 1377 507 1377 1376 1378 1379 584 1379 584 1378 1380 1381 1380 1133 1381 1133 385 1382 384 1382 1292 1383 1291 1383 297 1384 298 1384 1385 1386 1387 1386 1387 1385 595 1388 596 1388 1111 1389 594 1111 594 1389 66 1390 66 1391 1391 1390 1392 1393 1392 1394 1393 1394 1395 1396 1397 1396 1397 1395 814 1398 814 1399 1398 1399 1190 1400 1188 1400 1401 399 1402 399 1402 1401 1403 1327 1404 1403 1404 1327 1405 1406 1407 1405 1407 1406 1408 1409 1408 1257 1257 1409 1410 1411 1410 1412 1411 1412 1413 1414 1415 1414 1415 1413 1416 1417 1416 347 347 1417 873 528 528 246 1418 1419 1420 1418 1420 1419 1421 1422 1423 1422 1423 1421 1424 1425 1424 1426 1425 1426 1427 1428 1429 1428 1429 1427 1430 1431 1432 1431 1432 1430 1433 1434 1104 1434 1104 1433 1435 1436 1437 1435 1437 1436 1438 1439 1440 1439 1440 1438 1441 797 1441 796 1442 1443 1444 1443 1444 1442 1445 1078 1446 1445 1446 1078 308 1447 309 1447 620 848 619 848 847 619 1448 1245 1449 1245 1449 1448 1450 653 1451 1450 1451 653 587 1452 587 1453 1453 1452 647 1454 1455 1454 1455 647 1456 1457 1458 1456 1458 1457 320 1459 1460 320 1460 1459 1461 1462 1461 1463 1463 1462 1464 1465 1466 1464 1466 1465 1467 1468 1467 1469 1469 1468 1470 1471 1472 1470 1472 1471 1473 1474 1475 1473 1475 1474 1476 1477 1476 1478 1478 1477 104 1479 1480 104 1480 1479 1481 1028 1026 1481 1482 693 1482 691 1483 1484 1483 1260 1260 1484 1485 641 1486 641 1486 1485 1487 717 1488 717 1488 1487 1489 1490 1387 1490 1387 1489 1491 1492 1491 1493 1493 1492 1494 1495 1494 1496 1495 1496 1419 1497 1498 1419 1498 1497 1499 1500 1501 1500 1501 1499 1502 1503 1502 1504 1504 1503 1505 1506 1507 1505 1507 1506 1508 1422 1509 1508 1509 1422 49 1510 49 1511 1511 1510 1512 1513 1514 1512 1514 1513 1515 1516 1517 1516 1517 1515 1518 1519 1518 1520 1520 1519 1521 1522 1523 1521 1523 1522 1524 1525 947 1524 947 1525 1526 1527 1528 1526 1528 1527 240 1529 1530 1529 1530 240 1531 1532 531 1531 531 1532 1533 1534 1535 1533 1535 1534 1536 1537 1538 1537 1538 1536 1539 1270 1268 1539 1049 1540 1541 1540 1541 1049 126 790 790 125 1542 1543 1542 1544 1543 1544 1545 1546 1547 1545 1547 1546 1548 459 1549 459 1549 1548 388 1550 388 1551 1551 1550 19 781 1552 1553 1552 1554 1553 1554 853 1555 1555 854 1556 156 1556 155 1557 1558 1557 1559 1559 1558 1560 1561 1562 1561 1562 1560 842 1563 840 1563 1564 1565 1566 1564 1566 1565 1567 1568 1569 1568 1569 1567 1570 1571 1572 1570 1572 1571 1573 356 1574 356 1574 1573 1575 1232 1576 1232 1576 1575 90 1577 88 1577 1578 1579 1578 80 80 1579 1580 1581 1580 1189 1581 1189 1582 1583 1584 1583 1584 1582 1585 1586 1587 1585 1587 1586 1588 1589 1588 1590 1590 1589 1591 1592 1591 416 1592 416 1593 1017 1594 1593 1594 1017 1595 1596 1597 1595 1597 1596 1598 1599 1600 1598 1600 1599 1601 559 1601 102 102 559 1602 1603 1604 1602 1604 1603 1579 622 1605 1606 1607 1606 1607 1605 933 1608 1609 1608 1609 933 1610 357 356 1610 116 1501 115 1501 1580 1611 1580 1612 1612 1611 559 1613 557 1613 1614 1615 1165 1615 1165 1614 1616 1617 1618 1617 1618 1616 1619 1620 1621 1620 1621 1619 1622 1623 1624 1623 1624 1622 1594 1625 1594 1626 1626 1625 1627 1628 1629 1627 1629 1628 1630 1067 1630 1065 1130 1631 1632 1130 1632 1631 1633 881 1633 811 1634 1635 1634 733 733 1635 1636 973 971 1636 1637 654 1637 656 1638 1639 1638 1640 1640 1639 13 752 15 752 1641 1642 1643 1642 1643 1641 1644 1645 1644 1646 1646 1645 1647 1366 1648 1366 1648 1647 1649 1650 1649 1651 1651 1650 1652 1653 1654 1652 1654 1653 1655 697 1655 699 1450 1656 1451 1656 1657 1658 1657 248 1658 248 1659 1660 1661 1660 1661 1659 1662 874 873 1662 1663 922 1664 1663 1664 922 1665 35 1666 35 1666 1665 1667 1668 1669 1668 1669 1667 385 627 1670 1671 1154 1670 1154 1671 1672 1673 1674 1672 1674 1673 820 1675 1676 820 1676 1675 1677 155 154 1677 1678 1679 1680 1679 1680 1678 1222 1681 1222 1682 1681 1682 1683 1684 436 1683 436 1684 1685 1686 1687 1686 1687 1685 1688 1689 1690 1688 1690 1689 1691 1692 1691 1693 1693 1692 1694 1151 1120 1151 1120 1694 708 1499 76 1499 76 708 1695 1696 1697 1695 1697 1696 461 1183 1698 461 1698 1183 1699 1700 1701 1700 1701 1699 1687 1702 1687 1703 1703 1702 1704 1705 1704 326 326 1705 1706 1707 1363 1707 1363 1706 192 347 192 930 347 930 1708 1709 1708 1710 1709 1710 1711 1712 1711 1713 1713 1712 1714 661 1715 661 1715 1714 1716 1717 1718 1717 1718 1716 191 1719 191 1470 1719 1470 1720 1721 1720 1722 1722 1721 1723 1724 1723 1725 1724 1725 224 1726 1726 222 1727 1728 1727 1729 1729 1728 1730 1731 1732 1731 1732 1730 1034 407 407 1036 1733 1734 1735 1734 1735 1733 1736 1737 1738 1737 1738 1736 928 1030 927 1030 1739 1740 1015 1739 1015 1740 1741 1742 1741 1474 1742 1474 87 1743 1743 86 1744 456 1745 456 1745 1744 659 1746 1747 659 1747 1746 1630 1748 1748 1065 1749 1750 1749 1751 1751 1750 1752 1753 1752 1754 1753 1754 1755 1756 1755 1757 1757 1756 1758 1759 1572 1759 1572 1758 997 89 1760 1761 1760 1762 1762 1761 1763 607 1763 251 1764 1765 942 1765 942 1764 1405 1766 1767 1405 1767 1766 1768 1769 1768 1770 1769 1770 1771 502 1700 1771 1700 502 1772 1773 1774 1772 1774 1773 536 1103 534 1103 1775 1053 1775 1776 1053 1776 1019 1777 1021 1777 1778 236 1778 1779 1779 236 1780 1781 1782 1780 1782 1781 1783 1784 660 1784 660 1783 1785 1485 1785 641 1786 1787 1788 1786 1788 1787 1587 1789 1587 1790 1789 1790 1791 1361 1792 1361 1792 1791 1555 1793 1794 1793 1794 1555 1334 1795 1796 1334 1796 1795 727 1238 727 1797 1238 1797 40 1798 662 40 662 1798 1799 1800 1801 1799 1801 1800 1737 1802 1737 1803 1802 1803 487 1804 1805 1804 1805 487 901 1806 901 1807 1806 1807 1808 1809 1810 1808 1810 1809 1811 1164 1166 1811 1210 1812 1210 1813 1812 1813 1814 1815 1816 1814 1816 1815 1817 1818 1819 1818 1819 1817 1820 1821 1822 1820 1822 1821 1823 1824 1825 1823 1825 1824 1062 1826 1827 1062 1827 1826 1828 1829 1828 1830 1830 1829 1831 1832 1831 1833 1833 1832 1403 397 1834 397 1834 1403 917 406 1835 917 1835 406 1836 1837 1836 1832 1837 1832 1056 1838 1055 1838 1839 1840 1841 1839 1841 1840 562 1842 1843 1842 1843 562 1844 1845 1844 1846 1845 1846 1315 1847 1316 1847 1848 1849 1850 1848 1850 1849 608 1851 1852 608 1852 1851 1853 1854 1855 1854 1855 1853 1856 9 1856 1513 9 1513 1857 1858 1857 1859 1858 1859 1860 1861 1862 1861 1862 1860 1863 1864 1865 1863 1865 1864 1866 1313 1866 1867 1867 1313 1868 1869 1868 1870 1869 1870 1369 1871 1872 1871 1872 1369 1873 1594 1874 1594 1874 1873 1875 1876 1875 1877 1877 1876 1878 1879 1880 1879 1880 1878 1881 1537 1882 1881 1882 1537 1883 1884 1883 1439 1884 1439 342 1885 342 1886 1886 1885 1887 1888 1887 781 1888 781 1889 1882 1432 1882 1432 1889 1890 1891 1892 1890 1892 1891 1893 1894 1893 1063 1894 1063 1895 1896 1897 1896 1897 1895 1898 1878 1898 1899 1878 1899 707 1900 705 1900 1901 1902 1903 1902 1903 1901 1322 315 1322 313 439 1904 1905 1904 1905 439 1906 1108 1110 1906 232 835 1907 835 1907 232 1908 1909 1638 1908 1638 1909 1910 1911 1912 1910 1912 1911 1102 1913 1914 1913 1914 1102 1915 1916 1915 1917 1917 1916 1918 1919 1920 1919 1920 1918 727 1921 1238 1921 1922 1923 1924 1922 1924 1923 1925 899 1925 1801 1801 899 1926 207 1927 207 1927 1926 1189 1611 1928 1929 1928 1930 1930 1929 1931 1884 1931 667 667 1884 103 1479 1932 223 222 1932 121 1933 1934 121 1934 1933 1935 1194 1935 951 1936 1532 531 1936 1215 1400 1215 1937 1937 1400 1938 1939 638 1938 638 1939 1940 1390 66 1940 1002 1941 923 1002 923 1941 1942 1943 1944 1942 1944 1943 1945 1946 1945 1947 1947 1946 949 1948 947 1948 1949 1950 1951 1950 1951 1949 4 1952 808 1952 1228 1252 1228 1250 1953 1954 1955 1954 1955 1953 1956 1957 1956 1696 1696 1957 1956 1958 1958 1957 1 1959 1960 1959 1960 1 1110 356 356 1109 1961 1962 1961 1963 1963 1962 1964 1965 1414 1965 1414 1964 779 1966 1967 1966 1967 779 1968 1969 1970 1968 1970 1969 1723 1971 1972 1971 1972 1723 1502 1785 1502 927 927 1785 1973 1974 1975 1974 1975 1973 1976 1977 1978 1977 1978 1976 1979 1852 1980 1852 1980 1979 1981 1982 1981 1874 1982 1874 1983 1984 1983 787 787 1984 1985 1986 1987 1985 1987 1986 760 1914 758 1914 1988 1989 1988 1990 1990 1989 1991 1992 1991 1993 1992 1993 1994 1367 454 1994 532 1302 985 1995 490 1995 490 985 1996 1997 1998 1997 1998 1996 1999 2000 1999 2001 2001 2000 2002 172 2003 2002 2003 172 2004 2005 16 2004 16 2005 1339 1023 2006 1023 2006 1339 2007 950 2007 1974 1974 950 2008 2009 2008 1622 1622 2009 2010 2011 1970 2010 1970 2011 2012 2013 1827 2012 1827 2013 1219 1815 1061 1815 198 553 198 274 274 553 2014 1688 2014 1690 2015 2016 2015 2017 2017 2016 2018 2019 92 2018 92 2019 166 1228 166 290 2020 1806 901 2020 2021 2022 2021 1282 1282 2022 2023 2024 2023 2025 2025 2024 2026 2027 2028 2027 2028 2026 2029 845 2029 1489 1489 845 393 2030 2031 2030 2031 393 147 2032 2033 2032 2033 147 1680 2034 1678 2034 2035 2036 2035 2037 2036 2037 929 2038 931 2038 284 2039 2040 2039 2040 284 2041 2042 2041 2043 2043 2042 2044 1575 2044 373 1575 373 2045 2046 2047 2045 2047 2046 605 570 603 570 291 2048 289 2048 2049 859 2049 858 1602 1840 1602 2050 2050 1840 558 100 2051 100 2051 558 2052 373 2044 2052 2053 2054 2053 1010 2054 1010 2055 1294 2056 1294 2056 2055 2057 2058 2057 2059 2058 2059 2060 2061 2062 2060 2062 2061 2063 2064 2063 2065 2064 2065 2066 2067 2066 291 2067 291 2068 2069 2070 2069 2070 2068 2071 2072 2071 2073 2073 2072 1778 2074 1778 1631 2074 1631 265 2075 265 2076 2076 2075 2077 2078 2079 2078 2079 2077 2080 2081 2082 2080 2082 2081 2083 2084 988 2083 988 2084 2085 1534 2085 2086 2086 1534 2087 2088 2087 2089 2089 2088 2090 2091 2090 2092 2091 2092 182 2093 1218 2093 1218 182 2094 1886 2095 2094 2095 1886 2096 2097 2096 1271 2097 1271 2098 2099 2098 2100 2099 2100 2101 2102 2101 2103 2102 2103 2104 2105 2104 2106 2106 2105 913 2107 2108 913 2108 2107 2109 2110 2109 2111 2111 2110 2112 2113 2112 2114 2114 2113 2064 358 2064 357 2115 207 2116 207 2116 2115 1710 2117 1708 2117 2118 699 2119 699 2119 2118 2120 462 2121 462 2121 2120 2122 2123 2124 2123 2124 2122 1335 2125 2126 2125 2126 1335 1147 2127 1148 2127 2128 2129 2130 2129 2130 2128 1069 2131 1178 1069 1178 2131 2132 2133 1601 2133 1601 2132 887 2134 887 2135 2134 2135 2136 837 2137 837 2137 2136 2138 2139 2140 2138 2140 2139 1665 2141 2141 35 2142 2143 2144 2143 2144 2142 2145 2146 2147 2146 2147 2145 2148 2149 2150 2149 2150 2148 2095 1563 2151 2095 2151 1563 203 2152 2153 2152 2153 203 2154 2155 1368 2155 1368 2154 2156 2157 2158 2157 2158 2156 2159 2160 2161 2159 2161 2160 2162 2163 2164 2162 2164 2163 2165 2166 2165 2167 2167 2166 2168 2169 2170 2169 2170 2168 6 2171 6 1274 1274 2171 1698 1182 2172 1698 2172 1182 2173 196 256 196 256 2173 2174 2175 2174 2176 2175 2176 555 514 1188 1215 1188 2177 1215 2177 1694 2178 2179 2178 2179 1694 116 2180 2181 2180 2181 116 78 2182 77 2182 2183 2184 1999 2184 1999 2183 2162 2025 2162 2024 846 2064 2063 846 2185 2186 2187 2186 2187 2185 2188 1776 1775 2188 683 2189 683 2190 2189 2190 2191 1948 949 2191 2192 2193 2194 2192 2194 2193 1317 642 640 1317 2195 2196 1489 2196 1489 2195 2197 426 425 2197 2032 2198 2199 2032 2199 2198 2200 2201 2202 2201 2202 2200 2203 2204 1683 2203 1683 2204 2205 2206 2205 2207 2207 2206 1436 2208 1435 2208 2209 626 732 2209 732 626 873 526 2210 1545 2210 1547 2211 1736 2211 2212 1736 2212 2213 470 468 2213 2214 2215 2216 2215 2216 2214 2217 2218 2217 1901 1901 2218 1094 2219 1093 2219 2220 2221 2222 2221 2222 2220 1092 2223 1092 2168 2168 2223 2224 473 2224 2225 473 2225 2226 2227 2228 2227 2228 2226 1057 2229 106 2229 2230 2231 1169 2231 1169 2230 2232 293 294 2232 2233 1249 2234 1249 2234 2233 2235 2236 2235 262 262 2236 2237 2238 1839 2238 1839 2237 2015 2239 2015 478 478 2239 2240 616 2241 616 2241 2240 2242 2243 828 2243 828 2242 2244 2245 2244 2246 2246 2245 2247 282 2248 282 2248 2247 1761 2249 2250 1761 2250 2249 1588 2006 1588 1339 2251 1959 1960 2251 2252 1833 2252 1832 1730 895 894 1730 2253 2254 1488 2253 1488 2254 2006 1590 2255 1976 2255 1977 2256 2257 2258 2257 2258 2256 2118 935 2119 935 380 2259 2260 2259 2260 380 2261 2262 2263 2262 2263 2261 2264 1310 2264 1309 2265 2266 2267 2266 2267 2265 249 2268 249 2269 2268 2269 1438 361 359 1438 2270 2204 2271 2204 2271 2270 2120 2272 2273 2272 2273 2120 2274 1245 1448 2274 89 2275 2276 89 2276 2275 2277 2278 2277 2279 2279 2278 2280 2160 2280 2281 2160 2281 2211 2282 2211 2283 2282 2283 2284 2285 2286 2285 2286 2284 2220 250 2220 606 250 606 2287 1447 1982 2287 1982 1447 2288 659 2288 1747 583 2289 582 2289 1105 499 1105 7 7 499 2290 2291 2292 2290 2292 2291 2293 2294 2295 2293 2295 2294 1291 1570 1291 1387 1387 1570 2296 956 2297 2296 2297 956 2298 2299 1771 2298 1771 2299 2300 1679 2301 2300 2301 1679 2302 572 2302 571 2303 1612 2303 1611 672 1133 1380 672 2304 2305 2304 2306 2306 2305 1834 2307 2307 1403 2308 2309 2308 2310 2309 2310 1900 2311 707 2311 2312 2313 2312 2314 2313 2314 79 1976 79 2315 1976 2315 836 2316 836 746 2316 746 2317 2318 2319 2317 2319 2318 1170 2320 2321 1170 2321 2320 2319 2322 2322 2317 2323 2324 2323 2325 2325 2324 2326 2041 2327 2326 2327 2041 2328 2329 2330 2328 2330 2329 2331 2332 2333 2332 2333 2331 1791 1359 2334 1791 2334 1359 2335 312 2335 67 67 312 2336 139 2336 560 2337 2338 2339 2337 2339 2338 2340 2341 2342 2340 2342 2341 1274 2343 1274 2344 2343 2344 1060 2345 453 2345 453 1060 2346 1058 2335 1058 2335 2346 743 2347 2348 743 2348 2347 2349 2350 2351 2349 2351 2350 2352 2353 2354 2353 2354 2352 2355 569 2355 568 712 2356 711 2356 2357 2358 2357 269 2358 269 1538 2359 2360 1538 2360 2359 2361 2362 1858 2362 1858 2361 756 2363 1223 2363 2364 349 350 2364 2365 2366 1254 2365 1254 2366 2367 2368 2369 2367 2369 2368 2370 2371 2370 2372 2371 2372 2373 2374 2373 505 505 2374 1422 2375 1509 2375 2376 2377 2378 2377 2378 2376 2379 2380 2381 2380 2381 2379 2382 2383 2382 2384 2383 2384 2385 2386 1119 2386 1119 2385 1103 1913 1753 2387 1752 2387 1656 2388 2389 2388 2389 1656 2390 1505 2391 1505 2391 2390 2392 1384 2392 298 2393 2394 2393 2395 2394 2395 1698 2396 2172 2396 792 2397 2398 792 2398 2397 2399 2400 2401 2400 2401 2399 2402 2403 2402 2404 2404 2403 2405 2406 2407 2406 2407 2405 1438 1884 1513 8 2408 1513 2408 8 2029 2195 2409 1930 2409 2410 1930 2410 1393 2411 1393 2412 2411 2412 2413 510 2413 512 2028 2414 2027 2414 2415 2416 1427 2416 1427 2415 2417 2418 2419 2417 2419 2418 614 692 2420 614 2420 692 286 2421 284 2421 53 2422 2423 53 2423 2422 2424 881 1633 2424 2425 1848 2425 2426 1848 2426 798 2427 796 2427 331 2428 333 2428 1311 2256 1311 2302 2256 2302 1328 2429 277 2429 277 1328 2430 222 2430 1726 2431 2432 2433 2431 2433 2432 2434 2435 1273 2435 1273 2434 2436 2437 2438 2436 2438 2437 584 153 1379 153 678 2439 2440 678 2440 2439 2441 703 2441 2442 703 2442 1374 1330 1374 1329 2443 2444 2445 2444 2445 2443 1479 520 1479 522 178 2072 178 2446 2072 2446 2447 2448 2447 593 593 2448 2208 2449 1436 2449 1662 2450 2451 2450 2451 1662 2452 2453 2452 2454 2453 2454 2455 2456 2457 2456 2457 2455 2458 2459 2460 2458 2460 2459 2461 195 2462 195 2462 2461 910 2463 2464 2463 2464 910 2465 1612 2303 2465 2466 2467 2466 1997 2467 1997 1655 2468 1655 2469 2469 2468 2470 2471 370 2471 370 2470 1745 1949 1744 1949 2472 2473 2472 2474 2474 2473 2475 2476 2475 810 2476 810 2477 2478 209 2478 209 2477 2479 2480 2479 1688 2480 1688 2481 2482 2483 2482 2483 2481 2484 2485 2484 2486 2486 2485 2487 2068 2119 2487 2119 2068 263 1256 2488 1256 2488 263 2252 2425 1833 2425 2489 2490 2489 2491 2490 2491 1510 1859 2492 1510 2492 1859 2493 2494 19 2494 19 2493 2495 2496 2497 2496 2497 2495 585 2498 2499 2498 2499 585 2500 2501 1482 2500 1482 2501 2312 2502 2312 2206 2206 2502 544 822 822 545 2503 742 2503 2504 2504 742 1557 2505 1557 2500 2500 2505 2506 1608 593 1608 593 2506 2507 1929 2507 1928 744 738 744 740 2508 2509 2510 2509 2510 2508 625 2511 624 2511 2512 236 2513 2512 2513 236 2514 199 60 199 60 2514 2515 63 62 2515 1106 7 1106 9 131 2516 386 2516 2517 1864 2517 1863 2518 1986 2519 2518 2519 1986 713 2520 712 2520 397 2521 1834 2521 2522 2523 2522 2524 2524 2523 2525 354 2526 354 2526 2525 2527 2528 2529 2528 2529 2527 162 2530 1410 2530 1410 162 1714 660 2531 2532 2533 2532 2533 2531 2534 1622 2008 2534 2057 948 947 2057 690 459 690 458 2535 2191 2535 949 2536 2537 2536 1337 2537 1337 2538 2539 2540 2538 2540 2539 278 2541 2541 279 2542 2543 2544 2542 2544 2543 2545 985 2545 983 1881 2546 1881 2547 2546 2547 2548 2549 2548 2550 2549 2550 2551 1096 1095 2551 2552 2553 2552 2554 2553 2554 364 748 2555 2556 2555 2557 2556 2557 2096 2558 1273 2558 1273 2096 2559 2560 2561 2560 2561 2559 2106 679 2562 679 2562 2106 1199 2563 2563 1200 2564 2058 2564 2057 620 1700 2565 620 2565 1700 1683 770 2566 770 2566 1683 2374 506 825 1543 823 1543 2567 2568 2569 2568 2569 2567 2570 1532 2571 1532 2571 2570 2150 486 2149 486 2572 573 572 2572 2573 2574 2575 2574 2575 2573 2576 530 1022 2576 2577 731 730 2577 2578 2160 2579 2578 2579 2160 709 2580 2544 2580 2544 709 2581 2582 2581 2583 2583 2582 2091 1790 2091 1789 2584 1808 2585 1808 2585 2584 1176 1070 1178 1070 2586 2587 2588 2586 2588 2587 2589 1924 2590 1924 2590 2589 1937 2440 2591 2440 2591 1937 2592 704 2593 704 2593 2592 2594 2595 475 2595 475 2594 2596 2597 2598 2596 2598 2597 2599 2600 2599 2601 2600 2601 2602 1695 2602 1697 2603 2604 2605 2604 2605 2603 671 2606 2606 670 1569 2607 1567 2607 2608 2609 2608 2610 2610 2609 2611 2612 2613 2612 2613 2611 1022 2614 529 2614 2615 2616 2615 2617 2616 2617 2618 2619 2620 2619 2620 2618 1047 2621 2621 1046 2622 2312 2622 2314 961 1909 961 1908 1128 1201 1129 1201 2623 2024 2624 2623 2624 2024 2090 2625 2090 2626 2625 2626 2627 2628 2627 2629 2628 2629 2630 1082 2631 1082 2631 2630 409 2296 2632 409 2632 2296 1777 2633 1021 2633 1417 1452 2634 1452 2634 1417 2635 2539 786 2635 786 2539 2636 2637 2636 2397 2637 2397 1646 1974 1973 1646 1568 2638 2639 2638 2639 1568 2640 2597 2598 2640 2641 2206 2205 2641 550 1353 550 1324 2533 2642 2533 2643 2642 2643 2644 1766 2645 2644 2645 1766 1276 897 2646 897 2646 1276 432 2647 432 2648 2648 2647 44 1627 2649 1627 2649 44 2135 2650 1681 2135 1681 2650 1899 1754 1898 1754 2651 2652 2651 2653 2652 2653 2654 2238 2654 1839 2655 885 1100 2655 1100 885 1773 2656 1772 2656 2657 2367 2657 2658 2367 2658 2659 1286 496 2659 496 1286 2660 2661 2662 2661 2662 2660 2540 1747 2538 1747 2663 1463 2664 1463 2664 2663 2204 2665 2204 1684 2665 1684 2666 2667 2666 2668 2667 2668 2669 127 2669 128 2670 2644 2671 2670 2671 2644 83 2672 82 2672 698 549 2673 698 2673 549 2674 2675 1029 2675 1029 2674 2676 2677 2676 279 279 2677 2678 2679 2680 2678 2680 2679 2681 2682 2683 2681 2683 2682 2684 2685 1918 2684 1918 2685 2686 438 2686 2687 2687 438 1602 1841 834 2688 2688 832 2689 519 2689 2690 519 2690 2107 2326 1757 2326 1757 2107 2491 560 2491 140 2691 2169 2692 2169 2692 2691 360 2693 2694 2693 2694 360 2279 2695 2301 2279 2301 2695 4 2696 2697 2696 2697 4 1279 2698 2699 1279 2699 2698 2486 2700 2701 2700 2701 2486 2702 1692 2703 2702 2703 1692 2704 2025 2023 2704 224 2705 1726 2705 919 484 919 54 78 117 78 115 1977 2706 2255 2706 2591 1400 472 1454 472 2707 1454 2707 417 2704 2704 770 99 1213 98 1213 2549 2708 2709 2708 2709 2549 2710 1497 393 2710 393 1497 2333 2711 2711 2331 2439 2712 2713 2439 2713 2712 2550 1115 1116 2550 2714 2715 2714 2716 2715 2716 2717 2306 2717 837 2306 837 2718 1911 2719 1911 2719 2718 2720 2721 2720 1037 1037 2721 1552 2722 1552 1915 2722 1915 2723 2188 2724 2188 2724 2723 2725 2726 2727 2726 2727 2725 743 2728 2729 743 2729 2728 2730 2731 596 2730 596 2731 2202 2052 2052 2200 2732 2607 1567 2732 75 191 73 191 2733 2734 2733 2735 2735 2734 2736 2601 2737 2736 2737 2601 1456 838 1617 838 1617 1456 2738 1246 958 1246 958 2738 1925 2739 1925 1647 2739 1647 2292 2303 2292 1611 1666 36 146 1468 2032 1468 2032 146 2740 34 1755 2740 1755 34 2674 2741 2674 1030 2741 1030 1704 2742 1704 2743 2743 2742 24 363 362 24 307 1594 307 2744 1594 2744 2526 2745 2526 355 2745 355 2683 903 2683 902 1991 2746 1991 2747 2746 2747 1135 2748 1133 2748 2749 2214 2749 2215 2482 39 2482 38 2750 1919 171 1919 171 2750 2697 2751 2696 2751 2752 481 2753 2752 2753 481 2524 808 613 808 613 2524 2754 866 2754 865 1680 2279 1680 2301 636 2755 636 2339 2339 2755 389 1551 2756 2757 2756 2758 2757 2758 1212 242 2759 1790 2760 1790 2760 2759 173 413 173 2761 2761 413 2133 2762 2763 2762 2763 2133 2764 2765 2766 2765 2766 2764 2161 2767 2768 2161 2768 2767 1690 2769 1689 2769 2770 2718 2770 2771 2771 2718 705 2772 705 129 129 2772 2773 2774 2775 2773 2775 2774 926 641 640 926 1811 2776 2777 1811 2777 2776 2778 760 2778 759 624 61 624 2779 61 2779 2780 2781 2782 2780 2782 2781 2783 65 2783 64 2784 773 2664 773 2664 2784 2161 2578 2785 982 2785 1137 654 2786 495 654 495 2786 2787 2788 2789 2788 2789 2787 230 2790 230 2791 2791 2790 2792 2793 2792 2794 2794 2793 81 2795 79 2795 2796 870 2797 2796 2797 870 2401 2798 2799 2798 2799 2401 2192 2800 2192 2801 2801 2800 491 278 492 278 2802 1929 2803 1929 2803 2802 2804 2805 2806 2805 2806 2804 2807 2196 2195 2807 2657 628 2808 628 2808 2657 135 2809 135 2810 2810 2809 2811 21 2811 20 2812 2813 1889 2813 1889 2812 2811 508 2811 541 2814 2815 2816 2815 2816 2814 2817 306 2817 1341 1341 306 1870 2685 1920 2685 1920 1870 1356 1695 2602 1356 2591 2818 2818 2440 1362 2819 1362 2820 2820 2819 1780 1332 2821 1332 2821 1780 1805 486 2822 845 163 2822 2823 2824 639 2824 639 2823 244 2825 244 1296 1296 2825 2742 326 963 1909 2826 1909 2826 963 2827 2828 2829 2827 2829 2828 2613 2002 2613 2830 2002 2830 1629 44 2732 44 2732 1629 2831 1823 2831 2832 1823 2832 2833 1271 2097 2833 1525 2057 2564 1525 2834 2835 2316 2835 2316 2834 2836 390 2837 2836 2837 390 2838 2621 2839 2621 2839 2838 2840 1288 2840 2443 1288 2443 240 2841 238 2841 2842 2843 2844 2843 2844 2842 1370 1490 1370 1570 1490 1570 2682 2845 2682 2846 2846 2845 295 47 736 295 920 2372 592 2372 2469 2069 2468 2069 2847 2209 2847 732 1236 1364 1804 1236 1804 1364 30 2848 28 2848 1745 455 1489 1386 2822 1386 2822 1489 839 1457 1457 838 2849 1028 2850 2849 2850 1028 2851 2852 2851 337 2852 337 32 2853 763 32 763 2853 875 1143 875 366 1143 366 2854 1916 1915 2854 2855 905 1154 2855 2856 837 2856 2137 1100 2857 1099 2857 1343 2456 2221 2456 2221 1343 2097 2858 2859 2858 2859 2097 1578 2860 1578 2861 2860 2861 2862 2863 2862 1637 1637 2863 2689 214 2689 1175 1175 214 2487 2864 934 2864 934 2487 2865 2831 2866 2831 2866 2865 2596 2867 2868 2596 2868 2867 2143 2869 2144 2869 2386 2870 2681 2386 2681 2870 2863 193 2871 193 2871 2863 2872 2873 130 2872 130 2873 964 2874 964 2370 2370 2874 1995 984 40 661 42 661 2875 2876 1657 2875 1657 2876 899 1807 1801 1807 2877 2878 2877 138 138 2878 1194 1673 1194 2879 1673 2879 2880 2881 2882 2881 2882 2880 2883 595 2883 1388 2884 2819 1362 2884 2885 2240 2885 616 2886 1722 2887 1722 2887 2886 2888 139 2336 2888 2889 1653 2890 1653 2890 2889 1735 2891 1735 2892 2891 2892 1228 2893 1228 2788 2788 2893 1788 674 1788 673 1026 2894 1481 2894 2895 2896 2895 2897 2896 2897 2692 2168 2898 2899 2900 2899 2900 2898 2481 2901 2481 1600 1600 2901 2808 2902 2808 2903 2902 2903 2904 2905 2904 1001 1001 2905 508 2906 540 2906 639 2907 2823 2907 2146 797 2145 797 2831 346 2865 346 2908 2873 2908 2872 2909 2910 2862 2909 2862 2910 2548 896 894 2548 2911 1042 2911 1041 2417 2912 2418 2912 2913 993 2913 2914 993 2914 854 1793 854 2915 1793 2915 2916 663 2917 2916 2917 663 851 2918 851 2919 2919 2918 2025 770 2920 1926 2920 2477 2477 1926 304 1787 305 1787 2921 2922 2921 2923 2923 2922 2924 194 2871 2924 2871 194 2690 2925 2690 733 2925 733 2926 2927 2926 2928 2927 2928 1432 1711 1432 1713 2929 2930 2929 2931 2930 2931 2932 2933 1219 2933 1219 2932 2750 1193 2750 2934 2934 1193 519 2925 113 2935 2936 113 2936 2935 2937 2938 2939 2937 2939 2938 2940 2941 2942 2941 2942 2940 2943 2944 2782 2943 2782 2944 2945 2946 2947 2946 2947 2945 2094 672 2094 342 342 672 2948 1323 443 2948 443 1323 1931 1438 359 1931 2398 2637 2949 2950 2949 2951 2951 2950 2952 2632 1751 2632 1751 2952 1011 743 1011 2348 2953 1257 2953 1409 1475 2547 1881 1475 2954 2955 2956 2955 2956 2954 2957 773 2957 2958 773 2958 2959 2960 2249 2960 2249 2959 2961 1986 2961 1985 1479 521 1704 2962 1704 1378 2962 1378 1404 1326 1556 2963 2964 1556 2964 2963 2965 2195 2965 2807 474 2966 2138 474 2138 2966 2967 2968 2969 2968 2969 2967 725 2970 725 2971 2971 2970 1937 1214 2713 1214 2713 1937 435 2972 2973 2972 2973 435 2974 2975 2877 2975 2877 2974 2758 2976 988 2976 988 2758 907 762 907 763 2666 2812 2812 2668 1859 2977 2978 2977 2978 1859 2979 1618 2980 1618 2980 2979 807 2981 1445 2981 1445 807 534 1913 1978 2982 2983 2982 2983 1978 2620 2984 2620 2985 2985 2984 2661 1558 2986 2661 2986 1558 2987 2988 1051 2988 1051 2987 34 2141 2989 1336 2989 1334 1396 679 1395 679 2990 2515 2991 2990 2991 2515 138 2992 2992 2878 2993 2994 2993 1218 1218 2994 1081 2995 1081 2996 2995 2996 2127 1660 2997 2127 2997 1660 2942 1337 2536 2942 2928 1804 2928 2998 2998 1804 2999 1496 2999 1495 3000 3001 3002 3001 3002 3000 1716 179 3003 179 3003 1716 827 2242 827 3004 3004 2242 2472 1269 1268 2472 299 3005 299 3006 3006 3005 3007 3008 3009 3008 3009 3007 17 863 17 864 3010 854 3010 2915 2856 1896 2856 3011 1896 3011 3012 3013 3014 3013 3014 3012 3015 928 3015 926 2228 1141 1141 2227 1842 3016 1830 3016 1830 1842 2050 3017 2050 3018 3018 3017 3019 3020 3019 3021 3021 3020 1187 3022 3022 1185 3007 1264 1264 3008 3023 1731 3024 1731 3024 3023 3025 1339 3025 1023 542 531 542 1936 819 3026 420 3026 420 819 3027 3028 3027 2455 2455 3028 3029 3030 3031 3029 3031 3030 1346 3032 11 3032 11 1346 3033 306 2817 3033 2286 3034 1524 2286 1524 3034 2967 374 2968 374 3035 644 3035 643 3036 829 3036 2798 829 2798 3037 3038 3039 3038 3039 3037 491 3040 491 280 280 3040 3041 3042 3043 3042 3043 3041 3044 3045 3044 2648 2648 3045 1123 2604 3046 1123 3046 2604 2652 2454 2652 3047 3047 2454 2216 3048 2216 3049 3048 3049 200 3050 200 2514 2514 3050 3051 952 3051 1194 2085 2525 2085 3052 2525 3052 3053 2314 2622 3053 3054 3055 1630 3054 1630 3055 3056 983 3056 984 1192 134 1192 734 134 734 2233 1063 266 2233 266 1063 694 609 696 609 1034 917 1034 916 3057 3058 3057 225 3058 225 3059 3060 2581 3060 2581 3059 12 3061 11 3061 2566 769 3062 1236 1235 3062 3063 3064 3063 3065 3065 3064 1912 3066 1910 3066 3067 3068 3069 3068 3069 3067 3070 3062 3071 3062 3071 3070 42 3072 3072 41 3073 277 3073 276 2794 412 3074 412 3074 2794 3075 3076 3075 3077 3076 3077 3078 3079 1619 3079 1619 3078 1618 2717 2304 2717 2304 1618 2566 3080 1683 3080 3081 3082 3081 2901 3082 2901 2631 2866 2866 2630 591 2284 979 2284 2052 3083 2202 3083 2170 2223 614 691 3084 3085 3084 1360 3085 1360 3086 3087 3086 1504 1504 3087 1177 1364 3088 3089 3090 3089 3090 3088 1800 3091 1800 3092 3092 3091 1603 3093 2035 3093 2035 1603 2264 3094 2264 3095 3095 3094 166 1252 1077 3096 2170 1077 2170 3096 3097 3098 430 3098 430 3097 3099 1948 947 3099 3100 2061 2060 3100 3101 1779 3102 3101 3102 1779 1267 3103 1266 3103 1423 2375 289 2788 3104 2337 3105 2337 3105 3104 2659 1287 3106 1287 3106 2659 1703 3107 1687 3107 151 911 151 3108 911 3108 3109 2395 3110 3109 3110 2395 340 3111 341 3111 3112 3113 1186 3112 1186 3113 1691 2568 2529 2568 2529 1691 3114 3115 2445 3115 2445 3114 630 3116 628 3116 2706 3117 2706 2975 2975 3117 3118 1075 3119 1075 3119 3118 3120 3121 3120 3122 3122 3121 3123 3124 3125 3124 3125 3123 1143 877 3126 1143 3126 877 3127 3128 3129 3128 3129 3127 1669 3122 1669 3121 1246 3130 2103 1246 2103 3130 2470 1966 2471 1966 1796 3131 1796 3132 3131 3132 2841 1529 3133 1331 1529 1331 1529 3133 3134 3135 2887 3135 2887 3134 3136 3137 3136 2670 2670 3137 556 3138 774 3138 3139 516 3140 516 3140 3139 2469 547 2469 697 547 697 2307 3141 1403 3141 3142 2946 3143 2946 3143 3142 1187 3144 1187 3145 3144 3145 1050 1540 1050 3117 1540 3117 1148 2827 1146 2827 3146 553 3146 3147 553 3147 2134 3148 3148 2135 751 2563 2563 325 3093 3149 1589 3093 1589 3149 1691 3150 3150 1692 3151 1663 3152 1663 3152 3151 3153 682 3153 248 3154 3155 3154 1563 3155 1563 449 3156 449 3157 3156 3157 3158 3159 3160 3158 3160 3159 1265 3161 3161 1263 3162 1666 3162 1665 2260 3163 2260 3164 3164 3163 3165 3166 94 3166 94 3165 3167 336 3167 2675 336 2675 347 3168 3168 930 1167 3169 1169 3169 3170 3171 3170 3172 3172 3171 3173 1554 274 3173 274 1554 1727 1469 1772 1727 1772 1469 2084 2976 1234 3174 1234 2141 3174 2141 503 1700 461 2120 2509 404 2508 404 3175 1063 3175 2233 2600 3176 2177 2600 2177 3176 3177 3178 3179 3178 3179 3177 3180 1077 3180 3181 3181 1077 2360 3182 2359 3182 3183 3184 3185 3183 3185 3184 3186 1506 3186 1505 3187 3188 3101 3188 3101 3187 1957 3189 1958 3189 120 3190 3190 119 3191 3192 504 3191 504 3192 3193 1314 2422 3193 2422 1314 1850 3194 3195 1850 3195 3194 3196 1612 1580 3196 2761 412 2567 219 219 2568 138 3197 2877 3197 1686 3107 2169 3198 3199 2169 3199 3198 2478 208 3200 2478 3200 208 2223 1077 214 2690 2079 3201 2078 3201 3202 2383 3202 2382 57 1612 2465 57 2156 1613 2156 559 3203 3204 2934 3203 2934 3204 2102 1246 3205 1943 3205 1559 1559 1943 2697 612 3206 2697 3206 612 3207 2946 3207 62 62 2946 3208 1809 3209 3208 3209 1809 2254 3013 3012 2254 3210 3211 3210 1465 3211 1465 3212 3213 3214 3213 3214 3212 3215 1269 2472 3215 255 3216 2121 3216 2121 255 2383 2403 2383 2402 3217 3218 3217 3219 3219 3218 3220 3221 3220 3222 3222 3221 1110 1573 1906 1573 2810 3223 135 3223 3211 2892 3224 3211 3224 2892 3225 2498 3225 681 681 2498 3226 3227 2854 3227 2854 3226 2096 3228 696 3228 696 2096 3229 3230 3229 3231 3231 3230 3232 3233 3232 3234 3234 3233 3235 2852 472 2852 472 3235 3236 676 3236 677 74 2029 73 2029 2275 2129 997 2129 997 2275 3032 1347 3237 679 3237 680 1434 2000 3238 1434 3238 2000 1176 1235 3239 1568 1567 3239 2081 1382 2081 384 668 3240 3241 668 3241 3240 620 574 618 574 2803 1930 3242 2043 2041 3242 3243 3244 143 3244 143 3243 232 3245 234 3245 3246 877 3247 3246 3247 877 686 3248 918 686 918 3248 1270 2688 1270 832 1027 2850 3249 3250 3251 3249 3251 3250 3252 1343 3253 3252 3253 1343 3254 2539 3254 2538 3255 1699 3256 1699 3256 3255 3099 3257 3257 1948 1570 1369 3258 963 962 3258 3259 2472 3259 1268 2126 1688 3260 1688 3260 2126 3261 3262 3261 3263 3263 3262 3264 3265 3266 3264 3266 3265 3267 3268 3269 3268 3269 3267 2663 1462 3270 1381 3270 1380 2040 3271 3272 3271 3272 2040 2895 2194 2895 2193 3273 3274 3273 2473 3274 2473 3261 3275 3261 3276 3276 3275 2322 3039 2322 3037 3277 3278 3279 3277 3279 3278 3280 3281 3282 3281 3282 3280 3283 2853 3283 32 3284 3285 3284 2117 3285 2117 788 755 754 788 3286 1380 3286 3287 1380 3287 170 2934 2750 170 422 3288 3289 3288 3289 422 3290 1470 3290 1472 2971 984 3056 2971 3291 2762 3291 2763 2531 3292 3293 3292 3293 2531 3294 3219 1449 3219 1449 3294 3128 1031 3295 3128 3295 1031 3296 3297 3296 3298 3298 3297 375 3299 3300 3299 3300 375 2415 860 3301 2415 3301 860 1917 2106 1917 3302 2106 3302 640 1319 2475 3303 2475 2424 2424 3303 3304 3305 3306 3305 3306 3304 2583 3307 3308 3307 3308 2583 1703 3309 1702 3309 2043 3310 3310 2042 3311 2647 3312 2647 3312 3311 468 3000 468 3313 3000 3313 1653 3314 1652 3314 3315 527 3316 3315 3316 527 314 3317 355 3317 806 3318 805 3318 3319 3320 1416 3320 1416 3319 2354 2640 638 2354 638 2640 1922 3321 3322 3321 3322 1922 1617 2717 2717 838 3323 3324 3323 3325 3324 3325 3326 23 271 3326 2451 3327 1662 3327 2358 2236 2358 2235 1122 3328 2583 1122 2583 3328 970 3270 3329 970 3329 3270 2166 1873 2167 1873 1147 3330 3330 2127 3331 3332 3331 3333 3333 3332 1524 3099 3334 948 2535 948 2535 3334 3335 3310 1301 3335 1301 3310 3266 2979 3336 3266 3336 2979 2550 3337 2548 3337 2382 3338 3339 2382 3339 3338 3340 2283 3341 3340 3341 2283 3342 3343 3344 3343 3344 3342 3345 2232 3345 2313 2232 2313 3346 1753 3347 1753 3347 3346 3348 3349 3350 3349 3350 3348 3351 2507 3352 2507 3352 3351 3353 3354 1225 3354 1225 3353 400 3355 3356 400 3356 3355 3357 2959 3357 2960 1418 1497 3358 3359 3253 3359 3253 3358 3360 445 3360 3361 3361 445 3362 3363 3362 1084 3363 1084 2287 309 3364 1335 3364 2125 2228 1388 2226 1388 2378 3365 3366 3365 3366 2378 3367 1348 954 3367 954 1348 976 352 20 3368 2811 3368 3260 1335 3260 1336 1345 812 1345 939 503 2896 503 3369 2896 3369 3370 3371 3370 1728 3371 1728 3 2461 2461 2 3372 225 3372 3058 3373 3071 3373 3070 433 1835 433 406 3374 2316 3374 836 1394 3375 2412 3375 2412 1394 3376 1647 3376 1366 1094 3377 1094 2223 2223 3377 3378 2070 3378 3379 3379 2070 3380 3381 1607 3380 1607 3381 894 1940 2548 1940 2094 3287 1380 2094 3382 3383 3384 3382 3384 3383 3385 746 3385 3386 3386 746 2939 3387 3387 2938 3331 444 3388 3331 3388 444 1841 2654 758 3389 3390 3389 3390 758 3391 1170 2321 3391 3392 38 3392 37 3393 3064 1135 3064 1135 3393 3394 3233 3395 3394 3395 3233 344 98 2610 3396 2610 1932 3396 1932 3397 1437 3397 2151 1437 2151 1682 1221 2924 3398 194 3398 1543 285 3399 1543 3399 285 565 177 175 565 2312 3350 3350 2502 416 769 3400 3401 3402 3401 3402 3400 2449 1452 587 2449 2950 3403 669 3403 669 2950 3404 3405 3406 3405 3406 3404 1311 571 3407 1307 3407 3408 1307 3408 3409 1623 3409 3195 3195 1623 3410 1493 3410 1492 460 839 458 839 2321 206 3391 206 3411 892 3411 2045 2045 892 2513 1076 3412 1076 3412 2513 2631 1081 3413 1497 393 3413 3414 3415 2769 3415 2769 3414 1252 3416 3416 1251 2916 665 2499 682 2499 681 3417 1762 3417 1761 455 1644 1745 1644 2389 651 3418 2389 3418 651 3419 1218 3419 182 2276 3420 2130 3420 2130 2276 3421 2865 3421 346 2930 3422 2930 3423 3423 3422 1446 3424 3425 1446 3425 3424 3426 3363 3362 3426 2903 1879 2903 1880 2411 3427 3427 2412 3428 3429 3428 3430 3430 3429 2679 3166 2679 3431 3431 3166 3432 2409 3433 2409 3433 3432 83 337 339 83 2490 560 3434 464 2965 3434 2965 464 3435 3436 3437 3435 3437 3436 2842 3438 3439 2842 3439 3438 2023 2624 568 768 3440 2038 3440 3441 2038 3441 1397 233 1395 233 2195 3442 3443 3442 3443 2195 3444 3445 3446 3444 3446 3445 3447 1923 1924 3447 3448 2156 3448 2157 1949 1645 1745 1645 2485 3367 954 2485 3131 1795 3131 2951 2951 1795 3360 446 3384 1063 1893 3384 1138 2190 1541 1138 1541 2190 1036 3449 3450 1036 3450 3449 3451 3452 3451 3453 3453 3452 992 3454 991 3454 2115 3429 2116 3429 2754 2331 2754 2332 3455 2195 2029 3455 2084 1923 2084 1922 2328 1582 2330 1582 3456 1459 1460 3456 1325 1220 1325 1221 3457 3458 3457 544 3458 544 3459 3460 3459 3461 3460 3461 3462 3463 3464 3462 3464 3463 3465 3466 3465 3181 3466 3181 3467 3468 394 3467 394 3468 2402 2384 3469 3470 3471 3469 3471 3470 2579 3472 3473 3472 3473 2579 3474 1410 1014 3474 1014 1410 3475 3476 3475 3477 3477 3476 3478 2736 2290 2736 2290 3478 1561 3479 1833 1561 1833 3479 3480 3481 3480 3482 3482 3481 3483 879 3484 3483 3484 879 3485 3486 2679 3486 2679 3485 3487 3488 3487 3489 3489 3488 3490 3327 1770 3327 1770 3490 1132 945 1132 944 3152 616 615 3152 483 1008 1008 482 3491 2397 3492 2397 3492 3491 1515 3493 1516 3493 130 3494 3494 2872 2795 2315 185 3495 2947 3495 2947 185 3496 3497 3496 3498 3497 3498 866 1548 2332 1548 2332 866 1867 3499 1867 3040 3040 3499 3500 3501 3500 2655 3501 2655 3502 3503 3502 590 590 3503 3504 749 3504 3505 749 3505 918 3506 3507 3506 3507 918 3165 2679 3165 2678 2241 844 2241 617 1763 3508 1763 1296 1296 3508 3509 1460 3509 3456 3510 3108 3511 3510 3511 3108 3512 3297 3296 3512 266 2076 2175 3164 1305 3164 1305 2175 3513 3514 3513 3515 3514 3515 3516 760 3516 1028 760 1028 3081 2481 3081 38 2481 38 264 2235 2235 986 3002 1166 3002 1811 2366 2678 3165 2366 3517 2196 783 2196 783 3517 1067 3033 1066 3033 3518 2249 3518 1761 3519 3520 3519 1625 3520 1625 3521 551 3522 551 3522 3521 1491 939 1492 939 1045 3523 2246 3523 2246 1045 1633 810 2874 3313 2874 818 3313 818 3083 372 3361 3083 3361 372 2838 3524 3525 2838 3525 3524 841 2208 1435 841 1071 1849 2252 1071 2252 1849 2350 1939 3239 2350 3239 1939 1607 1108 3526 1108 3526 1607 1223 567 567 2363 2732 3527 44 3527 1752 3528 3528 2387 3529 2933 3530 2933 3530 3529 3531 1651 1649 3531 1856 1512 1856 3532 3532 1512 3139 261 261 516 3533 3534 3535 3534 3535 3533 825 3384 825 3383 1394 1776 1392 1776 314 802 3536 802 3536 314 1120 3537 1151 3537 637 2824 3487 3538 3191 3487 3191 3538 2791 228 2434 228 2434 2791 2529 219 3539 3540 3539 3415 3415 3540 2114 3541 3542 2114 3542 3541 2642 1484 2642 3543 1484 3543 1869 334 1868 334 43 1944 3544 43 3544 1944 2989 3545 2989 3546 3545 3546 2973 2848 2973 28 3547 3548 3549 3547 3549 3548 3550 120 118 3550 1818 3551 3552 1818 3552 3551 2511 3553 2511 3554 3554 3553 3505 2501 3505 2500 1574 1610 3555 1118 1119 3555 3556 3557 3558 3556 3558 3557 1212 243 2662 1555 2662 853 1219 3529 1066 3559 3559 3033 3560 2900 3560 817 2900 817 3561 3562 3561 1896 3562 1896 3496 1500 3498 1500 3563 977 3563 976 1264 2849 3564 1264 3564 2849 1536 1475 1536 1474 1960 719 1960 718 3565 3566 3565 3567 3566 3567 3568 3569 3570 3568 3570 3569 2130 2275 3571 3572 253 3571 253 3572 3573 3574 3411 3573 3411 3574 2514 77 60 77 2723 3575 2188 3575 3576 3577 3576 3578 3578 3577 225 410 831 3449 831 1036 2357 2236 195 1969 195 1968 91 3153 3579 3580 3579 3581 3581 3580 1139 2190 3582 420 3582 819 688 3583 687 3583 3584 3585 925 3585 925 3584 237 2513 3543 2643 3586 3587 3588 3587 3588 3586 2883 3589 3590 3589 3590 2883 3591 3592 3591 1458 3592 1458 798 2171 798 3593 3593 2171 3594 3595 3596 3594 3596 3595 2737 3597 2736 3597 3229 2022 3229 3598 2022 3598 1121 3599 3308 1121 3308 3599 1426 3483 1426 3600 3483 3600 3601 34 3601 2740 1882 1430 1882 3602 3602 1430 1139 684 3603 3604 3603 467 467 3604 3605 2120 3605 461 2411 3606 3607 3606 3607 2411 3466 3608 3466 1300 3608 1300 1328 1689 1689 2429 1608 920 3609 3610 607 3610 607 3609 3074 2793 726 1921 3611 373 371 3611 3549 1759 3549 3234 1759 3234 2522 2344 2522 2343 3612 3613 3612 1964 1964 3613 1828 2423 1828 2496 2423 2496 2154 426 2155 426 3614 573 3615 573 3615 3614 2801 3616 2801 3617 3617 3616 1987 1397 1987 3618 1397 3618 2296 2338 409 2338 2100 2305 3619 2305 3619 2100 3620 3621 3620 3622 3622 3621 1157 2912 2912 1156 3136 3623 3624 3136 3624 3623 1524 2285 3625 401 1203 3625 3300 2383 3202 3300 3291 2187 3626 2187 3626 3291 3232 3627 3627 3233 3628 2374 3628 2373 3629 990 3629 3630 3630 990 3631 1968 195 3631 2598 2867 3555 2918 3555 2465 2465 2918 1163 3632 1162 3632 2696 806 3633 806 3633 2696 3634 1823 3634 2831 2980 3635 2979 3635 3591 1549 3591 2332 2332 1549 190 2029 2534 3636 2008 3636 3637 1076 2588 3637 2588 1076 2753 482 2940 3638 2941 3638 2618 337 2618 849 3639 3640 3639 3641 3640 3641 496 2279 2279 1286 3642 3643 1936 3643 1936 3642 3644 1761 3417 3644 3645 1561 3645 1562 3473 3646 3473 2672 3646 2672 3647 3648 3647 3649 3649 3648 3650 3038 441 3650 441 3038 3651 2117 3651 1073 1073 2117 3652 2325 3653 2325 3653 3652 2406 3654 2407 3654 3347 1428 3347 3655 1428 3655 2797 872 2797 2441 2441 872 2064 1605 1605 358 1693 2869 1691 2869 2181 3656 3657 2181 3657 3656 3272 1542 3272 142 1542 142 2004 18 1416 3622 2634 1416 2634 3622 1402 1068 1401 1068 2115 3430 618 575 619 575 3031 1221 1325 3031 3658 2959 3357 3658 2457 2607 1569 2457 2565 848 498 3659 3660 498 3660 3659 1197 3661 1196 3661 2582 1953 3662 1953 3662 2582 3663 3664 3663 3151 3151 3664 3665 3355 3666 3355 3666 3665 2147 3667 2147 3439 3439 3667 3231 3668 3669 3231 3669 3668 3670 3503 3670 3502 1146 3671 1147 3671 3672 3673 1026 3672 1026 3673 3674 3675 3624 3675 3624 3674 3676 2932 1219 3676 3592 3595 2333 3595 2333 3592 2006 1025 2104 1917 3677 3678 1751 3678 1751 3677 1677 2957 1677 2614 2957 2614 2302 2966 2302 3679 3679 2966 3 257 257 2461 3680 56 3681 3680 3681 56 312 1798 312 40 3682 241 243 3682 3489 734 3683 734 3683 3489 3684 3685 3684 1487 1487 3685 371 27 3686 27 3686 371 3687 1673 3687 1672 3168 1320 849 3168 849 1320 3299 3117 3688 3117 3688 3299 258 3689 3689 306 2870 3597 2386 3597 3690 2700 3691 2700 3691 3690 3692 3060 552 3060 552 3692 3643 1532 1393 3281 1393 3693 3693 3281 412 2595 474 412 474 2595 3694 2038 3694 3440 3695 973 3695 1098 726 3696 3697 726 3697 3696 1088 3698 3316 1088 3316 3698 2282 2212 2282 3699 2212 3699 2034 1777 2277 2034 2277 1777 3232 3700 3232 1291 1291 3700 2663 773 3701 728 3701 2484 2484 728 3631 2 2461 3631 3702 599 3702 2103 2103 599 3305 3703 3637 3703 3637 3305 3704 3523 3704 3705 3705 3523 3706 1409 3706 3707 3707 1409 3708 2329 3708 3709 2329 3709 3710 3711 3712 3711 3712 3710 457 889 457 188 889 188 3713 1213 3713 99 2631 2995 3714 3715 3716 3714 3716 3715 2990 2787 1890 2787 1890 2990 3717 2516 3717 3267 3267 2516 1638 3718 3718 1639 3411 1520 3411 1519 3584 3719 3584 924 924 3719 1502 1485 302 3720 3720 301 696 2558 3721 493 3721 1340 2766 1505 1505 2765 2670 3722 3722 3137 2820 1707 1362 1707 3723 3724 3725 3724 3725 3723 2767 3726 2161 3726 1701 3256 1701 2298 3256 2298 1083 3363 1083 3727 3363 3727 1594 833 833 1626 3728 3729 3728 716 3729 716 3730 3731 1947 3730 1947 3731 3032 140 2798 140 2798 3032 862 1293 2596 1293 2596 862 3732 1817 3732 1818 2279 497 3582 3733 420 3733 3734 3353 3734 3354 1292 3735 3735 1383 1448 3219 2664 3736 1463 3736 3151 3257 3663 3257 1168 3690 1168 3737 3690 3737 3738 1628 3739 3738 3739 1628 2342 1838 1055 2342 3510 2843 2842 3510 1819 3551 1620 1808 3209 1808 3209 1620 3740 3741 1330 3740 1330 3741 3742 3429 3742 3428 821 1864 2517 821 1186 218 3166 1186 3166 218 1876 2432 1491 1876 1491 2432 3743 508 509 3743 3744 3068 574 3068 574 3744 2357 2260 2357 3164 3745 2647 2648 3745 2242 3746 3714 3746 3714 2242 3747 1775 3747 2724 2724 1775 3179 2881 3179 239 2881 239 3748 3749 3748 3278 3749 3278 1697 3750 1696 3750 2520 47 735 2520 3751 3278 3751 3749 1496 3368 1496 3752 3752 3368 2278 2633 2278 3753 3753 2633 3009 2850 3007 2850 634 3754 1715 3754 1715 634 3755 3525 3756 3755 3756 3525 3757 2819 3757 2884 2611 3758 2611 3759 3758 3759 3760 3750 3760 3189 3750 3189 3761 3762 3761 2323 2323 3762 3763 3764 2574 3763 2574 3764 1450 3140 3748 3140 3748 1450 1658 2876 1658 3765 3765 2876 3766 3767 1604 3766 1604 3767 3189 3768 3769 3189 3769 3768 2998 2261 2998 2262 2311 1131 2311 3770 3770 1131 23 363 2652 2452 1887 2790 3771 2790 3771 1887 3772 3320 3772 2832 2832 3320 3773 3774 3773 800 800 3774 2951 3775 3131 3775 3776 2218 1901 3776 3159 3372 3159 3058 2301 3182 2695 3182 3777 1046 3777 2621 2050 3778 3018 3778 2482 2186 2483 2186 1185 3166 3779 3780 3779 1675 3780 1675 1433 1102 3390 1102 3390 1433 313 3781 3226 313 3226 3781 163 1385 163 1386 2987 1049 3248 3782 3507 3248 3507 3782 2421 599 3702 2421 2202 3361 169 3508 170 3508 3783 3784 3541 3784 3541 3783 1974 3785 2007 3785 3786 961 3786 1908 3787 565 175 3787 2969 3788 3788 2968 3789 589 3789 2835 589 2835 3790 1641 3790 2267 1641 2267 3791 3685 2939 3791 2939 3685 1678 2943 2943 1679 1344 2456 3792 3334 3792 3793 3334 3793 267 3794 1893 3794 1893 267 3795 2963 3796 2963 3796 3795 2967 3797 2967 1731 3797 1731 1770 196 1768 196 2130 3466 3466 3420 3798 3520 3799 3798 3799 3520 1465 1160 1465 3800 1160 3800 3801 649 3801 3802 3802 649 1732 1940 1732 65 1940 65 2475 3501 2575 2475 2575 3501 1204 983 3056 1204 2687 1517 2687 1515 222 3395 222 3803 3395 3803 3574 1040 1520 3574 1520 1040 186 3804 3697 186 3697 3804 49 3805 1241 3805 1241 49 1295 1996 1295 1997 2107 3806 3807 2107 3807 3806 648 1455 3808 1057 1058 3808 3210 2892 1073 3809 3651 3809 3183 2341 2341 3184 1443 867 865 1443 1746 3461 2229 1746 2229 3461 2702 3810 2703 3810 3601 3811 1234 3601 1234 3811 1379 3812 3813 1379 3813 3812 701 3687 701 1672 1352 3814 1352 3815 3814 3815 2703 3816 3816 3810 3211 1466 436 3080 435 3080 117 3817 117 2181 3817 2181 2653 3556 2653 3818 3556 3818 3244 3600 143 3600 3819 1019 3819 3820 1019 3820 1119 902 902 3555 1831 3140 1836 1831 1836 3140 3821 220 221 3821 2003 2256 174 2256 174 2003 2741 1503 2741 927 927 1503 3822 3544 3822 1944 1062 2013 3823 761 3824 761 3824 3823 2932 303 303 2933 3825 526 873 3825 1533 2162 1533 2164 2357 2259 268 2259 268 2357 448 3157 504 3157 3826 1021 3826 1020 2326 2042 3827 542 3827 974 717 2254 2076 2233 2234 2076 2144 2069 2469 2144 2524 2344 3119 3828 774 3828 774 3119 2742 325 3829 3379 3378 3829 11 3830 3830 3061 933 3831 3832 3831 3832 933 3833 3834 3167 3834 3167 3833 247 3621 247 3620 3434 2807 3434 2196 1669 2992 1669 2878 2676 3521 3835 2676 3835 3521 339 3836 339 2177 3836 2177 3837 3091 3837 3838 3838 3091 1860 3839 3839 1861 3840 943 1477 3840 1477 943 3841 3664 1125 3841 1125 3664 3516 2849 3516 534 534 2849 3842 2362 794 3842 794 2362 3843 3844 3843 960 3844 960 3624 2272 2272 3623 1566 1023 1566 1024 955 1943 955 1942 2549 896 2709 896 2368 2774 3845 2368 3845 2774 3774 3846 3773 3846 1424 3600 3167 334 952 3847 950 3847 1527 3848 1527 2352 2352 3848 150 3849 149 3849 929 3168 3737 2700 3737 2701 3850 3851 3852 3851 3852 3850 1174 1635 1174 1634 3853 776 3853 1237 1399 813 3410 813 3410 1399 3089 2238 3854 2238 3854 3089 2359 1536 3855 1640 3855 1639 2913 3856 2913 3653 3856 3653 3857 312 3857 40 2787 1251 2787 2515 2515 1251 3858 3648 3721 3648 3721 3858 3762 3859 3284 3859 3284 3762 3860 3861 3860 3862 3861 3862 600 3087 3086 600 3863 2261 1363 3863 1363 2261 2474 3274 3864 2474 3864 3274 3865 987 1085 987 1085 3865 3801 1662 3801 3825 1662 3825 1597 1005 1005 1596 3866 3867 3866 1511 3867 1511 3868 1962 1961 3868 288 3332 287 3332 2565 503 3090 3854 3090 1086 3090 671 1331 1781 1781 1332 1985 3869 740 3869 740 1985 3594 3800 3594 1160 3870 1240 3252 3870 3252 1240 2999 2013 1495 2013 2510 788 3871 2510 3871 788 1714 365 3872 1714 3872 365 1647 3873 900 1647 900 3873 3874 3875 1392 3874 1392 3875 3222 2281 3221 2281 3793 2059 3334 2059 3779 821 3876 3779 3876 821 2711 3877 2711 3878 3877 3878 2662 3205 3205 2661 3295 3879 2049 3879 2049 3295 1940 3337 3337 1390 2578 830 2578 829 3448 1613 21 541 3167 1869 1869 3833 1433 3389 3880 1754 1898 3880 1100 3719 2655 3719 2330 1584 1371 3881 3882 3881 3882 1371 1628 2607 3883 2607 3883 1628 3884 3664 3884 1746 3664 1746 480 3885 480 3886 3885 3886 3372 1382 3887 1382 3887 3372 3888 990 3888 989 3889 3890 3563 3890 3563 3889 3891 1054 3892 1054 3892 3891 633 3893 633 502 502 3893 741 3249 1012 3249 3894 3060 3894 2948 2948 3060 1195 3217 1195 1448 3217 1448 3497 512 2413 3497 1208 2758 1208 2976 3642 85 3643 85 3895 1705 326 3895 3896 2543 2542 3896 1542 2040 3357 3897 3658 3897 933 1232 1609 1232 3630 3898 3630 3899 3899 3898 3900 3901 3900 3494 3901 3494 3902 3161 3902 1263 3532 3903 3904 3903 3904 3532 3132 3775 1086 3132 1086 3775 109 3006 109 3005 3905 2165 3905 3906 3906 2165 694 568 694 768 3907 2867 3908 2867 3908 3907 1718 689 1718 2239 689 2239 1972 2827 1972 2829 772 2784 2170 3198 3507 3909 3782 3909 880 523 523 879 3910 2210 3911 2210 3911 3910 1803 3912 3913 3912 3913 1803 2099 2136 2099 3619 3619 2136 3701 3914 3451 3914 3451 3701 826 2923 3215 826 3215 2923 951 2774 1192 951 1192 2774 3304 3915 3304 3689 3915 3689 13 1133 2405 3661 2405 1196 3313 3001 71 3068 574 71 3316 2418 3315 2418 3916 3917 3916 1494 1494 3917 296 1681 46 1681 3071 1176 3071 1235 1292 2719 3290 2719 3290 1292 1860 3918 1862 3918 1083 986 1085 986 3423 3348 3423 3349 3193 2531 1316 3193 1316 2531 3919 3819 3919 3820 1799 3920 1799 3091 3920 3091 2436 989 2438 989 3921 2156 3921 559 3922 3218 3217 3922 3366 2955 3366 3923 3923 2955 3561 3924 3924 3562 3923 2198 2032 3923 2511 2779 3553 2779 3925 2540 3925 2635 2635 2540 3451 3926 3701 3926 1218 2164 2164 2994 1494 2250 3916 2250 3539 3927 3073 3927 3073 3539 3928 3929 3930 3929 3930 3928 3209 655 3208 655 3783 3931 3784 3931 969 3932 967 3932 3599 3307 2084 3933 2083 3933 3625 3665 3625 3355 918 395 3934 3935 3936 3935 3936 3934 2090 1790 56 3937 3938 3937 3938 56 1584 2914 1584 993 2972 3080 2566 2972 3014 2374 2374 3012 2277 2633 3867 3939 925 3867 925 3939 3940 3098 3940 1933 1933 3098 3941 2836 2087 3941 2087 2836 3942 2759 762 3942 762 2759 3943 3098 3943 3940 1876 1493 1877 1493 1306 3843 2175 3843 2175 1306 3944 3576 3944 440 3576 440 1251 3945 3946 3945 3946 1251 3346 1645 3346 1949 481 3787 2752 3787 621 1976 1978 621 3947 3948 3947 3949 3949 3948 283 2440 283 2818 1375 3740 1374 3740 2521 3950 2521 3951 3951 3950 2326 3952 2327 3952 1751 3953 3953 3678 3548 2796 3547 2796 895 3534 3954 3534 3954 895 3955 558 3788 3955 3788 558 695 768 1502 3087 3087 1485 3956 2848 3956 437 437 2848 3957 3109 3957 2299 3109 2299 2875 3772 2875 3958 3772 3958 3919 2542 3919 2544 3959 3143 3960 3143 3960 3959 3035 1639 3718 3035 1938 3239 2630 127 3961 2630 3961 127 1402 3481 1068 3481 3693 3116 3281 3116 302 2380 3962 302 3962 2380 2811 3743 3743 3368 3963 3588 231 3588 231 3963 3126 1144 3778 2270 3778 2203 2203 2270 3964 3422 1526 3422 1526 3964 3965 3943 3966 3943 3966 3965 3967 3968 3967 3969 3969 3968 3536 3970 3971 3536 3971 3970 3122 3972 3122 3973 3973 3972 3974 3975 3974 3235 3235 3975 3268 2762 3268 3976 3976 2762 1677 293 3795 1677 3795 293 1079 3180 1079 3424 3180 3424 3372 226 1634 427 2705 1338 2705 2496 2496 1338 3297 3604 3977 3604 3977 3297 891 2879 890 2879 1214 3978 2713 3978 3979 3457 3279 3979 3279 3457 3980 3981 2237 3980 2237 3981 197 2173 2462 2173 2462 197 3852 3982 3850 3982 3583 805 688 805 1881 3602 3983 1954 1122 1954 1122 3983 3323 1666 3323 3162 3984 3985 3984 3986 3986 3985 474 2761 418 3987 418 2777 2777 3987 3988 3989 286 3989 286 3988 3017 1840 382 3163 380 3163 1519 3990 3991 3990 3991 1519 3291 3976 791 125 3992 730 3992 732 3200 207 3993 2645 3994 2645 3994 3993 3995 3996 3995 2603 2603 3996 1250 2893 3150 2569 2172 3150 2172 2569 3444 3997 3296 3444 3296 3997 3048 2214 578 1943 3998 3999 3998 4000 4000 3999 1982 4001 1982 4002 4001 4002 4003 2651 4003 2349 2651 2349 3979 1863 3457 1863 1016 683 1016 2167 2167 683 4004 3401 3402 4004 3855 643 3855 645 1862 1508 3528 1862 3528 1508 3914 4005 4006 4005 4006 3914 1039 2721 4007 1039 4007 2721 2964 3828 3119 2964 1897 3011 4008 3789 3245 3789 3245 4008 3484 4009 3484 4010 4010 4009 4011 329 4012 4011 4012 329 3224 2111 2109 3224 1669 3972 3469 4013 3469 3868 3868 4013 3315 4014 3315 4015 4015 4014 2681 2845 3066 2941 2608 3066 2608 2941 3933 990 2083 990 3102 1065 1065 3101 3319 3622 1577 996 4016 3109 714 3109 714 4016 713 4017 4018 713 4018 4017 1945 2155 1945 1368 4019 4020 4019 4021 4021 4020 2328 2073 1582 2073 3153 4022 4023 4022 4023 3153 1285 3182 2695 1285 1467 1729 1060 1467 1060 1729 3752 4024 1496 4024 2699 379 2699 377 3758 1321 3759 1321 2900 4025 3560 4025 2460 2625 2090 2460 4026 101 4026 100 2844 4027 4027 2843 1243 318 2905 318 2905 1243 3 306 313 1320 1260 2642 1704 2378 2743 2378 4028 2192 4028 2194 3333 3940 4029 3940 4029 3333 1123 4030 1123 4031 4030 4031 3544 853 3822 853 1887 4032 3771 4032 3644 4024 1761 4024 1535 2025 1535 2162 4033 1610 2399 1610 2399 4033 1304 1480 942 1477 3308 3328 1121 3328 1376 588 590 1376 4034 1162 4035 1162 4035 4034 4034 4036 3149 4036 3149 4034 1565 1023 844 827 844 1289 827 1289 4037 2122 4037 2123 778 4038 778 1967 4038 1967 4039 1544 4040 1544 4040 4039 51 4041 51 1857 1857 4041 3063 2442 3063 3393 3393 2442 316 2905 4042 3951 4042 3950 3813 4043 212 3813 212 4043 3162 3324 4044 2616 3865 2616 3865 4044 903 2846 4045 903 4045 2846 3225 3286 3225 3287 3723 4046 3724 4046 4047 4048 4047 1033 4048 1033 765 4049 764 4049 2022 1283 3229 1283 4050 3933 4050 990 2519 3050 4051 3050 4051 2519 3425 720 3425 722 3066 2111 3066 2110 1866 3040 1866 491 715 1929 2765 715 2765 1929 2624 2093 2623 2093 2722 3173 1552 3173 2109 2892 2877 1668 2974 1668 4052 3952 3532 3952 3532 4052 250 1239 252 1239 783 3434 3500 4053 2720 3500 2720 4053 4054 1506 3186 4054 4049 4055 3542 4049 3542 4055 4056 1812 4056 1210 2199 1468 3886 2920 480 2920 992 856 992 1583 856 1583 4057 4058 4057 4059 4058 4059 863 2005 16 863 4060 4061 4060 4062 4062 4061 3590 1388 4063 2243 3714 2243 3714 4063 2892 1734 3825 649 1615 1663 2213 1663 2213 1615 747 3242 748 3242 1973 1645 481 646 483 646 3707 3294 3707 525 3294 525 3443 464 3443 466 2560 2567 4064 2567 4064 2560 2634 4065 2634 1453 1453 4065 2876 3958 2772 2876 2772 3958 2894 3672 1533 2994 3461 4066 3459 4066 2771 1910 2610 2771 2610 1910 4067 3847 4067 952 2527 220 2527 219 3649 2002 2003 3649 3901 4002 3494 4002 4068 3508 4068 1763 1154 4069 2855 4069 2187 101 4026 2187 33 763 33 761 3233 871 4070 871 4070 3233 226 1382 2081 226 3139 259 722 1446 713 4071 711 4071 2953 4072 3706 4072 3706 2953 157 4037 157 2123 4043 3812 3516 1913 3516 1914 610 1851 1018 2975 1016 2975 4073 426 424 4073 4074 736 735 4074 2902 2658 2657 2902 4075 3747 3944 4075 3944 3747 3968 3460 4076 3460 4076 3968 754 789 3992 789 3992 754 3266 4077 75 3266 75 4077 3794 4078 3988 3794 3988 4078 25 3026 419 25 419 3026 3301 1429 3301 1427 528 1088 527 1088 944 1631 4079 1631 4079 944 4080 868 4080 2474 2474 868 3982 4081 3982 1787 4081 1787 3410 4082 4082 1493 991 3650 3650 3454 733 215 1635 215 3427 3606 4083 2616 4083 3865 2132 2516 386 2132 3695 19 19 1098 4084 2733 4084 2735 729 182 729 2624 182 2624 2737 3836 2737 83 3836 83 299 4085 3005 4085 648 564 648 4086 564 4086 3758 2612 2311 4087 707 4087 3959 3142 3196 57 3196 55 561 54 3720 757 2899 3831 3832 2899 3153 4088 91 4088 1874 4089 1981 4089 4034 4090 1590 4034 1590 4090 4091 177 176 4091 4092 4093 2406 4092 2406 4093 1649 2404 1649 376 2404 376 3169 2231 3695 2493 330 3996 330 4094 4094 3996 23 747 1727 1467 3977 3332 288 3977 3024 3082 3024 4095 3082 4095 2372 965 592 965 3679 474 3679 4096 474 4096 4097 3133 2841 3133 2841 4097 2813 1287 1285 2813 4098 1212 4098 1213 1620 3079 3868 3470 1961 3470 1888 2790 1483 881 1483 2424 2538 4099 3254 4099 723 642 723 4100 4100 642 882 4101 3206 882 3206 4101 4102 3460 4102 4076 4103 911 2108 4103 2108 911 1227 4060 1227 4062 928 1031 3015 1031 2491 2798 3666 3188 3666 3101 979 965 3845 2077 3845 4104 4104 2077 2920 2478 3696 4005 4105 3696 4105 4005 3078 3398 3078 2924 3808 4076 4102 3808 4106 4107 4106 3924 4107 3924 3973 2974 1667 2974 1667 3973 1907 3374 1907 836 269 915 4108 915 4108 269 3088 2654 2654 3089 3392 4095 4095 38 3991 1518 4057 3929 4057 3930 2488 1244 4109 2488 4109 1244 4110 4111 4110 4112 4112 4111 1872 1758 1872 2917 2917 1758 3552 3732 3385 739 3385 738 3967 1783 3967 1784 4113 2320 204 2320 204 4113 3700 3234 4114 3700 4114 3234 1987 1396 1986 1396 4115 4116 4115 3837 3837 4116 4117 590 4117 3503 3370 1727 4118 2281 3682 4118 3682 2281 3335 2043 3531 4119 1651 4119 3841 1675 4120 1675 4120 3841 4121 4072 2953 4121 4122 734 4122 134 1530 1331 2655 4123 3501 4123 2768 3932 2768 967 2034 2943 2034 3820 2943 3820 3356 3559 3559 400 4124 3535 4124 3533 4043 4125 4125 3812 3333 123 3940 123 4126 1989 4127 4126 4127 1989 2646 4128 2646 3351 4128 3351 1087 3698 1295 3698 1186 2829 1187 2829 1590 1025 3065 1134 1381 3065 1381 1134 4129 2701 4129 2486 4130 4131 4130 10 4131 10 3322 4132 3322 710 4132 710 1089 1526 1089 3964 1869 4133 1870 4133 1225 3734 4134 981 4135 4134 4135 981 496 411 2659 411 3676 1059 2912 428 2417 428 4136 628 4136 4137 4137 628 2896 2193 4138 3365 2033 4138 2033 3365 4139 3460 3459 4139 4140 4141 3891 4140 3891 4141 1639 643 1584 992 20 1098 4142 3849 4142 150 4143 869 4143 4144 869 4144 736 3041 4074 3041 1528 2907 1528 4145 4145 2907 507 2906 4146 4147 4146 1274 1274 4147 4148 168 166 4148 3783 4049 3541 4049 4149 3332 3333 4149 2407 1196 1858 2978 1604 3093 3766 3093 1595 604 4150 604 4150 1595 893 3411 893 1519 4151 511 4151 510 1114 3525 3525 1115 2890 1654 1934 3045 1934 1309 1309 3045 4152 236 235 4152 2145 4153 2147 4153 1942 3452 4154 1942 4154 3452 3096 4155 807 4155 807 3096 2264 1953 3662 2264 1545 227 2210 227 1757 2740 602 4156 601 4156 3044 3745 1593 833 834 1593 4157 3891 3892 4157 4158 4066 4159 4066 4159 4158 5 2171 585 1453 2331 3877 2754 3877 3650 4160 991 4160 4161 3359 1342 4161 1342 3359 136 2460 4162 2460 4162 136 4163 4164 4163 2056 2056 4164 3962 4165 3962 3720 4165 3720 97 3910 343 3910 1349 3021 3021 651 2802 714 714 1929 475 793 50 475 1437 587 1437 586 2925 4166 324 2925 324 4166 2293 3575 2723 2293 1891 124 1891 4167 124 4167 3957 2298 3256 3957 4168 565 4168 564 118 1111 3550 1111 4169 2253 4169 447 2253 447 4170 2845 2846 4170 3908 2868 1146 3041 1146 3042 2019 1993 4171 2019 4171 1993 3663 1125 2129 996 1298 2129 1298 996 1458 3595 1227 3734 4060 3734 3645 2026 3645 3849 2026 3849 4172 1080 4172 283 3859 1372 4173 1372 4173 3859 2517 4127 4127 821 1507 716 1506 716 1069 4174 4174 2131 3742 3264 4175 3264 4175 3742 4165 757 4176 4177 2431 4176 2431 4177 3586 4178 4178 3587 2554 1753 3346 2554 4179 1333 4179 1332 2519 200 4180 2197 4180 425 2770 1383 3735 2770 4181 3313 4181 2874 2452 258 3915 2452 3915 258 2799 2399 4182 3782 3633 3782 3633 4182 1050 3688 2157 2873 2908 2157 1127 3437 2088 3437 2088 1127 4183 3511 4103 4183 4103 3511 2128 3608 3466 2128 3526 3381 4184 4185 4184 4186 4185 4186 4187 3741 4188 3741 4188 4187 4189 2371 2370 4189 579 4190 577 4190 1655 2068 2119 1655 4191 3878 4191 3877 162 318 160 318 4192 3727 4192 3363 1140 4193 2244 4193 2244 1140 3377 1077 886 1681 886 1222 452 959 451 959 1226 4194 4195 4194 4195 1226 3502 4196 3670 4196 1621 2909 1619 2909 3641 2314 292 3641 292 2314 2001 2184 4197 2184 4197 2001 596 1389 1389 2730 140 4198 3552 140 3552 4198 3123 2592 3123 704 4199 1236 1614 1236 1614 4199 2995 4200 2995 2584 2584 4200 2815 4201 4202 2815 4202 4201 3481 1070 1345 3985 1347 3985 4203 469 4181 4203 4181 469 4204 4075 3944 4204 3364 2951 3364 1795 3578 440 4205 3861 4205 4206 3861 4206 4207 3318 4207 4182 4182 3318 476 839 690 839 4208 1048 4209 1048 4209 4208 3025 1340 3406 1340 3406 3025 3802 1969 1970 3802 2497 2705 3224 1466 1466 2111 3202 3339 4210 4211 4210 3710 3710 4211 3054 1748 3754 1350 4212 1350 4212 3754 3725 4133 1869 3725 4213 2864 4213 934 2349 3818 4214 2349 4214 3818 1778 4079 1778 4152 4152 4079 2535 3792 2797 2442 429 1634 2466 1634 2466 429 3358 1503 3359 1503 2932 304 1224 361 1223 361 3182 2813 2360 2813 3501 809 2475 809 1468 2656 1469 2656 3630 3888 4215 4216 4185 4215 4185 4216 3112 2829 3112 2828 4217 4218 4217 3129 4218 3129 2326 3310 2686 3712 2686 3710 4219 188 4220 188 4220 4219 898 2410 3432 2410 3432 898 2108 4221 2107 4221 2206 2313 4222 280 4222 3040 4028 2800 4031 4223 4224 4223 4224 4031 1844 1472 1844 1471 4225 2062 4225 2061 2841 4226 4227 4226 4227 2841 1769 3327 2451 1769 2691 1093 1092 2691 2598 3907 3907 2640 4228 4229 4228 3176 4229 3176 2332 3592 2494 781 1888 2494 4230 2725 4230 2726 3303 2573 3303 3543 2573 3543 2671 3571 3571 2670 1034 406 648 4168 2255 2152 2706 2152 4231 384 4231 383 1373 4232 4232 1372 4233 4234 4233 1885 4234 1885 95 3499 1867 95 2821 4235 4236 2821 4236 4235 1495 3917 4237 2928 2927 4237 1714 1783 1797 776 3449 84 82 3449 2801 2193 1831 516 2827 4238 3042 4238 3042 2827 4018 3030 4018 3029 2518 1396 4059 3897 4057 3897 386 3921 3921 2132 3174 153 583 3174 583 153 1764 1478 942 1478 3765 2772 705 3765 4239 4240 4239 4241 4241 4240 3183 2342 126 4242 4112 126 4112 4242 2363 2810 756 2810 3593 1229 3593 721 721 1229 2949 2125 4243 2949 4243 2125 3669 2342 3668 2342 4132 2508 4132 404 3549 2916 2916 3548 4244 3849 2026 4244 3936 2844 3936 1441 1441 2844 4159 4139 4159 3459 2581 3692 3039 442 2322 442 3948 1364 4245 3948 4245 1364 1223 4140 361 4140 1674 1096 1674 2551 2576 1462 1461 2576 347 3398 3078 347 4087 4246 4087 4247 4246 4247 4248 606 2220 4248 2534 2914 1622 2914 786 3254 785 3254 4249 1838 4250 1838 4250 4249 4251 1797 4252 1797 4252 4251 4253 879 3483 4253 1164 2776 1970 4014 1413 1970 1413 4014 1052 4075 4204 1052 2959 2013 2249 2013 4254 2443 1288 4254 341 4233 341 1885 1231 4255 2447 1231 2447 4255 2743 2377 1199 2377 1199 2743 1205 1794 1205 4256 1794 4256 2544 4257 2580 4257 3251 4241 3251 4240 3388 4037 287 3388 287 4037 4258 3924 4258 4107 4259 2062 4259 4225 4260 3610 4260 2825 3610 2825 2656 390 2956 390 2956 2656 696 4261 4261 609 3898 2437 3888 2437 3888 3898 2903 4262 2808 4262 4110 2559 4110 2560 3880 3655 3347 3880 689 4263 1718 4263 960 451 1306 960 1306 451 1861 4264 1899 1861 1899 4264 3921 387 387 2156 3366 4265 3366 2954 4265 2954 327 3895 4151 4266 511 4266 1537 1475 3588 2927 3587 2927 2124 26 2124 25 1915 3302 1552 3302 1855 1637 1855 2863 1016 2189 472 2225 4222 3522 4222 2676 2676 3522 539 1123 3046 539 1806 3920 4267 1806 4267 3920 4106 4268 4107 4268 4269 3156 4269 449 2419 1997 2419 2467 4270 3891 4270 1054 2711 4271 3596 2711 3596 4271 1868 2685 1868 2684 4272 1412 4272 1411 4248 3609 3609 606 2570 34 2570 36 537 800 799 537 2908 4273 4273 2157 48 4274 3029 4274 3029 48 2687 440 3578 2687 3676 4275 3676 1994 4275 1994 4276 1480 4276 3722 1480 3722 3326 2043 3326 3335 3373 4277 3070 4277 4278 723 4278 725 2225 3975 3235 2225 3836 2601 4279 3581 4279 3580 1967 3365 1967 4138 3934 4027 3790 4027 3790 3934 3716 3746 4280 1942 4280 1944 724 4100 1237 1921 1801 4267 4267 1807 974 3145 974 3144 3032 3985 2749 3654 4281 3654 4281 2749 2722 3227 2722 2854 1298 4282 3084 1298 3084 4282 2325 4160 4160 2324 48 2520 4018 48 4018 2520 3409 4283 3409 3856 3856 4283 31 2864 31 2861 2864 2861 3050 2182 2514 2182 3068 4284 3069 4284 1184 3810 1184 3816 1766 521 2644 521 2720 1315 2720 4285 1315 4285 2739 4272 4286 4272 4286 2739 2554 2387 2552 2387 4287 1160 1159 4287 4288 1636 4288 973 1907 4008 232 4008 2962 4038 1378 4038 4289 3668 4289 3231 3486 4290 3485 4290 4291 4292 4291 4178 4178 4292 3199 3096 3199 4155 4293 1249 2234 4293 4184 4215 547 2144 547 2142 3835 3692 3835 2581 3936 796 796 3935 1600 1327 1403 1600 3660 7 3660 499 1614 2776 2776 4199 46 1682 358 1109 1606 1109 1606 358 3123 702 3530 303 2438 3888 3615 4294 3615 543 4294 543 3612 449 3612 447 914 4231 2435 228 2605 3046 2213 4295 468 4295 2430 2593 2430 2592 2917 1759 3549 2917 3832 932 275 1003 277 1003 3015 640 3311 1151 3311 3537 2602 4296 4296 1356 3535 895 2849 535 1113 4297 4298 1113 4298 4297 3598 41 3598 2320 41 2320 666 2747 666 2746 3817 2182 3817 3050 4299 4300 4299 4301 4300 4301 3868 4302 4013 4302 4303 2626 4303 2459 2459 2626 540 391 391 2906 2040 285 1363 2998 4304 2812 4304 2668 3686 3560 3686 4305 3560 4305 4186 4306 2885 4306 2885 4186 3215 2474 3215 868 1586 4069 202 1586 202 4069 1884 4307 1883 4307 1873 4089 2293 3375 3375 3575 4296 1357 3458 1863 1632 909 2074 909 2074 1632 4308 290 310 4308 310 290 4309 716 3729 4309 525 4310 3707 4310 4311 2030 2031 4311 1624 3195 3161 2930 2929 3161 3453 3914 841 2721 840 2721 550 1323 550 2948 477 3011 2856 477 3874 566 4157 566 4157 3874 1068 4174 2997 3330 4312 4170 4045 4170 4045 4312 1671 4069 2860 4069 2860 1671 1629 2607 4313 1962 1963 4313 3412 1074 4314 1889 4314 2812 192 3398 1595 570 603 1595 584 778 1378 778 1520 4315 1518 4315 2991 4316 4316 2515 20 3752 3159 403 3159 1984 403 1984 261 187 2315 2152 2795 2152 3612 1965 1742 4317 2300 1742 2300 4317 255 3571 4318 2471 3852 4318 3852 2471 324 4319 322 4319 3931 4320 4321 4320 4321 3931 595 4292 3445 4292 3445 595 4322 1406 4322 1405 3107 482 943 3107 1278 549 1278 548 519 3889 3889 2925 624 2945 623 2945 3051 4067 3326 4323 4323 2043 1816 1729 1815 1729 4324 4325 328 4324 328 4325 2839 229 4288 229 4288 2839 3014 4326 4326 3013 4327 867 4327 4263 4263 867 3564 2850 3007 3564 540 2030 2030 541 1440 361 2787 2893 2687 3712 3712 1515 712 675 712 674 4046 4328 3723 4328 3187 910 3188 910 4092 2215 4281 2215 4281 4092 4329 3734 4060 4329 955 4330 579 4330 1130 1358 3770 1130 3770 1358 145 2345 4051 3656 4051 3817 3817 3656 3133 3400 4331 3133 4331 3400 2888 3381 2336 3381 968 4332 3106 4332 3106 968 4333 1830 1843 4333 1843 1830 2158 387 2252 1837 1814 3530 1814 3529 3502 795 3137 4334 3674 4334 3674 3137 3739 4335 3739 4161 4161 4335 2866 3634 1098 3752 2179 3260 2179 1336 1762 3897 4057 1762 4336 1517 3578 4336 3578 1517 4180 2920 480 4180 3570 3085 3568 3085 1063 4194 4337 1063 4337 4194 3992 626 3992 627 3853 775 594 4292 4338 4187 4338 3741 538 4339 537 4339 3457 4201 544 4201 2292 4228 2290 4228 1996 4340 4341 1996 4341 4340 367 1145 1143 367 4258 4268 1636 2839 1636 2838 4342 3672 4342 2894 3921 1601 1198 4343 1197 4343 4255 3034 4255 2448 2448 3034 3963 158 1161 4034 4344 2486 4344 2485 3640 2935 113 3640 944 1130 2533 1258 2533 1260 4345 1610 4346 4345 4346 1610 2466 1998 2667 3726 3726 2668 3514 3111 753 3514 753 3111 4012 4152 4347 4012 4347 4152 3295 4348 3879 4348 2363 2809 1375 3741 4338 1375 345 4349 2585 4349 2585 345 2596 863 2596 2005 4350 173 172 4350 74 3264 74 3266 173 2139 2140 173 3725 4055 3724 4055 3395 2592 3123 3395 4190 3815 577 3815 3056 2970 3056 4156 4156 2970 2852 511 1499 511 1499 2852 2110 2941 4351 4328 4351 4046 814 3985 3984 814 2124 419 1565 3405 3406 1565 1872 663 1872 664 2587 2963 2586 2963 49 475 1859 4053 3585 1859 3585 4053 4146 2171 2758 989 1275 1740 1275 1739 267 1894 266 1894 662 1784 2515 3143 4316 3143 3698 1997 4352 1429 4352 3301 3037 2324 4353 3037 4353 2324 3210 3800 4354 2805 2806 4354 3728 1506 2431 1712 1712 2432 3686 3611 4355 945 1081 4355 3023 4356 1732 4356 1732 3023 3675 2272 4357 4312 4357 4170 4358 3640 4358 3639 78 3817 1843 561 1843 54 4359 2572 4359 572 2394 4360 2394 4317 4317 4360 4361 2653 3047 4361 3047 2653 3870 3358 3870 335 3358 335 4362 4363 4362 3227 3227 4363 3850 4081 3511 4364 4365 3511 4365 4364 4366 335 3870 4366 2202 445 4367 795 3502 4367 921 1664 1786 673 3003 2328 3003 180 2328 180 4039 4368 4039 4369 4369 4368 4370 4158 4371 4158 4371 4370 1525 4255 2564 4255 4372 1365 4372 1366 3425 4373 3425 1792 4373 1792 2725 514 4374 2725 4374 514 4375 4376 548 4375 548 4376 3896 3321 4257 3896 4257 3321 4058 3533 4058 4377 4377 3533 857 4343 1197 857 1420 963 1420 1980 1980 963 2856 839 2197 2154 782 2154 782 2197 4378 1499 4378 1500 3613 447 2044 1576 3387 1964 3387 3613 2773 2375 1423 2773 2014 2125 2014 2126 401 1959 402 1959 2448 4379 4379 3034 3627 3803 3627 3395 437 4380 4381 4380 4381 437 4214 4382 4382 3818 1114 2838 1636 1114 3619 2306 1530 1781 1782 1530 4224 4383 4224 2847 2847 4383 122 2201 444 122 444 2201 3273 2628 3273 2627 1802 3913 4384 4385 4384 4325 4385 4325 4386 3402 4386 3400 1192 1935 4387 3477 4388 3477 4388 4387 2565 3369 2565 139 3369 139 1314 2428 4389 1314 4389 2428 4390 1581 4390 1580 3338 2872 3494 3338 1262 332 2742 2563 1199 2742 4391 616 2885 4391 4392 2219 3998 2219 3998 4392 3558 3818 1702 3408 3408 3309 3711 3250 4210 3711 4210 3250 4083 987 4112 2637 2559 4112 2559 2637 1813 2551 701 2551 701 1813 2922 4186 2922 4185 3367 4252 728 4252 728 3367 2882 240 1530 2882 3756 3524 4042 3756 4042 3524 3382 1063 4393 2677 4393 2676 2401 4072 2798 4072 2159 3682 2768 3682 2768 2159 210 941 210 750 4104 2658 2369 4104 2369 2658 1820 1728 1820 3371 2557 2437 2556 2437 1377 2906 4394 4395 4396 4395 4396 4394 1592 28 2973 1592 2098 4106 2098 3561 4106 3561 3609 4397 4397 3610 2109 2891 4398 373 4398 1575 1585 3942 2855 1585 2855 3942 1679 4317 1679 4360 4212 749 3504 4212 1744 149 1744 1951 149 1951 4399 4400 4399 1477 1477 4400 2579 2280 2530 3805 3837 3805 3837 2530 3728 4054 4401 2 4401 3631 1392 3280 1392 3281 4402 55 4403 55 4403 4402 1756 533 531 1756 503 4404 501 4404 607 2825 1763 2825 3961 2866 3661 857 3876 857 3876 3661 3858 4405 491 3858 491 4405 1737 4194 1737 4195 370 147 147 368 3222 4118 94 3022 96 3022 4406 1278 4406 548 1470 164 3290 164 102 558 1773 390 389 1773 562 2940 2940 1842 3631 2937 4407 3631 4407 2937 1733 4271 1733 4408 4271 4408 2191 4409 2535 4409 4410 3096 4410 3199 3414 2606 3414 670 3791 3387 4411 4412 2047 4412 2047 4411 3966 3445 3446 3966 1310 2201 4413 1310 4413 2201 3290 1912 1472 1912 2106 1553 3237 1553 3237 2106 2899 2371 2898 2371 115 76 4287 1618 4287 1616 2632 3677 409 3677 2563 4414 751 4414 4415 3689 3304 4415 2948 442 1875 2433 1875 2432 4416 3503 4416 3670 3809 4417 3651 4417 2199 2956 2956 2198 2781 4054 2781 4418 4418 4054 3723 4133 4015 649 3802 4015 3256 4016 3255 4016 3979 3751 3279 3751 3732 4198 3732 141 141 4198 2241 826 826 2240 3226 1320 2780 2944 4071 4017 4419 4017 4419 4071 2787 2528 2787 2869 2528 2869 2646 4420 2646 4421 4421 4420 4422 709 4422 1020 709 1020 4423 4424 4423 1965 4424 1965 2484 3367 4257 2543 1461 3736 2460 2092 136 2092 2530 1412 2625 2459 3129 2113 4217 2113 4425 4408 4191 4425 4191 4408 3923 3365 3994 4426 2645 4426 4394 1035 1035 4395 3850 4047 4047 4081 3084 1299 475 3805 1925 4286 144 3600 2908 2384 2384 2872 2990 791 1890 791 3505 2505 3504 2505 3693 630 2309 4427 2309 4428 4428 4427 4091 434 433 4091 809 4123 4429 3675 4429 2272 4354 2984 3147 2984 3147 4354 3454 4071 856 3454 856 4071 2176 3408 1307 2176 4430 2947 4430 4431 4431 2947 2626 2759 2626 1790 3465 3377 3465 1094 1575 933 3330 3671 1786 3671 1786 3330 3251 3493 3251 4432 4432 3493 1427 4433 4433 1428 1449 4434 4434 1245 637 1939 637 2350 2783 4356 65 4356 1262 752 3126 3246 3795 155 2963 155 4435 4239 1652 4435 1652 4239 2976 1207 4109 4436 2488 4436 17 4437 864 4437 1633 2476 4438 715 1507 715 1507 4438 975 3145 4424 3565 4424 3156 3565 3156 291 3829 2066 3829 4439 2212 4439 4440 2212 4440 3004 4254 3004 1289 4254 1289 4441 4442 4443 4442 4443 4441 4218 3128 1891 2528 1892 2528 555 3828 1204 4156 483 647 483 4444 4444 647 3296 4445 3997 4445 1900 1131 4352 861 3301 861 2504 4240 4446 2504 4446 4240 275 1004 330 4325 4243 1690 2014 4243 1142 1153 3652 993 991 3652 3986 4447 3986 3616 4447 3616 2176 1249 3247 658 3246 658 4419 3030 4017 3030 3783 821 1988 3783 1988 821 4379 2284 591 4379 4260 874 4260 4397 4397 874 1335 1795 4448 3017 4448 1840 2195 207 2116 2195 3951 4449 2521 4449 653 4450 1450 4450 4451 29 30 4451 1233 4452 4452 1231 4453 1684 436 4453 4454 2645 3993 4454 1534 3052 253 4455 4455 254 2874 4189 4456 1551 1774 1551 1774 4456 3786 275 3786 1004 1694 2479 2179 2479 3593 1230 2171 1230 3706 4310 4310 4072 2104 2745 2104 2526 2730 4298 1389 4298 1446 2981 722 2981 962 568 4457 962 4457 568 3910 4332 4458 3910 4458 4332 694 4457 3021 3275 3019 3275 3995 3118 3995 1075 4459 3843 2174 4459 2174 3843 1789 2092 3152 922 81 201 201 2795 1116 4460 1114 4460 2428 1037 3515 2428 3515 1037 3662 3094 4461 2880 4461 2881 403 2509 3871 403 3871 2509 3477 645 4388 645 3890 4319 4166 3890 4166 4319 4462 4316 2991 4462 1191 1935 1401 4297 4463 1401 4463 4297 1624 2009 81 202 3932 2767 1747 3664 3926 2700 2484 2700 2484 3926 99 1546 97 1546 2608 1910 2887 1720 4342 2821 4342 1780 3345 2641 3345 2587 2641 2587 495 3208 494 3208 3388 446 1750 4464 4465 1750 4465 4464 1746 4066 659 4066 4304 4314 348 4466 1355 348 1355 4466 1736 4467 1738 4467 15 340 340 14 1117 2386 4468 177 563 177 563 4468 667 4307 1659 4469 4469 1660 3978 850 3978 337 2226 995 995 2227 3190 4470 4471 4470 4471 3190 4158 659 876 4158 876 659 4472 1371 1373 4472 3705 4473 4449 3705 4449 4473 880 3219 880 3218 2384 4474 2384 4273 4474 4273 2695 1286 1998 4341 423 3288 2729 479 4475 479 4475 2729 3390 1914 3919 4422 2544 4422 4476 3708 2534 4476 2534 3708 1368 1871 2737 2870 75 1719 4077 1719 3159 3887 4477 4478 4479 4477 4479 4478 2078 3918 1860 2078 161 4480 4481 4480 4481 161 4482 2036 4482 4483 4483 2036 2226 604 4150 2226 3683 3488 3683 3567 3567 3488 2734 3379 2734 2070 1880 4262 4136 4262 4136 1880 3004 4484 4485 4484 4485 3004 1476 4399 4231 4402 4231 3937 4402 3937 4486 4118 4486 243 243 4118 2720 3764 3500 3764 1155 3567 3683 1155 1173 4487 1202 1173 1202 4487 4365 2408 2408 3511 2605 4325 2603 4325 1086 3088 4135 4488 4489 4488 4489 4135 1426 4490 4491 1426 4491 4490 2909 2924 1619 2924 4179 2821 4236 4179 2813 4492 2812 4492 3039 441 2235 1083 2235 3727 421 1144 3126 421 4114 1571 3700 1571 1740 1365 1013 1740 1013 1365 1941 1242 1002 1242 2215 2310 2308 2215 1192 3282 3282 2774 4269 4424 602 1486 602 1485 4437 18 4227 18 4227 4437 3871 787 1588 1796 492 1796 492 1588 4493 2629 2628 4493 3082 1598 2783 1598 2783 3082 4003 1769 1768 4003 1945 1871 1073 3278 1072 3278 4023 3765 1658 4023 3252 1239 3012 506 2480 1150 1149 2480 1376 4412 588 4412 2361 2977 2362 2977 3241 667 4494 4220 4494 4219 4472 2052 4472 2200 1086 4495 3088 4495 364 4096 4496 4096 4496 364 4406 4497 4406 2698 4497 2698 3676 1032 2932 1032 4350 4498 4499 4498 4499 4350 1434 2001 1333 3400 1333 3133 1765 510 1765 2413 3786 2355 2355 1004 4294 3614 3228 695 1415 4423 1415 1965 4258 3768 3924 3768 1351 635 4500 635 4500 1351 83 4501 4501 84 1962 4400 4313 4400 740 4502 4502 3869 4503 792 2990 4503 2990 792 4371 3969 4371 3968 4367 1826 795 1826 1416 2832 1296 3204 3508 3204 4282 996 1577 4282 3510 7 4504 3510 4504 7 3049 785 3049 4099 785 4099 823 4368 4039 823 1480 2644 3722 2644 978 2934 4505 4506 2147 4505 2147 4506 3018 2271 3017 2271 4507 1470 4507 1719 4352 4435 4352 1652 4429 2273 4461 3179 4461 3177 3015 1319 4190 4508 4508 3815 1941 1241 3042 2134 887 3042 4509 4295 1165 4295 1165 4509 2268 4065 1453 2268 3021 3276 1349 3276 3680 1546 99 3680 4510 2733 4510 4511 4511 2733 305 674 2071 674 2071 305 3150 2568 2896 4512 503 4512 728 3914 2402 4474 4393 1334 4393 2541 2541 1334 3569 4282 4513 3569 4513 4282 980 4135 2213 4509 2694 2379 3188 2379 3188 2694 2435 1046 2435 3777 3355 1281 3356 1281 2945 3207 4514 1400 2591 4514 4504 1806 2020 4504 4385 4515 4384 4515 1553 3302 3821 4516 3821 4167 4167 4516 574 815 71 815 1796 3767 1796 3766 2458 4517 3121 4517 3121 2458 3220 1179 3220 1180 2047 4518 4518 4411 4519 2907 4382 2907 4382 4519 3572 2644 2671 3572 4520 4427 2216 4427 2216 4520 3168 1417 1136 2059 1136 2058 4521 909 910 4521 1815 3529 4522 2836 3941 4522 4362 4354 3173 4354 3173 4362 3207 61 4131 1711 4314 4131 4314 1711 4165 4523 4523 757 2719 1912 4524 515 4525 4524 4525 515 4526 3338 3339 4526 3761 3653 3856 3761 3716 3373 3373 3746 4527 3996 4527 3995 3980 4528 3980 3540 3540 4528 2806 4362 4529 4530 4529 1587 4530 1587 4064 2396 2561 2396 2561 4064 2693 301 300 2693 1351 3815 1351 4508 3120 1017 3120 4303 4303 1017 1927 4531 1927 3750 3750 4531 1779 3187 39 2186 2814 3278 1073 2814 4483 4532 3778 4532 3778 4483 2623 2163 2162 2623 2570 87 2571 87 2361 2978 4011 1809 494 4011 494 1809 4533 4534 4535 4534 4535 4533 2021 3598 4192 916 3426 916 3426 4192 2555 2000 1999 2555 81 1578 1578 202 574 4536 4536 815 4537 4538 4539 4537 4539 4538 2351 1568 2351 2638 308 2744 2586 1075 3119 2586 597 284 597 2039 3175 1064 2897 4512 4540 2897 4540 4512 4541 766 1990 4541 1990 766 1593 2626 4303 1593 3933 1923 1206 3238 1206 2000 878 3484 4323 3242 3848 4164 4542 4164 4542 3848 1553 680 3054 2512 1748 2512 2985 553 2985 554 2491 4543 2489 4543 1526 4542 1527 4542 4379 2286 4053 2977 364 499 364 1105 720 1792 720 3593 3593 1792 1104 2936 2936 1103 4511 68 68 2733 3142 521 2946 521 2415 1950 2415 349 349 1950 4352 1357 4435 1357 3691 4544 4544 2700 3866 1859 3866 3585 4511 2067 2066 4511 2280 3221 4545 3383 3382 4545 4399 740 4399 739 1206 2757 2756 1206 4240 3249 2504 3249 86 1725 1743 1725 1262 4546 752 4546 423 4547 4547 3288 4548 4503 4549 4503 4549 4548 4261 2558 4261 2791 2791 2558 10 1346 2697 3909 3909 2751 1748 3102 3053 3641 4550 4115 3660 4115 3660 4550 771 154 771 4551 154 4551 2627 833 2629 833 3680 3344 99 3344 4531 3886 3885 4531 314 3781 2424 2476 4552 27 4552 26 391 2046 2046 892 2303 2291 4382 3558 2279 4553 4553 2278 2921 2885 2921 4186 3702 4554 3702 1722 4554 1722 3352 2766 3352 2764 4244 2027 2523 4555 613 2523 613 4555 2784 2716 4556 2784 4556 2716 4205 2351 4205 2638 1101 2859 1101 3228 2859 3228 808 2344 4557 4558 4557 3020 3020 4558 2791 4032 3771 2791 4387 3476 4448 4387 4448 3476 1735 3199 1735 2110 2110 3199 4429 4549 4429 4548 3880 1753 3846 4339 3846 2818 4339 2818 4382 4145 1590 3149 4230 3828 1556 3828 1556 4230 4438 2765 3192 133 505 3192 505 133 3840 4302 1686 3840 1686 4302 73 190 3522 3499 551 3499 3201 2773 1423 3201 1687 3408 4271 3878 2553 1509 2552 1509 4070 3124 4070 2441 3124 2441 3499 2366 95 2366 2864 2068 124 4559 4559 4167 4560 4376 4375 4560 2779 63 2779 2515 917 270 915 270 812 3985 4333 54 1749 2952 1749 4561 2952 4561 3158 403 3826 403 3826 3158 2200 1371 3882 2200 1830 2537 2537 3016 1305 2357 4396 4562 3362 4562 3362 4396 1525 3034 3181 4563 3180 4563 4564 706 707 4564 3493 3606 3427 3493 2430 2497 2497 2593 3329 2729 3329 479 388 4522 4522 390 1164 1614 2575 3763 3501 3763 1395 3171 679 3171 2174 4565 4565 4459 2618 2851 1579 2861 3789 4411 3789 4412 4566 557 4567 557 4567 4566 4324 2786 495 4324 2243 3481 3482 2243 3360 4552 3360 26 203 1586 3203 977 3203 4340 4340 977 3141 1326 1404 3141 2503 4446 3083 373 2699 4455 463 4455 463 2699 2515 2946 2112 4568 2112 3834 3834 4568 2628 2473 2007 2773 3785 2773 2207 4361 2207 3047 3894 2322 3894 2319 3300 2403 2923 2240 2921 2240 2667 3932 2667 2767 2724 4569 3747 4569 1625 4570 307 4570 307 1625 3433 2507 2507 2409 3073 2429 3539 2429 3765 706 2082 3937 2082 3938 948 2059 4373 3424 4373 4563 4563 3424 2102 1245 2408 7 1198 1317 1198 642 861 1357 1355 861 3040 3522 3718 4380 1638 4380 3900 3864 3900 3274 2663 2958 2556 3736 2556 999 3736 999 1061 1729 916 1035 4394 916 2732 3239 4571 4454 4572 4454 4572 4571 3787 2259 2752 2259 1264 535 3962 4573 3509 3962 3509 4573 4317 4574 2394 4574 4104 3839 3839 2658 801 4575 4403 801 4403 4575 1615 3115 1615 1236 1236 3115 1255 4121 1257 4121 3526 4576 4576 1108 2864 1579 1852 3413 4311 3413 4311 1852 1528 3422 1012 3250 2609 4577 2942 4577 2942 2609 4578 733 4578 2925 4324 4579 4579 2786 1033 4081 478 4580 477 4580 3619 837 1274 1740 3755 1390 4581 3755 4581 1390 1336 3546 336 2674 4582 2796 2797 4582 2153 201 2153 2795 2016 4580 478 2016 4583 2214 3048 4583 3399 4584 1543 4584 2565 2888 2565 4585 4585 2888 4413 122 4214 4519 247 2269 1908 4443 1640 4443 1640 1908 4227 4097 3621 4065 2269 4065 2269 3621 1820 2053 4586 1820 4586 2053 602 3087 3186 4418 2391 4418 2391 3186 3984 1398 2799 4033 1451 2389 4493 2473 3259 4493 3259 2473 2318 3881 2317 3881 2191 3257 4191 4271 1758 1570 787 627 1983 627 1539 832 1539 2629 2629 832 1182 3816 4179 3400 2902 1879 1879 2658 1710 4587 1709 4587 901 4588 4589 901 4589 4588 2603 330 418 3733 3987 3733 4129 3737 2029 4590 74 4590 1890 125 2152 2975 2877 2152 1348 4251 777 1348 777 4251 2466 1174 3432 897 2427 3935 2334 3935 2334 2427 2309 1747 1747 4428 4591 2926 4591 4471 4471 2926 4134 4488 3613 2253 3791 3613 3791 2253 2327 3242 3929 4478 3929 2709 2709 4478 691 4592 1482 4592 1140 4473 1142 4473 2578 3036 4593 3049 4593 3048 1657 247 1657 3620 4594 3479 1831 3479 1831 4594 3416 3946 1559 578 1317 4343 3500 3585 4553 410 4553 497 2758 2557 2436 2758 2436 2557 281 3440 281 3441 826 2243 2243 869 4510 2066 4381 3718 979 966 2284 966 1296 245 3206 3909 2065 816 2065 576 4137 4262 2808 4137 3664 1675 2515 3945 1129 2089 1129 2088 2925 652 324 652 753 331 167 290 167 4308 3374 2835 4595 4104 3845 4595 2859 2096 4082 2897 2895 4082 2821 4596 4342 4596 2307 4597 2307 3950 4597 3950 2949 3364 4598 2637 2398 4598 552 3521 3521 3692 4599 4600 4601 4600 4601 4599 1097 4578 1097 4602 4602 4578 551 1353 2294 3375 3292 4603 4604 3292 4604 4603 2161 3061 12 2161 67 311 69 311 2403 376 257 2173 2462 257 1094 3420 3465 3420 268 4605 4605 2259 3901 3799 3900 3799 717 3013 3840 4400 4302 4400 2166 4089 4606 3236 4606 929 3236 929 4607 1439 1883 4607 4091 4468 2964 2586 1068 3949 4174 3949 2562 2105 3614 271 271 573 3781 3317 1916 3781 1916 3317 4608 2248 4608 2247 587 1436 2826 4380 1638 2826 4072 2400 4511 69 4511 311 4088 4022 4176 4512 4609 4512 4609 4176 834 4216 834 4215 3864 3494 3864 130 798 1791 1791 2427 89 941 90 941 1284 4610 3669 4610 3669 1284 4611 227 4611 226 4612 1442 4612 2054 1442 2054 1903 3960 1903 3959 3478 3597 3478 2386 2588 2641 1898 3655 4594 4219 3479 4219 2909 655 1621 655 1265 2929 621 79 4225 3006 3006 2061 1200 4414 4613 1237 4613 1921 3341 3699 2282 3341 4614 4615 4098 4615 4098 4614 3391 2231 3391 3169 2347 4616 93 2347 93 4616 4617 4618 1550 4618 1550 4617 3978 338 2894 4596 1481 4596 2396 2569 2754 1444 2754 4619 1444 4619 3979 2517 3577 4569 3576 4569 3074 3168 3074 2595 3168 2595 2817 3559 4238 2828 798 2146 798 4146 4146 2146 3918 1508 1127 3436 1127 3366 3366 3436 67 1058 126 4559 4111 4559 4111 126 612 1952 2697 1952 1782 2882 588 3789 1303 4620 4621 4620 4621 1303 1846 1464 1845 1464 2570 1531 3001 819 3001 818 3455 3429 2116 3455 4622 1038 4622 1039 477 1897 2690 215 2487 935 95 3165 3305 2453 3304 2453 1318 857 1318 859 2391 3896 4418 3896 3464 1706 3462 1706 3070 1236 2285 3257 3099 2285 3312 3044 3312 3745 3617 2193 3314 4623 4624 3314 4624 4623 1275 4480 1739 4480 3280 3875 2197 465 2197 464 3663 4409 2191 3663 3093 4036 3645 4142 4142 1561 3594 1458 4625 3075 4625 3790 3790 3075 4244 149 450 262 450 2236 2660 4626 2660 1794 1794 4626 4329 3912 4627 3912 4627 4329 4070 3394 283 678 678 281 3433 897 4416 4196 4588 3873 4588 4147 4147 3873 4401 3684 4401 1960 1960 3684 2082 384 132 387 1275 1099 1275 884 4451 2826 4451 963 1588 493 2988 3299 2987 3299 2890 3655 2890 1428 4464 4628 1749 4628 1749 4464 858 3879 857 3879 1562 4629 3645 4629 4359 3679 2302 4359 1201 2376 1201 2377 296 2650 296 3148 3148 2650 3241 2463 1931 3241 1931 2463 129 1900 847 575 2882 239 2406 4281 908 2463 3450 407 548 2142 4375 2142 3200 465 2478 465 4601 2931 4630 4601 4630 2931 1462 2958 1682 4274 3031 1682 3031 4274 3883 2456 1344 3883 2245 4473 3705 2245 4035 2037 2035 4035 2349 2653 45 854 852 45 446 26 4123 4555 4123 2523 2785 4631 2785 980 980 4631 3823 2759 3823 2626 3724 4049 1254 2678 23 4323 46 4274 2089 4632 2087 4632 3415 2606 4451 3956 30 3956 4615 1213 2579 830 2349 2824 4214 2824 4574 2395 3221 1180 3269 2133 3269 2762 3694 1854 3694 930 1854 930 1022 2958 1022 1462 1122 3537 4633 3524 3704 4633 3704 3524 567 2809 2809 134 4634 2702 4634 3810 2794 414 3573 2045 4481 2857 4480 2857 2115 3769 3430 3769 183 415 157 418 157 4635 418 4635 3444 4292 4636 4292 4636 3444 4169 448 4169 506 3671 4637 3671 3041 3041 4637 4445 4149 3512 4445 3512 4149 1152 398 1152 397 3027 2220 3027 4248 2287 4002 3901 2287 1968 2937 2657 3116 3282 2657 3282 3116 3547 3234 4519 2823 1759 4114 1572 4114 3453 4006 3668 1838 4289 1838 3866 3939 3345 2206 2969 1731 3894 442 3378 291 4232 2052 4232 4472 2590 1922 3104 4508 3104 4190 3750 1957 3102 2512 1125 4409 174 2302 4480 1099 3803 1932 4597 1391 3141 1391 3141 4597 729 2704 1355 4638 4638 4466 3329 2347 2729 2347 4391 4306 2327 748 2494 2790 4285 1847 3764 4285 3764 1847 2553 2375 3269 2132 774 3118 1981 3905 3905 4089 1817 141 1421 1508 1421 3918 2263 120 2263 3190 1602 4495 1841 4495 724 2970 851 3681 3665 2381 3666 2381 2262 4470 2998 4470 4134 1126 4134 1124 3430 4268 4639 3430 4639 4268 1192 3875 1192 3874 2674 335 4001 3338 4001 3494 1190 4514 2010 3387 2010 2938 1718 4327 4327 1716 4640 4555 4123 4640 4087 4564 4641 4562 4642 4641 4642 4562 4383 801 4383 2209 2209 801 3175 4013 3175 3469 1029 3128 4218 1029 4130 4643 4130 4644 4643 4644 2764 1929 2764 2507 4029 4149 381 3107 381 1703 3576 3747 1627 3739 4645 3739 4645 1627 4646 4578 4646 2925 85 3145 975 85 176 433 4108 4192 4108 916 3333 444 444 123 1314 2720 1314 1037 712 735 4269 1965 3612 4269 4028 1399 2194 1399 3003 2329 3702 3130 3251 4623 4432 4623 1156 3567 2722 4362 2647 3097 4647 2647 4647 3097 1354 1220 1354 1325 3447 755 1923 755 3973 2975 2203 770 2584 2996 3220 4357 4357 1179 2114 3784 1535 770 4648 1287 3106 4648 2785 1266 4163 2352 4163 3848 899 1647 1000 2437 1000 2556 57 2918 71 3067 1006 2684 1240 2684 1580 4575 3196 4575 2813 4648 4648 4492 4602 1813 1210 4602 1021 3158 1560 2425 2425 1561 4649 482 4649 3107 2682 903 445 2201 1955 3983 1179 4170 1181 4170 1086 3403 2904 317 316 2904 1011 4171 2348 4171 94 1185 4650 4368 4650 823 147 4138 370 4138 4407 2939 4378 3498 551 2365 2365 1353 932 2372 4169 2254 4651 3413 4651 1497 4373 1300 1300 4563 951 2775 4082 1877 4652 43 4652 44 4643 939 4643 1491 1527 2907 2390 2766 3352 2390 1928 2409 4193 2833 2097 4193 2292 4229 1116 2708 2550 2708 744 1985 1905 438 1991 1905 1991 438 2801 3986 3986 2800 2300 3182 2566 1592 1591 2566 582 4318 4318 779 1538 1882 4209 731 2577 4209 4413 121 1308 4413 1308 121 4645 4335 2797 3065 3063 2797 3342 904 904 3343 188 456 2234 2075 2073 855 1582 855 4537 645 4388 4537 4253 4072 4310 4253 1344 3738 1342 3738 2747 4307 666 4307 3718 4453 4381 4453 92 4088 4497 4376 4406 4376 625 4430 625 4431 888 2678 888 2680 1375 4653 4338 4653 2089 3999 2089 4654 4654 3999 4655 2185 4655 2186 2541 1796 3565 3488 3565 3487 205 2339 205 2338 4187 1003 4188 1003 4336 3577 4336 2295 3577 2295 4093 3661 2405 4093 4656 2065 4656 2064 4657 2630 4657 1082 2842 4504 2247 1080 4658 2247 4658 1080 1577 4513 90 4513 2035 4036 4035 4036 1231 2506 1231 1608 418 2123 419 2123 2143 1693 4546 2748 1262 2748 4350 414 4350 413 2092 137 3563 518 3889 518 1191 1096 1191 1674 4469 2127 4029 3943 64 1598 3212 4659 3675 4659 3675 3212 52 3193 52 2422 793 3842 2594 3842 2594 793 2110 2891 114 4660 112 4660 4173 4232 3648 3404 3649 3404 1559 2661 4260 246 4437 4226 4436 1257 4436 1256 4286 3092 4272 3092 4279 2413 4279 3497 4591 119 4291 4591 4291 119 1585 4069 4608 654 4608 1637 7 3920 4550 3920 4550 7 217 4290 217 3486 1297 4404 4661 4404 4661 1297 4438 1505 3796 2587 3345 3796 1329 1689 2597 2005 1172 3598 3229 1172 3607 4432 4432 3606 1417 2362 2208 2362 2208 1417 546 4488 546 4489 4386 4004 4159 4371 4371 4139 2416 4433 3346 2416 3346 4433 2243 2185 3482 2185 3477 644 3477 2665 644 2665 424 3065 3065 4073 3615 571 825 4584 3384 4584 3162 4318 1661 3162 1661 4318 3925 614 614 2635 3618 233 3618 232 4038 3365 4329 3913 3573 2047 3573 4518 2530 3091 1412 3091 1211 4602 1211 4578 1560 2426 823 1544 2490 1573 2489 1573 1201 4662 1129 4662 978 3203 2121 254 462 254 1361 1299 3084 1361 4476 2914 4476 1584 2075 1720 265 1720 3760 3769 2115 3760 4489 4201 4202 4489 1158 4663 1158 4664 4664 4663 3589 3097 4665 3097 4665 3589 1624 1850 1216 4315 4666 1216 4666 4315 1783 366 1783 365 2373 133 2373 135 4304 10 10 2668 3928 895 3928 3535 4108 3727 4667 3727 4667 4108 4346 1574 1140 2245 4239 4446 4435 4446 2657 2368 1609 1231 4479 4024 4479 3752 3110 1473 1473 3109 4451 1420 4668 484 4668 918 918 484 846 1605 3199 3468 2110 3468 2255 2315 914 4402 3493 3711 3251 3711 4403 4669 801 4669 1789 137 538 4515 538 4172 4172 4515 1837 1071 1963 739 1963 3385 385 1983 3801 1969 3801 3490 3490 1969 2450 4206 2451 4206 3036 3830 3036 3061 4670 3013 4670 4326 3594 4271 3594 1733 2583 1954 4291 3587 4591 3587 152 3812 1643 3812 1643 152 2483 399 4655 2483 4655 399 1643 4671 4125 1643 4125 4671 2444 3114 2416 1949 2416 1950 2251 718 1184 378 377 1184 4510 3829 4151 1765 942 4151 3246 657 3572 2645 3572 4426 1305 2236 1632 1358 3184 4085 2341 4085 3282 2368 3678 2231 2230 3678 3761 2325 1554 680 272 1554 689 459 2956 3435 3435 390 3980 2238 3344 3555 3555 3343 4232 4587 2044 4232 2044 4587 3809 2814 472 4672 471 4672 1548 867 4603 1258 4604 1258 563 84 563 4501 4593 785 1431 4661 1431 1297 114 4599 114 4600 4226 1090 2841 1090 381 4649 380 4649 636 4113 634 4113 1412 3092 630 3607 3693 3607 4293 3135 4293 4020 4020 3135 3642 975 4264 1754 1752 4264 3558 4673 3558 4145 4145 4673 3200 3442 3200 466 466 3442 2266 3108 1642 3108 1642 2266 1233 3103 3651 3103 3651 1233 3959 1902 4621 1902 4621 3959 2869 2069 2070 2869 3426 4396 3059 2582 3405 4674 3405 803 4674 803 4491 3340 4491 4329 3340 4329 4161 3738 3473 82 1596 569 2355 1596 552 2948 4369 2283 4368 2283 4023 248 2147 4146 1151 2479 3554 1384 2511 1384 2863 4675 1855 4675 4676 3041 4676 4637 1089 4164 4164 1090 2086 1533 1986 3656 4051 1986 4571 2645 4571 1766 1564 802 1564 804 1602 3767 665 3731 665 3730 3406 3648 4475 2728 4677 4142 4677 4494 4142 4494 912 3174 3967 4076 780 541 2799 4345 2799 4543 4345 4543 3959 4620 4678 4620 4678 3959 2875 3320 1531 1756 3292 3506 3293 3506 4465 3690 1750 3690 2707 4501 4086 4501 4086 2707 4353 2323 4353 1372 2323 1372 2552 1508 2336 3526 3526 560 405 4132 4548 2991 4548 4462 396 3467 562 3467 3977 3512 3977 4149 1998 517 4341 517 4452 4255 4515 1080 4650 824 4650 4545 4545 824 3361 4552 372 4552 2176 3309 2175 3309 3095 3881 3095 3882 646 3787 646 4168 4168 3787 1819 139 1819 3369 3500 3763 735 675 4384 4579 4579 4515 4679 1922 3322 4679 2858 2227 994 2227 994 2858 4283 3762 4283 3761 2756 1208 3995 1074 3412 3995 4439 3699 151 912 2714 4551 2726 2714 2726 4551 492 2541 1706 3863 4680 3898 4680 1000 1000 3898 1857 1510 49 1857 4634 378 4497 4634 4497 378 748 4052 364 4052 1744 148 4506 4147 4146 4506 491 3721 2571 3643 1327 1599 64 1599 4283 3284 3289 3246 3289 657 4681 4682 4681 581 4682 581 2741 335 4058 3930 2754 4191 3822 1943 3833 3725 3716 3071 4398 4025 4398 3611 3611 4025 3858 3647 3990 392 893 3990 893 392 2875 3620 3814 2505 1352 2505 1755 2570 1755 1531 2515 4683 3554 2515 3554 4683 4684 4685 4684 4539 4539 4685 2778 4686 759 4686 681 4616 3225 4616 1172 3230 1171 3230 4261 4032 4261 610 610 4032 3824 1593 3824 33 33 1593 907 2855 1113 4687 4688 1113 4688 4687 1845 1471 1845 4663 1471 4663 1262 1135 1659 3324 1659 3162 784 1995 1995 785 4689 1565 4689 1564 286 3399 4633 3705 277 4188 4188 1328 1420 1979 1418 1979 1180 2672 3646 1180 1200 4662 3601 2141 3181 3377 4422 3819 1288 940 2840 940 1560 2008 2008 2426 1426 2400 4491 2400 1027 4690 1026 4690 1141 2858 953 2485 4691 1615 4691 1663 2847 4223 937 1851 938 1851 1222 1253 886 1253 726 4005 1593 2070 2735 2070 2735 1593 4692 2528 4692 4167 2528 4167 431 3045 1934 431 323 3276 3261 323 1757 1301 2326 1301 2660 1555 4416 4117 3286 4616 977 518 4340 518 4530 1789 4452 2564 3570 3077 3570 3076 2248 1853 2248 1854 4498 414 2794 4498 2194 4082 4082 1399 2987 4693 3339 2987 3339 4693 2843 4694 2265 4694 2265 2843 1059 453 3658 4695 4059 4695 4059 3658 1223 4141 3489 4122 1015 1410 1015 162 1263 3008 2929 4601 2929 4599 1874 2744 1483 1259 1464 4663 4058 4124 3800 1734 3210 1734 4353 1371 4353 3881 2492 1511 4347 4355 946 4355 946 4347 3586 3298 3586 3604 3298 3604 2922 4216 4696 2922 4696 4216 4160 3038 3748 1656 2715 4697 2727 4697 2727 2715 3156 3487 3156 3191 3006 1237 4613 3006 4417 3103 2771 1911 4410 2170 4111 221 4111 3821 4698 4006 3453 4698 2290 2599 2599 4228 29 4699 28 4699 3283 1670 3283 906 1670 906 4258 3430 942 2224 2224 482 3570 4125 3569 4125 3773 4339 3491 792 1721 4700 1722 4700 2356 674 4701 1156 4701 3566 3566 1156 1758 1369 1188 3176 3777 228 3214 4659 3214 4316 4659 4316 4582 4702 3548 4582 3548 4702 60 76 4703 3130 4021 3130 4021 4703 4649 2259 1055 110 1055 2340 2340 110 693 1144 421 693 840 4007 4549 3491 3491 4503 4704 724 4704 4100 4597 4705 4705 1391 2673 4572 4572 549 1226 3354 4246 3240 3770 3240 3770 4246 2137 1896 2969 3955 3350 3557 3348 3557 1878 629 1898 629 4183 4221 2108 4183 1047 3524 1047 2838 1958 3562 1895 3562 1895 1958 3359 1504 4161 1504 972 3752 1905 2747 1905 4307 961 568 2327 4052 2789 289 4545 4337 4650 4337 2987 4526 2987 1138 1138 4526 2778 1481 2778 1028 2222 3027 540 393 3467 3638 3468 3638 4600 3641 113 4600 113 3641 3990 2710 2710 392 4220 148 4220 456 148 456 971 1114 971 4460 2207 2502 3852 1661 3352 4706 2390 4706 4273 4119 4474 4119 3955 2051 3392 2051 3392 3955 2868 1293 4323 747 3142 520 4707 4007 4707 840 3953 2230 424 3270 970 424 2501 1144 693 2501 4329 3699 3340 3699 2746 4247 666 4247 4529 4708 4530 4708 397 1153 3852 3330 3982 3330 1938 2597 1938 3527 3527 2597 4477 2709 3351 897 3433 3351 4150 1388 3590 4150 3154 1885 3154 4234 2878 1668 2735 3151 4184 3151 4184 2735 1672 2551 186 4698 4698 185 2585 1620 3489 3538 2222 2456 1918 1007 1006 1918 4450 652 4646 652 4646 4450 4059 4377 4377 4695 422 3246 3126 422 2167 685 2167 4709 685 4709 4102 1057 4021 3135 2886 4021 2886 3135 3455 4590 1713 1431 3947 4687 3947 2820 2820 4687 2862 656 4124 3930 4124 3928 4704 1486 4704 602 1450 1209 1209 3140 4487 319 3553 2515 523 3294 4710 1039 4710 4007 4534 4016 3255 4534 4410 3198 3743 1826 795 3743 4648 968 4130 1346 4130 1345 3717 131 1421 3201 4711 3201 4711 1421 4712 802 4712 3536 4630 4600 811 4640 611 4640 611 811 3352 4128 1814 2446 3530 2446 31 3283 4652 4280 4652 1944 1312 543 4713 1312 4713 543 4476 2329 2967 375 4421 2065 4420 2065 1498 4714 1498 29 4714 29 3170 233 2911 233 2911 3170 4088 2018 55 3937 4715 2559 4715 2637 4628 1942 4464 1942 1700 4716 1701 4716 4717 4718 4714 4718 4714 4717 3493 2294 3493 3375 293 2614 1089 4542 3354 2400 3734 2400 1350 635 398 4297 2730 4297 2730 398 3826 405 3993 1279 3994 1279 3662 3059 1906 2490 4581 3337 2550 4581 3908 1293 4458 3106 2911 234 2263 3863 2018 1993 1932 2771 431 1933 421 692 423 692 1967 2470 2571 85 45 2649 3515 4719 3514 4719 2276 4720 4720 3420 1774 3370 1772 3370 501 4721 4721 4404 3775 3403 2447 2506 582 1665 4318 1665 3574 1041 3749 1656 4589 2020 4210 1012 4210 1011 488 4592 488 691 1204 4256 3417 4478 3417 3929 1951 2364 2364 1950 2403 375 3689 3055 3054 3689 2749 2971 725 2749 3055 306 3055 3033 4309 2395 2393 4309 1494 4024 3282 3875 2345 146 2345 1468 3450 434 434 3449 4374 4697 4374 2727 4063 1070 3715 4063 3715 1070 3386 2316 3386 2834 3311 4647 4665 3311 4665 4647 1149 2479 2051 37 4026 2051 4026 37 1449 1408 3294 1408 613 1952 969 4648 2232 3796 2232 3795 4722 2936 4722 2935 891 3687 891 700 700 3687 1697 4531 1981 4001 4417 1266 4421 4128 1816 1010 178 1816 4692 4516 4692 220 220 4516 4457 3258 1708 1233 3651 1708 1059 1994 430 1933 849 2712 850 2712 3758 3970 2612 3970 4374 4524 4524 4697 2681 2385 2683 2385 1716 4723 3003 4723 4200 2865 2866 4200 2120 3623 3627 1383 2770 3627 352 3262 3261 352 4668 3506 4566 1613 4566 3448 4341 518 4389 2422 3944 439 1855 930 930 4675 2792 3759 2611 2792 3538 3192 90 210 90 211 4581 1115 3755 1115 1908 737 3786 737 3594 1456 1160 1456 4724 4340 4724 1996 4116 3659 4725 4116 4725 3659 3450 408 1328 3741 3295 3127 4525 2577 4525 4726 4726 2577 3797 3534 3954 3797 4460 2708 4477 4460 4477 2708 1434 3389 1766 2706 1767 2706 3077 4671 3077 1643 727 4252 4522 4408 4522 4618 4408 4618 1899 1879 1945 426 294 2314 2232 2314 462 4455 2148 4635 2777 2148 2777 4635 3759 1320 3759 3168 378 3810 3076 1360 3076 3085 2033 3923 4727 3736 4727 2556 3899 4697 4728 4697 4728 3899 4361 2502 4361 3557 2502 3557 4155 3468 1247 3407 463 377 4729 2944 4729 2393 2393 2944 4691 4730 2840 4730 2840 4691 2740 3811 402 1 3412 237 2546 633 2546 1771 633 1771 4627 4440 4439 4627 4546 1133 2562 3172 4666 3172 4666 2562 913 3806 1742 1536 3158 2633 2937 2011 1968 2011 2739 1648 1648 4272 204 2339 1779 4521 1779 2074 2074 4521 4049 4046 782 3517 2209 4669 3369 3551 1782 3672 1780 3672 4109 1245 4434 4109 2343 883 4403 3196 1454 4672 1248 2233 3809 4631 3809 1266 4631 1266 668 4246 3049 4428 3049 4427 4289 3230 983 4256 2545 4256 794 4041 50 4041 937 610 110 953 4654 4392 4654 2169 4392 2169 1737 4440 1736 4440 2023 729 1564 3632 802 3632 2382 2872 2940 3016 3456 4165 3456 3962 3208 654 4731 2688 4696 2688 4696 4731 4420 1276 4420 816 816 1276 235 4012 4630 3423 3423 2931 1259 4101 882 1259 4299 4308 4301 4308 4720 4000 3998 4720 2060 298 299 2060 2056 4226 4226 1294 2504 741 3550 1112 4154 4464 31 1593 4716 1771 4732 2947 4732 4430 3794 1720 267 1720 969 4492 3072 4113 3072 2320 3876 3879 976 3890 1963 4399 4529 203 4529 2152 3717 3864 3717 130 2308 2216 2308 4520 3043 2134 1545 4611 3243 4009 3244 4009 195 1770 195 3490 1762 3929 3751 4541 3751 1990 3792 4409 2789 2048 4638 4580 4466 4580 4733 3031 4733 3030 4707 4710 1121 2178 1120 2178 4713 1313 1867 4713 4689 4674 4689 3405 3820 1777 3830 2798 4734 1902 1901 4734 1153 2521 2898 4189 4148 3416 4148 1252 1685 4302 4471 2928 2217 4276 2217 4334 4276 4334 1557 3814 3316 2419 2419 3698 1192 733 1192 4578 3475 4448 2842 3667 2844 3667 2732 1938 1224 4735 4735 756 4447 3617 1424 1544 4040 1424 178 1814 1998 1174 3904 2408 1514 2408 1514 3904 4736 4284 4736 4737 4737 4284 567 4141 1291 1385 4523 3223 1459 3223 1459 4523 1263 3177 3177 3008 3053 4600 1516 2294 2291 1117 2291 1118 264 1256 2804 4363 2806 4363 4738 3092 1800 4738 4619 4425 2754 4425 4401 1 2010 1964 3798 833 2627 3798 4229 1189 1188 4229 4528 2238 3105 956 3105 2296 529 293 613 4640 186 3696 186 4105 1298 3608 1124 4409 439 4204 1904 4204 2833 2246 2244 2833 1523 2986 2986 1521 4736 4535 4736 4533 2224 3975 4651 1852 3560 3611 4684 3540 3539 4684 966 2285 4537 4442 4442 645 3657 2180 1764 4279 4279 1765 3941 4632 4725 3805 3805 4116 3906 4709 2165 4709 4202 980 4202 4631 3637 2641 2641 3703 1441 4153 1441 2145 4463 1068 369 2471 3852 369 4097 18 2004 4097 2087 3437 3437 2836 4384 4324 4313 4399 189 4219 4594 189 1591 769 3766 1589 3024 2783 3871 1984 3713 3344 82 3472 4607 1904 1883 1904 305 4739 303 4739 3805 499 364 3805 4364 3952 4221 3952 4221 4364 3755 1391 710 3321 4685 4537 3336 1719 3336 4077 3545 3307 3835 3307 3835 3545 71 1277 93 681 1370 4740 1368 4740 4459 3844 3801 3327 1563 1886 3154 1886 4439 4329 4155 805 4155 3583 623 2947 4702 3065 4582 3065 1709 1576 4587 1576 620 3744 2961 3657 2961 3656 1203 4487 3922 4741 4741 3218 2112 4217 4742 3044 4742 1955 1955 3044 2900 3831 3831 4025 4494 150 4494 148 2323 3859 181 4717 181 4718 3538 4122 2021 4148 4148 1282 3241 908 907 3942 1663 3257 2121 3623 2011 2938 156 4230 577 1559 795 509 2005 3401 2004 3401 4626 4256 2952 2297 2297 2632 3383 824 3632 4532 3778 3632 4296 4435 2884 3948 3757 3948 3195 3285 3409 3285 4743 3862 4397 3862 4397 4743 3753 3058 3160 3058 3160 3753 4612 2053 4612 1820 2909 656 3313 469 4588 4506 3928 896 4596 4235 460 1457 96 3827 3827 3022 1504 4335 3086 4335 2993 1217 2993 2105 1217 2105 2017 4466 348 2017 4548 4659 4462 4659 3336 4287 1159 3336 3587 2926 4366 2684 4366 1240 2148 2776 1413 4744 1415 4744 3369 2193 4468 84 287 3331 1460 319 3911 2659 4458 2659 4458 3911 2089 4000 3596 2333 2475 2573 4119 2157 3448 4119 3652 4160 2634 3621 1444 865 2037 1162 1134 3064 4046 3020 4046 4558 2562 3171 4048 4745 4047 4745 241 968 967 241 3502 1062 4367 1062 3579 4502 1478 3579 1478 4502 1662 3860 3860 2450 2113 3931 2113 3784 2443 4730 256 2452 3906 1043 4526 3906 4526 1043 3866 2492 4717 415 4746 4717 4746 415 1695 4747 1956 1695 1956 4747 2072 4739 2071 4739 4748 4133 1870 4748 3230 4249 4289 4249 2172 3816 4263 1548 4263 459 1670 2860 4447 140 3986 140 3780 1747 2309 3780 1071 2117 1071 3285 1158 1464 4407 3685 4407 3684 4236 4004 4236 4386 2512 1076 3568 4282 3127 4321 3295 4321 1549 460 3591 460 995 604 605 995 2605 4385 2605 4749 4749 4385 4443 276 276 4441 212 3895 212 1379 3895 1379 4750 3484 4750 878 3967 366 3777 229 2945 61 1975 3785 1999 4727 2555 4727 3151 4306 4184 4306 500 4725 500 3659 4680 998 4680 4728 4728 998 4469 1723 2127 1723 4751 632 4721 632 4721 4751 4547 2288 4547 1747 3380 1605 3380 846 911 3511 3220 4752 3222 4752 2012 3368 2999 2012 2999 3368 844 826 2635 489 4525 4209 4209 515 2760 3942 3306 3637 4129 4344 4250 4129 4250 4344 1581 1190 4481 317 4481 2904 3520 1626 4536 576 539 4030 2680 3485 2680 3042 3042 3485 3376 1274 2984 849 2984 1320 4740 2154 782 4740 4074 675 4533 1700 1699 4533 912 153 4301 3598 4300 3598 4605 270 4605 1835 1835 270 2919 3555 4753 3027 4753 4248 4754 2585 4754 345 3447 2510 2589 3447 2589 2510 4111 4167 3014 3628 3886 1926 1927 3886 12 2668 12 3726 4015 650 3657 3869 3657 3581 3581 3869 937 4032 2433 4609 2433 4176 3019 3263 1920 3019 1920 3263 1862 4264 3528 4264 2618 4755 4755 2619 3664 108 3884 108 4241 4623 2720 841 2307 2521 4157 4141 1395 3170 1202 1959 1202 2251 3615 1312 1942 2597 4280 2597 4608 2786 184 3495 4259 184 4259 3495 3794 1721 3988 1721 142 1544 1211 4646 1211 4450 4681 4326 3014 4681 4756 1375 4756 4665 4665 1375 2230 1168 3953 1168 4423 4744 4423 4701 4701 4744 767 3228 3228 768 3347 4433 110 3005 3958 1825 3772 1825 2483 1600 2590 4679 3926 4544 3451 4544 1078 807 2124 446 446 2122 3397 841 3397 1435 800 4575 443 3031 443 4733 4318 1966 2859 994 2337 2755 631 2546 3602 631 3602 2546 902 2385 200 2518 1699 4534 4241 3314 2127 1972 1148 1972 3051 890 457 3051 457 890 4244 2364 350 4244 4027 2265 457 4067 455 4067 4050 730 4050 755 2148 4199 3108 4694 2265 3108 4673 3423 4673 3422 4644 1491 216 4757 216 4758 4758 4757 4019 4703 563 4086 3955 4095 1649 374 728 4005 2572 3679 4128 4706 4625 2334 4625 1359 1782 3673 2882 3673 4667 2235 4759 609 694 4759 4322 699 4322 698 429 2417 429 2467 2467 2417 4744 2418 4760 2418 4760 4744 704 3393 3393 703 2228 596 3209 1621 1558 1521 1557 1521 4742 1953 4742 2264 4754 3079 4754 1620 687 395 686 395 1466 1846 4657 127 1676 4761 546 1676 546 4761 1796 1589 4704 2970 4735 301 4512 4404 3075 1360 3127 3931 3662 4762 4762 3094 4529 1586 4391 3152 4451 1419 3446 3997 4763 1656 3749 4763 2158 2873 132 2873 132 2158 736 3043 914 2209 3947 4688 4087 4764 4764 4247 2962 3365 1297 4751 4404 4751 4742 1309 4765 236 4765 2512 3306 4415 3306 1076 4415 1076 2608 2942 4590 3429 4603 3506 1258 3506 2358 4667 3907 2055 2352 2055 2352 3907 3132 4495 3385 3470 1961 3385 2998 1364 1892 2787 4717 183 3635 2305 2980 2305 2016 4466 1082 1132 3998 4654 1490 4740 3517 1490 3517 4740 4278 1196 4278 642 1196 642 1078 3096 1730 3797 1316 2532 809 4640 165 1385 4110 221 221 2560 2428 4719 331 4719 1084 4044 1084 4642 4044 4642 3396 2609 3617 3551 3552 3617 4766 670 4766 669 4357 4752 4752 4312 3519 3799 4468 3449 4091 3449 2161 3036 1850 2426 1875 4609 888 3042 4148 4767 4767 3416 4209 513 4665 1150 3311 1150 3114 1615 4267 1799 908 3240 3240 1358 875 4370 876 4370 1514 3532 3874 134 4716 2298 379 2698 2589 4679 1157 428 1157 734 428 734 2278 3057 4553 3057 4296 4446 2503 4296 4634 4376 4677 3479 4677 1561 3277 2814 4609 4540 4513 211 1401 398 4193 2858 1528 4673 3547 871 3547 870 4701 2418 4701 2912 4063 3481 1461 2183 1461 2184 4677 4219 3917 2013 3674 3212 4594 516 4674 804 1650 2968 4567 1650 4567 2968 2393 4360 2944 4360 2521 4473 2904 2857 772 2714 772 2716 653 2389 4372 1014 1013 4372 4304 4131 4756 4653 4150 4653 4150 4756 3160 2633 4768 589 4117 4768 4117 589 4293 2176 4565 2176 4565 4293 206 3677 2757 2557 2555 2757 4322 2118 2983 2118 2983 4322 855 2356 2071 855 2071 2356 3304 2452 4092 2310 4092 3779 3779 2310 1601 2763 3812 153 3958 128 129 3958 353 323 353 322 1209 4056 3625 400 2854 3781 1482 1522 2500 1522 3908 4769 4769 1293 2871 2910 2924 2910 3561 2099 718 3013 1971 1724 2138 2761 4391 3151 4595 2369 4595 2368 238 3178 1091 3178 1091 238 431 2648 4231 2082 1272 1045 2246 1272 2267 4027 3170 1042 725 3654 133 4122 3192 4122 1856 1107 1856 1106 3191 3157 3860 874 894 1732 4770 4155 4770 3583 1703 382 749 1145 4203 966 964 4203 2031 3413 2792 4498 4347 4011 4011 4355 2673 1407 2673 1406 3247 659 3453 1942 4604 2531 3263 1919 821 1675 3500 3584 2655 3584 639 1527 3329 3286 3329 4616 152 3108 152 1642 4539 3981 4684 3981 2552 3528 2370 965 3780 2310 2340 3005 2340 4085 3376 3873 2067 311 310 2067 926 1785 4749 538 4749 539 1774 389 3285 3194 1071 3194 3272 3243 3272 4009 4763 2388 4763 766 2388 766 1112 3863 3550 3863 2430 3395 2834 589 2580 3321 2570 1743 3532 1107 4673 3348 1992 4171 2753 4649 2752 4649 4760 4014 1413 4760 764 3020 4049 3020 4566 1651 1651 3448 3703 2453 4771 4564 4022 4564 4022 4771 169 252 4068 252 4068 169 1903 3776 120 3863 3105 4330 3105 955 4098 4752 4486 4098 4486 4752 4307 1904 860 349 3216 3623 946 4152 946 4079 3965 4445 3997 3965 3966 3097 3966 3098 2245 3523 2350 2824 2798 2617 4641 2617 4641 2798 3234 871 1861 1879 601 2915 1205 2915 2263 4470 4094 4012 235 4094 767 605 1162 4532 4482 4532 4482 1162 4388 4538 2434 2558 2060 2392 1341 400 1341 3559 3809 2815 1776 3575 1394 3575 4772 4144 4772 869 1005 4187 2420 4547 3925 2420 3925 4547 3830 3032 103 4678 105 4678 174 2966 3146 274 242 968 4390 800 4390 3774 1947 426 4073 1947 261 700 1829 2537 4461 3009 2880 3009 3803 2771 2954 3436 4265 3436 1697 2728 4475 1697 175 4605 4605 176 3681 3344 2620 849 1801 4738 424 1381 3968 4139 3187 4521 118 4292 118 4291 3322 2508 4679 2508 382 3309 2599 2736 1058 68 3393 1261 1262 3393 4416 4768 3993 1280 1280 4454 4486 3222 3394 3124 1155 734 3790 3935 3742 4590 2330 4476 1767 1977 1767 2982 1977 2982 1784 3808 1784 4076 213 1635 1877 2897 4540 1877 4303 4517 3120 4517 1992 3710 1992 4211 1597 4338 1597 4653 4760 3315 4499 172 4499 2002 2250 2013 3744 4284 4736 3744 2916 4702 665 4702 4527 237 4527 4094 237 4094 3626 102 3626 101 2359 1742 2852 4266 4690 2850 4773 3806 4773 3811 3806 3811 4560 1693 4560 1692 3823 762 192 4675 3680 2080 2080 1546 476 2239 1993 2746 4771 2746 4771 1993 4654 4632 3853 111 109 3853 3776 3960 4774 904 4774 903 3885 479 2354 3907 3079 347 345 3079 1170 3598 3984 2800 4608 1853 3530 4739 2643 2532 4550 3838 3838 3920 3376 4147 1600 399 3693 2411 807 1229 807 5 4254 4484 4330 4190 3104 4330 2595 2362 2595 3842 4564 4764 4771 4764 3988 3399 3399 4078 2050 4483 2050 1603 4483 1603 4016 3957 1708 1576 2380 4573 3665 4573 3665 2380 3057 410 3202 4693 3300 4693 1402 3480 1402 4655 3480 4655 2497 1726 3974 2224 4151 2224 4151 3974 3206 611 4775 2638 4743 2638 4743 4775 3776 3213 3776 3143 3213 3143 3002 3987 3002 3733 1218 2163 3903 4364 4365 3903 2545 4626 4195 1802 2735 3664 817 3026 3303 1484 1483 3303 3437 2837 435 2848 2582 1954 4583 2971 4583 984 351 3890 351 976 1480 521 3802 4014 3965 4029 1183 463 1183 377 3591 1457 4704 4156 4496 362 2129 3608 1523 4592 4592 1522 3509 1203 3509 4487 4650 4467 4650 2211 2211 4467 1053 3874 3892 3874 3892 1053 3022 974 3022 3144 323 1349 3067 2802 70 2802 70 3067 2172 2703 2703 3150 3473 2280 3035 4453 3749 4541 4763 4541 2862 2871 441 4733 441 4419 4733 4419 1836 3748 297 4683 3185 297 3185 4683 1159 4664 3336 4664 5 806 4 806 1757 533 3911 411 1941 3867 923 3867 4617 4408 4617 4425 14 342 2081 4611 4613 3804 3697 4613 1887 780 1887 937 3146 4354 3684 719 3991 4718 3991 2710 2710 4718 1568 2350 2538 4428 4099 4428 4612 1822 4276 4734 4276 1304 1304 4734 4328 4558 4351 4558 1300 3181 4748 4328 4748 4558 3032 3986 2837 3435 1126 4120 4134 4120 1128 2376 3901 3519 4196 1062 4196 1064 4300 40 4300 41 3603 158 3963 3603 631 1431 1687 3407 1685 3407 3570 4671 135 581 135 4682 472 4501 4070 872 3090 2606 1163 1564 1163 1566 3232 1383 1193 3262 3418 3020 651 3020 1443 1010 1443 2054 4176 4404 4176 4661 3267 4772 3717 4772 4737 714 2802 4737 1001 3719 1581 3774 4136 629 852 43 3419 181 2636 4715 3655 629 934 622 4213 622 4072 2617 4121 2617 2787 1250 3903 3952 3905 4526 3905 3338 3274 2627 4443 737 3253 3870 4218 2675 4217 2675 2660 2986 2986 4626 4776 1057 4776 2229 4205 4743 4205 3862 3125 702 3125 703 764 2388 764 2389 2086 2994 1220 1253 4777 2488 4777 263 1769 4206 4003 4206 784 490 3263 3275 1280 549 4572 1280 159 4037 1265 4599 3168 2362 4048 1367 1367 4745 4610 4683 4610 3946 3946 4683 1715 3072 3072 661 2727 2714 2996 4355 1810 4355 1810 2996 4778 2730 4778 398 4753 2639 4753 1568 1735 4408 4408 3199 3599 3546 3599 3545 3773 537 1743 36 3994 2699 2588 1075 907 2853 2853 906 668 4247 4316 3213 3965 4149 199 553 3472 831 3472 830 1516 2295 4050 3629 730 3629 524 879 2075 2887 2757 2000 4385 538 3748 1072 1837 3748 1837 1072 4003 196 4003 256 3730 1946 494 329 115 1499 3125 2441 368 4745 3799 3274 1425 4369 1425 4490 4369 4490 218 3113 4500 4508 3051 2879 31 2860 4715 2273 2636 2273 523 3219 3872 4212 3872 3754 3366 1128 176 1835 3506 4101 3506 1259 4767 3946 1284 3946 1284 4767 4250 3169 3169 4249 2649 854 4645 854 2649 4645 698 1406 1007 1919 3925 1747 3887 1984 3887 1983 3839 2077 3839 2078 2015 2027 2015 1717 2027 1717 2781 3820 3919 2781 2337 4508 1592 2972 586 2151 4779 2151 4779 586 3418 764 1124 981 3792 981 3792 1124 2290 1117 3271 4750 3271 4741 4750 4741 4278 3654 3633 3318 359 2463 359 2464 842 2151 1374 2480 2614 2958 1982 2744 3542 4568 4568 4055 4381 436 1492 813 112 535 4660 535 1481 4686 2553 3785 1975 2553 4320 4348 821 4320 821 4348 3703 2207 3703 3047 4527 3412 3782 2751 3633 2751 3772 1823 1487 719 2686 1992 1623 2914 2913 1623 1161 4780 1163 4780 2820 3757 3471 1064 4416 1064 4416 3471 4781 297 4781 1384 3464 1112 3464 3863 3846 4514 3846 1190 4329 4061 2936 112 2139 2966 3759 2793 1858 4041 116 1500 4126 1990 3751 4126 501 3893 3995 2604 4200 4349 4349 2865 2930 3964 3161 3964 3164 3309 4638 1356 3927 4685 3927 4684 2541 2677 2250 4024 2880 3673 2666 4492 4452 2058 2956 3436 1224 360 1988 766 1988 765 2349 4206 4711 3918 2078 4711 2289 2141 2289 3174 3876 4782 4782 3661 2101 2274 598 2274 598 2101 2080 1545 3391 1171 3123 3394 1974 3847 2870 2845 2737 2845 3852 2997 1527 2353 4614 4752 187 700 891 187 4622 3155 4622 4233 4233 3155 297 3554 3475 3017 688 3318 4769 1294 1113 3463 1112 3463 4452 3103 1267 4452 2738 959 2049 1031 1031 859 1560 3636 2782 3820 3077 1641 2326 4221 4783 4425 4617 4783 2884 1364 3043 3148 4622 4710 1551 1821 1821 1550 2573 2643 1441 3667 1762 4784 1760 4784 3987 1811 820 545 2258 4405 3647 2258 3647 4405 4023 706 4022 706 3025 1565 2875 3319 2273 3492 4549 2273 4549 3492 3852 1660 3035 2665 938 4311 938 1852 13 4546 4644 1712 1491 1712 500 3805 2329 4723 1688 1329 3585 3939 4154 4544 4154 3691 2781 2542 144 1544 144 1424 3966 3997 3485 4238 3259 1539 1309 3044 4398 3831 1379 1705 4393 2989 2199 2656 683 1139 346 2832 753 4719 3010 4335 4645 3010 2309 4520 1311 2258 1323 3031 3715 1176 3715 3071 3426 4394 1804 4199 4770 394 4770 3468 3271 2039 4006 4105 4698 4105 1229 2981 721 2981 4554 3130 70 2803 4676 675 4676 4074 1817 139 3625 4573 4253 2400 4779 2498 4779 3225 4162 138 4162 2992 2112 2675 1241 318 2847 731 58 2852 708 2852 3505 1145 4776 3460 4776 4102 4726 3629 4726 3630 3120 1018 1676 545 1946 1871 1377 2046 1377 391 4181 964 577 3814 2631 4200 2985 3147 4535 714 4736 714 216 4290 2252 1848 3969 366 875 3969 2131 1364 2131 1177 3122 1018 4259 3804 184 3804 664 3730 673 3671 231 4635 1207 4235 4686 1207 4686 4235 3382 4337 31 2068 1593 2068 4678 1303 105 1303 2969 3024 2080 3938 4244 2015 4244 2017 2062 2392 4378 512 4378 511 4305 3026 25 4305 3407 4302 1460 4487 1302 3335 4451 1498 3669 3183 3183 4610 4729 4054 2780 4729 2780 4054 4691 1664 4691 921 3953 1750 1829 1338 1829 1337 750 327 2335 1798 882 611 1971 2829 4067 1644 1644 3847 3947 3757 966 3257 2468 2068 2317 4353 3588 3603 1378 1705 4127 1988 2296 2337 3991 3419 3419 1518 527 650 3315 650 3851 369 625 1384 3172 4315 3447 788 4501 2852 83 2852 3590 4756 4756 3589 3599 2178 3513 4622 3513 4233 1962 4302 3552 4447 1669 2458 4172 2818 4329 2400 4056 259 259 1812 1126 3841 3887 385 1195 2274 3976 4144 3268 4144 3346 1973 1405 2982 4322 2982 3070 3115 4785 3317 4785 355 1743 3325 4786 1743 4786 3325 581 3223 321 3223 1653 4624 2889 4624 1680 2277 315 1321 3758 315 4666 1217 3894 4762 4762 2319 630 4623 630 4432 4399 4502 1476 4502 1203 4573 4177 1431 1713 4177 2803 2410 2100 3635 4358 2935 4197 2935 4197 4358 2063 576 4390 4575 4064 2569 1105 4052 1107 4052 4177 4661 3267 4144 1958 3924 3415 2429 2414 1716 2414 1717 4500 636 4655 3482 2028 3709 2028 4723 3709 4723 1844 1912 1713 2431 4712 3405 4712 803 2414 4723 4078 4584 3384 4078 1849 3194 1750 1168 3456 4523 66 1326 4607 1052 1439 1052 4758 3113 4758 3112 1890 124 3845 2079 3791 1488 1488 3685 4366 334 4779 3287 4779 2095 2095 3287 2343 885 299 3184 297 3184 1195 3922 2839 3777 2102 2274 3504 1352 4696 2923 4731 2923 2446 4739 4762 2318 142 3243 4787 4697 4524 4787 1430 631 678 3441 2439 676 2439 4606 4606 676 1175 517 2689 517 2899 932 2089 4662 4000 4662 4712 2830 2830 3405 2615 4641 2267 1642 4761 1675 4761 4120 2222 2455 4630 3349 1320 2805 3226 2805 3989 4700 3989 1721 731 4223 4208 4223 4208 731 4471 2998 2075 3134 3236 3441 3236 2038 3518 2960 4729 3729 3728 4729 1741 3110 1741 4574 4574 3110 1313 2258 4314 1432 4461 3008 1854 3440 2248 3440 4073 3731 2584 4349 4638 1695 3834 3725 2692 1092 697 549 4560 2702 3582 3001 688 4207 1486 4100 3754 635 1733 3800 2530 318 1241 2530 4290 4238 216 4238 2289 1665 1163 1024 1024 4780 4250 1167 1812 260 1813 260 2980 2304 1002 1243 58 4755 554 58 554 4755 2177 338 2612 2830 1490 2196 4141 566 4765 1779 3102 4765 1850 2009 3247 876 3475 2204 3475 2271 1391 1326 2803 898 231 2149 3588 2149 4702 4073 665 4073 3356 1066 1248 3175 1247 3175 2666 3932 1152 4778 1971 3145 3145 2829 3573 1041 532 3335 4294 3335 4294 532 3971 2612 3971 2830 686 4207 2435 1272 936 622 621 936 1539 4493 1407 4571 4572 1407 4401 4407 2919 3344 2589 2508 1802 4062 1802 4061 2150 1805 3913 4061 4680 3899 107 3664 1166 4295 174 2139 2993 2086 3118 3138 3312 1122 3312 3983 2547 1771 2547 3109 1771 3109 1616 1456 662 2346 2346 1798 3442 207 4178 3298 4636 3298 4636 4178 3767 3132 4639 3635 4639 2979 230 2493 2493 229 351 4319 2111 1846 3066 1846 1958 3768 1272 1046 4746 4699 4746 29 2996 1808 4770 687 206 3678 206 2231 4708 3197 2877 4708 149 2364 4021 4554 2886 4554 4258 3769 4028 1398 1295 3204 4614 4045 4614 4312 4113 2339 772 4551 2063 575 2063 847 1025 4090 4047 3851 1805 4199 2150 4199 4598 792 4762 3059 3894 3059 4732 3495 958 3844 4229 1611 3872 1715 4225 4613 4465 3691 4154 4465 2976 1922 855 1583 1025 4780 4607 4204 586 2498 1927 3760 2115 1927 1263 3178 3902 3178 600 2915 4639 3265 4175 4639 4175 3265 2159 2281 4764 2746 4589 4505 4589 3439 4505 3439 2393 3729 4276 3137 3015 859 4689 804 3226 2804 333 2496 2496 1261 2940 3467 1167 4129 4569 2723 4482 2037 4774 4045 4774 4614 3774 1190 2664 999 210 327 1615 4730 2210 411 423 2420 86 1724 86 1971 3497 4378 4486 1212 4699 415 4757 3113 738 746 193 4675 4280 3527 4507 4663 4507 1471 1267 1136 1267 2058 4270 1052 4270 1439 4326 580 1173 4326 4349 3421 345 3421 2992 2458 4083 2617 209 1926 3836 2600 2110 3638 3284 1710 1710 3859 2532 1847 4720 4788 2276 4788 2300 2359 3094 2318 485 4237 485 2927 2713 2440 3510 4694 4268 2100 4268 3635 4789 3838 4550 4789 471 1009 3474 1411 1047 3523 1047 3704 3744 1700 2445 4277 4277 3115 3277 2816 2179 1688 3767 4495 4008 2835 4568 2114 685 1044 3854 2606 4475 3885 1498 2710 4459 4020 4019 4459 1900 127 2593 2495 2495 704 4030 4224 3755 4705 1389 1113 3927 4441 276 3927 2820 3462 3462 1707 4722 4197 4722 2001 546 4201 4308 168 1033 1787 4288 3695 1084 4562 1866 4405 3309 3163 4101 3909 3507 4101 852 3544 4747 1897 4747 1895 4707 1563 4707 3155 3971 4712 4115 4789 3440 282 881 1259 3889 4166 4429 4659 3006 3100 299 3100 638 2353 1041 234 1303 1902 1304 1902 4658 2786 4608 4658 1392 1053 1987 744 744 3618 3358 2741 1603 2036 3197 137 4321 4348 3856 1623 1095 1813 1277 815 816 1277 4605 3787 3916 2013 1802 1226 354 3632 314 3632 103 3142 103 520 4062 1226 1319 859 3252 2221 2547 1473 3626 2763 1810 4011 3109 4309 3371 1821 4591 3190 3579 3869 2224 1008 1123 3138 3636 3709 3708 3636 634 3072 3956 2826 4673 3557 1138 1049 2562 1217 4720 2219 3420 2219 351 322 4053 2362 4239 3314 4143 2185 4143 2243 3118 2604 4641 4395 4396 4641 4530 3197 1562 3636 1181 2845 2737 1181 4250 1056 1056 4344 3680 3938 3010 600 22 573 3169 1171 1171 4249 58 2851 4755 2851 4681 580 2465 1118 2303 1118 4657 1132 2517 4126 3979 4126 2165 4089 2007 2775 2205 3703 3620 3319 2899 2372 159 3603 3193 3293 4310 524 3956 4380 4421 4656 4421 4706 4656 4706 204 2321 310 3857 4656 357 36 3325 3323 36 1104 4722 3168 2793 1980 3258 2334 3790 3388 2122 3283 2860 2561 4715 4715 2396 2923 1269 4731 1269 3037 4160 4228 2600 4485 2242 3989 2421 2421 4700 4163 2055 4489 980 1893 4078 4193 1141 2669 1824 128 1824 1234 3806 1205 1793 2295 2723 4569 2295 2611 4498 2613 4498 3129 3931 878 3218 156 4551 4746 4714 1209 4450 216 3113 4557 3019 1870 4557 1870 3019 625 2392 4430 2392 4136 1878 736 3148 295 3148 3981 4538 6 2344 96 4713 4713 3827 1646 3847 4242 790 4598 4242 4598 790 4652 3527 1934 1308 4732 4259 2951 3403 1312 571 4183 4364 4690 3673 4690 2880 4203 470 2943 4360 160 4481 3906 685 4172 4339 3910 1547 914 4669 2770 3803 3786 568 3095 1310 4010 3600 4010 3483 4706 357 902 3343 4080 3864 1941 1511 4777 959 4777 2738 4092 3876 4514 2818 1786 3982 4778 2731 1152 2731 1348 4252 2003 2257 957 1942 3238 3389 1206 3389 2457 3028 4567 3788 3788 557 128 1825 3928 2709 1738 4194 3075 1641 3419 4718 343 968 343 4332 4455 4426 3994 4455 185 2946 4693 3299 4560 4634 4100 641 4215 2735 889 187 3857 4308 4475 4531 3419 1216 4169 3012 2214 2971 3235 4266 3000 4295 1166 3000 4583 1995 4593 4583 4593 1995 4275 1032 4275 1033 52 3293 3883 3738 789 627 2787 2070 2789 2070 4084 106 68 4084 68 106 2086 2105 2085 2105 4299 3857 887 1681 1575 3831 3205 853 885 4123 388 4618 4773 2740 759 1207 758 1207 4507 4664 4327 179 454 1059 4056 3139 3140 4056 677 3441 2604 3138 4631 2815 3861 2450 4457 4759 2955 2198 4251 1290 1797 1290 3605 2273 1841 3088 4688 3949 4463 4688 4463 3949 1935 1674 4588 900 1141 2731 2228 2731 2280 3646 2784 998 2784 999 310 291 4301 168 2021 168 2021 4301 3614 3326 3614 3335 1822 4783 1821 4783 1001 1243 2913 3652 849 929 4606 849 4658 4579 1128 2378 3561 2136 1667 3972 3697 1921 4358 2576 3639 2576 3054 4415 4094 329 2804 3227 3834 4055 2046 4412 2464 360 528 245 2480 1329 1063 3354 1063 1226 1540 2189 1016 1540 664 1946 4138 2470 4657 1131 2229 108 821 3879 2423 2428 4389 2423 608 3258 608 4759 4759 3258 2348 2019 4670 718 2251 4670 2799 2491 2745 1917 2745 4785 1917 4785 1078 3424 4708 2152 4577 1337 4092 4782 4093 4782 4484 2443 3589 3445 3589 595 1181 83 1455 2707 2343 2523 4499 2613 82 831 1541 2189 4585 848 4212 1352 3922 2039 597 3922 4173 1710 4173 4587 2218 4334 3046 4749 221 2567 2239 1717 2898 817 1478 3580 2211 4368 4393 3545 253 4426 1569 3028 1568 3028 70 898 369 4745 3851 4745 3723 4748 262 452 2213 3257 4041 2362 315 3970 831 2798 4769 2055 4758 4238 4453 2665 4143 3976 4784 3897 3357 4784 199 59 320 3223 3136 3216 1739 162 4741 878 3744 4533 52 4668 3293 4668 4780 4090 223 4577 224 4577 2140 2761 4768 2834 3018 2270 250 2221 3188 2381 1173 4670 1202 4670 2200 1310 3095 2200 89 4788 89 4414 4788 4414 3010 3086 2637 4242 4609 1877 4215 1593 591 2448 1216 1518 1570 3700 3581 2180 3496 2180 3496 3581 4373 1299 4327 1443 4338 1005 2012 3743 4522 2169 4654 4522 22 4096 24 4096 1596 570 1919 3262 846 4585 1354 1253 1254 1354 1741 1473 1829 2496 4636 3296 1616 1160 753 340 340 752 3453 185 3906 1044 3905 4001 3976 2185 3291 2185 3783 765 987 1255 4083 1255 3649 2257 162 4480 2004 3133 4524 514 1973 2554 1067 3055 2694 300 2379 300 585 2268 3112 4238 2460 2992 1269 2688 2345 1467 969 2666 1935 1673 4699 416 3707 1408 397 1600 350 2017 4423 3566 1153 4473 3378 2048 3167 2112 2297 4561 957 4628 3002 3582 2203 3632 1535 3632 1535 2203 1239 2221 2518 198 4497 379 4604 2533 1278 2698 2311 4246 3961 3634 2920 465 230 2494 4153 3667 4008 3374 3264 4590 4525 4787 156 2726 1009 4672 4444 4672 4444 1009 2744 1447 4510 3379 3269 2516 3389 1207 3756 4705 4484 4277 4485 4277 3798 1626 704 1261 2495 1261 4040 4369 4040 1425 4456 1821 3634 1824 2669 3634 4504 3920 4632 4522 4352 1654 1654 1429 2079 2774 3201 2774 3101 1281 3666 1281 3902 3964 3094 3881 3109 716 3253 1342 3024 3955 2343 4123 1418 4651 4437 1294 1906 4576 368 145 4288 2493 4299 40 1426 4253 1414 2010 1241 1511 555 2725 3069 2802 3069 4737 3519 4570 2581 3307 4175 3428 3428 4639 1865 821 1865 822 4375 2143 4375 1693 4345 4033 4638 4747 4504 3438 1455 4086 97 1547 1764 3580 4741 2039 212 327 1407 1766 3221 3646 1515 3711 3644 4479 3644 4478 1595 4653 4707 4622 3586 3603 314 3970 2365 3499 4556 998 3977 467 4690 3009 3146 3173 1318 4343 4599 4660 4585 3381 3380 4585 4083 4121 4031 1048 2131 4245 1844 3066 2101 599 675 4637 4507 3336 1016 1594 1292 164 4685 4441 4685 4442 4629 3636 4629 3709 1648 3474 4372 1648 4372 3474 4692 2527 3799 2627 2351 4206 244 4260 3702 4700 2449 1417 630 4624 2643 3764 2643 1847 3713 3342 3899 4787 1889 1538 1145 2501 4042 4705 4705 3950 3824 2626 537 4030 2965 3443 4669 4402 2573 3764 4422 1019 2355 1005 3785 2375 1723 4786 4469 4786 982 3793 3793 981 1414 1970 118 594 1690 3414 4243 4766 4766 1690 3431 218 217 3431 1648 1411 2738 1244 180 2072 4174 4245 1041 4518 4518 234 1161 4090 2669 3961 554 2619 3136 3674 4633 3951 4633 4042 2499 2268 4519 2824 1956 1895 2500 1521 1827 3743 4576 560 2464 3188 1001 4790 2904 4790 4771 2018 4022 2018 1200 4000 2499 249 3357 1760 1760 2960 1396 273 2518 273 2346 3808 4724 3204 4724 3203 4781 3554 3179 238 4774 4615 3216 3571 956 4561 2577 3629 3271 4009 3588 485 1592 4699 3286 3270 2713 850 2961 3869 1975 2554 3703 2454 4440 1803 86 3145 742 2728 2503 2728 4686 4596 4477 972 972 4460 4776 3461 3837 4789 3044 3983 3717 4080 4772 4080 874 3862 4174 3948 2167 1594 4026 39 4678 3142 4243 2950 3155 4234 4517 2459 2636 3492 2983 936 1978 936 4777 1244 2444 1615 2444 4730 2693 4735 1224 2693 4732 2062 3641 530 2962 2378 4518 3245 4767 1282 96 1867 524 4253 4625 1360 1942 185 1052 1775 4237 487 3617 3369 4358 2184 2890 1429 1980 608 4722 1434 4180 465 2676 3545 3052 354 4031 4208 4683 3945 1606 1108 3185 4610 4388 2237 4387 2237 4714 2710 3216 2670 1523 488 2070 2048 4496 24 3719 4790 1100 4790 3840 3107 950 2775 2009 2426 3454 4419 2720 2208 2283 4490 2213 966 966 470 1313 4405 1207 1922 238 1090 2390 3896 4430 2062 4424 3566 1998 1175 4766 3414 2080 4611 3471 3386 3471 2834 4586 1728 1598 2901 2988 3688 1051 3688 2183 3736 2183 4727 2093 2163 664 1871 3540 3981 3844 4703 4019 3844 4505 4588 4615 3713 4479 972 4606 2712 3933 755 371 4552 3084 3568 1900 4657 3807 1757 4275 4048 4785 1916 4075 1775 3628 4682 3628 4681 154 2957 2149 4635 2118 936 3513 1037 1792 1299 3822 3205 4222 279 3904 4365 2898 818 405 1020 2184 2576 673 4637 573 4096 2572 4096 771 2957 1578 4069 2844 3934 2503 2602 4120 4488 632 3893 4434 4436 3197 1789 1535 354 198 273 4509 1615 1757 4773 3807 4773 2602 2728 4043 211 262 4777 2408 3510 4491 2283 4602 1095 1056 2485 3463 4687 3409 3284 3966 3589 1889 2360 4361 3556 1979 4651 1295 4724 987 1256 2985 2619 1168 4129 3783 4320 2056 1090 4182 3248 4207 3248 3519 309 2287 3519 4444 1008 4331 3401 3883 2457 4667 269 3212 4334 2180 1500 4619 4783 2217 4734 3518 1760 4179 4386 2769 2429 4279 3496 2105 2525 2104 2525 2686 1991 476 2856 4586 1010 2445 4484 3172 1042 309 4570 3312 3537 4336 1516 4589 3438 1233 1576 4456 3371 4456 3370 831 4395 4395 1036 170 3204 179 1443 1085 4044 4485 3746 4277 3746 4615 3342 4043 3569 485 2149 1821 4617 2312 3349 1559 3814 3650 4419 3265 2979 302 2379 2816 4201 3277 4201 1938 2640 2768 241 3907 4769 4415 2512 305 1788 4786 1725 1180 83 2889 629 2889 3655 4580 1897 4225 3804 1816 4586 2490 4576 3687 2879 3396 4577 3396 223 4566 1650 2229 3884 2750 3262 2373 4682 4026 2186 4434 1408 3386 3470 4004 4235 2991 4503 555 4230 3415 4528 3415 3854 3854 4528 4658 4515 109 1237 4392 1093 2691 4392 1925 4738 4629 2026 4522 3199 112 536 4565 4020 490 2545 1416 346 2536 2940 1828 53 3245 4411 4048 1994 4068 251 121 3940 2735 107 4084 107 2464 2694 1442 4619 2317 3037 2073 180 432 3097 1640 4442 3855 4442 2346 1784 3288 657 4644 1711 4467 4337 3974 4266 4641 831 2404 4474 3397 842 799 4030 957 4561 211 3569 958 4703 2347 2019 93 2019 940 921 3277 3457 1542 285 2489 1574 4286 4738 2810 757 757 3223 3735 2719 2770 2719 365 4212 2979 4287 1523 2545 1523 4626 4772 868 4633 4449 3969 4370 160 317 4589 4504 2857 4790 4612 4619 3024 4356 4726 4787 1117 3478 4753 3028 3081 4095 1936 975 2234 3134 4293 3134 2919 3681 639 2353 3469 1064 679 273 1265 535 3669 1283 4444 1454 4627 1803 4535 4016 256 2651 3954 1730 744 835 3618 835 1741 4317 4586 1729 3231 1283 1523 490 1691 2528 4346 2489 3431 3486 4761 4488 4753 4775 4248 4775 3244 4010 4721 3893 1254 1353 1246 4703 2639 4775 1011 4211 4500 2755 4624 629 4643 1345 817 4305 1340 3648 461 2396 1247 4013 3407 4013 1861 2658 4747 4580 1440 4140 3458 822 4508 2755 353 3261 4510 2734 1408 4436 4237 1804 4131 4644 2622 4630 2622 3349 4469 3324 4786 3324 3780 3664 1265 4660 452 4777 2936 536 1091 3902 1089 3902 3513 3111 2715 4556 4728 4556 4728 2715 4216 2688 3427 3375 3647 2257 2959 4695 941 4414 1016 3117 2028 4629 4397 4775 1822 4619 3288 2288 3471 4768 3212 2218 2218 3213 1398 2800 1200 4788 1200 4720 3609 4775 4615 904 1828 4333 3404 2830 2002 3404 3513 1038 1018 3973 3605 4715 4333 53 799 4224 1535 3052 3561 2137 4628 4561 3053 4630 4346 4543 623 4431 1271 2246 4154 3451 2030 780 2179 3546 3896 4706 334 2684 3630 4787 3462 4687 4331 2004 940 4691 3534 3299 375 3534 1158 1465 4213 1579 3605 2396 3694 931 2763 102 799 4383 1738 4337 3593 1791 3660 4116 4766 2950 2407 4278 1637 1853 2423 333 4688 4297 2208 4053 2237 4538 2288 657 4171 4211 1042 4315 3546 2178 4233 3111 27 4305 3639 530 2542 4418 2967 3534 938 2030 3458 1865 2098 4268 1585 2760 1587 2760 1349 324 4448 1839 4387 1839 2615 4642 2615 4044 4770 395 3827 543 4270 1440 4748 4557 1040 4315 3321 4706 3753 3057 4189 818 4270 4140 3477 2204 597 2421 2580 710 2984 2805 4706 1610 3793 1136 3531 4474 2536 3016 2651 2452 4750 4009 1650 374 1377 4412 3531 2404 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 157 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 22 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 260 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 207 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 292 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 53 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 189 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 139 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 505 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 13 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 59 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 278 784 785 786 787 788 789 790 791 792 793 794 795 796 374 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 579 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 5 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 56 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 97 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 524 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 658 994 995 996 997 998 999 1000 1001 622 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 874 1026 1027 1028 1029 1030 800 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 494 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 620 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 178 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 549 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1107 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 581 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 285 1193 1194 1195 1196 1197 1198 704 1199 1200 1201 1202 1203 1204 1205 1206 1207 251 1208 1209 1210 1211 1212 1213 1214 1215 1216 1066 1217 1218 1219 1090 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1157 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 985 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 844 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1043 1327 1328 1329 1330 626 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1171 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 293 1369 1370 1371 1372 1373 1374 1375 1376 1377 993 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1000 587 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1176 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 831 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 664 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1395 1471 1472 1473 1474 1475 1476 1477 1478 607 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 685 1524 1525 1526 1527 1528 1529 1530 1531 1532 907 647 1027 1533 1534 988 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 393 1565 1566 1567 1448 1568 302 1569 1570 1571 1572 1573 1574 1575 624 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1319 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 948 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 857 1640 1641 1642 1643 1644 1645 1646 1647 1648 315 1649 1650 650 1651 1652 915 1651 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1131 1693 1694 1695 731 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1420 1763 1764 1765 1766 126 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 838 20 1781 1782 1783 1784 1785 923 1786 1787 1788 156 1789 1790 1791 1792 1793 1794 1795 905 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 89 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1816 654 1847 1848 1849 1850 1851 1852 1853 1854 1855 364 1856 115 1857 1858 1859 1860 1861 583 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1178 1881 1882 1883 1884 1885 956 1886 1887 1888 1889 1890 1891 1065 1892 689 1893 1894 1895 1896 1897 1898 15 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 736 1915 1916 1917 1918 1657 1919 1920 1921 1922 1923 1924 1925 1926 947 1927 1928 1929 1930 1931 1932 1933 1934 1935 660 1936 392 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 154 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 224 2015 2016 2017 2018 2019 2020 2021 1140 2022 2023 2024 2025 2026 2027 2028 2029 2030 1011 2031 2032 2033 2034 2035 2036 2037 2038 86 2039 2040 2041 2042 2043 2044 2045 1882 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 88 2060 1094 2061 2062 2063 2064 2065 637 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 556 2082 2083 2084 2085 2086 2087 1123 2088 2089 2090 2091 2092 2093 2094 2095 2096 1699 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 1291 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 1164 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 1481 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 746 2249 2250 2251 2252 2253 321 2254 2255 2256 2257 2258 2259 1230 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2114 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 1818 1858 2291 2292 2293 2294 2295 2296 1689 2297 103 2298 2299 223 2300 2301 2302 1328 2303 2304 2305 1755 2306 2307 2308 2309 2310 2311 2312 2313 2314 1579 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 1039 2325 2326 2327 2328 2329 2330 870 2331 2332 1399 2333 2334 2335 2336 2337 2338 2339 2336 2340 2341 2342 2343 2344 1229 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 811 2383 2384 2385 2386 2387 2388 2389 2390 2391 1544 1463 2392 554 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 1359 2423 2424 2425 2426 2427 2428 2429 1961 2430 2431 2432 2433 2434 2435 2436 2437 1370 2438 2439 2129 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 1950 2458 2459 2460 2461 2462 2463 1015 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 633 2478 295 2479 2480 929 2481 2482 2483 2484 2485 2486 2487 2488 2489 2472 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 1007 2316 1100 366 2566 2567 2568 2569 2570 2571 1994 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 1270 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 1930 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 532 580 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 78 2662 2663 2664 2665 2666 2667 2668 2445 2669 2670 2503 2671 2672 2673 2674 2084 2675 2676 2677 2678 2679 2680 2324 2681 2682 2683 2684 674 2685 2686 2687 2688 2689 2690 437 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 1634 2705 2706 2707 548 1614 2708 1773 2709 2710 2711 2712 2713 2714 483 2715 2716 2717 2718 2719 2720 2721 1211 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 1167 2738 2739 2740 2741 2742 297 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2410 2772 2773 2342 2160 2774 2775 2776 2777 973 2778 2779 2780 2781 1827 2770 2782 2783 2367 2784 2785 2786 2787 2575 2788 2789 2790 2791 2792 2793 2794 1474 2795 2796 2797 2798 2799 2800 2801 2802 2803 368 2804 2805 2806 2807 2808 2809 2810 2811 1653 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2044 2834 2835 2836 2837 611 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 599 2859 2860 2861 2862 1860 2863 1563 2864 2865 2866 2867 2163 2868 2869 2870 2871 2872 2873 2249 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2885 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 586 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 596 2938 752 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 1364 2950 2951 357 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 1728 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2270 1222 2979 2980 2981 2051 2982 2983 2984 2985 2986 2987 1570 2988 2989 2990 2991 2992 2993 2994 2644 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 2227 1637 3007 3008 3009 3010 2688 2450 3011 3012 3013 3014 3015 3016 3017 3018 3019 530 3020 2447 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 289 3031 3032 3033 3034 3035 3036 3037 1886 3038 3039 3040 3041 858 3042 3043 3044 338 3045 3046 3047 3048 3049 3050 2015 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 1560 3063 3064 3065 3066 3067 3068 3069 3070 3071 1497 3072 3073 3074 541 3075 3076 3077 3078 3079 3080 3081 3082 3083 2703 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 2861 3105 3106 3107 3108 3109 3110 3111 3112 3113 2042 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 2774 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 567 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 2291 3174 3175 785 3176 3177 3178 3179 3180 3181 3182 657 3183 3184 3185 3186 3187 3188 3189 3190 63 8 3191 3192 3193 3194 394 2201 3195 3196 3197 3198 3199 3200 753 3201 3202 3203 2162 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 694 1999 3216 3217 3218 3219 3220 2415 3221 3222 3223 1038 471 3224 3225 3226 3227 2680 3228 3229 3230 3231 3232 3233 281 3234 3235 3236 3237 3238 3239 3240 1080 3241 3242 3243 3244 3245 3246 3247 3248 1212 3249 3250 3251 3252 371 794 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 1334 3266 3267 3268 2497 3269 3270 3271 3272 3273 3274 2964 525 3275 888 3276 3277 3278 3279 3280 3281 3282 3283 3284 2614 3285 3286 3287 601 3288 3289 3290 3291 3292 1125 3293 3294 773 3295 3296 3297 3298 3299 3300 3301 3302 3303 2104 3304 3305 3306 3307 3308 3309 1308 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 1973 3332 3333 3334 3335 3336 705 3337 3338 1802 3339 3340 3341 3342 3343 3344 3345 3346 1126 3347 3348 3349 3350 3351 3352 3353 3354 3355 1154 3356 3357 3358 2876 3359 3360 2264 3361 1250 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 2087 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 2364 3390 3391 3392 3393 3394 3328 3395 3396 3397 2700 3398 3399 1527 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 2247 3419 3420 3421 3422 2750 3423 3424 3425 3426 3427 3428 3429 2078 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3232 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 127 3450 3451 3452 3453 3454 3455 3456 82 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 2174 3478 2483 897 3479 3480 3481 3482 3483 3484 3485 3486 585 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 2444 3511 3512 2014 3513 3514 3515 500 117 3516 3517 3518 2783 3519 3319 3520 2309 3521 3522 3523 3524 823 3525 3526 98 3527 3528 3529 3530 3531 3532 3533 2903 3534 3535 3536 3537 3538 3539 1236 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 2696 3568 3569 3570 3571 3340 3572 74 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 2862 3589 3590 3591 1931 36 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 370 3605 3606 3607 3608 3609 3610 3611 982 3612 3613 3614 3615 3616 3617 1255 3618 2716 3619 3620 39 3621 3622 3623 3624 3625 3626 3499 3627 3628 3629 3630 3631 3632 3633 936 3634 3635 3496 3636 3637 3638 3639 3640 3641 1779 397 3642 3643 3644 1351 350 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 1962 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 673 3674 3675 3676 812 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 64 3687 3688 3689 3295 2630 3690 1259 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 81 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 508 3717 3718 3719 3720 3721 3722 3723 3724 2686 3725 3726 3727 3728 3729 3730 3731 3732 3733 21 3734 3735 3736 3737 3738 563 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3332 3750 3318 3751 3752 3753 3754 3755 3756 3757 504 2128 3758 3759 3760 911 3761 3762 3763 3764 3765 3766 3767 1985 3601 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 2547 3785 3268 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 241 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 781 3811 1003 3812 3813 3110 3814 3815 2706 3816 3817 3818 3819 3820 30 3821 3822 3823 2041 468 3824 3825 3826 3827 902 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 2273 3843 3844 1278 2600 3845 3846 1219 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 2608 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 2393 1079 3887 3888 42 3889 3890 3891 3892 3893 2286 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 1574 3904 3905 3906 3907 3752 3908 3909 2755 3910 3911 3912 3913 3914 2910 3915 3916 3917 3918 3919 3920 3921 3922 3923 708 3924 3925 1693 3926 3927 3928 3929 3930 2637 3931 3490 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 562 3945 3763 3946 3947 3948 2610 3949 3950 3867 3951 3881 3952 3953 3954 3955 3956 3957 974 3958 3959 3960 1147 3961 3025 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3510 3525 3975 3976 3977 3978 3979 3980 309 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 1997 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 3987 4004 3483 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 2804 4027 3388 2997 4028 4029 4030 4031 4032 4033 4034 2928 4035 4036 1604 4037 4038 4039 3242 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 2379 542 3076 4052 4053 4054 4055 1598 4056 1494 4057 4058 4059 3725 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 814 3448 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 2082 4096 2979 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 2606 4109 34 1503 4110 4111 4112 1585 4113 4114 4115 4116 3897 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 3229 4129 4130 4131 4132 1713 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 1419 4146 4147 4148 4149 4150 4151 934 4152 4153 3967 4154 4155 4156 4157 4158 4159 4160 4161 1012 4162 4163 4164 2734 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 1317 4175 4176 4149 4177 4178 4179 4180 4181 4182 4183 2408 2306 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 3742 4200 4201 4202 4065 4203 4204 676 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 1327 4234 4235 4236 4237 4238 4239 3358 4240 4241 4242 4243 3580 1665 3828 4244 4245 1078 4246 4247 4248 4249 4250 4251 733 4252 4253 4254 4255 998 4256 4257 4258 4259 4260 4261 4262 11 4263 4264 3273 822 4265 1380 4266 4267 4268 4269 4270 2268 4271 4272 4273 4274 4275 4276 4277 4278 41 4279 4280 4281 280 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 3274 4294 4295 4296 4297 4298 3374 4299 4300 4301 1074 4302 4303 3568 4304 2639 4305 2729 729 4306 3028 4307 4308 4309 4310 4311 4312 3818 4313 1381 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 2331 4326 2436 4327 4328 4329 4330 4331 4332 4333 2325 4334 4335 4336 2500 4337 4338 4339 4340 1417 4341 4342 1620 2965 4343 3922 1369 4344 4345 4346 4347 4348 4349 2229 4021 2542 4350 1982 4351 4352 4353 4354 4355 4356 4357 4358 346 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 662 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4379 4389 4390 4391 4392 4393 3111 4394 4395 4396 4397 4398 4399 1750 3799 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 828 4411 4412 4413 4414 4415 4416 2869 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 1271 4428 4429 4430 4431 4432 4433 2598 4434 4435 799 4436 4437 4438 4439 4440 1963 4441 4442 4443 4444 1207 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 1415 4456 4457 4458 4459 1932 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 1992 4470 4471 1296 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 2529 4081 4482 4483 4484 4485 2077 4486 521 2576 4487 474 4488 3178 4489 4249 4490 4491 4492 4493 4494 2546 3258 1423 4495 4496 4497 4498 4499 4500 2945 4501 4502 4503 4504 4505 1723 4506 4507 4508 4509 4510 4511 4512 2340 120 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 1859 4525 3651 4526 423 3278 4527 4528 4529 3896 4530 4351 1958 4531 4532 4533 4534 4535 4536 4537 4305 4328 4538 4539 3482 3861 4540 2522 4541 4542 4543 2973 4544 4545 3103 1861 4546 4547 4548 4549 4550 4392 4551 2553 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4159 4565 4566 4567 4568 4569 4570 4571 4572 4573 4144 4574 4575 4576 3001 4577 4578 4579 4580 4581 4582 4583 4584 2260 4585 4586 4587 3730 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 711 4610 4611 4612 4613 73 4614 4615 4616 4195 1518 4617 4618 4619 714 4620 4621 4622 1379 1306 4623 4624 1800 4625 1566 4626 4627 4628 4629 4630 651 4631 4632 4633 3719 2293 4634 2469 4635 4636 4637 4638 235 4639 4640 4641 4642 4643 4644 4645 4646 3480 4647 4648 3831 4649 1132 4650 4651 4652 4653 4654 4655 4656 4657 3231 4658 4659 4660 4333 4661 4662 4663 3805 1548 4664 4665 1055 4666 4667 4145 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 3441 4680 1673 1562 4681 4682 4683 4684 4685 2683 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4212 4696 4697 4698 4699 4700 4701 3835 4702 4703 4704 4705 4706 4707 4708 806 4709 4710 4711 4712 4002 4713 4714 4715 4716 1681 4717 4718 4719 4245 4720 3653 4721 4722 4383 951 3838 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 2685 4744 1484 4745 4746 4747 4748 4749 4750 4751 4752 4753 1983 4754 4755 2470 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 1912 4766 4767 4768 4769 4770 362 4771 866 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 3581 4783 4784 4785 4786 4787 274 4788 3087 4789 4790 4791 4792 2746 4793 4794 4795 4796 4797 4798 4799 2636 4800 2585 4801 4802 4803 4804 4805 4334 1745 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 3245 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4047 1714 4847 1616 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 2831 1649 2582 4858 4859 2735 4860 4861 1312 1977 2643 4862 4863 4864 4865 4866 4867 4868 1325 1071 4869 3733 4870 1502 4871 4872 1026 4873 4874 4875 4876 4877 4878 4879 4880 4881 2 4882 4258 4883 4884 4277 4885 4886 4887 4888 2166 2881 4889 4890 4891 4892 4893 1906 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 3958 4905 4906 4907 4908 4711 4909 4910 4911 4912 4913 4914 4010 4915 4916 4917 4918 4919 4920 2173 3424 4921 4922 4923 4924 4925 2888 37 4926 4927 4928 4929 4930 4931 4932 4933 4934 1350 3527 4935 4936 4937 4938 4939 4940 4941 1952 1361 4942 3984 4943 4944 4945 4946 4947 176 4948 4949 3160 4950 4951 824 427 4952 4953 4954 4955 4956 1659 4957 4958 4959 4960 4961 4962 2860 3046 4963 4964 4965 4966 4967 4968 4969 1710 4970 4971 4972 472 4973 4974 4925 4975 4976 4977 4978 4979 4980 4981 1194 4982 3373 4983 3533 4984 4985 4986 4987 4988 1398 4989 699 4990 3969 719 4991 4992 4993 4994 2063 4995 4996 3823 4997 4998 4999 2541 5000 5001 5002 5003 5004 3951 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 4854 5015 5016 2220 5017 3017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 345 5029 3487 5030 3144 5031 5032 5033 5034 5035 5036 5037 5038 5039 3365 5040 2443 821 597 5041 5042 5043 5044 1587 5045 5046 5047 5048 5049 5050 5051 5052 5053 2283 5054 5055 5056 2625 5057 3114 5058 5059 5060 4866 5061 5062 5063 458 5064 4851 5065 2241 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 1087 5078 2570 5079 5080 5081 2901 5082 3011 5083 2281 5084 5085 5086 5087 2899 5088 1670 5089 5090 5091 1360 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 4578 2975 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 1035 5141 5142 5143 5144 646 5145 498 5146 5147 5148 5149 1735 5150 5151 5152 3882 5153 5154 2879 3706 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 3466 5179 5180 5181 5182 909 5183 5184 5185 5186 5187 5089 5188 5189 5190 5191 5192 4732 5193 2519 267 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 1083 5206 5207 2136 5208 5209 5210 5180 5211 5212 5213 5214 5215 1177 5216 5217 5218 2767 5219 5220 5221 5222 5223 5224 5225 1708 5226 4893 3016 1584 5227 5228 5229 1887 5230 873 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 2704 5242 5243 5244 5245 5246 5247 5248 5249 5250 2950 5251 5252 5253 3778 5254 5255 2981 5256 5257 5258 5259 5260 1910 5261 5262 5263 5264 4411 5265 5266 5267 5268 5269 4911 5270 5271 5272 1583 5273 5274 5275 5276 5277 1967 5278 672 3762 5279 5280 5281 5282 5283 5284 5285 5286 4364 4528 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 2207 5298 5299 5300 5301 5302 5303 3822 5304 5305 5306 5307 5308 5309 119 5310 5311 5312 5313 5314 5315 5316 5317 5318 3157 1855 5319 1807 5320 5321 1238 5322 5323 5324 245 5325 3645 1785 5326 5327 5328 3999 5257 5216 5329 5330 5331 5332 5333 5334 5335 5336 5159 5337 5338 5339 5340 1070 5341 5342 5343 1685 5344 5345 5346 5347 760 5348 5349 5350 5351 5352 5353 2815 5004 5354 5355 5356 5357 5358 5359 5360 5361 3188 5362 3556 5363 5364 5365 5366 5367 420 227 5368 5369 5370 5070 4791 5371 2940 2355 5372 5373 718 5374 4445 5375 5376 5377 5378 1261 5067 4188 5379 5380 725 5381 5382 5383 5384 5385 5386 238 3185 5387 5294 3402 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 3578 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 3595 5414 5415 5416 5417 5418 1151 1262 5419 5420 5421 5422 5423 5424 4487 5425 5426 5427 5428 5429 5430 3048 5431 5432 1851 1017 5433 5434 5435 5436 4284 5437 3704 2279 5438 767 5439 380 5440 5441 5442 5443 2920 5444 5445 5446 5447 5448 5449 5450 5451 2622 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 3375 5465 5466 5467 5468 5469 5470 1282 5471 5472 5473 5474 5475 5476 4201 2826 5477 5478 1339 5479 5480 4542 5481 5482 5483 5484 4604 5485 2962 5486 5487 5488 5489 5490 5491 5373 5492 5493 3327 3870 5494 5495 5496 1288 5497 5498 5499 5500 5501 3780 5502 5503 4092 5504 5505 5506 5507 5508 2449 910 5509 5510 3221 5511 5512 5513 5514 497 3630 5515 4011 5516 5517 916 5518 5519 5520 5521 5522 3435 5523 5524 5525 5526 5527 5528 4994 5529 1793 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 3005 5549 5550 5551 5552 5553 5554 5555 2566 5556 5557 1964 5558 5559 5560 5561 5562 5563 5564 5565 17 2406 3007 4026 2294 5566 5567 5568 1595 5569 5570 5021 5571 5078 649 5572 5573 5574 5091 5575 5576 5577 4845 5578 3339 5579 5580 3270 1650 5581 5582 5583 5584 5585 1331 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5170 5601 5602 1269 5603 5604 5605 5606 5607 5608 5609 5610 5611 4000 5612 5613 5614 5615 5616 2409 1129 4741 2555 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 4881 5628 5629 5630 5631 2117 5632 5633 5634 5635 244 5636 5637 5638 5639 5640 5641 5642 5643 5644 1940 5645 5646 5647 5648 5649 5650 5651 5652 312 5653 5654 5655 5656 3875 5657 5658 5659 5660 5661 5662 2305 5526 5663 5664 5665 5666 5667 5668 5669 5042 5670 5671 1215 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 3443 3688 5689 5690 5691 5692 5693 5694 4882 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 3526 5716 5717 5718 4982 4122 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 1895 5729 5730 5731 1740 5732 5733 5734 2097 5735 2361 5736 306 5737 3256 4600 5738 5739 5740 1508 5741 3656 5742 4408 5743 5744 3637 1949 2858 5745 3753 5746 5747 5748 5749 5750 5751 3658 5752 5753 5754 5755 5756 5757 1876 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 2143 5772 5773 5774 5523 514 5775 5379 5776 5777 5778 4839 5779 1567 5780 1655 4727 5781 5782 3442 5783 5784 5590 5785 5786 5787 5788 5789 5790 5791 5792 5793 2171 5794 3801 5795 5311 5796 2144 5797 5798 5799 5800 5801 5802 5019 5803 5804 5805 5806 3195 5807 5808 5809 5810 5811 5812 5813 528 5814 5815 5816 5817 5818 5819 4461 4020 2864 4908 5820 3411 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 1974 5834 5835 5836 5837 779 5838 5839 5833 5840 5841 5842 5843 5844 5845 4151 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 3906 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 2792 5880 5881 5882 5883 5884 3604 23 5885 5886 4225 3089 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5062 5897 5898 2721 5899 4884 5900 5901 3497 5902 5903 3356 5904 5905 4170 5906 5907 5908 5909 3129 5808 1315 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 1571 5920 5921 5922 4108 1159 5923 5924 5925 5926 5927 5695 5235 4304 5928 169 5929 5930 5931 5932 5933 5934 2412 5935 5936 5937 3360 5938 4948 5939 5940 4066 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 1948 5951 5952 1515 5953 3849 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 2073 5967 5968 5003 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 4244 1737 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 2396 6003 6004 6005 6006 680 1664 6007 1169 6008 4589 6009 4566 6010 5542 6011 6012 4503 6013 6014 937 6015 6016 6017 6018 6019 6020 3508 6021 6022 6023 6024 6025 6026 5646 6027 6028 6029 6030 6031 6032 6020 6033 1676 6034 4568 6035 6036 447 6037 6038 6039 6040 6041 6042 6043 6044 4637 6045 6046 6047 6048 5321 6049 6050 6051 6052 6053 222 6054 6055 6056 6057 6058 6059 6060 6061 6062 5300 2422 2153 6063 6064 6065 6066 3998 6067 6068 6069 2708 6070 2632 6071 6072 6073 6074 6075 6076 965 6077 6078 6079 1124 6080 2895 2468 6081 6082 1069 2780 1703 6083 6084 2745 6085 6086 3814 6087 6088 3205 5444 6089 6090 6091 5163 5081 3634 331 3767 6092 6093 4900 6094 4263 6095 6096 6097 6098 6099 6100 6101 6102 5468 6103 6104 3724 6105 6106 6107 6108 4118 6109 6110 6111 6112 6113 6114 6115 6116 6117 2198 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 5475 6135 6136 1127 6137 6138 2318 6139 6140 6141 3530 6142 6143 6144 6145 6146 6147 5893 5412 1623 6148 341 6149 4466 6150 1042 6151 6152 6153 6154 6155 149 6156 1013 6157 4470 6158 6159 3505 6160 6161 6162 1888 6163 6164 1382 6165 6166 6167 6168 6169 6170 6171 6172 6173 1761 2943 6174 6175 1897 6176 6177 6178 5633 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 4310 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 1837 6207 6208 6209 6210 6211 6212 6213 2346 6214 291 6215 3271 6216 4486 6172 6217 4315 1200 6218 6219 6220 1498 6221 6222 6223 6224 6225 6226 5975 6227 6228 6229 4134 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 4584 6244 6245 6246 6247 5956 6248 6249 6250 6251 6252 6253 6254 3437 6255 6256 6257 6258 6259 2313 6260 6261 6262 892 6263 5055 4546 6264 3738 3732 6102 6265 6266 5916 4922 6267 6268 3419 6269 6270 3426 6271 6272 5087 1822 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 1086 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 1115 6301 6302 6303 6304 6305 6306 6307 3019 6308 4080 6309 6310 5525 6311 6312 6313 1986 6314 6315 6316 3236 6317 4685 5562 6318 5577 6319 6320 1853 6321 6322 6323 6324 6325 6326 6327 6328 6329 4457 6330 6331 6332 6333 6334 6335 4148 6336 6337 6338 6339 6340 5041 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 3772 3687 6351 827 6352 2638 4532 5925 6353 6354 955 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 707 6378 2863 5585 6379 6380 4135 4763 6381 6382 6383 5816 6384 4767 6385 6386 6387 6388 301 6389 6390 6391 6392 4623 6393 6394 6395 6396 2200 6397 6398 1198 6399 6400 6401 4833 6402 6403 6404 6405 6406 6046 6407 6408 6409 6410 6411 3060 4547 6412 6413 6414 6415 4579 6416 6417 6418 6419 5334 6420 6421 6422 2691 6423 5314 6424 6425 6426 6427 6368 6428 6429 4121 6430 6431 6432 6387 6433 6434 6435 6436 6437 6438 6439 6440 4562 6441 5931 6442 6443 1061 6444 6445 6446 5410 4752 6447 6448 2527 5592 6449 6450 405 999 6451 6452 6453 6454 3304 6455 2536 6456 6457 6458 6459 6460 3965 6461 4294 6462 4161 6463 6464 5843 6465 2816 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6469 6480 2218 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 5057 6491 6492 6493 6494 3628 6495 2369 6496 6497 6498 6499 3751 6500 6501 6502 1554 6503 6504 6505 6506 6507 6508 2896 6509 5619 6510 6511 6512 5306 6513 6514 6515 6516 6517 6518 6519 6342 732 6520 5735 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 3237 6533 6534 6535 6536 6537 5729 6538 2310 5247 6539 6540 6541 5569 6542 6543 5666 6544 6545 6546 6547 6548 4870 6549 6550 6551 6552 6553 6554 4384 1266 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 226 6585 4883 777 1889 6586 6587 6588 6589 6590 6591 6592 969 6593 6594 6595 6596 4072 6597 6598 6599 2747 5206 265 6600 6601 6602 6603 6604 6605 6162 6606 6607 6608 5381 6609 5417 2223 6610 6611 6612 6613 6614 6615 4458 6616 6617 6618 6619 5668 4526 6620 6621 6622 602 5572 4632 6623 6624 6625 6626 2485 4169 6627 389 6628 6629 6630 6631 6632 4721 6578 1768 848 6633 774 6634 6635 4537 6636 208 6637 6638 6639 6640 6641 6642 6643 2332 3921 6644 6645 6646 6647 6648 6649 6650 2718 4228 1478 6139 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6597 6662 6663 6664 6665 6666 6667 4953 677 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6089 6680 6681 2244 4158 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 2561 6692 6693 4389 6570 6694 6695 6696 6697 6698 6699 3807 6700 3469 6701 6702 6703 6704 6705 6448 6706 4338 6707 6708 4775 5566 6709 1813 1093 6710 6711 6712 6713 6714 6715 2623 6716 6717 6718 6719 6720 5086 6721 6722 5354 2588 4614 6723 6724 6725 6726 6727 5903 6728 6729 6730 6731 5841 6732 6733 6734 387 6735 5858 6736 6737 6738 5331 6739 6740 3366 6741 6742 100 6743 3802 6744 6745 6746 6747 3744 1512 6748 2255 1487 6749 5293 1698 6750 3602 6751 6752 2682 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6061 6763 5889 6764 5528 6765 6766 2667 6767 6768 6769 6770 6771 1690 1466 6772 6122 6773 1032 6774 5409 6775 6776 619 6777 6778 6779 6780 6781 6782 6783 1799 6137 6784 6785 6786 6787 6788 6789 2579 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6746 323 6802 6803 6804 6506 6805 6806 6807 6808 6615 4784 3097 5694 5492 6809 6810 6811 6812 6813 6814 4710 6815 6816 5747 6817 6818 6819 6820 6821 6822 6823 816 6824 6825 5405 6826 6827 6704 6828 6829 6830 762 6831 6832 6833 6834 2562 6835 6836 4213 6837 6838 6839 6840 3364 6841 6842 6843 3553 6692 6844 4591 4079 6845 6846 6847 6848 6849 6850 254 6851 5031 841 6852 6853 6854 6855 6856 6857 4506 2941 6075 270 6858 6859 6860 2137 6861 6862 6863 2692 3593 6864 6283 6865 6866 6867 6868 6869 6870 6871 6872 2407 6873 6874 6875 6876 5393 6877 3905 6878 6879 6880 3919 2025 6881 6882 6205 5976 6883 6884 6885 793 6886 6887 3390 6888 1905 6889 499 6890 6891 6892 6893 478 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 3926 5606 6905 6072 6906 6431 6907 5096 6908 6909 6910 6911 6150 6912 6913 220 6914 6915 6916 6917 2403 6918 6327 6919 6920 6921 5183 6922 3844 6923 6924 6925 6741 6926 6927 815 6928 6929 6930 6931 6932 4626 263 5265 6933 6832 5011 6934 754 6935 6936 6937 6938 6939 6940 6941 6789 6942 6026 6805 6943 6944 2271 6945 639 2186 6946 1120 6947 6948 436 6949 6950 780 6951 6952 3431 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 1627 6972 6973 6974 547 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 4970 6986 6987 5077 6988 1890 6989 6990 6991 5425 5017 6992 6993 6810 6994 6995 3194 5673 6996 6997 6998 6999 3575 7000 7001 7002 7003 7004 7005 7006 4146 7007 7008 7009 7010 7011 3344 5856 7012 2874 7013 4421 6533 7014 57 7015 7016 1806 4585 2344 4690 3118 6198 7017 3515 1403 808 7018 5737 7019 7020 6098 7021 5374 7022 7023 2374 7024 7025 7026 7027 7028 7029 177 7030 7031 7032 7033 7034 7035 4472 2739 7036 3150 6996 7037 7038 7039 7040 5885 7041 795 6728 2017 7042 7043 7044 6214 7045 7046 7047 7048 7049 3813 7050 7051 7052 7053 7054 7055 7056 1440 7057 1349 7058 7059 1869 4289 7060 7061 7062 6213 7063 5887 2231 3036 7064 7065 7066 4657 7067 7068 7069 7070 7071 7072 7073 7074 7075 6958 7076 7077 7078 6875 7079 7080 7081 7082 4162 3488 7083 5767 4509 7084 7085 1073 7049 7086 7087 7088 7089 3977 7090 3122 7091 7092 7093 3986 3879 195 4942 7094 7095 7096 7075 7097 7098 7099 7100 7101 7102 7103 4890 7104 7105 7106 7107 7108 4314 7109 7110 7111 4926 7112 6631 7113 1738 7114 7115 6438 7116 7117 7118 7119 7120 7121 7122 7123 7124 5773 7125 5312 784 7126 7127 7128 7129 2094 7130 7131 7132 7133 7134 7135 2381 7136 7137 7138 7139 7140 7141 7142 5172 2016 4879 7143 7144 7145 7146 7147 4810 4756 5260 7148 7149 7150 7151 7152 7153 6937 7154 4248 7155 7156 7157 1751 4401 7158 7159 5169 6445 7160 7161 7162 7163 7164 7165 4843 7166 5269 7167 7168 6942 7169 7170 6755 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 1453 7181 7182 1316 2781 5616 7183 7184 7185 7186 3506 7187 7188 7189 7190 7191 7192 7193 7194 6560 7195 7196 7197 2209 7198 4841 7199 5777 7200 7201 7202 7203 3434 7204 5612 1358 7205 7206 7207 3961 7208 7209 7210 7211 4687 3928 7212 7213 7214 7215 7216 5095 7217 7218 7219 7220 4206 6536 6867 7221 1821 7222 6997 19 7223 7224 6155 7225 7226 7227 7228 6950 7229 5722 4114 6182 7230 7231 7232 3944 7233 526 7234 7235 7236 7237 167 7238 7239 5933 7240 7241 4805 7242 3006 7243 6380 7244 2197 4089 7245 5875 7246 7247 7248 7249 5731 7250 7251 529 7252 7253 7254 1234 7255 7256 3916 1914 7257 7258 7259 7260 237 7261 7262 2612 7263 7264 7265 7266 7267 7268 7269 7270 7271 5587 7272 7273 2709 7274 2055 3596 631 7275 7276 5821 4220 7277 7278 7279 896 7280 6295 7281 7282 7283 7284 6 2640 7285 1660 615 7286 7287 7288 5080 7289 7290 6987 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 945 7303 7304 7305 1522 7306 3718 7307 7308 7309 7310 851 616 7311 7312 7313 7314 7315 7316 5363 7317 7318 7319 7320 7321 7322 5754 592 7323 7324 5310 7325 7326 7327 7328 7329 7330 3809 7331 3872 7332 6344 4216 7333 7334 7335 7336 7337 7338 5589 6125 7339 7340 7341 5613 5396 7342 7343 7079 7344 7345 7346 7347 7348 7349 1192 2849 1706 3806 7350 7351 7352 7353 5806 7354 1725 7355 7356 7357 2590 7358 7359 7360 7361 7018 7362 7302 7363 7364 7365 5388 7366 7367 7368 4830 7369 7370 7371 1500 4231 6828 7372 2690 7373 7374 7375 7376 5780 5231 7377 7378 7379 7380 7381 3712 7382 3000 7383 7384 7385 5651 4426 7386 7387 7388 3952 7389 7390 7391 7392 7393 7394 7395 7396 5428 4904 5250 7397 7398 7399 7400 972 7250 4976 7401 7402 7403 7220 6175 6668 7404 7405 2959 7406 606 7407 7408 3136 7409 7410 7411 6253 7412 161 7413 5757 7414 7415 7416 7417 7418 7419 4898 4538 7420 7421 1951 464 7422 7423 7424 7425 7426 7427 5602 7428 1871 7429 7430 7431 7432 7433 7434 7435 7436 7437 3566 7438 7439 7440 7441 7442 7443 3320 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 1180 6543 1517 7454 7455 7456 7457 7458 7459 7460 6955 7461 7462 5063 6392 4276 4266 7463 5366 6487 7464 7465 7466 7467 7468 7469 728 7470 7471 7472 7473 7474 7475 7476 7477 7478 2357 7479 7480 3152 6588 6691 7481 7482 4819 4543 7483 7484 7485 7486 7487 2046 4242 7488 7489 7490 7491 7492 7197 3865 7493 7494 7495 7496 7497 7498 7499 7500 4809 7501 5954 3068 5553 7502 7503 7504 7505 4848 7506 7507 308 6067 7508 7509 7510 1363 7511 4501 7512 7513 7514 5982 7515 1679 7516 6288 5490 7517 7518 7519 7520 7521 7522 3773 7523 7524 7525 4757 7526 6080 7527 7528 5712 7529 7530 7531 7532 7533 7534 2559 7535 7536 7537 3161 2875 7538 7539 4215 3713 7540 6753 7541 7542 7543 7544 7545 1682 2502 7546 7547 7548 7549 7550 7551 4789 7552 7553 7554 1209 3395 7555 7556 7557 7558 7559 7560 5507 5394 7561 7562 2233 3559 7563 7564 7565 7566 7567 7568 3453 7569 415 2022 7570 7324 7571 7008 3519 7572 7573 391 7574 7575 1552 7576 7577 7578 7579 7580 7581 7582 5164 7583 7584 7585 7586 6388 1711 7587 7588 3992 2096 3216 7589 7590 1384 2116 7591 83 7592 7593 3714 2681 4412 7594 6050 7595 7596 7597 4192 7598 7599 7600 3197 7137 7601 6870 7602 7603 6995 7604 7605 7606 7607 7608 2068 7609 7610 7611 3666 7612 7613 7614 2917 7615 6012 7616 7617 7618 7619 7620 2949 7621 7622 7623 7624 7625 7626 5600 7627 7628 4489 7629 7630 5308 7631 7632 7633 7634 7347 7635 7636 7637 7216 7638 7639 5660 7640 4260 7641 7642 4694 7643 7644 7645 7646 7510 7647 7648 7649 3247 7650 7651 1671 7652 7653 7094 7654 7655 7656 7657 2829 7658 3220 7659 7660 7661 843 7662 7663 7664 7665 7666 7667 7668 7669 7670 5129 2135 3674 7671 7672 7673 7674 7675 7676 7459 7677 4049 7678 7679 7680 3798 7579 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 3299 7693 7614 7694 7695 7696 7697 7698 7100 7699 7700 7546 7701 7702 7703 7704 7705 7706 7707 7708 7709 4253 7710 7711 7712 7713 7714 3939 7715 3259 7716 7717 7718 5550 7719 7720 7721 6346 7722 7723 7724 7725 7726 7727 7728 6412 7729 5813 6549 3737 7730 7731 7732 333 7733 6314 7734 7252 7735 1759 5344 7736 7737 5389 7738 25 7739 7740 7741 3554 7742 3860 7743 7744 2676 7745 6663 7746 487 2732 7747 7748 7749 7750 7751 4223 7752 7753 7754 7755 7098 7756 4450 7757 7758 7759 7760 3107 6293 7761 7762 4616 2060 2813 4476 1783 6843 7763 7764 7765 7766 7767 3472 1607 7768 7769 7657 7770 7771 35 7772 7773 7774 7775 860 7776 7388 7777 7778 7779 7780 7781 7782 7463 7783 7784 7785 7786 7787 7788 7147 7789 7790 4886 7791 7792 7793 7794 765 7795 6575 7796 7797 3579 7003 5377 7798 7799 7800 7801 7212 7802 7803 7804 5823 7805 5720 2319 7806 7807 7808 7069 764 2280 1383 7809 3894 7810 7811 4424 7812 7813 7455 7814 4617 7815 7816 7817 7818 7819 4596 7820 7821 7822 2894 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 4233 7835 7836 7837 4273 6033 7838 7839 7840 7841 3403 7842 7843 7844 7845 7846 7847 7848 3250 7849 2382 6944 5200 7850 7851 1285 7852 7853 1891 2263 7854 7855 7856 4055 7857 7858 7859 5598 7860 5132 7861 7862 7863 7864 7865 7866 7267 7867 7868 2744 7869 7398 7519 2609 7870 7871 7872 7873 7640 7874 6453 7875 7876 7877 1596 2840 7878 7879 7446 7880 7881 7882 6390 1953 7883 7884 7885 743 7443 7886 7887 5258 6068 3061 7888 7712 7889 7890 7891 461 7892 7893 7575 7894 994 3056 5284 7895 7896 3335 4224 7897 2715 7898 3322 7899 7900 7901 7902 5441 1018 6099 7903 279 7904 7905 4163 7906 3673 7907 7908 5278 7909 3749 7910 6513 7911 5268 7912 6128 555 7913 7914 7915 7916 7917 7918 7919 7920 3616 7921 7922 7834 7923 7924 7925 6696 7926 7927 7928 7929 7930 3945 7931 7932 287 2467 7933 6197 7934 5880 4086 7935 7936 7937 7938 7939 7940 7941 7942 6981 7943 7944 7945 7946 7947 7948 7949 2225 7950 2215 7023 5508 5162 1777 7316 7951 7952 1532 7953 7910 7954 6662 5092 7955 7956 7957 7958 7959 7960 7961 7962 5762 7963 6892 7964 7965 7966 2453 4969 7967 1873 7968 7969 3995 5074 6367 7970 7971 7972 904 4023 7973 7974 7975 4157 7976 7977 7978 7979 7357 7980 1179 7981 4126 4802 7982 7983 7984 7985 7986 7987 7988 3779 3570 7989 2348 7990 7991 4980 1186 3736 7992 7993 7652 7994 1990 7995 2478 7996 1561 7997 7998 7999 1739 8000 4116 8001 8002 8003 4869 5842 8004 8005 8006 5266 8007 536 8008 5154 8009 2349 5447 8010 8011 8012 8013 8014 256 5356 8015 8016 8017 8018 329 8019 8020 8021 8022 8023 8024 8025 8026 8027 1599 8028 8029 1034 572 8030 8031 8032 4004 8033 8034 8035 655 8036 4234 6913 8037 7789 8038 2142 8039 8040 8041 8042 8043 6265 6149 5296 8044 8045 8046 8047 4160 8048 8049 8050 8051 8052 8053 5847 8054 561 8055 1639 8056 2803 3923 3696 8057 5988 8058 8059 8060 8061 710 8062 6817 8063 4508 8064 8065 8066 8067 8068 8069 7344 8070 8071 1479 8072 8073 8074 8075 465 2922 8076 8077 8078 8079 8080 8081 8082 8083 8084 3914 8085 8086 8087 8088 8089 8090 7729 2627 8091 2775 8092 2169 5259 8093 8094 5171 8095 854 8096 8097 8098 8099 8100 8101 8102 3868 5503 8103 7222 8003 8104 8105 4872 8106 7602 8107 8108 8109 8110 7599 7826 7780 6482 7723 6133 5836 48 7825 8111 6865 8112 8113 5352 8114 8115 8116 8117 8118 8119 659 8120 6165 830 8023 623 8121 8122 8123 7401 8124 558 8125 5093 8126 8127 2031 6059 3600 8128 2842 8129 8130 8131 8132 8133 1267 8134 7700 8135 7756 8136 8137 3795 6905 8138 8139 8140 7604 2595 1333 8141 8142 8143 8144 8145 8146 6553 232 6778 8147 1286 3133 8148 8149 8150 8151 4005 1883 6976 8152 1408 8153 8154 8155 8156 8157 2397 3106 8158 8159 3449 8160 8161 8162 8163 8164 8165 8166 6256 8167 8168 7619 8169 3731 8170 8123 8171 8172 8173 8174 6872 8175 8176 8177 8178 172 4675 8179 8180 8181 2604 8182 7409 2574 1916 8183 5748 8184 8185 8186 7442 8187 7407 8188 8189 8190 8191 8192 8193 8194 8195 6834 6701 8062 8196 8197 8198 8199 6616 7740 8200 6970 8201 8202 4961 8203 8204 697 8205 8206 3311 7310 8207 49 8208 8209 8210 2642 7235 8211 8212 4082 1084 8213 8214 2032 269 8215 8216 2095 8217 695 8218 8002 8219 8220 6002 7180 6972 8221 8222 8223 8224 8225 4567 8226 5974 8227 8228 3722 7356 5761 8229 8230 3053 8231 5644 8232 5440 8233 8234 1193 8235 8236 8237 8238 6135 5609 8239 8240 7982 5520 8241 8242 3191 2839 1225 6037 8243 3516 7017 8244 8245 3287 8246 8247 8248 8249 8250 6915 3212 5286 8251 8252 8253 8254 8255 8256 8257 8258 8259 6982 8260 6607 8261 8262 8263 8264 8255 8265 5928 8266 4853 8267 8095 8268 1929 8269 1004 3925 2100 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 3786 8281 1541 8282 8283 7133 4605 5686 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8142 8301 8302 8303 8304 3845 903 8305 8306 8307 8308 8309 1717 8310 7893 5446 8311 2471 1811 5448 8312 8313 8314 8315 4342 2583 8316 8317 8318 8319 410 8145 8320 8321 8322 8323 5991 8324 8325 8326 7497 8327 8328 8329 8137 8330 8331 5466 2867 8332 2093 8333 8334 8335 8336 8337 8338 8339 3369 8340 8341 6362 8342 2125 8343 8344 8345 4954 8346 8347 2304 8348 6373 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 1817 8360 8361 5153 339 1412 8362 8363 8364 3265 8365 3909 8366 8367 8368 8369 8370 5323 6042 8371 4755 8372 8373 8374 8375 6993 8376 6201 8377 8378 8379 8380 8381 8382 8383 8384 7400 8385 8386 8387 8388 1752 8389 8390 8391 8392 5065 4910 8393 8378 7120 7716 8394 8395 3463 3710 8396 8397 8398 8399 8400 1030 8401 8402 8403 8404 8405 4880 8406 8407 8408 8409 3255 7233 8410 1557 8411 8412 8413 8414 5305 8415 8416 8417 8418 5434 8419 8420 7609 6773 1688 3920 6844 8421 2473 8422 8423 8424 8425 8426 8250 8427 8428 2675 5827 3557 8429 8430 5173 8431 8432 8433 8434 8435 8436 3297 8437 2819 8438 8439 8440 8229 8441 6856 8442 8443 5693 4699 8444 8445 8446 8447 8448 8449 553 8450 522 8451 8452 8453 8454 2064 4300 8455 6540 8456 8457 8458 8459 8460 8461 7425 8462 8463 8464 377 8465 7144 6244 8466 8467 8468 95 8031 8469 8470 8471 8472 4717 1843 8473 584 8474 8475 399 2175 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 3226 8486 8487 7865 3338 8488 8489 8490 4915 5949 8491 8492 8493 8494 5052 8495 8496 8497 8498 4718 8499 8500 8501 8502 8503 8504 3932 8505 3517 77 8506 8507 8508 1868 8509 3376 8510 8511 8512 4435 7724 1469 462 8513 6376 8514 455 4024 8515 8516 8517 3055 8518 8519 5601 8520 6011 8521 2693 8522 8523 8524 8525 8526 5749 7491 8527 8528 5978 8529 4660 8530 8531 8532 8533 6598 8534 8535 8536 2757 8537 8538 6749 8539 5918 4016 3683 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8387 5692 8556 6315 8557 8294 1672 8558 5783 8559 7294 8560 8561 1606 3214 8562 3096 6739 8563 7524 8564 8565 8566 8567 6417 4863 8568 5664 8445 1582 8569 6638 8570 3768 1054 3359 8411 8571 8572 8573 8260 8574 8575 7821 1458 8576 5998 8207 7847 8577 3586 8578 143 6044 3953 8579 8580 8581 5724 8582 8583 5174 8584 4369 6544 8585 8586 8587 8588 8589 445 8590 7513 7159 8591 8238 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 4966 8602 8603 8604 8605 8606 3646 8607 8608 4896 1809 8609 6320 8610 8611 8612 8613 8614 8615 1625 8616 8617 6962 6634 804 8618 1654 8619 8620 8621 5245 8622 3685 8623 8362 8624 801 4385 8625 4641 5960 8626 8627 8628 8629 8630 8631 6310 1344 8632 7117 8633 4153 8634 8635 3121 5230 8636 8637 8638 8639 1067 7812 8640 8641 8642 8643 8644 2507 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 4387 8655 7525 8656 2239 8657 8658 829 6090 8659 8190 5986 8660 8661 8662 6649 8663 8664 5882 8665 2873 8222 8666 8667 8668 8669 8670 7124 7901 2057 1102 7904 8671 8043 336 8672 8673 2429 8674 1277 1265 8675 8676 1088 8677 8678 8679 8680 1470 8601 8681 8682 4642 8683 8684 8542 8685 8686 8687 8688 8689 8690 4301 8691 8692 8693 8694 1501 2111 8695 8696 6626 8697 8698 2569 8699 6505 8700 8701 8702 1656 8703 8704 29 8705 1375 8706 8707 1956 8708 3829 5201 6126 8709 6637 8710 8711 4237 2530 8712 255 8713 3886 7405 8714 8715 8716 8717 8671 8718 8719 2486 8473 101 8720 2658 8721 5399 8722 8723 8724 6938 8725 3609 8726 8727 8728 8729 7438 8730 8731 6934 8732 8733 8734 8735 8736 8737 8738 6341 8734 8739 4173 8740 8741 8742 4374 8743 8744 8745 8746 3305 2538 1006 5144 8747 3705 8748 8749 8750 1235 8751 8752 8753 8754 4323 8755 7271 3901 8756 8757 8758 8759 8760 8761 8762 8350 8763 8764 8765 327 609 1302 8766 8001 8767 1323 8348 8768 8769 8770 8771 1874 8772 2416 202 8748 8773 3660 7160 8774 2045 8775 6281 8776 8777 8778 99 8779 8780 8781 6702 4271 8782 3911 2009 3757 8783 8784 8785 8786 8787 8788 8789 511 4919 8790 457 8791 8792 8793 8794 8795 2043 7993 8796 7935 8797 8798 8799 8800 2029 8801 8802 14 8803 1239 2977 8804 8805 8806 8807 7948 2296 8808 1922 8809 8810 8811 8812 918 2733 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 1551 8823 8824 8825 4581 8826 8827 8828 8829 8830 1439 8831 6727 2398 8832 8131 434 8833 4714 8834 8835 8836 4923 8837 2383 6532 8838 8839 8840 8841 8842 1547 8843 2210 8844 5403 5655 6965 8845 8846 6287 8847 5900 8848 8849 8850 8851 8852 6396 8853 8854 8855 8856 8857 8858 8859 8860 7248 8861 8862 8863 8864 8865 4901 8866 8867 8868 8869 8870 8871 8435 8872 1686 8873 8874 8875 8876 8877 8878 8879 6854 8880 8881 8862 8882 8883 8884 8885 8886 8262 8887 4646 5178 5924 3336 8888 8889 4316 6218 8890 8891 8892 8893 8894 8895 8896 8897 8898 7430 8899 8900 7584 8901 3734 8902 5540 8903 4211 5756 8904 8905 8906 8907 6554 8908 7134 8909 8910 8911 8912 8913 8914 2315 8915 2871 8916 6374 8917 8918 8919 7757 8642 8920 8921 1701 8922 8923 8924 845 6234 8925 8926 8927 8928 8929 8930 3371 8931 8932 8933 8934 8935 2072 6717 8936 8843 1184 8937 8938 8939 5872 8940 1385 6229 8941 8942 6464 3275 8943 1272 8944 6776 8945 8946 2946 8947 8948 8949 4629 701 7531 8950 8951 8952 8953 3569 8890 8954 8955 8956 8957 8958 8959 8960 8961 5611 8962 8963 8964 8965 8966 8967 4620 2401 1988 5746 1538 8968 8969 8080 3018 8970 8971 8719 8972 8973 5456 7889 8974 734 4599 8975 8554 8976 8977 8978 7699 8979 8980 8981 8982 8983 84 8984 8985 7989 8986 8987 6223 8988 8989 8990 8991 8992 8993 6566 8267 8994 8995 8996 4774 5892 5185 8997 8998 8999 9000 6709 3756 7371 8899 9001 9002 9003 9004 9005 9006 9007 9008 8274 9009 7788 9010 4003 9011 1324 9012 9013 9014 4171 9015 9016 2007 9017 9018 9019 9020 8629 8593 9021 2809 4497 9022 9023 4744 7906 9024 9025 8187 9026 1388 8913 9027 9028 9029 2596 9030 9031 9032 9033 6901 9034 9035 9036 7305 9037 8779 9038 9039 9040 9041 9042 9043 9044 9045 6644 3279 9046 9047 4875 9048 6366 5690 8828 9049 5107 9050 9051 9052 9053 9054 9055 7202 9056 1075 9057 7897 9030 9058 9059 9060 9061 9062 5904 9063 4844 9064 4558 4017 9065 9066 3520 9067 9068 9069 2438 9070 9071 8343 9072 8501 4743 9073 9074 9075 9076 6383 9077 5874 9078 9079 9080 9081 9082 1309 9083 9084 8493 9085 9086 9087 9088 9089 9090 3454 9091 9092 9093 9094 9095 1613 4469 2499 9096 9097 2006 191 8471 9098 990 9099 9100 2423 5328 9101 9102 6472 5025 7533 3013 9103 9104 9105 61 4559 9106 9107 9108 9109 9110 7362 9111 9112 8499 6394 9113 9114 9115 9116 4820 9117 9118 9119 6178 9120 7805 9121 9122 9123 6640 9124 9125 9126 9127 8228 9103 9128 9129 9130 9131 9132 9133 9134 305 9135 9136 9137 9026 9138 9139 9140 9141 9142 9143 9144 4510 4337 9145 5908 3621 9146 8937 9147 9148 9149 9150 9151 9152 2631 9153 3283 9154 4088 8947 9155 9156 9157 9158 9159 9160 9161 5407 9162 2440 9163 9164 9165 9166 9167 2399 8773 9168 9169 9170 9076 9171 9172 9173 9174 3391 9175 9176 3607 313 9177 9178 9179 4375 2465 9180 9181 9182 4490 1175 9183 9184 9185 9186 9187 9188 9189 9190 7928 6447 5084 9191 9192 9193 4622 5131 9194 953 4634 9195 8038 9196 9197 9198 9199 4619 8502 6220 8332 7157 7487 9200 9201 577 9202 9203 9204 3143 9205 9206 1747 9207 6973 4739 3024 4200 8321 9208 4087 8208 9209 2838 9210 9211 9212 9213 9214 1224 9215 9216 9041 9217 9218 4419 9219 9220 9221 9222 9223 9224 9019 9225 9226 5658 9227 9228 9229 8209 9230 9231 2506 6245 2820 9232 9233 9234 4909 786 9235 9236 9237 9238 3642 9239 9240 8668 9241 9242 2039 8624 9243 9244 8833 9245 9246 9247 9248 9249 9250 9251 9252 4197 10 9253 4668 8317 2428 9254 3626 9255 2047 9256 6706 7431 4239 9257 9258 9259 9260 9261 9262 9263 3370 9264 9265 9266 9038 9267 9268 9269 6284 9270 319 5917 9271 4746 3119 27 9272 9273 9274 970 9275 2843 3589 9276 8370 8328 9277 2818 9278 9279 7942 9280 9281 9282 9283 9284 9285 9286 3657 2446 7634 9287 9288 9289 9290 9291 9292 9293 9294 9295 9176 9296 9297 9298 9299 3631 6088 9300 9301 9302 9303 6764 9304 9305 9306 9307 9308 9309 9310 9311 9312 9249 2053 6268 9313 9314 9315 9316 9317 9088 7232 9318 7026 6783 9319 9320 9321 6838 8637 9322 3824 1707 1572 9323 9324 9325 9326 9327 9328 3573 9329 192 9330 5223 9331 9332 9333 8315 8371 9334 1981 9335 6252 7763 9336 9337 3249 9338 9339 9340 9341 9342 7581 9343 3864 3134 9344 7320 9345 9346 9347 8290 9348 9349 3189 9350 997 9351 9352 7454 4873 8245 8089 9353 9354 9355 9356 9357 9358 9359 9360 6275 9361 9362 4167 9363 9364 5195 5819 9365 9366 9367 9368 4202 1744 9369 4499 9370 9371 9372 745 9373 6991 9374 9375 7899 9376 9377 9378 8834 398 9379 9380 1289 9381 1865 5984 9382 9383 8541 6935 6713 4113 9384 9385 9386 8744 9387 9388 5518 3833 9389 3856 1814 8491 9390 9391 9392 9393 9394 9395 3695 9396 9397 5128 9398 9273 9399 9400 9401 203 7946 9402 9403 9404 9405 4056 9406 3166 9407 8669 2489 4303 9408 9409 9410 9411 4560 3190 9412 9413 9414 9415 9416 4689 8340 5935 9417 9418 8252 9419 9420 2890 9421 9422 9423 5479 4577 9424 3982 9425 8774 9426 9427 9428 5826 9429 9430 9431 9432 9433 5026 9434 6436 9435 9436 744 7611 9437 6457 9438 9439 9440 2498 3222 9441 9442 9443 1392 9444 4551 3010 9445 7 9446 9447 2684 9448 1531 9449 9330 5166 9450 2272 8837 5915 9451 9452 5728 6200 9453 9454 4046 9455 5689 9456 9457 9458 1172 9459 6730 9460 8571 9461 4625 3571 9462 9463 9464 9465 9466 9467 6494 9468 5341 7912 9469 9470 9471 9472 8249 9473 9474 8403 9475 9476 9477 9478 9479 9480 9481 9482 9483 1405 9484 5249 9485 9389 9486 7833 9487 9488 9489 9490 1748 6559 9491 6300 4650 9492 9493 9494 9495 9496 3989 9395 9497 9498 9499 6820 8574 493 9500 9501 3546 9502 8331 9503 1427 8213 9504 9505 9506 9507 5302 4110 7105 2262 900 3460 9508 4468 9509 9510 3708 8749 9511 9512 9513 9500 9514 9515 6650 9516 9517 4945 9518 9519 9520 9521 8498 9522 8337 9089 8327 9523 9524 2801 250 9525 9526 9527 7055 7550 9528 9529 9530 9531 9532 9533 9534 6521 8921 9535 9536 9537 9538 1588 9539 8199 6771 7382 9540 2984 9541 1918 9542 9543 9544 9545 9546 2884 4662 9547 2679 8567 9548 8483 2059 1804 9549 9550 2377 9551 9552 9553 9554 7839 1313 9555 8968 9556 7370 6952 9557 9558 5139 7551 2074 9559 9560 1995 9561 9562 9563 7038 6642 9564 9565 6620 9566 3599 3462 1133 9567 7187 6159 9568 4612 9569 1543 9503 8910 8582 9570 6633 9571 9572 4078 9573 9574 9575 9576 7504 6164 978 7534 9577 9578 9579 9580 8587 9581 9582 9583 9584 9585 8891 7201 9586 9587 9588 9589 2897 9590 4635 9591 9592 9593 9594 1695 9595 9596 9597 1264 4207 6262 9598 4230 9599 9600 6104 9601 9602 9603 9604 9605 6490 9606 4989 6651 4554 9607 9608 8141 9446 8210 9609 6853 516 9610 9611 9612 9613 9614 7796 4609 7746 5043 9615 9616 940 9617 9618 9231 9040 9619 9620 8325 9451 4302 9621 9622 1455 9623 1202 9254 9624 4556 9625 9626 879 2177 8244 589 9627 7715 9628 9629 7150 6123 6183 9630 6488 2535 9631 9632 9633 9634 7314 337 803 9635 7958 9636 9637 9638 4889 3788 9639 7088 9640 3854 9641 2545 9642 3929 9643 9644 9645 8783 9646 9647 9648 6768 1757 6071 7461 4030 9649 9650 4028 9651 7922 8078 6829 5662 9652 9653 9654 9655 9656 9657 9658 9659 9660 573 3398 9661 7951 2844 9662 9663 9664 9665 9666 4262 9667 69 9668 9669 3003 7035 9670 9671 6604 9672 8608 9673 9674 6074 9675 9676 9677 6325 6083 9678 4564 9679 9326 9680 935 1451 5769 7950 9681 4799 9682 9683 9684 9685 2226 9686 8805 9687 7028 8206 4059 9688 9689 7980 9690 2556 3264 9691 5454 9692 9693 9694 9695 9696 2766 9697 9698 1636 7311 9699 9700 9701 9452 9702 8396 2999 9703 9704 9668 9705 6723 7021 9706 9707 9708 7518 9709 9710 5152 9711 9712 9713 3041 9714 9715 90 9716 9717 9718 9719 228 9720 9721 9722 9723 9724 9725 9726 6535 5656 9727 9728 3313 9729 8787 7718 6269 9730 9603 9731 9732 9733 7429 9734 7969 4456 9735 6495 9736 2878 7547 9737 9738 8511 3266 9739 9740 9741 7809 9742 5681 9743 9744 9745 9746 7036 9747 9748 9749 9750 9751 9752 9753 9754 6595 1352 9755 9756 9757 3927 6646 2994 9758 9759 9760 9761 3196 9762 6661 9763 9764 5365 9765 9766 9767 5330 9768 4199 7308 755 6837 9769 7595 3771 9770 9771 9772 9773 6397 6670 9774 9775 9776 2908 2925 9777 9778 9779 9780 9781 9782 4555 8389 8333 9783 9391 9784 8946 9785 9786 9787 3504 3132 8777 9788 9789 2180 1753 3281 9790 9791 9792 882 9793 5079 9794 9795 9796 1143 7975 9797 6681 9798 4539 216 3866 1019 9799 9800 9342 5211 9801 4748 9802 928 9803 9804 9805 9537 9806 9807 5099 9808 4275 9809 4265 9810 4661 9811 7277 9812 9813 9814 5458 7593 9815 9816 9817 8214 9818 9819 6243 8444 9820 9821 9822 477 9823 8484 9824 9825 4437 6782 9826 5530 9827 7342 9828 5400 9829 9830 9831 6156 9832 7633 2748 9833 9834 9835 9836 9837 9838 9839 9840 4931 6930 9841 286 9842 9843 5027 9844 9577 7428 8519 9845 9846 9847 9848 9849 9850 9851 4627 2526 9852 396 9853 131 9854 9855 1217 9856 9857 3770 1507 2771 9858 9859 4106 9860 5551 9861 9862 9863 9864 9865 9866 9867 927 1095 4615 7339 7943 3117 4573 9868 5531 9869 9870 5625 9871 9872 9873 2967 9874 9875 9876 9877 9878 9879 9880 3667 2250 5573 9881 1652 9571 4372 7573 9882 3902 5830 9883 7031 8068 3100 989 9884 2023 9885 5071 9886 8291 9887 9888 4536 9889 9890 9891 9892 9893 4680 9455 9894 9895 9896 6030 1525 9136 9897 5953 9898 9899 9900 8823 9901 2461 9902 9903 3421 6660 9904 922 9905 9400 5064 9906 9907 9908 9288 7521 7181 4361 9909 9910 9911 8605 9912 9913 6858 8184 9914 1371 8722 7621 5210 2955 9915 4787 8037 9916 7778 47 9917 9918 2534 9919 4985 8488 9920 9921 9922 8704 7059 9745 9923 9924 3296 6261 9925 9926 7496 8040 9459 2424 9927 9473 2992 9928 9084 4582 5224 7749 6109 9929 9930 3652 9931 9932 9933 9893 9934 9935 9936 1241 5277 9937 9938 9939 9940 594 9941 3170 5318 8583 9942 9943 6019 4282 9944 424 4977 5359 9945 9946 8854 9947 9948 5571 9949 428 771 9950 9951 9952 9953 9954 9955 9956 966 9957 9958 9959 9960 9961 9962 9963 9964 5125 2159 9604 9965 9966 406 9554 9265 895 7658 9967 9968 9969 9970 6918 5491 8478 9971 9416 8930 9542 9972 9973 9974 5283 3700 230 9975 5442 5307 9087 9976 3947 9977 9978 2058 9979 7970 6675 9980 9981 7858 6466 9982 6209 4828 9983 7537 4067 9984 5964 8515 6302 9985 6094 9986 8644 7639 7283 6908 8952 9987 9988 9989 3315 2282 9990 9991 9025 9992 5861 4511 9993 9256 9201 9994 9823 7338 3047 9995 6056 3848 9947 9996 9997 5990 2299 7883 365 2345 9998 9999 10000 10001 772 3524 8799 10002 10003 7622 9213 761 10004 9377 10005 8427 8013 2856 10006 8366 7941 6887 9590 10007 10008 7063 7562 4563 5798 2132 10009 10010 10011 9336 10012 2966 2593 10013 9929 6091 10014 4376 7024 10015 10016 10017 8535 5772 10018 10019 9773 10020 10021 4513 10022 3478 10023 10024 766 4068 5631 10025 919 10026 5594 10027 10028 5881 10029 1247 10030 10031 10032 10033 10034 6241 10035 10036 342 9508 10037 10038 10039 8361 10040 1591 9066 4916 10041 10042 2004 10043 10044 10045 10046 9907 7013 9372 10047 10048 10049 10050 10051 10052 10053 4418 9406 1597 6694 10054 10055 10056 10057 8655 10058 10059 10060 3174 10061 10062 3116 9544 4666 2853 6526 7321 7242 6757 10063 4350 10064 10065 10066 9764 9429 10067 10068 10069 10070 10071 9496 10072 10073 8640 10074 7029 8590 10075 10076 9163 5120 9727 5404 7171 10077 10078 10079 10080 3551 5837 3201 10081 10082 8010 10083 6754 10084 10085 2898 10086 8271 5696 10087 4393 8614 10088 10089 10090 8881 1280 6842 10091 9105 10092 10093 10094 10095 10096 5090 5053 10097 10098 4077 7101 10099 3272 2698 10100 10101 7448 4124 10102 9083 10103 10104 5290 5932 10105 6767 3975 10106 10107 4348 3692 10108 1416 6154 10109 10110 10111 3587 2284 10112 10113 8409 10114 920 3972 4272 10115 6382 1387 10116 10117 4525 10118 10119 1815 9168 80 10120 8901 10121 10122 2138 10123 9699 4956 3084 9359 6078 10124 1792 10125 10126 10127 10128 8028 3471 3612 10129 10130 8266 2695 6611 10131 2334 10132 1311 10133 10134 1199 4958 10135 10136 322 4036 10137 10138 10139 4464 5910 9007 10140 10141 1480 10079 7842 10142 10143 8464 8480 10144 4009 5338 8309 10145 10146 9660 10147 10148 3812 1016 2778 10149 7327 4983 10150 10151 9442 10152 10153 3671 10154 6372 10155 6986 6481 10156 10157 43 10158 10159 5225 10160 1749 7230 10161 10162 9285 3012 2292 10163 10164 10165 3784 10166 8128 7557 3540 10167 10168 3177 10169 6224 10170 10171 10172 3715 10173 10174 10175 5902 2857 10176 10177 1829 835 10178 10179 10180 1760 2224 6919 10039 6657 10181 10182 3293 10183 10184 10185 10186 10068 8099 10187 4268 10188 9100 8094 2140 5669 488 3324 4824 10189 10190 10191 5714 469 6085 10192 2520 3552 1144 6676 10193 10194 6722 10195 10196 8762 10197 10198 8725 9212 8285 6831 10199 1514 10200 10201 10202 7919 10203 10204 9620 10205 7022 91 10206 10207 8959 8603 10208 10209 3467 10210 10211 10212 8171 10213 10214 10215 10216 10217 10218 2671 9052 10219 2112 10220 10221 5135 2914 10222 10223 10224 7403 10225 10226 10227 10228 10229 10230 6379 10231 10232 2505 10233 10234 3372 5795 10235 9002 10236 10237 10238 10239 10240 1812 9902 10241 10242 10243 10244 3171 10245 429 10246 3873 10247 5557 10248 9243 10249 425 10250 10251 10252 8560 136 6292 10253 10254 10255 10256 7648 4125 8810 10257 10258 6756 6479 10259 3686 8932 10260 10261 10262 4519 10263 10264 10265 10266 10267 10268 9309 3918 114 10269 10270 10271 7351 7577 10272 5537 10273 10274 4553 6255 949 10275 8691 8924 7549 10276 10277 10278 1406 10279 7846 10280 6308 10281 10282 10283 10284 10285 10286 6923 8425 10287 10288 1893 10289 10290 10291 9207 6152 9198 10292 10293 7860 10294 10295 10296 5750 9427 8159 10297 8639 1724 10298 8786 10299 5431 1495 10300 10301 8176 3326 10302 5406 10303 9514 2753 2430 10304 5426 10305 79 9736 652 10306 10307 10308 8892 10309 10310 8004 9357 4453 10311 8346 6667 10312 7638 10313 10314 10315 10316 10317 9398 10318 10319 10320 10321 6949 10322 10323 10324 5455 600 10325 5270 10326 10327 10328 10329 6426 10330 10331 10332 10333 234 7800 10334 6792 9838 10335 6361 9085 10336 10337 8561 10338 10339 10340 10341 9659 3039 10125 10342 10343 6793 9008 10344 10345 3142 10346 3362 10347 8556 3131 5059 4549 10348 9011 10349 2577 10350 10351 10352 8575 6459 10353 10354 9450 7539 7747 10355 10356 2518 10357 10358 9948 10359 7452 10360 10361 10362 10363 10364 10365 10366 4522 10367 7967 10368 10369 10370 373 10371 10372 10373 10374 134 6034 7481 4590 6977 2516 7498 7936 10375 10376 7911 10377 10378 10379 10380 10381 8157 10382 5319 10383 7418 2761 10384 10385 8628 2956 10386 3430 6321 10387 1374 6731 10388 10389 10390 4356 10391 8301 9857 10392 10393 10394 10395 5555 10396 2669 10397 9310 10398 2880 10399 2782 8873 10400 7894 10401 10402 8613 10403 9477 10404 10405 8746 10252 10406 10407 10408 8092 5243 10409 7126 10410 10411 10412 1936 9551 10413 10414 10415 10416 10417 3086 6096 10418 10419 8048 10420 10421 8481 10422 10423 10424 4794 6612 10425 10284 10426 10427 10428 10429 10430 10431 10432 10433 10434 10435 4368 3073 10436 2326 10437 10438 10439 5347 2773 10440 385 10441 9619 10442 8645 10443 10444 2067 691 8683 10445 8570 10446 10447 9834 1468 10448 9324 4517 523 1533 7955 10449 10450 10451 6013 10452 9973 10386 10453 2738 10454 5863 10455 2893 10456 10457 715 3224 10458 726 10459 7707 10460 2749 6601 10461 10462 4825 10463 10464 10465 10466 10467 9147 6010 10468 10469 485 8310 9587 7329 10077 4804 4917 10470 5161 938 10471 9664 10472 10473 10474 8984 9004 10475 9599 10476 10477 10296 10478 10479 9654 5603 7333 9960 10480 7548 10481 2648 258 9670 4481 3429 7516 10482 10483 388 10484 668 10485 10280 7768 10486 10487 8585 10488 10489 10490 10491 10073 6311 10492 10493 2052 10494 591 8806 4947 10495 10496 10497 10498 10499 10500 10501 10502 10503 10504 10505 10506 10507 10508 10509 5667 9766 4283 210 3123 4535 4347 3433 1441 10510 10511 2510 9367 5014 10512 4261 3301 10513 7367 7863 10425 10514 10515 10516 10517 10518 10519 2662 8243 7921 1072 10348 9402 10200 7292 10520 5533 10521 3456 10522 10523 2936 10524 5661 6303 9260 7878 10291 8276 10525 10526 6725 10527 4446 9772 10528 2611 10529 1966 8720 10530 5315 10531 10532 7744 10533 9961 10534 10535 1204 10536 10537 2532 10538 1756 3325 7309 10267 10539 10540 8077 3405 10541 10542 864 10543 10544 5876 1845 10545 10546 10547 5763 4962 10548 10272 8836 10549 3564 2113 4396 5061 10550 10551 10552 10553 1377 4483 6959 10554 6564 6264 837 10555 10556 10557 10558 10559 10560 10561 5890 10562 6528 8450 1754 10563 10564 10565 4724 10566 8792 10567 10568 10569 10570 10571 10572 10573 1727 10574 9337 2911 10575 10576 10577 413 7630 8767 10578 10579 10580 10581 588 10582 10583 9964 8832 10584 10585 7683 10586 8706 10587 10408 7348 10588 10589 10590 5236 10591 10592 10593 10594 2651 6274 10595 10596 10597 10598 10599 8354 10600 10601 10602 5167 9383 10081 8060 10603 10604 9071 10605 10606 4781 10607 10608 10609 10610 5862 10611 10612 6309 3643 10613 5758 1833 7278 10614 10615 7991 10616 8646 5682 991 10617 4352 10618 10619 10620 3717 10621 3234 1989 6196 10622 10623 10624 10625 10626 10627 1729 10628 10629 10630 10631 10632 3252 148 10633 8431 10634 10635 7234 5739 509 10636 10637 3282 5663 10638 1493 10639 5142 1252 8152 10640 10611 6189 10445 10641 10642 10643 10644 10645 10646 10037 3598 10647 7115 6869 7411 10648 7288 2320 6062 10649 6266 7492 10650 4885 10651 9120 8405 2957 3432 10652 10653 10654 6184 10655 5535 10656 10657 10658 9602 3891 10659 10660 10661 6029 9790 10662 10663 10664 10665 10666 10667 10668 10669 3678 10670 10671 10672 4593 10673 1299 10674 10675 10676 10677 10678 10679 10680 10681 987 10682 3843 8212 6410 9613 10683 10684 10685 3790 9380 9101 10686 10687 10688 10249 10689 3617 6808 10690 10691 842 10692 10693 1797 10694 10695 10696 288 4946 10697 5702 9938 2490 10465 9987 3050 10698 10699 10700 1617 10701 10702 10703 5534 8215 5959 2240 10704 1336 10346 10705 5414 4109 7419 4500 10706 10707 8838 6405 10708 10709 3796 10342 10710 10711 10712 10713 8895 10714 10715 1130 10716 4165 10608 1046 5060 10717 10718 10719 6883 10720 8335 7542 10721 10722 1023 10723 7421 10724 7091 10725 5674 10726 10727 10728 10729 10730 10731 10732 10733 7257 10734 4692 10735 10736 3485 10737 2110 9836 10738 9886 7871 570 7142 10739 8518 10673 6815 10740 10741 9404 10742 2102 10743 9130 10744 10586 8281 4287 10745 10746 2189 10747 10748 10749 9944 10750 10751 10085 10752 10753 10754 10755 10756 10757 10758 2923 10759 1170 10760 10761 10762 7217 10763 7646 5636 10764 7155 10765 10766 3215 1413 10767 4178 10768 10769 9656 10770 2214 3608 1409 1697 10771 10772 10687 9789 7168 10773 8296 10774 8226 10775 6273 10776 10777 10778 3146 1731 10779 10780 10781 10782 10783 10784 10785 10786 10787 10788 7289 5538 5870 10789 1917 10790 10791 10792 10793 10794 5281 10795 10796 9740 8521 10505 10797 2267 10798 6909 4329 10799 8486 10800 10801 6054 8791 9865 2048 10802 10803 9979 8129 10804 10805 10806 28 10807 10808 10809 10810 10032 8135 10811 625 7437 1578 1033 10812 10813 5353 10814 10815 9314 10816 6147 5147 10817 2995 10818 2010 10819 10820 8061 2938 10821 10822 10823 1863 7445 9480 10824 2212 7122 4494 2654 10825 10826 9062 7895 10827 10828 10829 10830 10831 10832 1971 10833 748 10834 10835 10836 2789 10483 10837 6484 5196 1467 10838 10839 10840 10841 10842 8906 6678 10843 7972 10844 9248 10845 10846 10847 7808 9998 10848 10849 3459 10850 10851 10852 1366 4840 10853 10854 10855 3846 4156 10856 6517 10857 5940 4835 10858 10859 10860 10861 2246 10862 7535 10863 10864 10865 5237 10130 8339 456 10866 10867 10868 10869 10870 7291 10871 1216 8103 10872 10873 10201 10874 1053 8732 10875 6508 6847 4343 10876 3697 8650 4142 6787 10877 10589 10878 10879 10880 10881 1692 10882 10883 2726 10884 9967 2452 10885 8054 10886 5104 10887 10888 10889 10890 10891 10656 10892 10893 10894 10895 8751 10896 10897 3162 2702 10898 10899 8016 10329 10900 10162 10901 10902 10903 8830 10904 10905 10906 2827 9208 8689 5770 10907 3871 10908 7041 9916 540 9219 10909 10910 10911 10843 10454 10912 6510 10913 10914 4796 10915 10916 10841 10917 10918 10519 10919 7920 10920 10921 9128 10922 10923 9966 1275 6606 10924 10925 10926 10927 10928 9593 10929 8848 10930 9844 10931 10932 6877 10933 7580 10934 10935 6845 3895 10936 10741 10253 5339 10937 10938 10939 6028 8381 10940 412 8758 4488 10941 185 10942 10943 3307 5797 10944 5136 5280 3850 10945 2725 10946 10947 1105 10948 10949 10950 10951 10761 10952 5792 9980 7628 10953 8625 10954 10955 10956 10957 5292 6859 7240 6007 7097 10958 10959 10960 10961 10962 5083 9568 3994 1629 10963 10964 10965 10966 1894 3859 10967 10691 1924 10328 10968 10969 6439 10970 10971 8920 5868 10972 10973 10974 1301 8883 5316 10665 10975 6893 544 10976 6677 10977 10978 10979 10980 8531 6352 10981 10799 10982 10983 8995 9894 9917 7882 8087 10107 10984 1516 10985 10986 3193 10987 5725 10988 10989 10990 5275 10991 10992 10993 9891 9655 9985 9421 7642 10994 10995 10996 4838 10997 7178 10998 8093 10999 4703 11000 31 7807 11001 11002 11003 11004 11005 5707 11006 8840 4203 11007 382 8549 11008 11009 5620 4033 8509 5909 10218 10431 11010 11011 11012 11013 11014 11015 10205 2434 11016 6289 7888 6411 6456 55 11017 8379 11018 11019 11020 9863 11021 11022 11023 1979 11024 11025 11026 11027 11028 9661 11029 5622 6579 11030 7195 9206 11031 5778 11032 6720 10959 10491 8980 1524 11033 11034 11035 11036 414 11037 9358 11038 6639 11039 5588 11040 10513 10344 11041 4586 11042 11043 4816 10246 8200 2580 10907 11044 7332 8086 8737 11045 11046 11014 236 2794 11047 6195 7335 11048 2433 11049 4936 6910 2302 10733 11050 9448 8666 9224 11051 11052 433 4394 11053 2353 9154 11054 87 11055 44 3414 11056 11057 5199 5002 11058 11059 11060 2079 11061 11062 8452 11063 11064 6335 10134 3173 3081 11065 10178 11066 11067 1145 11068 5992 11069 10789 5831 11070 9562 2439 11071 11072 1113 11073 11074 9594 11075 7690 1341 9591 11076 11077 9457 10113 1097 5371 10448 9364 11078 2327 11079 9988 7576 8822 4737 9423 11080 11081 11082 4241 11083 4069 11084 4198 11085 11086 11087 2991 11088 6732 1712 11089 9820 4701 11090 11091 11092 3592 5072 11093 11094 10791 11095 11096 4823 9743 2824 11097 11098 11099 3789 11100 11101 11102 11103 11104 2354 6791 833 933 5771 8175 1274 10529 11105 11106 11107 11108 4728 11109 11110 1586 7136 5460 9396 513 8042 643 11111 9781 11112 1060 10984 11113 11114 5962 11115 11116 4007 5036 7389 9774 11117 11118 11119 6060 2362 1720 5615 2902 7560 9143 5834 11120 10332 5045 5462 6655 11121 2373 11122 10797 4341 11123 8548 7176 11124 11125 1112 11126 11127 11128 4665 11129 8733 11130 10506 11131 3755 2091 6221 11132 7784 7205 441 11133 11050 11134 11135 917 7011 11136 11137 11138 11095 11139 11140 11141 3470 11142 4140 11143 11144 3869 11145 2808 11146 6136 479 10499 9888 11147 11148 7375 11149 11150 4671 5176 10394 11151 11152 11153 6263 537 11154 10585 9756 8139 9645 11155 8356 4520 452 6486 11156 10533 11157 11158 11159 5857 11160 11161 5282 4515 11162 11163 211 11164 9505 11165 11166 5937 11167 6226 11168 11169 8130 11170 11171 11172 11173 11174 11093 11175 446 10699 7402 11176 11177 4730 4386 7209 8867 9627 11178 11179 11180 11181 11182 6514 11183 11184 11185 11186 1631 6267 11187 2071 11188 11189 11190 10433 8386 11191 769 11192 11193 11194 11195 2219 2248 5453 11196 6716 11197 2742 11198 10350 11199 8713 11200 11201 11202 11203 11204 5647 10440 7838 11205 4309 11206 11207 11208 2456 6422 9456 11209 11210 11211 11212 11213 7728 395 7603 11214 11215 11216 11217 7866 10397 4964 1471 11218 9045 4363 4440 6734 9411 11219 11220 11221 11222 11223 11224 11225 11226 5415 6021 11227 8319 2341 5386 4981 11228 11229 11230 11231 11232 8647 11233 11234 10248 3618 11235 11236 11237 4071 2308 1353 6003 11238 2557 11239 2037 5345 10124 3379 11240 11241 11242 9971 7845 11243 11244 10222 11245 205 11246 11247 11248 11249 9914 6818 3615 10171 10872 8723 1373 7285 11250 5214 840 10053 11251 10404 10601 5796 11252 11253 2092 11254 11255 11256 8619 11257 1425 2918 11258 8447 7016 11259 10468 3521 2743 11260 1396 11261 11262 11263 10853 11264 4628 8588 11265 11266 4603 7859 11267 11268 3240 11269 11270 852 11271 10721 11272 6945 6365 9502 2599 11273 1165 10838 11274 11275 11276 11277 2027 11278 11279 5040 7001 11280 10543 11281 8580 2974 11282 4166 8477 11283 7300 11284 11285 688 6441 11286 11287 11288 11289 401 7931 10885 11290 11291 11292 7261 11293 8164 9892 11294 11295 11296 11297 7071 7924 11298 11299 11300 6653 11301 11302 11303 303 8237 2020 4179 11304 2495 11305 3167 11306 787 1231 11307 7326 11308 7265 11021 10681 32 11309 11022 2076 11310 8602 11311 11312 11313 5957 11314 10121 11315 11112 11316 11317 7130 5222 9652 574 11318 8457 9867 3830 5343 8052 11319 5340 6291 10663 2054 10563 9236 11320 10410 11321 11322 2619 7597 7334 4429 11323 11324 9712 9094 11325 11326 11327 4217 9028 9720 7272 11328 4636 11329 11330 5140 11331 11332 8107 7114 11333 11334 11335 9187 11336 7501 8485 9858 8928 510 190 912 163 5239 5853 8390 11273 111 1044 11337 10876 2480 10003 11338 11339 11340 11341 4194 11342 10910 10978 11343 11344 1240 11345 2206 11346 11347 11348 10514 11349 2086 6047 11350 4208 10418 11351 2251 11352 10908 9195 6886 3202 10923 11353 8505 11354 7404 4988 11355 11356 9328 1957 11357 9711 6326 9453 9585 11358 3991 5685 6465 3378 11359 11360 11361 10660 11362 3168 5679 11363 11364 10083 7892 7758 9495 11365 11366 9307 11367 5117 11368 3803 11369 9462 11370 6538 11371 1365 11372 5459 11373 8680 11374 11375 6794 10998 3078 11376 11377 8158 9576 276 10457 4478 11378 11379 11380 9010 5743 3452 11381 11382 11383 11384 5251 10763 1573 2848 11385 11386 11387 11388 10767 11389 11390 9257 11391 10888 11392 5151 11027 1237 11393 11394 266 11395 3137 9873 1335 7687 11396 3723 11397 4876 6216 8352 11398 4318 11399 11400 9760 11401 9850 11402 2343 11403 10041 8312 4103 1791 10274 11205 9943 10628 11404 9264 11405 11406 11407 1318 5545 10455 9118 9625 11291 11009 11408 10461 9124 11409 11410 2850 11029 11411 3348 10995 11412 642 7092 11413 11414 5430 1459 11415 9994 1245 11416 2256 11417 11418 11419 2762 11420 11421 1742 11422 9161 11423 11424 7795 2731 11425 9487 11426 10150 10654 11427 6738 2980 7368 7848 11428 11429 5287 11430 2825 9622 11431 10195 11432 2660 11433 5560 2066 11434 11435 11436 9919 6473 11437 11173 11438 6340 11439 11440 9911 11441 11442 11443 5699 11444 11445 11446 7262 5570 11447 8770 3474 2278 3746 11448 8017 11449 11450 5565 11451 6474 11452 11453 8041 8344 11454 10686 7545 2178 8434 8986 11455 11456 9731 11457 7503 439 6586 4264 11458 10177 4438 7246 11459 8933 11460 7045 2378 8925 11461 5717 11462 9267 11463 10521 5112 6143 8918 10452 11464 9686 11465 310 11466 11467 5676 5996 11413 11468 11469 9210 11470 11471 11472 1581 11473 9504 11474 7193 4780 10669 9173 11475 8846 11476 11477 11478 11479 11480 72 1429 11481 717 11482 92 1549 11483 11484 2727 4897 1210 6132 11485 8743 11486 6204 4790 11487 4448 11488 10917 11489 10616 11490 11491 6608 4019 11492 8035 11493 11494 10830 11495 9560 11496 5817 4631 11497 5561 11498 11499 11500 8885 1337 11501 6414 11502 8564 11503 2563 11504 11505 11506 6737 11507 11508 4859 9649 7624 11509 11510 150 7350 11511 10573 684 6069 6882 11024 11512 11513 11514 10764 10944 2441 11515 11516 9884 11517 9877 6476 11518 4083 4442 5784 11519 11146 2578 11520 7423 1052 7722 11521 11241 4008 9321 1787 11522 9607 11523 605 11524 10983 5814 11525 11526 2405 11527 9837 7691 4032 11528 11529 5271 887 11530 11531 11532 9149 11533 7953 9225 11534 5855 11535 11536 4968 11537 6057 173 2404 11538 11539 11540 11541 11542 11543 4062 5626 7050 11544 11545 9532 7276 8659 1340 10967 3955 11546 11547 4762 482 8599 926 6936 10634 9847 11548 9751 11482 10672 6786 908 1443 11549 10377 975 11550 9644 7583 3827 11551 4972 11552 8468 11553 11554 4311 11555 2451 3826 3759 3785 1746 3223 11556 11557 11558 11559 11560 8797 10579 11561 11562 11563 11564 7851 3597 10662 7772 6742 11107 2487 3990 7738 11565 10117 11566 11567 11568 3676 11201 11569 1610 11570 11571 7211 4877 11572 8807 10473 4803 6215 11573 325 11574 1669 11575 11576 11577 8814 1091 10609 6654 11578 10214 3534 11579 7764 7565 11580 4745 11581 5056 11582 5544 11583 7823 9529 11584 6899 11585 1643 6015 10314 8616 3023 9901 6779 11586 4269 7184 11587 9302 11588 11589 4475 11235 11590 11591 11592 6819 11593 1059 11594 8268 11595 11596 11597 11598 11599 3085 11600 11601 6443 11602 11603 11604 3797 11224 7379 259 11605 11606 11607 11608 3147 11609 9228 11610 11611 11612 11613 11614 11615 11616 11617 2512 11618 7198 11619 11620 11267 11621 9555 2645 11622 1775 11623 11624 7987 11625 1937 11626 11627 8678 11628 9581 11629 4706 11630 11631 10772 11632 10361 5639 11633 11634 10311 11635 11636 4979 3184 11637 9053 11638 5351 11639 11640 11177 11641 11642 5506 11643 634 11644 11645 11646 11647 8654 11648 11649 11650 11651 11652 11653 11654 9194 10371 11655 7128 229 11656 10826 9065 11657 9106 11658 2365 5934 11659 9167 11660 11661 11662 10938 11663 11664 11174 11529 2851 3377 11665 11666 11667 10257 11668 11669 11670 11671 11672 2835 11673 11674 11675 11676 10396 10636 8460 6186 11677 4354 5190 4583 11678 11679 11680 11681 11682 11683 8537 5181 1293 3384 11684 9115 11685 11686 6475 3648 11687 11688 4749 5700 11689 11690 11691 1320 11692 1819 8211 9771 5397 11693 11694 10135 5736 7301 6547 9969 6656 2832 11695 5221 1877 11696 603 9170 6758 11697 7750 11698 11699 11700 1542 4895 11701 11702 11703 5649 11704 11705 8306 11706 6951 10603 11707 1978 11708 7605 11709 10553 11710 11711 7925 11712 11713 11714 886 10141 10588 5494 3974 11715 9968 11716 11717 8174 11718 11719 11720 11721 11722 11723 9779 9345 6463 11724 5486 11725 2289 11726 8160 11727 11728 9368 8280 8143 11045 11576 4349 682 8528 11729 11730 11731 11732 10438 3022 9221 10678 11272 11733 9708 11734 11735 11736 11737 11738 11739 11740 6671 3352 11741 11742 11743 11744 6279 11065 7684 10243 5677 7179 1201 11745 10088 7694 11746 3550 7971 6504 9647 11747 7280 11748 7219 9384 11749 4473 2772 11750 11751 11003 7890 11752 11753 11754 7806 5921 3760 3825 4290 8898 7095 11755 10287 3693 11756 11757 11758 11759 11760 6967 11761 1770 5564 10950 11762 11763 11764 11765 8047 11766 11767 11768 11769 11770 10912 11771 11772 11773 11774 819 11775 4832 11776 10316 9632 1249 7391 11777 6337 109 11778 11779 6530 3130 11780 3936 10606 11781 9989 490 11469 8576 10507 9726 2252 5402 11579 5614 11782 6428 11783 11784 4095 1645 2581 11785 11786 5241 11787 11788 9476 11789 862 11340 11790 11791 2352 10179 11792 11793 1221 9296 3640 2913 11794 11795 11796 11797 3613 11141 11798 7372 3198 11799 9159 11708 11800 9815 11745 11801 11802 11803 2586 11804 11805 11806 2034 1117 8911 11807 2952 11808 10509 9786 10559 10758 11809 6744 470 11810 11811 805 11812 11813 7881 11568 11814 10010 7843 8879 9611 9278 5774 11815 11816 10757 11817 11818 5009 11819 10159 10060 11820 11821 11822 10836 6719 11823 10474 11824 10569 10906 7111 11825 384 7034 11826 6673 9048 11827 9870 8246 11828 11829 10997 10900 11830 11831 2906 9783 11832 11833 11834 10380 8905 11835 4252 11836 4451 460 6076 737 11837 11838 11839 11840 11841 11842 11843 11844 8949 2295 9878 11845 742 11846 1575 4860 11847 11848 6440 9734 11849 11850 1789 1076 9910 3691 11851 11852 7270 11853 11854 7060 11855 11856 723 9788 11857 1675 11858 10233 6539 11859 11860 11861 6927 10680 6065 11459 9079 11862 10024 11863 10846 809 11864 11372 11865 8451 9047 10353 7659 8841 5385 1008 5733 11866 4285 11206 8022 11639 11867 11868 8755 11869 1825 9129 11870 5143 8365 11871 5776 430 9565 8136 8046 7852 1618 10392 11872 11873 5051 6647 11874 11069 11875 961 3427 1218 11876 11877 11878 4218 11879 7228 995 11880 2705 11113 10299 4827 8051 11623 10470 11881 10964 10685 7655 11882 11883 10334 11884 7856 8633 3138 10278 10294 11885 11886 2796 11852 11887 7414 10379 10075 3183 11888 11889 11890 11891 11892 8566 11401 10648 5193 4250 6084 6703 11893 4012 11894 9793 10962 450 2258 10170 11895 10471 11896 5653 7381 6377 11834 4792 11897 3728 3938 6953 11898 11899 11900 8954 6334 11901 11902 11903 7062 11904 7934 1540 8544 8657 11905 9950 11906 11610 11907 5504 11908 11339 9513 11909 1195 11910 5141 10216 11911 6652 9250 5738 7709 11912 11913 11914 11915 11916 11917 7269 11784 11918 2019 11919 5965 3217 6404 11920 10046 11921 8591 11385 1447 11922 10187 9510 11494 7717 11923 11924 11925 3043 11926 11927 11928 11929 7830 9119 10612 11930 3343 4935 4652 10402 8373 2699 1954 3445 11931 5313 11932 11933 11934 703 5509 9329 4613 11935 8239 11936 11937 5219 5972 2338 5835 9992 5433 1002 3172 11938 11939 9687 3690 11940 9598 3040 11941 2184 11734 11942 8516 10211 11943 11699 11944 11355 11945 1156 11946 7473 11947 11103 11948 2152 8994 11596 9479 4366 11949 2329 3500 9782 11950 7810 2121 11951 1534 11952 5191 6592 10582 11953 950 11954 5264 11955 1733 7977 11956 593 11957 5753 11023 11958 3503 6733 11959 3316 11781 11960 11961 11962 11963 9279 11964 11965 9407 11966 7110 3423 6170 10206 10629 11967 5123 11968 11969 11970 4696 9146 11971 9707 9185 11163 10240 11972 11034 11973 8769 9906 11785 7739 3852 10165 11974 5865 8880 10602 11818 11975 9490 942 11976 11977 10144 11633 5950 3962 11978 11979 8436 6121 9679 9397 6878 11980 2664 11981 11982 9732 11983 11968 11984 7586 6231 10639 10259 1838 5608 11985 10262 535 11457 11986 865 11987 10516 11988 11989 11990 11222 11991 11992 8825 8700 11993 11994 11694 9946 3542 11995 11996 4997 687 11997 381 9408 5234 4663 10824 9549 11998 11999 1116 7191 10375 12000 12001 12002 12003 5845 11543 12004 12005 12006 12007 1338 11750 8318 12008 12009 12010 10825 11407 7559 418 12011 8510 12012 3254 12013 11345 11004 1477 12014 12015 12016 11905 2238 5723 8225 10571 2892 12017 12018 12019 6108 1934 10936 11768 11947 1555 3912 4404 10961 6680 9179 9688 6851 1106 1386 9802 12020 3088 12021 12022 12023 3654 12024 2594 12025 10427 153 12026 12027 128 328 12028 12029 12030 1346 6862 2242 4251 8216 9899 9596 10383 3668 12027 6904 409 12031 5477 4597 12032 5919 12033 3158 12034 12035 11044 12036 12037 3985 12038 12038 8897 3954 12039 8417 2548 12040 9678 758 11164 3539 11043 2358 2011 12041 6619 12042 4063 11871 12043 4444 2797 11816 10501 2958 12044 12045 6483 8745 2649 6840 2539 7002 12046 12047 12048 3410 442 12049 8874 12050 9438 12051 5229 12052 2656 1968 11344 11809 2799 12053 12054 11015 3959 7815 11084 12055 12056 12057 9323 12058 12059 1227 11728 9666 5751 12060 10794 4452 11600 1925 12061 7341 7820 8999 1279 1938 10810 2021 12062 2777 11491 12063 12064 9778 125 9344 2168 6051 2158 12065 10065 390 12066 8133 796 12067 1057 12068 9488 12069 7966 11435 10281 8971 10591 4852 9399 10750 3703 12070 1 11402 8442 4734 10784 6590 10779 12071 12072 1601 12073 12074 693 12075 8682 5015 9557 3940 6911 3342 8781 7264 5075 12076 12077 9663 4723 11738 2277 12078 12079 5912 6248 5168 12080 12081 10160 3946 12082 10740 12083 12084 6086 3874 10510 10502 12085 12086 12087 10668 12088 12089 10574 6672 7048 2960 12090 12091 12023 5911 7007 12092 12093 12094 4894 6238 12095 12096 316 8752 10080 8355 2098 12097 3672 559 12098 12099 2080 12100 8475 12101 11631 12102 12103 12104 11329 12105 12106 12107 12108 12109 11307 8185 7900 12110 5944 3787 12111 8295 7693 12112 2038 12113 9153 12114 5263 12058 12115 11817 6400 7337 12116 2389 12117 3629 12118 12119 7674 12120 12121 6823 12122 11962 778 438 5119 8349 9305 11153 12123 12124 5698 9801 12125 12126 12127 12128 12129 12130 12131 476 9410 11199 2253 12132 5899 12133 11047 10020 11585 3635 9759 1722 10869 7507 8071 12134 12135 12136 12137 12138 11263 10108 9909 11465 7949 12139 355 12140 930 10001 3511 11279 11520 4575 12141 7500 12142 12143 12144 12145 8664 11677 7394 7076 4330 12146 12147 2763 5228 12148 12149 8621 5279 12150 12151 12152 6928 4606 12153 11195 7726 12154 12155 1342 12156 10028 12157 2793 12158 11293 12159 12160 1092 11644 12161 12162 12163 12164 10196 9172 9252 5285 12165 12166 11302 2989 2457 7213 10142 12167 12168 7166 9425 9280 3908 2707 6635 8118 10467 12169 3739 12170 12171 5272 12172 12173 7227 1104 12174 10224 12175 12176 12177 12178 6095 4196 12179 12180 104 5624 12181 9995 10493 7727 3418 10132 8240 10103 2427 12182 4430 11593 243 12183 5895 12184 12185 12186 6948 12187 12188 262 738 10245 6941 9951 2157 9362 12189 12190 8756 12191 11049 12192 9997 12193 12194 7732 12195 10549 12196 12197 175 12198 9266 12199 5630 5519 3354 12200 2122 12201 11399 4681 12202 10913 6193 9535 630 12203 8993 10313 7997 612 834 9099 8064 12204 2335 11505 11851 12205 12206 7862 10607 12207 12208 12209 4754 12065 3577 3330 12210 12211 67 9777 9538 2986 4507 12212 12213 1411 12214 10739 12006 8710 12215 12216 8922 8634 18 11679 12138 12217 12218 9841 9338 8882 5637 12219 7804 12220 6452 11894 12221 5803 411 1510 12167 10354 12222 6272 12223 12224 12225 7096 12226 12227 6990 215 12228 12229 12230 9184 12231 9139 12232 12233 12234 7486 1391 7118 11255 9335 9548 7410 10213 12235 12236 12237 11843 6385 12238 12239 2402 11333 11077 4993 7678 2769 12240 12241 12242 11381 12243 4990 12244 12245 12246 12247 10631 10007 10875 7517 6322 7713 10395 1001 3514 9749 12084 10004 102 12248 12249 417 11175 9885 11239 6173 12250 7735 8192 12251 1254 7186 1564 12252 10714 4649 12253 12254 12255 8169 5252 9940 10902 7777 11581 12095 9704 9230 12256 12257 1965 3192 12059 2192 1726 1619 10018 6477 12258 9912 552 565 4184 11158 1991 12259 9037 12260 12261 2754 492 12262 12263 12264 12265 12266 10215 9918 1828 9318 4439 12267 110 12268 12269 12132 9725 984 12270 12271 10285 12206 118 12272 496 6282 7556 12273 4776 12274 353 12275 1298 12276 10302 10174 6617 12277 12278 9697 10747 6511 10831 9509 11467 12279 7887 12280 3401 3218 12281 10290 12282 12283 12094 9848 11477 4814 6963 12284 11780 10430 12285 5665 3015 10627 6797 50 1372 12286 12287 12288 8869 8649 9974 4700 6545 12289 9991 12290 6129 12291 12292 10893 11510 8950 12293 12126 12294 6968 12295 12296 12297 12298 12299 9304 5888 3701 12300 8530 7322 3633 9289 3206 12301 1993 11495 12302 12303 12304 11964 9610 12305 12306 5480 12307 12308 12309 12310 3052 9375 12311 12312 12313 12314 4557 12315 641 7475 4182 1509 12316 12317 12318 6299 11306 9240 12319 12320 12321 9566 12322 12323 6430 12324 2633 12325 8263 12326 11527 11269 12327 8463 2123 12328 5591 10937 12329 4186 881 12330 12331 12332 1696 11453 12333 3791 3777 1879 3412 7985 1939 6922 6524 448 12334 2333 5586 12335 9528 8923 11450 4719 12336 12337 11319 12338 12339 1691 12340 4052 6699 8529 12341 6561 12342 10258 12343 12344 11219 12345 11642 11551 416 4888 444 12346 11863 8191 372 8958 12347 12139 10873 2257 12348 2587 7395 1743 12349 12350 12351 12352 11500 4670 4871 2584 12353 12354 12355 12356 12357 12358 12359 12360 7813 6077 4516 12060 9036 10734 12361 5368 4257 12305 12362 12363 12364 12365 6645 12366 5113 12367 8437 10203 6537 12368 11875 12369 12370 3880 12371 3858 12372 12373 12374 5869 6052 12375 12376 12377 12378 8912 11999 8282 12379 11564 12380 12381 12382 4 2056 12383 8449 7204 11575 12384 12385 2317 12386 9373 8615 10305 8565 12387 12388 4022 12389 706 12390 6932 9721 12391 5997 12392 7485 8374 5710 12393 12394 1022 8596 4431 12395 12396 9851 5346 12397 12398 12399 2932 9175 12400 12401 7066 12402 12186 2322 11196 2147 11545 12403 12404 12405 12406 12407 12408 8196 12409 5429 5103 12410 12411 12407 12412 7814 6618 1256 4929 11587 7032 3004 10230 4291 1867 4782 10460 3792 12413 2935 12273 11900 12414 12415 10030 9872 12416 3361 9676 12417 11937 1174 12418 12419 40 12420 12421 12422 12423 8146 10477 12424 1456 1959 12425 12426 10435 10814 12427 3310 2591 1181 10645 12428 12429 3522 12430 10568 5554 9339 12431 6219 12432 3337 12433 12434 1798 1568 5687 12435 12436 1326 11149 4999 12437 12438 12439 12440 2493 12441 12442 10295 12443 5726 12444 12445 7307 12446 5512 11891 11688 1099 12447 5734 12448 12185 8358 661 12449 7208 9905 12450 45 7589 6235 10372 181 5001 12451 10021 12157 8815 11019 12452 3386 8562 3368 7930 9730 10861 12453 363 3610 3208 11876 2626 7387 12454 7494 12455 12456 7153 12457 1397 12458 6181 11470 12325 12459 8248 11991 2990 9116 12460 12461 12462 8341 4688 9525 11166 12463 8254 4850 12464 12465 12466 7523 12467 9835 12468 12469 12470 2736 1885 7957 2517 12471 12472 11538 11791 454 12372 12473 12474 741 2983 12475 12476 6906 10538 12477 12478 1362 10723 3139 12479 12480 5742 9322 10297 8829 8579 7776 12481 12482 8934 507 12483 1292 12484 4672 4691 12485 10851 12486 12487 158 6940 9735 12488 10769 9095 12489 10306 3120 7514 871 11591 12490 12491 12492 12493 12494 12495 2000 12496 10619 12497 3560 12498 12499 12500 11036 12501 12502 12503 12504 3393 12505 9308 12506 12507 12508 5303 7774 5894 12509 7773 12113 12510 11039 12511 3502 5514 12512 1187 12513 986 12514 702 12515 10920 12516 10828 4570 12342 12517 10063 6846 1933 7102 199 2425 12518 6814 7983 7331 894 12519 12520 12521 11392 2846 12522 11812 12523 12524 6356 543 10355 12525 8782 12013 9166 12526 11647 12098 12527 5605 11832 11253 12528 12529 12530 8679 10173 5457 8372 10593 8600 12531 12532 2647 2323 5764 12533 12534 9157 6688 3941 6802 10136 1857 12535 1719 3067 12474 12536 9935 3292 7650 7817 8067 3620 12045 9640 6144 12520 5111 9924 1546 12537 12491 9454 9677 12538 12539 12540 12541 12079 883 1943 12542 4362 5807 8982 12543 9137 6594 12544 11804 3857 7832 12545 12546 12547 12452 4726 10976 12548 12549 12550 7490 12551 9775 1248 12552 10074 4887 11296 12553 12554 12555 12556 12557 7665 12558 12559 12560 9904 11055 12561 12560 12562 12074 3458 12563 9628 3727 7210 1149 3624 12564 12177 12565 11674 2376 12566 12567 12568 12569 2521 12570 12571 12572 12573 6406 12574 12575 4344 9990 11800 4658 10980 6462 10176 12576 9197 10536 11030 12577 12578 12579 12476 12580 4998 7177 3407 10930 12581 12582 12583 11393 12584 2841 12585 12586 12587 696 2118 3888 12055 7794 12588 8110 7782 5987 4771 12589 5500 12590 12591 3101 2618 12592 1795 8943 12593 1553 12594 4045 5623 10770 12595 2375 6860 12596 12597 8326 12598 449 4971 6168 12599 12600 10270 12601 12602 10670 10882 12603 12604 11658 12605 12606 12607 12608 12609 9420 11228 12610 12245 12611 12612 7384 3782 5891 12613 12614 5640 12396 12233 7528 12615 12616 3964 12617 12618 12619 1287 3754 12620 5854 12621 12622 12623 12313 10812 10444 1569 12624 12625 12626 12627 12108 10040 12628 12629 12630 8070 6874 12631 4006 112 4064 2602 12632 10539 11499 4050 12633 11159 3702 10168 3528 3246 12634 6798 2195 1718 12635 1856 12636 11335 12637 8778 5691 6429 6298 520 12638 3334 6641 12639 11144 12640 12641 12642 12643 7968 5194 10594 12644 10441 12344 1314 12645 10002 1530 8694 7462 4858 10667 12646 12647 11922 164 5920 12648 9051 8394 12649 11089 6432 12650 3903 11833 5703 9900 12148 12554 11896 1407 8902 4085 12651 12652 10744 3267 5034 12653 10459 369 7509 12654 818 12655 12656 12657 6659 12482 12658 12659 8851 5134 3468 11698 1442 7680 8651 4485 12660 12661 8400 3659 2629 8458 12662 12663 12664 12665 12666 12261 12667 1772 12616 1872 7660 1297 12668 4924 11773 11978 11842 4380 12669 12218 6151 2413 12670 12671 12672 8844 7981 10924 12673 2933 6153 12674 4951 1830 11458 8917 10035 11090 12675 9746 12136 12676 11118 12677 12678 12679 12680 12681 12376 10666 8695 12682 11367 6609 12683 4772 1450 12684 12036 12685 12686 1233 12687 12688 4340 12689 3585 1050 5800 8170 6502 12690 2481 12691 242 8388 9882 5511 10710 12692 3684 12693 12573 11943 963 9029 11570 8976 11771 1902 11190 12694 11471 6507 12695 9494 11893 3341 12696 12388 12697 12698 1539 3907 4433 12699 11327 10977 9796 12700 931 4740 8667 11521 10042 2417 1780 12701 12702 5387 12703 7567 6907 8794 6016 7637 12704 11369 12705 2062 12706 6622 3675 12707 12708 885 3164 12709 12710 12711 12712 6724 12713 6784 4183 12714 311 6748 5627 9996 9818 9854 12715 10562 4773 5584 8300 8456 12716 12717 12718 11420 7417 10164 10597 6493 6889 12673 12719 4127 12720 4205 10321 12721 12722 9489 12723 1898 9244 11819 12724 12725 1970 12535 8506 11468 519 12726 11143 10086 12727 9090 10446 3404 12728 1960 10300 12729 9229 9982 9226 12730 12731 7841 12340 9009 12732 12574 6531 11374 12733 12734 12145 6563 12735 5871 3892 1919 12736 11700 7596 12485 1432 8030 1763 4667 12737 4219 7259 12738 11508 12739 10652 12740 6313 11652 4856 1196 5755 4111 12741 9050 7515 12742 6863 5419 12743 720 12744 3781 3950 9635 12745 11926 12746 12747 10186 10093 4758 11102 9092 12748 8586 891 2759 9617 8730 1646 4094 12749 3045 2786 5575 1490 12750 6391 12751 12752 12753 9164 9461 12754 3819 7444 12755 12756 5106 4683 2466 12757 7964 5705 8724 12758 12759 10802 12760 7623 12761 12762 10087 9282 12763 12363 3720 11706 12764 12765 141 10017 12766 12686 5100 12626 12767 6449 12303 8684 11341 12374 9702 12768 10197 4592 12769 12770 4117 12771 12772 792 2882 899 12466 12773 11503 12049 10732 4221 12774 6745 1389 283 4214 3716 6605 3098 198 3817 12775 775 747 12776 12777 12778 12066 5175 12402 9005 11265 7074 12779 12780 5489 12781 12782 12783 9138 1121 12708 12784 1944 12785 8936 2321 9274 12786 12787 3884 7378 12788 6031 8188 12789 7447 12790 5718 12791 9202 4432 11588 12122 11249 12792 12793 11423 10292 12794 217 11906 182 11512 12795 3140 3038 12796 3839 12797 12057 11514 11161 4313 12798 12799 1047 12135 11409 9460 4255 1139 12800 4378 12783 4836 10931 9433 9653 6111 7872 12801 11757 12802 12803 10547 698 3970 7631 7902 12804 8270 8611 9952 233 12805 12806 12807 12808 10877 12809 9234 6903 5873 7610 5439 10653 8422 11309 12810 12811 12812 12813 12180 2982 11874 12105 9984 12814 4180 8760 6233 3179 9439 2525 12815 2431 12816 12817 12818 2501 12166 5076 6866 8598 4891 12171 7952 12819 12820 531 8446 8875 11017 7185 10322 12202 12821 12822 6969 12823 11357 12426 12824 11574 10974 4811 12825 1462 10706 5102 8607 4096 6127 6943 11011 12826 8703 12827 9718 12828 12829 12830 12831 6427 3383 3233 8269 12832 12833 12834 2050 6509 12835 12836 1504 332 798 12837 5632 12838 2907 12839 957 10996 782 11648 12463 959 9855 1426 12840 6350 2359 12841 6912 12842 12620 10965 12843 11430 12844 9810 2509 12845 3815 12846 9546 10777 12847 6551 12423 12848 4054 1984 1870 5799 11848 8688 12849 7354 5463 12850 2912 7916 12421 11711 7113 12851 12852 2646 6603 197 12853 12854 4766 11449 6161 12855 3181 12856 10531 11940 9665 10419 10370 11236 12857 6232 12858 11720 12859 12860 8983 12861 5392 12862 7000 183 770 11343 5408 12863 12298 2484 1844 12003 10933 12861 12679 12864 12865 12866 7926 6212 5824 6879 2758 12867 7440 11626 9082 4390 12868 7078 2558 992 1135 7081 2030 7349 12869 6501 11032 8069 12870 10520 8100 5790 12871 6861 12872 7152 12414 12873 12567 12874 10412 2812 6305 12875 12876 6577 12877 4425 1764 1158 6888 12878 6491 12879 8027 12880 9481 9809 12881 11918 1188 4327 4770 12882 12883 12884 12885 12886 12887 610 12888 12889 3915 12890 2817 12891 3636 12892 12893 6735 12379 10362 1283 1355 12894 10369 11733 12394 6763 9422 12895 12896 10089 12897 12898 12899 12900 8872 12901 9471 12351 12902 12903 10963 383 11080 9669 2075 6297 11231 4716 10641 10953 11957 11310 2854 8878 5635 7145 12904 4633 3014 11907 5465 12905 6471 11133 4331 12906 12907 12908 9626 2504 12909 10118 8359 12910 9758 9131 12911 12912 12913 1226 4541 12659 10989 12350 9595 12033 12914 12442 7363 12172 12915 12443 10866 12916 6420 6964 8180 75 12917 5288 9436 2002 12918 12919 669 12920 8981 5355 9091 7568 5543 1183 11630 10318 12921 10217 12922 12923 12924 7836 5815 12241 8500 12925 7544 7365 12926 12903 10515 12927 12928 12929 12918 11142 4523 11536 12101 12930 10326 12931 3399 7973 1489 12932 12102 5242 4041 7731 6416 5028 12860 3834 5786 10567 12933 9110 12934 11284 1492 12935 65 8915 8066 12021 4141 2760 890 9685 12936 12937 4360 12938 12939 7318 12940 2237 10755 7483 12306 10212 12001 11766 1908 11243 3588 12941 7087 2523 6355 8826 12548 12942 5948 12943 340 8264 12944 12945 12946 12947 5878 5860 10357 11257 12948 960 10708 1444 1029 304 12949 12950 5137 5638 8861 9313 7719 4831 6415 12951 6304 5905 12952 3794 12953 9444 2811 4174 7306 12438 8584 12954 10661 3665 10798 3547 10067 1878 5791 11289 12955 12956 10999 12279 12957 2886 12896 12958 12959 5563 12103 12960 12961 11139 1628 12962 12424 9843 12963 9616 2385 12655 9188 12964 12965 12966 12967 3862 12968 7903 7020 12969 9606 12555 11945 5768 11350 12178 12970 11578 12971 10621 8927 10219 4455 11542 5901 7811 7753 2131 12972 12927 12973 12151 3350 12974 4247 11365 776 9570 12940 124 12975 1900 5947 12976 12977 7151 9925 2930 12149 12978 10945 3091 6401 11294 12979 12980 12981 8539 10818 12982 12983 12984 12985 12986 10527 8940 1921 11358 12987 4131 11840 7505 3105 4405 12525 12988 12989 12990 5044 7917 12276 2887 4048 12991 5217 9706 12441 11865 12992 12993 5760 12994 12995 12996 4400 8969 1499 2589 5968 7396 12997 1476 12749 2236 12998 7992 5866 9382 3289 11390 9023 12999 13000 10748 13001 12187 13002 5765 9223 2951 11079 12640 7449 13003 3748 13004 12645 6100 10650 13005 3491 13006 7554 3457 13007 735 7154 4037 9483 11954 8819 8277 7607 613 3062 3507 12257 13008 9478 11258 10119 9791 5380 13009 7467 12683 13010 7695 4651 9239 13011 10847 10970 7488 13012 11033 10423 6225 13013 13014 12774 13015 8626 6580 1946 13016 13017 12794 13018 12660 2605 13019 12619 13020 11793 3853 10610 12558 13021 4471 6689 12071 8165 3363 2668 9152 13022 2139 13023 2865 11908 13024 11886 11672 11063 1390 13025 8914 13026 13027 13028 12400 4624 5246 8701 686 10948 11478 12508 6446 6113 344 13029 13030 3775 3345 13031 1705 2687 13032 11748 7978 13033 4339 13034 8772 10367 13035 4034 2049 9354 952 4643 13036 2806 13037 13038 9879 4027 12590 8670 10384 7612 578 13027 58 11446 1640 3949 13039 1580 12935 7532 13040 12904 13041 6552 13042 13043 12244 13044 5329 13045 7165 13046 13047 1394 9426 13048 3447 12014 11837 2573 13049 9965 12502 12840 13050 13051 12016 4098 12880 13052 5358 11068 6480 1709 5811 13053 13054 13055 13030 13056 13057 13010 724 13058 1424 3057 13059 11977 6512 3707 13060 653 13061 8929 9553 13062 13063 9465 13064 11634 13065 9849 8144 7685 3080 5680 2712 2822 11895 10564 9662 10462 11715 13066 12208 13067 11959 6876 13068 13069 2463 12990 9684 8663 5192 9963 3758 13070 3284 10335 12630 13071 6324 13072 10623 11743 13073 108 8728 11035 7915 13074 1290 9031 174 13075 8181 12477 13076 4119 13077 10014 4410 6613 13078 13079 13080 13081 13082 3582 1866 13083 2119 13084 13085 13086 5047 8697 10832 7632 12243 10580 404 5105 13087 13088 13089 13090 4397 9078 13091 13092 5505 231 13093 13094 8763 13095 12338 13096 13097 6833 8979 12916 13098 1903 5058 4996 12051 13099 1153 10806 13100 13101 12500 2133 13102 12064 13103 5382 10453 13104 13105 13106 4530 13107 11078 13108 8433 9112 3548 2269 13109 13110 10960 9949 10811 13111 1590 10084 13112 13069 8342 13071 13113 8997 1454 13114 13115 7984 13116 3639 10484 2491 9723 11544 13117 11995 10618 9881 13118 13119 12343 475 1975 12802 186 5995 7236 11701 12283 13120 7027 7183 13121 6160 8573 12986 7474 10181 13122 13123 13070 9651 2996 13124 13125 12895 13126 8058 3476 7527 13127 11311 5156 12911 6897 3280 763 8731 12761 3709 5552 943 2442 1436 6824 9636 2437 166 6134 1051 13128 13129 3590 10166 13130 6236 2001 4933 8323 5485 10796 9737 13131 10638 1840 7876 13132 12731 13133 3058 3257 12165 13134 5085 4482 13135 924 6868 13136 1128 13020 7676 12936 13137 13138 3154 614 13139 13140 10358 2328 8432 3115 5810 8517 2216 13141 6329 13142 9405 9999 13039 12155 13143 629 13144 13145 13146 8398 13147 7146 12294 12264 13148 13149 13150 13151 13152 11221 12992 13022 261 12872 9148 8857 12162 12796 6565 11655 13153 11361 8096 6434 11429 12647 12691 13154 7082 10695 13155 10544 13029 1354 2655 13156 12981 3721 538 12968 3481 1410 13157 13158 10886 5516 13159 13021 11690 13160 10432 12309 1594 7068 11916 7793 13122 2127 12754 3558 9428 13161 2462 13162 8856 10378 10969 7167 8938 5832 12528 13114 13163 13164 12629 6146 13165 9458 13166 5782 12837 8402 13167 4235 12544 3899 13168 11223 10718 6576 9930 4678 13169 7273 422 13170 11052 3030 8005 8847 12566 13171 13172 12041 9530 9033 2802 8178 8966 12238 10145 13173 5160 13174 12137 7058 9165 5013 7415 5342 4177 8053 11612 13100 13175 11822 12938 13176 4025 11790 12750 5618 12011 13104 7127 4912 13177 1678 7042 4479 13178 12259 193 10928 13179 11754 9287 12816 12570 10688 13180 13181 9097 13182 13183 12937 13184 13185 13186 13187 1300 3027 11363 6384 10994 872 11921 12879 12224 2070 13188 8172 13189 13190 12868 6107 3351 13191 6992 3978 3124 13192 214 3863 1305 7797 13193 3331 9915 1401 10210 5517 13194 8195 10919 11883 13148 13195 6188 13196 11920 2182 13197 8866 5016 7714 13198 11058 13199 1928 10719 12832 4502 10175 13200 10575 8084 7397 12958 11869 13201 11712 271 9674 12947 2543 4907 11735 3054 7364 7588 13202 13203 13204 3537 3066 13205 5188 11815 6587 1506 3512 121 9522 10183 6557 2697 2805 12905 13206 13207 13208 13209 12281 1109 486 13210 12271 13163 6813 1605 13211 5114 5701 13212 13213 11497 3269 13214 13215 4367 13216 9752 12387 11194 3741 13217 11970 1098 10624 11665 4669 13218 8104 8453 5435 7705 7880 9381 7671 2432 11559 11909 8383 9281 3981 6960 4708 847 11901 13090 13219 1433 12215 11038 5165 2205 6835 6682 13220 5943 13221 2564 9413 7482 11857 13096 722 13222 1152 12432 6217 13223 13224 8835 12272 1716 13225 3531 13226 13227 6718 13228 129 9880 13229 3321 13230 10551 11983 8951 13231 6760 7543 13221 12596 5291 13232 11473 10849 13233 1232 1576 13234 11649 13235 3099 9671 5628 13236 5745 13237 13238 13239 7436 10310 13240 10359 13241 9637 168 3396 9983 8785 12227 7129 10554 12766 2145 10600 1521 12267 8120 7223 7346 9826 1138 13242 3979 7282 8818 8795 5672 7853 13243 10050 11928 13244 8461 6836 13245 13246 12209 6627 12384 6358 13169 13247 6353 13248 5299 12450 13249 2245 13250 13251 1998 12926 8230 4449 13252 13253 12972 13057 13254 11797 6610 3241 9258 13209 13255 13001 2765 13256 13257 958 11297 2477 820 12160 11461 8759 8006 7313 13258 8033 4905 12062 5979 9312 13259 11561 13260 4147 13261 13262 4777 2934 11437 12726 11663 3200 7827 6714 11621 9981 7663 13263 3960 11046 13264 13265 1465 13266 13267 11755 4150 12999 12190 12356 13268 6242 12909 13118 604 12009 2650 9386 5461 13269 13270 6058 7506 13271 8219 12516 12321 8858 12299 13272 138 4529 13273 12605 13274 8021 13275 12617 6176 13276 3248 8380 10705 4484 6022 12431 6929 944 13277 13278 878 1273 11948 7907 9466 13279 9675 11984 13280 6386 12287 867 12381 10932 8860 4861 13281 7426 12328 13282 13283 361 13284 13285 10909 13286 7080 1367 9804 1485 13287 3851 13288 4653 10391 13081 13289 6623 11760 12983 5336 2243 10867 10070 10341 11762 6319 10762 7601 740 6027 11119 4722 5483 13290 2008 11759 11313 9156 2134 13291 13292 4355 11087 9975 11976 12153 13293 8407 2146 8764 6290 13258 8817 9584 13294 8988 13295 11597 1108 13296 2730 4409 1244 13297 13298 5708 13299 5850 12495 13300 11057 12745 8162 13301 9921 9856 9275 4978 2474 13302 5324 10495 2568 13140 2288 1766 5068 13303 6381 5233 9792 13304 11237 12894 11059 13305 13306 12486 9464 12216 13146 7360 4674 11951 4630 11517 13307 13095 8019 9209 13308 8948 8630 4765 13309 66 2314 5981 13310 13311 10317 13264 9787 10508 12639 8741 13312 12526 9193 9237 8863 5349 10220 12161 5498 11531 13313 13314 8412 5732 6271 12081 5383 12080 9609 10922 13315 13106 1794 13316 12692 13317 13318 12672 3837 4084 12513 12496 3889 4278 11691 13319 13320 6684 4639 7855 13321 5629 6458 6790 7857 7998 4155 13322 13143 9693 273 13323 12559 13324 13325 13326 13026 13327 608 10644 13328 13329 13330 3104 11910 10234 13331 13177 791 3176 13332 13333 9762 13334 2634 9681 3670 9417 13335 10009 2181 7844 12561 12747 4154 11444 13336 3397 13337 10659 12715 6343 7555 5493 12969 13338 10148 12369 5839 11334 7458 7377 11547 5421 13339 480 13340 6402 4725 11747 2868 3203 2836 7606 12661 13341 545 7963 9700 13342 13301 1762 9552 4648 12563 11838 8026 13343 13344 13345 4974 206 13346 6179 317 13347 13244 4855 9366 1191 2764 10236 2567 10232 13348 13349 4785 13350 4769 9270 9694 11115 9215 13351 13352 11204 12633 7162 5951 2459 6890 8660 679 4664 8303 13353 13354 9579 12220 13355 7696 6788 12545 11000 13356 13357 9132 13358 13359 13360 12956 12930 12296 9517 7824 13361 8223 4492 7558 13362 8044 12952 11656 8871 13363 4143 11207 10746 8113 13364 12982 13365 11899 13366 10109 8893 13367 9056 5066 13368 12931 9824 9547 5785 10716 11974 13369 8132 11154 10742 2130 980 3893 3451 13370 13371 1805 9978 8908 8426 10682 11518 12255 6023 13372 2109 13373 7689 13374 13161 13375 10800 11923 7119 7990 11320 11455 11786 8790 13355 1482 6403 4518 6260 9506 11042 13376 3346 13377 1368 7343 7199 4388 13378 11867 13379 8827 954 11935 11678 10102 13380 155 9263 13381 11611 11026 11763 1347 13382 13176 13383 11820 13384 13385 13386 13064 10850 12073 13387 10208 13388 13389 12449 10860 3811 13390 13391 13392 9174 12087 12552 11713 12198 2919 2641 13393 3842 7819 3555 13394 11552 13395 5088 12934 11388 12670 3389 13396 12120 11569 11844 13397 13398 13399 13400 11001 13179 2740 1295 11769 1472 7258 13401 9695 12032 3841 11758 13402 13127 4031 13403 4957 9977 5443 7135 13404 11752 10324 1348 10340 10123 11091 145 8076 8261 13405 7392 13406 13407 12650 7762 13184 1163 484 13408 7456 8550 3300 8839 13409 4014 11992 8855 13410 160 11439 13411 10957 13412 10407 8124 6989 3988 9798 7207 440 11839 2710 6357 13413 12509 10816 8125 11251 11880 13414 8322 13415 11148 10874 13416 5936 4324 2795 13417 9253 7190 10985 5413 13418 13419 13420 13348 13345 4867 1045 1520 13421 6049 10463 7065 12332 4747 4807 6247 9440 12150 8397 12456 6199 6980 13422 6211 13423 12385 12689 13424 13425 12022 13426 6249 9133 3260 6898 13427 9067 3750 6983 13428 2099 13429 13430 13049 13431 8385 4865 517 7879 5582 2784 6055 13432 6276 1880 7988 10958 12780 12469 2183 5244 12795 3180 11722 13067 6140 1049 13433 284 9615 13256 13434 13435 9192 3093 13436 4191 13437 9393 13438 11778 12026 13439 6437 13440 9592 13441 2028 8462 13442 9831 5945 13327 11741 9388 12451 13443 11513 8085 13444 13445 10456 9199 1784 11165 5851 7255 10774 2024 13013 13446 13447 8569 13448 5157 4018 13449 9860 10753 13450 9346 11967 4729 1134 10056 13011 1700 13451 6761 13249 921 13452 10939 7869 9896 4193 7779 7056 10120 10106 187 13453 5715 13347 7959 13454 9269 13455 13224 13456 5000 1356 759 1702 12614 13368 5958 6966 11085 5654 11081 12085 4353 151 13457 10149 4565 9515 12336 13458 12251 4607 13459 13460 13461 13074 10486 10339 4319 12581 10031 7200 13462 13463 13464 13465 13466 1137 13340 13467 10263 10674 10303 4601 5789 6278 13468 5744 7787 13153 10887 10398 13194 13469 8119 6961 12070 11160 13376 12140 9222 4738 13470 3698 13471 7433 298 11197 13472 13473 13474 4137 5208 13461 11067 4459 10327 13475 2531 13476 13454 11298 13477 3416 2597 13478 9437 8939 12712 13479 8423 12739 1565 12874 6286 1461 12383 10736 3878 10532 13178 13480 5327 6254 7158 3425 13481 11193 9379 13482 11987 13155 11347 11226 12254 13483 13484 13485 810 13486 13180 10363 8324 6523 13342 4138 10044 13487 467 13488 10759 13207 10034 13091 13489 4413 13490 4611 12989 13491 8842 5510 13299 968 13453 12677 13492 13297 4222 12169 11261 13493 13494 11601 6190 8610 4801 5604 13495 11836 8738 2978 6048 11798 6167 1589 875 13496 6418 6421 9360 8953 8821 7666 13497 13498 2810 13499 5423 8955 10023 13500 13275 7829 4967 13501 13502 13503 9424 8538 6369 13504 10256 8768 981 9561 13505 13506 13507 4164 13508 12367 5532 13509 13510 1096 7960 13511 294 13512 13513 13514 7237 11515 13513 6518 13438 582 12853 546 683 13515 13516 7790 13036 12075 8820 2148 13517 13518 3943 13519 6747 8676 13520 3963 8415 4075 12576 299 46 3810 13521 9683 13522 3075 13285 2297 13523 13266 9498 13524 4864 12551 6363 13525 12039 6572 7103 13526 12392 13527 9741 8242 13528 13529 13530 11082 8513 12158 13531 6690 8259 13532 11396 8183 13533 13005 2476 8492 13534 13535 12591 367 9140 9190 1832 1203 13536 6974 8345 8888 11645 2372 8302 10700 996 10076 7107 12728 13537 3127 10852 13538 13539 569 11860 12784 13540 13541 7745 12803 13542 12533 7801 11053 13543 1253 13331 13544 107 2737 13545 6250 11318 13546 11266 4229 9093 13547 8357 13548 13549 13550 13551 9072 7742 1782 9343 12810 7831 7336 13552 10138 13553 10439 13554 12275 11719 11853 7083 13555 3711 13556 13557 13558 12975 2798 10503 12315 7072 12839 618 12007 7141 13559 1647 5010 6679 4058 9320 13560 13107 9572 4128 9493 13561 12665 12875 1329 13562 7030 13563 13564 12288 7679 13565 13566 8025 13567 7004 13318 13568 1663 3523 13503 11447 9689 13569 5445 3204 8167 11640 13274 3774 12239 13570 11415 7340 12348 7974 575 10524 473 11641 1776 11132 13488 2391 12519 13571 11463 5254 10157 13400 2678 5069 13572 13573 9520 5580 13246 4462 12644 421 515 7203 1526 13574 7489 13575 9181 13576 9559 13577 13578 13579 11360 2719 11056 8753 11925 13580 7751 12099 6896 11924 13581 8438 13015 5999 13582 6347 2003 13189 352 5006 1641 7636 7874 3934 5333 13583 13584 11598 5375 7253 10443 8970 10951 8297 6871 10526 2823 13585 5301 13586 12741 5357 13587 10447 10323 11493 13043 13588 1801 13589 11198 4829 2877 13023 8382 739 7441 7125 8534 13040 13590 12763 13591 12855 13592 8063 13593 12410 12711 10655 8459 463 9833 13594 10193 2513 12018 11519 13595 6884 5879 13111 8978 13596 6131 11270 6812 3808 10129 8595 4102 12791 13597 11136 12893 13598 893 4209 10615 9123 12610 8523 4042 13496 13599 12684 2494 3832 12776 13326 11821 13017 13600 12368 12720 13601 12876 7226 13602 11096 8288 3561 13603 13604 6318 8766 11562 10829 2312 670 8620 60 3187 13605 595 11384 13032 5467 6364 2550 8482 2026 12505 12888 326 13606 13607 5473 12141 10839 5793 2916 13608 10766 2033 5941 11990 13437 13133 11308 8793 4423 7182 13051 13379 13609 11502 10518 10713 12870 11424 12242 13610 13611 13467 13612 7886 4382 12473 4061 5032 6105 13120 13136 13613 4638 142 12959 13614 225 13615 13241 13512 11299 13489 12871 6933 7688 8364 3603 3650 8182 13616 12594 3347 9934 3175 9434 10163 13617 12005 12111 6555 13618 5907 13619 2724 2828 13620 9059 2972 13621 13622 8884 13623 13624 13417 13621 13187 10421 13625 13626 13627 13628 12746 11555 7618 8377 13629 13630 2217 11942 13199 2814 13625 12562 3413 10069 10728 13452 13631 8320 13632 8690 9075 10730 11126 9155 2948 7244 13633 12852 13456 8909 13634 1803 13635 13636 13637 1460 10152 13638 12159 239 12247 6014 13639 8049 5574 9895 4941 6207 12235 13640 10738 3438 5326 13641 11680 6550 13642 11275 13643 13443 12851 12397 13644 24 13645 13646 7995 1835 2287 13192 209 8393 12809 8116 11704 2624 11484 13647 4673 12078 13573 914 13648 11739 2199 7725 13649 1402 13650 10390 13651 12994 13616 2603 12042 13652 12835 6589 6450 12031 4842 8467 10139 4176 9276 13330 11394 13563 10229 12663 9962 12517 12144 10464 13578 10271 6698 12854 11729 6025 11651 6806 5884 8074 1251 9956 13653 6648 11169 13083 13654 8101 10870 11554 13654 8508 7850 7439 8536 140 13655 802 13656 10942 13657 10803 13222 13411 13658 9046 3930 9183 12461 13659 10038 13660 13661 6632 2228 7682 348 6665 10955 721 6822 13662 7239 13663 8376 13664 13432 6917 13665 13666 13608 9819 171 1148 12129 849 13399 13124 11451 13667 7053 13668 8289 11138 7369 12878 13669 13566 5391 3904 12608 2701 13336 12976 1945 11859 11086 13670 5215 9058 13671 13672 7286 13673 9034 13362 10805 3329 4093 12286 12760 3082 621 13632 8740 11736 12484 9769 7522 13674 10599 7323 5938 1732 2193 5262 7720 10458 11624 11167 8718 783 12772 7295 13675 13676 1421 4647 1677 11092 13677 13048 6444 13678 13229 3153 9376 13504 13679 1942 1592 2653 2307 13175 13680 426 9369 10153 12409 4610 12966 9682 12293 11882 10047 2909 9667 318 4524 7015 4544 5187 9470 11285 5929 12131 6920 5721 10651 12752 4731 6258 12690 5706 13681 1602 12284 407 13682 11122 11262 8520 13683 356 11560 10822 11772 13684 1615 13536 248 8675 9597 13685 11620 13325 10675 2479 9986 13686 12358 6294 1162 877 11696 9171 9414 13687 6101 13688 11528 9356 9623 3765 246 11020 13433 13689 5496 4545 10114 11565 10426 9583 13690 4136 13009 4299 12790 11145 6407 7754 11950 11234 6378 12723 13691 13692 13693 8278 7284 10312 13694 13619 6850 2151 13439 13371 13695 201 11799 11792 8015 4395 4346 12134 12290 11397 9127 8257 6148 12734 8578 12263 2388 3614 8977 1609 2350 386 10630 13696 3219 13697 12077 4232 200 3186 13698 8960 8469 4132 11904 3820 7654 13699 7012 11295 5008 3997 13700 8455 8102 9889 7090 13701 3439 12565 6425 9351 7106 272 901 3545 4783 13702 3699 10008 13703 12704 11445 12230 13630 11971 9638 13220 13704 7359 12221 13705 13706 9114 12961 7564 11522 13707 13708 13709 13710 2939 925 12017 3622 3128 5205 2833 12595 13711 9811 4806 5476 1155 13212 5227 3049 9435 4280 6093 10442 13712 4679 13713 5727 4921 13485 13714 6629 7251 10657 13715 5852 13232 13716 13717 8870 11695 13718 5970 13183 12688 12652 10062 9286 4837 13469 846 9550 13719 13720 13230 12539 13721 13722 8715 13723 12701 8568 7214 11208 12713 12127 9371 7247 7996 632 3071 12593 13537 3898 13679 2303 13724 13370 13725 8916 11325 2717 11878 9853 8091 13087 7366 10782 7010 11824 590 7752 13726 9068 13727 13643 12266 10450 12949 7006 13728 8221 13729 5309 12109 12133 9876 4434 3415 13219 10545 10022 3159 1694 10916 5980 8236 8623 13730 4540 13731 757 7355 8638 12699 13390 11879 4795 4753 6774 4190 10884 12978 13732 7085 13733 13734 6328 12643 11443 9729 5513 1101 13025 13519 8813 8859 11643 13735 4325 10595 1446 7590 13498 4914 11100 2883 13736 756 6711 13656 1899 8802 1513 4655 13737 11825 7046 13738 6399 6202 1081 13481 12948 13739 10731 7319 8656 13693 10105 10100 10151 13740 4847 11061 4480 7143 11305 13741 10276 3417 6389 9874 10239 9000 9055 9485 2259 13742 105 12813 1464 3303 10424 12335 527 855 11524 566 13055 7891 13743 147 8465 13427 9315 12628 13243 13744 7037 6180 13477 13745 10712 13746 12768 1642 9724 12440 7424 13539 8115 11403 2351 13747 10504 8705 12687 11714 2165 9350 10500 6895 5048 13277 9077 11481 9027 13423 13748 8287 2652 13749 12446 13750 13751 9441 5012 8284 9430 5220 13752 4751 3302 13753 13754 13145 13755 12511 13447 9409 884 13756 13757 4243 1881 13670 13758 13759 10247 8617 11776 5549 9540 10556 13760 13761 13004 11613 13762 10235 5037 2347 11903 10411 12420 13745 7923 10570 13763 13568 12932 2185 4521 13413 7303 13764 7799 11434 13765 13766 13575 11501 5741 2985 10161 9536 6857 8526 13167 213 13767 9081 12232 4377 5659 13132 10566 11827 768 10725 13580 11646 7896 13063 13768 10542 1704 12943 5641 13769 9232 13508 8059 5711 13770 9710 7279 13631 13771 13772 8850 7249 12002 13773 13253 13774 12678 13775 5390 12847 13776 13597 320 6064 12258 813 6628 2791 4460 13777 9331 10146 13778 9292 13509 13779 6591 5422 2968 7686 6752 13731 9332 3669 9827 11969 10550 13121 11592 13592 1330 12951 13576 12191 13407 13780 218 13383 12542 5452 8305 2689 832 9574 1519 12395 13781 9104 11404 13718 5759 13782 9608 1483 13783 10269 10478 13784 13785 4902 7005 5029 6112 12457 13786 13191 8072 7406 12289 13464 10475 10693 5804 7361 13754 6759 1243 13787 13788 12798 7645 13789 12925 4270 2621 9511 204 5697 2552 13790 13791 10535 12764 12380 13792 13486 6423 3680 3182 1834 13793 1119 6395 8472 13794 13795 13796 8652 7667 2115 11191 13298 13797 13798 13799 13800 13801 165 1449 13794 3210 13802 10729 11589 8197 12408 13803 5971 11405 7885 1848 5556 12657 13804 2931 10596 13624 9361 12899 9235 8987 11427 8232 7937 11661 12043 10006 7704 13805 3764 681 7571 10598 8524 12831 3682 11456 188 7529 13722 11375 1622 13365 13806 5927 9283 13806 10819 13807 4955 3380 13808 12897 9817 8476 10581 13159 13809 13810 10011 9018 13792 11476 4826 11462 13811 8360 11282 4818 6522 3821 9922 640 10677 7710 6769 13760 8155 9299 13393 869 4742 2274 7741 12960 11211 13812 2234 13813 10180 4659 1980 5752 10915 1268 13814 6804 13815 13816 9913 6066 13817 560 11697 13818 13574 12954 8430 11607 6339 12460 13751 7837 11383 13819 4060 5049 13414 10400 13820 6558 12642 5007 13821 12703 13809 9443 9370 6584 11229 665 11795 13711 9177 1648 13531 7039 335 11140 3876 2976 1122 8551 13822 6208 13823 10523 13824 10012 12603 13825 11668 13826 1077 13827 13828 11292 13278 1428 11387 13606 1668 13747 13829 2418 5207 8904 6398 12196 13455 11120 12737 9543 13062 1577 7325 13830 4987 3661 13831 12662 13426 13562 13401 2301 10185 8673 13832 13833 13834 13835 219 3141 5124 10126 11244 13836 7769 1393 3583 13837 13838 179 3077 7206 5471 11960 13788 13839 7358 1357 4120 11556 3308 8173 13003 13840 13263 13841 8083 9521 13784 11567 8265 6227 1630 2235 5416 11013 11749 5046 7478 5977 10413 8555 10082 8919 13369 7416 1263 8973 13823 1103 13613 12618 13842 10658 971 400 3836 33 6926 13506 1276 13430 13843 3450 6541 11742 13028 13844 10804 5121 12210 5610 5474 13845 12928 10991 863 13846 13847 6803 13673 3156 13848 9545 13201 13735 13776 5276 6567 10862 13405 11472 10891 12398 6630 3761 9976 13849 11615 13850 13251 1741 12034 13851 10622 12627 9807 13641 13852 2421 10576 9484 13853 3102 13854 8065 13855 3942 13856 10801 11723 9074 10043 7721 8050 3877 6700 12671 13857 12128 13858 11324 10987 130 9816 4764 12889 12000 8796 9108 6695 5108 7061 6333 5897 4398 11732 5376 13295 12971 13859 10704 13848 13860 2800 4846 13861 13862 1661 6900 3381 13863 13864 7600 6008 2924 13865 13866 13867 4548 12700 13774 11342 1550 10572 10776 9842 6500 3065 12681 13868 12624 240 5829 13869 6142 13440 11549 13164 13870 9744 11216 10858 4950 13869 4496 12046 13871 4574 8014 13872 2852 13688 13873 12523 3294 12104 4684 13874 8765 7315 8018 12579 12769 13138 13875 7737 13203 11965 11533 10385 13680 13876 1831 4798 12083 13877 13109 10835 12762 13878 6596 8811 8557 3238 7692 6222 4051 13879 13000 5671 9931 9178 12512 3312 7281 12357 7979 9349 6424 10975 2366 13880 13669 8496 2694 13623 4227 12609 13881 9109 12998 3993 2420 6230 11681 13024 4091 4293 13882 2124 11277 13883 85 10072 13700 13725 13843 11590 3263 9385 10813 13296 5146 13884 13885 3165 12163 13162 11586 5155 184 11756 5969 9673 5101 2266 9701 3769 11550 12808 13886 13887 11184 13888 6018 12470 13889 13890 7139 13255 13079 9812 13891 12444 13892 13893 8709 9463 10541 13894 6191 12061 9690 13895 6499 4812 10737 7526 11185 10929 3529 12953 12664 2551 12323 13690 5775 8009 9512 2620 7591 11938 11572 6664 13793 13896 11108 13897 38 13898 12179 13284 13446 13587 8712 10223 419 5464 11625 13356 10808 4029 13899 7625 12262 727 6348 10347 9631 12970 4259 13126 6301 13900 10935 4447 675 7070 13451 5781 4580 6306 5362 10833 76 13901 9080 3094 13902 12547 12716 4099 13903 13904 13425 13905 13837 13168 13906 13907 13908 13909 11371 598 13646 10522 12012 3644 9612 3 1511 11227 7701 13910 13402 551 7432 13911 11829 13344 11123 5238 8329 7254 12788 7457 12068 13912 11884 4862 4640 13913 13841 13914 11516 11944 964 1400 10724 8788 3694 11286 96 13915 7582 12175 9245 13170 13341 10198 13916 8024 9954 5050 8205 10298 5961 1535 11831 13917 13901 7929 12231 10482 10064 10128 12076 13657 13918 11885 1457 11670 9564 8889 8672 1161 13919 2083 4104 3436 12467 13920 503 13202 1025 5226 12599 11931 13921 11252 11012 13101 13381 7174 13332 7353 2821 13147 2628 12908 7435 13922 8648 11278 2713 5607 10715 13406 9862 13923 1626 11064 13403 5896 13549 13353 13924 2508 13511 12096 13351 1632 13925 9821 13926 7373 5559 8079 6039 8395 13586 13927 13099 13059 9061 1892 10896 8330 7502 10188 6799 2154 13852 10982 3535 6251 7287 13490 10973 12030 13928 3207 4238 9800 4465 94 2511 10726 12811 13521 5648 6157 2728 13006 3931 7472 13929 13787 13930 12494 6489 13235 4281 6435 3983 12955 10786 12143 1036 6978 5248 1849 13931 12378 13932 12492 8589 11939 11094 4274 13750 12362 10809 4702 12514 8351 13933 13934 13894 8693 11539 13935 13225 11010 10090 10823 5350 8163 13655 4358 10647 10773 10968 2961 13338 8504 10268 8421 2560 7569 13936 13871 9150 5906 12297 12735 8495 11873 12349 13937 11073 9639 12044 8404 9845 12622 12419 2069 13768 1600 13471 11337 13938 6519 8975 11775 13645 13939 8957 10191 10894 7530 2807 9015 13618 4172 9301 13384 6158 5657 5788 6035 1955 4295 10376 12 11727 12564 2276 10946 13940 13941 6270 6852 5213 6106 12817 11808 13683 8029 13942 6120 10154 13943 1041 13035 11941 13944 9825 10241 4321 8543 13945 8597 5378 2677 12743 13946 11746 5240 9 2194 3008 13947 10525 12541 2714 13948 13949 13950 13245 2204 13708 13210 10469 375 8134 3840 8974 13054 13516 13951 13134 8631 7132 11245 13116 10481 3800 13952 13953 2987 9805 11312 13910 13954 6697 12119 12237 12669 8186 4932 13955 13684 8553 1303 13956 11377 13186 13328 11764 13833 13957 13831 11328 12667 13958 11101 13959 13960 8406 13961 9533 8931 4298 13962 10401 5150 13770 2855 13082 6527 12530 10409 1182 13963 13964 4107 11209 13965 13966 5597 5038 11368 13967 12324 2540 13807 10308 3083 4682 13877 4709 13649 10095 12478 13254 6568 10992 8204 2211 13968 6259 4817 4906 13969 9125 6600 6705 1085 2528 1378 11238 13372 13675 3095 13190 13970 11823 13971 5116 1118 10765 13612 10565 11151 11810 11805 8036 13972 9563 13149 1150 13658 11606 9923 13973 5716 13887 13974 8849 13891 11506 10131 13522 13975 11134 6914 11127 13802 12192 3664 13415 13976 11813 6826 10592 13977 379 13952 12048 1205 7275 10971 12346 13978 4307 8114 13228 13979 11858 11210 11660 3253 5522 10890 8151 8283 13800 1907 13980 6004 3486 6821 13466 13981 13982 12882 9696 13603 8106 12705 9204 10557 13555 13983 13919 7675 13984 13985 10643 11290 3408 8547 12924 12727 5709 9117 10754 10879 5621 13986 1947 6581 11114 2741 11686 11946 534 13940 12447 13855 13987 2613 11200 10255 1214 1321 13988 2787 1021 5198 13989 8754 12738 11887 11504 9866 2482 6257 7641 8903 453 13990 2106 10351 13991 6762 13480 3464 7748 13992 12326 13993 6331 12025 3063 6024 12341 7479 7672 11346 13915 13394 12841 4995 11811 6880 5719 11098 13570 8965 13377 880 13994 13583 8552 13995 749 1491 10096 1528 13996 13528 13922 9908 13739 13569 7765 5401 10422 1556 6777 856 13997 12804 9959 5470 5568 11584 1009 6467 12386 13998 13999 3286 10954 8907 432 13986 14000 9261 7986 14001 3855 14002 6454 7635 9268 11726 9141 8098 13845 4406 11731 11433 13635 13732 1434 6707 6956 6485 10066 11675 1850 4903 7909 11966 14003 9586 12415 14004 1635 11788 4938 10918 9742 4822 14005 666 6296 11802 11669 2360 8632 14006 11256 13273 14007 10405 13282 14008 13692 11996 6351 9291 13234 12646 13795 277 2426 14009 9032 1864 14010 8784 8138 11254 3473 10116 10947 1559 12848 12740 14011 14012 13980 6795 13721 8275 4441 3509 12366 12195 3333 14013 6807 212 14014 6117 12282 6409 12354 10140 13585 6285 6585 6931 10029 12987 8816 13967 6841 9151 12480 14015 264 3033 10264 52 9445 14016 9001 4821 14017 10517 13584 13765 7608 2161 7877 13682 10122 14018 13276 10360 11441 13367 14019 1166 10717 12685 10683 14020 11537 14021 4704 4576 10349 257 13790 12666 628 11509 7224 10552 14022 12146 10364 13988 13903 12015 11099 12751 3309 13674 12939 13600 3913 8353 9519 10530 12625 13868 4152 6873 16 13738 12814 10857 13305 11301 8368 7512 14023 3735 789 3562 13884 6040 14024 8251 11426 2370 14025 13866 13113 14026 5369 7592 13571 14027 11395 1082 13844 9203 14028 10254 539 8032 9567 5787 14029 12606 14030 8686 9524 6103 9531 13397 1767 7616 10537 7299 14031 11380 11955 6332 9698 13267 10237 13391 9875 300 14032 7468 14033 334 512 12534 6772 12405 7786 10511 8545 13470 13691 6556 11532 10640 14021 7828 13912 6751 4053 10169 13269 2380 14034 14035 4857 14036 8661 5145 13197 13810 12280 8490 9588 8313 10182 11685 11178 4952 8082 14037 2900 12222 11006 10110 7297 9196 14038 6277 5578 7108 10381 14039 14040 11985 8097 12765 10534 7229 2659 12635 14041 14042 11400 12696 12404 14043 11359 576 13605 12518 12256 13759 9347 12929 12923 3020 13921 9814 11571 13862 14044 12991 1781 3149 7561 135 3729 9941 12219 11961 1281 12828 13932 4504 13465 8962 7783 13615 1505 13561 11599 1687 12900 11636 8900 14045 14046 5432 3662 9303 9251 10676 13860 4991 1208 13085 2926 12838 1037 10780 8233 14047 7798 13637 11841 7760 3026 8942 9958 13457 8894 12540 1624 13743 1545 466 13436 5579 13588 4498 1190 6582 14048 14049 2554 10781 12142 8166 2387 12615 14050 8304 7470 14051 6349 4428 11803 7733 13767 11650 7643 12698 11534 2492 9534 14052 13969 12088 11428 11496 10466 8311 9813 4759 5820 1621 9333 10988 13716 14053 13215 13257 10771 7064 4534 8487 10981 14054 4474 12054 14055 314 9431 6097 8609 13479 10943 11854 11718 4317 6408 2120 4760 14056 7908 12008 7867 8681 6092 8363 4436 12521 10227 14057 1666 11168 9828 9618 13311 7225 13985 11724 11765 6998 9218 13473 5039 13150 14058 8201 11348 10694 11220 8540 12830 13102 3306 10101 14059 11130 12301 13660 13602 13310 13514 9162 11710 4878 14060 14061 5370 14062 14063 13151 5596 9013 8998 14064 5930 1841 6413 8140 13487 13639 14065 12815 12260 13321 6811 6203 14066 5617 8726 13556 14067 13717 14068 13973 14069 13811 4105 11422 11849 7169 14070 10815 6312 11054 10637 4928 6800 4267 14071 13042 13875 3544 2866 4292 13698 1431 3501 1160 13964 7386 5115 13801 11998 11577 8736 6359 10190 983 13421 13938 13686 4899 12697 14072 13518 4335 9738 13260 4834 14073 4949 12789 11523 14074 13945 14075 6988 7263 5595 13703 14076 13092 13144 4320 1846 7245 2970 14077 6546 14078 14079 13217 11683 6785 889 4778 2311 14080 5634 14081 8399 13599 11898 14082 14083 9200 13530 3956 12371 12037 13773 12236 1836 13813 14023 2944 9064 13045 1435 7656 12515 11264 6194 13322 13628 4868 12339 358 12529 12375 2167 9042 14084 3924 11183 10167 8750 4043 12653 12193 14085 12885 9242 13567 1310 14086 12453 14087 14088 14089 9797 9501 12391 13131 14090 14091 11124 14052 14092 13742 11041 14093 6593 11117 4044 826 14000 1987 9808 13237 10940 7649 1941 13614 14094 14095 11807 9832 13108 5348 13955 8641 13727 11436 9102 8470 10207 8292 10045 9290 11412 8428 5952 13409 13117 9262 825 1114 4035 788 9394 11989 14096 11744 13545 14097 11442 7451 13493 10265 853 6130 8075 10854 11952 4038 6939 5704 12436 14098 4001 6461 4074 6036 12538 13803 12462 12347 13939 3605 12429 10374 14099 9145 13897 14100 3518 11188 12223 11993 11353 13685 11835 13550 638 13233 8729 7914 11480 6110 13927 5923 7383 14032 7976 14051 491 8964 10250 10749 12249 5482 6924 1820 10194 13135 13044 10546 13002 14101 11109 8618 11856 6451 4645 5273 13268 2085 4495 11389 13141 5110 13959 14102 7585 11635 14103 9247 10578 14104 7563 13749 14105 6239 10111 979 14106 14107 14108 13208 6116 13890 3591 13350 6614 8148 7188 11689 7662 9006 7067 10605 14109 13523 12268 14110 6166 12498 4123 8234 6525 6710 12300 2363 1010 12097 12427 10745 11189 13053 2392 12825 2971 12304 10026 14111 14112 7553 11217 12756 12063 12201 2285 14113 10793 10221 8643 11872 12826 1715 12758 6674 7093 14114 9869 7345 8194 1969 12777 13642 14115 4533 13532 4595 13156 557 14116 12600 13842 8147 7025 3498 12382 5499 12010 14117 10490 2395 14118 3239 9600 13463 9516 10840 12092 11777 7453 11980 11097 13659 10015 11121 1608 7673 13829 1612 14119 354 4129 14120 4013 8677 7290 11583 3034 14121 5449 2454 12069 4984 11240 12004 4454 14048 13476 4236 14122 6683 9390 9014 10528 10635 12602 9757 13886 9325 2963 10373 1593 11973 408 13572 1765 13540 2390 12490 14123 14124 12130 253 14108 6171 11408 6470 14125 2300 2188 12722 10722 11637 14083 11892 13434 4621 11186 14126 6999 14127 6177 13520 5546 290 12487 7698 9060 13854 14128 14129 1644 9761 14130 4695 2891 13527 5675 5438 4712 14064 4550 13223 14107 9920 10927 11370 5253 7170 10434 10428 9403 13867 11170 6492 10315 10437 14131 6721 8273 13364 3031 6624 4332 443 14132 14033 13058 4644 14133 14134 6174 13865 14135 12226 12611 6354 9255 14136 10642 4715 11828 13999 7051 1996 12724 14137 1063 10914 435 14138 10878 12353 5809 5024 13834 13459 6574 14139 13349 12510 12884 13942 4531 9327 8008 7572 10399 4312 1721 6520 4656 3385 7661 14026 6001 11171 12170 2674 5364 13924 2371 2187 12417 9970 14035 9126 5289 14106 12152 14140 13598 8727 14049 3209 13105 4975 9747 14141 3002 9049 9890 3996 10768 9527 1896 2265 14142 11787 906 13818 14143 7775 617 9784 5942 13872 14144 1048 13346 7131 2889 11972 9054 14145 3394 14080 10926 13970 13128 14146 14147 14148 9750 5652 13963 9859 13995 6079 11037 13060 1020 12454 12883 13557 3611 11202 6621 9953 13468 9898 10199 12676 8007 12188 14149 1028 1005 9933 11157 2190 14140 13313 14062 378 3112 11448 6599 4697 14150 13294 10283 4514 7933 6317 14151 14152 10345 1808 11398 14153 10279 4463 5179 5022 14154 4587 14155 14156 7376 14157 3314 11721 5054 8420 8692 7703 2164 7570 4254 8429 797 14158 10429 1901 12086 14159 4815 11563 5325 8877 13174 9365 13314 10048 12327 14160 14161 7864 13089 9955 2929 13552 14147 8231 5812 12725 12807 13484 10671 6979 14162 13893 11410 4345 12850 4598 9641 9298 10697 14163 8824 3747 11737 13386 7771 5436 636 14164 8279 8992 13730 6145 12941 9341 13777 2953 12389 347 8803 14165 13410 11693 11048 12265 13857 13495 11129 13551 13226 14117 9387 14058 14166 13762 14167 13856 11994 9158 8789 4561 1913 9020 13728 14168 9722 14129 7260 7499 2088 12785 13542 13968 14169 11460 8622 14170 11179 13706 5122 12584 14171 13565 8494 14022 8369 11911 11274 11862 8926 1826 1343 13435 13714 14172 11716 4189 7112 5204 14173 1062 9378 4797 14174 4185 1068 14133 9526 8653 13671 3493 9135 8717 11060 14061 13633 10368 8000 93 14148 2435 12019 9043 10820 5825 13983 6954 14175 7868 14176 12636 7173 2386 7918 11317 4279 12199 13066 14177 14092 5030 13853 13782 9803 8299 14178 671 13262 459 7328 9957 14179 10055 9182 14171 8804 9728 14180 716 275 14068 7791 9121 7552 10417 12481 4992 3155 4594 14179 12621 5109 11618 13593 8527 9468 14181 1414 6041 9903 7495 1911 12123 14096 9719 14182 1438 196 11331 5966 13889 12779 5097 8662 14183 1662 11487 2544 2616 13733 5593 9063 13492 13312 13077 14184 9839 6360 8606 3367 6455 1185 8742 10614 13445 7304 8735 5993 5360 5730 11083 3619 13458 8627 1788 4057 3382 5567 1611 9871 2859 8247 10238 14109 10587 8401 9716 11162 13965 8558 11981 137 7296 12771 4467 13687 12773 12792 14185 6712 13704 7854 7104 13791 709 13997 13061 6496 13904 14186 12532 6658 12211 1168 13474 12090 3885 1056 11919 14187 11182 6669 14134 11432 13270 14188 14189 9472 12995 14190 2221 8868 13389 14191 8039 14091 14046 4986 12917 12568 7089 9474 8572 1141 14063 14192 14182 5599 13937 14193 506 4365 3211 14194 6849 12114 12913 2061 5218 14044 14104 4115 8990 10033 5020 13755 5849 12550 13130 8757 9022 5828 14152 10382 14195 10480 14031 11304 2455 146 3594 1633 1223 5914 9630 10664 13930 14196 5023 5133 4415 3109 1915 12592 4939 14142 10000 4417 9646 3288 13821 5867 14158 6237 12549 14004 12977 14197 11958 13696 8961 11717 14198 14199 12506 14115 11192 9614 3059 8408 2400 2665 7434 6687 14200 11330 12638 11062 14201 13213 10864 9939 10859 13302 12115 14202 2954 10147 13863 4112 14180 11137 6569 13056 8497 1473 10184 11682 4133 5840 1136 7508 8963 13279 5939 12197 807 7620 14154 14146 3584 14203 14204 3392 12316 9491 8375 11071 10261 13259 8592 11638 7822 13978 11248 7956 9098 14205 11072 7484 9401 11870 11321 14206 12920 3638 11949 10436 13906 6192 12472 7464 8413 10512 12753 3937 1839 13962 9241 13171 2013 9086 13913 14122 5420 10783 13775 14018 9658 1213 7945 10286 1823 7870 6087 4414 2496 7298 13366 14207 663 13808 10979 14185 9160 13824 9418 8314 4874 14208 10158 14003 13885 14013 2572 11131 5541 481 7044 13779 14209 5332 7939 7390 11452 2533 1537 2105 2904 11250 11705 11914 11431 13796 11475 11378 13993 8886 7849 12089 5256 13589 12504 14172 14210 5740 6185 12890 14087 14207 11104 10365 10094 1734 11379 3009 2993 1976 14211 3793 10865 3355 11156 7460 11417 11218 14212 14213 3935 4297 5203 9558 12154 14214 4288 7653 12274 14215 11338 13761 9415 13533 12597 7647 8056 14216 4788 9692 13515 11106 4927 10905 11180 12781 13873 8111 13926 13701 3163 14217 5094 8707 13601 3446 14218 12543 14206 12719 10899 1923 11573 7697 4918 10115 12364 70 11150 360 14219 5148 3387 13902 9024 13154 13287 8991 8581 850 5126 6542 12308 3235 12648 3465 3574 14220 9039 14101 14006 14221 533 13668 9113 11373 11932 12867 10231 11008 13343 7861 12736 13016 4039 1684 13289 7644 13895 13839 12967 10584 13956 8392 13847 9937 13526 1935 6693 8489 13957 11933 4130 14222 7587 3625 170 4713 11280 5497 12433 14137 14223 9107 13018 11066 2837 9945 10336 2475 13879 11498 11730 13715 13815 8391 13737 4849 7293 3169 11850 13851 10449 1884 8073 10476 12914 12902 4357 12996 9927 12979 14224 14225 13826 14226 14227 11628 14228 8775 14229 14181 12601 9003 13726 10289 962 7420 13478 6330 6848 12459 10275 247 13805 14105 8658 9319 13424 7422 14230 12194 9776 7730 12907 11116 13238 2723 8367 14111 9216 14231 2081 5802 1496 11176 1206 14232 14233 8161 14234 5197 14235 14236 14237 9044 11617 11466 11801 7613 13309 3479 9709 14238 941 12173 14162 4892 14239 5018 13888 10897 1064 4965 12425 9334 13840 10337 13052 3917 9861 14088 2785 14240 12710 13662 12656 8687 8636 3037 9271 8235 4181 14169 3251 13880 12604 14241 10760 5576 4491 13046 11260 10646 13271 8256 12651 13678 11315 14242 13626 9715 836 2232 12393 3971 7123 8203 9449 8798 932 13216 12881 7792 6947 14243 4373 9352 876 8198 7927 12823 14213 14204 14198 12503 14055 13752 14034 6515 14187 2776 8414 13876 10807 9605 7594 11986 12147 6562 6478 13240 568 8127 6736 11203 1486 12818 13388 13954 12674 12082 14178 8532 13333 12637 14244 12922 13798 11917 9447 1332 14116 14231 12631 6371 4572 13359 4768 5678 6975 12695 3484 7536 13998 13323 13644 6902 6529 3890 13422 13892 11323 12329 14126 13073 2261 10333 14189 2988 12856 13387 8699 14163 13846 12110 3051 5989 10389 13974 10871 12318 11540 14245 14246 12403 14168 14247 9246 11673 14099 5487 13984 2290 13129 11406 5501 12612 3627 7164 12693 4015 14248 12623 12214 5529 11076 13772 13200 8012 12250 14114 2448 14244 10260 4571 10827 4569 14249 14250 13112 7540 14251 13900 12680 7578 5274 13283 11281 9035 8739 4693 10751 9643 4686 5883 13699 10855 9936 14056 13078 14252 14253 13198 13261 11303 4336 10304 12898 10487 9518 3276 10325 7121 7617 9780 10019 10990 12658 7140 8439 11438 13920 14222 2126 7238 4326 11356 11535 12843 6497 8347 14045 9556 14254 7770 14199 5536 14240 13665 5149 12718 10844 1862 9392 11152 13291 12499 12072 5481 13661 2673 10189 14069 14255 12921 5127 12310 7399 11662 7940 11582 12124 7149 8088 2156 14256 14257 14258 3776 10752 6169 6985 9691 13304 11558 2213 4800 13896 13544 13979 8665 14259 12864 9795 11982 7651 13996 8674 8316 7626 14260 6946 10099 7231 11975 10497 1058 9621 7086 3455 14086 10702 12546 14261 13499 14256 14121 14262 12118 9467 10837 11332 5372 10415 13119 2670 913 10956 2635 11440 14074 1790 11362 2661 6038 116 12406 13265 11351 7172 122 14125 13418 6043 14200 11135 3538 13878 10868 13850 2339 6534 12320 12269 11629 2872 12091 2458 12891 5684 9582 3440 12401 13231 14263 14143 7669 12524 13916 2592 1307 12799 14075 12373 5539 6045 13822 10707 700 10202 8808 12767 12901 5478 8711 1758 14264 10856 5335 14265 12744 14119 8996 2615 13123 11814 8112 495 7374 11488 10934 2230 12168 3743 9768 1142 13989 14259 8831 5524 3495 8896 14017 13947 11866 13917 9829 54 9353 14262 12295 6625 10696 13689 14144 14266 7241 10583 7043 7215 6957 12203 12583 11336 11416 7352 13577 13196 10993 11391 14267 7711 10625 10112 1875 9432 3606 14268 8156 10558 13882 11232 14184 7708 8522 12742 13579 14249 14040 2108 1786 3966 14025 10701 13740 9717 12556 12493 5488 6827 12522 967 11806 5713 10209 656 14269 11864 9134 13908 14270 1422 12052 10787 11288 14238 13907 3072 11604 7266 14271 5073 11608 10881 1260 12834 11770 12933 3477 7781 451 14097 6017 6280 8479 8443 13065 13971 13227 11485 10555 14272 8055 3766 5184 8454 13627 9739 14252 7175 12849 2384 13125 11040 11868 8105 14273 9507 12439 1111 14065 13797 13316 9868 14274 10901 13953 9374 14239 11028 12569 6118 8852 14100 6925 2672 5138 10414 11486 12291 12489 9767 8153 10472 13697 14113 8577 14153 12944 11566 14275 14007 13315 10743 11276 3489 14112 13812 6323 14276 14277 10966 13236 12253 6005 14012 11376 11125 2141 14278 8081 13667 13014 3213 7412 9348 62 3681 12833 14279 14149 282 13992 7538 4370 3726 9972 3549 14157 3663 3323 10266 12292 1810 1376 14059 2607 9887 13758 4420 9412 8218 14095 4937 2298 7670 13746 5411 7706 3428 8474 9340 12536 4381 9650 13398 13629 11259 14183 13709 3910 13110 9284 14118 14193 14160 13652 5450 2155 14280 4735 14281 14282 11632 1674 1667 5395 12345 12277 9539 14251 10277 1603 14221 14269 11492 8604 13648 11676 13785 10388 6765 13771 10027 7084 13620 7312 4940 12577 12455 14283 1847 11912 11483 3804 2788 3135 9799 1089 6460 7221 2330 11111 3632 14284 14261 13358 7047 14173 4296 2571 4705 13195 132 11877 3883 9642 10155 12229 7511 7057 6726 1014 9932 14285 12107 817 12475 8011 14190 2035 10972 8702 13382 13290 12248 14286 7477 8202 12714 13734 7196 14233 68 9217 9703 9211 10632 12912 13460 7898 4761 10051 861 14287 2779 9589 12942 8801 14288 14138 8440 6115 10338 13505 9846 6240 14029 1294 13160 11366 1322 9657 324 7413 14165 5209 12322 12707 2107 9214 14289 8090 2176 4168 12845 7408 3108 14020 14277 5098 11930 14094 9492 12706 13861 13604 6708 5469 13337 10244 10387 1852 7138 14290 9259 14285 5670 2464 13820 8448 10403 1031 8512 14242 13936 4407 13607 144 12733 11761 11783 14271 12730 13949 12067 13408 6070 1926 6206 13832 13899 14291 4070 4720 8189 12465 10057 3461 13712 14220 8864 12694 4286 13442 13982 2275 13558 3623 14098 13647 13975 12965 3536 11956 10036 4246 10225 10698 7905 2036 13651 1683 5864 11511 6187 3567 11847 13507 12844 13948 13595 2488 10904 6516 13581 221 4527 12448 11692 13165 14011 7274 13483 5005 12641 13188 11915 7243 14292 14293 10288 12278 13950 12997 12709 1304 6163 12228 11110 13681 6891 12649 2768 6766 13814 12778 5317 12434 13019 6138 13157 14294 5451 8771 13502 14295 11418 13137 11464 7702 12801 14090 690 11546 9733 13500 4920 7109 10366 11767 12862 14145 14070 14014 11548 13972 9012 2537 6740 8559 13966 2666 11659 9753 13482 1778 14027 13663 1404 13559 6583 1189 14296 10307 13308 9942 13008 13450 2419 2356 11242 14215 13250 14089 8149 13320 14019 13676 11287 13360 14297 13933 12164 13334 10016 6338 14298 2834 692 13753 7873 11479 8972 13416 2937 13158 3151 13720 14299 10137 14205 12910 12184 11789 7040 12246 9122 3092 9897 14038 11364 7759 8220 12418 11595 7427 14300 12857 14054 13080 11230 3243 5212 11913 13031 12464 4654 6228 12634 2947 13596 12919 3021 12572 6830 10540 3199 1796 10911 13252 13763 7009 6006 14273 2657 14301 12873 1246 6124 6141 3957 3244 6000 13748 1730 14292 5548 12588 12865 14234 14302 14303 7938 5643 12302 6548 9469 12317 9295 12471 13086 6636 10498 11602 13378 8563 12964 713 3064 13329 5495 5320 13653 13088 4733 13736 13292 7961 11225 10709 14279 10416 13494 7466 13560 11322 10921 3291 14304 13529 14223 10059 7189 10834 14203 4391 14255 13870 12270 10488 12285 5427 13905 12479 7116 3225 7471 4973 14305 8525 12732 14041 5337 13636 14161 11421 12468 859 9770 3948 14275 7767 5297 14071 502 3285 6984 13242 9499 10792 12497 3541 13419 6686 5130 13050 13172 13883 4073 13204 3317 4505 12377 12950 5189 14016 8887 3641 12100 8716 12174 13640 8122 7541 13929 12985 9794 8698 5082 11725 6864 3976 4602 6825 14192 14301 12863 12507 13594 14015 14230 10778 6210 11609 6894 5033 13819 13838 2514 14131 9852 12050 7574 11181 14306 5963 9497 11454 10604 7965 14307 12721 2202 7954 14308 3887 12337 13462 4076 5304 12334 13206 2549 14309 5322 11215 14024 6345 12035 14082 6881 10775 6009 13591 12537 376 5298 11002 10156 8612 13428 10925 14264 14008 13928 2150 12613 11779 12988 10192 14175 7755 14309 8416 9633 10071 10949 5846 13780 12252 4477 13781 12182 11075 5985 11268 3847 13941 14167 4210 13361 10788 349 13444 12183 1972 2337 11614 13404 4963 1475 8193 12820 8308 6307 13173 12819 14270 11419 3783 12234 12116 14299 11386 9111 14155 12413 12333 5035 11411 296 550 13816 10848 9648 10883 3677 5202 14073 14225 3357 2191 7743 14293 14310 14311 1824 2203 13756 5805 6468 5384 12729 10226 5367 8109 2565 10104 11603 8168 12607 13546 6393 5779 14156 1110 13710 14036 13097 2179 13789 14312 12361 330 13181 9017 1680 5418 11796 12962 7816 5547 9883 14313 9306 14314 14128 13535 3494 11929 14315 14316 10049 12974 14315 14066 1197 11927 13582 12571 2752 403 14317 12755 5642 13977 9272 6715 7598 8685 14296 6855 13946 12217 8876 8466 13007 571 4416 3655 10061 6839 4552 10649 13991 14298 14136 14247 11074 645 4306 4240 14224 14267 13497 9575 1445 14318 6081 564 678 8761 10319 13724 5502 2149 3090 13881 12125 1638 13185 14319 9300 12411 14320 4403 14176 10489 4707 10097 12858 11619 13385 14320 10898 9419 11214 11147 12435 5484 11314 268 10356 5581 11664 518 4097 2368 12225 13303 10880 5922 13609 11654 12587 159 13339 12422 13211 13836 13799 12359 6082 11553 7615 7627 12827 10127 5515 12117 6643 8057 12458 1774 13764 8780 5295 7566 12331 9928 13769 10703 1024 14307 14272 5822 13363 14067 7802 14002 6743 13707 13380 10620 9748 12668 13324 14300 1146 14321 9277 9317 10496 14322 14274 8293 3125 8944 11105 11936 13115 12675 26 12822 14303 648 5182 2756 5766 12412 11627 13914 12557 1437 4256 11541 14323 13617 13960 14248 9578 3042 7875 12906 8241 8150 14324 5232 8714 8034 3679 11657 14319 14325 14216 4427 14243 13541 5158 10282 14047 5801 6503 3070 7218 14325 7761 9580 2905 9714 13564 3074 14053 14042 13517 14246 13449 12307 4736 14318 11005 13395 7380 12020 6375 3113 10143 13543 8721 13218 3126 2090 13033 11888 12430 4608 12859 6419 7099 8418 14305 6316 9806 14211 5424 14284 3444 10320 14326 12314 7734 14139 2969 13524 12416 1529 13650 14202 13075 12181 12632 10986 10058 14208 8967 13239 13925 9355 9864 14266 12029 359 13307 11414 10941 12759 10756 5794 13205 11349 7163 5683 12531 5967 8935 14050 3475 10172 14232 12047 13142 8747 4443 1927 14085 2012 13825 627 14327 5926 14308 14217 13757 2040 10633 10895 14164 12797 11953 13778 11667 14236 7019 11507 3933 14084 3980 2101 11474 12112 14328 13038 12682 9016 11889 13034 9993 8224 14130 12846 12980 11703 14329 13766 12586 12757 13431 9573 7668 4493 13193 6114 7073 9624 13247 12121 12437 12580 730 11051 10842 6809 14316 3349 7520 8384 10785 14010 6885 9057 14276 12782 14170 12702 14072 9754 9629 14228 5913 4588 12428 12887 249 1920 9601 8941 13288 13694 14201 11671 14005 14253 13859 11300 2617 12946 12578 898 14188 790 1736 14057 8108 11687 14310 8424 8117 14288 13441 13281 13068 13286 5583 14290 11172 11855 13103 14317 13396 1904 12842 13553 10420 12040 14295 10684 7913 3145 2196 10626 13354 9830 11830 11354 13994 14324 13610 13214 11707 13352 5437 9765 14226 8809 10690 12821 12330 14209 402 3532 10892 1854 13420 14330 8258 10091 7818 9096 6246 14331 7194 750 10577 14329 8594 8227 10903 7148 14332 6801 11846 3069 12829 8441 12993 5848 667 13012 7944 6370 939 14265 13525 2601 14191 13961 2018 10078 8338 123 7835 5361 2663 13392 6602 14297 12892 1488 2254 14093 5645 3900 4786 12886 14227 4698 8533 5838 2921 6729 13677 8253 4226 3422 12654 13909 3492 14250 5898 12319 12748 11326 2870 1228 13931 7884 12056 133 7156 12973 4960 14257 9205 14195 14268 13664 13786 9482 14287 14263 8334 1842 12024 14286 4359 7681 14302 2790 6073 5818 9680 12866 8985 180 8272 4139 11774 9297 1220 11740 10494 5255 4676 4813 14076 14177 3973 10025 8956 489 7052 10492 5527 14174 10054 14212 13047 1257 1418 13182 3148 13093 13702 14102 4913 11902 9316 12869 13412 9363 14333 3228 2751 14314 13934 9486 14283 7493 9293 14235 3543 7385 12589 7469 3576 10727 8865 2005 8845 3572 6032 11622 12365 1536 4308 10352 7736 4040 2222 5688 2847 13634 3029 10330 12176 10098 13976 9191 5886 14334 3420 2103 14311 3647 3406 1430 976 1771 10343 3277 13248 5177 12553 4944 14151 1769 11088 13152 7962 4677 12915 12877 6685 14335 11653 11382 12793 12445 13828 5955 12582 8121 13830 12205 2065 6921 14124 7629 12207 7192 11702 12200 4100 3262 8503 4618 11213 11666 13072 12240 6433 13280 8989 10817 10845 14218 11794 12575 10005 3563 2927 4959 11934 14291 11526 14037 14278 2394 10692 12483 14289 5398 9713 14123 13981 7785 14260 6571 12800 13719 11845 12212 10273 6916 14258 11709 152 10617 431 4187 6971 10331 644 11684 10451 12093 2915 9189 13817 10679 7450 14078 3740 12312 6573 11425 10092 14132 3409 14334 11605 14186 13943 13335 2411 3227 4808 1040 1658 9541 11997 5877 13098 4512 10689 12213 4930 106 14127 13472 13804 7465 9294 5472 11979 10821 13374 2845 7317 3035 13548 11155 3230 12836 12189 2172 8696 14313 11247 2089 2515 946 351 4934 14210 10548 7476 10393 501 13611 3649 10251 8177 3565 13429 12501 14323 5844 11963 13547 14294 3044 9186 12106 12370 14326 5118 13037 8507 4090 14159 12787 8410 7932 12717 9021 9311 12770 12945 6816 11283 14120 14333 9822 8307 839 9840 11233 11489 635 252 2830 11271 51 6796 14039 11897 2942 3513 12311 7480 13695 13864 14009 13666 8853 162 14135 13084 8217 13293 13723 14060 13306 2722 9672 14336 11988 4204 11751 13622 13554 3689 13166 13510 14337 12786 13534 13094 13744 8045 14141 14332 14338 14237 11212 10790 14110 6336 10795 14219 12028 10735 12805 13041 13987 9569 8179 13705 14197 11861 10309 13858 9705 11016 9069 14166 11070 9227 8776 11782 12957 11616 3079 12984 12775 10720 6442 14030 8020 2170 13319 7664 13827 1258 14331 14028 4101 3353 977 71 13590 8336 3816 10052 8945 1558 14337 13475 11557 13076 13783 12488 14229 12053 5946 7803 9634 1523 14312 4943 194 7994 13501 6498 11881 11018 3261 13357 6775 1242 4793 5859 9142 13139 9523 9926 13849 12824 12352 5186 4399 7054 4402 14150 14079 8126 14196 10293 13835 5973 1284 14282 9144 11246 12204 10863 7077 7393 13741 1452 8635 12399 13935 11025 8800 12355 2711 14335 13874 12585 9169 14001 7947 4322 2460 13272 6994 13713 10013 13672 307 14077 9785 12812 10560 7014 10561 13898 8514 4750 11890 1345 10613 9238 11352 2720 14043 8154 3400 6750 13911 5521 14304 14245 8419 14254 10889 10479 113 8546 5558 14194 11530 10590 9233 11594 7161 14081 13491 12963 712 5994 7999 14321 10133 13317 7330 12360 4175 4422 12156 13373 3968 13990 13638 8286 9763 10228 13375 3298 751 14328 6781 6780 10242 14327 9180 3032 10406 9070 12527 13958 2524 12390 3290 5983 11580 868 7268 11490 14338 5261 7033 11826 1909 14336 13944 10711 2414 343 8812 9755 11128 6053 9073 8708 12598 10204 11316 10485 13300 14214 6119 9475 14281 11007 14306 3745 2208 7766 13729 13923 7256 gerris-snapshot-131206/test/nz/nz.gfs0000644000175100017510000000434512250371171014426 00000000000000# Title: Gravity waves in a realistic ocean basin # # Description: # # A tilted ocean surface is initialised in a realistic basin (the Cook # strait area in New Zealand). The surface oscillates # sending complex gravity waves reflecting off the coast and # bathymetry (Figure \ref{p}). No explicit dissipation is added and Figure # \ref{k} illustrates the good conservation of the total energy. # # This is a good test of the robustness of the method when dealing # with adaptively refined complex bathymetry. # # The robustness is controlled essentially by the way face-centred # velocity values are computed from cell-centred values. # # \begin{figure}[htbp] # \caption{\label{p}Surface height at $t = 2$.} # \begin{center} # \includegraphics[width=0.6\hsize]{p.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{k}Evolution of the kinetic energy.} # \begin{center} # \includegraphics[width=0.8\hsize]{k.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: gerris3D nz.gfs # Version: 100323 # Required files: nz.gfs bath.gts # Generated files: p.eps k.eps # # Use the "GfsOcean" model 1 0 GfsOcean GfsBox GfsGEdge {} { # Set the timestep to sthg small compared to the tidal period Time { dtmax = 1e-2 end = 28.5 } # Refine to six levels Refine 6 # We want more accuracy in the projection than the default 1e-3 ApproxProjectionParams { tolerance = 1e-6 nitermax = 10 } AdvectionParams { scheme = none } Init {} { P = 1e-2*x } # Bathymetry Solid bath.gts # Refine the coastline to 7 levels RefineSurface 7 bath.gts { twod = 1 } # Non-dimensional gravity PhysicalParams { g = 19.62 } OutputPPM { start = 2 } { convert ppm:- p.eps } { v = P min = -5e-3 max = 5e-3 } OutputScalarSum { istep = 10 } k { v = Velocity2 } EventScript { start = end } { gnuplot < 6e-12) exit (1);}' < k ; then return 0; else return $GFS_STOP; fi } } GfsBox { front = Boundary } gerris-snapshot-131206/test/lid/0000755000175100017510000000000012250371673013500 500000000000000gerris-snapshot-131206/test/lid/xprofile0000644000175100017510000000166212250371171015171 000000000000000 -0.5 0 0 -0.49 0 0 -0.48 0 0 -0.47 0 0 -0.46 0 0 -0.45 0 0 -0.44 0 0 -0.43 0 0 -0.42 0 0 -0.41 0 0 -0.4 0 0 -0.39 0 0 -0.38 0 0 -0.37 0 0 -0.36 0 0 -0.35 0 0 -0.34 0 0 -0.33 0 0 -0.32 0 0 -0.31 0 0 -0.3 0 0 -0.29 0 0 -0.28 0 0 -0.27 0 0 -0.26 0 0 -0.25 0 0 -0.24 0 0 -0.23 0 0 -0.22 0 0 -0.21 0 0 -0.2 0 0 -0.19 0 0 -0.18 0 0 -0.17 0 0 -0.16 0 0 -0.15 0 0 -0.14 0 0 -0.13 0 0 -0.12 0 0 -0.11 0 0 -0.1 0 0 -0.09 0 0 -0.08 0 0 -0.07 0 0 -0.06 0 0 -0.05 0 0 -0.04 0 0 -0.03 0 0 -0.02 0 0 -0.01 0 0 0 0 0 0.01 0 0 0.02 0 0 0.03 0 0 0.04 0 0 0.05 0 0 0.06 0 0 0.07 0 0 0.08 0 0 0.09 0 0 0.1 0 0 0.11 0 0 0.12 0 0 0.13 0 0 0.14 0 0 0.15 0 0 0.16 0 0 0.17 0 0 0.18 0 0 0.19 0 0 0.2 0 0 0.21 0 0 0.22 0 0 0.23 0 0 0.24 0 0 0.25 0 0 0.26 0 0 0.27 0 0 0.28 0 0 0.29 0 0 0.3 0 0 0.31 0 0 0.32 0 0 0.33 0 0 0.34 0 0 0.35 0 0 0.36 0 0 0.37 0 0 0.38 0 0 0.39 0 0 0.4 0 0 0.41 0 0 0.42 0 0 0.43 0 0 0.44 0 0 0.45 0 0 0.46 0 0 0.47 0 0 0.48 0 0 0.49 0 0 0.5 0 gerris-snapshot-131206/test/lid/yprof.ghia0000644000175100017510000000047712250371171015412 00000000000000-0.500577 0.00069404 -0.43768 0.275621 -0.429602 0.290847 -0.421523 0.303994 -0.406521 0.326826 -0.343624 0.371038 -0.273803 0.330015 -0.265724 0.32307 -0.000289 0.0252893 0.304962 -0.318994 0.359781 -0.427191 0.40652 -0.515279 0.445182 -0.392034 0.45326 -0.336623 0.461339 -0.277749 0.46884 -0.214023 0.5 -6.20706e-17 gerris-snapshot-131206/test/lid/yprofile0000644000175100017510000000166212250371171015172 00000000000000-0.5 0 0 -0.49 0 0 -0.48 0 0 -0.47 0 0 -0.46 0 0 -0.45 0 0 -0.44 0 0 -0.43 0 0 -0.42 0 0 -0.41 0 0 -0.4 0 0 -0.39 0 0 -0.38 0 0 -0.37 0 0 -0.36 0 0 -0.35 0 0 -0.34 0 0 -0.33 0 0 -0.32 0 0 -0.31 0 0 -0.3 0 0 -0.29 0 0 -0.28 0 0 -0.27 0 0 -0.26 0 0 -0.25 0 0 -0.24 0 0 -0.23 0 0 -0.22 0 0 -0.21 0 0 -0.2 0 0 -0.19 0 0 -0.18 0 0 -0.17 0 0 -0.16 0 0 -0.15 0 0 -0.14 0 0 -0.13 0 0 -0.12 0 0 -0.11 0 0 -0.1 0 0 -0.09 0 0 -0.08 0 0 -0.07 0 0 -0.06 0 0 -0.05 0 0 -0.04 0 0 -0.03 0 0 -0.02 0 0 -0.01 0 0 0 0 0 0.01 0 0 0.02 0 0 0.03 0 0 0.04 0 0 0.05 0 0 0.06 0 0 0.07 0 0 0.08 0 0 0.09 0 0 0.1 0 0 0.11 0 0 0.12 0 0 0.13 0 0 0.14 0 0 0.15 0 0 0.16 0 0 0.17 0 0 0.18 0 0 0.19 0 0 0.2 0 0 0.21 0 0 0.22 0 0 0.23 0 0 0.24 0 0 0.25 0 0 0.26 0 0 0.27 0 0 0.28 0 0 0.29 0 0 0.3 0 0 0.31 0 0 0.32 0 0 0.33 0 0 0.34 0 0 0.35 0 0 0.36 0 0 0.37 0 0 0.38 0 0 0.39 0 0 0.4 0 0 0.41 0 0 0.42 0 0 0.43 0 0 0.44 0 0 0.45 0 0 0.46 0 0 0.47 0 0 0.48 0 0 0.49 0 0 0.5 0 0 gerris-snapshot-131206/test/lid/lid.sh0000644000175100017510000000070612250371171014520 00000000000000if test x$donotrun != xtrue; then if gerris2D $1; then : else exit 1 fi fi if python < 2e-2 or \ (Curve('yprof',2,8) - Curve('yprof.ghia',1,2)).normi() > 1.7e-2: print (Curve('xprof',3,7) - Curve('xprof.ghia',1,2)).normi() print (Curve('yprof',2,8) - Curve('yprof.ghia',1,2)).normi() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/lid/stretch/0000755000175100017510000000000012250371673015154 500000000000000gerris-snapshot-131206/test/lid/stretch/xprofile0000644000175100017510000000166212250371171016645 000000000000000 -0.5 0 0 -0.49 0 0 -0.48 0 0 -0.47 0 0 -0.46 0 0 -0.45 0 0 -0.44 0 0 -0.43 0 0 -0.42 0 0 -0.41 0 0 -0.4 0 0 -0.39 0 0 -0.38 0 0 -0.37 0 0 -0.36 0 0 -0.35 0 0 -0.34 0 0 -0.33 0 0 -0.32 0 0 -0.31 0 0 -0.3 0 0 -0.29 0 0 -0.28 0 0 -0.27 0 0 -0.26 0 0 -0.25 0 0 -0.24 0 0 -0.23 0 0 -0.22 0 0 -0.21 0 0 -0.2 0 0 -0.19 0 0 -0.18 0 0 -0.17 0 0 -0.16 0 0 -0.15 0 0 -0.14 0 0 -0.13 0 0 -0.12 0 0 -0.11 0 0 -0.1 0 0 -0.09 0 0 -0.08 0 0 -0.07 0 0 -0.06 0 0 -0.05 0 0 -0.04 0 0 -0.03 0 0 -0.02 0 0 -0.01 0 0 0 0 0 0.01 0 0 0.02 0 0 0.03 0 0 0.04 0 0 0.05 0 0 0.06 0 0 0.07 0 0 0.08 0 0 0.09 0 0 0.1 0 0 0.11 0 0 0.12 0 0 0.13 0 0 0.14 0 0 0.15 0 0 0.16 0 0 0.17 0 0 0.18 0 0 0.19 0 0 0.2 0 0 0.21 0 0 0.22 0 0 0.23 0 0 0.24 0 0 0.25 0 0 0.26 0 0 0.27 0 0 0.28 0 0 0.29 0 0 0.3 0 0 0.31 0 0 0.32 0 0 0.33 0 0 0.34 0 0 0.35 0 0 0.36 0 0 0.37 0 0 0.38 0 0 0.39 0 0 0.4 0 0 0.41 0 0 0.42 0 0 0.43 0 0 0.44 0 0 0.45 0 0 0.46 0 0 0.47 0 0 0.48 0 0 0.49 0 0 0.5 0 gerris-snapshot-131206/test/lid/stretch/yprof.ghia0000644000175100017510000000047712250371171017066 00000000000000-0.500577 0.00069404 -0.43768 0.275621 -0.429602 0.290847 -0.421523 0.303994 -0.406521 0.326826 -0.343624 0.371038 -0.273803 0.330015 -0.265724 0.32307 -0.000289 0.0252893 0.304962 -0.318994 0.359781 -0.427191 0.40652 -0.515279 0.445182 -0.392034 0.45326 -0.336623 0.461339 -0.277749 0.46884 -0.214023 0.5 -6.20706e-17 gerris-snapshot-131206/test/lid/stretch/yprofile0000644000175100017510000000166212250371171016646 00000000000000-0.5 0 0 -0.49 0 0 -0.48 0 0 -0.47 0 0 -0.46 0 0 -0.45 0 0 -0.44 0 0 -0.43 0 0 -0.42 0 0 -0.41 0 0 -0.4 0 0 -0.39 0 0 -0.38 0 0 -0.37 0 0 -0.36 0 0 -0.35 0 0 -0.34 0 0 -0.33 0 0 -0.32 0 0 -0.31 0 0 -0.3 0 0 -0.29 0 0 -0.28 0 0 -0.27 0 0 -0.26 0 0 -0.25 0 0 -0.24 0 0 -0.23 0 0 -0.22 0 0 -0.21 0 0 -0.2 0 0 -0.19 0 0 -0.18 0 0 -0.17 0 0 -0.16 0 0 -0.15 0 0 -0.14 0 0 -0.13 0 0 -0.12 0 0 -0.11 0 0 -0.1 0 0 -0.09 0 0 -0.08 0 0 -0.07 0 0 -0.06 0 0 -0.05 0 0 -0.04 0 0 -0.03 0 0 -0.02 0 0 -0.01 0 0 0 0 0 0.01 0 0 0.02 0 0 0.03 0 0 0.04 0 0 0.05 0 0 0.06 0 0 0.07 0 0 0.08 0 0 0.09 0 0 0.1 0 0 0.11 0 0 0.12 0 0 0.13 0 0 0.14 0 0 0.15 0 0 0.16 0 0 0.17 0 0 0.18 0 0 0.19 0 0 0.2 0 0 0.21 0 0 0.22 0 0 0.23 0 0 0.24 0 0 0.25 0 0 0.26 0 0 0.27 0 0 0.28 0 0 0.29 0 0 0.3 0 0 0.31 0 0 0.32 0 0 0.33 0 0 0.34 0 0 0.35 0 0 0.36 0 0 0.37 0 0 0.38 0 0 0.39 0 0 0.4 0 0 0.41 0 0 0.42 0 0 0.43 0 0 0.44 0 0 0.45 0 0 0.46 0 0 0.47 0 0 0.48 0 0 0.49 0 0 0.5 0 0 gerris-snapshot-131206/test/lid/stretch/xprof.ghia0000644000175100017510000000047212250371171017060 00000000000000-0.327052 -0.383699 -0.397406 -0.297251 -0.217948 -0.27788 -0.428914 -0.222276 -0.43629 -0.201989 -0.444335 -0.181701 -0.046595 -0.106804 0.001598 -0.060949 -0.49933 -0.000882 0.118733 0.057217 0.235193 0.186849 0.352315 0.333239 0.45404 0.466401 0.461386 0.511382 0.469392 0.574884 0.476719 0.659554 0.5 0.999118 gerris-snapshot-131206/test/lid/stretch/stretch.gfs0000644000175100017510000001012312250371171017237 00000000000000# Title: Lid-driven cavity on an anisotropic mesh # # Description: # # Same test case except that the domain is made of two boxes instead # of one. The stretch metric is used to transform the rectangular # domain into a square one. # # The stationary solution obtained is illustrated on Figure \ref{velocity}. # # \begin{figure}[htbp] # \caption{\label{velocity}Norm of the velocity for the stationary regime.} # \begin{center} # \includegraphics[width=0.6\hsize]{velocity.eps} # \end{center} # \end{figure} # # Velocity profiles are generated automatically and compared to the # benchmark results of Ghia et al. \cite{ghia82} on # Figures \ref{xprof} and \ref{yprof}. # # \begin{figure}[htbp] # \caption{\label{xprof}Vertical profile of the $x$-component of the velocity on # the centerline of the box.} # \begin{center} # \includegraphics[width=0.8\hsize]{xprof.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{yprof}Horizontal profile of the $y$-component of the velocity on # the centerline of the box.} # \begin{center} # \includegraphics[width=0.8\hsize]{yprof.eps} # \end{center} # \end{figure} # # Author: S\'ebastien Delaux # Command: sh ../lid.sh stretch.gfs # Version: 100208 # Required files: xprofile yprofile xprof.ghia yprof.ghia # Running time: 10 minutes # Generated files: xprof.eps yprof.eps velocity.eps # # The simulation domain has 1 GfsBox 2 1 GfsSimulation GfsBox GfsGEdge { # we need to shift the origin of the reference box to (0,0.5) y = 0.5 } { # Stop the simulation at t = 300 if convergence has not been reached before Time { end = 300 } # Use an initial refinement of 6 levels (i.e. 2^6=64x64) Refine 6 # The mesh is stretched by a factor 0.5 (compressed) in the y direction. MetricStretch {} { sy = 0.5 } # Set a viscosity source term on the velocity vector with x-component U # The Reynolds number is Re = L*U/Nu = 1*1/1e-3 = 1000 SourceDiffusion {} U 1e-3 SourceDiffusion {} V 1e-3 # Stops the simulation if the maximum of the absolute value of the # difference between the current U field and the U field 10 timesteps # before is smaller than 1e-4. # # Stores this difference in the DU field (this can be used for # monitoring the convergence of the simulation). EventStop { istep = 10 } U 1e-4 DU OutputScalarNorm { istep = 10 } du { v = DU } # Pipes a bitmap PPM image representation of the velocity field at the end of the simulation # into the ImageMagick converter "convert" to create the # corresponding EPS file OutputPPM { start = end } { convert -colors 256 ppm:- -resize 128x128! velocity.eps } { v = Velocity } # At the end of the simulation, computes the values of the variables # at the locations defined in files xprofile, yprofile and stores the # results in files xprof, yprof OutputLocation { start = end } xprof xprofile OutputLocation { start = end } yprof yprofile OutputSimulation { start = end } end.gfs # At the end of the simulation calls the script generating the EPS # files using gnuplot and files: xprof, yprof, xprof.ghia, yprof.ghia EventScript { start = end } { gnuplot < 2.2e-2 or \ (Curve('yprof',2,8) - Curve('../yprof.ghia',1,2)).normi() > 2.1e-2: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/lid/explicit/explicit.gfs0000644000175100017510000000531712250371171017562 00000000000000# Title: Lid-driven cavity at Re=1000 (explicit scheme) # # Description: # # Same test case but with an explicit scheme for the viscous term. # # Author: St\'ephane Popinet # Command: sh lid.sh explicit.gfs # Version: 1.3.0 # Required files: lid.sh # Running time: 70 minutes # Generated files: xprof yprof xprof.eps yprof.eps velocity.eps # # The simulation domain has 1 GfsBox 1 0 GfsSimulation GfsBox GfsGEdge {} { # Stop the simulation at t = 300 if convergence has not been reached before Time { end = 300 } # Use an initial refinement of 6 levels (i.e. 2^6=64x64) Refine 6 # Set a viscosity source term on the velocity vector with x-component U # The Reynolds number is Re = L*U/Nu = 1*1/1e-3 = 1000 SourceViscosityExplicit 1e-3 # Stops the simulation if the maximum of the absolute value of the # difference between the current U field and the U field 10 timesteps # before is smaller than 1e-4. # # Stores this difference in the DU field (this can be used for # monitoring the convergence of the simulation). EventStop { istep = 10 } U 1e-4 DU OutputScalarNorm { istep = 10 } du { v = DU } # Pipes a bitmap PPM image representation of the velocity field at the end of the simulation # into the ImageMagick converter "convert" to create the # corresponding EPS file OutputPPM { start = end } { convert -colors 256 ppm:- velocity.eps } { v = Velocity } # At the end of the simulation, computes the values of the variables # at the locations defined in files xprofile, yprofile and stores the # results in files xprof, yprof OutputLocation { start = end } xprof ../xprofile OutputLocation { start = end } yprof ../yprofile # At the end of the simulation calls the script generating the EPS # files using gnuplot and files: xprof, yprof, xprof.ghia, yprof.ghia EventScript { start = end } { cat <> order$v if gfscompare2D -v sim-$level sim-$level1 $v 2>&1 | \ awk '{if ($1 == "total") print $4 " " $6 " " $8;}' >> order$v; then : else exit 1 fi echo -n "$level " >> orderf$v if gfscompare2D -f 7 -v sim-$level sim-$level1 $v 2>&1 | \ awk '{if ($1 == "total") print $4 " " $6 " " $8;}' >> orderf$v; then : else exit 1 fi done done if cat < convergence.tex; then : from check import * from sys import * from math import * for component,variable in [('x','U'),('y','V')]: print r"""\begin{table}[htbp] \caption{""" print r"\label{boundaries-" + component + "}" print r"Errors and convergence rates for the \$"+component+r"\$-component of the velocity.}" print r"""\begin{center} \begin{tabular}{||l|c|c|c||c|c|c||} \hline & \multicolumn{3}{c||}{All cells} & \multicolumn{3}{c||}{Full 128 cells} \\\ \hline & 128-256 & Rate & 256-512 & 128-256 & Rate & 256-512 \\\ \hline""" for i,name in [(2,r"\$L_1\$"),(3,r"\$L_2\$"),(4,r"\$L_\infty\$")]: a=Curve('order'+variable,1,i) b=Curve('orderf'+variable,1,i) print name, print "& %.2e & %4.2f & %.2e & %.2e & %4.2f & %.2e" % (\ a.l[0][1], log(a.l[0][1]/a.l[1][1])/log(2.), a.l[1][1], \ b.l[0][1], log(b.l[0][1]/b.l[1][1])/log(2.), b.l[1][1]), print r"\\\" a=Curve('order'+variable+'.ref',1,i) b=Curve('orderf'+variable+'.ref',1,i) print "& {\color{blue}%.2e} & {\color{blue}%4.2f} & {\color{blue}%.2e} & {\color{blue}%.2e} & {\color{blue}%4.2f} & {\color{blue}%.2e}" % (\ a.l[0][1], log(a.l[0][1]/a.l[1][1])/log(2.), a.l[1][1], \ b.l[0][1], log(b.l[0][1]/b.l[1][1])/log(2.), b.l[1][1]), print r"\\\" print r"\hline" print r"""\end{tabular} \end{center} \end{table}""" EOF else exit 1 fi if cat < 1e-6 or\ (Curve(f,1,3) - Curve(f+'.ref',1,3)).max() > 1e-6 or\ (Curve(f,1,4) - Curve(f+'.ref',1,4)).max() > 1e-6: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/boundaries/boundaries.gfs0000644000175100017510000000335512250371171017636 00000000000000# Title: Convergence of a potential flow solution # # Description: # # A test case initially presented by Almgren et al \cite{almgren97}. # Three elliptical bodies are placed in the unit square. Constant # unity inflow and outflow are specified on the left and right # boundaries. Projection is then performed to obtain a potential flow # solution around the bodies. # # Tables \ref{boundaries-x} and \ref{boundaries-y} illustrate the errors and convergence # orders obtained for both components of the velocity when the # resolution varies. Richardson extrapolation is used. The errors are # computed either on the whole domain (All cells) or on the cells # whose parents at level 7 are entirely contained in the fluid (Full # 128 cells). # # Close to second-order convergence is obtained in the bulk of the # fluid, reducing to first-order close to the boundaries. The errors # are small in all cases (with a maximum of 6\%) and comparable to # that obtained by Almgren et al using a different discretisation. # # \input{convergence.tex} # # Author: St\'ephane Popinet # Command: sh boundaries.sh boundaries.gfs # Version: 0.6.4 # Required files: boundaries.sh orderU.ref orderfU.ref orderV.ref orderfV.ref # Running time: 3 minutes # Generated files: convergence.tex # 1 0 GfsSimulation GfsBox GfsGEdge {} { Time { iend = 0 end = 1 } AdvectionParams { scheme = none } ApproxProjectionParams { tolerance = 1e-6 } Refine LEVEL Solid (ellipse (0.25, 0.25, 0.1, 0.1)) Solid (ellipse (-0.25, 0.125, 0.15, 0.1)) Solid (ellipse (0., -0.25, 0.2, 0.1)) Init {} { U = 1 } OutputSimulation { start = end } sim-LEVEL { variables = U,V,P } } GfsBox { left = Boundary { BcDirichlet U 1 } right = Boundary { BcDirichlet U 1 } } gerris-snapshot-131206/test/boundaries/orderfV.ref0000644000175100017510000000010012250371171017070 000000000000007 2.818e-04 7.563e-04 9.280e-03 8 7.034e-05 2.330e-04 3.691e-03 gerris-snapshot-131206/test/boundaries/orderfU.ref0000644000175100017510000000010012250371171017067 000000000000007 2.252e-04 4.771e-04 6.737e-03 8 5.627e-05 1.230e-04 2.794e-03 gerris-snapshot-131206/test/boundaries/orderU.ref0000644000175100017510000000010012250371171016721 000000000000007 3.722e-04 2.134e-03 6.678e-02 8 1.016e-04 8.851e-04 4.408e-02 gerris-snapshot-131206/test/boundaries.sh0000755000175100017510000000003512250371662015336 00000000000000python -u test.py boundaries gerris-snapshot-131206/test/waves/0000755000175100017510000000000012250371673014055 500000000000000gerris-snapshot-131206/test/waves/correlation.ref0000644000175100017510000000004412250371172017004 000000000000005 2.4 0.9253 6 0.1 1 7 0 1 gerris-snapshot-131206/test/waves/waves.gfs0000644000175100017510000004602312250371172015622 00000000000000# Title: Coastally-trapped waves # # Description: # # A simulation is initialised with an exact solution found by Lamb # \cite{lamb} for inertia-gravity waves in a circular, flat-bottomed # basin on an $f$-plane. # # The waves should rotate unchanged around the basin. This is a good # test of the shallow-water solver with Coriolis terms and non-trivial # coastlines. # # Figure \ref{solution} illustrates the solution obtained after three # wave periods. # # Following \cite{rutgers-waves}, Table \ref{correlation} presents the # phase error and the maximum correlation between the computed # solution and the exact solution. Note that these results are not # directly comparable to \cite{rutgers-waves}, because the timestep # used is much larger. The time-explicit codes tested in # \cite{rutgers-waves} have stronger stability requirements than # Gerris. # # \begin{figure}[htbp] # \caption{\label{solution}Surface-height after a rotation of 3 wave periods for a # resolution of 9.375 km.} # \begin{center} # \includegraphics[width=0.6\hsize]{solution.eps} # \end{center} # \end{figure} # # \begin{table}[htbp] # \caption{\label{correlation}Maximum correlation and phase error as functions of resolution.} # \begin{center} # \input{correlation.tex} # \end{center} # \end{table} # # Author: St\'ephane Popinet # Command: sh waves.sh waves.gfs # Version: 100323 # Required files: waves.sh solution.gfv correlation.ref # Generated files: correlation correlation.tex solution.eps # 1 0 GfsOcean GfsBox GfsGEdge {} { Time { end = 37.80501984 dtmax = 0.1 } PhysicalParams { g = 5.87060327757e-3 } Global { #include @link -lgsl -lgslcblas #define Ik(k,r,D) (gsl_sf_bessel_Inu ((k) - 1., (r)/(D))/(D)\ - (k)/(r)*gsl_sf_bessel_Inu ((k), (r)/(D))) static double D = 8.83906519983e-2; static double k = 3.; static double sigma = 0.4986; static double a = 1./2555510.; static double pwave (double x, double y, double angle) { double theta = atan2 (y, x) + angle*M_PI/180.; double r = sqrt (x*x + y*y); return a*cos (k*theta)*gsl_sf_bessel_Inu (k, r/D); } static double ur (double theta, double r) { return -a*D*D/5.87060327757e-3*sin (k*theta)*(sigma*Ik (k, r, D) - k/r*gsl_sf_bessel_Inu (k, r/D)); } static double vt (double theta, double r) { return a*D*D/5.87060327757e-3*cos (k*theta)*(Ik (k, r, D) - k*sigma/r*gsl_sf_bessel_Inu (k, r/D)); } static double uwave (double x, double y) { double theta = atan2 (y, x); double r = sqrt (x*x + y*y); return ur (theta, r)*cos (theta) - vt (theta, r)*sin (theta); } static double vwave (double x, double y) { double theta = atan2 (y, x); double r = sqrt (x*x + y*y); return ur (theta, r)*sin (theta) + vt (theta, r)*cos (theta); } } Init {} { P = pwave(cx, cy, 0) U = uwave(x, y) V = vwave(x, y) # Remove the line below when using gerris3D H = 1 } Refine LEVEL Solid (union (- ellipse (0, 0, 0.49975, 0.49975), z + 1.)) AdvectionParams { scheme = none } ApproxProjectionParams { tolerance = 1e-9 weighted = 0 } SourceCoriolis {} 1. EventFilter { istep = 1 } U 4 EventFilter { istep = 1 } V 4 EventScript { start = end } { echo -n "-30 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -30) unbiased = 1 } EventScript { start = end } { echo -n "-29 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -29) unbiased = 1 } EventScript { start = end } { echo -n "-28 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -28) unbiased = 1 } EventScript { start = end } { echo -n "-27 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -27) unbiased = 1 } EventScript { start = end } { echo -n "-26 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -26) unbiased = 1 } EventScript { start = end } { echo -n "-25 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -25) unbiased = 1 } EventScript { start = end } { echo -n "-24 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -24) unbiased = 1 } EventScript { start = end } { echo -n "-23 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -23) unbiased = 1 } EventScript { start = end } { echo -n "-22 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -22) unbiased = 1 } EventScript { start = end } { echo -n "-21 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -21) unbiased = 1 } EventScript { start = end } { echo -n "-20 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -20) unbiased = 1 } EventScript { start = end } { echo -n "-19 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -19) unbiased = 1 } EventScript { start = end } { echo -n "-18 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -18) unbiased = 1 } EventScript { start = end } { echo -n "-17 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -17) unbiased = 1 } EventScript { start = end } { echo -n "-16 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -16) unbiased = 1 } EventScript { start = end } { echo -n "-15 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -15) unbiased = 1 } EventScript { start = end } { echo -n "-14 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -14) unbiased = 1 } EventScript { start = end } { echo -n "-13 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -13) unbiased = 1 } EventScript { start = end } { echo -n "-12 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -12) unbiased = 1 } EventScript { start = end } { echo -n "-11 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -11) unbiased = 1 } EventScript { start = end } { echo -n "-10 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -10) unbiased = 1 } EventScript { start = end } { echo -n "-9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -9) unbiased = 1 } EventScript { start = end } { echo -n "-8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -8) unbiased = 1 } EventScript { start = end } { echo -n "-7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -7) unbiased = 1 } EventScript { start = end } { echo -n "-6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -6) unbiased = 1 } EventScript { start = end } { echo -n "-5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -5) unbiased = 1 } EventScript { start = end } { echo -n "-4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -4) unbiased = 1 } EventScript { start = end } { echo -n "-3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -3) unbiased = 1 } EventScript { start = end } { echo -n "-2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -2) unbiased = 1 } EventScript { start = end } { echo -n "-1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -1) unbiased = 1 } EventScript { start = end } { echo -n "0 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0) unbiased = 1 } EventScript { start = end } { echo -n "0.1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.1) unbiased = 1 } EventScript { start = end } { echo -n "0.2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.2) unbiased = 1 } EventScript { start = end } { echo -n "0.3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.3) unbiased = 1 } EventScript { start = end } { echo -n "0.4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.4) unbiased = 1 } EventScript { start = end } { echo -n "0.5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.5) unbiased = 1 } EventScript { start = end } { echo -n "0.6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.6) unbiased = 1 } EventScript { start = end } { echo -n "0.7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.7) unbiased = 1 } EventScript { start = end } { echo -n "0.8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.8) unbiased = 1 } EventScript { start = end } { echo -n "0.9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.9) unbiased = 1 } EventScript { start = end } { echo -n "1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1) unbiased = 1 } EventScript { start = end } { echo -n "1.1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.1) unbiased = 1 } EventScript { start = end } { echo -n "1.2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.2) unbiased = 1 } EventScript { start = end } { echo -n "1.3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.3) unbiased = 1 } EventScript { start = end } { echo -n "1.4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.4) unbiased = 1 } EventScript { start = end } { echo -n "1.5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.5) unbiased = 1 } EventScript { start = end } { echo -n "1.6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.6) unbiased = 1 } EventScript { start = end } { echo -n "1.7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.7) unbiased = 1 } EventScript { start = end } { echo -n "1.8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.8) unbiased = 1 } EventScript { start = end } { echo -n "1.9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.9) unbiased = 1 } EventScript { start = end } { echo -n "2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2) unbiased = 1 } EventScript { start = end } { echo -n "2.1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.1) unbiased = 1 } EventScript { start = end } { echo -n "2.2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.2) unbiased = 1 } EventScript { start = end } { echo -n "2.3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.3) unbiased = 1 } EventScript { start = end } { echo -n "2.4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.4) unbiased = 1 } EventScript { start = end } { echo -n "2.5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.5) unbiased = 1 } EventScript { start = end } { echo -n "2.6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.6) unbiased = 1 } EventScript { start = end } { echo -n "2.7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.7) unbiased = 1 } EventScript { start = end } { echo -n "2.8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.8) unbiased = 1 } EventScript { start = end } { echo -n "2.9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.9) unbiased = 1 } EventScript { start = end } { echo -n "3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3) unbiased = 1 } EventScript { start = end } { echo -n "3.1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.1) unbiased = 1 } EventScript { start = end } { echo -n "3.2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.2) unbiased = 1 } EventScript { start = end } { echo -n "3.3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.3) unbiased = 1 } EventScript { start = end } { echo -n "3.4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.4) unbiased = 1 } EventScript { start = end } { echo -n "3.5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.5) unbiased = 1 } EventScript { start = end } { echo -n "3.6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.6) unbiased = 1 } EventScript { start = end } { echo -n "3.7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.7) unbiased = 1 } EventScript { start = end } { echo -n "3.8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.8) unbiased = 1 } EventScript { start = end } { echo -n "3.9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.9) unbiased = 1 } EventScript { start = end } { echo -n "4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4) unbiased = 1 } EventScript { start = end } { echo -n "4.1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.1) unbiased = 1 } EventScript { start = end } { echo -n "4.2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.2) unbiased = 1 } EventScript { start = end } { echo -n "4.3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.3) unbiased = 1 } EventScript { start = end } { echo -n "4.4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.4) unbiased = 1 } EventScript { start = end } { echo -n "4.5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.5) unbiased = 1 } EventScript { start = end } { echo -n "4.6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.6) unbiased = 1 } EventScript { start = end } { echo -n "4.7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.7) unbiased = 1 } EventScript { start = end } { echo -n "4.8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.8) unbiased = 1 } EventScript { start = end } { echo -n "4.9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.9) unbiased = 1 } EventScript { start = end } { echo -n "5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 5) unbiased = 1 } EventScript { start = end } { echo -n "6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 6) unbiased = 1 } EventScript { start = end } { echo -n "7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 7) unbiased = 1 } EventScript { start = end } { echo -n "8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 8) unbiased = 1 } EventScript { start = end } { echo -n "9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 9) unbiased = 1 } EventScript { start = end } { echo -n "10 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 10) unbiased = 1 } EventScript { start = end } { echo -n "11 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 11) unbiased = 1 } EventScript { start = end } { echo -n "12 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 12) unbiased = 1 } EventScript { start = end } { echo -n "13 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 13) unbiased = 1 } EventScript { start = end } { echo -n "14 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 14) unbiased = 1 } EventScript { start = end } { echo -n "15 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 15) unbiased = 1 } EventScript { start = end } { echo -n "16 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 16) unbiased = 1 } EventScript { start = end } { echo -n "17 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 17) unbiased = 1 } EventScript { start = end } { echo -n "18 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 18) unbiased = 1 } EventScript { start = end } { echo -n "19 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 19) unbiased = 1 } EventScript { start = end } { echo -n "20 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 20) unbiased = 1 } EventScript { start = end } { echo -n "21 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 21) unbiased = 1 } EventScript { start = end } { echo -n "22 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 22) unbiased = 1 } EventScript { start = end } { echo -n "23 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 23) unbiased = 1 } EventScript { start = end } { echo -n "24 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 24) unbiased = 1 } EventScript { start = end } { echo -n "25 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 25) unbiased = 1 } EventScript { start = end } { echo -n "26 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 26) unbiased = 1 } EventScript { start = end } { echo -n "27 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 27) unbiased = 1 } EventScript { start = end } { echo -n "28 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 28) unbiased = 1 } EventScript { start = end } { echo -n "29 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 29) unbiased = 1 } EventScript { start = end } { echo -n "30 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 30) unbiased = 1 } OutputSimulation { start = end } sim-LEVEL # OutputSimulation { istep = 1 } stdout } GfsBox { # uncomment the line below when using gerris3D # front = Boundary } gerris-snapshot-131206/test/waves/solution.gfv0000644000175100017510000000101712250371172016346 00000000000000# GfsView 3D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 30 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = -0.5 } P { amin = 1 amax = 1 cmap = Jet } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = -0.5 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 16 } gerris-snapshot-131206/test/waves/waves.sh0000644000175100017510000000211712250371172015451 00000000000000if test x$donotrun != xtrue; then rm -f correlation res-* sim-* for level in 5 6 7; do if sed "s/LEVEL/$level/g" < $1 | gerris2D - | \ awk '{ print $1 " " $5 }' > res-$level && \ awk -v l=$level 'BEGIN { min1 = 0. } { if ($2 > min1) { theta = $1; min1 = $2; } } END { printf ("%d\t\t%g\t\t\t%g\n", l, theta, min1); }' < res-$level >> correlation; then : else exit 1 fi done fi echo "Save solution.eps { format = EPS }" | gfsview-batch2D sim-7 solution.gfv awk 'BEGIN { print "\\begin{tabular}{|c|c|c|}" print "\\hline Level & Maximum $C$ & Angle of max $C$ \\\\ \\hline" }{ print $1 " & " $3 " & " $2 " \\\\" }END { print "\\hline" print "\\end{tabular}" }' < correlation > correlation.tex if cat < 10.: exit(1) if (Curve('correlation',1,2) - Curve('correlation.ref',1,2)).max() > 0. or\ (Curve('correlation.ref',1,3) - Curve('correlation',1,3)).max() > 0.: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/waves/adaptive/0000755000175100017510000000000012250371673015652 500000000000000gerris-snapshot-131206/test/waves/adaptive/correlation.ref0000644000175100017510000000006012250371172020577 000000000000005 2.6 0.9221 6 0.7 0.9981 7 0.3 0.9985 gerris-snapshot-131206/test/waves/adaptive/adaptive.gfs0000644000175100017510000004501612250371172020070 00000000000000# Title: Coastally-trapped waves with adaptive refinement # # Description: # # Same test case as before but with adaptive refinement (using the # vorticity criterion). # # Figure \ref{solution} illustrates the solution obtained after three # wave periods. # # \begin{figure}[htbp] # \caption{\label{solution}Surface-height after a rotation of 3 wave # periods. The maximum resolution is 9.375 km (dark red), the minimum # resolution is 150 km (dark blue).} # \begin{center} # \includegraphics[width=0.6\hsize]{solution.eps} # \end{center} # \end{figure} # # \begin{table}[htbp] # \caption{\label{correlation}Maximum correlation and phase error as functions of resolution.} # \begin{center} # \input{correlation.tex} # \end{center} # \end{table} # # Author: St\'ephane Popinet # Command: sh ../waves.sh adaptive.gfs # Version: 100323 # Required files: solution.gfv correlation.ref # Generated files: correlation correlation.tex solution.eps # 1 0 GfsOcean GfsBox GfsGEdge {} { Time { end = 37.80501984 dtmax = 0.1 } PhysicalParams { g = 5.87060327757e-3 } Global { #include @link -lgsl -lgslcblas #define Ik(k,r,D) (gsl_sf_bessel_Inu ((k) - 1., (r)/(D))/(D)\ - (k)/(r)*gsl_sf_bessel_Inu ((k), (r)/(D))) static double D = 8.83906519983e-2; static double k = 3.; static double sigma = 0.4986; static double a = 1./2555510.; static double pwave (double x, double y, double angle) { double theta = atan2 (y, x) + angle*M_PI/180.; double r = sqrt (x*x + y*y); return a*cos (k*theta)*gsl_sf_bessel_Inu (k, r/D); } static double ur (double theta, double r) { return -a*D*D/5.87060327757e-3*sin (k*theta)*(sigma*Ik (k, r, D) - k/r*gsl_sf_bessel_Inu (k, r/D)); } static double vt (double theta, double r) { return a*D*D/5.87060327757e-3*cos (k*theta)*(Ik (k, r, D) - k*sigma/r*gsl_sf_bessel_Inu (k, r/D)); } static double uwave (double x, double y) { double theta = atan2 (y, x); double r = sqrt (x*x + y*y); return ur (theta, r)*cos (theta) - vt (theta, r)*sin (theta); } static double vwave (double x, double y) { double theta = atan2 (y, x); double r = sqrt (x*x + y*y); return ur (theta, r)*sin (theta) + vt (theta, r)*cos (theta); } } Init {} { P = pwave(cx, cy, 0) U = uwave(x, y) V = vwave(x, y) # Remove the line below when using gerris3D H = 1 } Refine LEVEL AdaptVorticity { istep = 1 } { cmax = 5e-2 maxlevel = LEVEL } Solid (union (- ellipse (0, 0, 0.49975, 0.49975), z + 1.)) AdvectionParams { scheme = none } ApproxProjectionParams { tolerance = 1e-9 weighted = 0 } SourceCoriolis {} 1. EventFilter { istep = 1 } U 4 EventFilter { istep = 1 } V 4 EventScript { start = end } { echo -n "-30 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -30) unbiased = 1 } EventScript { start = end } { echo -n "-29 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -29) unbiased = 1 } EventScript { start = end } { echo -n "-28 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -28) unbiased = 1 } EventScript { start = end } { echo -n "-27 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -27) unbiased = 1 } EventScript { start = end } { echo -n "-26 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -26) unbiased = 1 } EventScript { start = end } { echo -n "-25 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -25) unbiased = 1 } EventScript { start = end } { echo -n "-24 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -24) unbiased = 1 } EventScript { start = end } { echo -n "-23 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -23) unbiased = 1 } EventScript { start = end } { echo -n "-22 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -22) unbiased = 1 } EventScript { start = end } { echo -n "-21 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -21) unbiased = 1 } EventScript { start = end } { echo -n "-20 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -20) unbiased = 1 } EventScript { start = end } { echo -n "-19 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -19) unbiased = 1 } EventScript { start = end } { echo -n "-18 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -18) unbiased = 1 } EventScript { start = end } { echo -n "-17 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -17) unbiased = 1 } EventScript { start = end } { echo -n "-16 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -16) unbiased = 1 } EventScript { start = end } { echo -n "-15 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -15) unbiased = 1 } EventScript { start = end } { echo -n "-14 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -14) unbiased = 1 } EventScript { start = end } { echo -n "-13 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -13) unbiased = 1 } EventScript { start = end } { echo -n "-12 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -12) unbiased = 1 } EventScript { start = end } { echo -n "-11 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -11) unbiased = 1 } EventScript { start = end } { echo -n "-10 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -10) unbiased = 1 } EventScript { start = end } { echo -n "-9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -9) unbiased = 1 } EventScript { start = end } { echo -n "-8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -8) unbiased = 1 } EventScript { start = end } { echo -n "-7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -7) unbiased = 1 } EventScript { start = end } { echo -n "-6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -6) unbiased = 1 } EventScript { start = end } { echo -n "-5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -5) unbiased = 1 } EventScript { start = end } { echo -n "-4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -4) unbiased = 1 } EventScript { start = end } { echo -n "-3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -3) unbiased = 1 } EventScript { start = end } { echo -n "-2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -2) unbiased = 1 } EventScript { start = end } { echo -n "-1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, -1) unbiased = 1 } EventScript { start = end } { echo -n "0 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0) unbiased = 1 } EventScript { start = end } { echo -n "0.1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.1) unbiased = 1 } EventScript { start = end } { echo -n "0.2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.2) unbiased = 1 } EventScript { start = end } { echo -n "0.3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.3) unbiased = 1 } EventScript { start = end } { echo -n "0.4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.4) unbiased = 1 } EventScript { start = end } { echo -n "0.5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.5) unbiased = 1 } EventScript { start = end } { echo -n "0.6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.6) unbiased = 1 } EventScript { start = end } { echo -n "0.7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.7) unbiased = 1 } EventScript { start = end } { echo -n "0.8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.8) unbiased = 1 } EventScript { start = end } { echo -n "0.9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 0.9) unbiased = 1 } EventScript { start = end } { echo -n "1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1) unbiased = 1 } EventScript { start = end } { echo -n "1.1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.1) unbiased = 1 } EventScript { start = end } { echo -n "1.2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.2) unbiased = 1 } EventScript { start = end } { echo -n "1.3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.3) unbiased = 1 } EventScript { start = end } { echo -n "1.4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.4) unbiased = 1 } EventScript { start = end } { echo -n "1.5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.5) unbiased = 1 } EventScript { start = end } { echo -n "1.6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.6) unbiased = 1 } EventScript { start = end } { echo -n "1.7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.7) unbiased = 1 } EventScript { start = end } { echo -n "1.8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.8) unbiased = 1 } EventScript { start = end } { echo -n "1.9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 1.9) unbiased = 1 } EventScript { start = end } { echo -n "2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2) unbiased = 1 } EventScript { start = end } { echo -n "2.1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.1) unbiased = 1 } EventScript { start = end } { echo -n "2.2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.2) unbiased = 1 } EventScript { start = end } { echo -n "2.3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.3) unbiased = 1 } EventScript { start = end } { echo -n "2.4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.4) unbiased = 1 } EventScript { start = end } { echo -n "2.5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.5) unbiased = 1 } EventScript { start = end } { echo -n "2.6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.6) unbiased = 1 } EventScript { start = end } { echo -n "2.7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.7) unbiased = 1 } EventScript { start = end } { echo -n "2.8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.8) unbiased = 1 } EventScript { start = end } { echo -n "2.9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 2.9) unbiased = 1 } EventScript { start = end } { echo -n "3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3) unbiased = 1 } EventScript { start = end } { echo -n "3.1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.1) unbiased = 1 } EventScript { start = end } { echo -n "3.2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.2) unbiased = 1 } EventScript { start = end } { echo -n "3.3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.3) unbiased = 1 } EventScript { start = end } { echo -n "3.4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.4) unbiased = 1 } EventScript { start = end } { echo -n "3.5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.5) unbiased = 1 } EventScript { start = end } { echo -n "3.6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.6) unbiased = 1 } EventScript { start = end } { echo -n "3.7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.7) unbiased = 1 } EventScript { start = end } { echo -n "3.8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.8) unbiased = 1 } EventScript { start = end } { echo -n "3.9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 3.9) unbiased = 1 } EventScript { start = end } { echo -n "4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4) unbiased = 1 } EventScript { start = end } { echo -n "4.1 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.1) unbiased = 1 } EventScript { start = end } { echo -n "4.2 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.2) unbiased = 1 } EventScript { start = end } { echo -n "4.3 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.3) unbiased = 1 } EventScript { start = end } { echo -n "4.4 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.4) unbiased = 1 } EventScript { start = end } { echo -n "4.5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.5) unbiased = 1 } EventScript { start = end } { echo -n "4.6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.6) unbiased = 1 } EventScript { start = end } { echo -n "4.7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.7) unbiased = 1 } EventScript { start = end } { echo -n "4.8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.8) unbiased = 1 } EventScript { start = end } { echo -n "4.9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 4.9) unbiased = 1 } EventScript { start = end } { echo -n "5 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 5) unbiased = 1 } EventScript { start = end } { echo -n "6 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 6) unbiased = 1 } EventScript { start = end } { echo -n "7 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 7) unbiased = 1 } EventScript { start = end } { echo -n "8 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 8) unbiased = 1 } EventScript { start = end } { echo -n "9 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 9) unbiased = 1 } EventScript { start = end } { echo -n "10 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 10) unbiased = 1 } EventScript { start = end } { echo -n "11 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 11) unbiased = 1 } EventScript { start = end } { echo -n "12 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 12) unbiased = 1 } EventScript { start = end } { echo -n "13 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 13) unbiased = 1 } EventScript { start = end } { echo -n "14 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 14) unbiased = 1 } EventScript { start = end } { echo -n "15 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 15) unbiased = 1 } EventScript { start = end } { echo -n "16 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 16) unbiased = 1 } EventScript { start = end } { echo -n "17 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 17) unbiased = 1 } EventScript { start = end } { echo -n "18 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 18) unbiased = 1 } EventScript { start = end } { echo -n "19 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 19) unbiased = 1 } EventScript { start = end } { echo -n "20 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 20) unbiased = 1 } EventScript { start = end } { echo -n "21 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 21) unbiased = 1 } EventScript { start = end } { echo -n "22 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 22) unbiased = 1 } EventScript { start = end } { echo -n "23 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 23) unbiased = 1 } EventScript { start = end } { echo -n "24 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 24) unbiased = 1 } EventScript { start = end } { echo -n "25 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 25) unbiased = 1 } EventScript { start = end } { echo -n "26 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 26) unbiased = 1 } EventScript { start = end } { echo -n "27 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 27) unbiased = 1 } EventScript { start = end } { echo -n "28 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 28) unbiased = 1 } EventScript { start = end } { echo -n "29 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 29) unbiased = 1 } EventScript { start = end } { echo -n "30 " } OutputCorrelation { start = end } stdout { v = P } { s = pwave(cx, cy, 30) unbiased = 1 } OutputSimulation { start = end } sim-LEVEL } GfsBox { # uncomment the line below when using gerris3D # front = Boundary } gerris-snapshot-131206/test/waves/adaptive/solution.gfv0000644000175100017510000000102312250371172020140 00000000000000# GfsView 3D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 30 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = -0.5 } Level { amin = 1 amax = 1 cmap = Jet } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = -0.5 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 16 } gerris-snapshot-131206/test/reynolds/0000755000175100017510000000000012250371673014567 500000000000000gerris-snapshot-131206/test/reynolds/div5.ref0000644000175100017510000001415212250371171016050 00000000000000Divergence time: 0 first: 1.060e-15 second: 1.375e-15 infty: 3.775e-15 Divergence time: 0.025 first: 3.063e-02 second: 3.762e-02 infty: 9.014e-02 Divergence time: 0.05 first: 3.220e-02 second: 3.987e-02 infty: 9.939e-02 Divergence time: 0.075 first: 3.236e-02 second: 4.057e-02 infty: 1.046e-01 Divergence time: 0.1 first: 3.253e-02 second: 4.138e-02 infty: 1.083e-01 Divergence time: 0.125 first: 3.291e-02 second: 4.184e-02 infty: 1.111e-01 Divergence time: 0.15 first: 3.275e-02 second: 4.196e-02 infty: 1.123e-01 Divergence time: 0.175 first: 3.241e-02 second: 4.181e-02 infty: 1.138e-01 Divergence time: 0.2 first: 3.289e-02 second: 4.237e-02 infty: 1.138e-01 Divergence time: 0.225 first: 3.273e-02 second: 4.211e-02 infty: 1.142e-01 Divergence time: 0.25 first: 3.282e-02 second: 4.229e-02 infty: 1.157e-01 Divergence time: 0.275 first: 3.292e-02 second: 4.224e-02 infty: 1.156e-01 Divergence time: 0.3 first: 3.269e-02 second: 4.210e-02 infty: 1.158e-01 Divergence time: 0.325 first: 3.296e-02 second: 4.215e-02 infty: 1.154e-01 Divergence time: 0.35 first: 3.283e-02 second: 4.197e-02 infty: 1.154e-01 Divergence time: 0.375 first: 3.268e-02 second: 4.203e-02 infty: 1.149e-01 Divergence time: 0.4 first: 3.271e-02 second: 4.208e-02 infty: 1.151e-01 Divergence time: 0.425 first: 3.267e-02 second: 4.197e-02 infty: 1.157e-01 Divergence time: 0.45 first: 3.263e-02 second: 4.188e-02 infty: 1.165e-01 Divergence time: 0.475 first: 3.257e-02 second: 4.180e-02 infty: 1.171e-01 Divergence time: 0.5 first: 3.257e-02 second: 4.173e-02 infty: 1.166e-01 Divergence time: 0.525 first: 3.270e-02 second: 4.179e-02 infty: 1.165e-01 Divergence time: 0.55 first: 3.277e-02 second: 4.184e-02 infty: 1.159e-01 Divergence time: 0.575 first: 3.283e-02 second: 4.186e-02 infty: 1.147e-01 Divergence time: 0.6 first: 3.288e-02 second: 4.186e-02 infty: 1.137e-01 Divergence time: 0.625 first: 3.292e-02 second: 4.187e-02 infty: 1.145e-01 Divergence time: 0.65 first: 3.290e-02 second: 4.185e-02 infty: 1.151e-01 Divergence time: 0.675 first: 3.287e-02 second: 4.181e-02 infty: 1.159e-01 Divergence time: 0.7 first: 3.284e-02 second: 4.177e-02 infty: 1.165e-01 Divergence time: 0.725 first: 3.282e-02 second: 4.174e-02 infty: 1.169e-01 Divergence time: 0.75 first: 3.280e-02 second: 4.172e-02 infty: 1.171e-01 Divergence time: 0.775 first: 3.279e-02 second: 4.170e-02 infty: 1.173e-01 Divergence time: 0.8 first: 3.278e-02 second: 4.168e-02 infty: 1.173e-01 Divergence time: 0.825 first: 3.298e-02 second: 4.179e-02 infty: 1.174e-01 Divergence time: 0.85 first: 3.307e-02 second: 4.189e-02 infty: 1.175e-01 Divergence time: 0.875 first: 3.317e-02 second: 4.193e-02 infty: 1.175e-01 Divergence time: 0.9 first: 3.324e-02 second: 4.196e-02 infty: 1.174e-01 Divergence time: 0.925 first: 3.323e-02 second: 4.194e-02 infty: 1.173e-01 Divergence time: 0.95 first: 3.335e-02 second: 4.199e-02 infty: 1.172e-01 Divergence time: 0.975 first: 3.334e-02 second: 4.200e-02 infty: 1.170e-01 Divergence time: 1 first: 3.335e-02 second: 4.197e-02 infty: 1.169e-01 Divergence time: 1.025 first: 3.337e-02 second: 4.198e-02 infty: 1.168e-01 Divergence time: 1.05 first: 3.344e-02 second: 4.206e-02 infty: 1.167e-01 Divergence time: 1.075 first: 3.343e-02 second: 4.205e-02 infty: 1.167e-01 Divergence time: 1.1 first: 3.345e-02 second: 4.205e-02 infty: 1.166e-01 Divergence time: 1.125 first: 3.344e-02 second: 4.200e-02 infty: 1.166e-01 Divergence time: 1.15 first: 3.352e-02 second: 4.204e-02 infty: 1.166e-01 Divergence time: 1.175 first: 3.356e-02 second: 4.207e-02 infty: 1.166e-01 Divergence time: 1.2 first: 3.359e-02 second: 4.207e-02 infty: 1.167e-01 Divergence time: 1.225 first: 3.360e-02 second: 4.206e-02 infty: 1.169e-01 Divergence time: 1.25 first: 3.364e-02 second: 4.209e-02 infty: 1.170e-01 Divergence time: 1.275 first: 3.368e-02 second: 4.204e-02 infty: 1.172e-01 Divergence time: 1.3 first: 3.373e-02 second: 4.199e-02 infty: 1.173e-01 Divergence time: 1.325 first: 3.372e-02 second: 4.193e-02 infty: 1.175e-01 Divergence time: 1.35 first: 3.370e-02 second: 4.186e-02 infty: 1.176e-01 Divergence time: 1.375 first: 3.369e-02 second: 4.187e-02 infty: 1.178e-01 Divergence time: 1.4 first: 3.367e-02 second: 4.184e-02 infty: 1.179e-01 Divergence time: 1.425 first: 3.364e-02 second: 4.178e-02 infty: 1.180e-01 Divergence time: 1.45 first: 3.361e-02 second: 4.173e-02 infty: 1.180e-01 Divergence time: 1.475 first: 3.357e-02 second: 4.171e-02 infty: 1.181e-01 Divergence time: 1.5 first: 3.355e-02 second: 4.168e-02 infty: 1.181e-01 Divergence time: 1.525 first: 3.352e-02 second: 4.165e-02 infty: 1.180e-01 Divergence time: 1.55 first: 3.337e-02 second: 4.147e-02 infty: 1.181e-01 Divergence time: 1.575 first: 3.337e-02 second: 4.148e-02 infty: 1.180e-01 Divergence time: 1.6 first: 3.328e-02 second: 4.143e-02 infty: 1.179e-01 Divergence time: 1.625 first: 3.325e-02 second: 4.145e-02 infty: 1.178e-01 Divergence time: 1.65 first: 3.311e-02 second: 4.132e-02 infty: 1.176e-01 Divergence time: 1.675 first: 3.307e-02 second: 4.129e-02 infty: 1.175e-01 Divergence time: 1.7 first: 3.304e-02 second: 4.128e-02 infty: 1.173e-01 Divergence time: 1.725 first: 3.297e-02 second: 4.126e-02 infty: 1.170e-01 Divergence time: 1.75 first: 3.293e-02 second: 4.129e-02 infty: 1.168e-01 Divergence time: 1.775 first: 3.290e-02 second: 4.126e-02 infty: 1.166e-01 Divergence time: 1.8 first: 3.278e-02 second: 4.114e-02 infty: 1.165e-01 Divergence time: 1.825 first: 3.281e-02 second: 4.117e-02 infty: 1.165e-01 Divergence time: 1.85 first: 3.267e-02 second: 4.106e-02 infty: 1.165e-01 Divergence time: 1.875 first: 3.266e-02 second: 4.110e-02 infty: 1.172e-01 Divergence time: 1.9 first: 3.257e-02 second: 4.105e-02 infty: 1.174e-01 Divergence time: 1.925 first: 3.248e-02 second: 4.097e-02 infty: 1.173e-01 Divergence time: 1.95 first: 3.242e-02 second: 4.092e-02 infty: 1.172e-01 Divergence time: 1.975 first: 3.251e-02 second: 4.101e-02 infty: 1.170e-01 Divergence time: 2 first: 3.241e-02 second: 4.098e-02 infty: 1.169e-01 gerris-snapshot-131206/test/reynolds/reynolds.gfs0000644000175100017510000000554312250371171017047 00000000000000# Title: Estimation of the numerical viscosity # # Description: # # The velocity field is initialised with an exact stationary solution of # the Euler equations in a periodic 2D domain. An exact Euler solver # would not change this field, however any numerical solver will # introduce numerical dissipation which will slowly dissipate the # kinetic energy of the initial solution. By monitoring the evolution of # the kinetic energy, the dissipative properties of the numerical scheme # can be measured (see \cite{rider95} for details). # # Figures \ref{divmax} and figure \ref{divL2} illustrate the evolution # of the divergence of the velocity field with time. This is a check of # the stability of the approximate projection and should remain bounded. # # Figures \ref{kinetic} and \ref{reynolds} illustrates the evolution of # the kinetic energy and the corresponding equivalent Reynolds number as # a function of resolution. The higher the Reynolds number, the less # dissipative the scheme. # # \begin{figure}[htbp] # \caption{\label{divmax}Evolution of the maximum divergence.} # \begin{center} # \includegraphics[width=0.8\hsize]{divmax.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{divL2}Evolution of the L2 norm of the divergence.} # \begin{center} # \includegraphics[width=0.8\hsize]{divL2.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{kinetic}Evolution of the kinetic energy.} # \begin{center} # \includegraphics[width=0.8\hsize]{kinetic.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{reynolds}Equivalent Reynolds number as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{reynolds.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{accuracy}Accuracy of the solution as a function of the level of refinement.} # \begin{center} # \includegraphics[width=0.8\hsize]{accuracy.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh reynolds.sh reynolds.gfs 1 # Version: 0.6.4 # Required files: reynolds.sh div5.ref div6.ref div7.ref reynolds.ref # Running time: 3 minutes # Generated files: divmax.eps reynolds.eps divL2.eps kinetic.eps accuracy.eps # 1 2 GfsSimulation GfsBox GfsGEdge {} { Time { end = 2 } Refine LEVEL Init {} { U0 = (- cos (2.*M_PI*x)*sin (2.*M_PI*y)) V0 = (sin (2.*M_PI*x)*cos (2.*M_PI*y)) U = U0 V = V0 } ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } OutputScalarNorm { istep = 1 } divLEVEL { v = Divergence } OutputScalarSum { istep = 1 } kineticLEVEL { v = Velocity2 } OutputScalarSum { istep = 1 } stdout { v = Velocity2 } OutputErrorNorm { start = end } { awk '{ print $3,$5,$7,$9 }' > errorLEVEL.dat } { v = Velocity } { s = sqrt(U0*U0+V0*V0) v = E relative = 1 } } GfsBox {} 1 1 right 1 1 top gerris-snapshot-131206/test/reynolds/box/0000755000175100017510000000000012250371673015357 500000000000000gerris-snapshot-131206/test/reynolds/box/div5.ref0000644000175100017510000002672312250371171016647 00000000000000Divergence time: 0 first: 5.130e-02 second: 1.837e-01 infty: 1.274e+00 Divergence time: 0.0129032 first: 1.520e+00 second: 2.086e+00 infty: 3.905e+00 Divergence time: 0.0257232 first: 2.097e+00 second: 2.873e+00 infty: 4.958e+00 Divergence time: 0.0385432 first: 2.302e+00 second: 3.140e+00 infty: 5.551e+00 Divergence time: 0.0514475 first: 2.341e+00 second: 3.187e+00 infty: 5.707e+00 Divergence time: 0.0643518 first: 2.302e+00 second: 3.127e+00 infty: 5.731e+00 Divergence time: 0.0772561 first: 2.236e+00 second: 3.023e+00 infty: 5.558e+00 Divergence time: 0.0901605 first: 2.157e+00 second: 2.906e+00 infty: 5.451e+00 Divergence time: 0.103065 first: 2.071e+00 second: 2.789e+00 infty: 5.319e+00 Divergence time: 0.115969 first: 1.990e+00 second: 2.677e+00 infty: 5.179e+00 Divergence time: 0.128873 first: 1.918e+00 second: 2.573e+00 infty: 5.044e+00 Divergence time: 0.141778 first: 1.850e+00 second: 2.476e+00 infty: 4.913e+00 Divergence time: 0.154682 first: 1.790e+00 second: 2.386e+00 infty: 4.782e+00 Divergence time: 0.167586 first: 1.734e+00 second: 2.303e+00 infty: 4.657e+00 Divergence time: 0.180491 first: 1.681e+00 second: 2.226e+00 infty: 4.538e+00 Divergence time: 0.193395 first: 1.631e+00 second: 2.154e+00 infty: 4.422e+00 Divergence time: 0.206299 first: 1.581e+00 second: 2.087e+00 infty: 4.231e+00 Divergence time: 0.219204 first: 1.532e+00 second: 2.024e+00 infty: 4.103e+00 Divergence time: 0.232108 first: 1.489e+00 second: 1.963e+00 infty: 4.013e+00 Divergence time: 0.245012 first: 1.450e+00 second: 1.905e+00 infty: 3.946e+00 Divergence time: 0.257917 first: 1.415e+00 second: 1.850e+00 infty: 3.852e+00 Divergence time: 0.270821 first: 1.382e+00 second: 1.798e+00 infty: 3.770e+00 Divergence time: 0.283725 first: 1.348e+00 second: 1.747e+00 infty: 3.739e+00 Divergence time: 0.29663 first: 1.314e+00 second: 1.697e+00 infty: 3.743e+00 Divergence time: 0.309437 first: 1.276e+00 second: 1.644e+00 infty: 3.741e+00 Divergence time: 0.322244 first: 1.242e+00 second: 1.596e+00 infty: 3.780e+00 Divergence time: 0.335051 first: 1.212e+00 second: 1.551e+00 infty: 3.796e+00 Divergence time: 0.347859 first: 1.184e+00 second: 1.508e+00 infty: 3.803e+00 Divergence time: 0.360666 first: 1.155e+00 second: 1.466e+00 infty: 3.809e+00 Divergence time: 0.373574 first: 1.130e+00 second: 1.430e+00 infty: 3.781e+00 Divergence time: 0.386482 first: 1.100e+00 second: 1.392e+00 infty: 3.732e+00 Divergence time: 0.399495 first: 1.071e+00 second: 1.357e+00 infty: 3.673e+00 Divergence time: 0.412507 first: 1.039e+00 second: 1.318e+00 infty: 3.591e+00 Divergence time: 0.425519 first: 1.005e+00 second: 1.281e+00 infty: 3.489e+00 Divergence time: 0.438531 first: 9.731e-01 second: 1.242e+00 infty: 3.363e+00 Divergence time: 0.451544 first: 9.434e-01 second: 1.203e+00 infty: 3.229e+00 Divergence time: 0.464556 first: 9.158e-01 second: 1.164e+00 infty: 3.088e+00 Divergence time: 0.477459 first: 8.832e-01 second: 1.120e+00 infty: 3.046e+00 Divergence time: 0.490362 first: 8.532e-01 second: 1.079e+00 infty: 3.006e+00 Divergence time: 0.503264 first: 8.228e-01 second: 1.041e+00 infty: 2.966e+00 Divergence time: 0.516167 first: 7.929e-01 second: 1.005e+00 infty: 2.939e+00 Divergence time: 0.529183 first: 7.660e-01 second: 9.744e-01 infty: 2.933e+00 Divergence time: 0.5422 first: 7.379e-01 second: 9.427e-01 infty: 2.933e+00 Divergence time: 0.555333 first: 7.120e-01 second: 9.130e-01 infty: 2.932e+00 Divergence time: 0.568466 first: 6.857e-01 second: 8.817e-01 infty: 2.911e+00 Divergence time: 0.581721 first: 6.602e-01 second: 8.517e-01 infty: 2.727e+00 Divergence time: 0.595101 first: 6.395e-01 second: 8.267e-01 infty: 2.561e+00 Divergence time: 0.60861 first: 6.204e-01 second: 8.024e-01 infty: 2.394e+00 Divergence time: 0.622118 first: 6.007e-01 second: 7.785e-01 infty: 2.263e+00 Divergence time: 0.635627 first: 5.813e-01 second: 7.561e-01 infty: 2.227e+00 Divergence time: 0.649136 first: 5.661e-01 second: 7.341e-01 infty: 2.179e+00 Divergence time: 0.662644 first: 5.529e-01 second: 7.130e-01 infty: 2.132e+00 Divergence time: 0.676153 first: 5.439e-01 second: 6.952e-01 infty: 2.088e+00 Divergence time: 0.689662 first: 5.319e-01 second: 6.769e-01 infty: 2.048e+00 Divergence time: 0.70317 first: 5.202e-01 second: 6.590e-01 infty: 2.006e+00 Divergence time: 0.716679 first: 5.075e-01 second: 6.393e-01 infty: 1.965e+00 Divergence time: 0.730188 first: 4.970e-01 second: 6.213e-01 infty: 1.921e+00 Divergence time: 0.743696 first: 4.866e-01 second: 6.049e-01 infty: 1.873e+00 Divergence time: 0.757205 first: 4.754e-01 second: 5.898e-01 infty: 1.921e+00 Divergence time: 0.770713 first: 4.654e-01 second: 5.766e-01 infty: 1.985e+00 Divergence time: 0.784222 first: 4.541e-01 second: 5.649e-01 infty: 2.048e+00 Divergence time: 0.797883 first: 4.466e-01 second: 5.577e-01 infty: 2.097e+00 Divergence time: 0.811543 first: 4.365e-01 second: 5.489e-01 infty: 2.125e+00 Divergence time: 0.825203 first: 4.264e-01 second: 5.399e-01 infty: 2.126e+00 Divergence time: 0.838707 first: 4.154e-01 second: 5.273e-01 infty: 2.125e+00 Divergence time: 0.85221 first: 4.050e-01 second: 5.149e-01 infty: 2.122e+00 Divergence time: 0.865714 first: 3.964e-01 second: 5.036e-01 infty: 2.107e+00 Divergence time: 0.879217 first: 3.870e-01 second: 4.930e-01 infty: 2.082e+00 Divergence time: 0.89272 first: 3.771e-01 second: 4.822e-01 infty: 2.046e+00 Divergence time: 0.906224 first: 3.691e-01 second: 4.727e-01 infty: 1.979e+00 Divergence time: 0.919563 first: 3.605e-01 second: 4.608e-01 infty: 1.901e+00 Divergence time: 0.932901 first: 3.518e-01 second: 4.496e-01 infty: 1.828e+00 Divergence time: 0.94624 first: 3.429e-01 second: 4.387e-01 infty: 1.756e+00 Divergence time: 0.959579 first: 3.355e-01 second: 4.279e-01 infty: 1.681e+00 Divergence time: 0.972918 first: 3.285e-01 second: 4.172e-01 infty: 1.613e+00 Divergence time: 0.986432 first: 3.227e-01 second: 4.110e-01 infty: 1.549e+00 Divergence time: 0.999946 first: 3.161e-01 second: 4.036e-01 infty: 1.507e+00 Divergence time: 1.01346 first: 3.088e-01 second: 3.956e-01 infty: 1.392e+00 Divergence time: 1.02697 first: 3.000e-01 second: 3.872e-01 infty: 1.454e+00 Divergence time: 1.04068 first: 2.950e-01 second: 3.818e-01 infty: 1.550e+00 Divergence time: 1.05458 first: 2.893e-01 second: 3.775e-01 infty: 1.566e+00 Divergence time: 1.06869 first: 2.842e-01 second: 3.721e-01 infty: 1.441e+00 Divergence time: 1.0828 first: 2.750e-01 second: 3.645e-01 infty: 1.550e+00 Divergence time: 1.09713 first: 2.682e-01 second: 3.598e-01 infty: 1.701e+00 Divergence time: 1.11147 first: 2.621e-01 second: 3.537e-01 infty: 1.661e+00 Divergence time: 1.1258 first: 2.571e-01 second: 3.475e-01 infty: 1.430e+00 Divergence time: 1.14013 first: 2.509e-01 second: 3.429e-01 infty: 1.574e+00 Divergence time: 1.15422 first: 2.441e-01 second: 3.374e-01 infty: 1.693e+00 Divergence time: 1.16832 first: 2.405e-01 second: 3.351e-01 infty: 1.701e+00 Divergence time: 1.18242 first: 2.388e-01 second: 3.333e-01 infty: 1.588e+00 Divergence time: 1.19651 first: 2.380e-01 second: 3.326e-01 infty: 1.498e+00 Divergence time: 1.21061 first: 2.378e-01 second: 3.335e-01 infty: 1.486e+00 Divergence time: 1.22471 first: 2.354e-01 second: 3.346e-01 infty: 1.323e+00 Divergence time: 1.2388 first: 2.338e-01 second: 3.353e-01 infty: 1.531e+00 Divergence time: 1.2529 first: 2.323e-01 second: 3.350e-01 infty: 1.684e+00 Divergence time: 1.26727 first: 2.328e-01 second: 3.363e-01 infty: 1.755e+00 Divergence time: 1.28163 first: 2.316e-01 second: 3.346e-01 infty: 1.732e+00 Divergence time: 1.296 first: 2.301e-01 second: 3.317e-01 infty: 1.855e+00 Divergence time: 1.31037 first: 2.294e-01 second: 3.282e-01 infty: 1.879e+00 Divergence time: 1.32416 first: 2.233e-01 second: 3.194e-01 infty: 1.753e+00 Divergence time: 1.33741 first: 2.153e-01 second: 3.094e-01 infty: 1.539e+00 Divergence time: 1.35066 first: 2.081e-01 second: 3.033e-01 infty: 1.437e+00 Divergence time: 1.36365 first: 2.005e-01 second: 2.959e-01 infty: 1.533e+00 Divergence time: 1.37664 first: 1.952e-01 second: 2.914e-01 infty: 1.566e+00 Divergence time: 1.38962 first: 1.897e-01 second: 2.881e-01 infty: 1.523e+00 Divergence time: 1.40289 first: 1.858e-01 second: 2.866e-01 infty: 1.459e+00 Divergence time: 1.41587 first: 1.815e-01 second: 2.799e-01 infty: 1.552e+00 Divergence time: 1.42885 first: 1.775e-01 second: 2.724e-01 infty: 1.640e+00 Divergence time: 1.44183 first: 1.742e-01 second: 2.632e-01 infty: 1.699e+00 Divergence time: 1.45482 first: 1.698e-01 second: 2.535e-01 infty: 1.715e+00 Divergence time: 1.4678 first: 1.659e-01 second: 2.440e-01 infty: 1.649e+00 Divergence time: 1.48078 first: 1.620e-01 second: 2.365e-01 infty: 1.513e+00 Divergence time: 1.49409 first: 1.612e-01 second: 2.327e-01 infty: 1.334e+00 Divergence time: 1.5074 first: 1.598e-01 second: 2.274e-01 infty: 1.125e+00 Divergence time: 1.52072 first: 1.584e-01 second: 2.220e-01 infty: 1.012e+00 Divergence time: 1.53403 first: 1.550e-01 second: 2.153e-01 infty: 1.036e+00 Divergence time: 1.54774 first: 1.519e-01 second: 2.106e-01 infty: 9.428e-01 Divergence time: 1.56187 first: 1.498e-01 second: 2.060e-01 infty: 1.027e+00 Divergence time: 1.57647 first: 1.481e-01 second: 2.018e-01 infty: 1.061e+00 Divergence time: 1.5916 first: 1.457e-01 second: 1.970e-01 infty: 1.001e+00 Divergence time: 1.60672 first: 1.400e-01 second: 1.904e-01 infty: 9.824e-01 Divergence time: 1.62246 first: 1.385e-01 second: 1.870e-01 infty: 9.460e-01 Divergence time: 1.63819 first: 1.352e-01 second: 1.824e-01 infty: 9.182e-01 Divergence time: 1.65463 first: 1.323e-01 second: 1.813e-01 infty: 1.019e+00 Divergence time: 1.67108 first: 1.303e-01 second: 1.791e-01 infty: 9.975e-01 Divergence time: 1.68753 first: 1.286e-01 second: 1.765e-01 infty: 8.490e-01 Divergence time: 1.70397 first: 1.258e-01 second: 1.730e-01 infty: 8.116e-01 Divergence time: 1.72042 first: 1.229e-01 second: 1.690e-01 infty: 7.952e-01 Divergence time: 1.73686 first: 1.206e-01 second: 1.654e-01 infty: 7.542e-01 Divergence time: 1.75331 first: 1.183e-01 second: 1.622e-01 infty: 6.993e-01 Divergence time: 1.76976 first: 1.152e-01 second: 1.591e-01 infty: 7.201e-01 Divergence time: 1.7862 first: 1.133e-01 second: 1.572e-01 infty: 7.679e-01 Divergence time: 1.80265 first: 1.122e-01 second: 1.558e-01 infty: 7.994e-01 Divergence time: 1.81909 first: 1.103e-01 second: 1.540e-01 infty: 8.127e-01 Divergence time: 1.83554 first: 1.078e-01 second: 1.509e-01 infty: 8.055e-01 Divergence time: 1.85049 first: 1.015e-01 second: 1.418e-01 infty: 7.571e-01 Divergence time: 1.86544 first: 9.744e-02 second: 1.349e-01 infty: 7.124e-01 Divergence time: 1.88039 first: 9.368e-02 second: 1.296e-01 infty: 6.802e-01 Divergence time: 1.89534 first: 9.084e-02 second: 1.255e-01 infty: 7.013e-01 Divergence time: 1.91029 first: 8.853e-02 second: 1.228e-01 infty: 7.003e-01 Divergence time: 1.92525 first: 8.642e-02 second: 1.205e-01 infty: 6.844e-01 Divergence time: 1.9402 first: 8.481e-02 second: 1.181e-01 infty: 6.529e-01 Divergence time: 1.95515 first: 8.292e-02 second: 1.150e-01 infty: 6.119e-01 Divergence time: 1.9701 first: 8.068e-02 second: 1.113e-01 infty: 5.623e-01 Divergence time: 1.98505 first: 7.845e-02 second: 1.081e-01 infty: 5.026e-01 Divergence time: 2 first: 7.706e-02 second: 1.057e-01 infty: 5.139e-01 gerris-snapshot-131206/test/reynolds/box/reynolds.ref0000644000175100017510000000003612250371171017624 000000000000005 3287.69 6 12767.3 7 67250.4 gerris-snapshot-131206/test/reynolds/box/box.gfs0000644000175100017510000000417012250371171016563 00000000000000# Title: Estimation of the numerical viscosity with refined box # # Description: # # Same as the previous test but with a refined box in the middle and four # modes of the exact Euler solution. # # \begin{figure}[htbp] # \caption{\label{divmax}Evolution of the maximum divergence.} # \begin{center} # \includegraphics[width=0.8\hsize]{divmax.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{divL2}Evolution of the L2 norm of the divergence.} # \begin{center} # \includegraphics[width=0.8\hsize]{divL2.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{kinetic}Evolution of the kinetic energy.} # \begin{center} # \includegraphics[width=0.8\hsize]{kinetic.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{reynolds}Equivalent Reynolds number as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{reynolds.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{accuracy}Accuracy of the solution as a function of the level of refinement.} # \begin{center} # \includegraphics[width=0.8\hsize]{accuracy.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../reynolds.sh box.gfs 4 # Version: 0.6.4 # Required files: ../reynolds.sh div5.ref div6.ref div7.ref reynolds.ref # Running time: 3 minutes # Generated files: divmax.eps reynolds.eps divL2.eps kinetic.eps accuracy.eps # 1 2 GfsSimulation GfsBox GfsGEdge {} { Time { end = 2 } Refine (x > 0.25 || x < -0.25 || y > 0.25 || y < -0.25 ? LEVEL : LEVEL + 1) Init {} { U0 = (- cos (8.*M_PI*x)*sin (8.*M_PI*y)) V0 = (sin (8.*M_PI*x)*cos (8.*M_PI*y)) U = U0 V = V0 } ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } OutputScalarNorm { istep = 1 } divLEVEL { v = Divergence } OutputScalarSum { istep = 1 } kineticLEVEL { v = Velocity2 } OutputScalarSum { istep = 1 } stdout { v = Velocity2 } OutputErrorNorm { start = end } { awk '{ print $3,$5,$7,$9 }' > errorLEVEL.dat } { v = Velocity } { s = sqrt(U0*U0+V0*V0) v = E relative = 1 } } GfsBox {} 1 1 right 1 1 top gerris-snapshot-131206/test/reynolds/box/div6.ref0000644000175100017510000007161512250371171016650 00000000000000Divergence time: 0 first: 1.415e-02 second: 7.144e-02 infty: 6.947e-01 Divergence time: 0.00628931 first: 3.477e-01 second: 4.569e-01 infty: 1.086e+00 Divergence time: 0.0125786 first: 3.928e-01 second: 5.197e-01 infty: 1.310e+00 Divergence time: 0.0188679 first: 3.983e-01 second: 5.294e-01 infty: 1.395e+00 Divergence time: 0.0251572 first: 3.992e-01 second: 5.314e-01 infty: 1.436e+00 Divergence time: 0.0314465 first: 3.995e-01 second: 5.319e-01 infty: 1.474e+00 Divergence time: 0.0377358 first: 4.000e-01 second: 5.320e-01 infty: 1.492e+00 Divergence time: 0.0440252 first: 4.004e-01 second: 5.318e-01 infty: 1.513e+00 Divergence time: 0.0503145 first: 4.002e-01 second: 5.314e-01 infty: 1.522e+00 Divergence time: 0.0566038 first: 3.999e-01 second: 5.307e-01 infty: 1.538e+00 Divergence time: 0.0628931 first: 3.994e-01 second: 5.300e-01 infty: 1.535e+00 Divergence time: 0.0691824 first: 3.992e-01 second: 5.294e-01 infty: 1.532e+00 Divergence time: 0.0754717 first: 3.991e-01 second: 5.287e-01 infty: 1.531e+00 Divergence time: 0.081761 first: 3.991e-01 second: 5.281e-01 infty: 1.531e+00 Divergence time: 0.0880503 first: 3.992e-01 second: 5.275e-01 infty: 1.531e+00 Divergence time: 0.0943396 first: 3.994e-01 second: 5.269e-01 infty: 1.520e+00 Divergence time: 0.100629 first: 3.994e-01 second: 5.263e-01 infty: 1.520e+00 Divergence time: 0.106918 first: 3.998e-01 second: 5.258e-01 infty: 1.522e+00 Divergence time: 0.113208 first: 3.999e-01 second: 5.253e-01 infty: 1.524e+00 Divergence time: 0.119497 first: 3.998e-01 second: 5.247e-01 infty: 1.529e+00 Divergence time: 0.125786 first: 3.997e-01 second: 5.241e-01 infty: 1.534e+00 Divergence time: 0.132075 first: 3.995e-01 second: 5.235e-01 infty: 1.541e+00 Divergence time: 0.138365 first: 3.994e-01 second: 5.229e-01 infty: 1.547e+00 Divergence time: 0.144654 first: 3.991e-01 second: 5.223e-01 infty: 1.552e+00 Divergence time: 0.150943 first: 3.989e-01 second: 5.216e-01 infty: 1.556e+00 Divergence time: 0.157233 first: 3.988e-01 second: 5.210e-01 infty: 1.561e+00 Divergence time: 0.163522 first: 3.987e-01 second: 5.204e-01 infty: 1.563e+00 Divergence time: 0.169811 first: 3.986e-01 second: 5.198e-01 infty: 1.566e+00 Divergence time: 0.176101 first: 3.982e-01 second: 5.191e-01 infty: 1.568e+00 Divergence time: 0.18239 first: 3.978e-01 second: 5.184e-01 infty: 1.570e+00 Divergence time: 0.188679 first: 3.977e-01 second: 5.177e-01 infty: 1.572e+00 Divergence time: 0.194969 first: 3.974e-01 second: 5.170e-01 infty: 1.574e+00 Divergence time: 0.201258 first: 3.973e-01 second: 5.163e-01 infty: 1.572e+00 Divergence time: 0.207547 first: 3.969e-01 second: 5.156e-01 infty: 1.573e+00 Divergence time: 0.213836 first: 3.965e-01 second: 5.148e-01 infty: 1.577e+00 Divergence time: 0.220126 first: 3.962e-01 second: 5.142e-01 infty: 1.583e+00 Divergence time: 0.226393 first: 3.948e-01 second: 5.121e-01 infty: 1.585e+00 Divergence time: 0.23266 first: 3.943e-01 second: 5.111e-01 infty: 1.590e+00 Divergence time: 0.238927 first: 3.936e-01 second: 5.103e-01 infty: 1.595e+00 Divergence time: 0.245217 first: 3.941e-01 second: 5.109e-01 infty: 1.605e+00 Divergence time: 0.251506 first: 3.938e-01 second: 5.103e-01 infty: 1.611e+00 Divergence time: 0.257796 first: 3.933e-01 second: 5.096e-01 infty: 1.615e+00 Divergence time: 0.264085 first: 3.925e-01 second: 5.087e-01 infty: 1.619e+00 Divergence time: 0.270375 first: 3.919e-01 second: 5.078e-01 infty: 1.623e+00 Divergence time: 0.276665 first: 3.912e-01 second: 5.070e-01 infty: 1.626e+00 Divergence time: 0.282954 first: 3.905e-01 second: 5.061e-01 infty: 1.639e+00 Divergence time: 0.289244 first: 3.899e-01 second: 5.053e-01 infty: 1.648e+00 Divergence time: 0.295533 first: 3.891e-01 second: 5.044e-01 infty: 1.654e+00 Divergence time: 0.301823 first: 3.884e-01 second: 5.035e-01 infty: 1.657e+00 Divergence time: 0.308112 first: 3.878e-01 second: 5.026e-01 infty: 1.658e+00 Divergence time: 0.314402 first: 3.872e-01 second: 5.018e-01 infty: 1.659e+00 Divergence time: 0.320691 first: 3.865e-01 second: 5.009e-01 infty: 1.658e+00 Divergence time: 0.326981 first: 3.859e-01 second: 5.000e-01 infty: 1.657e+00 Divergence time: 0.33327 first: 3.852e-01 second: 4.991e-01 infty: 1.664e+00 Divergence time: 0.33956 first: 3.846e-01 second: 4.982e-01 infty: 1.672e+00 Divergence time: 0.34585 first: 3.840e-01 second: 4.973e-01 infty: 1.675e+00 Divergence time: 0.352139 first: 3.834e-01 second: 4.965e-01 infty: 1.675e+00 Divergence time: 0.358429 first: 3.827e-01 second: 4.956e-01 infty: 1.673e+00 Divergence time: 0.364718 first: 3.821e-01 second: 4.947e-01 infty: 1.671e+00 Divergence time: 0.371008 first: 3.815e-01 second: 4.939e-01 infty: 1.667e+00 Divergence time: 0.377297 first: 3.809e-01 second: 4.930e-01 infty: 1.685e+00 Divergence time: 0.383563 first: 3.790e-01 second: 4.906e-01 infty: 1.703e+00 Divergence time: 0.389828 first: 3.782e-01 second: 4.894e-01 infty: 1.716e+00 Divergence time: 0.396093 first: 3.774e-01 second: 4.885e-01 infty: 1.725e+00 Divergence time: 0.402358 first: 3.768e-01 second: 4.876e-01 infty: 1.730e+00 Divergence time: 0.408624 first: 3.759e-01 second: 4.866e-01 infty: 1.731e+00 Divergence time: 0.414889 first: 3.752e-01 second: 4.857e-01 infty: 1.730e+00 Divergence time: 0.421154 first: 3.743e-01 second: 4.847e-01 infty: 1.728e+00 Divergence time: 0.427419 first: 3.735e-01 second: 4.838e-01 infty: 1.724e+00 Divergence time: 0.433685 first: 3.728e-01 second: 4.828e-01 infty: 1.717e+00 Divergence time: 0.43995 first: 3.719e-01 second: 4.818e-01 infty: 1.711e+00 Divergence time: 0.446215 first: 3.710e-01 second: 4.807e-01 infty: 1.625e+00 Divergence time: 0.45248 first: 3.702e-01 second: 4.796e-01 infty: 1.605e+00 Divergence time: 0.458746 first: 3.694e-01 second: 4.786e-01 infty: 1.613e+00 Divergence time: 0.464986 first: 3.675e-01 second: 4.761e-01 infty: 1.611e+00 Divergence time: 0.471225 first: 3.665e-01 second: 4.748e-01 infty: 1.596e+00 Divergence time: 0.477465 first: 3.657e-01 second: 4.738e-01 infty: 1.597e+00 Divergence time: 0.483705 first: 3.648e-01 second: 4.727e-01 infty: 1.600e+00 Divergence time: 0.489945 first: 3.638e-01 second: 4.716e-01 infty: 1.606e+00 Divergence time: 0.496185 first: 3.629e-01 second: 4.706e-01 infty: 1.610e+00 Divergence time: 0.502425 first: 3.620e-01 second: 4.695e-01 infty: 1.613e+00 Divergence time: 0.508639 first: 3.600e-01 second: 4.669e-01 infty: 1.610e+00 Divergence time: 0.514853 first: 3.589e-01 second: 4.654e-01 infty: 1.601e+00 Divergence time: 0.521067 first: 3.580e-01 second: 4.642e-01 infty: 1.608e+00 Divergence time: 0.527281 first: 3.572e-01 second: 4.630e-01 infty: 1.610e+00 Divergence time: 0.533495 first: 3.565e-01 second: 4.620e-01 infty: 1.611e+00 Divergence time: 0.539709 first: 3.558e-01 second: 4.609e-01 infty: 1.612e+00 Divergence time: 0.545923 first: 3.552e-01 second: 4.598e-01 infty: 1.614e+00 Divergence time: 0.552111 first: 3.531e-01 second: 4.571e-01 infty: 1.611e+00 Divergence time: 0.558298 first: 3.520e-01 second: 4.557e-01 infty: 1.610e+00 Divergence time: 0.564486 first: 3.511e-01 second: 4.545e-01 infty: 1.608e+00 Divergence time: 0.570673 first: 3.503e-01 second: 4.533e-01 infty: 1.605e+00 Divergence time: 0.576861 first: 3.493e-01 second: 4.520e-01 infty: 1.601e+00 Divergence time: 0.583022 first: 3.472e-01 second: 4.493e-01 infty: 1.590e+00 Divergence time: 0.589182 first: 3.460e-01 second: 4.479e-01 infty: 1.583e+00 Divergence time: 0.595343 first: 3.449e-01 second: 4.466e-01 infty: 1.563e+00 Divergence time: 0.601504 first: 3.438e-01 second: 4.453e-01 infty: 1.564e+00 Divergence time: 0.607665 first: 3.427e-01 second: 4.441e-01 infty: 1.570e+00 Divergence time: 0.613798 first: 3.403e-01 second: 4.413e-01 infty: 1.571e+00 Divergence time: 0.619932 first: 3.388e-01 second: 4.397e-01 infty: 1.583e+00 Divergence time: 0.626066 first: 3.374e-01 second: 4.384e-01 infty: 1.602e+00 Divergence time: 0.632199 first: 3.361e-01 second: 4.370e-01 infty: 1.634e+00 Divergence time: 0.638305 first: 3.337e-01 second: 4.341e-01 infty: 1.635e+00 Divergence time: 0.644412 first: 3.323e-01 second: 4.326e-01 infty: 1.649e+00 Divergence time: 0.650491 first: 3.301e-01 second: 4.296e-01 infty: 1.660e+00 Divergence time: 0.656569 first: 3.289e-01 second: 4.280e-01 infty: 1.671e+00 Divergence time: 0.662621 first: 3.265e-01 second: 4.251e-01 infty: 1.673e+00 Divergence time: 0.668672 first: 3.253e-01 second: 4.235e-01 infty: 1.674e+00 Divergence time: 0.674697 first: 3.232e-01 second: 4.205e-01 infty: 1.666e+00 Divergence time: 0.680721 first: 3.221e-01 second: 4.188e-01 infty: 1.666e+00 Divergence time: 0.686717 first: 3.200e-01 second: 4.158e-01 infty: 1.659e+00 Divergence time: 0.692687 first: 3.178e-01 second: 4.127e-01 infty: 1.675e+00 Divergence time: 0.698656 first: 3.166e-01 second: 4.110e-01 infty: 1.691e+00 Divergence time: 0.704599 first: 3.143e-01 second: 4.080e-01 infty: 1.698e+00 Divergence time: 0.710541 first: 3.131e-01 second: 4.063e-01 infty: 1.708e+00 Divergence time: 0.716456 first: 3.108e-01 second: 4.034e-01 infty: 1.717e+00 Divergence time: 0.722371 first: 3.094e-01 second: 4.016e-01 infty: 1.726e+00 Divergence time: 0.728258 first: 3.072e-01 second: 3.987e-01 infty: 1.728e+00 Divergence time: 0.734146 first: 3.059e-01 second: 3.970e-01 infty: 1.735e+00 Divergence time: 0.740006 first: 3.037e-01 second: 3.941e-01 infty: 1.737e+00 Divergence time: 0.74584 first: 3.012e-01 second: 3.910e-01 infty: 1.719e+00 Divergence time: 0.751646 first: 2.987e-01 second: 3.879e-01 infty: 1.707e+00 Divergence time: 0.757452 first: 2.973e-01 second: 3.863e-01 infty: 1.704e+00 Divergence time: 0.763232 first: 2.948e-01 second: 3.835e-01 infty: 1.699e+00 Divergence time: 0.768984 first: 2.923e-01 second: 3.806e-01 infty: 1.711e+00 Divergence time: 0.77471 first: 2.899e-01 second: 3.778e-01 infty: 1.720e+00 Divergence time: 0.780409 first: 2.874e-01 second: 3.749e-01 infty: 1.720e+00 Divergence time: 0.786108 first: 2.860e-01 second: 3.735e-01 infty: 1.717e+00 Divergence time: 0.79178 first: 2.837e-01 second: 3.709e-01 infty: 1.704e+00 Divergence time: 0.797426 first: 2.813e-01 second: 3.681e-01 infty: 1.686e+00 Divergence time: 0.803046 first: 2.790e-01 second: 3.653e-01 infty: 1.660e+00 Divergence time: 0.808665 first: 2.776e-01 second: 3.639e-01 infty: 1.630e+00 Divergence time: 0.814258 first: 2.755e-01 second: 3.613e-01 infty: 1.615e+00 Divergence time: 0.819825 first: 2.733e-01 second: 3.587e-01 infty: 1.632e+00 Divergence time: 0.825392 first: 2.721e-01 second: 3.573e-01 infty: 1.637e+00 Divergence time: 0.830959 first: 2.708e-01 second: 3.560e-01 infty: 1.634e+00 Divergence time: 0.836526 first: 2.697e-01 second: 3.549e-01 infty: 1.623e+00 Divergence time: 0.842092 first: 2.687e-01 second: 3.537e-01 infty: 1.612e+00 Divergence time: 0.847659 first: 2.676e-01 second: 3.526e-01 infty: 1.597e+00 Divergence time: 0.853226 first: 2.665e-01 second: 3.514e-01 infty: 1.576e+00 Divergence time: 0.858793 first: 2.653e-01 second: 3.503e-01 infty: 1.554e+00 Divergence time: 0.864387 first: 2.652e-01 second: 3.504e-01 infty: 1.566e+00 Divergence time: 0.869981 first: 2.642e-01 second: 3.494e-01 infty: 1.582e+00 Divergence time: 0.875603 first: 2.640e-01 second: 3.494e-01 infty: 1.592e+00 Divergence time: 0.881225 first: 2.630e-01 second: 3.484e-01 infty: 1.611e+00 Divergence time: 0.886876 first: 2.626e-01 second: 3.484e-01 infty: 1.642e+00 Divergence time: 0.892526 first: 2.614e-01 second: 3.472e-01 infty: 1.662e+00 Divergence time: 0.898205 first: 2.610e-01 second: 3.471e-01 infty: 1.670e+00 Divergence time: 0.903885 first: 2.598e-01 second: 3.459e-01 infty: 1.659e+00 Divergence time: 0.909594 first: 2.594e-01 second: 3.457e-01 infty: 1.633e+00 Divergence time: 0.915333 first: 2.593e-01 second: 3.458e-01 infty: 1.594e+00 Divergence time: 0.921072 first: 2.582e-01 second: 3.445e-01 infty: 1.595e+00 Divergence time: 0.926841 first: 2.579e-01 second: 3.443e-01 infty: 1.603e+00 Divergence time: 0.932642 first: 2.578e-01 second: 3.442e-01 infty: 1.636e+00 Divergence time: 0.938475 first: 2.576e-01 second: 3.440e-01 infty: 1.681e+00 Divergence time: 0.944307 first: 2.563e-01 second: 3.423e-01 infty: 1.710e+00 Divergence time: 0.950172 first: 2.557e-01 second: 3.418e-01 infty: 1.728e+00 Divergence time: 0.95607 first: 2.553e-01 second: 3.414e-01 infty: 1.734e+00 Divergence time: 0.961968 first: 2.538e-01 second: 3.397e-01 infty: 1.746e+00 Divergence time: 0.967833 first: 2.512e-01 second: 3.363e-01 infty: 1.785e+00 Divergence time: 0.973631 first: 2.473e-01 second: 3.313e-01 infty: 1.784e+00 Divergence time: 0.979365 first: 2.431e-01 second: 3.262e-01 infty: 1.760e+00 Divergence time: 0.985067 first: 2.398e-01 second: 3.222e-01 infty: 1.728e+00 Divergence time: 0.990706 first: 2.360e-01 second: 3.173e-01 infty: 1.687e+00 Divergence time: 0.996282 first: 2.324e-01 second: 3.126e-01 infty: 1.658e+00 Divergence time: 1.00183 first: 2.295e-01 second: 3.092e-01 infty: 1.649e+00 Divergence time: 1.00731 first: 2.261e-01 second: 3.050e-01 infty: 1.627e+00 Divergence time: 1.01277 first: 2.235e-01 second: 3.018e-01 infty: 1.593e+00 Divergence time: 1.01819 first: 2.211e-01 second: 2.990e-01 infty: 1.547e+00 Divergence time: 1.02359 first: 2.187e-01 second: 2.962e-01 infty: 1.489e+00 Divergence time: 1.02898 first: 2.173e-01 second: 2.946e-01 infty: 1.500e+00 Divergence time: 1.03434 first: 2.156e-01 second: 2.921e-01 infty: 1.506e+00 Divergence time: 1.03971 first: 2.148e-01 second: 2.905e-01 infty: 1.502e+00 Divergence time: 1.04507 first: 2.139e-01 second: 2.890e-01 infty: 1.501e+00 Divergence time: 1.05044 first: 2.131e-01 second: 2.878e-01 infty: 1.464e+00 Divergence time: 1.0558 first: 2.121e-01 second: 2.867e-01 infty: 1.432e+00 Divergence time: 1.0612 first: 2.120e-01 second: 2.869e-01 infty: 1.453e+00 Divergence time: 1.06659 first: 2.111e-01 second: 2.863e-01 infty: 1.465e+00 Divergence time: 1.07196 first: 2.095e-01 second: 2.846e-01 infty: 1.465e+00 Divergence time: 1.07732 first: 2.089e-01 second: 2.836e-01 infty: 1.460e+00 Divergence time: 1.08269 first: 2.083e-01 second: 2.830e-01 infty: 1.452e+00 Divergence time: 1.08802 first: 2.067e-01 second: 2.814e-01 infty: 1.434e+00 Divergence time: 1.09332 first: 2.049e-01 second: 2.796e-01 infty: 1.440e+00 Divergence time: 1.09856 first: 2.022e-01 second: 2.768e-01 infty: 1.461e+00 Divergence time: 1.10377 first: 2.006e-01 second: 2.750e-01 infty: 1.479e+00 Divergence time: 1.10895 first: 1.992e-01 second: 2.735e-01 infty: 1.492e+00 Divergence time: 1.11411 first: 1.983e-01 second: 2.723e-01 infty: 1.501e+00 Divergence time: 1.11923 first: 1.974e-01 second: 2.712e-01 infty: 1.506e+00 Divergence time: 1.12432 first: 1.966e-01 second: 2.705e-01 infty: 1.504e+00 Divergence time: 1.12935 first: 1.950e-01 second: 2.690e-01 infty: 1.495e+00 Divergence time: 1.13433 first: 1.933e-01 second: 2.676e-01 infty: 1.478e+00 Divergence time: 1.13927 first: 1.922e-01 second: 2.669e-01 infty: 1.486e+00 Divergence time: 1.14416 first: 1.907e-01 second: 2.657e-01 infty: 1.550e+00 Divergence time: 1.149 first: 1.890e-01 second: 2.643e-01 infty: 1.667e+00 Divergence time: 1.15381 first: 1.879e-01 second: 2.639e-01 infty: 1.770e+00 Divergence time: 1.15856 first: 1.861e-01 second: 2.629e-01 infty: 1.863e+00 Divergence time: 1.16329 first: 1.847e-01 second: 2.623e-01 infty: 1.929e+00 Divergence time: 1.16799 first: 1.835e-01 second: 2.616e-01 infty: 1.930e+00 Divergence time: 1.17266 first: 1.824e-01 second: 2.606e-01 infty: 1.907e+00 Divergence time: 1.17728 first: 1.808e-01 second: 2.589e-01 infty: 1.861e+00 Divergence time: 1.18188 first: 1.793e-01 second: 2.577e-01 infty: 1.801e+00 Divergence time: 1.18645 first: 1.779e-01 second: 2.564e-01 infty: 1.733e+00 Divergence time: 1.19102 first: 1.773e-01 second: 2.558e-01 infty: 1.663e+00 Divergence time: 1.19557 first: 1.761e-01 second: 2.544e-01 infty: 1.606e+00 Divergence time: 1.20008 first: 1.745e-01 second: 2.527e-01 infty: 1.612e+00 Divergence time: 1.20458 first: 1.730e-01 second: 2.508e-01 infty: 1.627e+00 Divergence time: 1.20905 first: 1.714e-01 second: 2.489e-01 infty: 1.714e+00 Divergence time: 1.21352 first: 1.704e-01 second: 2.477e-01 infty: 1.814e+00 Divergence time: 1.21796 first: 1.693e-01 second: 2.463e-01 infty: 1.860e+00 Divergence time: 1.22238 first: 1.681e-01 second: 2.447e-01 infty: 1.889e+00 Divergence time: 1.2268 first: 1.672e-01 second: 2.439e-01 infty: 1.908e+00 Divergence time: 1.23119 first: 1.659e-01 second: 2.426e-01 infty: 1.912e+00 Divergence time: 1.23556 first: 1.647e-01 second: 2.412e-01 infty: 1.913e+00 Divergence time: 1.23993 first: 1.640e-01 second: 2.405e-01 infty: 1.885e+00 Divergence time: 1.24427 first: 1.629e-01 second: 2.392e-01 infty: 1.845e+00 Divergence time: 1.24861 first: 1.624e-01 second: 2.388e-01 infty: 1.794e+00 Divergence time: 1.25293 first: 1.615e-01 second: 2.379e-01 infty: 1.731e+00 Divergence time: 1.25722 first: 1.604e-01 second: 2.366e-01 infty: 1.677e+00 Divergence time: 1.26152 first: 1.596e-01 second: 2.361e-01 infty: 1.684e+00 Divergence time: 1.26579 first: 1.582e-01 second: 2.349e-01 infty: 1.679e+00 Divergence time: 1.27005 first: 1.571e-01 second: 2.340e-01 infty: 1.672e+00 Divergence time: 1.2743 first: 1.559e-01 second: 2.328e-01 infty: 1.675e+00 Divergence time: 1.27854 first: 1.552e-01 second: 2.321e-01 infty: 1.665e+00 Divergence time: 1.28279 first: 1.546e-01 second: 2.313e-01 infty: 1.644e+00 Divergence time: 1.28703 first: 1.542e-01 second: 2.307e-01 infty: 1.619e+00 Divergence time: 1.29127 first: 1.536e-01 second: 2.301e-01 infty: 1.613e+00 Divergence time: 1.29554 first: 1.534e-01 second: 2.302e-01 infty: 1.727e+00 Divergence time: 1.29984 first: 1.536e-01 second: 2.305e-01 infty: 1.909e+00 Divergence time: 1.30416 first: 1.540e-01 second: 2.311e-01 infty: 2.053e+00 Divergence time: 1.30851 first: 1.545e-01 second: 2.318e-01 infty: 2.093e+00 Divergence time: 1.31291 first: 1.554e-01 second: 2.329e-01 infty: 2.032e+00 Divergence time: 1.31735 first: 1.557e-01 second: 2.336e-01 infty: 1.945e+00 Divergence time: 1.32184 first: 1.564e-01 second: 2.349e-01 infty: 1.999e+00 Divergence time: 1.32633 first: 1.559e-01 second: 2.347e-01 infty: 2.034e+00 Divergence time: 1.33082 first: 1.553e-01 second: 2.337e-01 infty: 2.049e+00 Divergence time: 1.33534 first: 1.548e-01 second: 2.333e-01 infty: 2.076e+00 Divergence time: 1.33993 first: 1.547e-01 second: 2.336e-01 infty: 2.078e+00 Divergence time: 1.34451 first: 1.539e-01 second: 2.327e-01 infty: 2.048e+00 Divergence time: 1.34906 first: 1.526e-01 second: 2.308e-01 infty: 1.994e+00 Divergence time: 1.35358 first: 1.507e-01 second: 2.284e-01 infty: 1.927e+00 Divergence time: 1.35807 first: 1.489e-01 second: 2.262e-01 infty: 1.850e+00 Divergence time: 1.36253 first: 1.471e-01 second: 2.241e-01 infty: 1.773e+00 Divergence time: 1.36696 first: 1.457e-01 second: 2.223e-01 infty: 1.770e+00 Divergence time: 1.37135 first: 1.442e-01 second: 2.200e-01 infty: 1.861e+00 Divergence time: 1.37575 first: 1.433e-01 second: 2.186e-01 infty: 1.975e+00 Divergence time: 1.38011 first: 1.421e-01 second: 2.170e-01 infty: 1.974e+00 Divergence time: 1.38445 first: 1.410e-01 second: 2.155e-01 infty: 2.010e+00 Divergence time: 1.38875 first: 1.395e-01 second: 2.135e-01 infty: 2.017e+00 Divergence time: 1.39306 first: 1.385e-01 second: 2.126e-01 infty: 2.003e+00 Divergence time: 1.39733 first: 1.373e-01 second: 2.113e-01 infty: 1.963e+00 Divergence time: 1.40161 first: 1.364e-01 second: 2.104e-01 infty: 1.904e+00 Divergence time: 1.40585 first: 1.353e-01 second: 2.089e-01 infty: 1.818e+00 Divergence time: 1.41006 first: 1.340e-01 second: 2.073e-01 infty: 1.944e+00 Divergence time: 1.41425 first: 1.327e-01 second: 2.056e-01 infty: 2.078e+00 Divergence time: 1.4184 first: 1.314e-01 second: 2.038e-01 infty: 2.217e+00 Divergence time: 1.42253 first: 1.300e-01 second: 2.021e-01 infty: 2.341e+00 Divergence time: 1.42665 first: 1.291e-01 second: 2.010e-01 infty: 2.474e+00 Divergence time: 1.43075 first: 1.279e-01 second: 1.995e-01 infty: 2.594e+00 Divergence time: 1.43484 first: 1.271e-01 second: 1.985e-01 infty: 2.709e+00 Divergence time: 1.43894 first: 1.264e-01 second: 1.977e-01 infty: 2.784e+00 Divergence time: 1.44306 first: 1.263e-01 second: 1.969e-01 infty: 2.826e+00 Divergence time: 1.44722 first: 1.263e-01 second: 1.966e-01 infty: 2.825e+00 Divergence time: 1.45141 first: 1.264e-01 second: 1.966e-01 infty: 2.759e+00 Divergence time: 1.45563 first: 1.263e-01 second: 1.965e-01 infty: 2.617e+00 Divergence time: 1.45985 first: 1.256e-01 second: 1.955e-01 infty: 2.415e+00 Divergence time: 1.46407 first: 1.247e-01 second: 1.941e-01 infty: 2.159e+00 Divergence time: 1.46829 first: 1.240e-01 second: 1.928e-01 infty: 2.031e+00 Divergence time: 1.47254 first: 1.238e-01 second: 1.923e-01 infty: 2.265e+00 Divergence time: 1.47686 first: 1.244e-01 second: 1.928e-01 infty: 2.431e+00 Divergence time: 1.48122 first: 1.247e-01 second: 1.931e-01 infty: 2.499e+00 Divergence time: 1.48558 first: 1.244e-01 second: 1.927e-01 infty: 2.464e+00 Divergence time: 1.48994 first: 1.240e-01 second: 1.923e-01 infty: 2.336e+00 Divergence time: 1.49434 first: 1.239e-01 second: 1.926e-01 infty: 2.096e+00 Divergence time: 1.49878 first: 1.238e-01 second: 1.930e-01 infty: 2.182e+00 Divergence time: 1.50325 first: 1.234e-01 second: 1.928e-01 infty: 2.106e+00 Divergence time: 1.50777 first: 1.231e-01 second: 1.921e-01 infty: 1.860e+00 Divergence time: 1.51228 first: 1.224e-01 second: 1.906e-01 infty: 1.515e+00 Divergence time: 1.51684 first: 1.220e-01 second: 1.894e-01 infty: 1.499e+00 Divergence time: 1.52144 first: 1.218e-01 second: 1.885e-01 infty: 1.461e+00 Divergence time: 1.52613 first: 1.224e-01 second: 1.882e-01 infty: 1.432e+00 Divergence time: 1.53087 first: 1.229e-01 second: 1.874e-01 infty: 1.396e+00 Divergence time: 1.53571 first: 1.234e-01 second: 1.870e-01 infty: 1.334e+00 Divergence time: 1.5407 first: 1.247e-01 second: 1.876e-01 infty: 1.277e+00 Divergence time: 1.5458 first: 1.256e-01 second: 1.876e-01 infty: 1.311e+00 Divergence time: 1.55103 first: 1.267e-01 second: 1.880e-01 infty: 1.343e+00 Divergence time: 1.55631 first: 1.274e-01 second: 1.878e-01 infty: 1.343e+00 Divergence time: 1.56159 first: 1.274e-01 second: 1.868e-01 infty: 1.314e+00 Divergence time: 1.56694 first: 1.276e-01 second: 1.863e-01 infty: 1.242e+00 Divergence time: 1.57228 first: 1.270e-01 second: 1.851e-01 infty: 1.141e+00 Divergence time: 1.57763 first: 1.261e-01 second: 1.833e-01 infty: 1.111e+00 Divergence time: 1.58298 first: 1.251e-01 second: 1.813e-01 infty: 1.149e+00 Divergence time: 1.58832 first: 1.239e-01 second: 1.789e-01 infty: 1.127e+00 Divergence time: 1.59367 first: 1.227e-01 second: 1.768e-01 infty: 1.111e+00 Divergence time: 1.59909 first: 1.223e-01 second: 1.758e-01 infty: 1.126e+00 Divergence time: 1.6045 first: 1.213e-01 second: 1.742e-01 infty: 1.127e+00 Divergence time: 1.60992 first: 1.202e-01 second: 1.726e-01 infty: 1.117e+00 Divergence time: 1.61534 first: 1.190e-01 second: 1.708e-01 infty: 1.115e+00 Divergence time: 1.62083 first: 1.190e-01 second: 1.706e-01 infty: 1.105e+00 Divergence time: 1.62633 first: 1.188e-01 second: 1.700e-01 infty: 1.079e+00 Divergence time: 1.63182 first: 1.186e-01 second: 1.696e-01 infty: 1.111e+00 Divergence time: 1.6374 first: 1.192e-01 second: 1.709e-01 infty: 1.184e+00 Divergence time: 1.64298 first: 1.195e-01 second: 1.715e-01 infty: 1.210e+00 Divergence time: 1.64865 first: 1.211e-01 second: 1.736e-01 infty: 1.217e+00 Divergence time: 1.65441 first: 1.228e-01 second: 1.765e-01 infty: 1.206e+00 Divergence time: 1.66017 first: 1.237e-01 second: 1.784e-01 infty: 1.163e+00 Divergence time: 1.66593 first: 1.242e-01 second: 1.797e-01 infty: 1.130e+00 Divergence time: 1.67169 first: 1.242e-01 second: 1.808e-01 infty: 1.142e+00 Divergence time: 1.67745 first: 1.239e-01 second: 1.815e-01 infty: 1.111e+00 Divergence time: 1.68321 first: 1.238e-01 second: 1.820e-01 infty: 1.170e+00 Divergence time: 1.68897 first: 1.238e-01 second: 1.821e-01 infty: 1.256e+00 Divergence time: 1.69462 first: 1.224e-01 second: 1.804e-01 infty: 1.278e+00 Divergence time: 1.70028 first: 1.215e-01 second: 1.796e-01 infty: 1.274e+00 Divergence time: 1.70593 first: 1.207e-01 second: 1.789e-01 infty: 1.363e+00 Divergence time: 1.71148 first: 1.189e-01 second: 1.768e-01 infty: 1.442e+00 Divergence time: 1.71703 first: 1.179e-01 second: 1.756e-01 infty: 1.522e+00 Divergence time: 1.72258 first: 1.171e-01 second: 1.744e-01 infty: 1.597e+00 Divergence time: 1.72824 first: 1.175e-01 second: 1.748e-01 infty: 1.674e+00 Divergence time: 1.7339 first: 1.171e-01 second: 1.742e-01 infty: 1.733e+00 Divergence time: 1.73945 first: 1.151e-01 second: 1.716e-01 infty: 1.770e+00 Divergence time: 1.74499 first: 1.140e-01 second: 1.701e-01 infty: 1.898e+00 Divergence time: 1.75053 first: 1.133e-01 second: 1.686e-01 infty: 1.963e+00 Divergence time: 1.75608 first: 1.124e-01 second: 1.671e-01 infty: 1.995e+00 Divergence time: 1.76162 first: 1.117e-01 second: 1.655e-01 infty: 2.002e+00 Divergence time: 1.76716 first: 1.109e-01 second: 1.636e-01 infty: 1.994e+00 Divergence time: 1.77271 first: 1.098e-01 second: 1.617e-01 infty: 1.969e+00 Divergence time: 1.77825 first: 1.088e-01 second: 1.599e-01 infty: 1.928e+00 Divergence time: 1.78379 first: 1.079e-01 second: 1.581e-01 infty: 1.870e+00 Divergence time: 1.78934 first: 1.071e-01 second: 1.562e-01 infty: 1.750e+00 Divergence time: 1.79488 first: 1.061e-01 second: 1.544e-01 infty: 1.651e+00 Divergence time: 1.80043 first: 1.052e-01 second: 1.527e-01 infty: 1.555e+00 Divergence time: 1.80597 first: 1.044e-01 second: 1.510e-01 infty: 1.457e+00 Divergence time: 1.81151 first: 1.036e-01 second: 1.494e-01 infty: 1.355e+00 Divergence time: 1.81706 first: 1.028e-01 second: 1.480e-01 infty: 1.249e+00 Divergence time: 1.8226 first: 1.019e-01 second: 1.468e-01 infty: 1.221e+00 Divergence time: 1.82814 first: 1.010e-01 second: 1.456e-01 infty: 1.196e+00 Divergence time: 1.83369 first: 1.001e-01 second: 1.444e-01 infty: 1.205e+00 Divergence time: 1.83905 first: 9.764e-02 second: 1.412e-01 infty: 1.218e+00 Divergence time: 1.84442 first: 9.621e-02 second: 1.393e-01 infty: 1.238e+00 Divergence time: 1.84978 first: 9.518e-02 second: 1.379e-01 infty: 1.249e+00 Divergence time: 1.85515 first: 9.406e-02 second: 1.366e-01 infty: 1.230e+00 Divergence time: 1.86051 first: 9.307e-02 second: 1.354e-01 infty: 1.206e+00 Divergence time: 1.86588 first: 9.243e-02 second: 1.344e-01 infty: 1.186e+00 Divergence time: 1.87124 first: 9.165e-02 second: 1.332e-01 infty: 1.137e+00 Divergence time: 1.87661 first: 9.078e-02 second: 1.322e-01 infty: 1.093e+00 Divergence time: 1.88222 first: 9.193e-02 second: 1.338e-01 infty: 1.060e+00 Divergence time: 1.88783 first: 9.164e-02 second: 1.335e-01 infty: 1.023e+00 Divergence time: 1.89343 first: 9.112e-02 second: 1.327e-01 infty: 9.866e-01 Divergence time: 1.89904 first: 9.052e-02 second: 1.315e-01 infty: 9.509e-01 Divergence time: 1.90436 first: 8.718e-02 second: 1.270e-01 infty: 9.082e-01 Divergence time: 1.90967 first: 8.537e-02 second: 1.246e-01 infty: 9.049e-01 Divergence time: 1.91498 first: 8.391e-02 second: 1.227e-01 infty: 8.978e-01 Divergence time: 1.9203 first: 8.273e-02 second: 1.209e-01 infty: 8.752e-01 Divergence time: 1.92561 first: 8.163e-02 second: 1.190e-01 infty: 8.370e-01 Divergence time: 1.93092 first: 8.044e-02 second: 1.171e-01 infty: 8.005e-01 Divergence time: 1.93624 first: 7.928e-02 second: 1.152e-01 infty: 7.790e-01 Divergence time: 1.94155 first: 7.814e-02 second: 1.134e-01 infty: 7.687e-01 Divergence time: 1.94642 first: 7.402e-02 second: 1.076e-01 infty: 7.242e-01 Divergence time: 1.95129 first: 7.229e-02 second: 1.051e-01 infty: 7.126e-01 Divergence time: 1.95616 first: 7.123e-02 second: 1.034e-01 infty: 6.896e-01 Divergence time: 1.96103 first: 7.041e-02 second: 1.020e-01 infty: 6.783e-01 Divergence time: 1.9659 first: 6.961e-02 second: 1.007e-01 infty: 6.775e-01 Divergence time: 1.97078 first: 6.882e-02 second: 9.978e-02 infty: 6.789e-01 Divergence time: 1.97565 first: 6.798e-02 second: 9.910e-02 infty: 6.812e-01 Divergence time: 1.98052 first: 6.740e-02 second: 9.838e-02 infty: 6.759e-01 Divergence time: 1.98539 first: 6.695e-02 second: 9.786e-02 infty: 6.629e-01 Divergence time: 1.99026 first: 6.650e-02 second: 9.744e-02 infty: 6.438e-01 Divergence time: 1.99513 first: 6.608e-02 second: 9.707e-02 infty: 6.531e-01 Divergence time: 2 first: 6.564e-02 second: 9.673e-02 infty: 6.592e-01 gerris-snapshot-131206/test/reynolds/box/div7.ref0000644000175100017510000017123312250371171016646 00000000000000Divergence time: 0 first: 3.585e-03 second: 2.589e-02 infty: 3.565e-01 Divergence time: 0.00312989 first: 5.225e-02 second: 6.973e-02 infty: 4.175e-01 Divergence time: 0.00625978 first: 5.429e-02 second: 7.174e-02 infty: 3.437e-01 Divergence time: 0.00938967 first: 5.448e-02 second: 7.204e-02 infty: 3.249e-01 Divergence time: 0.0125196 first: 5.459e-02 second: 7.242e-02 infty: 3.376e-01 Divergence time: 0.0156495 first: 5.468e-02 second: 7.278e-02 infty: 3.478e-01 Divergence time: 0.0187793 first: 5.483e-02 second: 7.316e-02 infty: 3.557e-01 Divergence time: 0.0219092 first: 5.498e-02 second: 7.347e-02 infty: 3.565e-01 Divergence time: 0.0250391 first: 5.503e-02 second: 7.369e-02 infty: 3.543e-01 Divergence time: 0.028169 first: 5.509e-02 second: 7.387e-02 infty: 3.459e-01 Divergence time: 0.0312989 first: 5.509e-02 second: 7.400e-02 infty: 3.472e-01 Divergence time: 0.0344288 first: 5.514e-02 second: 7.411e-02 infty: 3.440e-01 Divergence time: 0.0375587 first: 5.524e-02 second: 7.421e-02 infty: 3.468e-01 Divergence time: 0.0406886 first: 5.527e-02 second: 7.430e-02 infty: 3.560e-01 Divergence time: 0.0438185 first: 5.523e-02 second: 7.432e-02 infty: 3.616e-01 Divergence time: 0.0469484 first: 5.523e-02 second: 7.432e-02 infty: 3.599e-01 Divergence time: 0.0500732 first: 5.520e-02 second: 7.427e-02 infty: 3.580e-01 Divergence time: 0.0532031 first: 5.529e-02 second: 7.437e-02 infty: 3.597e-01 Divergence time: 0.056333 first: 5.533e-02 second: 7.442e-02 infty: 3.589e-01 Divergence time: 0.0594629 first: 5.542e-02 second: 7.450e-02 infty: 3.595e-01 Divergence time: 0.0625928 first: 5.545e-02 second: 7.454e-02 infty: 3.589e-01 Divergence time: 0.0657227 first: 5.537e-02 second: 7.450e-02 infty: 3.597e-01 Divergence time: 0.0688476 first: 5.529e-02 second: 7.442e-02 infty: 3.579e-01 Divergence time: 0.0719724 first: 5.522e-02 second: 7.437e-02 infty: 3.580e-01 Divergence time: 0.0750973 first: 5.515e-02 second: 7.434e-02 infty: 3.585e-01 Divergence time: 0.0782221 first: 5.510e-02 second: 7.431e-02 infty: 3.586e-01 Divergence time: 0.0813469 first: 5.501e-02 second: 7.427e-02 infty: 3.584e-01 Divergence time: 0.0844718 first: 5.497e-02 second: 7.424e-02 infty: 3.575e-01 Divergence time: 0.0875966 first: 5.500e-02 second: 7.423e-02 infty: 3.579e-01 Divergence time: 0.0907215 first: 5.501e-02 second: 7.422e-02 infty: 3.572e-01 Divergence time: 0.0938463 first: 5.501e-02 second: 7.420e-02 infty: 3.581e-01 Divergence time: 0.0969712 first: 5.505e-02 second: 7.420e-02 infty: 3.565e-01 Divergence time: 0.100096 first: 5.507e-02 second: 7.421e-02 infty: 3.570e-01 Divergence time: 0.103221 first: 5.509e-02 second: 7.420e-02 infty: 3.561e-01 Divergence time: 0.106346 first: 5.514e-02 second: 7.422e-02 infty: 3.558e-01 Divergence time: 0.109471 first: 5.517e-02 second: 7.423e-02 infty: 3.561e-01 Divergence time: 0.112595 first: 5.521e-02 second: 7.425e-02 infty: 3.618e-01 Divergence time: 0.11572 first: 5.520e-02 second: 7.424e-02 infty: 3.599e-01 Divergence time: 0.118845 first: 5.518e-02 second: 7.422e-02 infty: 3.574e-01 Divergence time: 0.12197 first: 5.516e-02 second: 7.420e-02 infty: 3.578e-01 Divergence time: 0.125095 first: 5.511e-02 second: 7.418e-02 infty: 3.580e-01 Divergence time: 0.12822 first: 5.509e-02 second: 7.416e-02 infty: 3.580e-01 Divergence time: 0.131344 first: 5.509e-02 second: 7.416e-02 infty: 3.578e-01 Divergence time: 0.134469 first: 5.510e-02 second: 7.415e-02 infty: 3.575e-01 Divergence time: 0.137594 first: 5.508e-02 second: 7.414e-02 infty: 3.571e-01 Divergence time: 0.140719 first: 5.506e-02 second: 7.411e-02 infty: 3.566e-01 Divergence time: 0.143844 first: 5.502e-02 second: 7.409e-02 infty: 3.561e-01 Divergence time: 0.146969 first: 5.500e-02 second: 7.406e-02 infty: 3.557e-01 Divergence time: 0.150093 first: 5.499e-02 second: 7.405e-02 infty: 3.554e-01 Divergence time: 0.153218 first: 5.497e-02 second: 7.404e-02 infty: 3.550e-01 Divergence time: 0.156343 first: 5.497e-02 second: 7.403e-02 infty: 3.545e-01 Divergence time: 0.159468 first: 5.495e-02 second: 7.401e-02 infty: 3.541e-01 Divergence time: 0.162593 first: 5.495e-02 second: 7.400e-02 infty: 3.552e-01 Divergence time: 0.165718 first: 5.496e-02 second: 7.398e-02 infty: 3.571e-01 Divergence time: 0.168843 first: 5.496e-02 second: 7.397e-02 infty: 3.536e-01 Divergence time: 0.171967 first: 5.497e-02 second: 7.396e-02 infty: 3.542e-01 Divergence time: 0.175092 first: 5.501e-02 second: 7.398e-02 infty: 3.565e-01 Divergence time: 0.178217 first: 5.504e-02 second: 7.398e-02 infty: 3.568e-01 Divergence time: 0.181342 first: 5.507e-02 second: 7.397e-02 infty: 3.555e-01 Divergence time: 0.184467 first: 5.508e-02 second: 7.396e-02 infty: 3.545e-01 Divergence time: 0.187592 first: 5.509e-02 second: 7.394e-02 infty: 3.535e-01 Divergence time: 0.190716 first: 5.511e-02 second: 7.394e-02 infty: 3.530e-01 Divergence time: 0.193841 first: 5.514e-02 second: 7.394e-02 infty: 3.542e-01 Divergence time: 0.196966 first: 5.516e-02 second: 7.393e-02 infty: 3.560e-01 Divergence time: 0.200091 first: 5.518e-02 second: 7.393e-02 infty: 3.557e-01 Divergence time: 0.203216 first: 5.518e-02 second: 7.392e-02 infty: 3.547e-01 Divergence time: 0.206341 first: 5.518e-02 second: 7.390e-02 infty: 3.567e-01 Divergence time: 0.209465 first: 5.517e-02 second: 7.390e-02 infty: 3.520e-01 Divergence time: 0.21259 first: 5.519e-02 second: 7.391e-02 infty: 3.524e-01 Divergence time: 0.215715 first: 5.519e-02 second: 7.391e-02 infty: 3.527e-01 Divergence time: 0.21884 first: 5.520e-02 second: 7.391e-02 infty: 3.528e-01 Divergence time: 0.221965 first: 5.521e-02 second: 7.392e-02 infty: 3.532e-01 Divergence time: 0.22509 first: 5.520e-02 second: 7.391e-02 infty: 3.535e-01 Divergence time: 0.228215 first: 5.520e-02 second: 7.392e-02 infty: 3.538e-01 Divergence time: 0.231339 first: 5.522e-02 second: 7.392e-02 infty: 3.539e-01 Divergence time: 0.234464 first: 5.524e-02 second: 7.393e-02 infty: 3.540e-01 Divergence time: 0.237589 first: 5.522e-02 second: 7.392e-02 infty: 3.542e-01 Divergence time: 0.240714 first: 5.521e-02 second: 7.391e-02 infty: 3.543e-01 Divergence time: 0.243839 first: 5.519e-02 second: 7.389e-02 infty: 3.543e-01 Divergence time: 0.246964 first: 5.515e-02 second: 7.387e-02 infty: 3.543e-01 Divergence time: 0.250088 first: 5.511e-02 second: 7.385e-02 infty: 3.542e-01 Divergence time: 0.253213 first: 5.508e-02 second: 7.381e-02 infty: 3.569e-01 Divergence time: 0.256338 first: 5.502e-02 second: 7.378e-02 infty: 3.543e-01 Divergence time: 0.259463 first: 5.499e-02 second: 7.374e-02 infty: 3.544e-01 Divergence time: 0.262588 first: 5.495e-02 second: 7.370e-02 infty: 3.543e-01 Divergence time: 0.265707 first: 5.483e-02 second: 7.356e-02 infty: 3.809e-01 Divergence time: 0.268826 first: 5.480e-02 second: 7.353e-02 infty: 3.942e-01 Divergence time: 0.271945 first: 5.478e-02 second: 7.350e-02 infty: 3.877e-01 Divergence time: 0.275065 first: 5.474e-02 second: 7.347e-02 infty: 3.787e-01 Divergence time: 0.278184 first: 5.471e-02 second: 7.344e-02 infty: 3.544e-01 Divergence time: 0.281303 first: 5.468e-02 second: 7.341e-02 infty: 3.543e-01 Divergence time: 0.284422 first: 5.464e-02 second: 7.338e-02 infty: 3.794e-01 Divergence time: 0.287542 first: 5.462e-02 second: 7.336e-02 infty: 3.928e-01 Divergence time: 0.290661 first: 5.460e-02 second: 7.334e-02 infty: 3.909e-01 Divergence time: 0.29378 first: 5.458e-02 second: 7.330e-02 infty: 3.851e-01 Divergence time: 0.296899 first: 5.456e-02 second: 7.328e-02 infty: 3.794e-01 Divergence time: 0.300019 first: 5.454e-02 second: 7.325e-02 infty: 3.754e-01 Divergence time: 0.303138 first: 5.452e-02 second: 7.323e-02 infty: 3.699e-01 Divergence time: 0.306257 first: 5.451e-02 second: 7.322e-02 infty: 3.655e-01 Divergence time: 0.309376 first: 5.448e-02 second: 7.319e-02 infty: 3.654e-01 Divergence time: 0.312495 first: 5.446e-02 second: 7.316e-02 infty: 3.653e-01 Divergence time: 0.315615 first: 5.443e-02 second: 7.315e-02 infty: 3.659e-01 Divergence time: 0.318734 first: 5.441e-02 second: 7.313e-02 infty: 3.683e-01 Divergence time: 0.321853 first: 5.439e-02 second: 7.310e-02 infty: 3.680e-01 Divergence time: 0.324972 first: 5.438e-02 second: 7.309e-02 infty: 3.674e-01 Divergence time: 0.328092 first: 5.437e-02 second: 7.307e-02 infty: 3.663e-01 Divergence time: 0.331211 first: 5.434e-02 second: 7.305e-02 infty: 3.664e-01 Divergence time: 0.33433 first: 5.432e-02 second: 7.306e-02 infty: 3.659e-01 Divergence time: 0.337449 first: 5.431e-02 second: 7.305e-02 infty: 3.648e-01 Divergence time: 0.340569 first: 5.430e-02 second: 7.302e-02 infty: 3.643e-01 Divergence time: 0.343688 first: 5.430e-02 second: 7.301e-02 infty: 3.641e-01 Divergence time: 0.346807 first: 5.429e-02 second: 7.300e-02 infty: 3.639e-01 Divergence time: 0.349926 first: 5.429e-02 second: 7.301e-02 infty: 3.638e-01 Divergence time: 0.353046 first: 5.429e-02 second: 7.300e-02 infty: 3.635e-01 Divergence time: 0.356165 first: 5.428e-02 second: 7.300e-02 infty: 3.634e-01 Divergence time: 0.359284 first: 5.427e-02 second: 7.298e-02 infty: 3.633e-01 Divergence time: 0.362403 first: 5.426e-02 second: 7.298e-02 infty: 3.640e-01 Divergence time: 0.365522 first: 5.426e-02 second: 7.298e-02 infty: 3.645e-01 Divergence time: 0.368642 first: 5.425e-02 second: 7.297e-02 infty: 3.628e-01 Divergence time: 0.371761 first: 5.424e-02 second: 7.295e-02 infty: 3.628e-01 Divergence time: 0.37488 first: 5.423e-02 second: 7.294e-02 infty: 3.628e-01 Divergence time: 0.377999 first: 5.423e-02 second: 7.293e-02 infty: 3.716e-01 Divergence time: 0.381119 first: 5.421e-02 second: 7.291e-02 infty: 3.721e-01 Divergence time: 0.384238 first: 5.419e-02 second: 7.289e-02 infty: 3.701e-01 Divergence time: 0.387357 first: 5.417e-02 second: 7.287e-02 infty: 3.682e-01 Divergence time: 0.390476 first: 5.415e-02 second: 7.286e-02 infty: 3.641e-01 Divergence time: 0.393596 first: 5.413e-02 second: 7.284e-02 infty: 3.628e-01 Divergence time: 0.396715 first: 5.411e-02 second: 7.281e-02 infty: 3.633e-01 Divergence time: 0.399834 first: 5.408e-02 second: 7.279e-02 infty: 3.637e-01 Divergence time: 0.402953 first: 5.404e-02 second: 7.278e-02 infty: 3.640e-01 Divergence time: 0.406072 first: 5.403e-02 second: 7.276e-02 infty: 3.627e-01 Divergence time: 0.409192 first: 5.400e-02 second: 7.273e-02 infty: 3.783e-01 Divergence time: 0.412311 first: 5.399e-02 second: 7.271e-02 infty: 3.920e-01 Divergence time: 0.415424 first: 5.388e-02 second: 7.257e-02 infty: 3.929e-01 Divergence time: 0.418537 first: 5.386e-02 second: 7.255e-02 infty: 3.860e-01 Divergence time: 0.42165 first: 5.384e-02 second: 7.251e-02 infty: 3.863e-01 Divergence time: 0.424763 first: 5.382e-02 second: 7.249e-02 infty: 3.874e-01 Divergence time: 0.427876 first: 5.379e-02 second: 7.247e-02 infty: 3.878e-01 Divergence time: 0.43099 first: 5.376e-02 second: 7.245e-02 infty: 3.879e-01 Divergence time: 0.434103 first: 5.375e-02 second: 7.244e-02 infty: 3.879e-01 Divergence time: 0.437216 first: 5.374e-02 second: 7.243e-02 infty: 3.879e-01 Divergence time: 0.440329 first: 5.372e-02 second: 7.240e-02 infty: 3.885e-01 Divergence time: 0.443442 first: 5.369e-02 second: 7.237e-02 infty: 3.888e-01 Divergence time: 0.446555 first: 5.367e-02 second: 7.236e-02 infty: 3.890e-01 Divergence time: 0.449668 first: 5.365e-02 second: 7.234e-02 infty: 3.892e-01 Divergence time: 0.452781 first: 5.362e-02 second: 7.232e-02 infty: 3.880e-01 Divergence time: 0.455895 first: 5.361e-02 second: 7.230e-02 infty: 3.871e-01 Divergence time: 0.459008 first: 5.360e-02 second: 7.229e-02 infty: 3.879e-01 Divergence time: 0.462114 first: 5.349e-02 second: 7.215e-02 infty: 3.886e-01 Divergence time: 0.465221 first: 5.346e-02 second: 7.213e-02 infty: 3.891e-01 Divergence time: 0.468328 first: 5.346e-02 second: 7.212e-02 infty: 3.895e-01 Divergence time: 0.471435 first: 5.344e-02 second: 7.211e-02 infty: 3.899e-01 Divergence time: 0.474542 first: 5.343e-02 second: 7.210e-02 infty: 3.903e-01 Divergence time: 0.477649 first: 5.342e-02 second: 7.209e-02 infty: 3.893e-01 Divergence time: 0.480756 first: 5.341e-02 second: 7.207e-02 infty: 3.801e-01 Divergence time: 0.483862 first: 5.340e-02 second: 7.206e-02 infty: 3.849e-01 Divergence time: 0.486969 first: 5.340e-02 second: 7.206e-02 infty: 3.878e-01 Divergence time: 0.490076 first: 5.338e-02 second: 7.204e-02 infty: 3.896e-01 Divergence time: 0.493183 first: 5.337e-02 second: 7.204e-02 infty: 3.907e-01 Divergence time: 0.49629 first: 5.337e-02 second: 7.202e-02 infty: 3.914e-01 Divergence time: 0.499397 first: 5.336e-02 second: 7.201e-02 infty: 3.919e-01 Divergence time: 0.502503 first: 5.337e-02 second: 7.200e-02 infty: 3.922e-01 Divergence time: 0.505604 first: 5.328e-02 second: 7.187e-02 infty: 3.909e-01 Divergence time: 0.508704 first: 5.326e-02 second: 7.185e-02 infty: 3.748e-01 Divergence time: 0.511805 first: 5.324e-02 second: 7.183e-02 infty: 3.763e-01 Divergence time: 0.514905 first: 5.323e-02 second: 7.181e-02 infty: 3.810e-01 Divergence time: 0.518005 first: 5.323e-02 second: 7.180e-02 infty: 3.836e-01 Divergence time: 0.521106 first: 5.324e-02 second: 7.179e-02 infty: 3.848e-01 Divergence time: 0.524206 first: 5.322e-02 second: 7.177e-02 infty: 3.852e-01 Divergence time: 0.527307 first: 5.324e-02 second: 7.177e-02 infty: 3.852e-01 Divergence time: 0.530407 first: 5.324e-02 second: 7.176e-02 infty: 3.852e-01 Divergence time: 0.533507 first: 5.324e-02 second: 7.174e-02 infty: 3.838e-01 Divergence time: 0.536608 first: 5.324e-02 second: 7.173e-02 infty: 3.807e-01 Divergence time: 0.539708 first: 5.324e-02 second: 7.173e-02 infty: 3.827e-01 Divergence time: 0.542809 first: 5.324e-02 second: 7.172e-02 infty: 3.838e-01 Divergence time: 0.545909 first: 5.325e-02 second: 7.171e-02 infty: 3.841e-01 Divergence time: 0.54901 first: 5.324e-02 second: 7.170e-02 infty: 3.828e-01 Divergence time: 0.55211 first: 5.324e-02 second: 7.169e-02 infty: 3.754e-01 Divergence time: 0.55521 first: 5.324e-02 second: 7.168e-02 infty: 3.745e-01 Divergence time: 0.558304 first: 5.315e-02 second: 7.155e-02 infty: 3.730e-01 Divergence time: 0.561398 first: 5.314e-02 second: 7.152e-02 infty: 3.716e-01 Divergence time: 0.564492 first: 5.314e-02 second: 7.151e-02 infty: 3.703e-01 Divergence time: 0.567585 first: 5.313e-02 second: 7.150e-02 infty: 3.690e-01 Divergence time: 0.570679 first: 5.312e-02 second: 7.148e-02 infty: 3.679e-01 Divergence time: 0.573773 first: 5.311e-02 second: 7.148e-02 infty: 3.653e-01 Divergence time: 0.576867 first: 5.311e-02 second: 7.148e-02 infty: 3.657e-01 Divergence time: 0.57996 first: 5.312e-02 second: 7.148e-02 infty: 3.660e-01 Divergence time: 0.583054 first: 5.313e-02 second: 7.147e-02 infty: 3.661e-01 Divergence time: 0.586148 first: 5.313e-02 second: 7.147e-02 infty: 3.631e-01 Divergence time: 0.589242 first: 5.314e-02 second: 7.147e-02 infty: 3.662e-01 Divergence time: 0.592336 first: 5.315e-02 second: 7.147e-02 infty: 3.674e-01 Divergence time: 0.595429 first: 5.316e-02 second: 7.147e-02 infty: 3.679e-01 Divergence time: 0.598523 first: 5.317e-02 second: 7.147e-02 infty: 3.866e-01 Divergence time: 0.601617 first: 5.320e-02 second: 7.147e-02 infty: 4.002e-01 Divergence time: 0.604711 first: 5.322e-02 second: 7.148e-02 infty: 4.033e-01 Divergence time: 0.607804 first: 5.323e-02 second: 7.148e-02 infty: 4.033e-01 Divergence time: 0.610891 first: 5.315e-02 second: 7.134e-02 infty: 4.005e-01 Divergence time: 0.613978 first: 5.316e-02 second: 7.134e-02 infty: 3.987e-01 Divergence time: 0.617065 first: 5.317e-02 second: 7.135e-02 infty: 4.000e-01 Divergence time: 0.620152 first: 5.319e-02 second: 7.135e-02 infty: 3.997e-01 Divergence time: 0.623239 first: 5.319e-02 second: 7.133e-02 infty: 3.976e-01 Divergence time: 0.626326 first: 5.317e-02 second: 7.131e-02 infty: 3.953e-01 Divergence time: 0.629413 first: 5.315e-02 second: 7.130e-02 infty: 3.865e-01 Divergence time: 0.632493 first: 5.304e-02 second: 7.114e-02 infty: 3.824e-01 Divergence time: 0.635573 first: 5.302e-02 second: 7.110e-02 infty: 3.818e-01 Divergence time: 0.638653 first: 5.301e-02 second: 7.109e-02 infty: 3.816e-01 Divergence time: 0.641733 first: 5.301e-02 second: 7.108e-02 infty: 3.816e-01 Divergence time: 0.644813 first: 5.300e-02 second: 7.106e-02 infty: 3.820e-01 Divergence time: 0.647886 first: 5.288e-02 second: 7.092e-02 infty: 3.855e-01 Divergence time: 0.650959 first: 5.288e-02 second: 7.090e-02 infty: 3.987e-01 Divergence time: 0.654032 first: 5.288e-02 second: 7.089e-02 infty: 4.022e-01 Divergence time: 0.657105 first: 5.288e-02 second: 7.087e-02 infty: 4.023e-01 Divergence time: 0.660178 first: 5.286e-02 second: 7.086e-02 infty: 4.016e-01 Divergence time: 0.663251 first: 5.286e-02 second: 7.086e-02 infty: 4.015e-01 Divergence time: 0.666316 first: 5.275e-02 second: 7.072e-02 infty: 3.997e-01 Divergence time: 0.669382 first: 5.277e-02 second: 7.071e-02 infty: 3.920e-01 Divergence time: 0.672448 first: 5.278e-02 second: 7.070e-02 infty: 3.907e-01 Divergence time: 0.675514 first: 5.280e-02 second: 7.070e-02 infty: 3.908e-01 Divergence time: 0.678573 first: 5.270e-02 second: 7.057e-02 infty: 3.894e-01 Divergence time: 0.681632 first: 5.270e-02 second: 7.054e-02 infty: 3.896e-01 Divergence time: 0.684691 first: 5.272e-02 second: 7.055e-02 infty: 3.880e-01 Divergence time: 0.68775 first: 5.272e-02 second: 7.054e-02 infty: 3.872e-01 Divergence time: 0.690809 first: 5.273e-02 second: 7.053e-02 infty: 3.870e-01 Divergence time: 0.69386 first: 5.263e-02 second: 7.038e-02 infty: 3.867e-01 Divergence time: 0.696912 first: 5.263e-02 second: 7.037e-02 infty: 3.871e-01 Divergence time: 0.699964 first: 5.263e-02 second: 7.036e-02 infty: 3.875e-01 Divergence time: 0.703015 first: 5.263e-02 second: 7.033e-02 infty: 3.861e-01 Divergence time: 0.706067 first: 5.263e-02 second: 7.031e-02 infty: 3.854e-01 Divergence time: 0.709112 first: 5.250e-02 second: 7.015e-02 infty: 3.788e-01 Divergence time: 0.712156 first: 5.249e-02 second: 7.013e-02 infty: 3.857e-01 Divergence time: 0.715201 first: 5.250e-02 second: 7.012e-02 infty: 3.864e-01 Divergence time: 0.718245 first: 5.250e-02 second: 7.011e-02 infty: 3.848e-01 Divergence time: 0.721283 first: 5.240e-02 second: 6.997e-02 infty: 3.815e-01 Divergence time: 0.72432 first: 5.240e-02 second: 6.994e-02 infty: 3.791e-01 Divergence time: 0.727357 first: 5.241e-02 second: 6.992e-02 infty: 3.782e-01 Divergence time: 0.730395 first: 5.242e-02 second: 6.992e-02 infty: 3.779e-01 Divergence time: 0.733425 first: 5.232e-02 second: 6.976e-02 infty: 3.779e-01 Divergence time: 0.736455 first: 5.232e-02 second: 6.974e-02 infty: 3.785e-01 Divergence time: 0.739485 first: 5.232e-02 second: 6.973e-02 infty: 3.788e-01 Divergence time: 0.742515 first: 5.231e-02 second: 6.972e-02 infty: 3.783e-01 Divergence time: 0.745538 first: 5.220e-02 second: 6.957e-02 infty: 3.779e-01 Divergence time: 0.748561 first: 5.220e-02 second: 6.954e-02 infty: 3.779e-01 Divergence time: 0.751583 first: 5.221e-02 second: 6.954e-02 infty: 3.779e-01 Divergence time: 0.754606 first: 5.221e-02 second: 6.952e-02 infty: 3.777e-01 Divergence time: 0.757629 first: 5.221e-02 second: 6.951e-02 infty: 3.775e-01 Divergence time: 0.760645 first: 5.210e-02 second: 6.935e-02 infty: 3.748e-01 Divergence time: 0.76366 first: 5.211e-02 second: 6.933e-02 infty: 3.756e-01 Divergence time: 0.766675 first: 5.212e-02 second: 6.932e-02 infty: 3.755e-01 Divergence time: 0.769691 first: 5.213e-02 second: 6.931e-02 infty: 3.744e-01 Divergence time: 0.772699 first: 5.201e-02 second: 6.915e-02 infty: 3.761e-01 Divergence time: 0.775707 first: 5.198e-02 second: 6.912e-02 infty: 3.765e-01 Divergence time: 0.778715 first: 5.198e-02 second: 6.912e-02 infty: 3.745e-01 Divergence time: 0.781723 first: 5.199e-02 second: 6.911e-02 infty: 3.725e-01 Divergence time: 0.784724 first: 5.189e-02 second: 6.896e-02 infty: 3.717e-01 Divergence time: 0.787725 first: 5.189e-02 second: 6.895e-02 infty: 3.715e-01 Divergence time: 0.790725 first: 5.188e-02 second: 6.892e-02 infty: 3.714e-01 Divergence time: 0.793726 first: 5.189e-02 second: 6.891e-02 infty: 3.684e-01 Divergence time: 0.796719 first: 5.178e-02 second: 6.875e-02 infty: 3.668e-01 Divergence time: 0.799712 first: 5.176e-02 second: 6.872e-02 infty: 3.702e-01 Divergence time: 0.802706 first: 5.175e-02 second: 6.870e-02 infty: 3.744e-01 Divergence time: 0.805699 first: 5.174e-02 second: 6.869e-02 infty: 3.776e-01 Divergence time: 0.808692 first: 5.172e-02 second: 6.867e-02 infty: 3.783e-01 Divergence time: 0.811678 first: 5.159e-02 second: 6.851e-02 infty: 3.773e-01 Divergence time: 0.814664 first: 5.157e-02 second: 6.848e-02 infty: 3.764e-01 Divergence time: 0.817649 first: 5.156e-02 second: 6.846e-02 infty: 3.750e-01 Divergence time: 0.820635 first: 5.156e-02 second: 6.845e-02 infty: 3.728e-01 Divergence time: 0.823613 first: 5.144e-02 second: 6.830e-02 infty: 3.718e-01 Divergence time: 0.826592 first: 5.142e-02 second: 6.827e-02 infty: 3.728e-01 Divergence time: 0.82957 first: 5.140e-02 second: 6.825e-02 infty: 3.735e-01 Divergence time: 0.832548 first: 5.139e-02 second: 6.823e-02 infty: 3.745e-01 Divergence time: 0.835526 first: 5.139e-02 second: 6.822e-02 infty: 3.775e-01 Divergence time: 0.838497 first: 5.126e-02 second: 6.807e-02 infty: 3.768e-01 Divergence time: 0.841467 first: 5.126e-02 second: 6.806e-02 infty: 3.770e-01 Divergence time: 0.844438 first: 5.125e-02 second: 6.804e-02 infty: 3.789e-01 Divergence time: 0.847408 first: 5.124e-02 second: 6.803e-02 infty: 3.832e-01 Divergence time: 0.850379 first: 5.123e-02 second: 6.801e-02 infty: 3.851e-01 Divergence time: 0.853342 first: 5.110e-02 second: 6.785e-02 infty: 3.842e-01 Divergence time: 0.856305 first: 5.108e-02 second: 6.782e-02 infty: 3.846e-01 Divergence time: 0.859268 first: 5.107e-02 second: 6.779e-02 infty: 3.852e-01 Divergence time: 0.862231 first: 5.108e-02 second: 6.779e-02 infty: 3.867e-01 Divergence time: 0.865194 first: 5.108e-02 second: 6.778e-02 infty: 3.884e-01 Divergence time: 0.868149 first: 5.095e-02 second: 6.762e-02 infty: 3.896e-01 Divergence time: 0.871104 first: 5.094e-02 second: 6.759e-02 infty: 3.911e-01 Divergence time: 0.874059 first: 5.092e-02 second: 6.757e-02 infty: 3.929e-01 Divergence time: 0.877015 first: 5.087e-02 second: 6.753e-02 infty: 3.950e-01 Divergence time: 0.87997 first: 5.086e-02 second: 6.752e-02 infty: 3.973e-01 Divergence time: 0.882925 first: 5.085e-02 second: 6.751e-02 infty: 4.004e-01 Divergence time: 0.88588 first: 5.084e-02 second: 6.750e-02 infty: 4.027e-01 Divergence time: 0.888828 first: 5.071e-02 second: 6.735e-02 infty: 4.035e-01 Divergence time: 0.891775 first: 5.069e-02 second: 6.732e-02 infty: 4.034e-01 Divergence time: 0.894723 first: 5.067e-02 second: 6.730e-02 infty: 4.019e-01 Divergence time: 0.89767 first: 5.065e-02 second: 6.727e-02 infty: 4.010e-01 Divergence time: 0.900617 first: 5.063e-02 second: 6.726e-02 infty: 4.005e-01 Divergence time: 0.903565 first: 5.062e-02 second: 6.724e-02 infty: 4.000e-01 Divergence time: 0.906512 first: 5.059e-02 second: 6.722e-02 infty: 3.992e-01 Divergence time: 0.90946 first: 5.057e-02 second: 6.721e-02 infty: 3.999e-01 Divergence time: 0.912407 first: 5.055e-02 second: 6.719e-02 infty: 4.006e-01 Divergence time: 0.915354 first: 5.054e-02 second: 6.717e-02 infty: 4.010e-01 Divergence time: 0.918302 first: 5.051e-02 second: 6.714e-02 infty: 4.021e-01 Divergence time: 0.921241 first: 5.036e-02 second: 6.696e-02 infty: 4.031e-01 Divergence time: 0.924181 first: 5.033e-02 second: 6.692e-02 infty: 4.041e-01 Divergence time: 0.92712 first: 5.031e-02 second: 6.690e-02 infty: 4.029e-01 Divergence time: 0.930059 first: 5.030e-02 second: 6.689e-02 infty: 4.007e-01 Divergence time: 0.932999 first: 5.028e-02 second: 6.688e-02 infty: 3.981e-01 Divergence time: 0.93593 first: 5.012e-02 second: 6.670e-02 infty: 3.999e-01 Divergence time: 0.938861 first: 5.009e-02 second: 6.666e-02 infty: 4.021e-01 Divergence time: 0.941785 first: 4.995e-02 second: 6.648e-02 infty: 4.393e-01 Divergence time: 0.944708 first: 4.992e-02 second: 6.646e-02 infty: 4.087e-01 Divergence time: 0.947623 first: 4.976e-02 second: 6.627e-02 infty: 4.078e-01 Divergence time: 0.950538 first: 4.972e-02 second: 6.623e-02 infty: 4.082e-01 Divergence time: 0.953445 first: 4.957e-02 second: 6.605e-02 infty: 4.121e-01 Divergence time: 0.956352 first: 4.952e-02 second: 6.600e-02 infty: 4.163e-01 Divergence time: 0.959252 first: 4.938e-02 second: 6.584e-02 infty: 4.198e-01 Divergence time: 0.962151 first: 4.935e-02 second: 6.581e-02 infty: 4.224e-01 Divergence time: 0.965041 first: 4.921e-02 second: 6.564e-02 infty: 4.234e-01 Divergence time: 0.967932 first: 4.918e-02 second: 6.561e-02 infty: 4.236e-01 Divergence time: 0.970823 first: 4.915e-02 second: 6.558e-02 infty: 4.248e-01 Divergence time: 0.973706 first: 4.900e-02 second: 6.539e-02 infty: 4.276e-01 Divergence time: 0.976589 first: 4.897e-02 second: 6.535e-02 infty: 4.198e-01 Divergence time: 0.979464 first: 4.883e-02 second: 6.517e-02 infty: 4.166e-01 Divergence time: 0.982339 first: 4.878e-02 second: 6.512e-02 infty: 4.126e-01 Divergence time: 0.985205 first: 4.864e-02 second: 6.495e-02 infty: 4.067e-01 Divergence time: 0.988072 first: 4.860e-02 second: 6.490e-02 infty: 4.019e-01 Divergence time: 0.99093 first: 4.845e-02 second: 6.471e-02 infty: 3.999e-01 Divergence time: 0.993789 first: 4.839e-02 second: 6.467e-02 infty: 3.965e-01 Divergence time: 0.996639 first: 4.822e-02 second: 6.448e-02 infty: 3.914e-01 Divergence time: 0.999482 first: 4.806e-02 second: 6.429e-02 infty: 3.868e-01 Divergence time: 1.00232 first: 4.801e-02 second: 6.423e-02 infty: 3.907e-01 Divergence time: 1.00516 first: 4.783e-02 second: 6.405e-02 infty: 3.963e-01 Divergence time: 1.00799 first: 4.778e-02 second: 6.400e-02 infty: 4.015e-01 Divergence time: 1.01082 first: 4.762e-02 second: 6.383e-02 infty: 4.060e-01 Divergence time: 1.01364 first: 4.744e-02 second: 6.364e-02 infty: 4.097e-01 Divergence time: 1.01646 first: 4.738e-02 second: 6.359e-02 infty: 4.126e-01 Divergence time: 1.01927 first: 4.721e-02 second: 6.341e-02 infty: 4.138e-01 Divergence time: 1.02207 first: 4.701e-02 second: 6.321e-02 infty: 4.134e-01 Divergence time: 1.02487 first: 4.693e-02 second: 6.316e-02 infty: 4.132e-01 Divergence time: 1.02766 first: 4.675e-02 second: 6.298e-02 infty: 4.168e-01 Divergence time: 1.03046 first: 4.669e-02 second: 6.294e-02 infty: 4.398e-01 Divergence time: 1.03324 first: 4.652e-02 second: 6.278e-02 infty: 4.539e-01 Divergence time: 1.03602 first: 4.635e-02 second: 6.260e-02 infty: 4.630e-01 Divergence time: 1.0388 first: 4.628e-02 second: 6.256e-02 infty: 4.695e-01 Divergence time: 1.04157 first: 4.613e-02 second: 6.239e-02 infty: 4.747e-01 Divergence time: 1.04433 first: 4.596e-02 second: 6.222e-02 infty: 4.793e-01 Divergence time: 1.04709 first: 4.591e-02 second: 6.218e-02 infty: 4.837e-01 Divergence time: 1.04985 first: 4.575e-02 second: 6.202e-02 infty: 4.880e-01 Divergence time: 1.0526 first: 4.571e-02 second: 6.199e-02 infty: 4.926e-01 Divergence time: 1.05535 first: 4.556e-02 second: 6.184e-02 infty: 4.970e-01 Divergence time: 1.05809 first: 4.539e-02 second: 6.167e-02 infty: 5.014e-01 Divergence time: 1.06082 first: 4.533e-02 second: 6.164e-02 infty: 5.066e-01 Divergence time: 1.06355 first: 4.516e-02 second: 6.148e-02 infty: 5.114e-01 Divergence time: 1.06628 first: 4.508e-02 second: 6.144e-02 infty: 5.165e-01 Divergence time: 1.06901 first: 4.491e-02 second: 6.127e-02 infty: 5.212e-01 Divergence time: 1.07172 first: 4.473e-02 second: 6.110e-02 infty: 5.258e-01 Divergence time: 1.07444 first: 4.465e-02 second: 6.106e-02 infty: 5.313e-01 Divergence time: 1.07714 first: 4.445e-02 second: 6.090e-02 infty: 5.361e-01 Divergence time: 1.07984 first: 4.427e-02 second: 6.075e-02 infty: 5.409e-01 Divergence time: 1.08254 first: 4.420e-02 second: 6.071e-02 infty: 5.459e-01 Divergence time: 1.08523 first: 4.403e-02 second: 6.056e-02 infty: 5.505e-01 Divergence time: 1.08791 first: 4.385e-02 second: 6.040e-02 infty: 5.549e-01 Divergence time: 1.09059 first: 4.377e-02 second: 6.035e-02 infty: 5.604e-01 Divergence time: 1.09327 first: 4.361e-02 second: 6.020e-02 infty: 5.709e-01 Divergence time: 1.09594 first: 4.344e-02 second: 6.004e-02 infty: 5.819e-01 Divergence time: 1.0986 first: 4.337e-02 second: 6.002e-02 infty: 5.922e-01 Divergence time: 1.10126 first: 4.321e-02 second: 5.988e-02 infty: 6.007e-01 Divergence time: 1.10392 first: 4.313e-02 second: 5.985e-02 infty: 6.082e-01 Divergence time: 1.10657 first: 4.295e-02 second: 5.972e-02 infty: 6.141e-01 Divergence time: 1.10922 first: 4.288e-02 second: 5.970e-02 infty: 6.195e-01 Divergence time: 1.11187 first: 4.272e-02 second: 5.957e-02 infty: 6.237e-01 Divergence time: 1.1145 first: 4.255e-02 second: 5.942e-02 infty: 6.274e-01 Divergence time: 1.11714 first: 4.247e-02 second: 5.939e-02 infty: 6.312e-01 Divergence time: 1.11976 first: 4.230e-02 second: 5.926e-02 infty: 6.343e-01 Divergence time: 1.12238 first: 4.213e-02 second: 5.912e-02 infty: 6.371e-01 Divergence time: 1.125 first: 4.206e-02 second: 5.910e-02 infty: 6.400e-01 Divergence time: 1.12762 first: 4.190e-02 second: 5.897e-02 infty: 6.424e-01 Divergence time: 1.13023 first: 4.182e-02 second: 5.895e-02 infty: 6.448e-01 Divergence time: 1.13283 first: 4.164e-02 second: 5.883e-02 infty: 6.466e-01 Divergence time: 1.13544 first: 4.157e-02 second: 5.883e-02 infty: 6.484e-01 Divergence time: 1.13803 first: 4.140e-02 second: 5.872e-02 infty: 6.496e-01 Divergence time: 1.14063 first: 4.132e-02 second: 5.872e-02 infty: 6.507e-01 Divergence time: 1.14322 first: 4.114e-02 second: 5.861e-02 infty: 6.512e-01 Divergence time: 1.14581 first: 4.104e-02 second: 5.859e-02 infty: 6.517e-01 Divergence time: 1.14839 first: 4.098e-02 second: 5.860e-02 infty: 6.520e-01 Divergence time: 1.15097 first: 4.081e-02 second: 5.850e-02 infty: 6.513e-01 Divergence time: 1.15356 first: 4.073e-02 second: 5.849e-02 infty: 6.506e-01 Divergence time: 1.15613 first: 4.057e-02 second: 5.838e-02 infty: 6.490e-01 Divergence time: 1.1587 first: 4.049e-02 second: 5.839e-02 infty: 6.516e-01 Divergence time: 1.16127 first: 4.042e-02 second: 5.840e-02 infty: 6.586e-01 Divergence time: 1.16384 first: 4.026e-02 second: 5.830e-02 infty: 6.653e-01 Divergence time: 1.1664 first: 4.018e-02 second: 5.831e-02 infty: 6.715e-01 Divergence time: 1.16896 first: 4.003e-02 second: 5.822e-02 infty: 6.768e-01 Divergence time: 1.17152 first: 3.996e-02 second: 5.823e-02 infty: 6.831e-01 Divergence time: 1.17407 first: 3.981e-02 second: 5.814e-02 infty: 7.039e-01 Divergence time: 1.17662 first: 3.975e-02 second: 5.815e-02 infty: 7.279e-01 Divergence time: 1.17916 first: 3.958e-02 second: 5.805e-02 infty: 7.432e-01 Divergence time: 1.1817 first: 3.952e-02 second: 5.807e-02 infty: 7.550e-01 Divergence time: 1.18424 first: 3.947e-02 second: 5.809e-02 infty: 7.641e-01 Divergence time: 1.18678 first: 3.941e-02 second: 5.812e-02 infty: 7.714e-01 Divergence time: 1.18932 first: 3.936e-02 second: 5.816e-02 infty: 7.775e-01 Divergence time: 1.19186 first: 3.924e-02 second: 5.810e-02 infty: 7.823e-01 Divergence time: 1.19439 first: 3.921e-02 second: 5.813e-02 infty: 7.869e-01 Divergence time: 1.19692 first: 3.919e-02 second: 5.819e-02 infty: 7.913e-01 Divergence time: 1.19946 first: 3.918e-02 second: 5.826e-02 infty: 7.953e-01 Divergence time: 1.20199 first: 3.916e-02 second: 5.832e-02 infty: 7.988e-01 Divergence time: 1.20453 first: 3.922e-02 second: 5.847e-02 infty: 8.026e-01 Divergence time: 1.20707 first: 3.923e-02 second: 5.854e-02 infty: 8.053e-01 Divergence time: 1.20961 first: 3.921e-02 second: 5.861e-02 infty: 8.075e-01 Divergence time: 1.21215 first: 3.912e-02 second: 5.858e-02 infty: 8.082e-01 Divergence time: 1.21468 first: 3.910e-02 second: 5.864e-02 infty: 8.089e-01 Divergence time: 1.21721 first: 3.909e-02 second: 5.870e-02 infty: 8.104e-01 Divergence time: 1.21975 first: 3.908e-02 second: 5.877e-02 infty: 8.111e-01 Divergence time: 1.22228 first: 3.910e-02 second: 5.885e-02 infty: 8.109e-01 Divergence time: 1.22481 first: 3.913e-02 second: 5.895e-02 infty: 8.205e-01 Divergence time: 1.22736 first: 3.924e-02 second: 5.916e-02 infty: 8.452e-01 Divergence time: 1.2299 first: 3.926e-02 second: 5.929e-02 infty: 8.641e-01 Divergence time: 1.23245 first: 3.940e-02 second: 5.954e-02 infty: 8.873e-01 Divergence time: 1.23499 first: 3.937e-02 second: 5.960e-02 infty: 9.105e-01 Divergence time: 1.23751 first: 3.922e-02 second: 5.953e-02 infty: 9.324e-01 Divergence time: 1.24003 first: 3.918e-02 second: 5.957e-02 infty: 9.465e-01 Divergence time: 1.24253 first: 3.905e-02 second: 5.955e-02 infty: 9.646e-01 Divergence time: 1.24502 first: 3.903e-02 second: 5.960e-02 infty: 9.773e-01 Divergence time: 1.2475 first: 3.892e-02 second: 5.956e-02 infty: 9.931e-01 Divergence time: 1.24996 first: 3.883e-02 second: 5.954e-02 infty: 1.008e+00 Divergence time: 1.25241 first: 3.882e-02 second: 5.961e-02 infty: 1.021e+00 Divergence time: 1.25484 first: 3.871e-02 second: 5.959e-02 infty: 1.033e+00 Divergence time: 1.25727 first: 3.870e-02 second: 5.968e-02 infty: 1.045e+00 Divergence time: 1.25969 first: 3.870e-02 second: 5.977e-02 infty: 1.037e+00 Divergence time: 1.26209 first: 3.861e-02 second: 5.978e-02 infty: 1.036e+00 Divergence time: 1.26448 first: 3.854e-02 second: 5.981e-02 infty: 1.038e+00 Divergence time: 1.26686 first: 3.857e-02 second: 5.995e-02 infty: 1.042e+00 Divergence time: 1.26923 first: 3.850e-02 second: 6.001e-02 infty: 1.045e+00 Divergence time: 1.27158 first: 3.853e-02 second: 6.014e-02 infty: 1.045e+00 Divergence time: 1.27393 first: 3.858e-02 second: 6.032e-02 infty: 1.043e+00 Divergence time: 1.27627 first: 3.857e-02 second: 6.045e-02 infty: 1.036e+00 Divergence time: 1.27859 first: 3.862e-02 second: 6.068e-02 infty: 1.039e+00 Divergence time: 1.28091 first: 3.859e-02 second: 6.080e-02 infty: 1.082e+00 Divergence time: 1.28321 first: 3.864e-02 second: 6.105e-02 infty: 1.124e+00 Divergence time: 1.28551 first: 3.870e-02 second: 6.133e-02 infty: 1.166e+00 Divergence time: 1.28779 first: 3.872e-02 second: 6.156e-02 infty: 1.207e+00 Divergence time: 1.29007 first: 3.880e-02 second: 6.187e-02 infty: 1.246e+00 Divergence time: 1.29233 first: 3.888e-02 second: 6.221e-02 infty: 1.281e+00 Divergence time: 1.29459 first: 3.888e-02 second: 6.246e-02 infty: 1.314e+00 Divergence time: 1.29684 first: 3.893e-02 second: 6.279e-02 infty: 1.346e+00 Divergence time: 1.29907 first: 3.902e-02 second: 6.319e-02 infty: 1.380e+00 Divergence time: 1.3013 first: 3.902e-02 second: 6.348e-02 infty: 1.409e+00 Divergence time: 1.30352 first: 3.910e-02 second: 6.387e-02 infty: 1.434e+00 Divergence time: 1.30573 first: 3.915e-02 second: 6.424e-02 infty: 1.455e+00 Divergence time: 1.30793 first: 3.913e-02 second: 6.454e-02 infty: 1.472e+00 Divergence time: 1.31012 first: 3.918e-02 second: 6.490e-02 infty: 1.486e+00 Divergence time: 1.3123 first: 3.921e-02 second: 6.523e-02 infty: 1.494e+00 Divergence time: 1.31448 first: 3.924e-02 second: 6.554e-02 infty: 1.500e+00 Divergence time: 1.31664 first: 3.917e-02 second: 6.574e-02 infty: 1.501e+00 Divergence time: 1.31879 first: 3.918e-02 second: 6.600e-02 infty: 1.518e+00 Divergence time: 1.32094 first: 3.923e-02 second: 6.622e-02 infty: 1.526e+00 Divergence time: 1.32308 first: 3.927e-02 second: 6.643e-02 infty: 1.528e+00 Divergence time: 1.32522 first: 3.927e-02 second: 6.654e-02 infty: 1.525e+00 Divergence time: 1.32735 first: 3.927e-02 second: 6.660e-02 infty: 1.518e+00 Divergence time: 1.32947 first: 3.926e-02 second: 6.659e-02 infty: 1.507e+00 Divergence time: 1.33159 first: 3.925e-02 second: 6.656e-02 infty: 1.493e+00 Divergence time: 1.33369 first: 3.923e-02 second: 6.651e-02 infty: 1.475e+00 Divergence time: 1.3358 first: 3.918e-02 second: 6.642e-02 infty: 1.455e+00 Divergence time: 1.33789 first: 3.909e-02 second: 6.628e-02 infty: 1.432e+00 Divergence time: 1.33998 first: 3.898e-02 second: 6.606e-02 infty: 1.405e+00 Divergence time: 1.34206 first: 3.888e-02 second: 6.583e-02 infty: 1.378e+00 Divergence time: 1.34414 first: 3.878e-02 second: 6.556e-02 infty: 1.349e+00 Divergence time: 1.34621 first: 3.869e-02 second: 6.527e-02 infty: 1.318e+00 Divergence time: 1.34828 first: 3.868e-02 second: 6.503e-02 infty: 1.286e+00 Divergence time: 1.35034 first: 3.860e-02 second: 6.467e-02 infty: 1.252e+00 Divergence time: 1.3524 first: 3.860e-02 second: 6.442e-02 infty: 1.224e+00 Divergence time: 1.35445 first: 3.850e-02 second: 6.405e-02 infty: 1.224e+00 Divergence time: 1.3565 first: 3.850e-02 second: 6.381e-02 infty: 1.220e+00 Divergence time: 1.35854 first: 3.846e-02 second: 6.356e-02 infty: 1.215e+00 Divergence time: 1.36058 first: 3.837e-02 second: 6.327e-02 infty: 1.206e+00 Divergence time: 1.36261 first: 3.829e-02 second: 6.304e-02 infty: 1.195e+00 Divergence time: 1.36463 first: 3.820e-02 second: 6.287e-02 infty: 1.181e+00 Divergence time: 1.36665 first: 3.810e-02 second: 6.270e-02 infty: 1.163e+00 Divergence time: 1.36867 first: 3.809e-02 second: 6.266e-02 infty: 1.226e+00 Divergence time: 1.37067 first: 3.798e-02 second: 6.250e-02 infty: 1.284e+00 Divergence time: 1.37267 first: 3.797e-02 second: 6.244e-02 infty: 1.339e+00 Divergence time: 1.37465 first: 3.787e-02 second: 6.233e-02 infty: 1.386e+00 Divergence time: 1.37663 first: 3.776e-02 second: 6.221e-02 infty: 1.423e+00 Divergence time: 1.37859 first: 3.772e-02 second: 6.219e-02 infty: 1.483e+00 Divergence time: 1.38055 first: 3.769e-02 second: 6.224e-02 infty: 1.537e+00 Divergence time: 1.3825 first: 3.760e-02 second: 6.226e-02 infty: 1.584e+00 Divergence time: 1.38444 first: 3.757e-02 second: 6.241e-02 infty: 1.621e+00 Divergence time: 1.38638 first: 3.751e-02 second: 6.252e-02 infty: 1.646e+00 Divergence time: 1.3883 first: 3.743e-02 second: 6.264e-02 infty: 1.658e+00 Divergence time: 1.39022 first: 3.742e-02 second: 6.284e-02 infty: 1.663e+00 Divergence time: 1.39213 first: 3.744e-02 second: 6.311e-02 infty: 1.656e+00 Divergence time: 1.39404 first: 3.748e-02 second: 6.342e-02 infty: 1.740e+00 Divergence time: 1.39594 first: 3.756e-02 second: 6.372e-02 infty: 1.869e+00 Divergence time: 1.39783 first: 3.764e-02 second: 6.411e-02 infty: 1.988e+00 Divergence time: 1.39972 first: 3.767e-02 second: 6.459e-02 infty: 2.106e+00 Divergence time: 1.4016 first: 3.773e-02 second: 6.513e-02 infty: 2.196e+00 Divergence time: 1.40348 first: 3.782e-02 second: 6.572e-02 infty: 2.255e+00 Divergence time: 1.40535 first: 3.793e-02 second: 6.638e-02 infty: 2.327e+00 Divergence time: 1.40721 first: 3.803e-02 second: 6.706e-02 infty: 2.366e+00 Divergence time: 1.40907 first: 3.818e-02 second: 6.784e-02 infty: 2.391e+00 Divergence time: 1.41092 first: 3.834e-02 second: 6.867e-02 infty: 2.476e+00 Divergence time: 1.41277 first: 3.848e-02 second: 6.945e-02 infty: 2.540e+00 Divergence time: 1.41461 first: 3.867e-02 second: 7.021e-02 infty: 2.667e+00 Divergence time: 1.41646 first: 3.887e-02 second: 7.095e-02 infty: 2.705e+00 Divergence time: 1.41831 first: 3.913e-02 second: 7.176e-02 infty: 2.685e+00 Divergence time: 1.42016 first: 3.945e-02 second: 7.273e-02 infty: 2.595e+00 Divergence time: 1.42201 first: 3.970e-02 second: 7.343e-02 infty: 2.447e+00 Divergence time: 1.42387 first: 4.005e-02 second: 7.448e-02 infty: 2.241e+00 Divergence time: 1.42573 first: 4.044e-02 second: 7.563e-02 infty: 2.351e+00 Divergence time: 1.42761 first: 4.091e-02 second: 7.699e-02 infty: 2.572e+00 Divergence time: 1.4295 first: 4.140e-02 second: 7.839e-02 infty: 2.728e+00 Divergence time: 1.4314 first: 4.192e-02 second: 7.995e-02 infty: 2.888e+00 Divergence time: 1.43331 first: 4.236e-02 second: 8.141e-02 infty: 2.995e+00 Divergence time: 1.43522 first: 4.280e-02 second: 8.277e-02 infty: 3.019e+00 Divergence time: 1.43715 first: 4.326e-02 second: 8.423e-02 infty: 2.953e+00 Divergence time: 1.43909 first: 4.374e-02 second: 8.552e-02 infty: 2.791e+00 Divergence time: 1.44104 first: 4.415e-02 second: 8.657e-02 infty: 2.831e+00 Divergence time: 1.44301 first: 4.476e-02 second: 8.778e-02 infty: 2.922e+00 Divergence time: 1.44499 first: 4.529e-02 second: 8.876e-02 infty: 2.897e+00 Divergence time: 1.44699 first: 4.576e-02 second: 8.958e-02 infty: 2.785e+00 Divergence time: 1.44898 first: 4.603e-02 second: 9.011e-02 infty: 2.558e+00 Divergence time: 1.45098 first: 4.631e-02 second: 9.045e-02 infty: 2.272e+00 Divergence time: 1.45298 first: 4.669e-02 second: 9.084e-02 infty: 2.324e+00 Divergence time: 1.45499 first: 4.698e-02 second: 9.109e-02 infty: 2.373e+00 Divergence time: 1.457 first: 4.734e-02 second: 9.169e-02 infty: 2.418e+00 Divergence time: 1.45902 first: 4.769e-02 second: 9.249e-02 infty: 2.459e+00 Divergence time: 1.46104 first: 4.793e-02 second: 9.315e-02 infty: 2.493e+00 Divergence time: 1.46305 first: 4.819e-02 second: 9.391e-02 infty: 2.520e+00 Divergence time: 1.46507 first: 4.840e-02 second: 9.459e-02 infty: 2.698e+00 Divergence time: 1.4671 first: 4.862e-02 second: 9.504e-02 infty: 2.826e+00 Divergence time: 1.46913 first: 4.876e-02 second: 9.519e-02 infty: 2.820e+00 Divergence time: 1.47116 first: 4.897e-02 second: 9.498e-02 infty: 2.675e+00 Divergence time: 1.47319 first: 4.904e-02 second: 9.416e-02 infty: 2.564e+00 Divergence time: 1.47524 first: 4.921e-02 second: 9.311e-02 infty: 2.553e+00 Divergence time: 1.47729 first: 4.941e-02 second: 9.229e-02 infty: 2.435e+00 Divergence time: 1.47934 first: 4.955e-02 second: 9.181e-02 infty: 2.378e+00 Divergence time: 1.48139 first: 4.972e-02 second: 9.188e-02 infty: 2.338e+00 Divergence time: 1.48345 first: 4.975e-02 second: 9.255e-02 infty: 2.303e+00 Divergence time: 1.48552 first: 4.989e-02 second: 9.325e-02 infty: 2.245e+00 Divergence time: 1.48758 first: 4.994e-02 second: 9.364e-02 infty: 2.360e+00 Divergence time: 1.48966 first: 5.006e-02 second: 9.369e-02 infty: 2.459e+00 Divergence time: 1.49174 first: 5.019e-02 second: 9.324e-02 infty: 2.367e+00 Divergence time: 1.49382 first: 5.022e-02 second: 9.209e-02 infty: 2.107e+00 Divergence time: 1.49591 first: 5.020e-02 second: 9.109e-02 infty: 2.033e+00 Divergence time: 1.498 first: 5.022e-02 second: 9.076e-02 infty: 1.952e+00 Divergence time: 1.50009 first: 5.026e-02 second: 9.101e-02 infty: 1.855e+00 Divergence time: 1.50219 first: 5.041e-02 second: 9.190e-02 infty: 2.030e+00 Divergence time: 1.50429 first: 5.055e-02 second: 9.266e-02 infty: 2.402e+00 Divergence time: 1.5064 first: 5.076e-02 second: 9.323e-02 infty: 2.568e+00 Divergence time: 1.50852 first: 5.092e-02 second: 9.314e-02 infty: 2.480e+00 Divergence time: 1.51064 first: 5.092e-02 second: 9.238e-02 infty: 2.107e+00 Divergence time: 1.51277 first: 5.103e-02 second: 9.156e-02 infty: 1.995e+00 Divergence time: 1.51488 first: 5.095e-02 second: 9.093e-02 infty: 1.992e+00 Divergence time: 1.517 first: 5.098e-02 second: 9.104e-02 infty: 1.967e+00 Divergence time: 1.51912 first: 5.112e-02 second: 9.176e-02 infty: 2.001e+00 Divergence time: 1.52124 first: 5.125e-02 second: 9.255e-02 infty: 2.212e+00 Divergence time: 1.52336 first: 5.134e-02 second: 9.305e-02 infty: 2.333e+00 Divergence time: 1.52547 first: 5.125e-02 second: 9.271e-02 infty: 2.205e+00 Divergence time: 1.52758 first: 5.137e-02 second: 9.215e-02 infty: 1.925e+00 Divergence time: 1.52968 first: 5.146e-02 second: 9.142e-02 infty: 1.856e+00 Divergence time: 1.53179 first: 5.158e-02 second: 9.107e-02 infty: 1.783e+00 Divergence time: 1.5339 first: 5.173e-02 second: 9.132e-02 infty: 1.709e+00 Divergence time: 1.53601 first: 5.185e-02 second: 9.193e-02 infty: 1.630e+00 Divergence time: 1.53812 first: 5.204e-02 second: 9.285e-02 infty: 1.840e+00 Divergence time: 1.54023 first: 5.214e-02 second: 9.331e-02 infty: 1.971e+00 Divergence time: 1.54234 first: 5.218e-02 second: 9.340e-02 infty: 1.948e+00 Divergence time: 1.54445 first: 5.222e-02 second: 9.316e-02 infty: 1.754e+00 Divergence time: 1.54656 first: 5.231e-02 second: 9.278e-02 infty: 1.643e+00 Divergence time: 1.54866 first: 5.230e-02 second: 9.215e-02 infty: 1.689e+00 Divergence time: 1.55076 first: 5.236e-02 second: 9.196e-02 infty: 1.731e+00 Divergence time: 1.55286 first: 5.251e-02 second: 9.221e-02 infty: 1.769e+00 Divergence time: 1.55497 first: 5.261e-02 second: 9.260e-02 infty: 1.799e+00 Divergence time: 1.55708 first: 5.273e-02 second: 9.299e-02 infty: 1.829e+00 Divergence time: 1.55919 first: 5.284e-02 second: 9.355e-02 infty: 1.850e+00 Divergence time: 1.5613 first: 5.299e-02 second: 9.390e-02 infty: 1.865e+00 Divergence time: 1.56341 first: 5.306e-02 second: 9.396e-02 infty: 1.893e+00 Divergence time: 1.56552 first: 5.304e-02 second: 9.378e-02 infty: 1.905e+00 Divergence time: 1.56763 first: 5.301e-02 second: 9.355e-02 infty: 1.907e+00 Divergence time: 1.56974 first: 5.294e-02 second: 9.319e-02 infty: 1.905e+00 Divergence time: 1.57185 first: 5.285e-02 second: 9.284e-02 infty: 1.895e+00 Divergence time: 1.57396 first: 5.283e-02 second: 9.259e-02 infty: 1.881e+00 Divergence time: 1.57607 first: 5.281e-02 second: 9.226e-02 infty: 1.862e+00 Divergence time: 1.57817 first: 5.282e-02 second: 9.197e-02 infty: 1.839e+00 Divergence time: 1.58028 first: 5.279e-02 second: 9.180e-02 infty: 1.813e+00 Divergence time: 1.58239 first: 5.271e-02 second: 9.159e-02 infty: 1.804e+00 Divergence time: 1.5845 first: 5.264e-02 second: 9.143e-02 infty: 1.833e+00 Divergence time: 1.58661 first: 5.261e-02 second: 9.123e-02 infty: 1.827e+00 Divergence time: 1.58872 first: 5.259e-02 second: 9.098e-02 infty: 1.786e+00 Divergence time: 1.59083 first: 5.253e-02 second: 9.069e-02 infty: 1.717e+00 Divergence time: 1.59294 first: 5.244e-02 second: 9.045e-02 infty: 1.674e+00 Divergence time: 1.59506 first: 5.248e-02 second: 9.044e-02 infty: 1.621e+00 Divergence time: 1.59717 first: 5.224e-02 second: 9.013e-02 infty: 1.542e+00 Divergence time: 1.59928 first: 5.208e-02 second: 8.989e-02 infty: 1.528e+00 Divergence time: 1.6014 first: 5.211e-02 second: 8.992e-02 infty: 1.570e+00 Divergence time: 1.60352 first: 5.201e-02 second: 8.979e-02 infty: 1.595e+00 Divergence time: 1.60564 first: 5.190e-02 second: 8.964e-02 infty: 1.603e+00 Divergence time: 1.60776 first: 5.182e-02 second: 8.946e-02 infty: 1.598e+00 Divergence time: 1.60988 first: 5.174e-02 second: 8.932e-02 infty: 1.618e+00 Divergence time: 1.612 first: 5.167e-02 second: 8.917e-02 infty: 1.651e+00 Divergence time: 1.61412 first: 5.157e-02 second: 8.887e-02 infty: 1.714e+00 Divergence time: 1.61624 first: 5.145e-02 second: 8.857e-02 infty: 1.770e+00 Divergence time: 1.61836 first: 5.134e-02 second: 8.824e-02 infty: 1.818e+00 Divergence time: 1.62048 first: 5.125e-02 second: 8.795e-02 infty: 1.858e+00 Divergence time: 1.62261 first: 5.128e-02 second: 8.782e-02 infty: 1.893e+00 Divergence time: 1.62474 first: 5.121e-02 second: 8.748e-02 infty: 1.918e+00 Divergence time: 1.62688 first: 5.107e-02 second: 8.707e-02 infty: 1.934e+00 Divergence time: 1.62901 first: 5.091e-02 second: 8.660e-02 infty: 1.943e+00 Divergence time: 1.63114 first: 5.078e-02 second: 8.624e-02 infty: 1.946e+00 Divergence time: 1.63327 first: 5.067e-02 second: 8.585e-02 infty: 1.944e+00 Divergence time: 1.6354 first: 5.060e-02 second: 8.550e-02 infty: 1.935e+00 Divergence time: 1.63754 first: 5.053e-02 second: 8.519e-02 infty: 1.918e+00 Divergence time: 1.63967 first: 5.041e-02 second: 8.491e-02 infty: 1.895e+00 Divergence time: 1.6418 first: 5.034e-02 second: 8.466e-02 infty: 1.866e+00 Divergence time: 1.64394 first: 5.044e-02 second: 8.452e-02 infty: 1.830e+00 Divergence time: 1.64609 first: 5.044e-02 second: 8.429e-02 infty: 1.784e+00 Divergence time: 1.64823 first: 5.035e-02 second: 8.399e-02 infty: 1.728e+00 Divergence time: 1.65038 first: 5.025e-02 second: 8.369e-02 infty: 1.664e+00 Divergence time: 1.65252 first: 5.013e-02 second: 8.335e-02 infty: 1.593e+00 Divergence time: 1.65468 first: 5.015e-02 second: 8.306e-02 infty: 1.518e+00 Divergence time: 1.65684 first: 4.997e-02 second: 8.255e-02 infty: 1.436e+00 Divergence time: 1.659 first: 4.980e-02 second: 8.199e-02 infty: 1.348e+00 Divergence time: 1.66116 first: 4.967e-02 second: 8.150e-02 infty: 1.254e+00 Divergence time: 1.66332 first: 4.950e-02 second: 8.086e-02 infty: 1.157e+00 Divergence time: 1.66547 first: 4.926e-02 second: 8.006e-02 infty: 1.096e+00 Divergence time: 1.66763 first: 4.907e-02 second: 7.937e-02 infty: 1.080e+00 Divergence time: 1.66979 first: 4.890e-02 second: 7.873e-02 infty: 1.060e+00 Divergence time: 1.67195 first: 4.873e-02 second: 7.824e-02 infty: 1.036e+00 Divergence time: 1.67411 first: 4.853e-02 second: 7.775e-02 infty: 1.009e+00 Divergence time: 1.67625 first: 4.820e-02 second: 7.706e-02 infty: 9.966e-01 Divergence time: 1.67839 first: 4.805e-02 second: 7.651e-02 infty: 9.988e-01 Divergence time: 1.68054 first: 4.794e-02 second: 7.604e-02 infty: 9.901e-01 Divergence time: 1.68268 first: 4.780e-02 second: 7.554e-02 infty: 9.371e-01 Divergence time: 1.68483 first: 4.765e-02 second: 7.509e-02 infty: 9.244e-01 Divergence time: 1.68696 first: 4.733e-02 second: 7.447e-02 infty: 9.240e-01 Divergence time: 1.68909 first: 4.708e-02 second: 7.397e-02 infty: 9.121e-01 Divergence time: 1.69122 first: 4.690e-02 second: 7.352e-02 infty: 8.887e-01 Divergence time: 1.69335 first: 4.678e-02 second: 7.312e-02 infty: 8.553e-01 Divergence time: 1.69546 first: 4.646e-02 second: 7.247e-02 infty: 8.141e-01 Divergence time: 1.69757 first: 4.623e-02 second: 7.202e-02 infty: 7.710e-01 Divergence time: 1.69969 first: 4.608e-02 second: 7.162e-02 infty: 7.371e-01 Divergence time: 1.70182 first: 4.613e-02 second: 7.150e-02 infty: 7.472e-01 Divergence time: 1.70395 first: 4.604e-02 second: 7.128e-02 infty: 7.415e-01 Divergence time: 1.70608 first: 4.592e-02 second: 7.103e-02 infty: 7.658e-01 Divergence time: 1.70819 first: 4.559e-02 second: 7.051e-02 infty: 8.126e-01 Divergence time: 1.71031 first: 4.542e-02 second: 7.030e-02 infty: 8.838e-01 Divergence time: 1.71242 first: 4.528e-02 second: 7.016e-02 infty: 9.374e-01 Divergence time: 1.71454 first: 4.517e-02 second: 7.012e-02 infty: 9.681e-01 Divergence time: 1.71667 first: 4.525e-02 second: 7.033e-02 infty: 9.962e-01 Divergence time: 1.7188 first: 4.521e-02 second: 7.036e-02 infty: 1.023e+00 Divergence time: 1.72093 first: 4.520e-02 second: 7.035e-02 infty: 1.022e+00 Divergence time: 1.72306 first: 4.517e-02 second: 7.036e-02 infty: 9.917e-01 Divergence time: 1.72519 first: 4.513e-02 second: 7.039e-02 infty: 9.342e-01 Divergence time: 1.72734 first: 4.525e-02 second: 7.052e-02 infty: 9.587e-01 Divergence time: 1.72948 first: 4.520e-02 second: 7.052e-02 infty: 1.047e+00 Divergence time: 1.73165 first: 4.535e-02 second: 7.079e-02 infty: 1.120e+00 Divergence time: 1.73381 first: 4.536e-02 second: 7.083e-02 infty: 1.165e+00 Divergence time: 1.73598 first: 4.533e-02 second: 7.087e-02 infty: 1.184e+00 Divergence time: 1.73814 first: 4.521e-02 second: 7.072e-02 infty: 1.177e+00 Divergence time: 1.74032 first: 4.532e-02 second: 7.093e-02 infty: 1.183e+00 Divergence time: 1.7425 first: 4.527e-02 second: 7.102e-02 infty: 1.189e+00 Divergence time: 1.7447 first: 4.543e-02 second: 7.137e-02 infty: 1.173e+00 Divergence time: 1.74691 first: 4.549e-02 second: 7.160e-02 infty: 1.132e+00 Divergence time: 1.74913 first: 4.570e-02 second: 7.201e-02 infty: 1.073e+00 Divergence time: 1.75135 first: 4.574e-02 second: 7.227e-02 infty: 1.052e+00 Divergence time: 1.75357 first: 4.578e-02 second: 7.243e-02 infty: 1.140e+00 Divergence time: 1.75581 first: 4.598e-02 second: 7.280e-02 infty: 1.215e+00 Divergence time: 1.75805 first: 4.600e-02 second: 7.301e-02 infty: 1.271e+00 Divergence time: 1.76029 first: 4.601e-02 second: 7.312e-02 infty: 1.308e+00 Divergence time: 1.76253 first: 4.600e-02 second: 7.320e-02 infty: 1.325e+00 Divergence time: 1.76477 first: 4.598e-02 second: 7.322e-02 infty: 1.324e+00 Divergence time: 1.76701 first: 4.592e-02 second: 7.325e-02 infty: 1.303e+00 Divergence time: 1.76925 first: 4.584e-02 second: 7.325e-02 infty: 1.299e+00 Divergence time: 1.77147 first: 4.563e-02 second: 7.293e-02 infty: 1.299e+00 Divergence time: 1.77369 first: 4.564e-02 second: 7.291e-02 infty: 1.285e+00 Divergence time: 1.7759 first: 4.563e-02 second: 7.289e-02 infty: 1.254e+00 Divergence time: 1.77812 first: 4.567e-02 second: 7.299e-02 infty: 1.334e+00 Divergence time: 1.78032 first: 4.549e-02 second: 7.287e-02 infty: 1.432e+00 Divergence time: 1.78252 first: 4.543e-02 second: 7.299e-02 infty: 1.531e+00 Divergence time: 1.78471 first: 4.539e-02 second: 7.321e-02 infty: 1.625e+00 Divergence time: 1.78689 first: 4.520e-02 second: 7.313e-02 infty: 1.704e+00 Divergence time: 1.78906 first: 4.518e-02 second: 7.336e-02 infty: 1.775e+00 Divergence time: 1.79124 first: 4.522e-02 second: 7.368e-02 infty: 1.825e+00 Divergence time: 1.79341 first: 4.529e-02 second: 7.392e-02 infty: 1.863e+00 Divergence time: 1.79559 first: 4.539e-02 second: 7.421e-02 infty: 1.881e+00 Divergence time: 1.79776 first: 4.546e-02 second: 7.454e-02 infty: 1.876e+00 Divergence time: 1.79991 first: 4.529e-02 second: 7.448e-02 infty: 1.843e+00 Divergence time: 1.80206 first: 4.532e-02 second: 7.470e-02 infty: 1.864e+00 Divergence time: 1.80422 first: 4.539e-02 second: 7.479e-02 infty: 1.872e+00 Divergence time: 1.80637 first: 4.542e-02 second: 7.499e-02 infty: 1.853e+00 Divergence time: 1.80852 first: 4.548e-02 second: 7.520e-02 infty: 1.808e+00 Divergence time: 1.81067 first: 4.557e-02 second: 7.543e-02 infty: 1.767e+00 Divergence time: 1.81282 first: 4.567e-02 second: 7.567e-02 infty: 1.918e+00 Divergence time: 1.81497 first: 4.580e-02 second: 7.589e-02 infty: 2.074e+00 Divergence time: 1.81712 first: 4.586e-02 second: 7.614e-02 infty: 2.212e+00 Divergence time: 1.81928 first: 4.591e-02 second: 7.644e-02 infty: 2.331e+00 Divergence time: 1.82143 first: 4.599e-02 second: 7.668e-02 infty: 2.423e+00 Divergence time: 1.82358 first: 4.608e-02 second: 7.677e-02 infty: 2.480e+00 Divergence time: 1.82573 first: 4.620e-02 second: 7.682e-02 infty: 2.501e+00 Divergence time: 1.82788 first: 4.625e-02 second: 7.689e-02 infty: 2.481e+00 Divergence time: 1.83003 first: 4.630e-02 second: 7.696e-02 infty: 2.423e+00 Divergence time: 1.83218 first: 4.629e-02 second: 7.699e-02 infty: 2.497e+00 Divergence time: 1.83434 first: 4.629e-02 second: 7.689e-02 infty: 2.547e+00 Divergence time: 1.83652 first: 4.658e-02 second: 7.719e-02 infty: 2.570e+00 Divergence time: 1.8387 first: 4.672e-02 second: 7.730e-02 infty: 2.544e+00 Divergence time: 1.84088 first: 4.682e-02 second: 7.740e-02 infty: 2.476e+00 Divergence time: 1.84306 first: 4.686e-02 second: 7.738e-02 infty: 2.369e+00 Divergence time: 1.84524 first: 4.684e-02 second: 7.717e-02 infty: 2.227e+00 Divergence time: 1.84742 first: 4.684e-02 second: 7.698e-02 infty: 2.056e+00 Divergence time: 1.84959 first: 4.684e-02 second: 7.677e-02 infty: 1.863e+00 Divergence time: 1.85177 first: 4.678e-02 second: 7.652e-02 infty: 1.681e+00 Divergence time: 1.85399 first: 4.702e-02 second: 7.675e-02 infty: 1.676e+00 Divergence time: 1.8562 first: 4.701e-02 second: 7.670e-02 infty: 1.646e+00 Divergence time: 1.85841 first: 4.698e-02 second: 7.660e-02 infty: 1.735e+00 Divergence time: 1.86062 first: 4.688e-02 second: 7.646e-02 infty: 1.846e+00 Divergence time: 1.86284 first: 4.681e-02 second: 7.629e-02 infty: 1.916e+00 Divergence time: 1.86505 first: 4.675e-02 second: 7.605e-02 infty: 1.945e+00 Divergence time: 1.8673 first: 4.704e-02 second: 7.634e-02 infty: 1.974e+00 Divergence time: 1.86955 first: 4.702e-02 second: 7.634e-02 infty: 1.934e+00 Divergence time: 1.8718 first: 4.695e-02 second: 7.613e-02 infty: 1.814e+00 Divergence time: 1.87405 first: 4.685e-02 second: 7.584e-02 infty: 1.783e+00 Divergence time: 1.87629 first: 4.676e-02 second: 7.551e-02 infty: 1.773e+00 Divergence time: 1.87859 first: 4.711e-02 second: 7.581e-02 infty: 1.735e+00 Divergence time: 1.88088 first: 4.717e-02 second: 7.569e-02 infty: 1.648e+00 Divergence time: 1.88317 first: 4.712e-02 second: 7.546e-02 infty: 1.516e+00 Divergence time: 1.88546 first: 4.709e-02 second: 7.524e-02 infty: 1.356e+00 Divergence time: 1.88775 first: 4.703e-02 second: 7.507e-02 infty: 1.175e+00 Divergence time: 1.89004 first: 4.701e-02 second: 7.502e-02 infty: 1.076e+00 Divergence time: 1.89233 first: 4.695e-02 second: 7.499e-02 infty: 1.137e+00 Divergence time: 1.89462 first: 4.687e-02 second: 7.505e-02 infty: 1.185e+00 Divergence time: 1.89691 first: 4.682e-02 second: 7.516e-02 infty: 1.220e+00 Divergence time: 1.8992 first: 4.673e-02 second: 7.529e-02 infty: 1.242e+00 Divergence time: 1.90149 first: 4.665e-02 second: 7.542e-02 infty: 1.251e+00 Divergence time: 1.90373 first: 4.603e-02 second: 7.473e-02 infty: 1.241e+00 Divergence time: 1.90597 first: 4.590e-02 second: 7.456e-02 infty: 1.225e+00 Divergence time: 1.90821 first: 4.586e-02 second: 7.453e-02 infty: 1.200e+00 Divergence time: 1.91045 first: 4.576e-02 second: 7.447e-02 infty: 1.204e+00 Divergence time: 1.91269 first: 4.569e-02 second: 7.431e-02 infty: 1.246e+00 Divergence time: 1.91493 first: 4.564e-02 second: 7.413e-02 infty: 1.190e+00 Divergence time: 1.91717 first: 4.558e-02 second: 7.385e-02 infty: 1.054e+00 Divergence time: 1.9194 first: 4.550e-02 second: 7.357e-02 infty: 1.051e+00 Divergence time: 1.92164 first: 4.543e-02 second: 7.329e-02 infty: 1.149e+00 Divergence time: 1.92388 first: 4.540e-02 second: 7.311e-02 infty: 1.218e+00 Divergence time: 1.92612 first: 4.533e-02 second: 7.292e-02 infty: 1.212e+00 Divergence time: 1.92836 first: 4.531e-02 second: 7.285e-02 infty: 1.179e+00 Divergence time: 1.9306 first: 4.526e-02 second: 7.275e-02 infty: 1.170e+00 Divergence time: 1.93284 first: 4.516e-02 second: 7.258e-02 infty: 1.116e+00 Divergence time: 1.93508 first: 4.505e-02 second: 7.245e-02 infty: 1.031e+00 Divergence time: 1.93731 first: 4.496e-02 second: 7.238e-02 infty: 9.281e-01 Divergence time: 1.93955 first: 4.484e-02 second: 7.230e-02 infty: 9.007e-01 Divergence time: 1.94179 first: 4.467e-02 second: 7.210e-02 infty: 9.357e-01 Divergence time: 1.94403 first: 4.455e-02 second: 7.190e-02 infty: 9.695e-01 Divergence time: 1.94627 first: 4.448e-02 second: 7.173e-02 infty: 1.002e+00 Divergence time: 1.94851 first: 4.437e-02 second: 7.146e-02 infty: 1.032e+00 Divergence time: 1.95085 first: 4.529e-02 second: 7.251e-02 infty: 1.074e+00 Divergence time: 1.95319 first: 4.555e-02 second: 7.277e-02 infty: 1.106e+00 Divergence time: 1.95553 first: 4.566e-02 second: 7.284e-02 infty: 1.133e+00 Divergence time: 1.95787 first: 4.566e-02 second: 7.281e-02 infty: 1.157e+00 Divergence time: 1.96021 first: 4.562e-02 second: 7.278e-02 infty: 1.178e+00 Divergence time: 1.96255 first: 4.557e-02 second: 7.274e-02 infty: 1.196e+00 Divergence time: 1.96489 first: 4.553e-02 second: 7.261e-02 infty: 1.211e+00 Divergence time: 1.96723 first: 4.549e-02 second: 7.246e-02 infty: 1.224e+00 Divergence time: 1.96957 first: 4.543e-02 second: 7.227e-02 infty: 1.234e+00 Divergence time: 1.97191 first: 4.540e-02 second: 7.209e-02 infty: 1.242e+00 Divergence time: 1.97425 first: 4.531e-02 second: 7.187e-02 infty: 1.248e+00 Divergence time: 1.97659 first: 4.524e-02 second: 7.166e-02 infty: 1.251e+00 Divergence time: 1.97894 first: 4.514e-02 second: 7.148e-02 infty: 1.255e+00 Divergence time: 1.98128 first: 4.504e-02 second: 7.132e-02 infty: 1.261e+00 Divergence time: 1.98362 first: 4.501e-02 second: 7.123e-02 infty: 1.264e+00 Divergence time: 1.98596 first: 4.497e-02 second: 7.114e-02 infty: 1.264e+00 Divergence time: 1.9883 first: 4.491e-02 second: 7.114e-02 infty: 1.261e+00 Divergence time: 1.99064 first: 4.486e-02 second: 7.113e-02 infty: 1.254e+00 Divergence time: 1.99251 first: 4.024e-02 second: 6.511e-02 infty: 1.196e+00 Divergence time: 1.99438 first: 3.890e-02 second: 6.305e-02 infty: 1.163e+00 Divergence time: 1.99626 first: 3.833e-02 second: 6.201e-02 infty: 1.142e+00 Divergence time: 1.99813 first: 3.801e-02 second: 6.141e-02 infty: 1.126e+00 Divergence time: 2 first: 3.779e-02 second: 6.099e-02 infty: 1.113e+00 gerris-snapshot-131206/test/reynolds/skew/0000755000175100017510000000000012250371673015540 500000000000000gerris-snapshot-131206/test/reynolds/skew/div5.ref0000644000175100017510000001415212250371171017021 00000000000000Divergence time: 0 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.025 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.05 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.075 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.1 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.125 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.15 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.175 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.2 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.225 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.25 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.275 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.3 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.325 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.35 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.375 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.4 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.425 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.45 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.475 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.5 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.525 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.55 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.575 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.6 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.625 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.65 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.675 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.7 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.725 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.75 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.775 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.8 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.825 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.85 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.875 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.9 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.925 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.95 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 0.975 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.025 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.05 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.075 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.1 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.125 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.15 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.175 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.2 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.225 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.25 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.275 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.3 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.325 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.35 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.375 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.4 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.425 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.45 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.475 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.5 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.525 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.55 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.575 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.6 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.625 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.65 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.675 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.7 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.725 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.75 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.775 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.8 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.825 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.85 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.875 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.9 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.925 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.95 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 1.975 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 Divergence time: 2 first: 1.208e-02 second: 3.822e-02 infty: 1.522e-01 gerris-snapshot-131206/test/reynolds/skew/skew.gfs0000644000175100017510000000341212250371171017123 00000000000000# Title: Numerical viscosity for the skew-symmetric scheme # # Description: # # Same as the previous test but using the skew-symmetric module. # # \begin{figure}[htbp] # \caption{\label{divmax}Evolution of the maximum divergence.} # \begin{center} # \includegraphics[width=0.8\hsize]{divmax.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{divL2}Evolution of the L2 norm of the divergence.} # \begin{center} # \includegraphics[width=0.8\hsize]{divL2.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{kinetic}Evolution of the kinetic energy.} # \begin{center} # \includegraphics[width=0.8\hsize]{kinetic.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{accuracy}Accuracy of the solution as a function of the level of refinement.} # \begin{center} # \includegraphics[width=0.8\hsize]{accuracy.eps} # \end{center} # \end{figure} # # Author: Daniel Fuster # Command: sh skew.sh skew.gfs 1 # Version: 110723 # Required files: skew.sh div5.ref div6.ref div7.ref reynolds.ref # Running time: 50 seconds # Generated files: divmax.eps divL2.eps kinetic.eps accuracy.eps # GModule skewsymmetric 1 2 GfsSkewSymmetric GfsBox GfsGEdge {} { Time { end = 2 } Refine LEVEL Init {} { U0 = (- cos (2.*M_PI*x)*sin (2.*M_PI*y)) V0 = (sin (2.*M_PI*x)*cos (2.*M_PI*y)) U = U0 V = V0 } ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } OutputScalarNorm { istep = 1 } divLEVEL { v = Divergence } OutputScalarSum { istep = 1 } kineticLEVEL { v = Velocity2 } OutputErrorNorm { start = end } { awk '{ print $3,$5,$7,$9 }' > errorLEVEL.dat } { v = Velocity } { s = sqrt(U0*U0+V0*V0) v = E relative = 1 } } GfsBox {} 1 1 right 1 1 top gerris-snapshot-131206/test/reynolds/skew/skew.sh0000644000175100017510000000365012250371171016762 00000000000000if test x$donotrun != xtrue; then tmp=`mktemp -d` for level in 5 6 7; do if sed "s/LEVEL/$level/g" < $1 | gerris2D -; then : awk '{print 2**'$level', $0}' error$level.dat >> $tmp/error.dat else exit 1 fi done cat $tmp/error.dat > error rm -rf $tmp fi if cat < 0.01*Curve(div+'.ref',3,9).mean() or\ (Curve(div,3,7) - Curve(div+'.ref',3,7)).max() > 0.01*Curve(div+'.ref',3,7).mean(): exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/reynolds/skew/reynolds.ref0000644000175100017510000000001412250371171020001 000000000000005 1 6 1 7 1 gerris-snapshot-131206/test/reynolds/skew/div6.ref0000644000175100017510000003043212250371171017021 00000000000000Divergence time: 0 first: 3.057e-03 second: 1.360e-02 infty: 7.687e-02 Divergence time: 0.0125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.025 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.0375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.05 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.0625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.075 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.0875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.1 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.1125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.1375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.15 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.1625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.175 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.1875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.2 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.2125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.225 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.2375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.25 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.2625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.275 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.2875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.3 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.3125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.325 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.3375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.35 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.3625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.3875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.4 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.4125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.425 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.4375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.45 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.4625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.475 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.4875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.5 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.5125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.525 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.5375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.55 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.5625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.575 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.5875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.6 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.6125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.6375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.65 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.6625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.675 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.6875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.7 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.7125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.725 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.7375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.75 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.7625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.775 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.7875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.8 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.8125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.825 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.8375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.85 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.8625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.8875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.9 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.9125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.925 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.9375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.95 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.9625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.975 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 0.9875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.0125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.025 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.0375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.05 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.0625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.075 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.0875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.1 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.1125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.1375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.15 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.1625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.175 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.1875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.2 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.2125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.225 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.2375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.25 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.2625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.275 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.2875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.3 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.3125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.325 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.3375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.35 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.3625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.3875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.4 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.4125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.425 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.4375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.45 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.4625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.475 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.4875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.5 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.5125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.525 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.5375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.55 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.5625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.575 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.5875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.6 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.6125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.6375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.65 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.6625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.675 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.6875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.7 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.7125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.725 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.7375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.75 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.7625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.775 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.7875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.8 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.8125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.825 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.8375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.85 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.8625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.8875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.9 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.9125 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.925 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.9375 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.95 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.9625 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.975 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 1.9875 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 Divergence time: 2 first: 3.056e-03 second: 1.360e-02 infty: 7.686e-02 gerris-snapshot-131206/test/reynolds/skew/div7.ref0000644000175100017510000006143212250371171017026 00000000000000Divergence time: 0 first: 7.738e-04 second: 4.817e-03 infty: 3.861e-02 Divergence time: 0.00625 first: 7.672e-04 second: 4.817e-03 infty: 3.854e-02 Divergence time: 0.0125 first: 7.666e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.01875 first: 7.670e-04 second: 4.817e-03 infty: 3.854e-02 Divergence time: 0.025 first: 7.664e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.03125 first: 7.664e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.0375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.04375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.05 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.05625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.0625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.06875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.075 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.08125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.0875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.09375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.1 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.10625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.1125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.11875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.13125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.1375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.14375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.15 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.15625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.1625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.16875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.175 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.18125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.1875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.19375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.2 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.20625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.2125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.21875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.225 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.23125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.2375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.24375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.25 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.25625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.2625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.26875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.275 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.28125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.2875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.29375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.3 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.30625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.3125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.31875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.325 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.33125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.3375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.34375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.35 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.35625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.3625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.36875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.38125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.3875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.39375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.4 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.40625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.4125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.41875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.425 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.43125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.4375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.44375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 0.45 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.45625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.4625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.46875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.475 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.48125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.4875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.49375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.5 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.50625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.5125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.51875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.525 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.53125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.5375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.54375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.55 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.55625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.5625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.56875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.575 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.58125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.5875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.59375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.6 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.60625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.6125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.61875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.63125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.6375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.64375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.65 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.65625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.6625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.66875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.675 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.68125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.6875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.69375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.7 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.70625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.7125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.71875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.725 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.73125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.7375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.74375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.75 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.75625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.7625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.76875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.775 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.78125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.7875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.79375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.8 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.80625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.8125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.81875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.825 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.83125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.8375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.84375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.85 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.85625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.8625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.86875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.88125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.8875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.89375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.9 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.90625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.9125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.91875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.925 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.93125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.9375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.94375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.95 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.95625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.9625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.96875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.975 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.98125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.9875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 0.99375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.00625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.0125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.01875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.025 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.03125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.0375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.04375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.05 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.05625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.0625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.06875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.075 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.08125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.0875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.09375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.1 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.10625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.1125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.11875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.13125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.1375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.14375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.15 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.15625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.1625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.16875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.175 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.18125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.1875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.19375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.2 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.20625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.2125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.21875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.225 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.23125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.2375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.24375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.25 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.25625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.2625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.26875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.275 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.28125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.2875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.29375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.3 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.30625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.3125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.31875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.325 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.33125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.3375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.34375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.35 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.35625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.3625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.36875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.38125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.3875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.39375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.4 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.40625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.4125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.41875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.425 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.43125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.4375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.44375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.45 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.45625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.4625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.46875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.475 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.48125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.4875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.49375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.5 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.50625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.5125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.51875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.525 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.53125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.5375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.54375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.55 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.55625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.5625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.56875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.575 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.58125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.5875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.59375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.6 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.60625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.6125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.61875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.63125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.6375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.64375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.65 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.65625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.6625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.66875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.675 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.68125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.6875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.69375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.7 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.70625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.7125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.71875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.725 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.73125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.7375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.74375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.75 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.75625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.7625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.76875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.775 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.78125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.7875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.79375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.8 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.80625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.8125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.81875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.825 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.83125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.8375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.84375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.85 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.85625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.8625 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.86875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 1.875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 1.88125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 1.8875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.89375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.9 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.90625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 1.9125 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 1.91875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 1.925 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 1.93125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.9375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.94375 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.95 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 1.95625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 1.9625 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 1.96875 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 1.975 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.98125 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.9875 first: 7.663e-04 second: 4.817e-03 infty: 3.852e-02 Divergence time: 1.99375 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 Divergence time: 2 first: 7.663e-04 second: 4.817e-03 infty: 3.853e-02 gerris-snapshot-131206/test/reynolds/stream/0000755000175100017510000000000012250371673016062 500000000000000gerris-snapshot-131206/test/reynolds/stream/div5.ref0000644000175100017510000001455012250371171017345 00000000000000(dx("U")... time: 0 first: 1.671e-06 second: 6.208e-06 infty: 1.118e-04 (dx("U")... time: 0.0253165 first: 4.665e-04 second: 7.378e-04 infty: 2.760e-03 (dx("U")... time: 0.0506329 first: 6.651e-04 second: 1.052e-03 infty: 3.988e-03 (dx("U")... time: 0.0759494 first: 7.808e-04 second: 1.209e-03 infty: 5.066e-03 (dx("U")... time: 0.101266 first: 8.180e-04 second: 1.239e-03 infty: 5.404e-03 (dx("U")... time: 0.126582 first: 8.143e-04 second: 1.191e-03 infty: 5.195e-03 (dx("U")... time: 0.151899 first: 7.780e-04 second: 1.115e-03 infty: 4.663e-03 (dx("U")... time: 0.177215 first: 7.424e-04 second: 1.055e-03 infty: 4.058e-03 (dx("U")... time: 0.202532 first: 7.317e-04 second: 1.031e-03 infty: 3.556e-03 (dx("U")... time: 0.227848 first: 7.262e-04 second: 1.037e-03 infty: 3.257e-03 (dx("U")... time: 0.253165 first: 7.174e-04 second: 1.059e-03 infty: 3.510e-03 (dx("U")... time: 0.278481 first: 7.150e-04 second: 1.087e-03 infty: 3.585e-03 (dx("U")... time: 0.303797 first: 7.269e-04 second: 1.117e-03 infty: 3.525e-03 (dx("U")... time: 0.329114 first: 7.488e-04 second: 1.151e-03 infty: 3.765e-03 (dx("U")... time: 0.35443 first: 7.740e-04 second: 1.184e-03 infty: 3.948e-03 (dx("U")... time: 0.379747 first: 8.007e-04 second: 1.212e-03 infty: 4.032e-03 (dx("U")... time: 0.405063 first: 8.230e-04 second: 1.232e-03 infty: 4.015e-03 (dx("U")... time: 0.43038 first: 8.342e-04 second: 1.243e-03 infty: 3.920e-03 (dx("U")... time: 0.455696 first: 8.493e-04 second: 1.248e-03 infty: 3.786e-03 (dx("U")... time: 0.481013 first: 8.571e-04 second: 1.251e-03 infty: 3.715e-03 (dx("U")... time: 0.506329 first: 8.611e-04 second: 1.257e-03 infty: 3.731e-03 (dx("U")... time: 0.531646 first: 8.661e-04 second: 1.267e-03 infty: 3.751e-03 (dx("U")... time: 0.556962 first: 8.715e-04 second: 1.280e-03 infty: 3.799e-03 (dx("U")... time: 0.582278 first: 8.828e-04 second: 1.297e-03 infty: 3.847e-03 (dx("U")... time: 0.607595 first: 8.971e-04 second: 1.314e-03 infty: 3.873e-03 (dx("U")... time: 0.632911 first: 9.163e-04 second: 1.331e-03 infty: 3.886e-03 (dx("U")... time: 0.658228 first: 9.347e-04 second: 1.345e-03 infty: 3.893e-03 (dx("U")... time: 0.683544 first: 9.520e-04 second: 1.358e-03 infty: 3.904e-03 (dx("U")... time: 0.708861 first: 9.671e-04 second: 1.370e-03 infty: 3.923e-03 (dx("U")... time: 0.734177 first: 9.792e-04 second: 1.381e-03 infty: 3.950e-03 (dx("U")... time: 0.759494 first: 9.922e-04 second: 1.392e-03 infty: 3.981e-03 (dx("U")... time: 0.78481 first: 1.006e-03 second: 1.403e-03 infty: 4.011e-03 (dx("U")... time: 0.810127 first: 1.020e-03 second: 1.415e-03 infty: 4.035e-03 (dx("U")... time: 0.835443 first: 1.033e-03 second: 1.428e-03 infty: 4.051e-03 (dx("U")... time: 0.860759 first: 1.045e-03 second: 1.440e-03 infty: 4.059e-03 (dx("U")... time: 0.886076 first: 1.058e-03 second: 1.453e-03 infty: 4.062e-03 (dx("U")... time: 0.911392 first: 1.072e-03 second: 1.466e-03 infty: 4.064e-03 (dx("U")... time: 0.936709 first: 1.086e-03 second: 1.478e-03 infty: 4.067e-03 (dx("U")... time: 0.962025 first: 1.098e-03 second: 1.490e-03 infty: 4.081e-03 (dx("U")... time: 0.987342 first: 1.110e-03 second: 1.501e-03 infty: 4.098e-03 (dx("U")... time: 1.01266 first: 1.123e-03 second: 1.512e-03 infty: 4.118e-03 (dx("U")... time: 1.03797 first: 1.135e-03 second: 1.523e-03 infty: 4.142e-03 (dx("U")... time: 1.06329 first: 1.147e-03 second: 1.533e-03 infty: 4.168e-03 (dx("U")... time: 1.08861 first: 1.158e-03 second: 1.544e-03 infty: 4.194e-03 (dx("U")... time: 1.11392 first: 1.169e-03 second: 1.555e-03 infty: 4.219e-03 (dx("U")... time: 1.13924 first: 1.180e-03 second: 1.567e-03 infty: 4.240e-03 (dx("U")... time: 1.16456 first: 1.192e-03 second: 1.578e-03 infty: 4.258e-03 (dx("U")... time: 1.18987 first: 1.204e-03 second: 1.590e-03 infty: 4.272e-03 (dx("U")... time: 1.21519 first: 1.217e-03 second: 1.602e-03 infty: 4.283e-03 (dx("U")... time: 1.24051 first: 1.231e-03 second: 1.614e-03 infty: 4.291e-03 (dx("U")... time: 1.26582 first: 1.245e-03 second: 1.626e-03 infty: 4.297e-03 (dx("U")... time: 1.29114 first: 1.259e-03 second: 1.638e-03 infty: 4.304e-03 (dx("U")... time: 1.31646 first: 1.274e-03 second: 1.650e-03 infty: 4.311e-03 (dx("U")... time: 1.34177 first: 1.288e-03 second: 1.661e-03 infty: 4.320e-03 (dx("U")... time: 1.36709 first: 1.302e-03 second: 1.672e-03 infty: 4.330e-03 (dx("U")... time: 1.39241 first: 1.316e-03 second: 1.684e-03 infty: 4.342e-03 (dx("U")... time: 1.41772 first: 1.329e-03 second: 1.695e-03 infty: 4.354e-03 (dx("U")... time: 1.44304 first: 1.343e-03 second: 1.706e-03 infty: 4.366e-03 (dx("U")... time: 1.46835 first: 1.356e-03 second: 1.717e-03 infty: 4.377e-03 (dx("U")... time: 1.49367 first: 1.369e-03 second: 1.729e-03 infty: 4.387e-03 (dx("U")... time: 1.51899 first: 1.382e-03 second: 1.740e-03 infty: 4.396e-03 (dx("U")... time: 1.5443 first: 1.394e-03 second: 1.751e-03 infty: 4.404e-03 (dx("U")... time: 1.56962 first: 1.407e-03 second: 1.762e-03 infty: 4.411e-03 (dx("U")... time: 1.59494 first: 1.419e-03 second: 1.774e-03 infty: 4.417e-03 (dx("U")... time: 1.62025 first: 1.431e-03 second: 1.785e-03 infty: 4.423e-03 (dx("U")... time: 1.64557 first: 1.443e-03 second: 1.796e-03 infty: 4.428e-03 (dx("U")... time: 1.67089 first: 1.455e-03 second: 1.807e-03 infty: 4.434e-03 (dx("U")... time: 1.6962 first: 1.467e-03 second: 1.818e-03 infty: 4.440e-03 (dx("U")... time: 1.72152 first: 1.479e-03 second: 1.829e-03 infty: 4.446e-03 (dx("U")... time: 1.74684 first: 1.491e-03 second: 1.840e-03 infty: 4.452e-03 (dx("U")... time: 1.77215 first: 1.502e-03 second: 1.851e-03 infty: 4.458e-03 (dx("U")... time: 1.79747 first: 1.514e-03 second: 1.862e-03 infty: 4.464e-03 (dx("U")... time: 1.82278 first: 1.526e-03 second: 1.873e-03 infty: 4.470e-03 (dx("U")... time: 1.8481 first: 1.537e-03 second: 1.884e-03 infty: 4.475e-03 (dx("U")... time: 1.87342 first: 1.549e-03 second: 1.895e-03 infty: 4.479e-03 (dx("U")... time: 1.89873 first: 1.561e-03 second: 1.906e-03 infty: 4.484e-03 (dx("U")... time: 1.92405 first: 1.573e-03 second: 1.917e-03 infty: 4.488e-03 (dx("U")... time: 1.94937 first: 1.584e-03 second: 1.928e-03 infty: 4.492e-03 (dx("U")... time: 1.97468 first: 1.596e-03 second: 1.939e-03 infty: 4.496e-03 (dx("U")... time: 2 first: 1.608e-03 second: 1.950e-03 infty: 4.500e-03 gerris-snapshot-131206/test/reynolds/stream/reynolds.ref0000644000175100017510000000004112250371171020323 000000000000005 35121.9 6 281583 7 2.31157e+06 gerris-snapshot-131206/test/reynolds/stream/stream.gfs0000644000175100017510000000453412250371171017775 00000000000000# Title: Numerical viscosity for vorticity/streamfunction formulation # # Description: # # Same as the previous test but using a vorticity/streamfunction formulation. # # \begin{figure}[htbp] # \caption{\label{divmax}Evolution of the maximum divergence.} # \begin{center} # \includegraphics[width=0.8\hsize]{divmax.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{divL2}Evolution of the L2 norm of the divergence.} # \begin{center} # \includegraphics[width=0.8\hsize]{divL2.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{kinetic}Evolution of the kinetic energy.} # \begin{center} # \includegraphics[width=0.8\hsize]{kinetic.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{reynolds}Equivalent Reynolds number as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{reynolds.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{accuracy}Accuracy of the solution as a function of the level of refinement.} # \begin{center} # \includegraphics[width=0.8\hsize]{accuracy.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../reynolds.sh stream.gfs 1 # Version: 110610 # Required files: div5.ref div6.ref div7.ref reynolds.ref # Running time: 3 minutes # Generated files: divmax.eps reynolds.eps divL2.eps kinetic.eps accuracy.eps # 1 2 GfsAdvection GfsBox GfsGEdge {} { Time { end = 2 } Refine LEVEL VariableTracer Omega Init {} { U0 = (- cos (2.*M_PI*x)*sin (2.*M_PI*y)) V0 = (sin (2.*M_PI*x)*cos (2.*M_PI*y)) # we need (U,V) to compute the vorticity U = U0 V = V0 } # In the general case the vorticity cannot be consistently # defined directly (because it needs to verify discrete properties # on the circulation) # Initialising from the velocity field (U,V) as done below should be safe Init {} { Omega = Vorticity } VariablePoisson Psi -Omega VariableStreamFunction { istep = 1 } Psi1 Psi OutputScalarNorm { istep = 1 } divLEVEL { v = (dx("U") + dy("V")) } OutputScalarSum { istep = 1 } kineticLEVEL { v = Velocity2 } OutputScalarSum { istep = 1 } stdout { v = Velocity2 } OutputErrorNorm { start = end } { awk '{ print $3,$5,$7,$9 }' > errorLEVEL.dat } { v = Velocity } { s = sqrt(U0*U0+V0*V0) v = E relative = 1 } } GfsBox {} 1 1 right 1 1 top gerris-snapshot-131206/test/reynolds/stream/div6.ref0000644000175100017510000003067312250371171017352 00000000000000(dx("U")... time: 0 first: 6.008e-08 second: 5.168e-07 infty: 1.908e-05 (dx("U")... time: 0.0125 first: 3.217e-05 second: 8.002e-05 infty: 6.331e-04 (dx("U")... time: 0.025 first: 5.369e-05 second: 1.204e-04 infty: 1.045e-03 (dx("U")... time: 0.0375 first: 6.597e-05 second: 1.509e-04 infty: 1.249e-03 (dx("U")... time: 0.05 first: 7.394e-05 second: 1.718e-04 infty: 1.457e-03 (dx("U")... time: 0.0625 first: 7.896e-05 second: 1.841e-04 infty: 1.648e-03 (dx("U")... time: 0.075 first: 8.097e-05 second: 1.890e-04 infty: 1.760e-03 (dx("U")... time: 0.0875 first: 8.062e-05 second: 1.879e-04 infty: 1.799e-03 (dx("U")... time: 0.1 first: 8.045e-05 second: 1.826e-04 infty: 1.775e-03 (dx("U")... time: 0.1125 first: 7.904e-05 second: 1.750e-04 infty: 1.697e-03 (dx("U")... time: 0.125 first: 7.701e-05 second: 1.670e-04 infty: 1.582e-03 (dx("U")... time: 0.1375 first: 7.490e-05 second: 1.607e-04 infty: 1.444e-03 (dx("U")... time: 0.15 first: 7.367e-05 second: 1.574e-04 infty: 1.299e-03 (dx("U")... time: 0.1625 first: 7.347e-05 second: 1.574e-04 infty: 1.160e-03 (dx("U")... time: 0.175 first: 7.394e-05 second: 1.599e-04 infty: 1.100e-03 (dx("U")... time: 0.1875 first: 7.416e-05 second: 1.636e-04 infty: 1.208e-03 (dx("U")... time: 0.2 first: 7.463e-05 second: 1.669e-04 infty: 1.281e-03 (dx("U")... time: 0.2125 first: 7.422e-05 second: 1.691e-04 infty: 1.315e-03 (dx("U")... time: 0.225 first: 7.335e-05 second: 1.698e-04 infty: 1.315e-03 (dx("U")... time: 0.2375 first: 7.230e-05 second: 1.692e-04 infty: 1.289e-03 (dx("U")... time: 0.25 first: 7.126e-05 second: 1.681e-04 infty: 1.250e-03 (dx("U")... time: 0.2625 first: 7.021e-05 second: 1.673e-04 infty: 1.208e-03 (dx("U")... time: 0.275 first: 6.999e-05 second: 1.677e-04 infty: 1.171e-03 (dx("U")... time: 0.2875 first: 7.111e-05 second: 1.695e-04 infty: 1.145e-03 (dx("U")... time: 0.3 first: 7.296e-05 second: 1.726e-04 infty: 1.188e-03 (dx("U")... time: 0.3125 first: 7.532e-05 second: 1.764e-04 infty: 1.241e-03 (dx("U")... time: 0.325 first: 7.765e-05 second: 1.803e-04 infty: 1.279e-03 (dx("U")... time: 0.3375 first: 7.967e-05 second: 1.835e-04 infty: 1.299e-03 (dx("U")... time: 0.35 first: 8.109e-05 second: 1.859e-04 infty: 1.303e-03 (dx("U")... time: 0.3625 first: 8.213e-05 second: 1.871e-04 infty: 1.290e-03 (dx("U")... time: 0.375 first: 8.253e-05 second: 1.874e-04 infty: 1.264e-03 (dx("U")... time: 0.3875 first: 8.252e-05 second: 1.871e-04 infty: 1.229e-03 (dx("U")... time: 0.4 first: 8.218e-05 second: 1.866e-04 infty: 1.228e-03 (dx("U")... time: 0.4125 first: 8.175e-05 second: 1.863e-04 infty: 1.257e-03 (dx("U")... time: 0.425 first: 8.176e-05 second: 1.865e-04 infty: 1.288e-03 (dx("U")... time: 0.4375 first: 8.176e-05 second: 1.872e-04 infty: 1.319e-03 (dx("U")... time: 0.45 first: 8.196e-05 second: 1.884e-04 infty: 1.345e-03 (dx("U")... time: 0.4625 first: 8.199e-05 second: 1.900e-04 infty: 1.366e-03 (dx("U")... time: 0.475 first: 8.212e-05 second: 1.917e-04 infty: 1.380e-03 (dx("U")... time: 0.4875 first: 8.252e-05 second: 1.934e-04 infty: 1.386e-03 (dx("U")... time: 0.5 first: 8.306e-05 second: 1.948e-04 infty: 1.384e-03 (dx("U")... time: 0.5125 first: 8.363e-05 second: 1.960e-04 infty: 1.377e-03 (dx("U")... time: 0.525 first: 8.446e-05 second: 1.969e-04 infty: 1.367e-03 (dx("U")... time: 0.5375 first: 8.536e-05 second: 1.976e-04 infty: 1.355e-03 (dx("U")... time: 0.55 first: 8.617e-05 second: 1.982e-04 infty: 1.344e-03 (dx("U")... time: 0.5625 first: 8.669e-05 second: 1.988e-04 infty: 1.335e-03 (dx("U")... time: 0.575 first: 8.743e-05 second: 1.995e-04 infty: 1.331e-03 (dx("U")... time: 0.5875 first: 8.848e-05 second: 2.003e-04 infty: 1.330e-03 (dx("U")... time: 0.6 first: 8.925e-05 second: 2.013e-04 infty: 1.333e-03 (dx("U")... time: 0.6125 first: 8.979e-05 second: 2.023e-04 infty: 1.340e-03 (dx("U")... time: 0.625 first: 9.028e-05 second: 2.033e-04 infty: 1.349e-03 (dx("U")... time: 0.6375 first: 9.058e-05 second: 2.041e-04 infty: 1.360e-03 (dx("U")... time: 0.65 first: 9.086e-05 second: 2.049e-04 infty: 1.372e-03 (dx("U")... time: 0.6625 first: 9.126e-05 second: 2.055e-04 infty: 1.383e-03 (dx("U")... time: 0.675 first: 9.137e-05 second: 2.060e-04 infty: 1.395e-03 (dx("U")... time: 0.6875 first: 9.125e-05 second: 2.064e-04 infty: 1.405e-03 (dx("U")... time: 0.7 first: 9.111e-05 second: 2.068e-04 infty: 1.415e-03 (dx("U")... time: 0.7125 first: 9.094e-05 second: 2.072e-04 infty: 1.424e-03 (dx("U")... time: 0.725 first: 9.083e-05 second: 2.077e-04 infty: 1.430e-03 (dx("U")... time: 0.7375 first: 9.069e-05 second: 2.084e-04 infty: 1.435e-03 (dx("U")... time: 0.75 first: 9.080e-05 second: 2.091e-04 infty: 1.438e-03 (dx("U")... time: 0.7625 first: 9.095e-05 second: 2.099e-04 infty: 1.439e-03 (dx("U")... time: 0.775 first: 9.121e-05 second: 2.108e-04 infty: 1.438e-03 (dx("U")... time: 0.7875 first: 9.123e-05 second: 2.116e-04 infty: 1.436e-03 (dx("U")... time: 0.8 first: 9.167e-05 second: 2.123e-04 infty: 1.432e-03 (dx("U")... time: 0.8125 first: 9.241e-05 second: 2.130e-04 infty: 1.429e-03 (dx("U")... time: 0.825 first: 9.298e-05 second: 2.136e-04 infty: 1.425e-03 (dx("U")... time: 0.8375 first: 9.361e-05 second: 2.142e-04 infty: 1.423e-03 (dx("U")... time: 0.85 first: 9.405e-05 second: 2.146e-04 infty: 1.422e-03 (dx("U")... time: 0.8625 first: 9.461e-05 second: 2.151e-04 infty: 1.422e-03 (dx("U")... time: 0.875 first: 9.504e-05 second: 2.155e-04 infty: 1.424e-03 (dx("U")... time: 0.8875 first: 9.563e-05 second: 2.160e-04 infty: 1.427e-03 (dx("U")... time: 0.9 first: 9.628e-05 second: 2.164e-04 infty: 1.432e-03 (dx("U")... time: 0.9125 first: 9.667e-05 second: 2.169e-04 infty: 1.438e-03 (dx("U")... time: 0.925 first: 9.698e-05 second: 2.174e-04 infty: 1.443e-03 (dx("U")... time: 0.9375 first: 9.716e-05 second: 2.179e-04 infty: 1.449e-03 (dx("U")... time: 0.95 first: 9.740e-05 second: 2.183e-04 infty: 1.455e-03 (dx("U")... time: 0.9625 first: 9.762e-05 second: 2.188e-04 infty: 1.460e-03 (dx("U")... time: 0.975 first: 9.786e-05 second: 2.192e-04 infty: 1.464e-03 (dx("U")... time: 0.9875 first: 9.794e-05 second: 2.196e-04 infty: 1.467e-03 (dx("U")... time: 1 first: 9.790e-05 second: 2.201e-04 infty: 1.470e-03 (dx("U")... time: 1.0125 first: 9.785e-05 second: 2.205e-04 infty: 1.471e-03 (dx("U")... time: 1.025 first: 9.776e-05 second: 2.209e-04 infty: 1.472e-03 (dx("U")... time: 1.0375 first: 9.779e-05 second: 2.213e-04 infty: 1.472e-03 (dx("U")... time: 1.05 first: 9.774e-05 second: 2.218e-04 infty: 1.471e-03 (dx("U")... time: 1.0625 first: 9.776e-05 second: 2.222e-04 infty: 1.471e-03 (dx("U")... time: 1.075 first: 9.768e-05 second: 2.227e-04 infty: 1.470e-03 (dx("U")... time: 1.0875 first: 9.764e-05 second: 2.231e-04 infty: 1.469e-03 (dx("U")... time: 1.1 first: 9.754e-05 second: 2.235e-04 infty: 1.468e-03 (dx("U")... time: 1.1125 first: 9.757e-05 second: 2.239e-04 infty: 1.468e-03 (dx("U")... time: 1.125 first: 9.756e-05 second: 2.242e-04 infty: 1.468e-03 (dx("U")... time: 1.1375 first: 9.757e-05 second: 2.246e-04 infty: 1.469e-03 (dx("U")... time: 1.15 first: 9.763e-05 second: 2.249e-04 infty: 1.470e-03 (dx("U")... time: 1.1625 first: 9.783e-05 second: 2.252e-04 infty: 1.472e-03 (dx("U")... time: 1.175 first: 9.803e-05 second: 2.255e-04 infty: 1.474e-03 (dx("U")... time: 1.1875 first: 9.815e-05 second: 2.258e-04 infty: 1.477e-03 (dx("U")... time: 1.2 first: 9.834e-05 second: 2.261e-04 infty: 1.479e-03 (dx("U")... time: 1.2125 first: 9.847e-05 second: 2.265e-04 infty: 1.482e-03 (dx("U")... time: 1.225 first: 9.856e-05 second: 2.268e-04 infty: 1.485e-03 (dx("U")... time: 1.2375 first: 9.869e-05 second: 2.272e-04 infty: 1.487e-03 (dx("U")... time: 1.25 first: 9.879e-05 second: 2.275e-04 infty: 1.489e-03 (dx("U")... time: 1.2625 first: 9.884e-05 second: 2.279e-04 infty: 1.491e-03 (dx("U")... time: 1.275 first: 9.900e-05 second: 2.282e-04 infty: 1.492e-03 (dx("U")... time: 1.2875 first: 9.918e-05 second: 2.286e-04 infty: 1.493e-03 (dx("U")... time: 1.3 first: 9.938e-05 second: 2.290e-04 infty: 1.493e-03 (dx("U")... time: 1.3125 first: 9.952e-05 second: 2.293e-04 infty: 1.494e-03 (dx("U")... time: 1.325 first: 9.969e-05 second: 2.297e-04 infty: 1.493e-03 (dx("U")... time: 1.3375 first: 9.990e-05 second: 2.301e-04 infty: 1.493e-03 (dx("U")... time: 1.35 first: 1.001e-04 second: 2.304e-04 infty: 1.493e-03 (dx("U")... time: 1.3625 first: 1.003e-04 second: 2.308e-04 infty: 1.493e-03 (dx("U")... time: 1.375 first: 1.005e-04 second: 2.312e-04 infty: 1.493e-03 (dx("U")... time: 1.3875 first: 1.007e-04 second: 2.315e-04 infty: 1.494e-03 (dx("U")... time: 1.4 first: 1.009e-04 second: 2.319e-04 infty: 1.494e-03 (dx("U")... time: 1.4125 first: 1.012e-04 second: 2.322e-04 infty: 1.495e-03 (dx("U")... time: 1.425 first: 1.015e-04 second: 2.326e-04 infty: 1.496e-03 (dx("U")... time: 1.4375 first: 1.018e-04 second: 2.329e-04 infty: 1.497e-03 (dx("U")... time: 1.45 first: 1.020e-04 second: 2.332e-04 infty: 1.498e-03 (dx("U")... time: 1.4625 first: 1.023e-04 second: 2.335e-04 infty: 1.500e-03 (dx("U")... time: 1.475 first: 1.025e-04 second: 2.339e-04 infty: 1.501e-03 (dx("U")... time: 1.4875 first: 1.028e-04 second: 2.342e-04 infty: 1.502e-03 (dx("U")... time: 1.5 first: 1.031e-04 second: 2.345e-04 infty: 1.503e-03 (dx("U")... time: 1.5125 first: 1.034e-04 second: 2.348e-04 infty: 1.504e-03 (dx("U")... time: 1.525 first: 1.036e-04 second: 2.352e-04 infty: 1.505e-03 (dx("U")... time: 1.5375 first: 1.039e-04 second: 2.355e-04 infty: 1.506e-03 (dx("U")... time: 1.55 first: 1.042e-04 second: 2.359e-04 infty: 1.506e-03 (dx("U")... time: 1.5625 first: 1.045e-04 second: 2.362e-04 infty: 1.507e-03 (dx("U")... time: 1.575 first: 1.048e-04 second: 2.365e-04 infty: 1.507e-03 (dx("U")... time: 1.5875 first: 1.051e-04 second: 2.369e-04 infty: 1.507e-03 (dx("U")... time: 1.6 first: 1.054e-04 second: 2.372e-04 infty: 1.507e-03 (dx("U")... time: 1.6125 first: 1.057e-04 second: 2.376e-04 infty: 1.507e-03 (dx("U")... time: 1.625 first: 1.060e-04 second: 2.379e-04 infty: 1.507e-03 (dx("U")... time: 1.6375 first: 1.063e-04 second: 2.382e-04 infty: 1.507e-03 (dx("U")... time: 1.65 first: 1.067e-04 second: 2.385e-04 infty: 1.508e-03 (dx("U")... time: 1.6625 first: 1.070e-04 second: 2.389e-04 infty: 1.508e-03 (dx("U")... time: 1.675 first: 1.073e-04 second: 2.392e-04 infty: 1.509e-03 (dx("U")... time: 1.6875 first: 1.076e-04 second: 2.395e-04 infty: 1.509e-03 (dx("U")... time: 1.7 first: 1.079e-04 second: 2.398e-04 infty: 1.510e-03 (dx("U")... time: 1.7125 first: 1.082e-04 second: 2.401e-04 infty: 1.511e-03 (dx("U")... time: 1.725 first: 1.085e-04 second: 2.404e-04 infty: 1.512e-03 (dx("U")... time: 1.7375 first: 1.088e-04 second: 2.407e-04 infty: 1.513e-03 (dx("U")... time: 1.75 first: 1.091e-04 second: 2.409e-04 infty: 1.514e-03 (dx("U")... time: 1.7625 first: 1.094e-04 second: 2.412e-04 infty: 1.514e-03 (dx("U")... time: 1.775 first: 1.097e-04 second: 2.415e-04 infty: 1.515e-03 (dx("U")... time: 1.7875 first: 1.100e-04 second: 2.418e-04 infty: 1.516e-03 (dx("U")... time: 1.8 first: 1.102e-04 second: 2.421e-04 infty: 1.516e-03 (dx("U")... time: 1.8125 first: 1.105e-04 second: 2.424e-04 infty: 1.516e-03 (dx("U")... time: 1.825 first: 1.108e-04 second: 2.427e-04 infty: 1.516e-03 (dx("U")... time: 1.8375 first: 1.111e-04 second: 2.430e-04 infty: 1.517e-03 (dx("U")... time: 1.85 first: 1.113e-04 second: 2.433e-04 infty: 1.516e-03 (dx("U")... time: 1.8625 first: 1.116e-04 second: 2.436e-04 infty: 1.516e-03 (dx("U")... time: 1.875 first: 1.119e-04 second: 2.439e-04 infty: 1.516e-03 (dx("U")... time: 1.8875 first: 1.122e-04 second: 2.442e-04 infty: 1.516e-03 (dx("U")... time: 1.9 first: 1.125e-04 second: 2.445e-04 infty: 1.516e-03 (dx("U")... time: 1.9125 first: 1.128e-04 second: 2.447e-04 infty: 1.516e-03 (dx("U")... time: 1.925 first: 1.131e-04 second: 2.450e-04 infty: 1.517e-03 (dx("U")... time: 1.9375 first: 1.134e-04 second: 2.453e-04 infty: 1.517e-03 (dx("U")... time: 1.95 first: 1.137e-04 second: 2.456e-04 infty: 1.517e-03 (dx("U")... time: 1.9625 first: 1.140e-04 second: 2.458e-04 infty: 1.518e-03 (dx("U")... time: 1.975 first: 1.143e-04 second: 2.461e-04 infty: 1.518e-03 (dx("U")... time: 1.9875 first: 1.146e-04 second: 2.464e-04 infty: 1.519e-03 (dx("U")... time: 2 first: 1.148e-04 second: 2.466e-04 infty: 1.519e-03 gerris-snapshot-131206/test/reynolds/stream/div7.ref0000644000175100017510000006213312250371171017347 00000000000000(dx("U")... time: 0 first: 4.423e-08 second: 1.095e-06 infty: 8.114e-05 (dx("U")... time: 0.00625 first: 2.258e-06 second: 7.725e-06 infty: 9.737e-05 (dx("U")... time: 0.0125 first: 3.731e-06 second: 1.183e-05 infty: 1.757e-04 (dx("U")... time: 0.01875 first: 4.757e-06 second: 1.532e-05 infty: 2.354e-04 (dx("U")... time: 0.025 first: 5.523e-06 second: 1.824e-05 infty: 2.786e-04 (dx("U")... time: 0.03125 first: 6.050e-06 second: 2.062e-05 infty: 3.084e-04 (dx("U")... time: 0.0375 first: 6.450e-06 second: 2.252e-05 infty: 3.466e-04 (dx("U")... time: 0.04375 first: 6.822e-06 second: 2.399e-05 infty: 3.869e-04 (dx("U")... time: 0.05 first: 7.105e-06 second: 2.507e-05 infty: 4.209e-04 (dx("U")... time: 0.05625 first: 7.375e-06 second: 2.580e-05 infty: 4.486e-04 (dx("U")... time: 0.0625 first: 7.568e-06 second: 2.622e-05 infty: 4.700e-04 (dx("U")... time: 0.06875 first: 7.679e-06 second: 2.636e-05 infty: 4.852e-04 (dx("U")... time: 0.075 first: 7.675e-06 second: 2.625e-05 infty: 4.945e-04 (dx("U")... time: 0.08125 first: 7.632e-06 second: 2.594e-05 infty: 4.981e-04 (dx("U")... time: 0.0875 first: 7.529e-06 second: 2.545e-05 infty: 4.966e-04 (dx("U")... time: 0.09375 first: 7.385e-06 second: 2.484e-05 infty: 4.902e-04 (dx("U")... time: 0.1 first: 7.240e-06 second: 2.415e-05 infty: 4.796e-04 (dx("U")... time: 0.10625 first: 7.050e-06 second: 2.342e-05 infty: 4.653e-04 (dx("U")... time: 0.1125 first: 6.852e-06 second: 2.272e-05 infty: 4.479e-04 (dx("U")... time: 0.11875 first: 6.662e-06 second: 2.210e-05 infty: 4.279e-04 (dx("U")... time: 0.125 first: 6.488e-06 second: 2.160e-05 infty: 4.061e-04 (dx("U")... time: 0.13125 first: 6.341e-06 second: 2.125e-05 infty: 3.830e-04 (dx("U")... time: 0.1375 first: 6.264e-06 second: 2.109e-05 infty: 3.594e-04 (dx("U")... time: 0.14375 first: 6.239e-06 second: 2.111e-05 infty: 3.359e-04 (dx("U")... time: 0.15 first: 6.253e-06 second: 2.130e-05 infty: 3.131e-04 (dx("U")... time: 0.15625 first: 6.302e-06 second: 2.163e-05 infty: 3.083e-04 (dx("U")... time: 0.1625 first: 6.371e-06 second: 2.205e-05 infty: 3.256e-04 (dx("U")... time: 0.16875 first: 6.442e-06 second: 2.251e-05 infty: 3.411e-04 (dx("U")... time: 0.175 first: 6.507e-06 second: 2.297e-05 infty: 3.541e-04 (dx("U")... time: 0.18125 first: 6.555e-06 second: 2.339e-05 infty: 3.644e-04 (dx("U")... time: 0.1875 first: 6.577e-06 second: 2.374e-05 infty: 3.718e-04 (dx("U")... time: 0.19375 first: 6.602e-06 second: 2.399e-05 infty: 3.763e-04 (dx("U")... time: 0.2 first: 6.625e-06 second: 2.414e-05 infty: 3.783e-04 (dx("U")... time: 0.20625 first: 6.615e-06 second: 2.419e-05 infty: 3.779e-04 (dx("U")... time: 0.2125 first: 6.587e-06 second: 2.414e-05 infty: 3.758e-04 (dx("U")... time: 0.21875 first: 6.510e-06 second: 2.400e-05 infty: 3.723e-04 (dx("U")... time: 0.225 first: 6.420e-06 second: 2.381e-05 infty: 3.680e-04 (dx("U")... time: 0.23125 first: 6.310e-06 second: 2.360e-05 infty: 3.633e-04 (dx("U")... time: 0.2375 first: 6.201e-06 second: 2.338e-05 infty: 3.586e-04 (dx("U")... time: 0.24375 first: 6.083e-06 second: 2.319e-05 infty: 3.543e-04 (dx("U")... time: 0.25 first: 5.969e-06 second: 2.307e-05 infty: 3.506e-04 (dx("U")... time: 0.25625 first: 5.884e-06 second: 2.301e-05 infty: 3.475e-04 (dx("U")... time: 0.2625 first: 5.822e-06 second: 2.304e-05 infty: 3.452e-04 (dx("U")... time: 0.26875 first: 5.786e-06 second: 2.316e-05 infty: 3.436e-04 (dx("U")... time: 0.275 first: 5.789e-06 second: 2.334e-05 infty: 3.427e-04 (dx("U")... time: 0.28125 first: 5.820e-06 second: 2.359e-05 infty: 3.422e-04 (dx("U")... time: 0.2875 first: 5.894e-06 second: 2.388e-05 infty: 3.422e-04 (dx("U")... time: 0.29375 first: 5.991e-06 second: 2.418e-05 infty: 3.425e-04 (dx("U")... time: 0.3 first: 6.090e-06 second: 2.447e-05 infty: 3.430e-04 (dx("U")... time: 0.30625 first: 6.194e-06 second: 2.475e-05 infty: 3.436e-04 (dx("U")... time: 0.3125 first: 6.300e-06 second: 2.498e-05 infty: 3.473e-04 (dx("U")... time: 0.31875 first: 6.392e-06 second: 2.517e-05 infty: 3.503e-04 (dx("U")... time: 0.325 first: 6.461e-06 second: 2.531e-05 infty: 3.518e-04 (dx("U")... time: 0.33125 first: 6.518e-06 second: 2.541e-05 infty: 3.518e-04 (dx("U")... time: 0.3375 first: 6.579e-06 second: 2.546e-05 infty: 3.504e-04 (dx("U")... time: 0.34375 first: 6.616e-06 second: 2.548e-05 infty: 3.508e-04 (dx("U")... time: 0.35 first: 6.650e-06 second: 2.548e-05 infty: 3.530e-04 (dx("U")... time: 0.35625 first: 6.685e-06 second: 2.546e-05 infty: 3.555e-04 (dx("U")... time: 0.3625 first: 6.710e-06 second: 2.543e-05 infty: 3.585e-04 (dx("U")... time: 0.36875 first: 6.720e-06 second: 2.541e-05 infty: 3.618e-04 (dx("U")... time: 0.375 first: 6.736e-06 second: 2.540e-05 infty: 3.654e-04 (dx("U")... time: 0.38125 first: 6.739e-06 second: 2.541e-05 infty: 3.693e-04 (dx("U")... time: 0.3875 first: 6.751e-06 second: 2.545e-05 infty: 3.734e-04 (dx("U")... time: 0.39375 first: 6.749e-06 second: 2.551e-05 infty: 3.775e-04 (dx("U")... time: 0.4 first: 6.760e-06 second: 2.561e-05 infty: 3.815e-04 (dx("U")... time: 0.40625 first: 6.768e-06 second: 2.573e-05 infty: 3.854e-04 (dx("U")... time: 0.4125 first: 6.773e-06 second: 2.588e-05 infty: 3.891e-04 (dx("U")... time: 0.41875 first: 6.799e-06 second: 2.605e-05 infty: 3.923e-04 (dx("U")... time: 0.425 first: 6.834e-06 second: 2.622e-05 infty: 3.951e-04 (dx("U")... time: 0.43125 first: 6.865e-06 second: 2.640e-05 infty: 3.974e-04 (dx("U")... time: 0.4375 first: 6.903e-06 second: 2.658e-05 infty: 3.991e-04 (dx("U")... time: 0.44375 first: 6.939e-06 second: 2.674e-05 infty: 4.002e-04 (dx("U")... time: 0.45 first: 6.968e-06 second: 2.688e-05 infty: 4.008e-04 (dx("U")... time: 0.45625 first: 6.993e-06 second: 2.699e-05 infty: 4.009e-04 (dx("U")... time: 0.4625 first: 7.009e-06 second: 2.708e-05 infty: 4.006e-04 (dx("U")... time: 0.46875 first: 7.021e-06 second: 2.714e-05 infty: 3.999e-04 (dx("U")... time: 0.475 first: 7.023e-06 second: 2.717e-05 infty: 3.990e-04 (dx("U")... time: 0.48125 first: 7.023e-06 second: 2.719e-05 infty: 3.979e-04 (dx("U")... time: 0.4875 first: 7.018e-06 second: 2.719e-05 infty: 3.967e-04 (dx("U")... time: 0.49375 first: 7.014e-06 second: 2.718e-05 infty: 3.956e-04 (dx("U")... time: 0.5 first: 7.007e-06 second: 2.716e-05 infty: 3.946e-04 (dx("U")... time: 0.50625 first: 7.004e-06 second: 2.715e-05 infty: 3.938e-04 (dx("U")... time: 0.5125 first: 6.998e-06 second: 2.715e-05 infty: 3.932e-04 (dx("U")... time: 0.51875 first: 6.998e-06 second: 2.716e-05 infty: 3.929e-04 (dx("U")... time: 0.525 first: 7.003e-06 second: 2.719e-05 infty: 3.928e-04 (dx("U")... time: 0.53125 first: 7.018e-06 second: 2.724e-05 infty: 3.929e-04 (dx("U")... time: 0.5375 first: 7.043e-06 second: 2.731e-05 infty: 3.933e-04 (dx("U")... time: 0.54375 first: 7.080e-06 second: 2.740e-05 infty: 3.939e-04 (dx("U")... time: 0.55 first: 7.121e-06 second: 2.750e-05 infty: 3.947e-04 (dx("U")... time: 0.55625 first: 7.165e-06 second: 2.761e-05 infty: 3.957e-04 (dx("U")... time: 0.5625 first: 7.213e-06 second: 2.772e-05 infty: 3.967e-04 (dx("U")... time: 0.56875 first: 7.273e-06 second: 2.782e-05 infty: 3.978e-04 (dx("U")... time: 0.575 first: 7.334e-06 second: 2.793e-05 infty: 3.990e-04 (dx("U")... time: 0.58125 first: 7.393e-06 second: 2.802e-05 infty: 4.002e-04 (dx("U")... time: 0.5875 first: 7.448e-06 second: 2.810e-05 infty: 4.014e-04 (dx("U")... time: 0.59375 first: 7.499e-06 second: 2.816e-05 infty: 4.026e-04 (dx("U")... time: 0.6 first: 7.542e-06 second: 2.822e-05 infty: 4.039e-04 (dx("U")... time: 0.60625 first: 7.579e-06 second: 2.826e-05 infty: 4.051e-04 (dx("U")... time: 0.6125 first: 7.612e-06 second: 2.829e-05 infty: 4.063e-04 (dx("U")... time: 0.61875 first: 7.631e-06 second: 2.832e-05 infty: 4.076e-04 (dx("U")... time: 0.625 first: 7.650e-06 second: 2.834e-05 infty: 4.088e-04 (dx("U")... time: 0.63125 first: 7.675e-06 second: 2.836e-05 infty: 4.100e-04 (dx("U")... time: 0.6375 first: 7.702e-06 second: 2.839e-05 infty: 4.112e-04 (dx("U")... time: 0.64375 first: 7.731e-06 second: 2.843e-05 infty: 4.124e-04 (dx("U")... time: 0.65 first: 7.763e-06 second: 2.848e-05 infty: 4.135e-04 (dx("U")... time: 0.65625 first: 7.798e-06 second: 2.853e-05 infty: 4.145e-04 (dx("U")... time: 0.6625 first: 7.832e-06 second: 2.860e-05 infty: 4.154e-04 (dx("U")... time: 0.66875 first: 7.863e-06 second: 2.868e-05 infty: 4.162e-04 (dx("U")... time: 0.675 first: 7.890e-06 second: 2.877e-05 infty: 4.169e-04 (dx("U")... time: 0.68125 first: 7.916e-06 second: 2.887e-05 infty: 4.175e-04 (dx("U")... time: 0.6875 first: 7.947e-06 second: 2.896e-05 infty: 4.178e-04 (dx("U")... time: 0.69375 first: 7.985e-06 second: 2.906e-05 infty: 4.180e-04 (dx("U")... time: 0.7 first: 8.015e-06 second: 2.916e-05 infty: 4.181e-04 (dx("U")... time: 0.70625 first: 8.048e-06 second: 2.925e-05 infty: 4.180e-04 (dx("U")... time: 0.7125 first: 8.085e-06 second: 2.933e-05 infty: 4.179e-04 (dx("U")... time: 0.71875 first: 8.114e-06 second: 2.940e-05 infty: 4.176e-04 (dx("U")... time: 0.725 first: 8.142e-06 second: 2.947e-05 infty: 4.172e-04 (dx("U")... time: 0.73125 first: 8.174e-06 second: 2.952e-05 infty: 4.168e-04 (dx("U")... time: 0.7375 first: 8.198e-06 second: 2.956e-05 infty: 4.164e-04 (dx("U")... time: 0.74375 first: 8.215e-06 second: 2.959e-05 infty: 4.160e-04 (dx("U")... time: 0.75 first: 8.236e-06 second: 2.961e-05 infty: 4.157e-04 (dx("U")... time: 0.75625 first: 8.258e-06 second: 2.963e-05 infty: 4.155e-04 (dx("U")... time: 0.7625 first: 8.272e-06 second: 2.965e-05 infty: 4.153e-04 (dx("U")... time: 0.76875 first: 8.287e-06 second: 2.966e-05 infty: 4.153e-04 (dx("U")... time: 0.775 first: 8.305e-06 second: 2.968e-05 infty: 4.154e-04 (dx("U")... time: 0.78125 first: 8.316e-06 second: 2.969e-05 infty: 4.157e-04 (dx("U")... time: 0.7875 first: 8.331e-06 second: 2.972e-05 infty: 4.161e-04 (dx("U")... time: 0.79375 first: 8.346e-06 second: 2.975e-05 infty: 4.166e-04 (dx("U")... time: 0.8 first: 8.374e-06 second: 2.979e-05 infty: 4.172e-04 (dx("U")... time: 0.80625 first: 8.401e-06 second: 2.984e-05 infty: 4.180e-04 (dx("U")... time: 0.8125 first: 8.427e-06 second: 2.989e-05 infty: 4.188e-04 (dx("U")... time: 0.81875 first: 8.461e-06 second: 2.995e-05 infty: 4.196e-04 (dx("U")... time: 0.825 first: 8.500e-06 second: 3.001e-05 infty: 4.205e-04 (dx("U")... time: 0.83125 first: 8.543e-06 second: 3.008e-05 infty: 4.214e-04 (dx("U")... time: 0.8375 first: 8.585e-06 second: 3.014e-05 infty: 4.223e-04 (dx("U")... time: 0.84375 first: 8.632e-06 second: 3.021e-05 infty: 4.232e-04 (dx("U")... time: 0.85 first: 8.677e-06 second: 3.027e-05 infty: 4.241e-04 (dx("U")... time: 0.85625 first: 8.725e-06 second: 3.032e-05 infty: 4.249e-04 (dx("U")... time: 0.8625 first: 8.769e-06 second: 3.038e-05 infty: 4.256e-04 (dx("U")... time: 0.86875 first: 8.806e-06 second: 3.042e-05 infty: 4.263e-04 (dx("U")... time: 0.875 first: 8.836e-06 second: 3.047e-05 infty: 4.270e-04 (dx("U")... time: 0.88125 first: 8.866e-06 second: 3.051e-05 infty: 4.275e-04 (dx("U")... time: 0.8875 first: 8.892e-06 second: 3.055e-05 infty: 4.280e-04 (dx("U")... time: 0.89375 first: 8.918e-06 second: 3.058e-05 infty: 4.284e-04 (dx("U")... time: 0.9 first: 8.940e-06 second: 3.062e-05 infty: 4.288e-04 (dx("U")... time: 0.90625 first: 8.958e-06 second: 3.066e-05 infty: 4.290e-04 (dx("U")... time: 0.9125 first: 8.984e-06 second: 3.070e-05 infty: 4.293e-04 (dx("U")... time: 0.91875 first: 9.018e-06 second: 3.074e-05 infty: 4.294e-04 (dx("U")... time: 0.925 first: 9.050e-06 second: 3.079e-05 infty: 4.295e-04 (dx("U")... time: 0.93125 first: 9.081e-06 second: 3.084e-05 infty: 4.295e-04 (dx("U")... time: 0.9375 first: 9.114e-06 second: 3.090e-05 infty: 4.295e-04 (dx("U")... time: 0.94375 first: 9.147e-06 second: 3.096e-05 infty: 4.294e-04 (dx("U")... time: 0.95 first: 9.182e-06 second: 3.102e-05 infty: 4.293e-04 (dx("U")... time: 0.95625 first: 9.220e-06 second: 3.109e-05 infty: 4.292e-04 (dx("U")... time: 0.9625 first: 9.249e-06 second: 3.115e-05 infty: 4.290e-04 (dx("U")... time: 0.96875 first: 9.285e-06 second: 3.121e-05 infty: 4.288e-04 (dx("U")... time: 0.975 first: 9.321e-06 second: 3.127e-05 infty: 4.285e-04 (dx("U")... time: 0.98125 first: 9.356e-06 second: 3.132e-05 infty: 4.283e-04 (dx("U")... time: 0.9875 first: 9.387e-06 second: 3.137e-05 infty: 4.281e-04 (dx("U")... time: 0.99375 first: 9.427e-06 second: 3.142e-05 infty: 4.279e-04 (dx("U")... time: 1 first: 9.467e-06 second: 3.146e-05 infty: 4.278e-04 (dx("U")... time: 1.00625 first: 9.501e-06 second: 3.149e-05 infty: 4.277e-04 (dx("U")... time: 1.0125 first: 9.532e-06 second: 3.152e-05 infty: 4.277e-04 (dx("U")... time: 1.01875 first: 9.563e-06 second: 3.155e-05 infty: 4.277e-04 (dx("U")... time: 1.025 first: 9.591e-06 second: 3.157e-05 infty: 4.278e-04 (dx("U")... time: 1.03125 first: 9.622e-06 second: 3.160e-05 infty: 4.280e-04 (dx("U")... time: 1.0375 first: 9.647e-06 second: 3.162e-05 infty: 4.283e-04 (dx("U")... time: 1.04375 first: 9.671e-06 second: 3.164e-05 infty: 4.287e-04 (dx("U")... time: 1.05 first: 9.701e-06 second: 3.166e-05 infty: 4.291e-04 (dx("U")... time: 1.05625 first: 9.720e-06 second: 3.169e-05 infty: 4.297e-04 (dx("U")... time: 1.0625 first: 9.747e-06 second: 3.172e-05 infty: 4.302e-04 (dx("U")... time: 1.06875 first: 9.780e-06 second: 3.175e-05 infty: 4.308e-04 (dx("U")... time: 1.075 first: 9.805e-06 second: 3.178e-05 infty: 4.315e-04 (dx("U")... time: 1.08125 first: 9.832e-06 second: 3.182e-05 infty: 4.321e-04 (dx("U")... time: 1.0875 first: 9.863e-06 second: 3.186e-05 infty: 4.328e-04 (dx("U")... time: 1.09375 first: 9.894e-06 second: 3.190e-05 infty: 4.335e-04 (dx("U")... time: 1.1 first: 9.924e-06 second: 3.195e-05 infty: 4.341e-04 (dx("U")... time: 1.10625 first: 9.955e-06 second: 3.199e-05 infty: 4.347e-04 (dx("U")... time: 1.1125 first: 9.992e-06 second: 3.204e-05 infty: 4.353e-04 (dx("U")... time: 1.11875 first: 1.003e-05 second: 3.208e-05 infty: 4.358e-04 (dx("U")... time: 1.125 first: 1.006e-05 second: 3.213e-05 infty: 4.362e-04 (dx("U")... time: 1.13125 first: 1.009e-05 second: 3.217e-05 infty: 4.366e-04 (dx("U")... time: 1.1375 first: 1.011e-05 second: 3.221e-05 infty: 4.369e-04 (dx("U")... time: 1.14375 first: 1.013e-05 second: 3.224e-05 infty: 4.371e-04 (dx("U")... time: 1.15 first: 1.015e-05 second: 3.228e-05 infty: 4.373e-04 (dx("U")... time: 1.15625 first: 1.018e-05 second: 3.232e-05 infty: 4.374e-04 (dx("U")... time: 1.1625 first: 1.020e-05 second: 3.235e-05 infty: 4.375e-04 (dx("U")... time: 1.16875 first: 1.022e-05 second: 3.238e-05 infty: 4.375e-04 (dx("U")... time: 1.175 first: 1.024e-05 second: 3.242e-05 infty: 4.375e-04 (dx("U")... time: 1.18125 first: 1.025e-05 second: 3.245e-05 infty: 4.374e-04 (dx("U")... time: 1.1875 first: 1.026e-05 second: 3.249e-05 infty: 4.373e-04 (dx("U")... time: 1.19375 first: 1.027e-05 second: 3.252e-05 infty: 4.371e-04 (dx("U")... time: 1.2 first: 1.029e-05 second: 3.256e-05 infty: 4.369e-04 (dx("U")... time: 1.20625 first: 1.030e-05 second: 3.260e-05 infty: 4.367e-04 (dx("U")... time: 1.2125 first: 1.031e-05 second: 3.264e-05 infty: 4.365e-04 (dx("U")... time: 1.21875 first: 1.033e-05 second: 3.268e-05 infty: 4.363e-04 (dx("U")... time: 1.225 first: 1.035e-05 second: 3.272e-05 infty: 4.361e-04 (dx("U")... time: 1.23125 first: 1.037e-05 second: 3.276e-05 infty: 4.359e-04 (dx("U")... time: 1.2375 first: 1.039e-05 second: 3.280e-05 infty: 4.358e-04 (dx("U")... time: 1.24375 first: 1.040e-05 second: 3.283e-05 infty: 4.356e-04 (dx("U")... time: 1.25 first: 1.042e-05 second: 3.287e-05 infty: 4.355e-04 (dx("U")... time: 1.25625 first: 1.043e-05 second: 3.290e-05 infty: 4.355e-04 (dx("U")... time: 1.2625 first: 1.045e-05 second: 3.293e-05 infty: 4.354e-04 (dx("U")... time: 1.26875 first: 1.046e-05 second: 3.296e-05 infty: 4.355e-04 (dx("U")... time: 1.275 first: 1.047e-05 second: 3.299e-05 infty: 4.355e-04 (dx("U")... time: 1.28125 first: 1.048e-05 second: 3.301e-05 infty: 4.357e-04 (dx("U")... time: 1.2875 first: 1.049e-05 second: 3.303e-05 infty: 4.358e-04 (dx("U")... time: 1.29375 first: 1.050e-05 second: 3.305e-05 infty: 4.361e-04 (dx("U")... time: 1.3 first: 1.050e-05 second: 3.307e-05 infty: 4.364e-04 (dx("U")... time: 1.30625 first: 1.052e-05 second: 3.309e-05 infty: 4.367e-04 (dx("U")... time: 1.3125 first: 1.053e-05 second: 3.311e-05 infty: 4.371e-04 (dx("U")... time: 1.31875 first: 1.053e-05 second: 3.312e-05 infty: 4.375e-04 (dx("U")... time: 1.325 first: 1.054e-05 second: 3.314e-05 infty: 4.380e-04 (dx("U")... time: 1.33125 first: 1.054e-05 second: 3.316e-05 infty: 4.384e-04 (dx("U")... time: 1.3375 first: 1.056e-05 second: 3.319e-05 infty: 4.389e-04 (dx("U")... time: 1.34375 first: 1.057e-05 second: 3.321e-05 infty: 4.394e-04 (dx("U")... time: 1.35 first: 1.057e-05 second: 3.324e-05 infty: 4.399e-04 (dx("U")... time: 1.35625 first: 1.057e-05 second: 3.326e-05 infty: 4.403e-04 (dx("U")... time: 1.3625 first: 1.057e-05 second: 3.329e-05 infty: 4.408e-04 (dx("U")... time: 1.36875 first: 1.057e-05 second: 3.332e-05 infty: 4.412e-04 (dx("U")... time: 1.375 first: 1.056e-05 second: 3.335e-05 infty: 4.415e-04 (dx("U")... time: 1.38125 first: 1.057e-05 second: 3.338e-05 infty: 4.418e-04 (dx("U")... time: 1.3875 first: 1.058e-05 second: 3.341e-05 infty: 4.421e-04 (dx("U")... time: 1.39375 first: 1.058e-05 second: 3.343e-05 infty: 4.423e-04 (dx("U")... time: 1.4 first: 1.059e-05 second: 3.346e-05 infty: 4.424e-04 (dx("U")... time: 1.40625 first: 1.058e-05 second: 3.349e-05 infty: 4.425e-04 (dx("U")... time: 1.4125 first: 1.057e-05 second: 3.352e-05 infty: 4.426e-04 (dx("U")... time: 1.41875 first: 1.056e-05 second: 3.354e-05 infty: 4.426e-04 (dx("U")... time: 1.425 first: 1.055e-05 second: 3.357e-05 infty: 4.426e-04 (dx("U")... time: 1.43125 first: 1.056e-05 second: 3.359e-05 infty: 4.425e-04 (dx("U")... time: 1.4375 first: 1.056e-05 second: 3.362e-05 infty: 4.424e-04 (dx("U")... time: 1.44375 first: 1.056e-05 second: 3.364e-05 infty: 4.422e-04 (dx("U")... time: 1.45 first: 1.055e-05 second: 3.366e-05 infty: 4.421e-04 (dx("U")... time: 1.45625 first: 1.054e-05 second: 3.369e-05 infty: 4.419e-04 (dx("U")... time: 1.4625 first: 1.053e-05 second: 3.371e-05 infty: 4.417e-04 (dx("U")... time: 1.46875 first: 1.053e-05 second: 3.373e-05 infty: 4.415e-04 (dx("U")... time: 1.475 first: 1.052e-05 second: 3.375e-05 infty: 4.413e-04 (dx("U")... time: 1.48125 first: 1.051e-05 second: 3.378e-05 infty: 4.411e-04 (dx("U")... time: 1.4875 first: 1.051e-05 second: 3.380e-05 infty: 4.410e-04 (dx("U")... time: 1.49375 first: 1.050e-05 second: 3.382e-05 infty: 4.408e-04 (dx("U")... time: 1.5 first: 1.051e-05 second: 3.385e-05 infty: 4.407e-04 (dx("U")... time: 1.50625 first: 1.051e-05 second: 3.387e-05 infty: 4.406e-04 (dx("U")... time: 1.5125 first: 1.050e-05 second: 3.389e-05 infty: 4.406e-04 (dx("U")... time: 1.51875 first: 1.049e-05 second: 3.391e-05 infty: 4.406e-04 (dx("U")... time: 1.525 first: 1.050e-05 second: 3.393e-05 infty: 4.406e-04 (dx("U")... time: 1.53125 first: 1.049e-05 second: 3.395e-05 infty: 4.406e-04 (dx("U")... time: 1.5375 first: 1.048e-05 second: 3.396e-05 infty: 4.407e-04 (dx("U")... time: 1.54375 first: 1.047e-05 second: 3.398e-05 infty: 4.409e-04 (dx("U")... time: 1.55 first: 1.047e-05 second: 3.399e-05 infty: 4.411e-04 (dx("U")... time: 1.55625 first: 1.046e-05 second: 3.401e-05 infty: 4.413e-04 (dx("U")... time: 1.5625 first: 1.045e-05 second: 3.402e-05 infty: 4.415e-04 (dx("U")... time: 1.56875 first: 1.044e-05 second: 3.403e-05 infty: 4.418e-04 (dx("U")... time: 1.575 first: 1.044e-05 second: 3.404e-05 infty: 4.421e-04 (dx("U")... time: 1.58125 first: 1.043e-05 second: 3.405e-05 infty: 4.424e-04 (dx("U")... time: 1.5875 first: 1.041e-05 second: 3.406e-05 infty: 4.428e-04 (dx("U")... time: 1.59375 first: 1.041e-05 second: 3.408e-05 infty: 4.431e-04 (dx("U")... time: 1.6 first: 1.040e-05 second: 3.409e-05 infty: 4.434e-04 (dx("U")... time: 1.60625 first: 1.039e-05 second: 3.410e-05 infty: 4.438e-04 (dx("U")... time: 1.6125 first: 1.037e-05 second: 3.412e-05 infty: 4.441e-04 (dx("U")... time: 1.61875 first: 1.036e-05 second: 3.413e-05 infty: 4.444e-04 (dx("U")... time: 1.625 first: 1.034e-05 second: 3.415e-05 infty: 4.447e-04 (dx("U")... time: 1.63125 first: 1.033e-05 second: 3.416e-05 infty: 4.450e-04 (dx("U")... time: 1.6375 first: 1.032e-05 second: 3.418e-05 infty: 4.452e-04 (dx("U")... time: 1.64375 first: 1.030e-05 second: 3.420e-05 infty: 4.454e-04 (dx("U")... time: 1.65 first: 1.028e-05 second: 3.422e-05 infty: 4.456e-04 (dx("U")... time: 1.65625 first: 1.027e-05 second: 3.423e-05 infty: 4.457e-04 (dx("U")... time: 1.6625 first: 1.025e-05 second: 3.425e-05 infty: 4.458e-04 (dx("U")... time: 1.66875 first: 1.023e-05 second: 3.427e-05 infty: 4.458e-04 (dx("U")... time: 1.675 first: 1.021e-05 second: 3.429e-05 infty: 4.458e-04 (dx("U")... time: 1.68125 first: 1.019e-05 second: 3.431e-05 infty: 4.458e-04 (dx("U")... time: 1.6875 first: 1.016e-05 second: 3.432e-05 infty: 4.457e-04 (dx("U")... time: 1.69375 first: 1.014e-05 second: 3.434e-05 infty: 4.456e-04 (dx("U")... time: 1.7 first: 1.012e-05 second: 3.436e-05 infty: 4.455e-04 (dx("U")... time: 1.70625 first: 1.010e-05 second: 3.437e-05 infty: 4.454e-04 (dx("U")... time: 1.7125 first: 1.007e-05 second: 3.439e-05 infty: 4.452e-04 (dx("U")... time: 1.71875 first: 1.004e-05 second: 3.440e-05 infty: 4.451e-04 (dx("U")... time: 1.725 first: 1.002e-05 second: 3.442e-05 infty: 4.449e-04 (dx("U")... time: 1.73125 first: 9.994e-06 second: 3.443e-05 infty: 4.447e-04 (dx("U")... time: 1.7375 first: 9.962e-06 second: 3.445e-05 infty: 4.446e-04 (dx("U")... time: 1.74375 first: 9.942e-06 second: 3.446e-05 infty: 4.445e-04 (dx("U")... time: 1.75 first: 9.922e-06 second: 3.448e-05 infty: 4.443e-04 (dx("U")... time: 1.75625 first: 9.899e-06 second: 3.449e-05 infty: 4.442e-04 (dx("U")... time: 1.7625 first: 9.874e-06 second: 3.451e-05 infty: 4.442e-04 (dx("U")... time: 1.76875 first: 9.850e-06 second: 3.452e-05 infty: 4.441e-04 (dx("U")... time: 1.775 first: 9.829e-06 second: 3.454e-05 infty: 4.441e-04 (dx("U")... time: 1.78125 first: 9.803e-06 second: 3.455e-05 infty: 4.441e-04 (dx("U")... time: 1.7875 first: 9.779e-06 second: 3.456e-05 infty: 4.441e-04 (dx("U")... time: 1.79375 first: 9.757e-06 second: 3.458e-05 infty: 4.442e-04 (dx("U")... time: 1.8 first: 9.733e-06 second: 3.459e-05 infty: 4.443e-04 (dx("U")... time: 1.80625 first: 9.706e-06 second: 3.460e-05 infty: 4.444e-04 (dx("U")... time: 1.8125 first: 9.684e-06 second: 3.461e-05 infty: 4.445e-04 (dx("U")... time: 1.81875 first: 9.660e-06 second: 3.462e-05 infty: 4.447e-04 (dx("U")... time: 1.825 first: 9.636e-06 second: 3.463e-05 infty: 4.449e-04 (dx("U")... time: 1.83125 first: 9.611e-06 second: 3.464e-05 infty: 4.451e-04 (dx("U")... time: 1.8375 first: 9.585e-06 second: 3.465e-05 infty: 4.453e-04 (dx("U")... time: 1.84375 first: 9.562e-06 second: 3.466e-05 infty: 4.456e-04 (dx("U")... time: 1.85 first: 9.540e-06 second: 3.467e-05 infty: 4.458e-04 (dx("U")... time: 1.85625 first: 9.520e-06 second: 3.468e-05 infty: 4.461e-04 (dx("U")... time: 1.8625 first: 9.502e-06 second: 3.470e-05 infty: 4.463e-04 (dx("U")... time: 1.86875 first: 9.485e-06 second: 3.471e-05 infty: 4.466e-04 (dx("U")... time: 1.875 first: 9.463e-06 second: 3.472e-05 infty: 4.468e-04 (dx("U")... time: 1.88125 first: 9.438e-06 second: 3.473e-05 infty: 4.470e-04 (dx("U")... time: 1.8875 first: 9.418e-06 second: 3.474e-05 infty: 4.472e-04 (dx("U")... time: 1.89375 first: 9.395e-06 second: 3.476e-05 infty: 4.474e-04 (dx("U")... time: 1.9 first: 9.374e-06 second: 3.477e-05 infty: 4.475e-04 (dx("U")... time: 1.90625 first: 9.354e-06 second: 3.478e-05 infty: 4.477e-04 (dx("U")... time: 1.9125 first: 9.335e-06 second: 3.480e-05 infty: 4.478e-04 (dx("U")... time: 1.91875 first: 9.314e-06 second: 3.481e-05 infty: 4.478e-04 (dx("U")... time: 1.925 first: 9.295e-06 second: 3.483e-05 infty: 4.479e-04 (dx("U")... time: 1.93125 first: 9.276e-06 second: 3.485e-05 infty: 4.479e-04 (dx("U")... time: 1.9375 first: 9.256e-06 second: 3.486e-05 infty: 4.479e-04 (dx("U")... time: 1.94375 first: 9.230e-06 second: 3.488e-05 infty: 4.478e-04 (dx("U")... time: 1.95 first: 9.203e-06 second: 3.489e-05 infty: 4.478e-04 (dx("U")... time: 1.95625 first: 9.183e-06 second: 3.491e-05 infty: 4.477e-04 (dx("U")... time: 1.9625 first: 9.161e-06 second: 3.493e-05 infty: 4.476e-04 (dx("U")... time: 1.96875 first: 9.136e-06 second: 3.494e-05 infty: 4.475e-04 (dx("U")... time: 1.975 first: 9.111e-06 second: 3.496e-05 infty: 4.473e-04 (dx("U")... time: 1.98125 first: 9.087e-06 second: 3.497e-05 infty: 4.472e-04 (dx("U")... time: 1.9875 first: 9.067e-06 second: 3.499e-05 infty: 4.471e-04 (dx("U")... time: 1.99375 first: 9.045e-06 second: 3.500e-05 infty: 4.470e-04 (dx("U")... time: 2 first: 9.020e-06 second: 3.501e-05 infty: 4.469e-04 gerris-snapshot-131206/test/reynolds/reynolds.ref0000644000175100017510000000003512250371171017033 000000000000005 9981.61 6 79608.4 7 637619 gerris-snapshot-131206/test/reynolds/skewbox/0000755000175100017510000000000012250371673016251 500000000000000gerris-snapshot-131206/test/reynolds/skewbox/skewbox.gfs0000644000175100017510000000270712250371171020353 00000000000000# Title: Numerical viscosity for the skew-symmetric scheme with refined box # # Description: # # The skew-symmetric module with AMR. # # \begin{figure}[htbp] # \caption{\label{kinetic}Evolution of the kinetic energy.} # \begin{center} # \includegraphics[width=0.8\hsize]{kinetic.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{accuracy}Accuracy of the solution as a function of the level of refinement.} # \begin{center} # \includegraphics[width=0.8\hsize]{accuracy.eps} # \end{center} # \end{figure} # # Author: Daniel Fuster # Command: sh skew.sh skewbox.gfs 1 # Version: 120229 # Required files: skew.sh error.ref # Running time: # Generated files: kinetic.eps accuracy.eps # GModule skewsymmetric 1 2 GfsSkewSymmetric GfsBox GfsGEdge {} { Time { end = 2 dtmax = 1.e-3 } Refine (x > 0.25 || x < -0.25 || y > 0.25 || y < -0.25 ? LEVEL-1 : LEVEL + 1) ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } InitFaceValues {} { U0 = (- cos (2.*M_PI*x)*sin (2.*M_PI*y)) V0 = (sin (2.*M_PI*x)*cos (2.*M_PI*y)) U = U0 V = V0 } OutputScalarNorm { istep = 1 } div-LEVEL { v = Divergence } OutputScalarSum { istep = 1 } kinetic-LEVEL { v = Velocity2 } OutputErrorNorm { start = end } { awk '{ print 2**(LEVEL+1)/4+2**(LEVEL-1)*3/4,$3,$5,$7,$9 }' } { v = Velocity } { s = sqrt(U0*U0 + V0*V0) v = E relative = 1 } } GfsBox {} 1 1 right 1 1 top gerris-snapshot-131206/test/reynolds/skewbox/skew.sh0000644000175100017510000000267012250371171017474 00000000000000#!/bin/sh rm -f error for level in 5 6 7; do if gerris2D -DLEVEL=$level $1 >> error; then : else exit 1 fi done if cat < 0.01*Curve('error.ref',1,4).mean() or\ (Curve('error',1,5) - Curve('error.ref',1,5)).max() > 0.01*Curve('error.ref',1,5).mean(): print (Curve('error',1,4) - Curve('error.ref',1,4)).max(), 0.01*Curve('error.ref',1,4).mean() print (Curve('error',1,5) - Curve('error.ref',1,5)).max(), 0.01*Curve('error.ref',1,5).mean() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/reynolds/skewbox/error.ref0000644000175100017510000000015212250371171020007 0000000000000028 2 1.846e-01 2.233e-01 5.181e-01 56 2 4.817e-02 5.965e-02 3.022e-01 112 2 1.253e-02 1.538e-02 7.446e-02 gerris-snapshot-131206/test/reynolds/reynolds.sh0000644000175100017510000000507712250371171016704 00000000000000if test x$donotrun != xtrue; then rm -f reynolds tmp=`mktemp -d` for level in 5 6 7; do if sed "s/LEVEL/$level/g" < $1 | gerris2D - | awk -v m=$2 -v level=$level '{ time = $3 ke = $5 if (time == 0) ke0 = ke; }END{ a = -log(ke/ke0)/time nu = a/(4.*(2.*m*3.14159265359)^2) print level " " 1./nu }' >> reynolds; then : awk '{print 2**'$level', $0}' error$level.dat >> $tmp/error.dat else exit 1 fi done cat $tmp/error.dat > error rm -rf $tmp fi if cat < 0.01*Curve(div+'.ref',3,9).mean() or\ (Curve(div,3,7) - Curve(div+'.ref',3,7)).max() > 0.01*Curve(div+'.ref',3,7).mean(): print (Curve(div,3,9) - Curve(div+'.ref',3,9)).max(), 0.01*Curve(div+'.ref',3,9).mean() print (Curve(div,3,7) - Curve(div+'.ref',3,7)).max(), 0.01*Curve(div+'.ref',3,7).mean() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/reynolds/div6.ref0000644000175100017510000003043212250371171016050 00000000000000Divergence time: 0 first: 1.758e-15 second: 2.366e-15 infty: 8.882e-15 Divergence time: 0.0125 first: 4.152e-03 second: 5.358e-03 infty: 3.651e-02 Divergence time: 0.025 first: 4.480e-03 second: 5.885e-03 infty: 4.396e-02 Divergence time: 0.0375 first: 4.510e-03 second: 5.995e-03 infty: 4.462e-02 Divergence time: 0.05 first: 4.526e-03 second: 6.166e-03 infty: 4.043e-02 Divergence time: 0.0625 first: 4.644e-03 second: 6.285e-03 infty: 4.227e-02 Divergence time: 0.075 first: 4.758e-03 second: 6.493e-03 infty: 4.234e-02 Divergence time: 0.0875 first: 4.843e-03 second: 6.597e-03 infty: 4.438e-02 Divergence time: 0.1 first: 4.881e-03 second: 6.734e-03 infty: 4.192e-02 Divergence time: 0.1125 first: 4.877e-03 second: 6.803e-03 infty: 4.390e-02 Divergence time: 0.125 first: 4.928e-03 second: 6.870e-03 infty: 4.251e-02 Divergence time: 0.1375 first: 4.995e-03 second: 7.008e-03 infty: 4.174e-02 Divergence time: 0.15 first: 4.961e-03 second: 7.017e-03 infty: 4.758e-02 Divergence time: 0.1625 first: 4.991e-03 second: 7.032e-03 infty: 4.219e-02 Divergence time: 0.175 first: 5.014e-03 second: 7.063e-03 infty: 4.130e-02 Divergence time: 0.1875 first: 4.951e-03 second: 6.894e-03 infty: 4.206e-02 Divergence time: 0.2 first: 5.005e-03 second: 7.018e-03 infty: 4.240e-02 Divergence time: 0.2125 first: 5.025e-03 second: 7.036e-03 infty: 4.093e-02 Divergence time: 0.225 first: 4.969e-03 second: 6.925e-03 infty: 4.061e-02 Divergence time: 0.2375 first: 5.015e-03 second: 7.090e-03 infty: 4.210e-02 Divergence time: 0.25 first: 4.968e-03 second: 6.953e-03 infty: 3.901e-02 Divergence time: 0.2625 first: 4.949e-03 second: 6.872e-03 infty: 3.958e-02 Divergence time: 0.275 first: 4.993e-03 second: 7.018e-03 infty: 3.605e-02 Divergence time: 0.2875 first: 4.935e-03 second: 6.908e-03 infty: 3.997e-02 Divergence time: 0.3 first: 4.950e-03 second: 7.053e-03 infty: 4.684e-02 Divergence time: 0.3125 first: 4.928e-03 second: 7.012e-03 infty: 4.751e-02 Divergence time: 0.325 first: 4.906e-03 second: 6.998e-03 infty: 5.145e-02 Divergence time: 0.3375 first: 4.910e-03 second: 6.976e-03 infty: 5.285e-02 Divergence time: 0.35 first: 4.911e-03 second: 6.952e-03 infty: 5.493e-02 Divergence time: 0.3625 first: 4.955e-03 second: 6.965e-03 infty: 4.941e-02 Divergence time: 0.375 first: 4.989e-03 second: 7.015e-03 infty: 4.871e-02 Divergence time: 0.3875 first: 5.028e-03 second: 7.017e-03 infty: 4.868e-02 Divergence time: 0.4 first: 5.026e-03 second: 6.979e-03 infty: 3.989e-02 Divergence time: 0.4125 first: 5.005e-03 second: 6.880e-03 infty: 3.938e-02 Divergence time: 0.425 first: 4.984e-03 second: 6.774e-03 infty: 3.035e-02 Divergence time: 0.4375 first: 4.974e-03 second: 6.792e-03 infty: 3.246e-02 Divergence time: 0.45 first: 4.969e-03 second: 6.809e-03 infty: 3.613e-02 Divergence time: 0.4625 first: 4.922e-03 second: 6.767e-03 infty: 3.772e-02 Divergence time: 0.475 first: 4.871e-03 second: 6.732e-03 infty: 3.816e-02 Divergence time: 0.4875 first: 4.841e-03 second: 6.705e-03 infty: 3.818e-02 Divergence time: 0.5 first: 4.830e-03 second: 6.688e-03 infty: 3.819e-02 Divergence time: 0.5125 first: 4.828e-03 second: 6.665e-03 infty: 3.812e-02 Divergence time: 0.525 first: 4.826e-03 second: 6.648e-03 infty: 3.805e-02 Divergence time: 0.5375 first: 4.825e-03 second: 6.636e-03 infty: 3.801e-02 Divergence time: 0.55 first: 4.825e-03 second: 6.626e-03 infty: 3.798e-02 Divergence time: 0.5625 first: 4.824e-03 second: 6.618e-03 infty: 3.796e-02 Divergence time: 0.575 first: 4.826e-03 second: 6.614e-03 infty: 3.795e-02 Divergence time: 0.5875 first: 4.825e-03 second: 6.610e-03 infty: 3.795e-02 Divergence time: 0.6 first: 4.825e-03 second: 6.607e-03 infty: 3.794e-02 Divergence time: 0.6125 first: 4.825e-03 second: 6.604e-03 infty: 3.793e-02 Divergence time: 0.625 first: 4.825e-03 second: 6.602e-03 infty: 3.793e-02 Divergence time: 0.6375 first: 4.825e-03 second: 6.601e-03 infty: 3.793e-02 Divergence time: 0.65 first: 4.825e-03 second: 6.600e-03 infty: 3.792e-02 Divergence time: 0.6625 first: 4.825e-03 second: 6.599e-03 infty: 3.791e-02 Divergence time: 0.675 first: 4.825e-03 second: 6.599e-03 infty: 3.791e-02 Divergence time: 0.6875 first: 4.825e-03 second: 6.598e-03 infty: 3.791e-02 Divergence time: 0.7 first: 4.825e-03 second: 6.597e-03 infty: 3.791e-02 Divergence time: 0.7125 first: 4.825e-03 second: 6.597e-03 infty: 3.790e-02 Divergence time: 0.725 first: 4.825e-03 second: 6.596e-03 infty: 3.790e-02 Divergence time: 0.7375 first: 4.825e-03 second: 6.595e-03 infty: 3.789e-02 Divergence time: 0.75 first: 4.825e-03 second: 6.595e-03 infty: 3.790e-02 Divergence time: 0.7625 first: 4.826e-03 second: 6.594e-03 infty: 3.791e-02 Divergence time: 0.775 first: 4.826e-03 second: 6.577e-03 infty: 3.793e-02 Divergence time: 0.7875 first: 4.830e-03 second: 6.589e-03 infty: 3.794e-02 Divergence time: 0.8 first: 4.831e-03 second: 6.572e-03 infty: 3.796e-02 Divergence time: 0.8125 first: 4.835e-03 second: 6.560e-03 infty: 3.796e-02 Divergence time: 0.825 first: 4.843e-03 second: 6.588e-03 infty: 3.796e-02 Divergence time: 0.8375 first: 4.846e-03 second: 6.564e-03 infty: 3.832e-02 Divergence time: 0.85 first: 4.854e-03 second: 6.592e-03 infty: 3.831e-02 Divergence time: 0.8625 first: 4.861e-03 second: 6.596e-03 infty: 3.847e-02 Divergence time: 0.875 first: 4.867e-03 second: 6.626e-03 infty: 3.846e-02 Divergence time: 0.8875 first: 4.870e-03 second: 6.640e-03 infty: 3.843e-02 Divergence time: 0.9 first: 4.872e-03 second: 6.653e-03 infty: 3.841e-02 Divergence time: 0.9125 first: 4.874e-03 second: 6.658e-03 infty: 3.840e-02 Divergence time: 0.925 first: 4.877e-03 second: 6.660e-03 infty: 3.842e-02 Divergence time: 0.9375 first: 4.875e-03 second: 6.641e-03 infty: 3.839e-02 Divergence time: 0.95 first: 4.875e-03 second: 6.602e-03 infty: 3.831e-02 Divergence time: 0.9625 first: 4.883e-03 second: 6.643e-03 infty: 3.827e-02 Divergence time: 0.975 first: 4.890e-03 second: 6.650e-03 infty: 3.826e-02 Divergence time: 0.9875 first: 4.890e-03 second: 6.641e-03 infty: 3.828e-02 Divergence time: 1 first: 4.895e-03 second: 6.663e-03 infty: 3.839e-02 Divergence time: 1.0125 first: 4.904e-03 second: 6.663e-03 infty: 3.841e-02 Divergence time: 1.025 first: 4.911e-03 second: 6.691e-03 infty: 3.840e-02 Divergence time: 1.0375 first: 4.916e-03 second: 6.705e-03 infty: 3.834e-02 Divergence time: 1.05 first: 4.916e-03 second: 6.682e-03 infty: 3.850e-02 Divergence time: 1.0625 first: 4.918e-03 second: 6.699e-03 infty: 3.854e-02 Divergence time: 1.075 first: 4.926e-03 second: 6.697e-03 infty: 3.850e-02 Divergence time: 1.0875 first: 4.929e-03 second: 6.709e-03 infty: 3.841e-02 Divergence time: 1.1 first: 4.931e-03 second: 6.701e-03 infty: 3.791e-02 Divergence time: 1.1125 first: 4.938e-03 second: 6.726e-03 infty: 3.774e-02 Divergence time: 1.125 first: 4.949e-03 second: 6.752e-03 infty: 3.766e-02 Divergence time: 1.1375 first: 4.955e-03 second: 6.771e-03 infty: 3.774e-02 Divergence time: 1.15 first: 4.953e-03 second: 6.750e-03 infty: 3.765e-02 Divergence time: 1.1625 first: 4.943e-03 second: 6.751e-03 infty: 3.772e-02 Divergence time: 1.175 first: 4.940e-03 second: 6.782e-03 infty: 3.763e-02 Divergence time: 1.1875 first: 4.944e-03 second: 6.758e-03 infty: 4.034e-02 Divergence time: 1.2 first: 4.946e-03 second: 6.810e-03 infty: 4.153e-02 Divergence time: 1.2125 first: 4.953e-03 second: 6.799e-03 infty: 4.164e-02 Divergence time: 1.225 first: 4.956e-03 second: 6.830e-03 infty: 4.164e-02 Divergence time: 1.2375 first: 4.944e-03 second: 6.795e-03 infty: 4.153e-02 Divergence time: 1.25 first: 4.925e-03 second: 6.819e-03 infty: 4.838e-02 Divergence time: 1.2625 first: 4.922e-03 second: 6.790e-03 infty: 4.151e-02 Divergence time: 1.275 first: 4.923e-03 second: 6.847e-03 infty: 4.834e-02 Divergence time: 1.2875 first: 4.933e-03 second: 6.854e-03 infty: 4.359e-02 Divergence time: 1.3 first: 4.936e-03 second: 6.853e-03 infty: 4.365e-02 Divergence time: 1.3125 first: 4.925e-03 second: 6.856e-03 infty: 4.829e-02 Divergence time: 1.325 first: 4.922e-03 second: 6.869e-03 infty: 4.827e-02 Divergence time: 1.3375 first: 4.935e-03 second: 6.877e-03 infty: 4.351e-02 Divergence time: 1.35 first: 4.944e-03 second: 6.877e-03 infty: 4.355e-02 Divergence time: 1.3625 first: 4.921e-03 second: 6.846e-03 infty: 4.747e-02 Divergence time: 1.375 first: 4.897e-03 second: 6.819e-03 infty: 4.690e-02 Divergence time: 1.3875 first: 4.897e-03 second: 6.824e-03 infty: 5.302e-02 Divergence time: 1.4 first: 4.895e-03 second: 6.825e-03 infty: 5.331e-02 Divergence time: 1.4125 first: 4.893e-03 second: 6.842e-03 infty: 5.332e-02 Divergence time: 1.425 first: 4.912e-03 second: 6.859e-03 infty: 5.331e-02 Divergence time: 1.4375 first: 4.907e-03 second: 6.842e-03 infty: 5.204e-02 Divergence time: 1.45 first: 4.902e-03 second: 6.797e-03 infty: 5.330e-02 Divergence time: 1.4625 first: 4.897e-03 second: 6.799e-03 infty: 5.751e-02 Divergence time: 1.475 first: 4.882e-03 second: 6.779e-03 infty: 5.839e-02 Divergence time: 1.4875 first: 4.868e-03 second: 6.711e-03 infty: 5.672e-02 Divergence time: 1.5 first: 4.875e-03 second: 6.716e-03 infty: 5.259e-02 Divergence time: 1.5125 first: 4.875e-03 second: 6.689e-03 infty: 5.138e-02 Divergence time: 1.525 first: 4.881e-03 second: 6.664e-03 infty: 4.740e-02 Divergence time: 1.5375 first: 4.877e-03 second: 6.682e-03 infty: 5.261e-02 Divergence time: 1.55 first: 4.868e-03 second: 6.685e-03 infty: 5.281e-02 Divergence time: 1.5625 first: 4.859e-03 second: 6.665e-03 infty: 5.452e-02 Divergence time: 1.575 first: 4.877e-03 second: 6.624e-03 infty: 5.162e-02 Divergence time: 1.5875 first: 4.878e-03 second: 6.619e-03 infty: 4.735e-02 Divergence time: 1.6 first: 4.901e-03 second: 6.667e-03 infty: 4.978e-02 Divergence time: 1.6125 first: 4.879e-03 second: 6.638e-03 infty: 5.504e-02 Divergence time: 1.625 first: 4.839e-03 second: 6.597e-03 infty: 5.416e-02 Divergence time: 1.6375 first: 4.860e-03 second: 6.621e-03 infty: 5.212e-02 Divergence time: 1.65 first: 4.854e-03 second: 6.580e-03 infty: 4.529e-02 Divergence time: 1.6625 first: 4.848e-03 second: 6.525e-03 infty: 4.740e-02 Divergence time: 1.675 first: 4.852e-03 second: 6.538e-03 infty: 4.422e-02 Divergence time: 1.6875 first: 4.849e-03 second: 6.528e-03 infty: 4.603e-02 Divergence time: 1.7 first: 4.848e-03 second: 6.573e-03 infty: 5.311e-02 Divergence time: 1.7125 first: 4.853e-03 second: 6.583e-03 infty: 4.853e-02 Divergence time: 1.725 first: 4.860e-03 second: 6.617e-03 infty: 4.800e-02 Divergence time: 1.7375 first: 4.811e-03 second: 6.503e-03 infty: 4.850e-02 Divergence time: 1.75 first: 4.805e-03 second: 6.500e-03 infty: 4.993e-02 Divergence time: 1.7625 first: 4.834e-03 second: 6.538e-03 infty: 4.016e-02 Divergence time: 1.775 first: 4.826e-03 second: 6.538e-03 infty: 4.972e-02 Divergence time: 1.7875 first: 4.806e-03 second: 6.491e-03 infty: 4.020e-02 Divergence time: 1.8 first: 4.781e-03 second: 6.456e-03 infty: 4.484e-02 Divergence time: 1.8125 first: 4.794e-03 second: 6.491e-03 infty: 4.597e-02 Divergence time: 1.825 first: 4.789e-03 second: 6.473e-03 infty: 4.497e-02 Divergence time: 1.8375 first: 4.795e-03 second: 6.519e-03 infty: 4.654e-02 Divergence time: 1.85 first: 4.792e-03 second: 6.531e-03 infty: 5.336e-02 Divergence time: 1.8625 first: 4.803e-03 second: 6.522e-03 infty: 4.037e-02 Divergence time: 1.875 first: 4.783e-03 second: 6.508e-03 infty: 4.894e-02 Divergence time: 1.8875 first: 4.764e-03 second: 6.493e-03 infty: 4.601e-02 Divergence time: 1.9 first: 4.772e-03 second: 6.483e-03 infty: 4.322e-02 Divergence time: 1.9125 first: 4.772e-03 second: 6.484e-03 infty: 4.905e-02 Divergence time: 1.925 first: 4.764e-03 second: 6.511e-03 infty: 5.155e-02 Divergence time: 1.9375 first: 4.776e-03 second: 6.533e-03 infty: 5.463e-02 Divergence time: 1.95 first: 4.790e-03 second: 6.525e-03 infty: 4.015e-02 Divergence time: 1.9625 first: 4.756e-03 second: 6.475e-03 infty: 4.601e-02 Divergence time: 1.975 first: 4.781e-03 second: 6.542e-03 infty: 5.230e-02 Divergence time: 1.9875 first: 4.788e-03 second: 6.532e-03 infty: 4.800e-02 Divergence time: 2 first: 4.782e-03 second: 6.543e-03 infty: 5.408e-02 gerris-snapshot-131206/test/reynolds/div7.ref0000644000175100017510000006143212250371171016055 00000000000000Divergence time: 0 first: 3.776e-15 second: 5.130e-15 infty: 2.309e-14 Divergence time: 0.00625 first: 5.297e-04 second: 8.362e-04 infty: 1.662e-02 Divergence time: 0.0125 first: 5.899e-04 second: 9.905e-04 infty: 1.738e-02 Divergence time: 0.01875 first: 6.151e-04 second: 1.042e-03 infty: 1.802e-02 Divergence time: 0.025 first: 6.533e-04 second: 1.191e-03 infty: 2.313e-02 Divergence time: 0.03125 first: 6.742e-04 second: 1.170e-03 infty: 1.793e-02 Divergence time: 0.0375 first: 7.004e-04 second: 1.250e-03 infty: 2.399e-02 Divergence time: 0.04375 first: 7.259e-04 second: 1.308e-03 infty: 2.281e-02 Divergence time: 0.05 first: 7.487e-04 second: 1.364e-03 infty: 2.136e-02 Divergence time: 0.05625 first: 7.622e-04 second: 1.390e-03 infty: 2.404e-02 Divergence time: 0.0625 first: 7.853e-04 second: 1.438e-03 infty: 2.321e-02 Divergence time: 0.06875 first: 7.967e-04 second: 1.442e-03 infty: 2.018e-02 Divergence time: 0.075 first: 8.118e-04 second: 1.479e-03 infty: 2.214e-02 Divergence time: 0.08125 first: 8.212e-04 second: 1.509e-03 infty: 2.307e-02 Divergence time: 0.0875 first: 8.316e-04 second: 1.525e-03 infty: 2.205e-02 Divergence time: 0.09375 first: 8.443e-04 second: 1.547e-03 infty: 2.143e-02 Divergence time: 0.1 first: 8.457e-04 second: 1.547e-03 infty: 2.227e-02 Divergence time: 0.10625 first: 8.471e-04 second: 1.555e-03 infty: 2.205e-02 Divergence time: 0.1125 first: 8.579e-04 second: 1.588e-03 infty: 2.149e-02 Divergence time: 0.11875 first: 8.667e-04 second: 1.614e-03 infty: 2.158e-02 Divergence time: 0.125 first: 8.663e-04 second: 1.600e-03 infty: 2.224e-02 Divergence time: 0.13125 first: 8.643e-04 second: 1.585e-03 infty: 2.142e-02 Divergence time: 0.1375 first: 8.653e-04 second: 1.584e-03 infty: 2.128e-02 Divergence time: 0.14375 first: 8.649e-04 second: 1.591e-03 infty: 2.257e-02 Divergence time: 0.15 first: 8.706e-04 second: 1.604e-03 infty: 2.202e-02 Divergence time: 0.15625 first: 8.803e-04 second: 1.630e-03 infty: 2.253e-02 Divergence time: 0.1625 first: 8.835e-04 second: 1.647e-03 infty: 2.203e-02 Divergence time: 0.16875 first: 8.805e-04 second: 1.632e-03 infty: 2.198e-02 Divergence time: 0.175 first: 8.761e-04 second: 1.613e-03 infty: 2.185e-02 Divergence time: 0.18125 first: 8.759e-04 second: 1.612e-03 infty: 2.145e-02 Divergence time: 0.1875 first: 8.805e-04 second: 1.632e-03 infty: 2.140e-02 Divergence time: 0.19375 first: 8.865e-04 second: 1.660e-03 infty: 2.176e-02 Divergence time: 0.2 first: 8.842e-04 second: 1.648e-03 infty: 2.201e-02 Divergence time: 0.20625 first: 8.824e-04 second: 1.635e-03 infty: 2.116e-02 Divergence time: 0.2125 first: 8.818e-04 second: 1.636e-03 infty: 2.186e-02 Divergence time: 0.21875 first: 8.789e-04 second: 1.628e-03 infty: 2.123e-02 Divergence time: 0.225 first: 8.815e-04 second: 1.640e-03 infty: 2.130e-02 Divergence time: 0.23125 first: 8.833e-04 second: 1.660e-03 infty: 2.197e-02 Divergence time: 0.2375 first: 8.846e-04 second: 1.664e-03 infty: 2.125e-02 Divergence time: 0.24375 first: 8.806e-04 second: 1.640e-03 infty: 2.129e-02 Divergence time: 0.25 first: 8.789e-04 second: 1.640e-03 infty: 2.118e-02 Divergence time: 0.25625 first: 8.728e-04 second: 1.615e-03 infty: 2.135e-02 Divergence time: 0.2625 first: 8.756e-04 second: 1.642e-03 infty: 2.199e-02 Divergence time: 0.26875 first: 8.767e-04 second: 1.650e-03 infty: 2.115e-02 Divergence time: 0.275 first: 8.699e-04 second: 1.623e-03 infty: 2.116e-02 Divergence time: 0.28125 first: 8.674e-04 second: 1.617e-03 infty: 2.138e-02 Divergence time: 0.2875 first: 8.675e-04 second: 1.626e-03 infty: 2.129e-02 Divergence time: 0.29375 first: 8.662e-04 second: 1.625e-03 infty: 2.148e-02 Divergence time: 0.3 first: 8.626e-04 second: 1.612e-03 infty: 2.153e-02 Divergence time: 0.30625 first: 8.609e-04 second: 1.611e-03 infty: 2.104e-02 Divergence time: 0.3125 first: 8.577e-04 second: 1.599e-03 infty: 2.227e-02 Divergence time: 0.31875 first: 8.551e-04 second: 1.597e-03 infty: 2.203e-02 Divergence time: 0.325 first: 8.554e-04 second: 1.592e-03 infty: 2.128e-02 Divergence time: 0.33125 first: 8.528e-04 second: 1.595e-03 infty: 2.088e-02 Divergence time: 0.3375 first: 8.442e-04 second: 1.570e-03 infty: 2.216e-02 Divergence time: 0.34375 first: 8.428e-04 second: 1.578e-03 infty: 2.315e-02 Divergence time: 0.35 first: 8.412e-04 second: 1.578e-03 infty: 2.332e-02 Divergence time: 0.35625 first: 8.349e-04 second: 1.543e-03 infty: 2.327e-02 Divergence time: 0.3625 first: 8.321e-04 second: 1.548e-03 infty: 2.401e-02 Divergence time: 0.36875 first: 8.292e-04 second: 1.541e-03 infty: 2.512e-02 Divergence time: 0.375 first: 8.199e-04 second: 1.520e-03 infty: 2.622e-02 Divergence time: 0.38125 first: 8.173e-04 second: 1.512e-03 infty: 2.825e-02 Divergence time: 0.3875 first: 8.159e-04 second: 1.511e-03 infty: 2.730e-02 Divergence time: 0.39375 first: 8.201e-04 second: 1.526e-03 infty: 2.159e-02 Divergence time: 0.4 first: 8.158e-04 second: 1.469e-03 infty: 1.952e-02 Divergence time: 0.40625 first: 8.149e-04 second: 1.455e-03 infty: 2.235e-02 Divergence time: 0.4125 first: 8.165e-04 second: 1.464e-03 infty: 1.895e-02 Divergence time: 0.41875 first: 8.167e-04 second: 1.465e-03 infty: 1.957e-02 Divergence time: 0.425 first: 8.164e-04 second: 1.449e-03 infty: 1.957e-02 Divergence time: 0.43125 first: 8.183e-04 second: 1.435e-03 infty: 1.752e-02 Divergence time: 0.4375 first: 8.230e-04 second: 1.472e-03 infty: 1.926e-02 Divergence time: 0.44375 first: 8.233e-04 second: 1.463e-03 infty: 1.926e-02 Divergence time: 0.45 first: 8.242e-04 second: 1.432e-03 infty: 1.747e-02 Divergence time: 0.45625 first: 8.301e-04 second: 1.464e-03 infty: 1.747e-02 Divergence time: 0.4625 first: 8.307e-04 second: 1.458e-03 infty: 1.862e-02 Divergence time: 0.46875 first: 8.288e-04 second: 1.443e-03 infty: 1.554e-02 Divergence time: 0.475 first: 8.294e-04 second: 1.451e-03 infty: 1.797e-02 Divergence time: 0.48125 first: 8.325e-04 second: 1.472e-03 infty: 1.550e-02 Divergence time: 0.4875 first: 8.357e-04 second: 1.482e-03 infty: 1.751e-02 Divergence time: 0.49375 first: 8.312e-04 second: 1.464e-03 infty: 1.790e-02 Divergence time: 0.5 first: 8.249e-04 second: 1.456e-03 infty: 2.092e-02 Divergence time: 0.50625 first: 8.224e-04 second: 1.467e-03 infty: 2.469e-02 Divergence time: 0.5125 first: 8.205e-04 second: 1.469e-03 infty: 2.482e-02 Divergence time: 0.51875 first: 8.199e-04 second: 1.452e-03 infty: 2.482e-02 Divergence time: 0.525 first: 8.241e-04 second: 1.473e-03 infty: 1.997e-02 Divergence time: 0.53125 first: 8.265e-04 second: 1.486e-03 infty: 2.175e-02 Divergence time: 0.5375 first: 8.263e-04 second: 1.477e-03 infty: 2.281e-02 Divergence time: 0.54375 first: 8.231e-04 second: 1.457e-03 infty: 2.141e-02 Divergence time: 0.55 first: 8.374e-04 second: 1.499e-03 infty: 2.060e-02 Divergence time: 0.55625 first: 8.425e-04 second: 1.506e-03 infty: 2.207e-02 Divergence time: 0.5625 first: 8.420e-04 second: 1.502e-03 infty: 2.174e-02 Divergence time: 0.56875 first: 8.359e-04 second: 1.483e-03 infty: 2.236e-02 Divergence time: 0.575 first: 8.441e-04 second: 1.524e-03 infty: 2.254e-02 Divergence time: 0.58125 first: 8.491e-04 second: 1.524e-03 infty: 2.247e-02 Divergence time: 0.5875 first: 8.527e-04 second: 1.524e-03 infty: 2.111e-02 Divergence time: 0.59375 first: 8.527e-04 second: 1.526e-03 infty: 2.254e-02 Divergence time: 0.6 first: 8.544e-04 second: 1.529e-03 infty: 2.249e-02 Divergence time: 0.60625 first: 8.603e-04 second: 1.547e-03 infty: 2.095e-02 Divergence time: 0.6125 first: 8.540e-04 second: 1.535e-03 infty: 2.256e-02 Divergence time: 0.61875 first: 8.561e-04 second: 1.536e-03 infty: 2.257e-02 Divergence time: 0.625 first: 8.604e-04 second: 1.544e-03 infty: 2.256e-02 Divergence time: 0.63125 first: 8.658e-04 second: 1.566e-03 infty: 2.241e-02 Divergence time: 0.6375 first: 8.685e-04 second: 1.561e-03 infty: 2.236e-02 Divergence time: 0.64375 first: 8.675e-04 second: 1.561e-03 infty: 2.107e-02 Divergence time: 0.65 first: 8.618e-04 second: 1.554e-03 infty: 2.235e-02 Divergence time: 0.65625 first: 8.667e-04 second: 1.570e-03 infty: 2.232e-02 Divergence time: 0.6625 first: 8.640e-04 second: 1.560e-03 infty: 2.233e-02 Divergence time: 0.66875 first: 8.603e-04 second: 1.547e-03 infty: 2.230e-02 Divergence time: 0.675 first: 8.654e-04 second: 1.556e-03 infty: 2.111e-02 Divergence time: 0.68125 first: 8.611e-04 second: 1.554e-03 infty: 2.230e-02 Divergence time: 0.6875 first: 8.650e-04 second: 1.576e-03 infty: 2.229e-02 Divergence time: 0.69375 first: 8.660e-04 second: 1.565e-03 infty: 2.232e-02 Divergence time: 0.7 first: 8.655e-04 second: 1.561e-03 infty: 2.223e-02 Divergence time: 0.70625 first: 8.641e-04 second: 1.547e-03 infty: 2.217e-02 Divergence time: 0.7125 first: 8.600e-04 second: 1.539e-03 infty: 2.019e-02 Divergence time: 0.71875 first: 8.539e-04 second: 1.523e-03 infty: 2.017e-02 Divergence time: 0.725 first: 8.445e-04 second: 1.511e-03 infty: 2.206e-02 Divergence time: 0.73125 first: 8.315e-04 second: 1.471e-03 infty: 2.255e-02 Divergence time: 0.7375 first: 8.263e-04 second: 1.453e-03 infty: 2.094e-02 Divergence time: 0.74375 first: 8.209e-04 second: 1.441e-03 infty: 2.240e-02 Divergence time: 0.75 first: 8.236e-04 second: 1.447e-03 infty: 2.054e-02 Divergence time: 0.75625 first: 8.229e-04 second: 1.443e-03 infty: 2.010e-02 Divergence time: 0.7625 first: 8.157e-04 second: 1.416e-03 infty: 2.031e-02 Divergence time: 0.76875 first: 8.092e-04 second: 1.392e-03 infty: 2.084e-02 Divergence time: 0.775 first: 8.117e-04 second: 1.414e-03 infty: 1.797e-02 Divergence time: 0.78125 first: 8.081e-04 second: 1.404e-03 infty: 2.123e-02 Divergence time: 0.7875 first: 8.035e-04 second: 1.382e-03 infty: 2.271e-02 Divergence time: 0.79375 first: 7.960e-04 second: 1.359e-03 infty: 2.068e-02 Divergence time: 0.8 first: 7.907e-04 second: 1.351e-03 infty: 2.144e-02 Divergence time: 0.80625 first: 7.851e-04 second: 1.324e-03 infty: 2.290e-02 Divergence time: 0.8125 first: 7.903e-04 second: 1.349e-03 infty: 1.950e-02 Divergence time: 0.81875 first: 7.909e-04 second: 1.357e-03 infty: 2.140e-02 Divergence time: 0.825 first: 7.827e-04 second: 1.330e-03 infty: 2.282e-02 Divergence time: 0.83125 first: 7.821e-04 second: 1.335e-03 infty: 2.241e-02 Divergence time: 0.8375 first: 7.777e-04 second: 1.334e-03 infty: 2.260e-02 Divergence time: 0.84375 first: 7.728e-04 second: 1.315e-03 infty: 2.264e-02 Divergence time: 0.85 first: 7.724e-04 second: 1.301e-03 infty: 1.967e-02 Divergence time: 0.85625 first: 7.760e-04 second: 1.312e-03 infty: 1.962e-02 Divergence time: 0.8625 first: 7.722e-04 second: 1.290e-03 infty: 1.609e-02 Divergence time: 0.86875 first: 7.689e-04 second: 1.273e-03 infty: 1.535e-02 Divergence time: 0.875 first: 7.639e-04 second: 1.251e-03 infty: 1.435e-02 Divergence time: 0.88125 first: 7.682e-04 second: 1.279e-03 infty: 1.602e-02 Divergence time: 0.8875 first: 7.640e-04 second: 1.263e-03 infty: 1.420e-02 Divergence time: 0.89375 first: 7.616e-04 second: 1.243e-03 infty: 1.304e-02 Divergence time: 0.9 first: 7.555e-04 second: 1.225e-03 infty: 1.457e-02 Divergence time: 0.90625 first: 7.530e-04 second: 1.215e-03 infty: 1.300e-02 Divergence time: 0.9125 first: 7.539e-04 second: 1.221e-03 infty: 1.339e-02 Divergence time: 0.91875 first: 7.538e-04 second: 1.229e-03 infty: 1.572e-02 Divergence time: 0.925 first: 7.532e-04 second: 1.221e-03 infty: 1.368e-02 Divergence time: 0.93125 first: 7.516e-04 second: 1.214e-03 infty: 1.518e-02 Divergence time: 0.9375 first: 7.504e-04 second: 1.208e-03 infty: 1.356e-02 Divergence time: 0.94375 first: 7.535e-04 second: 1.227e-03 infty: 1.519e-02 Divergence time: 0.95 first: 7.527e-04 second: 1.225e-03 infty: 1.530e-02 Divergence time: 0.95625 first: 7.560e-04 second: 1.237e-03 infty: 1.582e-02 Divergence time: 0.9625 first: 7.536e-04 second: 1.225e-03 infty: 1.437e-02 Divergence time: 0.96875 first: 7.564e-04 second: 1.236e-03 infty: 1.600e-02 Divergence time: 0.975 first: 7.567e-04 second: 1.240e-03 infty: 1.449e-02 Divergence time: 0.98125 first: 7.586e-04 second: 1.254e-03 infty: 1.567e-02 Divergence time: 0.9875 first: 7.570e-04 second: 1.241e-03 infty: 1.440e-02 Divergence time: 0.99375 first: 7.536e-04 second: 1.223e-03 infty: 1.410e-02 Divergence time: 1 first: 7.535e-04 second: 1.216e-03 infty: 1.277e-02 Divergence time: 1.00625 first: 7.577e-04 second: 1.243e-03 infty: 1.619e-02 Divergence time: 1.0125 first: 7.605e-04 second: 1.254e-03 infty: 1.648e-02 Divergence time: 1.01875 first: 7.622e-04 second: 1.262e-03 infty: 1.609e-02 Divergence time: 1.025 first: 7.573e-04 second: 1.233e-03 infty: 1.413e-02 Divergence time: 1.03125 first: 7.551e-04 second: 1.219e-03 infty: 1.278e-02 Divergence time: 1.0375 first: 7.525e-04 second: 1.208e-03 infty: 1.285e-02 Divergence time: 1.04375 first: 7.634e-04 second: 1.276e-03 infty: 1.627e-02 Divergence time: 1.05 first: 7.631e-04 second: 1.268e-03 infty: 1.547e-02 Divergence time: 1.05625 first: 7.611e-04 second: 1.245e-03 infty: 1.420e-02 Divergence time: 1.0625 first: 7.570e-04 second: 1.218e-03 infty: 1.297e-02 Divergence time: 1.06875 first: 7.560e-04 second: 1.218e-03 infty: 1.568e-02 Divergence time: 1.075 first: 7.564e-04 second: 1.221e-03 infty: 1.301e-02 Divergence time: 1.08125 first: 7.667e-04 second: 1.281e-03 infty: 1.610e-02 Divergence time: 1.0875 first: 7.647e-04 second: 1.271e-03 infty: 1.629e-02 Divergence time: 1.09375 first: 7.627e-04 second: 1.248e-03 infty: 1.423e-02 Divergence time: 1.1 first: 7.581e-04 second: 1.218e-03 infty: 1.309e-02 Divergence time: 1.10625 first: 7.560e-04 second: 1.209e-03 infty: 1.328e-02 Divergence time: 1.1125 first: 7.640e-04 second: 1.260e-03 infty: 1.629e-02 Divergence time: 1.11875 first: 7.674e-04 second: 1.289e-03 infty: 1.545e-02 Divergence time: 1.125 first: 7.644e-04 second: 1.259e-03 infty: 1.415e-02 Divergence time: 1.13125 first: 7.578e-04 second: 1.217e-03 infty: 1.339e-02 Divergence time: 1.1375 first: 7.571e-04 second: 1.216e-03 infty: 1.352e-02 Divergence time: 1.14375 first: 7.624e-04 second: 1.244e-03 infty: 1.332e-02 Divergence time: 1.15 first: 7.672e-04 second: 1.275e-03 infty: 1.631e-02 Divergence time: 1.15625 first: 7.644e-04 second: 1.265e-03 infty: 1.425e-02 Divergence time: 1.1625 first: 7.629e-04 second: 1.248e-03 infty: 1.457e-02 Divergence time: 1.16875 first: 7.606e-04 second: 1.230e-03 infty: 1.364e-02 Divergence time: 1.175 first: 7.607e-04 second: 1.231e-03 infty: 1.386e-02 Divergence time: 1.18125 first: 7.645e-04 second: 1.246e-03 infty: 1.323e-02 Divergence time: 1.1875 first: 7.680e-04 second: 1.283e-03 infty: 1.622e-02 Divergence time: 1.19375 first: 7.633e-04 second: 1.257e-03 infty: 1.393e-02 Divergence time: 1.2 first: 7.625e-04 second: 1.241e-03 infty: 1.347e-02 Divergence time: 1.20625 first: 7.632e-04 second: 1.239e-03 infty: 1.357e-02 Divergence time: 1.2125 first: 7.636e-04 second: 1.242e-03 infty: 1.416e-02 Divergence time: 1.21875 first: 7.643e-04 second: 1.245e-03 infty: 1.614e-02 Divergence time: 1.225 first: 7.685e-04 second: 1.281e-03 infty: 1.566e-02 Divergence time: 1.23125 first: 7.634e-04 second: 1.257e-03 infty: 1.394e-02 Divergence time: 1.2375 first: 7.641e-04 second: 1.253e-03 infty: 1.490e-02 Divergence time: 1.24375 first: 7.633e-04 second: 1.243e-03 infty: 1.487e-02 Divergence time: 1.25 first: 7.635e-04 second: 1.249e-03 infty: 2.020e-02 Divergence time: 1.25625 first: 7.658e-04 second: 1.269e-03 infty: 1.660e-02 Divergence time: 1.2625 first: 7.657e-04 second: 1.269e-03 infty: 1.618e-02 Divergence time: 1.26875 first: 7.650e-04 second: 1.261e-03 infty: 1.627e-02 Divergence time: 1.275 first: 7.628e-04 second: 1.254e-03 infty: 1.560e-02 Divergence time: 1.28125 first: 7.609e-04 second: 1.238e-03 infty: 1.557e-02 Divergence time: 1.2875 first: 7.636e-04 second: 1.260e-03 infty: 2.089e-02 Divergence time: 1.29375 first: 7.644e-04 second: 1.272e-03 infty: 1.683e-02 Divergence time: 1.3 first: 7.618e-04 second: 1.266e-03 infty: 1.971e-02 Divergence time: 1.30625 first: 7.594e-04 second: 1.248e-03 infty: 1.676e-02 Divergence time: 1.3125 first: 7.597e-04 second: 1.258e-03 infty: 2.055e-02 Divergence time: 1.31875 first: 7.618e-04 second: 1.261e-03 infty: 2.154e-02 Divergence time: 1.325 first: 7.604e-04 second: 1.266e-03 infty: 2.337e-02 Divergence time: 1.33125 first: 7.603e-04 second: 1.255e-03 infty: 1.642e-02 Divergence time: 1.3375 first: 7.637e-04 second: 1.270e-03 infty: 2.027e-02 Divergence time: 1.34375 first: 7.670e-04 second: 1.296e-03 infty: 2.191e-02 Divergence time: 1.35 first: 7.641e-04 second: 1.288e-03 infty: 2.622e-02 Divergence time: 1.35625 first: 7.652e-04 second: 1.292e-03 infty: 2.233e-02 Divergence time: 1.3625 first: 7.613e-04 second: 1.260e-03 infty: 1.851e-02 Divergence time: 1.36875 first: 7.620e-04 second: 1.254e-03 infty: 1.650e-02 Divergence time: 1.375 first: 7.686e-04 second: 1.298e-03 infty: 2.354e-02 Divergence time: 1.38125 first: 7.696e-04 second: 1.307e-03 infty: 2.317e-02 Divergence time: 1.3875 first: 7.702e-04 second: 1.318e-03 infty: 2.397e-02 Divergence time: 1.39375 first: 7.668e-04 second: 1.300e-03 infty: 2.472e-02 Divergence time: 1.4 first: 7.599e-04 second: 1.249e-03 infty: 2.110e-02 Divergence time: 1.40625 first: 7.621e-04 second: 1.257e-03 infty: 2.054e-02 Divergence time: 1.4125 first: 7.713e-04 second: 1.319e-03 infty: 2.747e-02 Divergence time: 1.41875 first: 7.707e-04 second: 1.304e-03 infty: 2.318e-02 Divergence time: 1.425 first: 7.727e-04 second: 1.318e-03 infty: 2.381e-02 Divergence time: 1.43125 first: 7.649e-04 second: 1.298e-03 infty: 2.465e-02 Divergence time: 1.4375 first: 7.630e-04 second: 1.278e-03 infty: 2.184e-02 Divergence time: 1.44375 first: 7.628e-04 second: 1.269e-03 infty: 2.333e-02 Divergence time: 1.45 first: 7.697e-04 second: 1.308e-03 infty: 2.417e-02 Divergence time: 1.45625 first: 7.682e-04 second: 1.289e-03 infty: 2.310e-02 Divergence time: 1.4625 first: 7.769e-04 second: 1.319e-03 infty: 2.403e-02 Divergence time: 1.46875 first: 7.726e-04 second: 1.299e-03 infty: 2.381e-02 Divergence time: 1.475 first: 7.673e-04 second: 1.272e-03 infty: 2.158e-02 Divergence time: 1.48125 first: 7.746e-04 second: 1.316e-03 infty: 2.463e-02 Divergence time: 1.4875 first: 7.710e-04 second: 1.298e-03 infty: 2.259e-02 Divergence time: 1.49375 first: 7.695e-04 second: 1.289e-03 infty: 2.313e-02 Divergence time: 1.5 first: 7.739e-04 second: 1.318e-03 infty: 2.116e-02 Divergence time: 1.50625 first: 7.703e-04 second: 1.288e-03 infty: 2.391e-02 Divergence time: 1.5125 first: 7.697e-04 second: 1.287e-03 infty: 2.117e-02 Divergence time: 1.51875 first: 7.687e-04 second: 1.289e-03 infty: 2.542e-02 Divergence time: 1.525 first: 7.724e-04 second: 1.291e-03 infty: 2.136e-02 Divergence time: 1.53125 first: 7.789e-04 second: 1.320e-03 infty: 2.122e-02 Divergence time: 1.5375 first: 7.817e-04 second: 1.331e-03 infty: 2.426e-02 Divergence time: 1.54375 first: 7.844e-04 second: 1.336e-03 infty: 2.344e-02 Divergence time: 1.55 first: 7.823e-04 second: 1.332e-03 infty: 2.176e-02 Divergence time: 1.55625 first: 7.832e-04 second: 1.346e-03 infty: 2.489e-02 Divergence time: 1.5625 first: 7.857e-04 second: 1.344e-03 infty: 2.555e-02 Divergence time: 1.56875 first: 7.817e-04 second: 1.312e-03 infty: 2.063e-02 Divergence time: 1.575 first: 7.768e-04 second: 1.290e-03 infty: 2.034e-02 Divergence time: 1.58125 first: 7.754e-04 second: 1.293e-03 infty: 2.391e-02 Divergence time: 1.5875 first: 7.711e-04 second: 1.290e-03 infty: 2.250e-02 Divergence time: 1.59375 first: 7.688e-04 second: 1.285e-03 infty: 2.404e-02 Divergence time: 1.6 first: 7.702e-04 second: 1.297e-03 infty: 2.495e-02 Divergence time: 1.60625 first: 7.821e-04 second: 1.331e-03 infty: 2.085e-02 Divergence time: 1.6125 first: 7.884e-04 second: 1.333e-03 infty: 1.750e-02 Divergence time: 1.61875 first: 7.912e-04 second: 1.329e-03 infty: 1.653e-02 Divergence time: 1.625 first: 7.891e-04 second: 1.327e-03 infty: 2.178e-02 Divergence time: 1.63125 first: 7.876e-04 second: 1.336e-03 infty: 2.339e-02 Divergence time: 1.6375 first: 7.895e-04 second: 1.354e-03 infty: 2.405e-02 Divergence time: 1.64375 first: 7.894e-04 second: 1.351e-03 infty: 2.498e-02 Divergence time: 1.65 first: 7.959e-04 second: 1.353e-03 infty: 2.159e-02 Divergence time: 1.65625 first: 7.997e-04 second: 1.368e-03 infty: 2.333e-02 Divergence time: 1.6625 first: 8.007e-04 second: 1.373e-03 infty: 2.072e-02 Divergence time: 1.66875 first: 8.053e-04 second: 1.368e-03 infty: 1.937e-02 Divergence time: 1.675 first: 8.022e-04 second: 1.374e-03 infty: 2.369e-02 Divergence time: 1.68125 first: 7.992e-04 second: 1.377e-03 infty: 2.386e-02 Divergence time: 1.6875 first: 8.016e-04 second: 1.388e-03 infty: 2.338e-02 Divergence time: 1.69375 first: 8.138e-04 second: 1.416e-03 infty: 2.121e-02 Divergence time: 1.7 first: 8.167e-04 second: 1.420e-03 infty: 2.302e-02 Divergence time: 1.70625 first: 8.188e-04 second: 1.412e-03 infty: 2.144e-02 Divergence time: 1.7125 first: 8.165e-04 second: 1.405e-03 infty: 2.009e-02 Divergence time: 1.71875 first: 8.121e-04 second: 1.397e-03 infty: 2.222e-02 Divergence time: 1.725 first: 8.090e-04 second: 1.399e-03 infty: 2.222e-02 Divergence time: 1.73125 first: 8.040e-04 second: 1.393e-03 infty: 2.345e-02 Divergence time: 1.7375 first: 8.037e-04 second: 1.382e-03 infty: 2.122e-02 Divergence time: 1.74375 first: 8.059e-04 second: 1.393e-03 infty: 2.253e-02 Divergence time: 1.75 first: 8.101e-04 second: 1.401e-03 infty: 2.216e-02 Divergence time: 1.75625 first: 8.104e-04 second: 1.400e-03 infty: 2.163e-02 Divergence time: 1.7625 first: 8.126e-04 second: 1.398e-03 infty: 1.994e-02 Divergence time: 1.76875 first: 8.107e-04 second: 1.396e-03 infty: 2.235e-02 Divergence time: 1.775 first: 8.059e-04 second: 1.388e-03 infty: 2.327e-02 Divergence time: 1.78125 first: 8.079e-04 second: 1.393e-03 infty: 2.263e-02 Divergence time: 1.7875 first: 8.093e-04 second: 1.396e-03 infty: 2.026e-02 Divergence time: 1.79375 first: 8.109e-04 second: 1.400e-03 infty: 2.283e-02 Divergence time: 1.8 first: 8.076e-04 second: 1.407e-03 infty: 2.147e-02 Divergence time: 1.80625 first: 8.069e-04 second: 1.395e-03 infty: 2.251e-02 Divergence time: 1.8125 first: 8.119e-04 second: 1.403e-03 infty: 2.020e-02 Divergence time: 1.81875 first: 8.163e-04 second: 1.411e-03 infty: 2.316e-02 Divergence time: 1.825 first: 8.162e-04 second: 1.416e-03 infty: 2.074e-02 Divergence time: 1.83125 first: 8.145e-04 second: 1.411e-03 infty: 2.388e-02 Divergence time: 1.8375 first: 8.117e-04 second: 1.405e-03 infty: 2.140e-02 Divergence time: 1.84375 first: 8.097e-04 second: 1.411e-03 infty: 2.277e-02 Divergence time: 1.85 first: 8.134e-04 second: 1.407e-03 infty: 1.939e-02 Divergence time: 1.85625 first: 8.129e-04 second: 1.398e-03 infty: 2.256e-02 Divergence time: 1.8625 first: 8.086e-04 second: 1.399e-03 infty: 2.261e-02 Divergence time: 1.86875 first: 8.099e-04 second: 1.396e-03 infty: 2.034e-02 Divergence time: 1.875 first: 8.073e-04 second: 1.393e-03 infty: 2.232e-02 Divergence time: 1.88125 first: 8.057e-04 second: 1.407e-03 infty: 2.348e-02 Divergence time: 1.8875 first: 8.056e-04 second: 1.412e-03 infty: 2.183e-02 Divergence time: 1.89375 first: 8.027e-04 second: 1.405e-03 infty: 2.475e-02 Divergence time: 1.9 first: 8.017e-04 second: 1.394e-03 infty: 2.143e-02 Divergence time: 1.90625 first: 7.992e-04 second: 1.380e-03 infty: 2.231e-02 Divergence time: 1.9125 first: 8.031e-04 second: 1.384e-03 infty: 2.381e-02 Divergence time: 1.91875 first: 8.045e-04 second: 1.382e-03 infty: 2.111e-02 Divergence time: 1.925 first: 8.045e-04 second: 1.398e-03 infty: 2.126e-02 Divergence time: 1.93125 first: 8.043e-04 second: 1.402e-03 infty: 2.258e-02 Divergence time: 1.9375 first: 8.020e-04 second: 1.380e-03 infty: 2.197e-02 Divergence time: 1.94375 first: 8.031e-04 second: 1.376e-03 infty: 1.949e-02 Divergence time: 1.95 first: 8.050e-04 second: 1.391e-03 infty: 2.114e-02 Divergence time: 1.95625 first: 8.004e-04 second: 1.383e-03 infty: 2.201e-02 Divergence time: 1.9625 first: 7.979e-04 second: 1.365e-03 infty: 2.287e-02 Divergence time: 1.96875 first: 7.904e-04 second: 1.346e-03 infty: 2.201e-02 Divergence time: 1.975 first: 7.910e-04 second: 1.362e-03 infty: 2.340e-02 Divergence time: 1.98125 first: 7.889e-04 second: 1.361e-03 infty: 2.250e-02 Divergence time: 1.9875 first: 7.872e-04 second: 1.351e-03 infty: 2.457e-02 Divergence time: 1.99375 first: 7.881e-04 second: 1.346e-03 infty: 2.024e-02 Divergence time: 2 first: 7.812e-04 second: 1.318e-03 infty: 2.282e-02 gerris-snapshot-131206/test/couette.sh0000755000175100017510000000003212250371662014650 00000000000000python -u test.py couette gerris-snapshot-131206/test/axi.sh0000755000175100017510000000002612250371662013764 00000000000000python -u test.py axi gerris-snapshot-131206/test/shear.sh0000755000175100017510000000003012250371662014300 00000000000000python -u test.py shear gerris-snapshot-131206/test/Makefile.in0000644000175100017510000016233412250371663014725 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.deps \ $(srcdir)/Makefile.in subdir = test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tty_colors = \ red=; grn=; lgn=; blu=; std= am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } # Restructured Text title and section. am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//' am__rst_section = sed 'p;s/./=/g;p;g' # Put stdin (possibly several lines separated by ". ") in a box. # Prefix each line by 'col' and terminate each with 'std', for coloring. # Multi line coloring is problematic with "less -R", so we really need # to color each line individually. am__text_box = $(AWK) '{ \ n = split($$0, lines, "\\. "); max = 0; \ for (i = 1; i <= n; ++i) \ if (max < length(lines[i])) \ max = length(lines[i]); \ for (i = 0; i < max; ++i) \ line = line "="; \ print col line std; \ for (i = 1; i <= n; ++i) \ if (lines[i]) \ print col lines[i] std; \ print col line std; \ }' # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log, and passes # TESTS_ENVIRONMENT. Save and restore TERM around use of # TESTS_ENVIRONMENT, in case that unsets it. am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ srcdir=$(srcdir); export srcdir; \ rm -f $@-t; \ am__trap='rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st'; \ trap "st=129; $$am__trap" 1; trap "st=130; $$am__trap" 2; \ trap "st=141; $$am__trap" 13; trap "st=143; $$am__trap" 15; \ am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \ test "x$$am__odir" = x. || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ $(TESTS_ENVIRONMENT) # To be appended to the command running the test. Handle the stdout # and stderr redirection, and catch the exit status. am__check_post = \ >$@-t 2>&1; \ estatus=$$?; \ if test -n '$(DISABLE_HARD_ERRORS)' \ && test $$estatus -eq 99; then \ estatus=1; \ fi; \ TERM=$$__SAVED_TERM; export TERM; \ $(am__tty_colors); \ xfailed=PASS; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ xfailed=XFAIL;; \ esac; \ case $$estatus.$$xfailed in \ 0.XFAIL) col=$$red; res=XPASS;; \ 0.*) col=$$grn; res=PASS ;; \ 77.*) col=$$blu; res=SKIP ;; \ 99.*) col=$$red; res=FAIL ;; \ *.XFAIL) col=$$lgn; res=XFAIL;; \ *.*) col=$$red; res=FAIL ;; \ esac; \ echo "$${col}$$res$${std}: $$f"; \ echo "$$res: $$f (exit: $$estatus)" | \ $(am__rst_section) >$@; \ cat $@-t >>$@; \ rm -f $@-t RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck check-html recheck-html TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) TEST_SUITE_LOG = test-suite.log am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ AUTOMAKE_OPTIONS = parallel-tests EXTRA_DIST = template.tex depend.py test.py check.py gfs2tex \ summary.sh Makefile.deps $(TESTS) poisson/poisson.gfs \ poisson/poisson.sh poisson/res-7.ref poisson/error.ref \ poisson/order.ref poisson/dirichlet/dirichlet.gfs \ poisson/dirichlet/res-7.ref poisson/dirichlet/error.ref \ poisson/dirichlet/order.ref poisson/circle/circle.gfs \ poisson/circle/res-7.ref poisson/circle/error.ref \ poisson/circle/order.ref circle/circle.gfs circle/circle.sh \ circle/res-7.ref circle/error.ref circle/order.ref \ circle/solution.gfv circle/refined/refined.gfs \ circle/refined/res-7.ref circle/refined/error.ref \ circle/refined/order.ref circle/refined/solution.gfv \ circle/thin/thin.gfs circle/thin/res-7.ref \ circle/thin/error.ref circle/thin/order.ref \ circle/thin/solution.gfv circle/star/star.gfs \ circle/star/res-7.ref circle/star/error.ref \ circle/star/order.ref circle/star/solution.gfv \ dumbell/dumbell.gfs dumbell/dumbell.sh advection/advection.gfs \ advection/advection.sh advection/error.ref advection/order.ref \ shear/shear.gfs shear/shear.sh shear/norms.ref \ shear/curvature/curvature.gfs shear/curvature/../shear.sh \ shear/curvature/norms.ref shear/curvature/curvature.gfv \ shear/concentration/concentration.gfs \ shear/concentration/concentration.sh \ shear/concentration/convergence.ref \ shear/concentration/convergence1.ref \ shear/concentration/convergence2.ref \ shear/concentration/t1.gfv shear/concentration/t2.gfv \ rotate/rotate.gfs rotate/rotate.gfv rotate/cells.gfv \ rotate/error.ref rotate/n1-0.gnu rotate/n1-1.gnu \ rotate/n1-2.gnu rotate/n1-5.gnu rotate/error.n1 \ diffusion/diffusion.gfs diffusion/diffusion.sh \ diffusion/concentration/concentration.gfs \ diffusion/concentration/concentration.sh \ conservation/conservation.gfs reynolds/reynolds.gfs \ reynolds/reynolds.sh reynolds/div5.ref reynolds/div6.ref \ reynolds/div7.ref reynolds/reynolds.ref reynolds/box/box.gfs \ reynolds/box/../reynolds.sh reynolds/box/div5.ref \ reynolds/box/div6.ref reynolds/box/div7.ref \ reynolds/box/reynolds.ref reynolds/skew/skew.gfs \ reynolds/skew/skew.sh reynolds/skew/div5.ref \ reynolds/skew/div6.ref reynolds/skew/div7.ref \ reynolds/skew/reynolds.ref reynolds/stream/stream.gfs \ reynolds/stream/div5.ref reynolds/stream/div6.ref \ reynolds/stream/div7.ref reynolds/stream/reynolds.ref \ reynolds/skewbox/skewbox.gfs reynolds/skewbox/skew.sh \ reynolds/skewbox/error.ref periodic/periodic.gfs \ periodic/periodic.sh periodic/r0.ref periodic/r1.ref \ periodic/r2.ref merging/merging.gfs merging/merging.sh \ merging/levels.gfv merging/vorticity.gfv merging/sim.err.ref \ merging/simc.err.ref source/source.gfs source/source.sh \ source/source.gfv source/error.gfv source/error.ref \ axi/axi.gfs axi/axi.sh axi/error.ref axi/order.ref \ axi/isolines.gfv axi/viscous/viscous.gfs \ axi/viscous/viscous.sh axi/viscous/cp-12-200 \ axi/viscous/fadlun axi/viscous/fadlun-cp-100 \ axi/viscous/fadlun-cp-200 axi/viscous/Re-12 axi/viscous/zhang \ axi/viscous/blanco-1995 axi/viscous/masliyah-1970 \ axi/viscous/isolines.gfv axi/viscous/fornberg \ axiadvection/axiadvection.gfs axiadvection/axi.sh \ axiadvection/vectors.gfv axiadvection/vof.gfv \ axiadvection/solid/solid.gfs axiadvection/solid/axi.sh \ swirl/swirl.gfs swirl/analytical lid/lid.gfs lid/lid.sh \ lid/xprofile lid/yprofile lid/xprof.ghia lid/yprof.ghia \ lid/stretch/stretch.gfs lid/stretch/xprofile \ lid/stretch/yprofile lid/stretch/xprof.ghia \ lid/stretch/yprof.ghia lid/explicit/explicit.gfs \ lid/explicit/lid.sh lid/metric/metric.gfs \ lid/metric/isolines.gfv lid/metric/xprofile \ lid/metric/yprofile lid/metric/xprof.ghia \ lid/metric/yprof.ghia poiseuille/poiseuille.gfs \ poiseuille/poiseuille.sh poiseuille/error.ref \ poiseuille/bagnold/bagnold.gfs poiseuille/bagnold/error.ref \ poiseuille/metric/metric.gfs poiseuille/metric/error.ref \ poiseuille/river/river.gfs poiseuille/river/river.sh \ poiseuille/river/error.ref couette/couette.gfs \ couette/couette.sh couette/profile couette/prof-0.ref \ couette/prof-1.ref couette/prof-2.ref couette/prof-3.ref \ kinetic/kinetic.gfs kinetic/kinetic.gfs \ hydrostatic/hydrostatic.gfs \ hydrostatic/quadratic/quadratic.gfs \ hydrostatic/quadratic/quadratic.gfs coriolis/coriolis.gfs \ coriolis/coriolis.sh lake/lake.gfs lake/lake.gfv \ lake/stratified/stratified.gfs lake/stratified/stratified.sh \ lake/stratified/error.ref lake/stratified/field.awk \ lake/stratified/thermo.awk lake/river/river.gfs \ lake/river/river.sh lake/river/error.ref \ boundaries/boundaries.gfs boundaries/boundaries.sh \ boundaries/orderU.ref boundaries/orderfU.ref \ boundaries/orderV.ref boundaries/orderfV.ref \ channel/channel.gfs channel/channel.sh channel/orderU.ref \ channel/orderfU.ref channel/orderV.ref channel/orderfV.ref \ plate/plate.gfs plate/plate.sh hexagon/hexagon.gfs \ hexagon/hexagon.sh hexagon/hexagon.gts hexagon/hexagon.gfv \ strouhal/strouhal.gfs strouhal/strouhal.sh \ strouhal/strouhal.gfv strouhal/strouhal.ref \ strouhal/moving.ref strouhal/static.ref spurious/spurious.gfs \ spurious/spurious.sh spurious/convergence.ref \ spurious/kconvergence.ref spurious/axi/axi.gfs \ spurious/axi/convergence.ref spurious/axi/kconvergence.ref \ capwave/capwave.gfs capwave/capwave.sh capwave/convergence.ref \ capwave/prosperetti capwave/markers.tex capwave/surfer.tex \ capwave/prost.tex capwave/clsvof.tex \ capwave/gravity/gravity.gfs capwave/gravity/convergence.ref \ capwave/gravity/prosperetti capwave/air-water/air-water.gfs \ capwave/air-water/convergence.ref \ capwave/air-water/prosperetti capwave/density/density.gfs \ capwave/density/convergence.ref capwave/density/prosperetti \ oscillation/oscillation.gfs oscillation/oscillation.sh \ oscillation/fit.ref height/height.gfs height/height.sh \ height/height1.gfs height/height2.gfs height/height3.gfs \ height/height4.gfs height/height5.gfs plateau/plateau.gfs \ plateau/plateau.gfv plateau/zoom.gfv sessile/sessile.gfs \ sessile/sessile.sh sessile/error-6.ref geo/geo.gfs geo/geo.sh \ geo/geo.gfv geo/e.ref geo/beta/beta.gfs geo/beta/beta.sh \ geo/beta/c geo/beta/dlw geo/beta/lls geo/beta/pzm geo/beta/llw \ geo/beta/energy.ref geo/beta/energy-nonlinear.ref \ geo/river/river.gfs geo/river/geo.sh geo/river/geo.gfv \ geo/river/e.ref nonlinear/nonlinear.gfs nonlinear/nonlinear.sh \ nonlinear/river.gfs nonlinear/ocean.gfs nonlinear/error.gfv \ nonlinear/error-ocean.gfv nonlinear/error-1.ref \ nonlinear/error-ocean-1.ref nonlinear/error-river-1.ref \ waves/waves.gfs waves/waves.sh waves/solution.gfv \ waves/correlation.ref waves/adaptive/adaptive.gfs \ waves/adaptive/solution.gfv waves/adaptive/correlation.ref \ nz/nz.gfs nz/nz.gfs nz/bath.gts parabola/parabola.gfs \ parabola/parabola.sh parabola/error.ref \ parabola/solid/solid.gfs parabola/solid/error.ref \ shock/shock.gfs shock/shock.sh shock/error.ref \ shock/layered/layered.gfs shock/layered/layered.sh \ shock/layered/uprof.awk shock/layered/field.awk \ shock/layered/prof.ref shore/shore.gfs shore/shore.sh \ shore/init.cgd shore/t160.csv shore/t175.csv shore/t220.csv \ shore/convergence.ref still/still.gfs still/still.gfv \ still/bipolar/bipolar.gfs still/bipolar/p.gfv \ still/bipolar/mesh.gfv terrain/terrain.gfs terrain/terrain.sh \ terrain/error-t.ref terrain/error-h.ref lonlat/lonlat.gfs \ lonlat/isolines.gfv lonlat/cubed/cubed.gfs \ lonlat/cubed/isolines.gfv lonlat/coriolis/coriolis.gfs \ lonlat/coriolis/isolines.gfv cosine/cosine.gfs \ cosine/cosine.sh cosine/isolines.gfv cosine/reference.gfv \ cosine/zero.gfv cosine/error-45.ref cosine/error-90.ref \ cosine/rossmanith45 cosine/rossmanith90 harmonic/harmonic.gfs \ harmonic/harmonic.sh harmonic/gerris.gfv harmonic/res-7.ref \ harmonic/error.ref harmonic/order.ref \ harmonic/lonlat/lonlat.gfs harmonic/lonlat/gerris.gfv \ harmonic/lonlat/res-7.ref harmonic/lonlat/error.ref \ harmonic/lonlat/order.ref gaussian/gaussian.gfs \ gaussian/gaussian.sh gaussian/prof.ref \ gaussian/lonlat/lonlat.gfs gaussian/lonlat/prof.ref \ annulus/annulus.gfs annulus/annulus.sh annulus/error.ref \ wannier/wannier.gfs wannier/wannier.c wannier/wannier.sh \ wannier/error.ref wannier/streamlines.gfv \ wannier/bipolar/bipolar.gfs wannier/bipolar/bipolar.sh \ wannier/bipolar/error.ref wannier/bipolar/mesh.gfv \ wannier/stretch/stretch.gfs wannier/stretch/error.ref \ wannier/stretch/streamlines.gfv rossby/rossby.gfs \ rossby/rossby.sh rossby/ehp.gfv rossby/ehm.gfv rossby/h.gfv \ rossby/href.gfv rossby/ec-6 rossby/eh-4.ref rossby/eh-5.ref \ rossby/eh-6.ref rossby/ocean/ocean.gfs rossby/ocean/ehp.gfv \ rossby/ocean/ehm.gfv rossby/ocean/h.gfv rossby/ocean/href.gfv \ rossby/ocean/ec-6 rossby/ocean/eh-4.ref rossby/ocean/eh-5.ref \ rossby/ocean/eh-6.ref rossby/river/river.gfs \ rossby/river/ehp.gfv rossby/river/ehm.gfv rossby/river/h.gfv \ rossby/river/href.gfv rossby/river/ec-6 rossby/river/eh-4.ref \ rossby/river/eh-5.ref rossby/river/eh-6.ref \ injectionaxi/injectionaxi.gfs injectionaxi/injectionaxi.gfs \ planar/planar.gfs planar/solid/solid.gfs bump/bump.gfs \ bump/bump.sh bump/norms-explicit.ref bump/norms-implicit.ref \ cylinder/cylinder.gfs cylinder/cylinder.sh cylinder/norms.ref \ cylinder/planar/planar.gfs cylinder/planar/norms.ref \ electro/electro.gfs electro/electro.sh electro/figure.gfv \ electro/convergence.ref debye/debye.gfs debye/debye.sh \ debye/points debye/analytical groundwater/groundwater.gfs \ groundwater/groundwater.sh groundwater/groundwater.gfv \ groundwater/p.ref groundwater/U.ref \ groundwater/piecewise/piecewise.gfs \ groundwater/piecewise/piecewise.gfv \ groundwater/piecewise/p.ref groundwater/piecewise/U.ref DOC = tests # we need this for gfs.sty TEXINPUTS = .:$(top_srcdir)/doc/examples: # and this for bibtex BIBINPUTS = $(top_srcdir)/doc DOCS = \ poisson/poisson.gfs.html\ poisson/dirichlet/dirichlet.gfs.html\ poisson/circle/circle.gfs.html\ circle/circle.gfs.html\ circle/refined/refined.gfs.html\ circle/thin/thin.gfs.html\ circle/star/star.gfs.html\ dumbell/dumbell.gfs.html\ advection/advection.gfs.html\ shear/shear.gfs.html\ shear/curvature/curvature.gfs.html\ shear/concentration/concentration.gfs.html\ rotate/rotate.gfs.html\ diffusion/diffusion.gfs.html\ diffusion/concentration/concentration.gfs.html\ conservation/conservation.gfs.html\ reynolds/reynolds.gfs.html\ reynolds/box/box.gfs.html\ reynolds/skew/skew.gfs.html\ reynolds/stream/stream.gfs.html\ reynolds/skewbox/skewbox.gfs.html\ periodic/periodic.gfs.html\ merging/merging.gfs.html\ source/source.gfs.html\ axi/axi.gfs.html\ axi/viscous/viscous.gfs.html\ axiadvection/axiadvection.gfs.html\ axiadvection/solid/solid.gfs.html\ swirl/swirl.gfs.html\ lid/lid.gfs.html\ lid/stretch/stretch.gfs.html\ lid/explicit/explicit.gfs.html\ lid/metric/metric.gfs.html\ poiseuille/poiseuille.gfs.html\ poiseuille/bagnold/bagnold.gfs.html\ poiseuille/metric/metric.gfs.html\ poiseuille/river/river.gfs.html\ couette/couette.gfs.html\ kinetic/kinetic.gfs.html\ hydrostatic/hydrostatic.gfs.html\ hydrostatic/quadratic/quadratic.gfs.html\ coriolis/coriolis.gfs.html\ lake/lake.gfs.html\ lake/stratified/stratified.gfs.html\ lake/river/river.gfs.html\ boundaries/boundaries.gfs.html\ channel/channel.gfs.html\ plate/plate.gfs.html\ hexagon/hexagon.gfs.html\ strouhal/strouhal.gfs.html\ spurious/spurious.gfs.html\ spurious/axi/axi.gfs.html\ capwave/capwave.gfs.html\ capwave/gravity/gravity.gfs.html\ capwave/air-water/air-water.gfs.html\ capwave/density/density.gfs.html\ oscillation/oscillation.gfs.html\ height/height.gfs.html\ plateau/plateau.gfs.html\ plateau/plateau.mpg\ sessile/sessile.gfs.html\ geo/geo.gfs.html\ geo/beta/beta.gfs.html\ geo/river/river.gfs.html\ nonlinear/nonlinear.gfs.html\ waves/waves.gfs.html\ waves/adaptive/adaptive.gfs.html\ nz/nz.gfs.html\ parabola/parabola.gfs.html\ parabola/solid/solid.gfs.html\ shock/shock.gfs.html\ shock/layered/layered.gfs.html\ shore/shore.gfs.html\ still/still.gfs.html\ still/bipolar/bipolar.gfs.html\ terrain/terrain.gfs.html\ lonlat/lonlat.gfs.html\ lonlat/cubed/cubed.gfs.html\ lonlat/coriolis/coriolis.gfs.html\ cosine/cosine.gfs.html\ harmonic/harmonic.gfs.html\ harmonic/lonlat/lonlat.gfs.html\ gaussian/gaussian.gfs.html\ gaussian/lonlat/lonlat.gfs.html\ annulus/annulus.gfs.html\ wannier/wannier.gfs.html\ wannier/bipolar/bipolar.gfs.html\ wannier/stretch/stretch.gfs.html\ rossby/rossby.gfs.html\ rossby/ocean/ocean.gfs.html\ rossby/river/river.gfs.html\ injectionaxi/injectionaxi.gfs.html\ planar/planar.gfs.html\ planar/solid/solid.gfs.html\ bump/bump.gfs.html\ cylinder/cylinder.gfs.html\ cylinder/planar/planar.gfs.html\ electro/electro.gfs.html\ debye/debye.gfs.html\ groundwater/groundwater.gfs.html\ groundwater/piecewise/piecewise.gfs.html\ poisson/poisson.gfs\ poisson/poisson.sh\ poisson/res-7.ref\ poisson/error.ref\ poisson/order.ref\ poisson/dirichlet/dirichlet.gfs\ poisson/dirichlet/res-7.ref\ poisson/dirichlet/error.ref\ poisson/dirichlet/order.ref\ poisson/circle/circle.gfs\ poisson/circle/res-7.ref\ poisson/circle/error.ref\ poisson/circle/order.ref\ circle/circle.gfs\ circle/circle.sh\ circle/res-7.ref\ circle/error.ref\ circle/order.ref\ circle/solution.gfv\ circle/refined/refined.gfs\ circle/refined/res-7.ref\ circle/refined/error.ref\ circle/refined/order.ref\ circle/refined/solution.gfv\ circle/thin/thin.gfs\ circle/thin/res-7.ref\ circle/thin/error.ref\ circle/thin/order.ref\ circle/thin/solution.gfv\ circle/star/star.gfs\ circle/star/res-7.ref\ circle/star/error.ref\ circle/star/order.ref\ circle/star/solution.gfv\ dumbell/dumbell.gfs\ dumbell/dumbell.sh\ advection/advection.gfs\ advection/advection.sh\ advection/error.ref\ advection/order.ref\ shear/shear.gfs\ shear/shear.sh\ shear/norms.ref\ shear/curvature/curvature.gfs\ shear/curvature/../shear.sh\ shear/curvature/norms.ref\ shear/curvature/curvature.gfv\ shear/concentration/concentration.gfs\ shear/concentration/concentration.sh\ shear/concentration/convergence.ref\ shear/concentration/convergence1.ref\ shear/concentration/convergence2.ref\ shear/concentration/t1.gfv\ shear/concentration/t2.gfv\ rotate/rotate.gfs\ rotate/rotate.gfv\ rotate/cells.gfv\ rotate/error.ref\ rotate/n1-0.gnu\ rotate/n1-1.gnu\ rotate/n1-2.gnu\ rotate/n1-5.gnu\ rotate/error.n1\ diffusion/diffusion.gfs\ diffusion/diffusion.sh\ diffusion/concentration/concentration.gfs\ diffusion/concentration/concentration.sh\ conservation/conservation.gfs\ reynolds/reynolds.gfs\ reynolds/reynolds.sh\ reynolds/div5.ref\ reynolds/div6.ref\ reynolds/div7.ref\ reynolds/reynolds.ref\ reynolds/box/box.gfs\ reynolds/box/../reynolds.sh\ reynolds/box/div5.ref\ reynolds/box/div6.ref\ reynolds/box/div7.ref\ reynolds/box/reynolds.ref\ reynolds/skew/skew.gfs\ reynolds/skew/skew.sh\ reynolds/skew/div5.ref\ reynolds/skew/div6.ref\ reynolds/skew/div7.ref\ reynolds/skew/reynolds.ref\ reynolds/stream/stream.gfs\ reynolds/stream/div5.ref\ reynolds/stream/div6.ref\ reynolds/stream/div7.ref\ reynolds/stream/reynolds.ref\ reynolds/skewbox/skewbox.gfs\ reynolds/skewbox/skew.sh\ reynolds/skewbox/error.ref\ periodic/periodic.gfs\ periodic/periodic.sh\ periodic/r0.ref\ periodic/r1.ref\ periodic/r2.ref\ merging/merging.gfs\ merging/merging.sh\ merging/levels.gfv\ merging/vorticity.gfv\ merging/sim.err.ref\ merging/simc.err.ref\ source/source.gfs\ source/source.sh\ source/source.gfv\ source/error.gfv\ source/error.ref\ axi/axi.gfs\ axi/axi.sh\ axi/error.ref\ axi/order.ref\ axi/isolines.gfv\ axi/viscous/viscous.gfs\ axi/viscous/viscous.sh\ axi/viscous/cp-12-200\ axi/viscous/fadlun\ axi/viscous/fadlun-cp-100\ axi/viscous/fadlun-cp-200\ axi/viscous/Re-12\ axi/viscous/zhang\ axi/viscous/blanco-1995\ axi/viscous/masliyah-1970\ axi/viscous/isolines.gfv\ axi/viscous/fornberg\ axiadvection/axiadvection.gfs\ axiadvection/axi.sh\ axiadvection/vectors.gfv\ axiadvection/vof.gfv\ axiadvection/solid/solid.gfs\ axiadvection/solid/axi.sh\ swirl/swirl.gfs\ swirl/analytical\ lid/lid.gfs\ lid/lid.sh\ lid/xprofile\ lid/yprofile\ lid/xprof.ghia\ lid/yprof.ghia\ lid/stretch/stretch.gfs\ lid/stretch/xprofile\ lid/stretch/yprofile\ lid/stretch/xprof.ghia\ lid/stretch/yprof.ghia\ lid/explicit/explicit.gfs\ lid/explicit/lid.sh\ lid/metric/metric.gfs\ lid/metric/isolines.gfv\ lid/metric/xprofile\ lid/metric/yprofile\ lid/metric/xprof.ghia\ lid/metric/yprof.ghia\ poiseuille/poiseuille.gfs\ poiseuille/poiseuille.sh\ poiseuille/error.ref\ poiseuille/bagnold/bagnold.gfs\ poiseuille/bagnold/error.ref\ poiseuille/metric/metric.gfs\ poiseuille/metric/error.ref\ poiseuille/river/river.gfs\ poiseuille/river/river.sh\ poiseuille/river/error.ref\ couette/couette.gfs\ couette/couette.sh\ couette/profile\ couette/prof-0.ref\ couette/prof-1.ref\ couette/prof-2.ref\ couette/prof-3.ref\ kinetic/kinetic.gfs\ kinetic/kinetic.gfs\ hydrostatic/hydrostatic.gfs\ hydrostatic/quadratic/quadratic.gfs\ hydrostatic/quadratic/quadratic.gfs\ coriolis/coriolis.gfs\ coriolis/coriolis.sh\ lake/lake.gfs\ lake/lake.gfv\ lake/stratified/stratified.gfs\ lake/stratified/stratified.sh\ lake/stratified/error.ref\ lake/stratified/field.awk\ lake/stratified/thermo.awk\ lake/river/river.gfs\ lake/river/river.sh\ lake/river/error.ref\ boundaries/boundaries.gfs\ boundaries/boundaries.sh\ boundaries/orderU.ref\ boundaries/orderfU.ref\ boundaries/orderV.ref\ boundaries/orderfV.ref\ channel/channel.gfs\ channel/channel.sh\ channel/orderU.ref\ channel/orderfU.ref\ channel/orderV.ref\ channel/orderfV.ref\ plate/plate.gfs\ plate/plate.sh\ hexagon/hexagon.gfs\ hexagon/hexagon.sh\ hexagon/hexagon.gts\ hexagon/hexagon.gfv\ strouhal/strouhal.gfs\ strouhal/strouhal.sh\ strouhal/strouhal.gfv\ strouhal/strouhal.ref\ strouhal/moving.ref\ strouhal/static.ref\ spurious/spurious.gfs\ spurious/spurious.sh\ spurious/convergence.ref\ spurious/kconvergence.ref\ spurious/axi/axi.gfs\ spurious/axi/convergence.ref\ spurious/axi/kconvergence.ref\ capwave/capwave.gfs\ capwave/capwave.sh\ capwave/convergence.ref\ capwave/prosperetti\ capwave/markers.tex\ capwave/surfer.tex\ capwave/prost.tex\ capwave/clsvof.tex\ capwave/gravity/gravity.gfs\ capwave/gravity/convergence.ref\ capwave/gravity/prosperetti\ capwave/air-water/air-water.gfs\ capwave/air-water/convergence.ref\ capwave/air-water/prosperetti\ capwave/density/density.gfs\ capwave/density/convergence.ref\ capwave/density/prosperetti\ oscillation/oscillation.gfs\ oscillation/oscillation.sh\ oscillation/fit.ref\ height/height.gfs\ height/height.sh\ height/height1.gfs\ height/height2.gfs\ height/height3.gfs\ height/height4.gfs\ height/height5.gfs\ plateau/plateau.gfs\ plateau/plateau.gfv\ plateau/zoom.gfv\ sessile/sessile.gfs\ sessile/sessile.sh\ sessile/error-6.ref\ geo/geo.gfs\ geo/geo.sh\ geo/geo.gfv\ geo/e.ref\ geo/beta/beta.gfs\ geo/beta/beta.sh\ geo/beta/c\ geo/beta/dlw\ geo/beta/lls\ geo/beta/pzm\ geo/beta/llw\ geo/beta/energy.ref\ geo/beta/energy-nonlinear.ref\ geo/river/river.gfs\ geo/river/geo.sh\ geo/river/geo.gfv\ geo/river/e.ref\ nonlinear/nonlinear.gfs\ nonlinear/nonlinear.sh\ nonlinear/river.gfs\ nonlinear/ocean.gfs\ nonlinear/error.gfv\ nonlinear/error-ocean.gfv\ nonlinear/error-1.ref\ nonlinear/error-ocean-1.ref\ nonlinear/error-river-1.ref\ waves/waves.gfs\ waves/waves.sh\ waves/solution.gfv\ waves/correlation.ref\ waves/adaptive/adaptive.gfs\ waves/adaptive/solution.gfv\ waves/adaptive/correlation.ref\ nz/nz.gfs\ nz/nz.gfs\ nz/bath.gts\ parabola/parabola.gfs\ parabola/parabola.sh\ parabola/error.ref\ parabola/solid/solid.gfs\ parabola/solid/error.ref\ shock/shock.gfs\ shock/shock.sh\ shock/error.ref\ shock/layered/layered.gfs\ shock/layered/layered.sh\ shock/layered/uprof.awk\ shock/layered/field.awk\ shock/layered/prof.ref\ shore/shore.gfs\ shore/shore.sh\ shore/init.cgd\ shore/t160.csv\ shore/t175.csv\ shore/t220.csv\ shore/convergence.ref\ still/still.gfs\ still/still.gfv\ still/bipolar/bipolar.gfs\ still/bipolar/p.gfv\ still/bipolar/mesh.gfv\ terrain/terrain.gfs\ terrain/terrain.sh\ terrain/error-t.ref\ terrain/error-h.ref\ lonlat/lonlat.gfs\ lonlat/isolines.gfv\ lonlat/cubed/cubed.gfs\ lonlat/cubed/isolines.gfv\ lonlat/coriolis/coriolis.gfs\ lonlat/coriolis/isolines.gfv\ cosine/cosine.gfs\ cosine/cosine.sh\ cosine/isolines.gfv\ cosine/reference.gfv\ cosine/zero.gfv\ cosine/error-45.ref\ cosine/error-90.ref\ cosine/rossmanith45\ cosine/rossmanith90\ harmonic/harmonic.gfs\ harmonic/harmonic.sh\ harmonic/gerris.gfv\ harmonic/res-7.ref\ harmonic/error.ref\ harmonic/order.ref\ harmonic/lonlat/lonlat.gfs\ harmonic/lonlat/gerris.gfv\ harmonic/lonlat/res-7.ref\ harmonic/lonlat/error.ref\ harmonic/lonlat/order.ref\ gaussian/gaussian.gfs\ gaussian/gaussian.sh\ gaussian/prof.ref\ gaussian/lonlat/lonlat.gfs\ gaussian/lonlat/prof.ref\ annulus/annulus.gfs\ annulus/annulus.sh\ annulus/error.ref\ wannier/wannier.gfs\ wannier/wannier.c\ wannier/wannier.sh\ wannier/error.ref\ wannier/streamlines.gfv\ wannier/bipolar/bipolar.gfs\ wannier/bipolar/bipolar.sh\ wannier/bipolar/error.ref\ wannier/bipolar/mesh.gfv\ wannier/stretch/stretch.gfs\ wannier/stretch/error.ref\ wannier/stretch/streamlines.gfv\ rossby/rossby.gfs\ rossby/rossby.sh\ rossby/ehp.gfv\ rossby/ehm.gfv\ rossby/h.gfv\ rossby/href.gfv\ rossby/ec-6\ rossby/eh-4.ref\ rossby/eh-5.ref\ rossby/eh-6.ref\ rossby/ocean/ocean.gfs\ rossby/ocean/ehp.gfv\ rossby/ocean/ehm.gfv\ rossby/ocean/h.gfv\ rossby/ocean/href.gfv\ rossby/ocean/ec-6\ rossby/ocean/eh-4.ref\ rossby/ocean/eh-5.ref\ rossby/ocean/eh-6.ref\ rossby/river/river.gfs\ rossby/river/ehp.gfv\ rossby/river/ehm.gfv\ rossby/river/h.gfv\ rossby/river/href.gfv\ rossby/river/ec-6\ rossby/river/eh-4.ref\ rossby/river/eh-5.ref\ rossby/river/eh-6.ref\ injectionaxi/injectionaxi.gfs\ injectionaxi/injectionaxi.gfs\ planar/planar.gfs\ planar/solid/solid.gfs\ bump/bump.gfs\ bump/bump.sh\ bump/norms-explicit.ref\ bump/norms-implicit.ref\ cylinder/cylinder.gfs\ cylinder/cylinder.sh\ cylinder/norms.ref\ cylinder/planar/planar.gfs\ cylinder/planar/norms.ref\ electro/electro.gfs\ electro/electro.sh\ electro/figure.gfv\ electro/convergence.ref\ debye/debye.gfs\ debye/debye.sh\ debye/points\ debye/analytical\ groundwater/groundwater.gfs\ groundwater/groundwater.sh\ groundwater/groundwater.gfv\ groundwater/p.ref\ groundwater/U.ref\ groundwater/piecewise/piecewise.gfs\ groundwater/piecewise/piecewise.gfv\ groundwater/piecewise/p.ref\ groundwater/piecewise/U.ref TESTS = \ poisson.sh\ circle.sh\ dumbell.sh\ advection.sh\ shear.sh\ rotate.sh\ diffusion.sh\ conservation.sh\ reynolds.sh\ periodic.sh\ merging.sh\ source.sh\ axi.sh\ axiadvection.sh\ swirl.sh\ lid.sh\ poiseuille.sh\ couette.sh\ kinetic.sh\ hydrostatic.sh\ coriolis.sh\ lake.sh\ boundaries.sh\ channel.sh\ plate.sh\ hexagon.sh\ strouhal.sh\ spurious.sh\ capwave.sh\ oscillation.sh\ height.sh\ plateau.sh\ sessile.sh\ geo.sh\ nonlinear.sh\ waves.sh\ nz.sh\ parabola.sh\ shock.sh\ shore.sh\ still.sh\ terrain.sh\ lonlat.sh\ cosine.sh\ harmonic.sh\ gaussian.sh\ annulus.sh\ wannier.sh\ rossby.sh\ injectionaxi.sh\ planar.sh\ bump.sh\ cylinder.sh\ electro.sh\ debye.sh\ groundwater.sh\ summary.sh TESTS_ENVIRONMENT = TESTS=" poisson circle dumbell advection shear rotate diffusion conservation reynolds periodic merging source axi axiadvection swirl lid poiseuille couette kinetic hydrostatic coriolis lake boundaries channel plate hexagon strouhal spurious capwave oscillation height plateau sessile geo nonlinear waves nz parabola shock shore still terrain lonlat cosine harmonic gaussian annulus wannier rossby injectionaxi planar bump cylinder electro debye groundwater" TEST_EXTENSIONS = .sh TESTDIRS = poisson circle dumbell advection shear rotate diffusion conservation reynolds periodic merging source axi axiadvection swirl lid poiseuille couette kinetic hydrostatic coriolis lake boundaries channel plate hexagon strouhal spurious capwave oscillation height plateau sessile geo nonlinear waves nz parabola shock shore still terrain lonlat cosine harmonic gaussian annulus wannier rossby injectionaxi planar bump cylinder electro debye groundwater all: all-am .SUFFIXES: .SUFFIXES: .html .log .sh .sh$(EXEEXT) $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.deps $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(srcdir)/Makefile.deps: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__sh_e_setup); \ list='$(TEST_LOGS)'; \ results=`for f in $$list; do \ test -r $$f && read line < $$f && echo "$$line" \ || echo FAIL; \ done`; \ all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \ fail=`echo "$$results" | grep -c '^FAIL'`; \ pass=`echo "$$results" | grep -c '^PASS'`; \ skip=`echo "$$results" | grep -c '^SKIP'`; \ xfail=`echo "$$results" | grep -c '^XFAIL'`; \ xpass=`echo "$$results" | grep -c '^XPASS'`; \ failures=`expr $$fail + $$xpass`; \ all=`expr $$all - $$skip`; \ if test "$$all" -eq 1; then tests=test; All=; \ else tests=tests; All="All "; fi; \ case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \ fail=0:xpass=0:xfail=0) \ msg="$$All$$all $$tests passed. "; \ exit=true;; \ fail=0:xpass=0:xfail=*) \ msg="$$All$$all $$tests behaved as expected"; \ if test "$$xfail" -eq 1; then xfailures=failure; \ else xfailures=failures; fi; \ msg="$$msg ($$xfail expected $$xfailures). "; \ exit=true;; \ fail=*:xpass=0:xfail=*) \ msg="$$fail of $$all $$tests failed. "; \ exit=false;; \ fail=*:xpass=*:xfail=*) \ msg="$$failures of $$all $$tests did not behave as expected"; \ if test "$$xpass" -eq 1; then xpasses=pass; \ else xpasses=passes; fi; \ msg="$$msg ($$xpass unexpected $$xpasses). "; \ exit=false;; \ *) \ echo >&2 "incorrect case"; exit 4;; \ esac; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ msg="$$msg($$skip test was not run). "; \ else \ msg="$$msg($$skip tests were not run). "; \ fi; \ fi; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ echo "$$msg"; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for f in $$list; do \ test -r $$f && read line < $$f || line=; \ case $$line in \ PASS:*|XFAIL:*);; \ *) echo; cat $$f;; \ esac; \ done; \ } >$(TEST_SUITE_LOG).tmp; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if test "$$failures" -ne 0; then \ msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \ fi; \ fi; \ test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \ $(am__tty_colors); \ if $$exit; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$$msg" | $(am__text_box) "col=$$col" "std=$$std"; \ $$exit || exit 1 check-TESTS recheck: @if test $@ != recheck; then \ list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list; \ fi @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @list='' list2='$(TEST_LOGS)'; for f in $$list2; do \ test .log = $$f && continue; \ if test $@ = recheck; then \ test -f $$f || continue; \ if test -r $$f && read line < $$f; then \ case $$line in FAIL*|XPASS*) : ;; *) continue;; esac; \ fi; \ fi; \ if test -z "$$list"; then list=$$f; else list="$$list $$f"; fi; \ done; \ if test $@ = recheck && test -n "$$list"; then \ $(am__make_dryrun) || rm -f $$list || exit 1; \ fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$list" recheck: am--mostlyclean-test-html: list='$(TEST_LOGS:.log=.html)'; test -z "$$list" || rm -f $$list rm -f $(TEST_SUITE_HTML) .log.html: @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ for r2h in $$list; do \ if ($$r2h --version) >/dev/null 2>&1; then \ R2H=$$r2h; \ fi; \ done; \ if test -z "$$R2H"; then \ echo >&2 "cannot find rst2html, cannot create $@"; \ exit 2; \ fi; \ $$R2H $< >$@.tmp @mv $@.tmp $@ # Be sure to run check first, and then to convert the result. # Beware of concurrent executions. Run "check" not "check-TESTS", as # check-SCRIPTS and other dependencies are rebuilt by the former only. # And expect check to fail. check-html recheck-html: @target=`echo $@ | sed 's/-html$$//'`; \ rv=0; $(MAKE) $(AM_MAKEFLAGS) $$target || rv=$$?; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) TEST_LOGS= || exit 4; \ exit $$rv .sh.log: @p='$<'; $(am__check_pre) $(SH_LOG_COMPILE) "$$tst" $(am__check_post) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; $(am__check_pre) $(SH_LOG_COMPILE) "$$tst" $(am__check_post) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: am--mostlyclean-test-html mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am check-html install-am install-strip recheck-html .PHONY: all all-am am--mostlyclean-test-html check check-TESTS \ check-am check-html clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck recheck-html \ uninstall uninstall-am clean-generic: mv -f summary.sh summary.sh.bak $(RM) *.dvi *.aux *.log *.toc *.out tests.tex *.pyc *.bbl *.blg $(TESTS) Makefile.deps mv -f summary.sh.bak summary.sh Makefile.deps: template.tex depend.py Makefile.am python depend.py `grep \\test{[^/]*} < template.tex | sed 's/\\\\test{\(.*\)}/\1/g'` > Makefile.deps echo "" >> Makefile.deps echo -n "TESTDIRS = " >> Makefile.deps echo `grep \\test{[^/]*} < template.tex | sed 's/\\\\test{\(.*\)}/\1/g'` >> Makefile.deps summary.log:\ poisson.log\ circle.log\ dumbell.log\ advection.log\ shear.log\ rotate.log\ diffusion.log\ conservation.log\ reynolds.log\ periodic.log\ merging.log\ source.log\ axi.log\ axiadvection.log\ swirl.log\ lid.log\ poiseuille.log\ couette.log\ kinetic.log\ hydrostatic.log\ coriolis.log\ lake.log\ boundaries.log\ channel.log\ plate.log\ hexagon.log\ strouhal.log\ spurious.log\ capwave.log\ oscillation.log\ height.log\ plateau.log\ sessile.log\ geo.log\ nonlinear.log\ waves.log\ nz.log\ parabola.log\ shock.log\ shore.log\ still.log\ terrain.log\ lonlat.log\ cosine.log\ harmonic.log\ gaussian.log\ annulus.log\ wannier.log\ rossby.log\ injectionaxi.log\ planar.log\ bump.log\ cylinder.log\ electro.log\ debye.log\ groundwater.log tests.tex: \ poisson/poisson.gfs\ poisson/residual.eps\ poisson/rate.eps\ poisson/error.eps\ poisson/order.eps\ poisson/dirichlet/dirichlet.gfs\ poisson/dirichlet/residual.eps\ poisson/dirichlet/rate.eps\ poisson/dirichlet/error.eps\ poisson/dirichlet/order.eps\ poisson/circle/circle.gfs\ poisson/circle/residual.eps\ poisson/circle/rate.eps\ poisson/circle/error.eps\ poisson/circle/order.eps\ circle/circle.gfs\ circle/residual.eps\ circle/rate.eps\ circle/error.eps\ circle/order.eps\ circle/solution.eps\ circle/refined/refined.gfs\ circle/refined/residual.eps\ circle/refined/rate.eps\ circle/refined/error.eps\ circle/refined/order.eps\ circle/refined/solution.eps\ circle/thin/thin.gfs\ circle/thin/residual.eps\ circle/thin/rate.eps\ circle/thin/error.eps\ circle/thin/order.eps\ circle/thin/solution.eps\ circle/star/star.gfs\ circle/star/residual.eps\ circle/star/rate.eps\ circle/star/error.eps\ circle/star/order.eps\ circle/star/solution.eps\ dumbell/dumbell.gfs\ advection/advection.gfs\ advection/error.eps\ advection/order.eps\ shear/shear.gfs\ shear/t-0.eps\ shear/t-2.5.eps\ shear/t-5.eps\ shear/dt-5.eps\ shear/norms\ shear/norms.tex\ shear/curvature/curvature.gfs\ shear/curvature/t-2.5.eps\ shear/curvature/dt-5.eps\ shear/curvature/norms\ shear/curvature/norms.tex\ shear/concentration/concentration.gfs\ shear/concentration/convergence.eps\ shear/concentration/t1-end.eps\ shear/concentration/t1-half.eps\ shear/concentration/t2-end.eps\ shear/concentration/t2-half.eps\ rotate/rotate.gfs\ rotate/error.eps\ rotate/rotate-0.eps\ rotate/rotate-1.eps\ rotate/rotate-2.eps\ rotate/rotate-5.eps\ diffusion/diffusion.gfs\ diffusion/profile.eps\ diffusion/concentration/concentration.gfs\ diffusion/concentration/profile.eps\ conservation/conservation.gfs\ reynolds/reynolds.gfs\ reynolds/divmax.eps\ reynolds/reynolds.eps\ reynolds/divL2.eps\ reynolds/kinetic.eps\ reynolds/accuracy.eps\ reynolds/box/box.gfs\ reynolds/box/divmax.eps\ reynolds/box/reynolds.eps\ reynolds/box/divL2.eps\ reynolds/box/kinetic.eps\ reynolds/box/accuracy.eps\ reynolds/skew/skew.gfs\ reynolds/skew/divmax.eps\ reynolds/skew/divL2.eps\ reynolds/skew/kinetic.eps\ reynolds/skew/accuracy.eps\ reynolds/stream/stream.gfs\ reynolds/stream/divmax.eps\ reynolds/stream/reynolds.eps\ reynolds/stream/divL2.eps\ reynolds/stream/kinetic.eps\ reynolds/stream/accuracy.eps\ reynolds/skewbox/skewbox.gfs\ reynolds/skewbox/kinetic.eps\ reynolds/skewbox/accuracy.eps\ periodic/periodic.gfs\ periodic/minion1.tex\ merging/merging.gfs\ merging/convergence.tex\ merging/tv_0_05.eps\ merging/tm_0_05.eps\ merging/tv_0_15.eps\ merging/tm_0_15.eps\ merging/tv_0_25.eps\ merging/tm_0_25.eps\ source/source.gfs\ source/velfield.eps\ source/error.eps\ source/localerror.eps\ axi/axi.gfs\ axi/error.eps\ axi/order.eps\ axi/isolines.eps\ axi/viscous/viscous.gfs\ axi/viscous/length.eps\ axi/viscous/Cp.eps\ axi/viscous/isolines.eps\ axiadvection/axiadvection.gfs\ axiadvection/vof.eps\ axiadvection/solid/solid.gfs\ swirl/swirl.gfs\ swirl/profiles.eps\ lid/lid.gfs\ lid/xprof\ lid/yprof\ lid/xprof.eps\ lid/yprof.eps\ lid/velocity.eps\ lid/stretch/stretch.gfs\ lid/stretch/xprof.eps\ lid/stretch/yprof.eps\ lid/stretch/velocity.eps\ lid/explicit/explicit.gfs\ lid/explicit/xprof\ lid/explicit/yprof\ lid/explicit/xprof.eps\ lid/explicit/yprof.eps\ lid/explicit/velocity.eps\ lid/metric/metric.gfs\ lid/metric/xprof.eps\ lid/metric/yprof.eps\ lid/metric/velocity.eps\ poiseuille/poiseuille.gfs\ poiseuille/convergence.eps\ poiseuille/bagnold/bagnold.gfs\ poiseuille/bagnold/convergence.eps\ poiseuille/metric/metric.gfs\ poiseuille/metric/convergence.eps\ poiseuille/river/river.gfs\ poiseuille/river/convergence.eps\ couette/couette.gfs\ couette/prof.eps\ kinetic/kinetic.gfs\ kinetic/k.eps\ hydrostatic/hydrostatic.gfs\ hydrostatic/quadratic/quadratic.gfs\ coriolis/coriolis.gfs\ coriolis/velocity.eps\ coriolis/error.dat\ lake/lake.gfs\ lake/lake.eps\ lake/stratified/stratified.gfs\ lake/stratified/uprof.eps\ lake/stratified/error.eps\ lake/stratified/drho.eps\ lake/stratified/free.eps\ lake/stratified/thermo.eps\ lake/river/river.gfs\ lake/river/uprof.eps\ lake/river/error.eps\ boundaries/boundaries.gfs\ boundaries/convergence.tex\ channel/channel.gfs\ channel/convergence.tex\ plate/plate.gfs\ hexagon/hexagon.gfs\ hexagon/error.eps\ hexagon/end-2.eps\ strouhal/strouhal.gfs\ strouhal/strouhal.eps\ strouhal/vort.eps\ strouhal/forces.eps\ spurious/spurious.gfs\ spurious/laplace.eps\ spurious/curvature.eps\ spurious/convergence.eps\ spurious/kconvergence.eps\ spurious/axi/axi.gfs\ spurious/axi/laplace.eps\ spurious/axi/curvature.eps\ spurious/axi/convergence.eps\ spurious/axi/kconvergence.eps\ capwave/capwave.gfs\ capwave/convergence.tex\ capwave/amplitude.eps\ capwave/convergence.eps\ capwave/markers.tex\ capwave/surfer.tex\ capwave/prost.tex\ capwave/clsvof.tex\ capwave/gravity/gravity.gfs\ capwave/gravity/convergence.tex\ capwave/gravity/amplitude.eps\ capwave/air-water/air-water.gfs\ capwave/air-water/convergence.tex\ capwave/air-water/amplitude.eps\ capwave/density/density.gfs\ capwave/density/convergence.tex\ capwave/density/amplitude.eps\ oscillation/oscillation.gfs\ oscillation/frequency.eps\ oscillation/k.eps\ oscillation/laplace.eps\ height/height.gfs\ plateau/plateau.gfs\ plateau/plateau-0.2.eps\ plateau/plateau-0.6.eps\ plateau/plateau-t0.eps\ plateau/plateau-0.8.eps\ plateau/u.eps\ plateau/y.eps\ plateau/plateau.mpg\ plateau/zoom-t0.eps\ sessile/sessile.gfs\ sessile/rk.eps\ sessile/convergence.eps\ geo/geo.gfs\ geo/geo_error.eps\ geo/error-100.eps\ geo/error-200.eps\ geo/error-300.eps\ geo/error-400.eps\ geo/error-1500.eps\ geo/beta/beta.gfs\ geo/beta/energy.eps\ geo/river/river.gfs\ geo/river/geo_error.eps\ geo/river/error-100.eps\ geo/river/error-200.eps\ geo/river/error-300.eps\ geo/river/error-400.eps\ geo/river/error-1500.eps\ nonlinear/nonlinear.gfs\ nonlinear/end-0.eps\ nonlinear/end-ocean-0.eps\ nonlinear/end-river-0.eps\ nonlinear/end-1.eps\ nonlinear/end-ocean-1.eps\ nonlinear/end-river-1.eps\ nonlinear/error-0.eps\ nonlinear/error-1.eps\ waves/waves.gfs\ waves/correlation\ waves/correlation.tex\ waves/solution.eps\ waves/adaptive/adaptive.gfs\ waves/adaptive/correlation\ waves/adaptive/correlation.tex\ waves/adaptive/solution.eps\ nz/nz.gfs\ nz/p.eps\ nz/k.eps\ parabola/parabola.gfs\ parabola/elevation.eps\ parabola/u0.eps\ parabola/convergence.eps\ parabola/convergence-u.eps\ parabola/solid/solid.gfs\ parabola/solid/u0.eps\ parabola/solid/convergence.eps\ parabola/solid/convergence-u.eps\ shock/shock.gfs\ shock/error.eps\ shock/h-8.eps\ shock/layered/layered.gfs\ shock/layered/prof.eps\ shock/layered/u.eps\ shock/layered/uprof-10.eps\ shock/layered/uprof-15.eps\ shock/layered/uprof-20.eps\ shore/shore.gfs\ shore/profile.eps\ shore/order.eps\ still/still.gfs\ still/still.eps\ still/bipolar/bipolar.gfs\ still/bipolar/still.eps\ terrain/terrain.gfs\ terrain/error-t.eps\ terrain/error-h.eps\ lonlat/lonlat.gfs\ lonlat/isolines-0.3.eps\ lonlat/isolines-0.6.eps\ lonlat/isolines-0.9.eps\ lonlat/p-0.3.eps\ lonlat/p-0.6.eps\ lonlat/p-0.9.eps\ lonlat/cubed/cubed.gfs\ lonlat/cubed/isolines-0.3.eps\ lonlat/cubed/isolines-0.6.eps\ lonlat/cubed/isolines-0.9.eps\ lonlat/cubed/isolines-1.2.eps\ lonlat/cubed/isolines-1.5.eps\ lonlat/cubed/p-0.3.eps\ lonlat/cubed/p-0.6.eps\ lonlat/cubed/p-0.9.eps\ lonlat/cubed/p-1.2.eps\ lonlat/cubed/p-1.5.eps\ lonlat/coriolis/coriolis.gfs\ lonlat/coriolis/isolines-0.4.eps\ lonlat/coriolis/isolines-0.8.eps\ lonlat/coriolis/isolines-1.2.eps\ cosine/cosine.gfs\ cosine/isolines-4-45.eps\ cosine/isolines-5-90.eps\ cosine/isolines-7-45.eps\ cosine/order-90.eps\ cosine/isolines-4-90.eps\ cosine/isolines-6-45.eps\ cosine/isolines-7-90.eps\ cosine/isolines-5-45.eps\ cosine/isolines-6-90.eps\ cosine/order-45.eps\ cosine/error-90.eps\ cosine/error-45.eps\ harmonic/harmonic.gfs\ harmonic/gerris.eps\ harmonic/residual.eps\ harmonic/rate.eps\ harmonic/error.eps\ harmonic/order.eps\ harmonic/lonlat/lonlat.gfs\ harmonic/lonlat/gerris.eps\ harmonic/lonlat/residual.eps\ harmonic/lonlat/rate.eps\ harmonic/lonlat/error.eps\ harmonic/lonlat/order.eps\ gaussian/gaussian.gfs\ gaussian/profile.eps\ gaussian/lonlat/lonlat.gfs\ gaussian/lonlat/profile.eps\ annulus/annulus.gfs\ annulus/convergence.eps\ annulus/profile.eps\ wannier/wannier.gfs\ wannier/convergence.eps\ wannier/streamlines.eps\ wannier/bipolar/bipolar.gfs\ wannier/bipolar/convergence.eps\ wannier/bipolar/mesh.eps\ wannier/stretch/stretch.gfs\ wannier/stretch/convergence.eps\ rossby/rossby.gfs\ rossby/ehpm-4.eps\ rossby/ehpm-5.eps\ rossby/ehpm-6.eps\ rossby/h-4.eps\ rossby/h-5.eps\ rossby/h-6.eps\ rossby/ec.eps\ rossby/eh.eps\ rossby/order.eps\ rossby/ocean/ocean.gfs\ rossby/ocean/ehpm-4.eps\ rossby/ocean/ehpm-5.eps\ rossby/ocean/ehpm-6.eps\ rossby/ocean/h-4.eps\ rossby/ocean/h-5.eps\ rossby/ocean/h-6.eps\ rossby/ocean/ec.eps\ rossby/ocean/eh.eps\ rossby/ocean/order.eps\ rossby/river/river.gfs\ rossby/river/ehpm-4.eps\ rossby/river/ehpm-5.eps\ rossby/river/ehpm-6.eps\ rossby/river/h-4.eps\ rossby/river/h-5.eps\ rossby/river/h-6.eps\ rossby/river/ec.eps\ rossby/river/eh.eps\ rossby/river/order.eps\ injectionaxi/injectionaxi.gfs\ injectionaxi/profile.eps\ planar/planar.gfs\ planar/solid/solid.gfs\ bump/bump.gfs\ bump/profile.eps\ bump/figure.eps\ bump/error.eps\ cylinder/cylinder.gfs\ cylinder/charge.eps\ cylinder/efield.eps\ cylinder/error.eps\ cylinder/planar/planar.gfs\ cylinder/planar/charge.eps\ cylinder/planar/efield.eps\ cylinder/planar/error.eps\ electro/electro.gfs\ electro/profile.eps\ electro/figure.eps\ debye/debye.gfs\ debye/profile.eps\ groundwater/groundwater.gfs\ groundwater/solution.eps\ groundwater/convergence.eps\ groundwater/piecewise/piecewise.gfs\ groundwater/piecewise/convergence.eps\ groundwater/piecewise/solution.eps tests.tex: template.tex Makefile.deps rm -r -f tests python gfs2tex $(TESTDIRS) sed -e 's/\\test{\(.*\)\/\(.*\)}/\\input{\1\/\2\/\2.tex}/g' \ -e 's/\\test{\(.*\)}/\\input{\1\/\1.tex}/g' < template.tex > tests.tex tests: tests.dvi if ! test -d $(DOC); then mkdir $(DOC); fi TEXINPUTS=$(TEXINPUTS) hevea -fix -I $(top_srcdir)/doc/examples $(DOC).tex TEXINPUTS=$(TEXINPUTS) imagen -res 500 -extra "pnmscale 0.24" $(DOC) hacha $(DOC).html rm -f $(DOC).html mv -f $(DOC)[0-9][0-9][0-9].png $(DOC) for f in *.html; do konwert iso1-utf8 < $$f > $(DOC)/$$f; rm -f $$f; done cat $(DOC).css ../doc/share/darcs.css > $(DOC)/$(DOC).css sh ../doc/share/fixnav.sh $(DOC) cp -f ../doc/share/contents.png ../doc/share/next.png ../doc/share/prev.png $(DOC) rm -f *_motif.gif $(DOC).h{tml,aux,ind,toc} $(DOC).image.tex $(DOC).css sh ../doc/examples/crossref.sh --url=http://gerris.dalembert.upmc.fr/gerris/tests/tests $(TESTDIRS) mv references tests tests.dvi: tests.tex $(top_srcdir)/doc/gerris.bib - TEXINPUTS=$(TEXINPUTS) latex -interaction=nonstopmode tests.tex > /dev/null 2>&1 BIBINPUTS=$(BIBINPUTS) bibtex tests - TEXINPUTS=$(TEXINPUTS) latex -interaction=nonstopmode tests.tex > /dev/null 2>&1 TEXINPUTS=$(TEXINPUTS) latex -interaction=nonstopmode tests.tex tests.pdf: tests.dvi dvips -Ppdf -G0 tests.dvi -o tests.ps ps2pdf -sPAPERSIZE=a4 -dMaxSubsetPct=100 -dCompatibilityLevel=1.2 -dSubsetFonts=true -dEmbedAllFonts=true tests.ps tests.pdf rm -f tests.ps tests.tar.gz: tests $(DOCS) tar czf tests.tar.gz tests $(DOCS) rm -r -f tests publish: tests.tar.gz cp tests.tar.gz $(WEBROOT)/tests cd $(WEBROOT)/tests && tar xzf tests.tar.gz && rm -f tests.tar.gz # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/test/merging/0000755000175100017510000000000012250371673014360 500000000000000gerris-snapshot-131206/test/merging/sim.err.ref0000644000175100017510000000010212250371171016337 000000000000006 2.559e-02 4.461e-01 7 1.079e-02 1.956e-01 8 2.822e-03 4.942e-02 gerris-snapshot-131206/test/merging/levels.gfv0000644000175100017510000000045412250371171016272 00000000000000# GfsView 2D View { tx = 0 ty = 0 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 30 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = 8 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Level { amin = 1 amax = 1 cmap = Jet } gerris-snapshot-131206/test/merging/vorticity.gfv0000644000175100017510000000070112250371171017027 00000000000000# GfsView 2D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 30 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = 8 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Vorticity { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 17 } Boundaries { r = 0 g = 0 b = 0 shading = Constant maxlevel = 8 } gerris-snapshot-131206/test/merging/merging.sh0000644000175100017510000000422712250371171016262 00000000000000if test x$donotrun != xtrue; then if sed "s/LEVEL/8/g" < $1 | \ sed "s/SIM/sim-8/g" | \ gerris2D - | gfsview-batch2D; then : else exit 1 fi for level in 6 7 9; do if sed "s/LEVEL/$level/g" < $1 | \ sed "s/SIM/sim-$level/g" | \ gerris2D - > /dev/null; then : else exit 1 fi done for level in 6 7 8 9; do if sed "s/LEVEL/$level/g" < $1 | \ sed "s/AdaptVorticity/# AdaptVorticity/g" | \ sed "s/SIM/simc-$level/g" | \ gerris2D - > /dev/null; then : else exit 1 fi done fi for s in sim simc; do rm -f $s.err for level in 6 7 8; do level1=`expr $level + 1` echo -n "$level " >> $s.err if gfscompare2D -v $s-$level $s-$level1 U 2>&1 | \ awk '{if ($1 == "total") print $6 " " $8;}' >> $s.err; then : else exit 1 fi done done if cat < convergence.tex ; then : from check import * from sys import * from math import * print r"""\begin{tabular}{|c|c|c|c|c|c|}\hline Domain & \multicolumn{5}{c|}{\$L_2\$}\\\ \hline & \$L=6\$ & \$O_2\$ & \$L=7\$ & \$O_2\$ & \$L=8\$ \\\ \hline""" def order(r,color='black'): for i in range(0,len(r.l)-1): y0,y1 = r.l[i][1],r.l[i+1][1] print '& {\color{%s}%.2e} & {\color{%s}%4.2f}' % (color, y0, color, log(y0/y1)/log(2.)), print '& {\color{%s}%.2e}' % (color, r.l[i+1][1]), r'\\\' print 'Circle', order(Curve('simc.err',1,2)) order(Curve('simc.err.ref',1,2), 'blue') print 'Adaptive', order(Curve('sim.err',1,2)) order(Curve('sim.err.ref',1,2), 'blue') print r"""\hline Domain & \multicolumn{5}{c|}{\$L_\infty\$} \\\ \hline & \$L=6\$ & \$O_\infty\$ & \$L=7\$ & \$O_\infty\$ & \$L=8\$ \\\ \hline""" print 'Circle', order(Curve('simc.err',1,3)) order(Curve('simc.err.ref',1,3), 'blue') print 'Adaptive', order(Curve('sim.err',1,3)) order(Curve('sim.err.ref',1,3), 'blue') print r"\hline\end{tabular}" EOF else exit 1 fi if cat < 1e-6 or\ (Curve('simc.err',1,3) - Curve('simc.err.ref',1,3)).max() > 1e-6: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/merging/simc.err.ref0000644000175100017510000000010212250371171016502 000000000000006 2.634e-02 4.563e-01 7 1.058e-02 1.882e-01 8 2.691e-03 4.873e-02 gerris-snapshot-131206/test/merging/merging.gfs0000644000175100017510000001354512250371171016432 00000000000000# Title: Convergence for the three-way vortex merging problem # # Description: # # Another of the test cases presented in Popinet \cite{popinet2003}, # initially used by Almgren et al. \cite{almgren98}, this convergence # test illustrates the second-order accuracy of Gerris when refinement # is placed appropriately, either through static refinement or dynamic # adaptive refinement. # # Four vortices are placed in the unit-square, centred at $(0,0)$, # $(0.09,0)$, $(-0.045,0.045\sqrt{3})$ and $(-0.045,$ $-0.045\sqrt{3})$ # and of strengths $-150$, $50$, $50$, $50$ respectively. The profile of # each vortex centred around $(x_i,y_i)$ is # $$ # {1+\tanh(100(0.03-r_i))\over 2}, # $$ # where $r_i=\sqrt{(x-x_i)^2+(y-y_i)^2}$. To initialise the velocity # field, we use this vorticity as the source term in the Poisson # equation for the streamfunction $\psi$ # $$ # \nabla^2\psi=\|\nabla\times{\bf U}\|. # $$ # Each component of the velocity field is then calculated from the # streamfunction. No-flow boundary conditions are used on the four sides # of the domain and the simulations are ran to $t=0.25$ using a CFL of # 0.9. # # Two different discretisations are used, each time with up to $L$ # levels of refinement: a grid using static refinement in concentric # circles of decreasing radius and a grid using dynamic adaptive # refinement. The ``circle'' grid is constructed by starting from a # uniform grid with four levels of refinement and by successively adding # one level to all the cells contained within circles centred on the # origin and of radii: # \begin{itemize} # \item $L=6$: 0.25, 0.15 # \item $L=7$: 0.25, 0.2, 0.15 # \item $L=8$: 0.25, 0.2, 0.175, 0.15 # \item $L=9$: 0.25, 0.2, 0.175, 0.1625, 0.15 # \end{itemize} # For the dynamically refined grid, the vorticity-based criterion is # applied at every timestep with a threshold $\tau=4\times10^{-3}$. As # we do not have an analytical solution for this problem, Richardson # extrapolation is used. # # Figure \ref{vorticity} illustrates the evolution of the vorticity # and of the adaptively refined grid for $L=8$. The most refined level # closely follows the three outer vortices as they orbit the central # one. Far from the vortices, a very coarse mesh is used ($l=3$). One # may note a few isolated patches of refinement scattered at the # periphery of the outer vortices. They are due to the numerical noise # added to the vorticity by the interpolation procedure necessary to # fill in velocity values for newly created cells. This could be # improved by using higher-order interpolants. # # Table \ref{convergence} summarises the results obtained for the # first twelve calculations. For fine enough grids close to # second-order convergence is obtained for both norms and for the two # discretisations used. The norms of the error on the various grids # are also comparable for a given resolution. # # \begin{table} # \caption{\label{convergence}Errors and convergence orders in the $x$-component of the # velocity for the four-way vortex merging problem. The reference # solution values are given in blue.} # \begin{center} # \input{convergence.tex} # \end{center} # \end{table} # # \begin{figure} # \caption{\label{vorticity}Contour plots of vorticity (left) and adaptive grids used # (right) for the four-way vortex merging calculation.} # \begin{center} # \begin{tabular}{cc} # \includegraphics*[width=0.3\hsize]{tv_0_05.eps} & # \includegraphics*[width=0.3\hsize]{tm_0_05.eps} \\ # \multicolumn{2}{c}{$t=0.05$} \\ # \\ # \includegraphics*[width=0.3\hsize]{tv_0_15.eps} & # \includegraphics*[width=0.3\hsize]{tm_0_15.eps} \\ # \multicolumn{2}{c}{$t=0.15$} \\ # \\ # \includegraphics*[width=0.3\hsize]{tv_0_25.eps} & # \includegraphics*[width=0.3\hsize]{tm_0_25.eps} \\ # \multicolumn{2}{c}{$t=0.25$} # \end{tabular} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh merging.sh merging.gfs # Version: 0.6.4 # Required files: merging.sh levels.gfv vorticity.gfv sim.err.ref simc.err.ref # Running time: 3 minutes # Generated files: convergence.tex tv_0_05.eps tm_0_05.eps tv_0_15.eps tm_0_15.eps tv_0_25.eps tm_0_25.eps # 1 0 GfsSimulation GfsBox GfsGEdge {} { Time { end = 0.25 } AdvectionParams { cfl = 0.9 } ApproxProjectionParams { tolerance = 1e-5 } ProjectionParams { tolerance = 1e-5 } Refine { double r = sqrt(x*x + y*y); switch (LEVEL) { case 6: return r > 0.25 ? 4 : r > 0.15 ? 5 : 6; case 7: return r > 0.25 ? 4 : r > 0.2 ? 5 : r > 0.15 ? 6 : 7; case 8: return r > 0.25 ? 4 : r > 0.2 ? 5 : r > 0.175 ? 6 : r > 0.15 ? 7 : 8; case 9: return r > 0.25 ? 4 : r > 0.2 ? 5 : r > 0.175 ? 6 : r > 0.1625 ? 7 : r > 0.15 ? 8 : 9; } } InitVorticity {} { double vortex (double xo, double yo, double s) { double r = sqrt ((x - xo)*(x - xo) + (y - yo)*(y - yo)); return s*(1. + tanh (100.*(0.03 - r)))/2.; } return vortex (0., 0., -150.) + vortex (0.09, 0., 50.) + vortex (-0.045, 0.0779422863406, 50.) + vortex (-0.045, -0.0779422863406, 50.); } AdaptVorticity { istep = 1 } { maxlevel = LEVEL cmax = 4e-3 } OutputSimulation { start = 0.05 } stdout EventScript { start = 0.05 } { echo Clear cat levels.gfv echo Save tm_0_05.eps { format = EPS line_width = 0.1 } echo Clear cat vorticity.gfv echo Save tv_0_05.eps { format = EPS line_width = 0.1 } } OutputSimulation { start = 0.15 } stdout EventScript { start = 0.15 } { echo Clear cat levels.gfv echo Save tm_0_15.eps { format = EPS line_width = 0.1 } echo Clear cat vorticity.gfv echo Save tv_0_15.eps { format = EPS line_width = 0.1 } } OutputSimulation { start = 0.25 } stdout EventScript { start = 0.25 } { echo Clear cat levels.gfv echo Save tm_0_25.eps { format = EPS line_width = 0.1 } echo Clear cat vorticity.gfv echo Save tv_0_25.eps { format = EPS line_width = 0.1 } } OutputSimulation { start = 0.25 } SIM } GfsBox {} gerris-snapshot-131206/test/strouhal.sh0000755000175100017510000000003312250371662015042 00000000000000python -u test.py strouhal gerris-snapshot-131206/test/groundwater.sh0000755000175100017510000000003612250371662015545 00000000000000python -u test.py groundwater gerris-snapshot-131206/test/injectionaxi/0000755000175100017510000000000012250371674015415 500000000000000gerris-snapshot-131206/test/injectionaxi/injectionaxi.gfs0000644000175100017510000000550312250371171020515 00000000000000# Title: Unipolar injection through a cylindrical dielectric medium # # Description: # # A unipolar injection is established between an inner cylindrical # core and an outer grounded cylinder by means of a voltage # difference. The gap between cylinders is filled with a dielectric # medium. A front of charge traverses the dielectric medium and finally # the steady solution shown in figure \ref{unipolar} is reached. The # simulation uses a polar coordinate metric. # \begin{figure}[htbp] # \caption{\label{unipolar} Radial distribution of the charge density # and electric potential. (Continuous) analytical solution, (symbols) # Gerris EHD module.} # \begin{center} # \includegraphics[width=0.8\hsize]{profile.eps} # \end{center} # \end{figure} # # Author: Jose M. L\'opez-Herrera S\'anchez # Command: gerris2D injectionaxi.gfs # Version: 130802 # Required files: injectionaxi.gfs # Running time: 11 seconds # Generated files: profile.eps GModule electrohydro 1 0 GfsElectroHydro GfsBox GfsGEdge { } { Global { #define Volt 1.0 #define C 0.68042 #define a 0.3 } Metric M { x = ((1.-a)*rx+0.5*(1.+a))*cos(ry) y = ((1.-a)*rx+0.5*(1.+a))*sin(ry) } VariableTracer Q { vx = Ex/(1.-a) vy = 0. } VariableTracerVOF T VariableVOFConcentration QC { vx = Ex/(1.-a) vy = 0. } T Init {} { T = 1 } Refine 5 # AdaptGradient { istep = 5 } { cmax = 0.01 minlevel = 4 maxlevel = 6 } Q Time { end = 1.2 dtmax = 1e-2} EventStop { istep = 10 } Q 1.e-5 DQ OutputSimulation { start = end } prof {format = text} OutputErrorNorm { start = end } phi { v = Phi } { s = { double r2 = x*x+y*y; double r = sqrt(r2); double aux = sqrt(1.+r2)+log(r)-log(1.+sqrt(1.+r2)); return 0.710376*(sqrt(2.)-log(1.+sqrt(2.))-aux); } unbiased = 1 } OutputTime { istep = 10 } stderr EventScript {start = end} { cat < 3.e-4) { print "Phi: " $9 > "/dev/stderr"; exit (1); }}' < phi ; then : else status=$GFS_STOP; fi exit $status } } { # Electric parameters perm = 1.0 charge = Q ElectricProjectionParams {tolerance = 1e-5} } GfsBox { left = Boundary { BcDirichlet Phi Volt BcDirichlet Q C BcDirichlet QC C } right = Boundary { BcDirichlet Phi 0. } } 1 1 top gerris-snapshot-131206/test/swirl/0000755000175100017510000000000012250371673014070 500000000000000gerris-snapshot-131206/test/swirl/analytical0000644000175100017510000001144412250371172016052 00000000000000 0.0000000e+00 -0.0000000e+00 1.0000000e+00 6.0606061e-02 1.8008717e-03 9.6270898e-01 1.2121212e-01 6.9241494e-03 9.2562495e-01 1.8181818e-01 1.4972667e-02 8.8892689e-01 2.4242424e-01 2.5575109e-02 8.5276904e-01 3.0303030e-01 3.8402780e-02 8.1727010e-01 3.6363636e-01 5.3147995e-02 7.8253226e-01 4.2424242e-01 6.9513271e-02 7.4864948e-01 4.8484848e-01 8.7251129e-02 7.1568026e-01 5.4545455e-01 1.0612918e-01 6.8367425e-01 6.0606061e-01 1.2592215e-01 6.5267642e-01 6.6666667e-01 1.4644545e-01 6.2270830e-01 7.2727273e-01 1.6752866e-01 5.9378471e-01 7.8787879e-01 1.8900778e-01 5.6591729e-01 8.4848485e-01 2.1074714e-01 5.3910442e-01 9.0909091e-01 2.3262247e-01 5.1334008e-01 9.6969697e-01 2.5452393e-01 4.8861280e-01 1.0303030e+00 2.7635493e-01 4.6490663e-01 1.0909091e+00 2.9803011e-01 4.4220216e-01 1.1515152e+00 3.1947560e-01 4.2047680e-01 1.2121212e+00 3.4062755e-01 3.9970560e-01 1.2727273e+00 3.6143072e-01 3.7986182e-01 1.3333333e+00 3.8183867e-01 3.6091722e-01 1.3939394e+00 4.0181234e-01 3.4284256e-01 1.4545455e+00 4.2131915e-01 3.2560796e-01 1.5151515e+00 4.4033301e-01 3.0918311e-01 1.5757576e+00 4.5883318e-01 2.9353760e-01 1.6363636e+00 4.7680364e-01 2.7864107e-01 1.6969697e+00 4.9423308e-01 2.6446345e-01 1.7575758e+00 5.1111378e-01 2.5097505e-01 1.8181818e+00 5.2744161e-01 2.3814672e-01 1.8787879e+00 5.4321543e-01 2.2594994e-01 1.9393939e+00 5.5843678e-01 2.1435691e-01 2.0000000e+00 5.7310941e-01 2.0334055e-01 2.0606061e+00 5.8723920e-01 1.9287467e-01 2.1212121e+00 6.0083364e-01 1.8293388e-01 2.1818182e+00 6.1390170e-01 1.7349366e-01 2.2424242e+00 6.2645364e-01 1.6453042e-01 2.3030303e+00 6.3850067e-01 1.5602142e-01 2.3636364e+00 6.5005486e-01 1.4794482e-01 2.4242424e+00 6.6112900e-01 1.4027968e-01 2.4848485e+00 6.7173632e-01 1.3300592e-01 2.5454545e+00 6.8189052e-01 1.2610430e-01 2.6060606e+00 6.9160554e-01 1.1955646e-01 2.6666667e+00 7.0089550e-01 1.1334480e-01 2.7272727e+00 7.0977461e-01 1.0745256e-01 2.7878788e+00 7.1825709e-01 1.0186373e-01 2.8484848e+00 7.2635710e-01 9.6563027e-02 2.9090909e+00 7.3408868e-01 9.1535914e-02 2.9696970e+00 7.4146569e-01 8.6768543e-02 3.0303030e+00 7.4850178e-01 8.2247699e-02 3.0909091e+00 7.5521037e-01 7.7960834e-02 3.1515152e+00 7.6160459e-01 7.3896003e-02 3.2121212e+00 7.6769725e-01 7.0041847e-02 3.2727273e+00 7.7350087e-01 6.6387567e-02 3.3333333e+00 7.7902759e-01 6.2922901e-02 3.3939394e+00 7.8428923e-01 5.9638098e-02 3.4545455e+00 7.8929725e-01 5.6523896e-02 3.5151515e+00 7.9406272e-01 5.3571497e-02 3.5757576e+00 7.9859636e-01 5.0772551e-02 3.6363636e+00 8.0290853e-01 4.8119126e-02 3.6969697e+00 8.0700919e-01 4.5603696e-02 3.7575758e+00 8.1090796e-01 4.3219119e-02 3.8181818e+00 8.1461411e-01 4.0958616e-02 3.8787879e+00 8.1813650e-01 3.8815755e-02 3.9393939e+00 8.2148371e-01 3.6784433e-02 4.0000000e+00 8.2466392e-01 3.4858862e-02 4.0606061e+00 8.2768500e-01 3.3033552e-02 4.1212121e+00 8.3055450e-01 3.1303293e-02 4.1818182e+00 8.3327964e-01 2.9663147e-02 4.2424242e+00 8.3586733e-01 2.8108428e-02 4.3030303e+00 8.3832418e-01 2.6634695e-02 4.3636364e+00 8.4065652e-01 2.5237735e-02 4.4242424e+00 8.4287040e-01 2.3913553e-02 4.4848485e+00 8.4497159e-01 2.2658362e-02 4.5454545e+00 8.4696561e-01 2.1468571e-02 4.6060606e+00 8.4885771e-01 2.0340775e-02 4.6666667e+00 8.5065291e-01 1.9271745e-02 4.7272727e+00 8.5235602e-01 1.8258422e-02 4.7878788e+00 8.5397158e-01 1.7297904e-02 4.8484848e+00 8.5550396e-01 1.6387441e-02 4.9090909e+00 8.5695730e-01 1.5524424e-02 4.9696970e+00 8.5833554e-01 1.4706382e-02 5.0303030e+00 8.5964245e-01 1.3930971e-02 5.0909091e+00 8.6088161e-01 1.3195971e-02 5.1515152e+00 8.6205642e-01 1.2499275e-02 5.2121212e+00 8.6317013e-01 1.1838887e-02 5.2727273e+00 8.6422582e-01 1.1212915e-02 5.3333333e+00 8.6522643e-01 1.0619566e-02 5.3939394e+00 8.6617474e-01 1.0057138e-02 5.4545455e+00 8.6707342e-01 9.5240213e-03 5.5151515e+00 8.6792497e-01 9.0186871e-03 5.5757576e+00 8.6873181e-01 8.5396875e-03 5.6363636e+00 8.6949620e-01 8.0856499e-03 5.6969697e+00 8.7022031e-01 7.6552732e-03 5.7575758e+00 8.7090621e-01 7.2473242e-03 5.8181818e+00 8.7155583e-01 6.8606338e-03 5.8787879e+00 8.7217105e-01 6.4940939e-03 5.9393939e+00 8.7275362e-01 6.1466542e-03 6.0000000e+00 8.7330522e-01 5.8173191e-03 gerris-snapshot-131206/test/swirl/swirl.gfs0000644000175100017510000000761012250371172015647 00000000000000# Title: Boundary layer on a rotating disk # # Description: # # Von K\'arm\'an \cite{karman1921} showed that the steady flow of an # incompressible liquid of kinematic viscosity $\nu$ induced by an # infinite plane disk rotating at angular velocity $\Omega$ can be # described by a similarity solution. In effect, using # $\zeta=z\sqrt{\Omega/\nu}$ and setting the axial velocity $U$, # radial velocity $V$ and azimuthal velocity $W$ as # $$ # U=\sqrt{\nu \Omega} F(\zeta) \quad V=\Omega r H(\zeta) # \quad W = \Omega r G(\zeta) # $$ # the Navier-Stokes equations reduce to a couple of ODEs: # $$ # F'''-F\, F'' +F'^2/2 +2G^2 = 0 \quad \mbox{and} \quad G''-F\,G'+G\,F' = 0 # $$ # with boundary conditions # $$ # F(0)=F'(0)=0 \: G(0)=1. \quad \mbox{and} \quad F'(\infty)=G(\infty)=0. # $$ # where the prime denotes differentiation with respect to $\zeta$. # # In figure \ref{veloc} the analytical dimensionless axial and # azimuthal velocities of Von K\'arm\'an are compared with the # numerical solutions obtained with the axisymmetric solver including # azimuthal velocity (swirl). # # \begin{figure}[htbp] # \caption{\label{veloc} Profiles of dimensionless axial and azimuthal velocities.} # \begin{center} # \includegraphics[width=0.8\hsize]{profiles.eps} # \end{center} # \end{figure} # # Author: J.M. L\'opez-Herrera # Command: gerris2D swirl.gfs # Version: 111123 # Required files: analytical # Running time: 1 minute # Generated files: profiles.eps # 4 3 GfsAxi GfsBox GfsGEdge { x = 0.5 } { PhysicalParams { L = 3 } SourceViscosity 0.2 # the block below adds the azimuthal velocity (swirl) and # associated terms VariableTracer W SourceDiffusion W 0.2 Init { istep = 1 } { W = W*(1. - dt*V/y) } Source V W*W/y Refine 5 Time { end = 12 dtmax = 2e-2 } EventStop { step = 0.1 } U 1e-3 DU # OutputTime { istep = 10 } stderr # OutputProjectionStats { istep = 10 } stderr # OutputSimulation { istep = 10 } stdout OutputSimulation { start = end } end.txt { format = text variables = U,W } OutputSimulation { start = end } end.gfs EventScript { start = end } { awk 'BEGIN{ nu = 0.2 } { if ($2 != 0. && $1 != "#" && ($1*$1 + $2*$2) < 8.0) print $1/sqrt(nu),-$4/sqrt(nu),$5/$2; }' < end.txt > nu if gnuplot < 8e-3 or \ (Curve('nu',1,3) - Curve('analytical',1,3)).normi() > 8e-3 : print (Curve('nu',1,2) - Curve('analytical',1,2)).normi() print (Curve('nu',1,3) - Curve('analytical',1,3)).normi() exit(1) EOF else exit $GFS_STOP; fi } } # box 1 GfsBox { left = Boundary { BcDirichlet U 0 BcDirichlet V 0 BcDirichlet W y } right = Boundary { BcNeumann U 0 BcNeumann V 0 BcNeumann W 0 BcDirichlet P 0. } bottom = Boundary { BcDirichlet W 0 } } # box 2 GfsBox { left = Boundary { BcDirichlet U 0 BcDirichlet V 0 BcDirichlet W y } right = Boundary { BcNeumann U 0 BcNeumann V 0 BcNeumann W 0 BcDirichlet P 0. } } # box 3 GfsBox { left = Boundary { BcDirichlet U 0 BcDirichlet V 0 BcDirichlet W y } right = Boundary { BcNeumann U 0 BcNeumann V 0 BcNeumann W 0 BcDirichlet P 0. } } # box 4 GfsBox { left = Boundary { BcDirichlet U 0 BcDirichlet V 0 BcDirichlet W y } right = Boundary { BcNeumann U 0 BcNeumann V 0 BcNeumann W 0 BcDirichlet P 0. } top = Boundary { BcNeumann U 0 BcNeumann V 0 BcNeumann W 0 } } 1 2 top 2 3 top 3 4 top gerris-snapshot-131206/test/conservation.sh0000755000175100017510000000003712250371662015717 00000000000000python -u test.py conservation gerris-snapshot-131206/test/shore.sh0000755000175100017510000000003012250371662014316 00000000000000python -u test.py shore gerris-snapshot-131206/test/poisson/0000755000175100017510000000000012250371672014421 500000000000000gerris-snapshot-131206/test/poisson/dirichlet/0000755000175100017510000000000012250371672016370 500000000000000gerris-snapshot-131206/test/poisson/dirichlet/dirichlet.gfs0000644000175100017510000000467312250371171020764 00000000000000# Title: Dirichlet boundary condition # # Description: # # Similar to the previous test but with embedded solid boundaries and # a non-trivial Dirichlet boundary condition. This test case was # proposed by \cite{johansen98}. The boundary of the domain is defined by # $$r < 0.30 + 0.15\cos(6\theta)$$ # The Poisson problem to solve in this domain is # $$\nabla^2\Phi=7r^2\cos(3\theta)$$ # which has the exact solution # $$\Phi=r^4\cos(3\theta)$$ # which is used as boundary condition. # # \begin{figure}[htbp] # \caption{\label{residual}Evolution of the residual.} # \begin{center} # \includegraphics[width=0.8\hsize]{residual.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{rate}Average reduction factor.} # \begin{center} # \includegraphics[width=0.8\hsize]{rate.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Evolution of the error as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Corresponding convergence order.} # \begin{center} # \includegraphics[width=0.8\hsize]{order.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../poisson.sh dirichlet.gfs # Version: 100707 # Required files: res-7.ref error.ref order.ref # Generated files: residual.eps rate.eps error.eps order.eps # 1 0 GfsPoisson GfsBox GfsGEdge {} { Time { iend = 1 } Refine LEVEL Solid ({ double theta = atan2 (y, x); double radius = 0.30 + 0.15*cos (6.*theta); return radius*radius - x*x - y*y; }) SurfaceBc P Dirichlet { double theta = atan2 (y, x); double r2 = x*x + y*y; return r2*r2*cos (3.*theta); } GModule hypre ApproxProjectionParams { tolerance = 1e-30 erelax = 2 nitermin = CYCLE nitermax = CYCLE } Init {} { Div = { double theta = atan2 (y, x); double r2 = x*x + y*y; return 7.*r2*cos (3.*theta); } } OutputTime { istep = 1 } { awk '{if ($2 == 1) print CYCLE, $8;}' >> time } OutputProjectionStats { start = end } { awk '{if ($1 == "residual.infty:") print CYCLE, $3, $4;}' >> proj } OutputErrorNorm { start = end } { awk '{print LEVEL, $5, $7, $9}' >> error } { v = P } { s = { double theta = atan2 (y, x); double r2 = x*x + y*y; return r2*r2*cos (3.*theta); } } OutputSimulation { start = end } end-SOLVER.gfs } GfsBox {} gerris-snapshot-131206/test/poisson/dirichlet/order.ref0000644000175100017510000000021412250371171020110 000000000000004 1.08836 0.747829 0.402936 5 0.814252 0.834775 0.498107 6 0.997386 0.967139 0.306811 7 1.09749 1.05999 1.13198 8 1.02537 0.978258 0.748584 gerris-snapshot-131206/test/poisson/dirichlet/error.ref0000644000175100017510000000030012250371171020122 000000000000003 8.248e-04 1.222e-03 3.324e-03 4 3.879e-04 7.277e-04 2.514e-03 5 2.206e-04 4.080e-04 1.780e-03 6 1.105e-04 2.087e-04 1.439e-03 7 5.164e-05 1.001e-04 6.566e-04 8 2.537e-05 5.081e-05 3.908e-04 gerris-snapshot-131206/test/poisson/dirichlet/res-7.ref0000644000175100017510000000123612250371171017737 000000000000000 0.41000000 5.000e+03 0 0 0.48000000 5.000e+03 0 1 0.58000000 1.104e+03 4.52899 1 0.84000000 1.071e+02 46.6853 2 0.79000000 2.302e+02 4.79583 2 0.89000000 1.001e+01 10.6993 3 0.97000000 7.197e+01 3.19855 3 0.89000000 1.390e+00 7.20144 4 1.14000000 2.182e+01 3.29835 4 0.93000000 1.905e-01 7.29659 5 1.30000000 6.435e+00 3.39083 5 0.95000000 2.592e-02 7.34954 6 1.68000000 1.886e+00 3.41198 6 1.01000000 3.516e-03 7.37201 7 1.94000000 5.495e-01 3.43221 7 1.01000000 4.765e-04 7.3788 8 2.00000000 1.597e-01 3.44083 8 1.03000000 6.456e-05 7.38073 9 1.99000000 4.636e-02 3.44478 9 1.09000000 8.745e-06 7.3825 10 2.31000000 1.345e-02 3.44684 10 1.12000000 1.184e-06 7.38598 gerris-snapshot-131206/test/poisson/poisson.sh0000644000175100017510000000703612250371171016367 00000000000000if test x$donotrun != xtrue; then rm -f error for solver in gerris hypre; do rm -f time proj if test x$solver = xhypre; then gmodule=GModule else gmodule="# GModule" fi for cycle in 0 1 2 3 4 5 6 7 8 9 10 ; do if ( sed "s/GModule/$gmodule/" < $1 | \ gerris2D -DLEVEL=8 -DCYCLE=$cycle -DSOLVER=$solver - ) ; then : else exit 1 fi done join time proj | awk '{ if (NR == 1) {print $0; old = $3} else {print $1,$2,$3,old/$3; old=$3}}' > res-7 rm -f error order proj time runtime status for level in 3 4 5 6 7 8; do if ( sed "s/GModule/$gmodule/" < $1 | \ gerris2D -DLEVEL=$level -DCYCLE=10 -DSOLVER=$solver - ) ; then : else exit 1 fi done if awk 'BEGIN { n = 0 } { l[n] = $1; n1[n] = $2; n2[n] = $3; ni[n++] = $4; } END { for (i = 1; i < n; i++) print l[i] " " log(n1[i-1]/n1[i])/log(2.) " " log(n2[i-1]/n2[i])/log(2.) " " log(ni[i-1]/ni[i])/log(2.); }' < error > order-$solver; then : else exit 1 fi mv res-7 res-7-$solver mv error error-$solver done fi if cat < 1e-8 or\ (Curve('error-gerris',1,4) - Curve('error.ref',1,4)).max() > 1e-6: print (Curve('res-7-gerris',1,3) - Curve('res-7.ref',1,3)).max() print (Curve('error-gerris',1,4) - Curve('error.ref',1,4)).max() exit(1) if (Curve('res-7-hypre',1,3) - Curve('res-7.ref',1,7)).max() > 1e-8 or\ (Curve('error-hypre',1,4) - Curve('error.ref',1,4)).max() > 1e-6: print (Curve('res-7-hypre',1,3) - Curve('res-7.ref',1,7)).max() print (Curve('error-hypre',1,4) - Curve('error.ref',1,4)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/poisson/circle/0000755000175100017510000000000012250371672015662 500000000000000gerris-snapshot-131206/test/poisson/circle/order.ref0000644000175100017510000000020112250371171017376 000000000000004 2.74632 2.97648 2.98402 5 1.70952 1.70004 1.17255 6 1.88171 1.89043 1.91523 7 1.92632 1.92371 1.8692 8 1.97323 1.97253 1.96772 gerris-snapshot-131206/test/poisson/circle/circle.gfs0000644000175100017510000000445612250371171017547 00000000000000# Title: Convergence with a refined circle # # Description: # # Same as the previous test but in order to test the accuracy of the # gradient operator at coarse/fine boundaries, two levels of # refinement are added in a circle centered on the origin and of # radius 0.25. # # The solver still shows second-order accuracy in all norms (Figure \ref{order}). # # \begin{figure}[htbp] # \caption{\label{residual}Evolution of the residual.} # \begin{center} # \includegraphics[width=0.8\hsize]{residual.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{rate}Average reduction factor.} # \begin{center} # \includegraphics[width=0.8\hsize]{rate.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Evolution of the error as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Corresponding convergence order.} # \begin{center} # \includegraphics[width=0.8\hsize]{order.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../poisson.sh circle.gfs # Version: 100325 # Required files: res-7.ref error.ref order.ref # Generated files: residual.eps rate.eps error.eps order.eps # 1 0 GfsPoisson GfsBox GfsGEdge {} { Time { iend = 1 } Refine (x*x + y*y <= 0.25*0.25 ? LEVEL + 2 : LEVEL) GModule hypre ApproxProjectionParams { tolerance = 1e-30 nitermin = CYCLE nitermax = CYCLE } Init {} { Div = { int k = 3, l = 3; return -M_PI*M_PI*(k*k + l*l)*sin (M_PI*k*x)*sin (M_PI*l*y); } } OutputTime { istep = 1 } { awk '{if ($2 == 1) print CYCLE, $8;}' >> time } OutputProjectionStats { start = end } { awk '{if ($1 == "residual.infty:") print CYCLE, $3, $4;}' >> proj } OutputErrorNorm { start = end } { awk '{print LEVEL, $5, $7, $9}' >> error } { v = P } { s = (sin (M_PI*3.*x)*sin (M_PI*3.*y)) unbiased = 1 } OutputSimulation { start = end } end-SOLVER.gfs } GfsBox { left = Boundary { BcNeumann P (- 3.*M_PI*cos(M_PI*3.*x)*sin (M_PI*3.*y)) } right = Boundary { BcNeumann P ( 3.*M_PI*cos(M_PI*3.*x)*sin (M_PI*3.*y)) } top = Boundary { BcNeumann P ( 3.*M_PI*cos(M_PI*3.*y)*sin (M_PI*3.*x)) } bottom = Boundary { BcNeumann P (- 3.*M_PI*cos(M_PI*3.*y)*sin (M_PI*3.*x)) } } gerris-snapshot-131206/test/poisson/circle/error.ref0000644000175100017510000000030012250371171017414 000000000000003 6.498e-02 9.917e-02 2.281e-01 4 9.684e-03 1.260e-02 2.883e-02 5 2.961e-03 3.878e-03 1.279e-02 6 8.035e-04 1.046e-03 3.391e-03 7 2.114e-04 2.757e-04 9.282e-04 8 5.384e-05 7.025e-05 2.373e-04 gerris-snapshot-131206/test/poisson/circle/res-7.ref0000644000175100017510000000124112250371171017225 000000000000000 1.41000000 1.777e+02 0 0 1.35000000 1.777e+02 0 1 2.50000000 3.330e+01 5.33634 1 4.36000000 5.059e+02 0.351255 2 3.52000000 1.601e+00 20.7995 2 4.73000000 1.315e+02 3.84715 3 4.51000000 7.704e-02 20.7814 3 5.23000000 3.041e+01 4.32424 4 5.49000000 4.792e-03 16.0768 4 5.62000000 5.970e+00 5.0938 5 6.52000000 3.813e-04 12.5675 5 6.00000000 1.119e+00 5.33512 6 7.56000000 2.988e-05 12.761 6 6.39000000 2.305e-01 4.85466 7 8.51000000 2.440e-06 12.2459 7 6.84000000 4.819e-02 4.78315 8 9.59000000 2.055e-07 11.8735 8 7.24000000 1.013e-02 4.75716 9 10.44000000 1.810e-08 11.3536 9 7.71000000 2.162e-03 4.68548 10 11.57000000 2.103e-09 8.60675 10 7.99000000 4.680e-04 4.61966 gerris-snapshot-131206/test/poisson/order.ref0000644000175100017510000000017112250371171016143 000000000000004 1.99112 2.05049 1.79943 5 2.0282 2.00998 1.89102 6 2.00844 2.00263 1.96518 7 1.9995 2 1.98993 8 2.00066 2.00021 1.9968 gerris-snapshot-131206/test/poisson/error.ref0000644000175100017510000000030012250371171016153 000000000000003 5.669e-02 7.328e-02 1.353e-01 4 1.426e-02 1.769e-02 3.887e-02 5 3.496e-03 4.392e-03 1.048e-02 6 8.689e-04 1.096e-03 2.684e-03 7 2.173e-04 2.740e-04 6.757e-04 8 5.430e-05 6.849e-05 1.693e-04 gerris-snapshot-131206/test/poisson/poisson.gfs0000644000175100017510000000571312250371171016534 00000000000000# Title: Convergence of the Poisson solver # # Description: # # This is one of the test cases presented in Popinet # \cite{popinet2003}. We solve the Poisson equation in a square # domain with Dirichlet boundary conditions on all sides and the # right-hand-side: # $$ # \nabla\cdot{\bf U}^{\star\star}(x,y) = -\pi^2(k^2+l^2)\sin(\pi kx)\sin(\pi ly) # $$ # with $k = l = 3$. The exact solution of the Poisson equation # with this source term is # $$ # \phi(x,y)=\sin(\pi kx)\sin(\pi ly). # $$ # Figure \ref{residual} illustrates the evolution of the maximum # residual as a function of CPU time. Figure \ref{rate} # illustrates the average residual reduction factor (per V-cycle). The # evolution of the norms of the error of the final solution as a # function of resolution is illustrated on Figure \ref{error}. The # corresponding order of convergence is given on Figure \ref{order}. # # The curves labeled "Hypre" were obtained using the # \url{http://gfs.sourceforge.net/wiki/index.php/Object_hierarchy#Hypre}{hypre} # module solver rather than Gerris' built-in multilevel solver. # # \begin{figure}[htbp] # \caption{\label{residual}Evolution of the residual.} # \begin{center} # \includegraphics[width=0.8\hsize]{residual.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{rate}Average reduction factor.} # \begin{center} # \includegraphics[width=0.8\hsize]{rate.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Evolution of the error as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Corresponding convergence order.} # \begin{center} # \includegraphics[width=0.8\hsize]{order.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh poisson.sh poisson.gfs # Version: 100325 # Required files: poisson.sh res-7.ref error.ref order.ref # Generated files: residual.eps rate.eps error.eps order.eps # 1 0 GfsPoisson GfsBox GfsGEdge {} { Time { iend = 1 } Refine LEVEL GModule hypre ApproxProjectionParams { tolerance = 1e-30 nitermin = CYCLE nitermax = CYCLE } Init {} { Div = { int k = 3, l = 3; return -M_PI*M_PI*(k*k + l*l)*sin (M_PI*k*x)*sin (M_PI*l*y); } } OutputTime { istep = 1 } { awk '{if ($2 == 1) print CYCLE, $8;}' >> time } OutputProjectionStats { start = end } { awk '{if ($1 == "residual.infty:") print CYCLE, $3, $4;}' >> proj } OutputErrorNorm { start = end } { awk '{print LEVEL, $5, $7, $9}' >> error } { v = P } { s = (sin (M_PI*3.*x)*sin (M_PI*3.*y)) unbiased = 1 } OutputSimulation { start = end } end-SOLVER.gfs } GfsBox { left = Boundary { BcDirichlet P (sin (M_PI*3.*x)*sin (M_PI*3.*y)) } right = Boundary { BcDirichlet P (sin (M_PI*3.*x)*sin (M_PI*3.*y)) } top = Boundary { BcDirichlet P (sin (M_PI*3.*x)*sin (M_PI*3.*y)) } bottom = Boundary { BcDirichlet P (sin (M_PI*3.*x)*sin (M_PI*3.*y)) } } gerris-snapshot-131206/test/poisson/res-7.ref0000644000175100017510000000123512250371171015767 000000000000000 0.33000000 2.623e+05 0 0 0.31000000 2.623e+05 0 1 0.57000000 2.496e+04 10.5088 1 1.07000000 8.222e+01 3190.22 2 0.77000000 3.041e+03 8.20783 2 1.13000000 7.674e-01 107.141 3 0.97000000 1.731e+02 17.5679 3 1.21000000 8.455e-03 90.7629 4 1.18000000 5.590e+00 30.966 4 1.26000000 1.007e-04 83.9623 5 1.36000000 3.792e-01 14.7416 5 1.37000000 1.250e-06 80.56 6 1.55000000 3.411e-02 11.117 6 1.43000000 1.585e-08 78.8644 7 1.77000000 2.862e-03 11.9182 7 1.50000000 2.019e-10 78.5042 8 1.97000000 2.124e-04 13.4746 8 1.60000000 7.785e-11 2.59345 9 2.16000000 1.469e-05 14.4588 9 1.68000000 7.790e-11 0.999358 10 2.40000000 9.698e-07 15.1475 10 1.75000000 7.785e-11 1.00064 gerris-snapshot-131206/test/still.sh0000755000175100017510000000003012250371662014325 00000000000000python -u test.py still gerris-snapshot-131206/test/geo/0000755000175100017510000000000012250371673013502 500000000000000gerris-snapshot-131206/test/geo/e.ref0000644000175100017510000006726312250371171014353 000000000000000 1.137e-13 0.0115741 5.119e-02 0.0231481 1.085e-01 0.0347222 1.764e-01 0.0462963 3.360e-01 0.0578704 5.409e-01 0.0694444 7.867e-01 0.0810185 1.068e+00 0.0925926 1.379e+00 0.104167 1.712e+00 0.115741 2.061e+00 0.127315 2.418e+00 0.138889 2.776e+00 0.150463 3.127e+00 0.162037 3.464e+00 0.173611 3.780e+00 0.185185 4.069e+00 0.196759 4.324e+00 0.208333 4.542e+00 0.219907 4.717e+00 0.231481 4.847e+00 0.243056 4.928e+00 0.25463 4.961e+00 0.266204 4.945e+00 0.277778 4.880e+00 0.289352 4.768e+00 0.300926 4.613e+00 0.3125 4.417e+00 0.324074 4.185e+00 0.335648 3.923e+00 0.347222 3.635e+00 0.358796 3.328e+00 0.37037 3.008e+00 0.381944 2.681e+00 0.393519 2.354e+00 0.405093 2.033e+00 0.416667 1.724e+00 0.428241 1.433e+00 0.439815 1.164e+00 0.451389 9.220e-01 0.462963 7.112e-01 0.474537 5.346e-01 0.486111 3.944e-01 0.497685 3.192e-01 0.509259 2.898e-01 0.520833 2.580e-01 0.532407 2.689e-01 0.543981 3.087e-01 0.555556 3.502e-01 0.56713 4.645e-01 0.578704 6.069e-01 0.590278 7.734e-01 0.601852 9.597e-01 0.613426 1.161e+00 0.625 1.374e+00 0.636574 1.593e+00 0.648148 1.813e+00 0.659722 2.031e+00 0.671296 2.242e+00 0.68287 2.442e+00 0.694444 2.628e+00 0.706019 2.796e+00 0.717593 2.944e+00 0.729167 3.069e+00 0.740741 3.171e+00 0.752315 3.247e+00 0.763889 3.298e+00 0.775463 3.323e+00 0.787037 3.323e+00 0.798611 3.298e+00 0.810185 3.249e+00 0.821759 3.180e+00 0.833333 3.091e+00 0.844907 2.984e+00 0.856481 2.863e+00 0.868056 2.729e+00 0.87963 2.586e+00 0.891204 2.437e+00 0.902778 2.283e+00 0.914352 2.128e+00 0.925926 1.975e+00 0.9375 1.825e+00 0.949074 1.681e+00 0.960648 1.545e+00 0.972222 1.419e+00 0.983796 1.304e+00 0.99537 1.201e+00 1.00694 1.112e+00 1.01852 1.037e+00 1.03009 9.754e-01 1.04167 9.287e-01 1.05324 8.962e-01 1.06481 8.775e-01 1.07639 8.721e-01 1.08796 8.791e-01 1.09954 8.977e-01 1.11111 9.267e-01 1.12269 9.649e-01 1.13426 1.011e+00 1.14583 1.064e+00 1.15741 1.122e+00 1.16898 1.184e+00 1.18056 1.249e+00 1.19213 1.314e+00 1.2037 1.380e+00 1.21528 1.445e+00 1.22685 1.507e+00 1.23843 1.567e+00 1.25 1.622e+00 1.26157 1.672e+00 1.27315 1.717e+00 1.28472 1.756e+00 1.2963 1.789e+00 1.30787 1.815e+00 1.31944 1.834e+00 1.33102 1.846e+00 1.34259 1.852e+00 1.35417 1.851e+00 1.36574 1.843e+00 1.37731 1.829e+00 1.38889 1.809e+00 1.40046 1.784e+00 1.41204 1.754e+00 1.42361 1.720e+00 1.43519 1.682e+00 1.44676 1.641e+00 1.45833 1.596e+00 1.46991 1.550e+00 1.48148 1.502e+00 1.49306 1.454e+00 1.50463 1.404e+00 1.5162 1.355e+00 1.52778 1.306e+00 1.53935 1.259e+00 1.55093 1.213e+00 1.5625 1.168e+00 1.57407 1.126e+00 1.58565 1.086e+00 1.59722 1.049e+00 1.6088 1.015e+00 1.62037 9.832e-01 1.63194 9.551e-01 1.64352 9.302e-01 1.65509 9.086e-01 1.66667 8.901e-01 1.67824 8.749e-01 1.68981 8.627e-01 1.70139 8.536e-01 1.71296 8.472e-01 1.72454 8.435e-01 1.73611 8.423e-01 1.74769 8.432e-01 1.75926 8.462e-01 1.77083 8.510e-01 1.78241 8.572e-01 1.79398 8.646e-01 1.80556 8.730e-01 1.81713 8.821e-01 1.8287 8.916e-01 1.84028 9.013e-01 1.85185 9.109e-01 1.86343 9.202e-01 1.875 9.289e-01 1.88657 9.369e-01 1.89815 9.440e-01 1.90972 9.499e-01 1.9213 9.545e-01 1.93287 9.578e-01 1.94444 9.595e-01 1.95602 9.596e-01 1.96759 9.581e-01 1.97917 9.548e-01 1.99074 9.498e-01 2.00231 9.430e-01 2.01389 9.345e-01 2.02546 9.243e-01 2.03704 9.124e-01 2.04861 8.990e-01 2.06019 8.840e-01 2.07176 8.677e-01 2.08333 8.501e-01 2.09491 8.313e-01 2.10648 8.115e-01 2.11806 7.908e-01 2.12963 7.694e-01 2.1412 7.473e-01 2.15278 7.248e-01 2.16435 7.020e-01 2.17593 6.790e-01 2.1875 6.560e-01 2.19907 6.331e-01 2.21065 6.105e-01 2.22222 5.882e-01 2.2338 5.664e-01 2.24537 5.453e-01 2.25694 5.248e-01 2.26852 5.051e-01 2.28009 4.863e-01 2.29167 4.683e-01 2.30324 4.514e-01 2.31481 4.374e-01 2.32639 4.374e-01 2.33796 4.355e-01 2.34954 4.353e-01 2.36111 4.356e-01 2.37269 4.331e-01 2.38426 4.280e-01 2.39583 4.269e-01 2.40741 4.240e-01 2.41898 4.212e-01 2.43056 4.215e-01 2.44213 4.235e-01 2.4537 4.299e-01 2.46528 4.339e-01 2.47685 4.489e-01 2.48843 4.573e-01 2.5 4.597e-01 2.51157 4.727e-01 2.52315 4.803e-01 2.53472 4.825e-01 2.5463 4.808e-01 2.55787 4.763e-01 2.56944 4.697e-01 2.58102 4.616e-01 2.59259 4.535e-01 2.60417 4.446e-01 2.61574 4.344e-01 2.62731 4.224e-01 2.63889 4.136e-01 2.65046 4.023e-01 2.66204 3.906e-01 2.67361 3.808e-01 2.68519 3.674e-01 2.69676 3.584e-01 2.70833 4.009e-01 2.71991 4.547e-01 2.73148 5.008e-01 2.74306 5.386e-01 2.75463 5.675e-01 2.7662 5.860e-01 2.77778 5.946e-01 2.78935 5.944e-01 2.80093 5.877e-01 2.8125 5.782e-01 2.82407 5.667e-01 2.83565 5.541e-01 2.84722 5.408e-01 2.8588 5.272e-01 2.87037 5.130e-01 2.88194 4.979e-01 2.89352 4.836e-01 2.90509 4.707e-01 2.91667 4.564e-01 2.92824 4.472e-01 2.93981 4.352e-01 2.95139 4.267e-01 2.96296 4.124e-01 2.97454 4.730e-01 2.98611 5.331e-01 2.99769 5.837e-01 3.00926 6.241e-01 3.02083 6.536e-01 3.03241 6.711e-01 3.04398 6.779e-01 3.05556 6.755e-01 3.06713 6.680e-01 3.0787 6.566e-01 3.09028 6.444e-01 3.10185 6.311e-01 3.11343 6.169e-01 3.125 6.019e-01 3.13657 5.862e-01 3.14815 5.724e-01 3.15972 5.578e-01 3.1713 5.415e-01 3.18287 5.254e-01 3.19444 5.122e-01 3.20602 4.953e-01 3.21759 4.814e-01 3.22917 4.686e-01 3.24074 4.845e-01 3.25231 5.442e-01 3.26389 5.936e-01 3.27546 6.323e-01 3.28704 6.599e-01 3.29861 6.754e-01 3.31019 6.807e-01 3.32176 6.782e-01 3.33333 6.701e-01 3.34491 6.605e-01 3.35648 6.490e-01 3.36806 6.364e-01 3.37963 6.234e-01 3.3912 6.100e-01 3.40278 5.960e-01 3.41435 5.806e-01 3.42593 5.643e-01 3.4375 5.507e-01 3.44907 5.361e-01 3.46065 5.326e-01 3.47222 5.450e-01 3.4838 5.577e-01 3.49537 5.705e-01 3.50694 5.835e-01 3.51852 5.966e-01 3.53009 6.098e-01 3.54167 6.231e-01 3.55324 6.365e-01 3.56481 6.498e-01 3.57639 6.631e-01 3.58796 6.764e-01 3.59954 6.895e-01 3.61111 7.025e-01 3.62269 7.154e-01 3.63426 7.282e-01 3.64583 7.407e-01 3.65741 7.531e-01 3.66898 7.652e-01 3.68056 7.772e-01 3.69213 7.889e-01 3.7037 8.004e-01 3.71528 8.116e-01 3.72685 8.227e-01 3.73843 8.335e-01 3.75 8.441e-01 3.76157 8.546e-01 3.77315 8.648e-01 3.78472 8.750e-01 3.7963 8.850e-01 3.80787 8.948e-01 3.81944 9.047e-01 3.83102 9.144e-01 3.84259 9.241e-01 3.85417 9.338e-01 3.86574 9.435e-01 3.87731 9.533e-01 3.88889 9.630e-01 3.90046 9.729e-01 3.91204 9.828e-01 3.92361 9.927e-01 3.93519 1.003e+00 3.94676 1.013e+00 3.95833 1.023e+00 3.96991 1.033e+00 3.98148 1.044e+00 3.99306 1.054e+00 4.00463 1.064e+00 4.0162 1.075e+00 4.02778 1.085e+00 4.03935 1.096e+00 4.05093 1.106e+00 4.0625 1.116e+00 4.07407 1.126e+00 4.08565 1.136e+00 4.09722 1.146e+00 4.1088 1.156e+00 4.12037 1.165e+00 4.13194 1.174e+00 4.14352 1.184e+00 4.15509 1.193e+00 4.16667 1.201e+00 4.17824 1.210e+00 4.18981 1.219e+00 4.20139 1.227e+00 4.21296 1.236e+00 4.22454 1.244e+00 4.23611 1.253e+00 4.24769 1.262e+00 4.25926 1.271e+00 4.27083 1.280e+00 4.28241 1.290e+00 4.29398 1.300e+00 4.30556 1.310e+00 4.31713 1.321e+00 4.3287 1.333e+00 4.34028 1.345e+00 4.35185 1.358e+00 4.36343 1.372e+00 4.375 1.386e+00 4.38657 1.401e+00 4.39815 1.417e+00 4.40972 1.433e+00 4.4213 1.450e+00 4.43287 1.467e+00 4.44444 1.485e+00 4.45602 1.503e+00 4.46759 1.521e+00 4.47917 1.540e+00 4.49074 1.558e+00 4.50231 1.576e+00 4.51389 1.594e+00 4.52546 1.611e+00 4.53704 1.627e+00 4.54861 1.642e+00 4.56019 1.657e+00 4.57176 1.670e+00 4.58333 1.681e+00 4.59491 1.691e+00 4.60648 1.700e+00 4.61806 1.707e+00 4.62963 1.712e+00 4.6412 1.716e+00 4.65278 1.718e+00 4.66435 1.718e+00 4.67593 1.717e+00 4.6875 1.714e+00 4.69907 1.711e+00 4.71065 1.706e+00 4.72222 1.701e+00 4.7338 1.695e+00 4.74537 1.689e+00 4.75694 1.684e+00 4.76852 1.679e+00 4.78009 1.675e+00 4.79167 1.672e+00 4.80324 1.671e+00 4.81481 1.672e+00 4.82639 1.675e+00 4.83796 1.681e+00 4.84954 1.689e+00 4.86111 1.701e+00 4.87269 1.716e+00 4.88426 1.733e+00 4.89583 1.754e+00 4.90741 1.779e+00 4.91898 1.806e+00 4.93056 1.836e+00 4.94213 1.869e+00 4.9537 1.904e+00 4.96528 1.941e+00 4.97685 1.980e+00 4.98843 2.020e+00 5 2.060e+00 5.01157 2.099e+00 5.02315 2.138e+00 5.03472 2.176e+00 5.0463 2.212e+00 5.05787 2.244e+00 5.06944 2.274e+00 5.08102 2.300e+00 5.09259 2.322e+00 5.10417 2.339e+00 5.11574 2.351e+00 5.12731 2.358e+00 5.13889 2.360e+00 5.15046 2.356e+00 5.16204 2.346e+00 5.17361 2.332e+00 5.18519 2.313e+00 5.19676 2.289e+00 5.20833 2.262e+00 5.21991 2.231e+00 5.23148 2.198e+00 5.24306 2.163e+00 5.25463 2.127e+00 5.2662 2.091e+00 5.27778 2.057e+00 5.28935 2.024e+00 5.30093 1.995e+00 5.3125 1.969e+00 5.32407 1.949e+00 5.33565 1.934e+00 5.34722 1.926e+00 5.3588 1.925e+00 5.37037 1.931e+00 5.38194 1.945e+00 5.39352 1.968e+00 5.40509 1.998e+00 5.41667 2.037e+00 5.42824 2.083e+00 5.43981 2.136e+00 5.45139 2.197e+00 5.46296 2.262e+00 5.47454 2.333e+00 5.48611 2.407e+00 5.49769 2.484e+00 5.50926 2.561e+00 5.52083 2.639e+00 5.53241 2.715e+00 5.54398 2.788e+00 5.55556 2.857e+00 5.56713 2.920e+00 5.5787 2.976e+00 5.59028 3.024e+00 5.60185 3.063e+00 5.61343 3.092e+00 5.625 3.110e+00 5.63657 3.118e+00 5.64815 3.114e+00 5.65972 3.099e+00 5.6713 3.073e+00 5.68287 3.037e+00 5.69444 2.991e+00 5.70602 2.936e+00 5.71759 2.874e+00 5.72917 2.805e+00 5.74074 2.732e+00 5.75231 2.655e+00 5.76389 2.577e+00 5.77546 2.499e+00 5.78704 2.424e+00 5.79861 2.352e+00 5.81019 2.286e+00 5.82176 2.227e+00 5.83333 2.178e+00 5.84491 2.139e+00 5.85648 2.111e+00 5.86806 2.096e+00 5.87963 2.094e+00 5.8912 2.106e+00 5.90278 2.132e+00 5.91435 2.172e+00 5.92593 2.225e+00 5.9375 2.291e+00 5.94907 2.370e+00 5.96065 2.458e+00 5.97222 2.556e+00 5.9838 2.662e+00 5.99537 2.773e+00 6.00694 2.889e+00 6.01852 3.006e+00 6.03009 3.122e+00 6.04167 3.236e+00 6.05324 3.346e+00 6.06481 3.449e+00 6.07639 3.543e+00 6.08796 3.627e+00 6.09954 3.699e+00 6.11111 3.758e+00 6.12269 3.802e+00 6.13426 3.832e+00 6.14583 3.846e+00 6.15741 3.844e+00 6.16898 3.827e+00 6.18056 3.795e+00 6.19213 3.748e+00 6.2037 3.688e+00 6.21528 3.616e+00 6.22685 3.534e+00 6.23843 3.444e+00 6.25 3.347e+00 6.26157 3.245e+00 6.27315 3.141e+00 6.28472 3.038e+00 6.2963 2.936e+00 6.30787 2.839e+00 6.31944 2.749e+00 6.33102 2.667e+00 6.34259 2.595e+00 6.35417 2.535e+00 6.36574 2.488e+00 6.37731 2.456e+00 6.38889 2.439e+00 6.40046 2.437e+00 6.41204 2.450e+00 6.42361 2.479e+00 6.43519 2.523e+00 6.44676 2.582e+00 6.45833 2.654e+00 6.46991 2.738e+00 6.48148 2.832e+00 6.49306 2.935e+00 6.50463 3.046e+00 6.5162 3.161e+00 6.52778 3.280e+00 6.53935 3.400e+00 6.55093 3.518e+00 6.5625 3.634e+00 6.57407 3.745e+00 6.58565 3.849e+00 6.59722 3.945e+00 6.6088 4.032e+00 6.62037 4.107e+00 6.63194 4.171e+00 6.64352 4.221e+00 6.65509 4.259e+00 6.66667 4.283e+00 6.67824 4.294e+00 6.68981 4.291e+00 6.70139 4.276e+00 6.71296 4.248e+00 6.72454 4.209e+00 6.73611 4.161e+00 6.74769 4.103e+00 6.75926 4.038e+00 6.77083 3.966e+00 6.78241 3.890e+00 6.79398 3.811e+00 6.80556 3.731e+00 6.81713 3.650e+00 6.8287 3.571e+00 6.84028 3.496e+00 6.85185 3.424e+00 6.86343 3.358e+00 6.875 3.298e+00 6.88657 3.246e+00 6.89815 3.202e+00 6.90972 3.168e+00 6.9213 3.142e+00 6.93287 3.127e+00 6.94444 3.122e+00 6.95602 3.126e+00 6.96759 3.141e+00 6.97917 3.165e+00 6.99074 3.198e+00 7.00231 3.240e+00 7.01389 3.290e+00 7.02546 3.348e+00 7.03704 3.412e+00 7.04861 3.481e+00 7.06019 3.556e+00 7.07176 3.634e+00 7.08333 3.715e+00 7.09491 3.798e+00 7.10648 3.882e+00 7.11806 3.966e+00 7.12963 4.048e+00 7.1412 4.129e+00 7.15278 4.207e+00 7.16435 4.281e+00 7.17593 4.350e+00 7.1875 4.414e+00 7.19907 4.472e+00 7.21065 4.523e+00 7.22222 4.567e+00 7.2338 4.604e+00 7.24537 4.632e+00 7.25694 4.652e+00 7.26852 4.664e+00 7.28009 4.667e+00 7.29167 4.662e+00 7.30324 4.648e+00 7.31481 4.627e+00 7.32639 4.598e+00 7.33796 4.561e+00 7.34954 4.518e+00 7.36111 4.469e+00 7.37269 4.415e+00 7.38426 4.357e+00 7.39583 4.295e+00 7.40741 4.231e+00 7.41898 4.166e+00 7.43056 4.101e+00 7.44213 4.037e+00 7.4537 3.975e+00 7.46528 3.916e+00 7.47685 3.863e+00 7.48843 3.814e+00 7.5 3.772e+00 7.51157 3.738e+00 7.52315 3.712e+00 7.53472 3.694e+00 7.5463 3.687e+00 7.55787 3.689e+00 7.56944 3.701e+00 7.58102 3.724e+00 7.59259 3.756e+00 7.60417 3.799e+00 7.61574 3.851e+00 7.62731 3.911e+00 7.63889 3.980e+00 7.65046 4.056e+00 7.66204 4.137e+00 7.67361 4.224e+00 7.68519 4.315e+00 7.69676 4.407e+00 7.70833 4.501e+00 7.71991 4.594e+00 7.73148 4.685e+00 7.74306 4.773e+00 7.75463 4.857e+00 7.7662 4.934e+00 7.77778 5.005e+00 7.78935 5.068e+00 7.80093 5.121e+00 7.8125 5.165e+00 7.82407 5.199e+00 7.83565 5.223e+00 7.84722 5.235e+00 7.8588 5.237e+00 7.87037 5.228e+00 7.88194 5.209e+00 7.89352 5.180e+00 7.90509 5.143e+00 7.91667 5.097e+00 7.92824 5.044e+00 7.93981 4.986e+00 7.95139 4.922e+00 7.96296 4.855e+00 7.97454 4.787e+00 7.98611 4.717e+00 7.99769 4.648e+00 8.00926 4.582e+00 8.02083 4.518e+00 8.03241 4.459e+00 8.04398 4.406e+00 8.05556 4.359e+00 8.06713 4.320e+00 8.0787 4.289e+00 8.09028 4.267e+00 8.10185 4.255e+00 8.11343 4.252e+00 8.125 4.258e+00 8.13657 4.274e+00 8.14815 4.300e+00 8.15972 4.334e+00 8.1713 4.377e+00 8.18287 4.428e+00 8.19444 4.486e+00 8.20602 4.549e+00 8.21759 4.618e+00 8.22917 4.691e+00 8.24074 4.768e+00 8.25231 4.846e+00 8.26389 4.924e+00 8.27546 5.003e+00 8.28704 5.080e+00 8.29861 5.154e+00 8.31019 5.225e+00 8.32176 5.292e+00 8.33333 5.353e+00 8.34491 5.409e+00 8.35648 5.457e+00 8.36806 5.499e+00 8.37963 5.533e+00 8.3912 5.560e+00 8.40278 5.579e+00 8.41435 5.589e+00 8.42593 5.593e+00 8.4375 5.588e+00 8.44907 5.577e+00 8.46065 5.559e+00 8.47222 5.535e+00 8.4838 5.506e+00 8.49537 5.472e+00 8.50694 5.434e+00 8.51852 5.393e+00 8.53009 5.350e+00 8.54167 5.306e+00 8.55324 5.261e+00 8.56481 5.217e+00 8.57639 5.175e+00 8.58796 5.134e+00 8.59954 5.096e+00 8.61111 5.062e+00 8.62269 5.033e+00 8.63426 5.008e+00 8.64583 4.988e+00 8.65741 4.974e+00 8.66898 4.966e+00 8.68056 4.964e+00 8.69213 4.969e+00 8.7037 4.979e+00 8.71528 4.996e+00 8.72685 5.018e+00 8.73843 5.046e+00 8.75 5.079e+00 8.76157 5.116e+00 8.77315 5.158e+00 8.78472 5.203e+00 8.7963 5.252e+00 8.80787 5.302e+00 8.81944 5.354e+00 8.83102 5.407e+00 8.84259 5.460e+00 8.85417 5.513e+00 8.86574 5.564e+00 8.87731 5.614e+00 8.88889 5.662e+00 8.90046 5.706e+00 8.91204 5.747e+00 8.92361 5.785e+00 8.93519 5.818e+00 8.94676 5.847e+00 8.95833 5.872e+00 8.96991 5.892e+00 8.98148 5.907e+00 8.99306 5.918e+00 9.00463 5.924e+00 9.0162 5.926e+00 9.02778 5.923e+00 9.03935 5.917e+00 9.05093 5.908e+00 9.0625 5.895e+00 9.07407 5.880e+00 9.08565 5.863e+00 9.09722 5.844e+00 9.1088 5.824e+00 9.12037 5.803e+00 9.13194 5.783e+00 9.14352 5.762e+00 9.15509 5.742e+00 9.16667 5.724e+00 9.17824 5.707e+00 9.18981 5.693e+00 9.20139 5.681e+00 9.21296 5.671e+00 9.22454 5.664e+00 9.23611 5.661e+00 9.24769 5.660e+00 9.25926 5.663e+00 9.27083 5.670e+00 9.28241 5.679e+00 9.29398 5.692e+00 9.30556 5.708e+00 9.31713 5.726e+00 9.3287 5.748e+00 9.34028 5.772e+00 9.35185 5.798e+00 9.36343 5.826e+00 9.375 5.855e+00 9.38657 5.886e+00 9.39815 5.917e+00 9.40972 5.949e+00 9.4213 5.981e+00 9.43287 6.013e+00 9.44444 6.045e+00 9.45602 6.075e+00 9.46759 6.105e+00 9.47917 6.133e+00 9.49074 6.159e+00 9.50231 6.184e+00 9.51389 6.206e+00 9.52546 6.227e+00 9.53704 6.245e+00 9.54861 6.261e+00 9.56019 6.275e+00 9.57176 6.287e+00 9.58333 6.296e+00 9.59491 6.303e+00 9.60648 6.309e+00 9.61806 6.312e+00 9.62963 6.314e+00 9.6412 6.314e+00 9.65278 6.313e+00 9.66435 6.311e+00 9.67593 6.309e+00 9.6875 6.305e+00 9.69907 6.302e+00 9.71065 6.298e+00 9.72222 6.294e+00 9.7338 6.291e+00 9.74537 6.288e+00 9.75694 6.286e+00 9.76852 6.285e+00 9.78009 6.285e+00 9.79167 6.286e+00 9.80324 6.288e+00 9.81481 6.292e+00 9.82639 6.297e+00 9.83796 6.304e+00 9.84954 6.312e+00 9.86111 6.321e+00 9.87269 6.331e+00 9.88426 6.343e+00 9.89583 6.356e+00 9.90741 6.371e+00 9.91898 6.386e+00 9.93056 6.402e+00 9.94213 6.419e+00 9.9537 6.436e+00 9.96528 6.454e+00 9.97685 6.472e+00 9.98843 6.491e+00 10 6.509e+00 10.0116 6.528e+00 10.0231 6.546e+00 10.0347 6.565e+00 10.0463 6.582e+00 10.0579 6.600e+00 10.0694 6.617e+00 10.081 6.633e+00 10.0926 6.649e+00 10.1042 6.664e+00 10.1157 6.678e+00 10.1273 6.692e+00 10.1389 6.705e+00 10.1505 6.717e+00 10.162 6.729e+00 10.1736 6.739e+00 10.1852 6.749e+00 10.1968 6.759e+00 10.2083 6.768e+00 10.2199 6.776e+00 10.2315 6.784e+00 10.2431 6.791e+00 10.2546 6.798e+00 10.2662 6.804e+00 10.2778 6.810e+00 10.2894 6.816e+00 10.3009 6.821e+00 10.3125 6.826e+00 10.3241 6.831e+00 10.3356 6.836e+00 10.3472 6.841e+00 10.3588 6.845e+00 10.3704 6.850e+00 10.3819 6.855e+00 10.3935 6.860e+00 10.4051 6.865e+00 10.4167 6.871e+00 10.4282 6.876e+00 10.4398 6.883e+00 10.4514 6.889e+00 10.463 6.897e+00 10.4745 6.905e+00 10.4861 6.913e+00 10.4977 6.923e+00 10.5093 6.933e+00 10.5208 6.944e+00 10.5324 6.956e+00 10.544 6.968e+00 10.5556 6.982e+00 10.5671 6.997e+00 10.5787 7.012e+00 10.5903 7.029e+00 10.6019 7.046e+00 10.6134 7.064e+00 10.625 7.082e+00 10.6366 7.101e+00 10.6481 7.121e+00 10.6597 7.141e+00 10.6713 7.161e+00 10.6829 7.180e+00 10.6944 7.200e+00 10.706 7.219e+00 10.7176 7.238e+00 10.7292 7.255e+00 10.7407 7.272e+00 10.7523 7.287e+00 10.7639 7.301e+00 10.7755 7.314e+00 10.787 7.325e+00 10.7986 7.334e+00 10.8102 7.342e+00 10.8218 7.347e+00 10.8333 7.351e+00 10.8449 7.353e+00 10.8565 7.353e+00 10.8681 7.352e+00 10.8796 7.349e+00 10.8912 7.345e+00 10.9028 7.340e+00 10.9144 7.334e+00 10.9259 7.327e+00 10.9375 7.321e+00 10.9491 7.315e+00 10.9606 7.309e+00 10.9722 7.304e+00 10.9838 7.301e+00 10.9954 7.299e+00 11.0069 7.299e+00 11.0185 7.301e+00 11.0301 7.306e+00 11.0417 7.314e+00 11.0532 7.324e+00 11.0648 7.338e+00 11.0764 7.354e+00 11.088 7.374e+00 11.0995 7.397e+00 11.1111 7.422e+00 11.1227 7.451e+00 11.1343 7.481e+00 11.1458 7.514e+00 11.1574 7.548e+00 11.169 7.584e+00 11.1806 7.620e+00 11.1921 7.657e+00 11.2037 7.693e+00 11.2153 7.728e+00 11.2269 7.762e+00 11.2384 7.794e+00 11.25 7.824e+00 11.2616 7.850e+00 11.2731 7.873e+00 11.2847 7.892e+00 11.2963 7.907e+00 11.3079 7.918e+00 11.3194 7.924e+00 11.331 7.926e+00 11.3426 7.923e+00 11.3542 7.916e+00 11.3657 7.905e+00 11.3773 7.890e+00 11.3889 7.872e+00 11.4005 7.851e+00 11.412 7.828e+00 11.4236 7.804e+00 11.4352 7.778e+00 11.4468 7.753e+00 11.4583 7.728e+00 11.4699 7.705e+00 11.4815 7.684e+00 11.4931 7.666e+00 11.5046 7.651e+00 11.5162 7.641e+00 11.5278 7.635e+00 11.5394 7.634e+00 11.5509 7.639e+00 11.5625 7.649e+00 11.5741 7.665e+00 11.5856 7.687e+00 11.5972 7.714e+00 11.6088 7.747e+00 11.6204 7.784e+00 11.6319 7.826e+00 11.6435 7.871e+00 11.6551 7.920e+00 11.6667 7.970e+00 11.6782 8.022e+00 11.6898 8.074e+00 11.7014 8.126e+00 11.713 8.177e+00 11.7245 8.225e+00 11.7361 8.270e+00 11.7477 8.311e+00 11.7593 8.347e+00 11.7708 8.379e+00 11.7824 8.404e+00 11.794 8.424e+00 11.8056 8.437e+00 11.8171 8.444e+00 11.8287 8.445e+00 11.8403 8.440e+00 11.8519 8.429e+00 11.8634 8.413e+00 11.875 8.392e+00 11.8866 8.367e+00 11.8981 8.339e+00 11.9097 8.308e+00 11.9213 8.277e+00 11.9329 8.245e+00 11.9444 8.214e+00 11.956 8.184e+00 11.9676 8.157e+00 11.9792 8.133e+00 11.9907 8.113e+00 12.0023 8.098e+00 12.0139 8.088e+00 12.0255 8.084e+00 12.037 8.087e+00 12.0486 8.095e+00 12.0602 8.109e+00 12.0718 8.129e+00 12.0833 8.155e+00 12.0949 8.187e+00 12.1065 8.222e+00 12.1181 8.262e+00 12.1296 8.305e+00 12.1412 8.349e+00 12.1528 8.396e+00 12.1644 8.442e+00 12.1759 8.488e+00 12.1875 8.533e+00 12.1991 8.575e+00 12.2106 8.614e+00 12.2222 8.649e+00 12.2338 8.680e+00 12.2454 8.706e+00 12.2569 8.726e+00 12.2685 8.741e+00 12.2801 8.751e+00 12.2917 8.755e+00 12.3032 8.754e+00 12.3148 8.749e+00 12.3264 8.739e+00 12.338 8.726e+00 12.3495 8.710e+00 12.3611 8.692e+00 12.3727 8.673e+00 12.3843 8.653e+00 12.3958 8.635e+00 12.4074 8.618e+00 12.419 8.603e+00 12.4306 8.592e+00 12.4421 8.584e+00 12.4537 8.581e+00 12.4653 8.583e+00 12.4769 8.589e+00 12.4884 8.601e+00 12.5 8.619e+00 12.5116 8.641e+00 12.5231 8.668e+00 12.5347 8.699e+00 12.5463 8.734e+00 12.5579 8.771e+00 12.5694 8.811e+00 12.581 8.851e+00 12.5926 8.892e+00 12.6042 8.932e+00 12.6157 8.971e+00 12.6273 9.006e+00 12.6389 9.038e+00 12.6505 9.066e+00 12.662 9.089e+00 12.6736 9.106e+00 12.6852 9.118e+00 12.6968 9.123e+00 12.7083 9.122e+00 12.7199 9.115e+00 12.7315 9.103e+00 12.7431 9.085e+00 12.7546 9.062e+00 12.7662 9.036e+00 12.7778 9.006e+00 12.7894 8.975e+00 12.8009 8.943e+00 12.8125 8.911e+00 12.8241 8.880e+00 12.8356 8.853e+00 12.8472 8.828e+00 12.8588 8.809e+00 12.8704 8.795e+00 12.8819 8.788e+00 12.8935 8.788e+00 12.9051 8.796e+00 12.9167 8.812e+00 12.9282 8.835e+00 12.9398 8.867e+00 12.9514 8.906e+00 12.963 8.952e+00 12.9745 9.005e+00 12.9861 9.063e+00 12.9977 9.126e+00 13.0093 9.191e+00 13.0208 9.259e+00 13.0324 9.328e+00 13.044 9.395e+00 13.0556 9.461e+00 13.0671 9.522e+00 13.0787 9.579e+00 13.0903 9.630e+00 13.1019 9.674e+00 13.1134 9.709e+00 13.125 9.735e+00 13.1366 9.752e+00 13.1481 9.760e+00 13.1597 9.757e+00 13.1713 9.744e+00 13.1829 9.723e+00 13.1944 9.692e+00 13.206 9.653e+00 13.2176 9.608e+00 13.2292 9.556e+00 13.2407 9.500e+00 13.2523 9.441e+00 13.2639 9.381e+00 13.2755 9.320e+00 13.287 9.261e+00 13.2986 9.206e+00 13.3102 9.155e+00 13.3218 9.110e+00 13.3333 9.073e+00 13.3449 9.045e+00 13.3565 9.026e+00 13.3681 9.017e+00 13.3796 9.018e+00 13.3912 9.031e+00 13.4028 9.055e+00 13.4144 9.089e+00 13.4259 9.134e+00 13.4375 9.188e+00 13.4491 9.251e+00 13.4606 9.321e+00 13.4722 9.398e+00 13.4838 9.480e+00 13.4954 9.565e+00 13.5069 9.651e+00 13.5185 9.738e+00 13.5301 9.823e+00 13.5417 9.905e+00 13.5532 9.983e+00 13.5648 1.005e+01 13.5764 1.012e+01 13.588 1.017e+01 13.5995 1.022e+01 13.6111 1.026e+01 13.6227 1.028e+01 13.6343 1.030e+01 13.6458 1.030e+01 13.6574 1.029e+01 13.669 1.028e+01 13.6806 1.025e+01 13.6921 1.021e+01 13.7037 1.017e+01 13.7153 1.012e+01 13.7269 1.006e+01 13.7384 1.000e+01 13.75 9.936e+00 13.7616 9.870e+00 13.7731 9.805e+00 13.7847 9.742e+00 13.7963 9.681e+00 13.8079 9.625e+00 13.8194 9.575e+00 13.831 9.531e+00 13.8426 9.495e+00 13.8542 9.468e+00 13.8657 9.450e+00 13.8773 9.442e+00 13.8889 9.444e+00 13.9005 9.456e+00 13.912 9.477e+00 13.9236 9.509e+00 13.9352 9.549e+00 13.9468 9.598e+00 13.9583 9.655e+00 13.9699 9.718e+00 13.9815 9.787e+00 13.9931 9.861e+00 14.0046 9.938e+00 14.0162 1.002e+01 14.0278 1.010e+01 14.0394 1.018e+01 14.0509 1.026e+01 14.0625 1.033e+01 14.0741 1.040e+01 14.0856 1.047e+01 14.0972 1.053e+01 14.1088 1.059e+01 14.1204 1.063e+01 14.1319 1.067e+01 14.1435 1.070e+01 14.1551 1.073e+01 14.1667 1.074e+01 14.1782 1.074e+01 14.1898 1.074e+01 14.2014 1.073e+01 14.213 1.071e+01 14.2245 1.068e+01 14.2361 1.064e+01 14.2477 1.060e+01 14.2593 1.056e+01 14.2708 1.051e+01 14.2824 1.046e+01 14.294 1.040e+01 14.3056 1.034e+01 14.3171 1.029e+01 14.3287 1.023e+01 14.3403 1.018e+01 14.3519 1.013e+01 14.3634 1.008e+01 14.375 1.004e+01 14.3866 1.000e+01 14.3981 9.974e+00 14.4097 9.953e+00 14.4213 9.939e+00 14.4329 9.933e+00 14.4444 9.935e+00 14.456 9.946e+00 14.4676 9.966e+00 14.4792 9.994e+00 14.4907 1.003e+01 14.5023 1.007e+01 14.5139 1.013e+01 14.5255 1.018e+01 14.537 1.025e+01 14.5486 1.032e+01 14.5602 1.039e+01 14.5718 1.047e+01 14.5833 1.055e+01 14.5949 1.063e+01 14.6065 1.071e+01 14.6181 1.079e+01 14.6296 1.086e+01 14.6412 1.094e+01 14.6528 1.100e+01 14.6644 1.107e+01 14.6759 1.112e+01 14.6875 1.117e+01 14.6991 1.122e+01 14.7106 1.125e+01 14.7222 1.128e+01 14.7338 1.129e+01 14.7454 1.130e+01 14.7569 1.129e+01 14.7685 1.128e+01 14.7801 1.126e+01 14.7917 1.123e+01 14.8032 1.119e+01 14.8148 1.115e+01 14.8264 1.110e+01 14.838 1.104e+01 14.8495 1.098e+01 14.8611 1.092e+01 14.8727 1.085e+01 14.8843 1.079e+01 14.8958 1.072e+01 14.9074 1.066e+01 14.919 1.060e+01 14.9306 1.054e+01 14.9421 1.049e+01 14.9537 1.044e+01 14.9653 1.041e+01 14.9769 1.038e+01 14.9884 1.036e+01 15 1.035e+01 15.0116 1.035e+01 15.0231 1.036e+01 15.0347 1.038e+01 15.0463 1.040e+01 15.0579 1.044e+01 15.0694 1.049e+01 15.081 1.055e+01 15.0926 1.061e+01 15.1042 1.068e+01 15.1157 1.076e+01 15.1273 1.084e+01 15.1389 1.093e+01 15.1505 1.102e+01 15.162 1.110e+01 15.1736 1.119e+01 15.1852 1.128e+01 15.1968 1.137e+01 15.2083 1.145e+01 15.2199 1.152e+01 15.2315 1.159e+01 15.2431 1.165e+01 15.2546 1.171e+01 15.2662 1.175e+01 15.2778 1.179e+01 15.2894 1.182e+01 15.3009 1.184e+01 15.3125 1.184e+01 15.3241 1.184e+01 15.3356 1.183e+01 15.3472 1.181e+01 15.3588 1.177e+01 15.3704 1.174e+01 15.3819 1.169e+01 15.3935 1.164e+01 15.4051 1.158e+01 15.4167 1.152e+01 15.4282 1.145e+01 15.4398 1.139e+01 15.4514 1.132e+01 15.463 1.125e+01 15.4745 1.119e+01 15.4861 1.113e+01 15.4977 1.107e+01 15.5093 1.102e+01 15.5208 1.097e+01 15.5324 1.093e+01 15.544 1.090e+01 15.5556 1.088e+01 15.5671 1.086e+01 15.5787 1.086e+01 15.5903 1.086e+01 15.6019 1.087e+01 15.6134 1.090e+01 15.625 1.093e+01 15.6366 1.097e+01 15.6481 1.102e+01 15.6597 1.107e+01 15.6713 1.113e+01 15.6829 1.120e+01 15.6944 1.128e+01 15.706 1.135e+01 15.7176 1.143e+01 15.7292 1.151e+01 15.7407 1.160e+01 15.7523 1.168e+01 15.7639 1.176e+01 15.7755 1.183e+01 15.787 1.191e+01 15.7986 1.198e+01 15.8102 1.204e+01 15.8218 1.210e+01 15.8333 1.215e+01 15.8449 1.219e+01 15.8565 1.222e+01 15.8681 1.225e+01 15.8796 1.227e+01 15.8912 1.228e+01 15.9028 1.228e+01 15.9144 1.227e+01 15.9259 1.226e+01 15.9375 1.224e+01 15.9491 1.221e+01 15.9606 1.217e+01 15.9722 1.214e+01 15.9838 1.209e+01 15.9954 1.204e+01 16.0069 1.199e+01 16.0185 1.194e+01 16.0301 1.189e+01 16.0417 1.183e+01 16.0532 1.178e+01 16.0648 1.173e+01 16.0764 1.168e+01 16.088 1.164e+01 16.0995 1.160e+01 16.1111 1.156e+01 16.1227 1.154e+01 16.1343 1.151e+01 16.1458 1.149e+01 16.1574 1.148e+01 16.169 1.148e+01 16.1806 1.149e+01 16.1921 1.150e+01 16.2037 1.151e+01 16.2153 1.154e+01 16.2269 1.157e+01 16.2384 1.160e+01 16.25 1.165e+01 16.2616 1.169e+01 16.2731 1.175e+01 16.2847 1.180e+01 16.2963 1.186e+01 16.3079 1.192e+01 16.3194 1.198e+01 16.331 1.205e+01 16.3426 1.211e+01 16.3542 1.217e+01 16.3657 1.224e+01 16.3773 1.229e+01 16.3889 1.235e+01 16.4005 1.241e+01 16.412 1.246e+01 16.4236 1.250e+01 16.4352 1.255e+01 16.4468 1.258e+01 16.4583 1.261e+01 16.4699 1.264e+01 16.4815 1.266e+01 16.4931 1.267e+01 16.5046 1.268e+01 16.5162 1.269e+01 16.5278 1.269e+01 16.5394 1.268e+01 16.5509 1.267e+01 16.5625 1.265e+01 16.5741 1.263e+01 16.5856 1.260e+01 16.5972 1.257e+01 16.6088 1.254e+01 16.6204 1.251e+01 16.6319 1.247e+01 16.6435 1.243e+01 16.6551 1.240e+01 16.6667 1.236e+01 16.6782 1.232e+01 16.6898 1.228e+01 16.7014 1.225e+01 16.713 1.222e+01 16.7245 1.219e+01 16.7361 1.216e+01 16.7477 1.214e+01 16.7593 1.212e+01 16.7708 1.211e+01 16.7824 1.210e+01 16.794 1.210e+01 16.8056 1.210e+01 16.8171 1.211e+01 16.8287 1.212e+01 16.8403 1.214e+01 16.8519 1.216e+01 16.8634 1.219e+01 16.875 1.223e+01 16.8866 1.227e+01 16.8981 1.231e+01 16.9097 1.236e+01 16.9213 1.241e+01 16.9329 1.247e+01 16.9444 1.253e+01 16.956 1.258e+01 16.9676 1.264e+01 16.9792 1.271e+01 16.9907 1.277e+01 17.0023 1.282e+01 17.0139 1.288e+01 17.0255 1.294e+01 17.037 1.299e+01 17.0486 1.304e+01 17.0602 1.308e+01 17.0718 1.312e+01 17.0833 1.316e+01 17.0949 1.318e+01 17.1065 1.321e+01 17.1181 1.322e+01 17.1296 1.323e+01 17.1412 1.323e+01 17.1528 1.323e+01 17.1644 1.322e+01 17.1759 1.320e+01 17.1875 1.318e+01 17.1991 1.315e+01 17.2106 1.312e+01 17.2222 1.308e+01 17.2338 1.304e+01 17.2454 1.300e+01 17.2569 1.295e+01 17.2685 1.291e+01 17.2801 1.286e+01 17.2917 1.281e+01 17.3032 1.277e+01 17.3148 1.273e+01 17.3264 1.269e+01 17.338 1.266e+01 17.3495 1.263e+01 17.3611 1.261e+01 17.3727 1.259e+01 17.3843 1.258e+01 17.3958 1.258e+01 17.4074 1.259e+01 17.419 1.260e+01 17.4306 1.262e+01 17.4421 1.265e+01 17.4537 1.268e+01 17.4653 1.272e+01 17.4769 1.277e+01 17.4884 1.283e+01 17.5 1.288e+01 17.5116 1.295e+01 17.5231 1.301e+01 17.5347 1.308e+01 17.5463 1.315e+01 17.5579 1.321e+01 17.5694 1.328e+01 17.581 1.334e+01 17.5926 1.340e+01 17.6042 1.346e+01 17.6157 1.351e+01 17.6273 1.355e+01 17.6389 1.359e+01 17.6505 1.362e+01 17.662 1.365e+01 17.6736 1.366e+01 17.6852 1.367e+01 17.6968 1.367e+01 17.7083 1.366e+01 17.7199 1.365e+01 17.7315 1.363e+01 17.7431 1.360e+01 17.7546 1.357e+01 17.7662 1.353e+01 17.7778 1.349e+01 17.7894 1.345e+01 17.8009 1.341e+01 17.8125 1.337e+01 17.8241 1.332e+01 17.8356 1.329e+01 17.8472 1.325e+01 17.8588 1.322e+01 17.8704 1.319e+01 17.8819 1.317e+01 17.8935 1.316e+01 17.9051 1.315e+01 17.9167 1.315e+01 17.9282 1.316e+01 17.9398 1.317e+01 17.9514 1.320e+01 17.963 1.323e+01 17.9745 1.326e+01 17.9861 1.331e+01 17.9977 1.335e+01 18.0093 1.341e+01 18.0208 1.346e+01 18.0324 1.352e+01 18.044 1.358e+01 18.0556 1.363e+01 18.0671 1.369e+01 18.0787 1.374e+01 18.0903 1.379e+01 18.1019 1.384e+01 18.1134 1.387e+01 18.125 1.391e+01 18.1366 1.393e+01 18.1481 1.395e+01 18.1597 1.396e+01 18.1713 1.396e+01 18.1829 1.395e+01 18.1944 1.394e+01 18.206 1.392e+01 18.2176 1.389e+01 18.2292 1.386e+01 18.2407 1.383e+01 18.2523 1.379e+01 18.2639 1.374e+01 18.2755 1.370e+01 18.287 1.366e+01 gerris-snapshot-131206/test/geo/geo.gfs0000644000175100017510000001165412250371171014675 00000000000000# Title: Geostrophic adjustment # # Description: # # We consider the geostrophic adjustment problem studied by # Dupont {\cite{dupont}} and Le Roux et al {\cite{leroux98}}. A Gaussian bump # \[ \eta ( x, y ) = \eta_0 e^{^{- \frac{x^2 + y^2}{R^2}}} \] # is initialised in a 1000$\times$1000 km, 1000 m deep square basin. A reduced # gravity $g = 0.01$ m/s$^2$ is used to approximate a 10 m-thick stratified surface # layer. On an $f$-plane the corresponding geostrophic velocities are given by # \begin{eqnarray*} # u ( x, y ) & = & \frac{2 g \eta_0 y}{f_0 R^2} e^{- \frac{x^2 + y^2}{R^2}},\\ # v ( x, y ) & = & - \frac{2 g \eta_0 x}{f_0 R^2} e^{- \frac{x^2 + y^2}{R^2}}, # \end{eqnarray*} # where $f_0$ is the Coriolis parameter. Following Dupont we set $f_0 = 1.0285 # \times 10^{- 4}$ s$^{- 1}$, $R = 100$ km, $\eta_0 = 599.5$ m which gives a # maximum geostrophic velocity of 0.5 m/s. # # In the context of the linearised shallow-water equations, the geostrophic # balance is an exact solution which should be preserved by the numerical # method. In practice, this would require an exact numerical balance between # terms computed very differently: the pressure gradient and the Coriolis terms # in the momentum equation. If this numerical balance is not exact, the # numerical solution will adjust toward numerical equilibrium through the # emission of gravity-wave noise which should not affect the stability of the # solution. This problem is thus a good test of both the overall accuracy of the # numerical scheme and its stability properties when dealing with # inertia--gravity waves. We note in particular that a standard A-grid # discretisation would develop a strong computational-mode instability in this # case. Also, as studied by Leroux et al, an inappropriate choice of # finite-element basis functions will result in growing gravity-wave noise. # # \begin{figure}[htbp] # \caption{\label{geo-error}Evolution of the maximum error on the surface height for the # geostrophic adjustment problem.} # \begin{center} # \includegraphics[width=\hsize]{geo_error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{geo-error1}Evolution of the surface-height error field. (a) $t =$1.157 # days, (b) $t = 2.315$ days, (c) $t =$3.472 days, (d) $t =$4.630 days, (e) $t # =$17.361 days.} # \begin{center} # \begin{tabular}{ccccc} # \includegraphics[width=0.18\hsize]{error-100.eps} & # \includegraphics[width=0.18\hsize]{error-200.eps} & # \includegraphics[width=0.18\hsize]{error-300.eps} & # \includegraphics[width=0.18\hsize]{error-400.eps} & # \includegraphics[width=0.18\hsize]{error-1500.eps} \\ # (a) & (b) & (c) & (d) & (e) # \end{tabular} # \end{center} # \end{figure} # # Figures \ref{geo-error} and \ref{geo-error1} summarise the results obtained # when running the geostrophic adjustment problem on a $64 \times 64$ uniform # grid with a timestep $\Delta t = 1000$ s. The maximum error on the height # field (Figure \ref{geo-error}) is small even after 18 days. After a strong # initial transient corresponding to the emission of gravity waves, the error # reaches a minimum at day 3 and then slowly grows with time with modulations # due to the reflexions of the initial gravity waves on the domain boundaries. # As illustrated on figure \ref{geo-error1}, this growth is not due to any # instability of the solution but to the slow decrease of the maximum amplitude # of the Gaussian bump due to numerical energy dissipation. # # Author: St\'ephane Popinet # Command: sh geo.sh geo.gfs # Version: 100323 # Required files: geo.sh geo.gfv e.ref # Running time: 3 minutes # Generated files: geo_error.eps error-100.eps error-200.eps error-300.eps error-400.eps error-1500.eps # 1 0 GfsOcean GfsBox GfsGEdge {} { Time { iend = 1580 dtmax = 1000 } Refine 6 Global { #define L0 1000e3 #define H0 1000 #define G 0.01 #define R0 100e3 #define ETA0 599.5 #define F0 1.0285e-4 } PhysicalParams { L = L0 g = G } Solid (z + H0) Init {} { # e-folding radius = 100 km # umax = 0.5 m/s = sqrt(200)*exp(-1/2) P = ETA0*exp (-(x*x + y*y)/(R0*R0))*G U = 2.*G*ETA0*y/(F0*R0*R0)*exp (-(x*x + y*y)/(R0*R0)) V = - 2.*G*ETA0*x/(F0*R0*R0)*exp (-(x*x + y*y)/(R0*R0)) } SourceCoriolis F0 AdvectionParams { scheme = none } ApproxProjectionParams { tolerance = 1e-6 } OutputErrorNorm { istep = 1 } { awk '{print $3/86400. " " $9; fflush (stdout); }' > e } { v = P/G } { s = ETA0*exp (-(x*x + y*y)/(R0*R0)) unbiased = 1 v = E } GModule gfsview OutputView { istart = 100 iend = 500 istep = 100 } error-%ld.eps { format = EPS } geo.gfv OutputView { istart = 1500 } error-%ld.eps { format = EPS } geo.gfv EventScript { start = end } { cat < energy } { v = (Velocity2 + P*P/9.4534734306584e-4) } } GfsBox { front = Boundary } gerris-snapshot-131206/test/geo/beta/c0000644000175100017510000000027412250371171014476 000000000000000 1 1.8303 0.99984162 3.6606 0.99968176 5.491 0.99960331 7.3213 0.99952338 9.1516 0.99952338 10.9819 0.99952338 12.8071 0.99952338 14.6374 0.99952338 16.4677 0.99952338 18.298 0.99952338 gerris-snapshot-131206/test/geo/beta/pzm0000644000175100017510000000030012250371171015050 000000000000000 1 1.73713 0.9877397 3.47425 0.97858483 5.2062 0.96871469 6.94333 0.95916146 8.68046 0.94977113 10.4176 0.94053629 12.1495 0.93098602 13.8868 0.92207106 15.6239 0.91267776 17.361 0.90352585 gerris-snapshot-131206/test/geo/beta/energy.ref0000644000175100017510000000025612250371171016320 000000000000000 1 1.73611 0.997596 3.47222 0.995221 5.20833 0.992868 6.94444 0.990541 8.68056 0.988236 10.4167 0.985956 12.1528 0.983694 13.8889 0.981457 15.6251 0.979237 17.3611 0.977037 gerris-snapshot-131206/test/geo/beta/beta.sh0000644000175100017510000000177412250371171015606 00000000000000if test x$donotrun != xtrue; then if gerris3D $1; then : else exit 1 fi mv -f energy energy-nonlinear if sed 's/Refine 6/Refine 6\nAdvectionParams {scheme = none}/' < $1 |\ gerris3D -; then : else exit 1 fi fi if cat < 1. or \ Curve('energy-nonlinear',1,2).max() > 1.: exit(1) if (Curve('energy.ref',1,2) - Curve('energy',1,2)).max() > 1e-2 or \ (Curve('energy-nonlinear.ref',1,2) - Curve('energy-nonlinear',1,2)).max() > 1e-2: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/geo/beta/llw0000644000175100017510000000030012250371171015040 000000000000000 1 1.73713 0.97962145 3.47425 0.95892304 5.2062 0.93830607 6.94333 0.91800601 8.68046 0.89802582 10.4176 0.87836403 12.1495 0.85894214 13.8868 0.83983716 15.6239 0.8208936 17.361 0.80226547 gerris-snapshot-131206/test/geo/beta/lls0000644000175100017510000000031012250371171015035 000000000000000 0.9999599 1.73713 0.99525031 3.47425 0.99109916 5.2062 0.98670889 6.94333 0.98072202 8.68046 0.9740178 10.4176 0.96779032 12.1495 0.96212426 13.8868 0.95542004 15.6239 0.94943317 17.361 0.94392602 gerris-snapshot-131206/test/geo/geo.sh0000644000175100017510000000030712250371171014521 00000000000000# catch errors set -e if test x$donotrun != xtrue; then gerris3D $1 fi python < 1e-3: exit(1) EOF gerris-snapshot-131206/test/geo/river/0000755000175100017510000000000012250371673014631 500000000000000gerris-snapshot-131206/test/geo/river/e.ref0000644000175100017510000006726312250371171015502 000000000000000 2.274e-13 0.0115741 4.429e-01 0.0231481 1.311e+00 0.0347222 2.571e+00 0.0462963 4.181e+00 0.0578704 6.086e+00 0.0694444 8.226e+00 0.0810185 1.053e+01 0.0925926 1.295e+01 0.104167 1.539e+01 0.115741 1.782e+01 0.127315 2.015e+01 0.138889 2.235e+01 0.150463 2.437e+01 0.162037 2.618e+01 0.173611 2.773e+01 0.185185 2.903e+01 0.196759 3.005e+01 0.208333 3.079e+01 0.219907 3.127e+01 0.231481 3.148e+01 0.243056 3.144e+01 0.25463 3.118e+01 0.266204 3.072e+01 0.277778 3.008e+01 0.289352 2.930e+01 0.300926 2.840e+01 0.3125 2.741e+01 0.324074 2.637e+01 0.335648 2.529e+01 0.347222 2.421e+01 0.358796 2.315e+01 0.37037 2.213e+01 0.381944 2.116e+01 0.393519 2.027e+01 0.405093 1.946e+01 0.416667 1.874e+01 0.428241 1.813e+01 0.439815 1.763e+01 0.451389 1.723e+01 0.462963 1.694e+01 0.474537 1.675e+01 0.486111 1.667e+01 0.497685 1.668e+01 0.509259 1.679e+01 0.520833 1.698e+01 0.532407 1.725e+01 0.543981 1.759e+01 0.555556 1.798e+01 0.56713 1.843e+01 0.578704 1.892e+01 0.590278 1.945e+01 0.601852 2.000e+01 0.613426 2.057e+01 0.625 2.115e+01 0.636574 2.173e+01 0.648148 2.232e+01 0.659722 2.289e+01 0.671296 2.345e+01 0.68287 2.399e+01 0.694444 2.451e+01 0.706019 2.500e+01 0.717593 2.546e+01 0.729167 2.589e+01 0.740741 2.628e+01 0.752315 2.664e+01 0.763889 2.696e+01 0.775463 2.725e+01 0.787037 2.750e+01 0.798611 2.771e+01 0.810185 2.789e+01 0.821759 2.803e+01 0.833333 2.814e+01 0.844907 2.822e+01 0.856481 2.827e+01 0.868056 2.829e+01 0.87963 2.828e+01 0.891204 2.826e+01 0.902778 2.821e+01 0.914352 2.814e+01 0.925926 2.807e+01 0.9375 2.798e+01 0.949074 2.788e+01 0.960648 2.777e+01 0.972222 2.766e+01 0.983796 2.755e+01 0.99537 2.744e+01 1.00694 2.734e+01 1.01852 2.724e+01 1.03009 2.715e+01 1.04167 2.707e+01 1.05324 2.700e+01 1.06481 2.694e+01 1.07639 2.690e+01 1.08796 2.688e+01 1.09954 2.687e+01 1.11111 2.688e+01 1.12269 2.691e+01 1.13426 2.695e+01 1.14583 2.701e+01 1.15741 2.709e+01 1.16898 2.719e+01 1.18056 2.731e+01 1.19213 2.744e+01 1.2037 2.758e+01 1.21528 2.774e+01 1.22685 2.792e+01 1.23843 2.810e+01 1.25 2.830e+01 1.26157 2.850e+01 1.27315 2.872e+01 1.28472 2.894e+01 1.2963 2.916e+01 1.30787 2.939e+01 1.31944 2.962e+01 1.33102 2.985e+01 1.34259 3.008e+01 1.35417 3.031e+01 1.36574 3.053e+01 1.37731 3.075e+01 1.38889 3.096e+01 1.40046 3.117e+01 1.41204 3.136e+01 1.42361 3.155e+01 1.43519 3.173e+01 1.44676 3.190e+01 1.45833 3.206e+01 1.46991 3.221e+01 1.48148 3.235e+01 1.49306 3.247e+01 1.50463 3.259e+01 1.5162 3.269e+01 1.52778 3.279e+01 1.53935 3.287e+01 1.55093 3.295e+01 1.5625 3.301e+01 1.57407 3.307e+01 1.58565 3.312e+01 1.59722 3.317e+01 1.6088 3.321e+01 1.62037 3.324e+01 1.63194 3.327e+01 1.64352 3.330e+01 1.65509 3.332e+01 1.66667 3.334e+01 1.67824 3.337e+01 1.68981 3.339e+01 1.70139 3.342e+01 1.71296 3.344e+01 1.72454 3.348e+01 1.73611 3.351e+01 1.74769 3.355e+01 1.75926 3.359e+01 1.77083 3.364e+01 1.78241 3.370e+01 1.79398 3.376e+01 1.80556 3.383e+01 1.81713 3.391e+01 1.8287 3.399e+01 1.84028 3.408e+01 1.85185 3.417e+01 1.86343 3.428e+01 1.875 3.439e+01 1.88657 3.450e+01 1.89815 3.462e+01 1.90972 3.475e+01 1.9213 3.488e+01 1.93287 3.502e+01 1.94444 3.516e+01 1.95602 3.530e+01 1.96759 3.545e+01 1.97917 3.560e+01 1.99074 3.575e+01 2.00231 3.590e+01 2.01389 3.606e+01 2.02546 3.621e+01 2.03704 3.636e+01 2.04861 3.651e+01 2.06019 3.666e+01 2.07176 3.680e+01 2.08333 3.695e+01 2.09491 3.709e+01 2.10648 3.722e+01 2.11806 3.736e+01 2.12963 3.748e+01 2.1412 3.761e+01 2.15278 3.773e+01 2.16435 3.784e+01 2.17593 3.795e+01 2.1875 3.805e+01 2.19907 3.815e+01 2.21065 3.825e+01 2.22222 3.834e+01 2.2338 3.843e+01 2.24537 3.851e+01 2.25694 3.859e+01 2.26852 3.867e+01 2.28009 3.874e+01 2.29167 3.881e+01 2.30324 3.888e+01 2.31481 3.894e+01 2.32639 3.901e+01 2.33796 3.907e+01 2.34954 3.913e+01 2.36111 3.919e+01 2.37269 3.925e+01 2.38426 3.932e+01 2.39583 3.938e+01 2.40741 3.944e+01 2.41898 3.951e+01 2.43056 3.958e+01 2.44213 3.965e+01 2.4537 3.972e+01 2.46528 3.980e+01 2.47685 3.988e+01 2.48843 3.996e+01 2.5 4.004e+01 2.51157 4.013e+01 2.52315 4.022e+01 2.53472 4.031e+01 2.5463 4.041e+01 2.55787 4.051e+01 2.56944 4.061e+01 2.58102 4.071e+01 2.59259 4.082e+01 2.60417 4.093e+01 2.61574 4.104e+01 2.62731 4.116e+01 2.63889 4.127e+01 2.65046 4.139e+01 2.66204 4.151e+01 2.67361 4.163e+01 2.68519 4.175e+01 2.69676 4.187e+01 2.70833 4.198e+01 2.71991 4.210e+01 2.73148 4.222e+01 2.74306 4.234e+01 2.75463 4.246e+01 2.7662 4.258e+01 2.77778 4.269e+01 2.78935 4.280e+01 2.80093 4.291e+01 2.8125 4.302e+01 2.82407 4.313e+01 2.83565 4.323e+01 2.84722 4.334e+01 2.8588 4.344e+01 2.87037 4.354e+01 2.88194 4.363e+01 2.89352 4.372e+01 2.90509 4.382e+01 2.91667 4.391e+01 2.92824 4.399e+01 2.93981 4.408e+01 2.95139 4.416e+01 2.96296 4.424e+01 2.97454 4.432e+01 2.98611 4.440e+01 2.99769 4.448e+01 3.00926 4.456e+01 3.02083 4.463e+01 3.03241 4.471e+01 3.04398 4.478e+01 3.05556 4.486e+01 3.06713 4.493e+01 3.0787 4.501e+01 3.09028 4.509e+01 3.10185 4.517e+01 3.11343 4.524e+01 3.125 4.532e+01 3.13657 4.540e+01 3.14815 4.549e+01 3.15972 4.557e+01 3.1713 4.566e+01 3.18287 4.574e+01 3.19444 4.583e+01 3.20602 4.592e+01 3.21759 4.601e+01 3.22917 4.610e+01 3.24074 4.620e+01 3.25231 4.629e+01 3.26389 4.639e+01 3.27546 4.649e+01 3.28704 4.659e+01 3.29861 4.668e+01 3.31019 4.678e+01 3.32176 4.688e+01 3.33333 4.698e+01 3.34491 4.708e+01 3.35648 4.718e+01 3.36806 4.729e+01 3.37963 4.739e+01 3.3912 4.749e+01 3.40278 4.759e+01 3.41435 4.768e+01 3.42593 4.778e+01 3.4375 4.788e+01 3.44907 4.798e+01 3.46065 4.808e+01 3.47222 4.818e+01 3.4838 4.827e+01 3.49537 4.837e+01 3.50694 4.847e+01 3.51852 4.856e+01 3.53009 4.866e+01 3.54167 4.875e+01 3.55324 4.885e+01 3.56481 4.894e+01 3.57639 4.904e+01 3.58796 4.913e+01 3.59954 4.923e+01 3.61111 4.932e+01 3.62269 4.941e+01 3.63426 4.951e+01 3.64583 4.960e+01 3.65741 4.969e+01 3.66898 4.978e+01 3.68056 4.986e+01 3.69213 4.995e+01 3.7037 5.004e+01 3.71528 5.012e+01 3.72685 5.020e+01 3.73843 5.028e+01 3.75 5.036e+01 3.76157 5.044e+01 3.77315 5.052e+01 3.78472 5.059e+01 3.7963 5.067e+01 3.80787 5.074e+01 3.81944 5.081e+01 3.83102 5.088e+01 3.84259 5.095e+01 3.85417 5.103e+01 3.86574 5.110e+01 3.87731 5.117e+01 3.88889 5.125e+01 3.90046 5.132e+01 3.91204 5.140e+01 3.92361 5.148e+01 3.93519 5.156e+01 3.94676 5.165e+01 3.95833 5.174e+01 3.96991 5.183e+01 3.98148 5.192e+01 3.99306 5.202e+01 4.00463 5.212e+01 4.0162 5.222e+01 4.02778 5.232e+01 4.03935 5.243e+01 4.05093 5.254e+01 4.0625 5.265e+01 4.07407 5.276e+01 4.08565 5.287e+01 4.09722 5.298e+01 4.1088 5.309e+01 4.12037 5.320e+01 4.13194 5.330e+01 4.14352 5.341e+01 4.15509 5.351e+01 4.16667 5.361e+01 4.17824 5.371e+01 4.18981 5.380e+01 4.20139 5.389e+01 4.21296 5.397e+01 4.22454 5.406e+01 4.23611 5.414e+01 4.24769 5.421e+01 4.25926 5.428e+01 4.27083 5.435e+01 4.28241 5.442e+01 4.29398 5.449e+01 4.30556 5.455e+01 4.31713 5.461e+01 4.3287 5.467e+01 4.34028 5.474e+01 4.35185 5.480e+01 4.36343 5.486e+01 4.375 5.493e+01 4.38657 5.499e+01 4.39815 5.506e+01 4.40972 5.514e+01 4.4213 5.521e+01 4.43287 5.529e+01 4.44444 5.537e+01 4.45602 5.546e+01 4.46759 5.555e+01 4.47917 5.564e+01 4.49074 5.574e+01 4.50231 5.584e+01 4.51389 5.594e+01 4.52546 5.604e+01 4.53704 5.615e+01 4.54861 5.626e+01 4.56019 5.636e+01 4.57176 5.647e+01 4.58333 5.658e+01 4.59491 5.669e+01 4.60648 5.679e+01 4.61806 5.690e+01 4.62963 5.700e+01 4.6412 5.709e+01 4.65278 5.719e+01 4.66435 5.728e+01 4.67593 5.737e+01 4.6875 5.746e+01 4.69907 5.754e+01 4.71065 5.762e+01 4.72222 5.769e+01 4.7338 5.776e+01 4.74537 5.783e+01 4.75694 5.790e+01 4.76852 5.796e+01 4.78009 5.802e+01 4.79167 5.809e+01 4.80324 5.815e+01 4.81481 5.821e+01 4.82639 5.827e+01 4.83796 5.833e+01 4.84954 5.839e+01 4.86111 5.846e+01 4.87269 5.852e+01 4.88426 5.859e+01 4.89583 5.866e+01 4.90741 5.874e+01 4.91898 5.882e+01 4.93056 5.890e+01 4.94213 5.898e+01 4.9537 5.907e+01 4.96528 5.916e+01 4.97685 5.925e+01 4.98843 5.935e+01 5 5.945e+01 5.01157 5.955e+01 5.02315 5.966e+01 5.03472 5.976e+01 5.0463 5.987e+01 5.05787 5.997e+01 5.06944 6.008e+01 5.08102 6.018e+01 5.09259 6.029e+01 5.10417 6.039e+01 5.11574 6.049e+01 5.12731 6.059e+01 5.13889 6.069e+01 5.15046 6.078e+01 5.16204 6.087e+01 5.17361 6.096e+01 5.18519 6.105e+01 5.19676 6.113e+01 5.20833 6.120e+01 5.21991 6.128e+01 5.23148 6.135e+01 5.24306 6.142e+01 5.25463 6.148e+01 5.2662 6.155e+01 5.27778 6.161e+01 5.28935 6.167e+01 5.30093 6.173e+01 5.3125 6.179e+01 5.32407 6.184e+01 5.33565 6.190e+01 5.34722 6.196e+01 5.3588 6.202e+01 5.37037 6.208e+01 5.38194 6.214e+01 5.39352 6.220e+01 5.40509 6.227e+01 5.41667 6.234e+01 5.42824 6.241e+01 5.43981 6.249e+01 5.45139 6.256e+01 5.46296 6.264e+01 5.47454 6.273e+01 5.48611 6.281e+01 5.49769 6.290e+01 5.50926 6.299e+01 5.52083 6.309e+01 5.53241 6.318e+01 5.54398 6.328e+01 5.55556 6.338e+01 5.56713 6.348e+01 5.5787 6.358e+01 5.59028 6.368e+01 5.60185 6.379e+01 5.61343 6.389e+01 5.625 6.399e+01 5.63657 6.409e+01 5.64815 6.418e+01 5.65972 6.428e+01 5.6713 6.437e+01 5.68287 6.446e+01 5.69444 6.455e+01 5.70602 6.464e+01 5.71759 6.472e+01 5.72917 6.480e+01 5.74074 6.488e+01 5.75231 6.496e+01 5.76389 6.503e+01 5.77546 6.511e+01 5.78704 6.518e+01 5.79861 6.524e+01 5.81019 6.531e+01 5.82176 6.537e+01 5.83333 6.544e+01 5.84491 6.550e+01 5.85648 6.556e+01 5.86806 6.563e+01 5.87963 6.569e+01 5.8912 6.575e+01 5.90278 6.581e+01 5.91435 6.588e+01 5.92593 6.594e+01 5.9375 6.601e+01 5.94907 6.607e+01 5.96065 6.614e+01 5.97222 6.621e+01 5.9838 6.628e+01 5.99537 6.636e+01 6.00694 6.643e+01 6.01852 6.651e+01 6.03009 6.658e+01 6.04167 6.666e+01 6.05324 6.674e+01 6.06481 6.683e+01 6.07639 6.691e+01 6.08796 6.699e+01 6.09954 6.708e+01 6.11111 6.717e+01 6.12269 6.725e+01 6.13426 6.734e+01 6.14583 6.743e+01 6.15741 6.752e+01 6.16898 6.761e+01 6.18056 6.770e+01 6.19213 6.778e+01 6.2037 6.787e+01 6.21528 6.796e+01 6.22685 6.805e+01 6.23843 6.814e+01 6.25 6.822e+01 6.26157 6.831e+01 6.27315 6.839e+01 6.28472 6.848e+01 6.2963 6.856e+01 6.30787 6.864e+01 6.31944 6.872e+01 6.33102 6.880e+01 6.34259 6.888e+01 6.35417 6.896e+01 6.36574 6.903e+01 6.37731 6.911e+01 6.38889 6.918e+01 6.40046 6.926e+01 6.41204 6.933e+01 6.42361 6.940e+01 6.43519 6.947e+01 6.44676 6.954e+01 6.45833 6.960e+01 6.46991 6.967e+01 6.48148 6.974e+01 6.49306 6.980e+01 6.50463 6.987e+01 6.5162 6.993e+01 6.52778 7.000e+01 6.53935 7.006e+01 6.55093 7.013e+01 6.5625 7.019e+01 6.57407 7.026e+01 6.58565 7.033e+01 6.59722 7.039e+01 6.6088 7.046e+01 6.62037 7.053e+01 6.63194 7.060e+01 6.64352 7.067e+01 6.65509 7.075e+01 6.66667 7.082e+01 6.67824 7.090e+01 6.68981 7.097e+01 6.70139 7.105e+01 6.71296 7.113e+01 6.72454 7.121e+01 6.73611 7.129e+01 6.74769 7.138e+01 6.75926 7.146e+01 6.77083 7.155e+01 6.78241 7.163e+01 6.79398 7.172e+01 6.80556 7.181e+01 6.81713 7.189e+01 6.8287 7.198e+01 6.84028 7.207e+01 6.85185 7.216e+01 6.86343 7.224e+01 6.875 7.233e+01 6.88657 7.241e+01 6.89815 7.250e+01 6.90972 7.258e+01 6.9213 7.266e+01 6.93287 7.274e+01 6.94444 7.282e+01 6.95602 7.289e+01 6.96759 7.297e+01 6.97917 7.304e+01 6.99074 7.311e+01 7.00231 7.318e+01 7.01389 7.325e+01 7.02546 7.332e+01 7.03704 7.338e+01 7.04861 7.345e+01 7.06019 7.351e+01 7.07176 7.357e+01 7.08333 7.363e+01 7.09491 7.370e+01 7.10648 7.376e+01 7.11806 7.382e+01 7.12963 7.388e+01 7.1412 7.394e+01 7.15278 7.400e+01 7.16435 7.407e+01 7.17593 7.413e+01 7.1875 7.420e+01 7.19907 7.426e+01 7.21065 7.433e+01 7.22222 7.440e+01 7.2338 7.447e+01 7.24537 7.454e+01 7.25694 7.462e+01 7.26852 7.469e+01 7.28009 7.477e+01 7.29167 7.484e+01 7.30324 7.492e+01 7.31481 7.500e+01 7.32639 7.508e+01 7.33796 7.517e+01 7.34954 7.525e+01 7.36111 7.533e+01 7.37269 7.542e+01 7.38426 7.550e+01 7.39583 7.558e+01 7.40741 7.567e+01 7.41898 7.575e+01 7.43056 7.583e+01 7.44213 7.592e+01 7.4537 7.600e+01 7.46528 7.608e+01 7.47685 7.616e+01 7.48843 7.623e+01 7.5 7.631e+01 7.51157 7.639e+01 7.52315 7.646e+01 7.53472 7.654e+01 7.5463 7.661e+01 7.55787 7.668e+01 7.56944 7.675e+01 7.58102 7.682e+01 7.59259 7.688e+01 7.60417 7.695e+01 7.61574 7.701e+01 7.62731 7.708e+01 7.63889 7.714e+01 7.65046 7.721e+01 7.66204 7.727e+01 7.67361 7.733e+01 7.68519 7.739e+01 7.69676 7.746e+01 7.70833 7.752e+01 7.71991 7.758e+01 7.73148 7.765e+01 7.74306 7.771e+01 7.75463 7.778e+01 7.7662 7.784e+01 7.77778 7.791e+01 7.78935 7.798e+01 7.80093 7.804e+01 7.8125 7.811e+01 7.82407 7.818e+01 7.83565 7.826e+01 7.84722 7.833e+01 7.8588 7.840e+01 7.87037 7.847e+01 7.88194 7.855e+01 7.89352 7.862e+01 7.90509 7.870e+01 7.91667 7.878e+01 7.92824 7.885e+01 7.93981 7.893e+01 7.95139 7.901e+01 7.96296 7.909e+01 7.97454 7.917e+01 7.98611 7.924e+01 7.99769 7.932e+01 8.00926 7.940e+01 8.02083 7.947e+01 8.03241 7.955e+01 8.04398 7.963e+01 8.05556 7.970e+01 8.06713 7.978e+01 8.0787 7.985e+01 8.09028 7.992e+01 8.10185 7.999e+01 8.11343 8.007e+01 8.125 8.014e+01 8.13657 8.021e+01 8.14815 8.028e+01 8.15972 8.034e+01 8.1713 8.041e+01 8.18287 8.048e+01 8.19444 8.054e+01 8.20602 8.061e+01 8.21759 8.068e+01 8.22917 8.074e+01 8.24074 8.080e+01 8.25231 8.087e+01 8.26389 8.093e+01 8.27546 8.100e+01 8.28704 8.106e+01 8.29861 8.113e+01 8.31019 8.119e+01 8.32176 8.126e+01 8.33333 8.132e+01 8.34491 8.139e+01 8.35648 8.145e+01 8.36806 8.152e+01 8.37963 8.159e+01 8.3912 8.166e+01 8.40278 8.172e+01 8.41435 8.179e+01 8.42593 8.186e+01 8.4375 8.193e+01 8.44907 8.200e+01 8.46065 8.207e+01 8.47222 8.214e+01 8.4838 8.222e+01 8.49537 8.229e+01 8.50694 8.236e+01 8.51852 8.243e+01 8.53009 8.250e+01 8.54167 8.258e+01 8.55324 8.265e+01 8.56481 8.272e+01 8.57639 8.280e+01 8.58796 8.287e+01 8.59954 8.294e+01 8.61111 8.301e+01 8.62269 8.308e+01 8.63426 8.315e+01 8.64583 8.323e+01 8.65741 8.330e+01 8.66898 8.337e+01 8.68056 8.344e+01 8.69213 8.351e+01 8.7037 8.358e+01 8.71528 8.364e+01 8.72685 8.371e+01 8.73843 8.378e+01 8.75 8.385e+01 8.76157 8.391e+01 8.77315 8.398e+01 8.78472 8.405e+01 8.7963 8.411e+01 8.80787 8.418e+01 8.81944 8.424e+01 8.83102 8.431e+01 8.84259 8.437e+01 8.85417 8.444e+01 8.86574 8.451e+01 8.87731 8.457e+01 8.88889 8.464e+01 8.90046 8.470e+01 8.91204 8.477e+01 8.92361 8.483e+01 8.93519 8.490e+01 8.94676 8.496e+01 8.95833 8.503e+01 8.96991 8.510e+01 8.98148 8.516e+01 8.99306 8.523e+01 9.00463 8.530e+01 9.0162 8.536e+01 9.02778 8.543e+01 9.03935 8.550e+01 9.05093 8.557e+01 9.0625 8.563e+01 9.07407 8.570e+01 9.08565 8.577e+01 9.09722 8.584e+01 9.1088 8.591e+01 9.12037 8.598e+01 9.13194 8.605e+01 9.14352 8.611e+01 9.15509 8.618e+01 9.16667 8.625e+01 9.17824 8.632e+01 9.18981 8.639e+01 9.20139 8.646e+01 9.21296 8.653e+01 9.22454 8.659e+01 9.23611 8.666e+01 9.24769 8.673e+01 9.25926 8.680e+01 9.27083 8.687e+01 9.28241 8.693e+01 9.29398 8.700e+01 9.30556 8.707e+01 9.31713 8.713e+01 9.3287 8.720e+01 9.34028 8.726e+01 9.35185 8.733e+01 9.36343 8.739e+01 9.375 8.746e+01 9.38657 8.752e+01 9.39815 8.759e+01 9.40972 8.765e+01 9.4213 8.772e+01 9.43287 8.778e+01 9.44444 8.785e+01 9.45602 8.791e+01 9.46759 8.798e+01 9.47917 8.804e+01 9.49074 8.811e+01 9.50231 8.817e+01 9.51389 8.824e+01 9.52546 8.830e+01 9.53704 8.837e+01 9.54861 8.843e+01 9.56019 8.850e+01 9.57176 8.857e+01 9.58333 8.863e+01 9.59491 8.870e+01 9.60648 8.877e+01 9.61806 8.883e+01 9.62963 8.890e+01 9.6412 8.896e+01 9.65278 8.903e+01 9.66435 8.910e+01 9.67593 8.916e+01 9.6875 8.923e+01 9.69907 8.930e+01 9.71065 8.936e+01 9.72222 8.943e+01 9.7338 8.949e+01 9.74537 8.956e+01 9.75694 8.962e+01 9.76852 8.969e+01 9.78009 8.975e+01 9.79167 8.982e+01 9.80324 8.988e+01 9.81481 8.995e+01 9.82639 9.001e+01 9.83796 9.008e+01 9.84954 9.014e+01 9.86111 9.020e+01 9.87269 9.027e+01 9.88426 9.033e+01 9.89583 9.040e+01 9.90741 9.046e+01 9.91898 9.052e+01 9.93056 9.059e+01 9.94213 9.065e+01 9.9537 9.072e+01 9.96528 9.078e+01 9.97685 9.084e+01 9.98843 9.091e+01 10 9.097e+01 10.0116 9.104e+01 10.0231 9.110e+01 10.0347 9.117e+01 10.0463 9.123e+01 10.0579 9.130e+01 10.0694 9.137e+01 10.081 9.143e+01 10.0926 9.150e+01 10.1042 9.156e+01 10.1157 9.163e+01 10.1273 9.169e+01 10.1389 9.176e+01 10.1505 9.182e+01 10.162 9.189e+01 10.1736 9.195e+01 10.1852 9.202e+01 10.1968 9.208e+01 10.2083 9.214e+01 10.2199 9.221e+01 10.2315 9.227e+01 10.2431 9.233e+01 10.2546 9.240e+01 10.2662 9.246e+01 10.2778 9.252e+01 10.2894 9.259e+01 10.3009 9.265e+01 10.3125 9.271e+01 10.3241 9.277e+01 10.3356 9.283e+01 10.3472 9.290e+01 10.3588 9.296e+01 10.3704 9.302e+01 10.3819 9.308e+01 10.3935 9.315e+01 10.4051 9.321e+01 10.4167 9.327e+01 10.4282 9.333e+01 10.4398 9.340e+01 10.4514 9.346e+01 10.463 9.352e+01 10.4745 9.359e+01 10.4861 9.365e+01 10.4977 9.371e+01 10.5093 9.378e+01 10.5208 9.384e+01 10.5324 9.391e+01 10.544 9.397e+01 10.5556 9.404e+01 10.5671 9.410e+01 10.5787 9.416e+01 10.5903 9.423e+01 10.6019 9.429e+01 10.6134 9.436e+01 10.625 9.442e+01 10.6366 9.448e+01 10.6481 9.455e+01 10.6597 9.461e+01 10.6713 9.467e+01 10.6829 9.474e+01 10.6944 9.480e+01 10.706 9.486e+01 10.7176 9.492e+01 10.7292 9.498e+01 10.7407 9.505e+01 10.7523 9.511e+01 10.7639 9.517e+01 10.7755 9.523e+01 10.787 9.529e+01 10.7986 9.535e+01 10.8102 9.541e+01 10.8218 9.548e+01 10.8333 9.554e+01 10.8449 9.560e+01 10.8565 9.566e+01 10.8681 9.572e+01 10.8796 9.578e+01 10.8912 9.584e+01 10.9028 9.590e+01 10.9144 9.597e+01 10.9259 9.603e+01 10.9375 9.609e+01 10.9491 9.615e+01 10.9606 9.621e+01 10.9722 9.628e+01 10.9838 9.634e+01 10.9954 9.640e+01 11.0069 9.647e+01 11.0185 9.653e+01 11.0301 9.659e+01 11.0417 9.665e+01 11.0532 9.672e+01 11.0648 9.678e+01 11.0764 9.684e+01 11.088 9.690e+01 11.0995 9.697e+01 11.1111 9.703e+01 11.1227 9.709e+01 11.1343 9.715e+01 11.1458 9.721e+01 11.1574 9.727e+01 11.169 9.734e+01 11.1806 9.740e+01 11.1921 9.746e+01 11.2037 9.752e+01 11.2153 9.758e+01 11.2269 9.764e+01 11.2384 9.770e+01 11.25 9.776e+01 11.2616 9.782e+01 11.2731 9.788e+01 11.2847 9.794e+01 11.2963 9.800e+01 11.3079 9.806e+01 11.3194 9.812e+01 11.331 9.818e+01 11.3426 9.824e+01 11.3542 9.830e+01 11.3657 9.836e+01 11.3773 9.842e+01 11.3889 9.848e+01 11.4005 9.854e+01 11.412 9.860e+01 11.4236 9.866e+01 11.4352 9.872e+01 11.4468 9.879e+01 11.4583 9.885e+01 11.4699 9.891e+01 11.4815 9.897e+01 11.4931 9.903e+01 11.5046 9.909e+01 11.5162 9.915e+01 11.5278 9.922e+01 11.5394 9.928e+01 11.5509 9.934e+01 11.5625 9.940e+01 11.5741 9.946e+01 11.5856 9.952e+01 11.5972 9.958e+01 11.6088 9.965e+01 11.6204 9.971e+01 11.6319 9.977e+01 11.6435 9.983e+01 11.6551 9.989e+01 11.6667 9.995e+01 11.6782 1.000e+02 11.6898 1.001e+02 11.7014 1.001e+02 11.713 1.002e+02 11.7245 1.002e+02 11.7361 1.003e+02 11.7477 1.004e+02 11.7593 1.004e+02 11.7708 1.005e+02 11.7824 1.005e+02 11.794 1.006e+02 11.8056 1.007e+02 11.8171 1.007e+02 11.8287 1.008e+02 11.8403 1.008e+02 11.8519 1.009e+02 11.8634 1.010e+02 11.875 1.010e+02 11.8866 1.011e+02 11.8981 1.011e+02 11.9097 1.012e+02 11.9213 1.012e+02 11.9329 1.013e+02 11.9444 1.014e+02 11.956 1.014e+02 11.9676 1.015e+02 11.9792 1.015e+02 11.9907 1.016e+02 12.0023 1.017e+02 12.0139 1.017e+02 12.0255 1.018e+02 12.037 1.018e+02 12.0486 1.019e+02 12.0602 1.020e+02 12.0718 1.020e+02 12.0833 1.021e+02 12.0949 1.021e+02 12.1065 1.022e+02 12.1181 1.023e+02 12.1296 1.023e+02 12.1412 1.024e+02 12.1528 1.024e+02 12.1644 1.025e+02 12.1759 1.026e+02 12.1875 1.026e+02 12.1991 1.027e+02 12.2106 1.027e+02 12.2222 1.028e+02 12.2338 1.029e+02 12.2454 1.029e+02 12.2569 1.030e+02 12.2685 1.030e+02 12.2801 1.031e+02 12.2917 1.031e+02 12.3032 1.032e+02 12.3148 1.033e+02 12.3264 1.033e+02 12.338 1.034e+02 12.3495 1.034e+02 12.3611 1.035e+02 12.3727 1.036e+02 12.3843 1.036e+02 12.3958 1.037e+02 12.4074 1.037e+02 12.419 1.038e+02 12.4306 1.038e+02 12.4421 1.039e+02 12.4537 1.040e+02 12.4653 1.040e+02 12.4769 1.041e+02 12.4884 1.041e+02 12.5 1.042e+02 12.5116 1.042e+02 12.5231 1.043e+02 12.5347 1.044e+02 12.5463 1.044e+02 12.5579 1.045e+02 12.5694 1.045e+02 12.581 1.046e+02 12.5926 1.047e+02 12.6042 1.047e+02 12.6157 1.048e+02 12.6273 1.048e+02 12.6389 1.049e+02 12.6505 1.049e+02 12.662 1.050e+02 12.6736 1.051e+02 12.6852 1.051e+02 12.6968 1.052e+02 12.7083 1.052e+02 12.7199 1.053e+02 12.7315 1.054e+02 12.7431 1.054e+02 12.7546 1.055e+02 12.7662 1.055e+02 12.7778 1.056e+02 12.7894 1.056e+02 12.8009 1.057e+02 12.8125 1.058e+02 12.8241 1.058e+02 12.8356 1.059e+02 12.8472 1.059e+02 12.8588 1.060e+02 12.8704 1.060e+02 12.8819 1.061e+02 12.8935 1.062e+02 12.9051 1.062e+02 12.9167 1.063e+02 12.9282 1.063e+02 12.9398 1.064e+02 12.9514 1.064e+02 12.963 1.065e+02 12.9745 1.066e+02 12.9861 1.066e+02 12.9977 1.067e+02 13.0093 1.067e+02 13.0208 1.068e+02 13.0324 1.068e+02 13.044 1.069e+02 13.0556 1.070e+02 13.0671 1.070e+02 13.0787 1.071e+02 13.0903 1.071e+02 13.1019 1.072e+02 13.1134 1.072e+02 13.125 1.073e+02 13.1366 1.074e+02 13.1481 1.074e+02 13.1597 1.075e+02 13.1713 1.075e+02 13.1829 1.076e+02 13.1944 1.076e+02 13.206 1.077e+02 13.2176 1.077e+02 13.2292 1.078e+02 13.2407 1.079e+02 13.2523 1.079e+02 13.2639 1.080e+02 13.2755 1.080e+02 13.287 1.081e+02 13.2986 1.081e+02 13.3102 1.082e+02 13.3218 1.083e+02 13.3333 1.083e+02 13.3449 1.084e+02 13.3565 1.084e+02 13.3681 1.085e+02 13.3796 1.085e+02 13.3912 1.086e+02 13.4028 1.086e+02 13.4144 1.087e+02 13.4259 1.088e+02 13.4375 1.088e+02 13.4491 1.089e+02 13.4606 1.089e+02 13.4722 1.090e+02 13.4838 1.090e+02 13.4954 1.091e+02 13.5069 1.091e+02 13.5185 1.092e+02 13.5301 1.093e+02 13.5417 1.093e+02 13.5532 1.094e+02 13.5648 1.094e+02 13.5764 1.095e+02 13.588 1.095e+02 13.5995 1.096e+02 13.6111 1.097e+02 13.6227 1.097e+02 13.6343 1.098e+02 13.6458 1.098e+02 13.6574 1.099e+02 13.669 1.099e+02 13.6806 1.100e+02 13.6921 1.100e+02 13.7037 1.101e+02 13.7153 1.102e+02 13.7269 1.102e+02 13.7384 1.103e+02 13.75 1.103e+02 13.7616 1.104e+02 13.7731 1.104e+02 13.7847 1.105e+02 13.7963 1.105e+02 13.8079 1.106e+02 13.8194 1.107e+02 13.831 1.107e+02 13.8426 1.108e+02 13.8542 1.108e+02 13.8657 1.109e+02 13.8773 1.109e+02 13.8889 1.110e+02 13.9005 1.110e+02 13.912 1.111e+02 13.9236 1.111e+02 13.9352 1.112e+02 13.9468 1.113e+02 13.9583 1.113e+02 13.9699 1.114e+02 13.9815 1.114e+02 13.9931 1.115e+02 14.0046 1.115e+02 14.0162 1.116e+02 14.0278 1.116e+02 14.0394 1.117e+02 14.0509 1.117e+02 14.0625 1.118e+02 14.0741 1.119e+02 14.0856 1.119e+02 14.0972 1.120e+02 14.1088 1.120e+02 14.1204 1.121e+02 14.1319 1.121e+02 14.1435 1.122e+02 14.1551 1.122e+02 14.1667 1.123e+02 14.1782 1.124e+02 14.1898 1.124e+02 14.2014 1.125e+02 14.213 1.125e+02 14.2245 1.126e+02 14.2361 1.126e+02 14.2477 1.127e+02 14.2593 1.127e+02 14.2708 1.128e+02 14.2824 1.128e+02 14.294 1.129e+02 14.3056 1.130e+02 14.3171 1.130e+02 14.3287 1.131e+02 14.3403 1.131e+02 14.3519 1.132e+02 14.3634 1.132e+02 14.375 1.133e+02 14.3866 1.133e+02 14.3981 1.134e+02 14.4097 1.134e+02 14.4213 1.135e+02 14.4329 1.135e+02 14.4444 1.136e+02 14.456 1.137e+02 14.4676 1.137e+02 14.4792 1.138e+02 14.4907 1.138e+02 14.5023 1.139e+02 14.5139 1.139e+02 14.5255 1.140e+02 14.537 1.140e+02 14.5486 1.141e+02 14.5602 1.141e+02 14.5718 1.142e+02 14.5833 1.142e+02 14.5949 1.143e+02 14.6065 1.144e+02 14.6181 1.144e+02 14.6296 1.145e+02 14.6412 1.145e+02 14.6528 1.146e+02 14.6644 1.146e+02 14.6759 1.147e+02 14.6875 1.147e+02 14.6991 1.148e+02 14.7106 1.148e+02 14.7222 1.149e+02 14.7338 1.149e+02 14.7454 1.150e+02 14.7569 1.150e+02 14.7685 1.151e+02 14.7801 1.152e+02 14.7917 1.152e+02 14.8032 1.153e+02 14.8148 1.153e+02 14.8264 1.154e+02 14.838 1.154e+02 14.8495 1.155e+02 14.8611 1.155e+02 14.8727 1.156e+02 14.8843 1.156e+02 14.8958 1.157e+02 14.9074 1.157e+02 14.919 1.158e+02 14.9306 1.158e+02 14.9421 1.159e+02 14.9537 1.160e+02 14.9653 1.160e+02 14.9769 1.161e+02 14.9884 1.161e+02 15 1.162e+02 15.0116 1.162e+02 15.0231 1.163e+02 15.0347 1.163e+02 15.0463 1.164e+02 15.0579 1.164e+02 15.0694 1.165e+02 15.081 1.165e+02 15.0926 1.166e+02 15.1042 1.166e+02 15.1157 1.167e+02 15.1273 1.167e+02 15.1389 1.168e+02 15.1505 1.168e+02 15.162 1.169e+02 15.1736 1.170e+02 15.1852 1.170e+02 15.1968 1.171e+02 15.2083 1.171e+02 15.2199 1.172e+02 15.2315 1.172e+02 15.2431 1.173e+02 15.2546 1.173e+02 15.2662 1.174e+02 15.2778 1.174e+02 15.2894 1.175e+02 15.3009 1.175e+02 15.3125 1.176e+02 15.3241 1.176e+02 15.3356 1.177e+02 15.3472 1.177e+02 15.3588 1.178e+02 15.3704 1.178e+02 15.3819 1.179e+02 15.3935 1.179e+02 15.4051 1.180e+02 15.4167 1.181e+02 15.4282 1.181e+02 15.4398 1.182e+02 15.4514 1.182e+02 15.463 1.183e+02 15.4745 1.183e+02 15.4861 1.184e+02 15.4977 1.184e+02 15.5093 1.185e+02 15.5208 1.185e+02 15.5324 1.186e+02 15.544 1.186e+02 15.5556 1.187e+02 15.5671 1.187e+02 15.5787 1.188e+02 15.5903 1.188e+02 15.6019 1.189e+02 15.6134 1.189e+02 15.625 1.190e+02 15.6366 1.190e+02 15.6481 1.191e+02 15.6597 1.191e+02 15.6713 1.192e+02 15.6829 1.192e+02 15.6944 1.193e+02 15.706 1.193e+02 15.7176 1.194e+02 15.7292 1.195e+02 15.7407 1.195e+02 15.7523 1.196e+02 15.7639 1.196e+02 15.7755 1.197e+02 15.787 1.197e+02 15.7986 1.198e+02 15.8102 1.198e+02 15.8218 1.199e+02 15.8333 1.199e+02 15.8449 1.200e+02 15.8565 1.200e+02 15.8681 1.201e+02 15.8796 1.201e+02 15.8912 1.202e+02 15.9028 1.202e+02 15.9144 1.203e+02 15.9259 1.203e+02 15.9375 1.204e+02 15.9491 1.204e+02 15.9606 1.205e+02 15.9722 1.205e+02 15.9838 1.206e+02 15.9954 1.206e+02 16.0069 1.207e+02 16.0185 1.207e+02 16.0301 1.208e+02 16.0417 1.208e+02 16.0532 1.209e+02 16.0648 1.209e+02 16.0764 1.210e+02 16.088 1.210e+02 16.0995 1.211e+02 16.1111 1.211e+02 16.1227 1.212e+02 16.1343 1.212e+02 16.1458 1.213e+02 16.1574 1.213e+02 16.169 1.214e+02 16.1806 1.214e+02 16.1921 1.215e+02 16.2037 1.215e+02 16.2153 1.216e+02 16.2269 1.216e+02 16.2384 1.217e+02 16.25 1.218e+02 16.2616 1.218e+02 16.2731 1.219e+02 16.2847 1.219e+02 16.2963 1.220e+02 16.3079 1.220e+02 16.3194 1.221e+02 16.331 1.221e+02 16.3426 1.222e+02 16.3542 1.222e+02 16.3657 1.223e+02 16.3773 1.223e+02 16.3889 1.224e+02 16.4005 1.224e+02 16.412 1.225e+02 16.4236 1.225e+02 16.4352 1.226e+02 16.4468 1.226e+02 16.4583 1.227e+02 16.4699 1.227e+02 16.4815 1.228e+02 16.4931 1.228e+02 16.5046 1.229e+02 16.5162 1.229e+02 16.5278 1.230e+02 16.5394 1.230e+02 16.5509 1.231e+02 16.5625 1.231e+02 16.5741 1.232e+02 16.5856 1.232e+02 16.5972 1.233e+02 16.6088 1.233e+02 16.6204 1.234e+02 16.6319 1.234e+02 16.6435 1.235e+02 16.6551 1.235e+02 16.6667 1.236e+02 16.6782 1.236e+02 16.6898 1.237e+02 16.7014 1.237e+02 16.713 1.238e+02 16.7245 1.238e+02 16.7361 1.239e+02 16.7477 1.239e+02 16.7593 1.240e+02 16.7708 1.240e+02 16.7824 1.241e+02 16.794 1.241e+02 16.8056 1.242e+02 16.8171 1.242e+02 16.8287 1.243e+02 16.8403 1.243e+02 16.8519 1.244e+02 16.8634 1.244e+02 16.875 1.245e+02 16.8866 1.245e+02 16.8981 1.246e+02 16.9097 1.246e+02 16.9213 1.247e+02 16.9329 1.247e+02 16.9444 1.248e+02 16.956 1.248e+02 16.9676 1.248e+02 16.9792 1.249e+02 16.9907 1.249e+02 17.0023 1.250e+02 17.0139 1.250e+02 17.0255 1.251e+02 17.037 1.251e+02 17.0486 1.252e+02 17.0602 1.252e+02 17.0718 1.253e+02 17.0833 1.253e+02 17.0949 1.254e+02 17.1065 1.254e+02 17.1181 1.255e+02 17.1296 1.255e+02 17.1412 1.256e+02 17.1528 1.256e+02 17.1644 1.257e+02 17.1759 1.257e+02 17.1875 1.258e+02 17.1991 1.258e+02 17.2106 1.259e+02 17.2222 1.259e+02 17.2338 1.260e+02 17.2454 1.260e+02 17.2569 1.261e+02 17.2685 1.261e+02 17.2801 1.262e+02 17.2917 1.262e+02 17.3032 1.263e+02 17.3148 1.263e+02 17.3264 1.264e+02 17.338 1.264e+02 17.3495 1.265e+02 17.3611 1.265e+02 17.3727 1.266e+02 17.3843 1.266e+02 17.3958 1.267e+02 17.4074 1.267e+02 17.419 1.268e+02 17.4306 1.268e+02 17.4421 1.269e+02 17.4537 1.269e+02 17.4653 1.270e+02 17.4769 1.270e+02 17.4884 1.271e+02 17.5 1.271e+02 17.5116 1.271e+02 17.5231 1.272e+02 17.5347 1.272e+02 17.5463 1.273e+02 17.5579 1.273e+02 17.5694 1.274e+02 17.581 1.274e+02 17.5926 1.275e+02 17.6042 1.275e+02 17.6157 1.276e+02 17.6273 1.276e+02 17.6389 1.277e+02 17.6505 1.277e+02 17.662 1.278e+02 17.6736 1.278e+02 17.6852 1.279e+02 17.6968 1.279e+02 17.7083 1.280e+02 17.7199 1.280e+02 17.7315 1.281e+02 17.7431 1.281e+02 17.7546 1.282e+02 17.7662 1.282e+02 17.7778 1.283e+02 17.7894 1.283e+02 17.8009 1.284e+02 17.8125 1.284e+02 17.8241 1.284e+02 17.8356 1.285e+02 17.8472 1.285e+02 17.8588 1.286e+02 17.8704 1.286e+02 17.8819 1.287e+02 17.8935 1.287e+02 17.9051 1.288e+02 17.9167 1.288e+02 17.9282 1.289e+02 17.9398 1.289e+02 17.9514 1.290e+02 17.963 1.290e+02 17.9745 1.291e+02 17.9861 1.291e+02 17.9977 1.292e+02 18.0093 1.292e+02 18.0208 1.293e+02 18.0324 1.293e+02 18.044 1.294e+02 18.0556 1.294e+02 18.0671 1.295e+02 18.0787 1.295e+02 18.0903 1.295e+02 18.1019 1.296e+02 18.1134 1.296e+02 18.125 1.297e+02 18.1366 1.297e+02 18.1481 1.298e+02 18.1597 1.298e+02 18.1713 1.299e+02 18.1829 1.299e+02 18.1944 1.300e+02 18.206 1.300e+02 18.2176 1.301e+02 18.2292 1.301e+02 18.2407 1.302e+02 18.2523 1.302e+02 18.2639 1.303e+02 18.2755 1.303e+02 18.287 1.304e+02 gerris-snapshot-131206/test/geo/river/geo.gfv0000644000175100017510000000054712250371171016026 00000000000000# GfsView 3D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 18.2741 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } E { amin = 1 amax = 1 cmap = Jet } gerris-snapshot-131206/test/geo/river/geo.sh0000644000175100017510000000030712250371171015650 00000000000000# catch errors set -e if test x$donotrun != xtrue; then gerris2D $1 fi python < 1e-3: exit(1) EOF gerris-snapshot-131206/test/geo/river/river.gfs0000644000175100017510000000476512250371171016406 00000000000000# Title: Geostrophic adjustment with Saint-Venant # # Description: # # Same test but using the (fully nonlinear) Saint-Venant solver. # # \begin{figure}[htbp] # \caption{\label{geo-error}Evolution of the maximum error on the surface height for the # geostrophic adjustment problem.} # \begin{center} # \includegraphics[width=\hsize]{geo_error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{geo-error1}Evolution of the surface-height error field. (a) $t =$1.157 # days, (b) $t = 2.315$ days, (c) $t =$3.472 days, (d) $t =$4.630 days, (e) $t # =$17.361 days.} # \begin{center} # \begin{tabular}{ccccc} # \includegraphics[width=0.18\hsize]{error-100.eps} & # \includegraphics[width=0.18\hsize]{error-200.eps} & # \includegraphics[width=0.18\hsize]{error-300.eps} & # \includegraphics[width=0.18\hsize]{error-400.eps} & # \includegraphics[width=0.18\hsize]{error-1500.eps} \\ # (a) & (b) & (c) & (d) & (e) # \end{tabular} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh geo.sh river.gfs # Version: 130112 # Required files: geo.sh geo.gfv e.ref # Running time: 3 minutes # Generated files: geo_error.eps error-100.eps error-200.eps error-300.eps error-400.eps error-1500.eps # 1 0 GfsRiver GfsBox GfsGEdge {} { Time { iend = 1580 dtmax = 1000 } Refine 6 Global { #define L0 1000e3 #define H0 1000 #define G 0.01 #define R0 100e3 #define ETA0 599.5 #define F0 1.0285e-4 } AdvectionParams { gradient = gfs_center_gradient } PhysicalParams { L = L0 g = G } Init {} { # e-folding radius = 100 km # umax = 0.5 m/s = sqrt(200)*exp(-1/2) P = (H0 + ETA0*exp (-(x*x + y*y)/(R0*R0))) U = 2.*G*ETA0*y/(F0*R0*R0)*exp (-(x*x + y*y)/(R0*R0))*P V = - 2.*G*ETA0*x/(F0*R0*R0)*exp (-(x*x + y*y)/(R0*R0))*P } SourceCoriolis F0 OutputErrorNorm { istep = 1 } { awk '{print $3/86400. " " $9; fflush (stdout); }' > e } { v = P } { s = (H0 + ETA0*exp (-(x*x + y*y)/(R0*R0))) v = E } GModule gfsview OutputView { istart = 100 iend = 500 istep = 100 } error-%ld.eps { format = EPS } geo.gfv OutputView { istart = 1500 } error-%ld.eps { format = EPS } geo.gfv EventScript { start = end } { cat < 0. && T < 1.)*dL*fabs(K) AdaptThickness { istep = 1 } { maxlevel = 8 } T GModule gfsview OutputView { start = 2.5 } t-2.5.eps { format = EPS line_width = 0.5 } curvature.gfv # Add a new variable Variable Tref # Initialize Tref with the initial shape InitFraction { start = end } Tref (ellipse (0, -.236338, 0.2, 0.2)) # Output the norms of the difference between T and Tref, stores that into # new variable DT OutputErrorNorm { start = end } norms { v = T } { s = Tref v = DT } OutputPPM { start = end } { convert ppm:- dt-5.eps } { v = DT } OutputScalarSum { istep = 1 } { awk '{ print $3,$5-0.8743665 }' > t } { v = T } } GfsBox {} gerris-snapshot-131206/test/shear/shear.sh0000644000175100017510000000130012250371172015374 00000000000000if test x$donotrun != xtrue; then if gerris2D $1; then : else exit 1 fi fi if awk '{print $5 " & " $7 " & " $9 "\\\\"}' < norms > norms.tex && \ awk '{print "{\\color{blue}" $5 "} & {\\color{blue}" $7 "} & {\\color{blue}" $9 "}"}' < norms.ref >> norms.tex ; then : else exit 1 fi if cat < 0. or\ (Curve('norms',3,7) - Curve('norms.ref',3,7)).max() > 0. or\ (Curve('norms',3,9) - Curve('norms.ref',3,9)).max() > 0. or\ (Curve('norms',3,11) - Curve('norms.ref',3,11)).max() > 0.: exit(1) if Curve('t',1,2).max() > 2e-5: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/shear/concentration/0000755000175100017510000000000012250371672016677 500000000000000gerris-snapshot-131206/test/shear/concentration/t1.gfv0000644000175100017510000000147112250371172017645 00000000000000# GfsView 2D View { tx = 0.01716 ty = -0.0101609 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 25.936 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } VOF { r = 0.0538949 g = 0.809659 b = 0.142107 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 2 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } T { reversed = 0 use_scalar = 0 draw_edges = 0 interpolate = 0 } Boundaries { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } C { amin = 0 min = 4.22937e-11 amax = 0 max = 1 cmap = Jet } gerris-snapshot-131206/test/shear/concentration/t2.gfv0000644000175100017510000000145712250371172017652 00000000000000# GfsView 2D View { tx = 0.01716 ty = -0.0101609 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 25.936 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } VOF { r = 0.0538949 g = 0.809659 b = 0.142107 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 2 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } T { reversed = 0 use_scalar = 0 draw_edges = 0 interpolate = 0 } Boundaries { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } G { amin = 0 min = 0 amax = 0 max = 1 cmap = Jet } gerris-snapshot-131206/test/shear/concentration/convergence2.ref0000644000175100017510000000020012250371172021660 000000000000005 2.376e-02 7.281e-02 6.278e-01 6 1.151e-02 4.021e-02 3.676e-01 7 3.769e-03 1.407e-02 1.541e-01 8 1.126e-03 3.441e-03 4.824e-02 gerris-snapshot-131206/test/shear/concentration/convergence1.ref0000644000175100017510000000020012250371172021657 000000000000005 1.184e-02 4.507e-02 4.474e-01 6 5.734e-03 2.470e-02 2.841e-01 7 2.831e-03 1.288e-02 1.542e-01 8 1.236e-03 5.108e-03 9.644e-02 gerris-snapshot-131206/test/shear/concentration/convergence.ref0000644000175100017510000000020012250371172021576 000000000000005 5.060e-03 3.748e-02 4.825e-01 6 1.653e-03 2.093e-02 5.007e-01 7 4.923e-04 1.061e-02 4.325e-01 8 1.632e-04 5.427e-03 3.620e-01 gerris-snapshot-131206/test/shear/concentration/concentration.sh0000644000175100017510000000257612250371172022026 00000000000000for level in 5 6 7; do if gerris2D -DLEVEL=$level concentration.gfs; then : else exit 1 fi done for i in 1 2; do echo "Save t$i-half.eps { format = EPS }" | gfsview-batch2D half-7.gfs t$i.gfv echo "Save t$i-end.eps { format = EPS }" | gfsview-batch2D end-7.gfs t$i.gfv done rm -f convergence convergence1 convergence2 for level in 5 6 7; do for i in "" 1 2; do awk -v level=$level '{ print level, $5, $7, $9}' < dt$i-$level >> convergence$i done done if gnuplot < 0. or\ (Curve('convergence$i',1,3) - Curve('convergence$i.ref',1,3)).max() > 0. or\ (Curve('convergence$i',1,4) - Curve('convergence$i.ref',1,4)).max() > 0.: exit(1) EOF else exit 1 fi done gerris-snapshot-131206/test/shear/concentration/concentration.gfs0000644000175100017510000000734512250371172022172 00000000000000# Title: Time-reversed advection of a VOF concentration # # Description: # # A similar test but with the addition of a concentration field (C) # associated with the VOF tracer (i.e. the phase with T > 0). The # initial concentration field is a Gaussian bump. The maximum of the bump # is located on the VOF interface to emphasise errors in the advection # of the VOF concentration. For reference a standard (Godunov) tracer # (G) is added, initialised with the same initial Gaussian # bump. Ideally C should match G when T > 0 and both C and G # should return to the initial Gaussian distribution at $t=5$. # # The VOF interface and tracer fields are illustrated in Figure # \ref{evolution}. The corresponding convergence of the error norms # with spatial resolution is illustrated in Figure \ref{convergence}. # # The VOF tracer is conserved to within $10^{-4}$, C to within # $2\times 10^{-5}$ (at the coarsest resolution) and G exactly. # # \begin{figure}[htbp] # \caption{\label{evolution}VOF interface and tracer fields at $t=2.5$ # (top row) and $t=5$ (bottom row). The green line is the # VOF-reconstructed interface. Left column: VOF concentration field # C. Right column: Godunov tracer G. 7 levels of refinement.} # \begin{center} # \begin{tabular}{cc} # \includegraphics[width=0.45\hsize]{t1-half.eps} & # \includegraphics[width=0.45\hsize]{t2-half.eps} \\ # \includegraphics[width=0.45\hsize]{t1-end.eps} & # \includegraphics[width=0.45\hsize]{t2-end.eps} # \end{tabular} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{convergence}Convergence of the error with spatial # resolution for the various fields.} # \begin{center} # \includegraphics[width=\hsize]{convergence.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh concentration.sh # Version: 111005 # Required files: concentration.sh convergence.ref convergence1.ref convergence2.ref t1.gfv t2.gfv # Generated files: convergence.eps t1-end.eps t1-half.eps t2-end.eps t2-half.eps # Define CIRCLE (ellipse (0, -.236338, 0.2, 0.2)) Define GAUSSIAN (exp(-100.*((x + 0.2)*(x + 0.2) + (y + .236338)*(y + .236338)))) # Define CIRCLE 1 1 0 GfsAdvection GfsBox GfsGEdge {} { Time { end = 5 } Refine LEVEL VariableTracerVOFHeight T VariableVOFConcentration C T VariableTracer G InitFraction T CIRCLE Init {} { C = GAUSSIAN*T G = GAUSSIAN } VariableStreamFunction { step = 2.5 } Psi (t < 2.5 ? 1. : -1.)*sin((x + 0.5)*M_PI)*sin((y + 0.5)*M_PI)/M_PI AdaptGradient { istart = 1 istep = 1 } { cmax = 0 maxlevel = LEVEL } T AdaptError { istart = 1 istep = 1 } { cmax = 1e-3 maxlevel = LEVEL } C AdaptError { istart = 1 istep = 1 } { cmax = 1e-3 maxlevel = LEVEL } G OutputScalarSum { istep = 1 } t { v = T } OutputScalarSum { istep = 1 } t1 { v = C } OutputScalarSum { istep = 1 } t2 { v = G } # OutputSimulation { istep = 10 } stdout OutputSimulation { start = 2.5 } half-LEVEL.gfs EventScript { start = end } { conservation() { if awk -v tolerance=$1 'BEGIN { min = 1.; max = -1.; }{ if ($5 > max) max = $5; if ($5 < min) min = $5; }END{ if (max - min > tolerance) { print max - min > "/dev/stderr"; exit (1); } }'; then : else exit $GFS_STOP; fi } conservation 1e-4 < t conservation 2e-5 < t1 conservation 0. < t2 } VariableTracer Tref InitFraction { start = end } Tref CIRCLE OutputErrorNorm { start = end } dt-LEVEL { v = T } { s = Tref v = DT } OutputErrorNorm { start = end } dt1-LEVEL { v = C } { s = Tref*GAUSSIAN v = DC } OutputErrorNorm { start = end } dt2-LEVEL { v = G } { s = GAUSSIAN v = DG } OutputSimulation { start = end } end-LEVEL.gfs } GfsBox {} gerris-snapshot-131206/test/shear/shear.gfs0000644000175100017510000000664012250371172015555 00000000000000# Title: Time-reversed VOF advection in a shear flow # # Description: # # A test case initially presented by Rudman \cite{rudman97}. # A circular patch of tracer is advected in a vortical shear flow. At t = 2.5 # the flow direction is reversed. An exact advection scheme would restore the # initial circular shape at t = 5. # # The VOF (Volume-Of-Fluid) advection scheme is not exact. The initial, intermediate # and final shape of the interface are represented on Figure \ref{advection}. # Figure \ref{error} illustrates the error between the initial and final shapes. The # corresponding error norms are given in Table \ref{norms}. # # Adaptive refinement is used with the gradient of the volume fraction as criterion. # Eight levels of refinement are used on the interfaces and six away from the interface. # # \begin{figure}[htbp] # \caption{\label{advection}Volume fraction field at times (a) 0, (b) 2.5 and (c) 5.} # \begin{center} # \begin{tabular}{ccc} # \includegraphics[width=0.3\hsize]{t-0.eps} & # \includegraphics[width=0.3\hsize]{t-2.5.eps} & # \includegraphics[width=0.3\hsize]{t-5.eps} \\ # (a) & (b) & (c) # \end{tabular} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Difference between the initial and final volume fraction fields.} # \begin{center} # \includegraphics[width=0.4\hsize]{dt-5.eps} # \end{center} # \end{figure} # # \begin{table}[htbp] # \caption{\label{norms}Norms of the error between the initial and final fields. The # reference values are given in blue.} # \begin{center} # \begin{tabular}{|c|c|c|}\hline # $L_1$ & $L_2$ & $L_\infty$ \\ \hline # \input{norms.tex} # \end{tabular} # \end{center} # \end{table} # # Author: St\'ephane Popinet # Command: sh shear.sh shear.gfs # Version: 091022 # Required files: shear.sh norms.ref # Running time: 2 minutes # Generated files: t-0.eps t-2.5.eps t-5.eps dt-5.eps norms norms.tex # # The type of the simulation is GfsAdvection which only solves the advection # of passive tracers. 1 0 GfsAdvection GfsBox GfsGEdge {} { Time { end = 5 } Refine 8 # Add tracer T, using a VOF advection scheme. # The default scheme is a Van-Leer limited, second-order upwind scheme. VariableTracerVOFHeight T InitFraction T (ellipse (0, -.236338, 0.2, 0.2)) # Maintain U and V with the vortical shear flow field defined by # its streamfunction VariableStreamFunction { # make sure that the entire field is reinitialised at t = 2.5 step = 2.5 } Psi (t < 2.5 ? 1. : -1.)*sin((x + 0.5)*M_PI)*sin((y + 0.5)*M_PI)/M_PI # Adapt the mesh dynamically so that at any time the maximum of the gradient # of T is less than or equal to zero per cell length AdaptGradient { istart = 1 istep = 1 } { cmax = 0 maxlevel = 8 } T OutputPPM { start = 0 } { convert ppm:- t-0.eps } { v = T } OutputPPM { start = 2.5 } { convert ppm:- t-2.5.eps } { v = T } OutputPPM { start = 5 } { convert ppm:- t-5.eps } { v = T } # Add a new variable Variable Tref # Initialize Tref with the initial shape InitFraction { start = end } Tref (ellipse (0, -.236338, 0.2, 0.2)) # Output the norms of the difference between T and Tref, stores that into # new variable DT OutputErrorNorm { start = end } norms { v = T } { s = Tref v = DT } OutputPPM { start = end } { convert ppm:- dt-5.eps } { v = DT } OutputScalarSum { istep = 1 } { awk '{ print $3,$5-8.743441e-01 }' > t } { v = T } } GfsBox {} gerris-snapshot-131206/test/injectionaxi.sh0000755000175100017510000000003712250371662015671 00000000000000python -u test.py injectionaxi gerris-snapshot-131206/test/cosine/0000755000175100017510000000000012250371674014211 500000000000000gerris-snapshot-131206/test/cosine/reference.gfv0000644000175100017510000000076012250371171016566 00000000000000# GfsView 2D View { tx = -1.52019 ty = -1.01194 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 18.3818 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0.733654 b = 0.0148928 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } bell_moving(x*DTR,y*DTR,t) { amin = 0 min = 0 amax = 0 max = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 9 } gerris-snapshot-131206/test/cosine/cosine.gfs0000644000175100017510000001663612250371171016116 00000000000000# Title: Advection of a cosine bell around the sphere # # Description: # # This test case was suggested by Williamson et # al. \cite{williamson92} (Problem \#1). A "cosine bell" initial # concentration is given by # $$ # h(\lambda,\theta)=(h_0/2)(1+\cos(\pi r/R)) # $$ # if $r= R ? 0. : (h0/2.)*(1. + cos (M_PI*r/R)); } double bell_moving (double lambda, double theta, double t) { double lambda2 = lambda1 (lambda, theta, M_PI, M_PI/2. - ALPHA*DTR); double theta2 = theta1 (lambda, theta, M_PI, M_PI/2. - ALPHA*DTR); double lc = 3.*M_PI/2. - U0*t, tc = 0.; return bell (lambda2, theta2, lc, tc); } } Init {} { T = bell_moving(x*DTR,y*DTR,0) } VariableStreamFunction Psi -U0*(sin (y*DTR)*cos (DTR*ALPHA) - cos (x*DTR)*cos (y*DTR)*sin (DTR*ALPHA)) AdaptGradient { istep = 1 } { cmax = 1e-4 maxlevel = LEVEL } T OutputTime { istep = 10 } stderr # OutputSimulation { istep = 10 } stdout OutputSimulation { start = end } end-LEVEL-ALPHA.gfs OutputErrorNorm { istep = 1 } { awk '{ print LEVEL,$3,$5,$7,$9}' > error-LEVEL-ALPHA } { v = T } { s = bell_moving(x*DTR,y*DTR,t) v = E relative = 1 } OutputScalarSum { istep = 1 } t-LEVEL-ALPHA { v = T } OutputScalarSum { istep = 1 } area-LEVEL-ALPHA { v = 1 } EventScript { start = end } { ( cat isolines.gfv echo "Save isolines.gnu { format = Gnuplot }" echo "Clear" cat reference.gfv echo "Save reference.gnu { format = Gnuplot }" echo "Clear" cat zero.gfv echo "Save zero.gnu { format = Gnuplot }" ) | gfsview-batch2D end-LEVEL-ALPHA.gfs cat < max) max = $5; } END { if (max - min != 0.) exit (1); }' < t-LEVEL-ALPHA; then exit 0 else exit $GFS_STOP fi } } GfsBox {} GfsBox {} GfsBox {} GfsBox {} GfsBox {} GfsBox {} 1 2 right 2 3 top 3 4 right 4 5 top 5 6 right 6 1 top 1 3 top left 3 5 top left 5 1 top left 2 6 bottom right 4 2 bottom right 6 4 bottom right gerris-snapshot-131206/test/cosine/error-45.ref0000644000175100017510000000021012250371171016167 000000000000004 1 1.002e+00 5.311e-01 5.350e-01 5 1 3.549e-01 2.078e-01 1.893e-01 6 1 8.040e-02 5.113e-02 4.316e-02 7 1 1.545e-02 1.166e-02 1.244e-02 gerris-snapshot-131206/test/cosine/rossmanith450000644000175100017510000000031212250371171016400 00000000000000# see Rossmanith, 2006, JCP 213, Table 3, t = 1 # resolution L1 L2 Linfty 20 5.02e-1 4.01e-1 4.62e-1 40 1.12e-1 1.07e-1 1.76e-1 80 2.12e-2 2.23e-2 5.85e-2 160 4.77e-3 5.32e-3 1.96e-2 gerris-snapshot-131206/test/cosine/rossmanith900000644000175100017510000000030212250371171016377 00000000000000# see Rossmanith, 2006, JCP 213, Table 2, t = 1 # resolution L1 L2 Linfty 20 2.48e-1 1.96e-1 1.83e-1 40 5.70e-2 4.62e-2 4.57e-2 80 1.47e-2 1.20e-2 1.48e-2 160 3.77e-3 3.22e-3 6.26e-3 gerris-snapshot-131206/test/cosine/zero.gfv0000644000175100017510000000072312250371171015606 00000000000000# GfsView 2D View { tx = -1.52019 ty = -1.01194 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 18.3818 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } T { amin = 0 min = 0 amax = 0 max = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 0 levels = 0 } gerris-snapshot-131206/test/cosine/error-90.ref0000644000175100017510000000021012250371171016167 000000000000004 1 6.534e-01 4.056e-01 3.469e-01 5 1 1.995e-01 1.260e-01 9.310e-02 6 1 3.934e-02 2.576e-02 1.572e-02 7 1 8.878e-03 6.335e-03 5.954e-03 gerris-snapshot-131206/test/cosine/cosine.sh0000644000175100017510000000415412250371171015741 00000000000000levels="4 5 6 7" alphas="45 90" if test x$donotrun != xtrue; then for alpha in $alphas; do for i in $levels; do if gerris2D -DLEVEL=$i -DALPHA=$alpha cosine.gfs 2> log-$i-$alpha; then : else exit 1 fi done done fi for alpha in $alphas; do rm -f error-$alpha for i in $levels; do tail -n 1 error-$i-$alpha >> error-$alpha done if cat < 1e-10 or\ (Curve('error-45',1,5) - Curve('error-45.ref',1,5)).max() > 1e-10 or\ (Curve('error-90',1,4) - Curve('error-90.ref',1,4)).max() > 1e-10 or\ (Curve('error-90',1,5) - Curve('error-90.ref',1,5)).max() > 1e-10: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/cosine/isolines.gfv0000644000175100017510000000071012250371171016450 00000000000000# GfsView 2D View { tx = -1.52019 ty = -1.01194 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 18.3818 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } T { amin = 0 min = 0 amax = 0 max = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 9 } gerris-snapshot-131206/test/depend.py0000644000175100017510000000273412250371171014460 00000000000000#!/usr/bin/python import sys import os import os.path sys.path.append("../doc/examples") import gfs2tex print "## File generated automatically by depend.py: do not modify by hand" print "" dists = "" depends = "" docs = "" reps = "" tests = "" logs = "" for start in sys.argv[1:]: tests += "\\\n\t" + start + ".sh" reps += " " + start logs += "\\\n\t" + start + ".log" f = open(start + ".sh", "w") f.write("python -u test.py " + start + "\n") f.close() os.chmod(start + ".sh",0755) for root, dirs, files in os.walk(start,topdown=True): if not ".xvpics" in root: test = gfs2tex.Example(root) name = test.path + "/" + test.name + ".gfs" docs += "\\\n\t" + name + ".html" dists += "\\\n\t" + name depends += "\\\n\t" + name for f in test.required: dists += "\\\n\t" + test.path + "/" + f for f in test.generated: depends += "\\\n\t" + test.path + "/" + f if f[-4:] == ".mpg" or f[-4:] == ".ogv" or f[-4:] == ".png" or f[-4:] == ".mp4": docs += "\\\n\t" + test.path + "/" + f print "DOCS = " + docs + dists print "" print "TESTS = " + tests + "\\\n\tsummary.sh" os.chmod("summary.sh",0755) print "" print "EXTRA_DIST += $(TESTS)" + dists print "" print "TESTS_ENVIRONMENT = TESTS=\"" + reps + "\"" print "TEST_EXTENSIONS = .sh" print "summary.log:" + logs print "" print "tests.tex: " + depends gerris-snapshot-131206/test/poiseuille/0000755000175100017510000000000012250371673015102 500000000000000gerris-snapshot-131206/test/poiseuille/bagnold/0000755000175100017510000000000012250371673016510 500000000000000gerris-snapshot-131206/test/poiseuille/bagnold/bagnold.gfs0000644000175100017510000000440712250371171020535 00000000000000# Title: Bagnold flow of a granular material # # Description: # # The flow of a granular material down an inclined plane is simulated # using a "$\mu(I)$" rheology. The computed velocity profile is # compared with Bagnold's theoretical solution. # Figure \ref{convergence} illustrates the norms of the error between # the computed and theoretical solutions as functions of spatial # resolution. # # \begin{figure}[htbp] # \caption{\label{convergence}Convergence of the error norms as functions # of resolution (number of grid points across the channel).} # \begin{center} # \includegraphics[width=\hsize]{convergence.eps} # \end{center} # \end{figure} # # Author: Pierre-Yves Lagr\'ee # Command: sh ../poiseuille.sh bagnold.gfs # Version: 100416 # Required files: error.ref # Generated files: convergence.eps # # Slope angle Define ALPHA 0.43 # Grain size Define D 0.04 # Bagnold's solution Define U0 (sqrt(cos(ALPHA))*(-0.114 + 0.3*tan(ALPHA))/(D*(0.64 - tan(ALPHA)))) Define UB(x) ((1. - pow(1. - x, 1.5))*2./3.*U0) 1 1 GfsSimulation GfsBox GfsGEdge { y = 0.5 } { Time { iend = 1000 dtmax = 5 } # Ignore inertia AdvectionParams { scheme = none } ApproxProjectionParams { tolerance = 1e-8 } ProjectionParams { tolerance = 1e-8 } # mu(I) granular rheology SourceViscosity {} { double In = sqrt(2.)*D*D2/sqrt(fabs(P)); double muI = .38 + (.26)*In/(.3 + In); return MAX((muI*P)/(sqrt(2.)*D2), 0.); } { beta = 1 } # gravity Source V -cos(ALPHA) Source U sin(ALPHA) Refine LEVEL Init {} { # Start with an arbitrary velocity profile, here twice # Bagnold's solution U = 2.*UB(y) # Start with the hydrostatic pressure profile P = (1. - y)*cos(ALPHA) } OutputTime { istep = 10 } stderr OutputProjectionStats { istep = 10 } stderr OutputDiffusionStats { istep = 10 } stderr EventStop { istart = 10 istep = 10 } U 5e-6 DU OutputScalarNorm { istep = 10 } du-LEVEL { v = DU } OutputSimulation { start = end } end-LEVEL.txt { format = text } OutputErrorNorm { start = end } { awk '{print LEVEL,$5,$7,$9}' } { v = U } { # Bagnold's solution s = UB(y) } } GfsBox { top = Boundary { BcNeumann V 0 BcDirichlet P 0 } bottom = Boundary { BcDirichlet U 0 } } 1 1 right gerris-snapshot-131206/test/poiseuille/bagnold/error.ref0000644000175100017510000000020012250371171020240 000000000000003 3.635e-02 3.880e-02 5.185e-02 4 1.157e-02 1.218e-02 1.437e-02 5 3.291e-03 3.390e-03 5.835e-03 6 8.704e-04 9.011e-04 2.402e-03 gerris-snapshot-131206/test/poiseuille/error.ref0000644000175100017510000000020012250371171016632 000000000000003 1.953e-03 1.953e-03 1.954e-03 4 4.884e-04 4.884e-04 4.887e-04 5 1.222e-04 1.222e-04 1.224e-04 6 3.106e-05 3.107e-05 3.185e-05 gerris-snapshot-131206/test/poiseuille/metric/0000755000175100017510000000000012250371673016365 500000000000000gerris-snapshot-131206/test/poiseuille/metric/metric.gfs0000644000175100017510000000275712250371171020275 00000000000000# Title: Poiseuille flow with metric # # Description: # # A simple Poiseuille flow but using a non-uniformly-stretch metric # across the channel. # Figure \ref{convergence} illustrates the norms of the error between # the computed and theoretical solutions as functions of spatial # resolution. # # \begin{figure}[htbp] # \caption{\label{convergence}Convergence of the error norms as functions # of resolution (number of grid points across the channel).} # \begin{center} # \includegraphics[width=\hsize]{convergence.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../poiseuille.sh metric.gfs # Version: 111025 # Required files: error.ref # Generated files: convergence.eps # 1 1 GfsSimulation GfsBox GfsGEdge {} { # use a non-uniformly-stretched metric in the y-direction # the grid points are denser close to the wall Metric M { y = tanh(4.*ry)/tanh(4./2.)/2. } Refine LEVEL # use backward Euler to avoid Crank-Nicholson oscillations in time SourceViscosity 1. { beta = 1 } Source U 1 # add a transverse source term to also test hydrostatic balance Source V 1 EventStop { istep = 1 } U 1e-6 DU ProjectionParams { tolerance = 1e-6 } ApproxProjectionParams { tolerance = 1e-6 } OutputErrorNorm { start = end } { awk '{print LEVEL,$5,$7,$9}' } { v = U } { s = 1./2.*(1./4 - y*y) } } GfsBox { bottom = Boundary { BcDirichlet U 0 } top = Boundary { BcDirichlet U 0 } } 1 1 right gerris-snapshot-131206/test/poiseuille/metric/error.ref0000644000175100017510000000020012250371171020115 000000000000003 6.735e-03 6.983e-03 8.068e-03 4 1.725e-03 1.790e-03 2.081e-03 5 4.331e-04 4.495e-04 5.230e-04 6 1.077e-04 1.117e-04 1.298e-04 gerris-snapshot-131206/test/poiseuille/poiseuille.sh0000644000175100017510000000201012250371171017512 00000000000000levels="3 4 5 6" if test x$donotrun != xtrue; then rm -f error for level in $levels; do if gerris2D -DLEVEL=$level $1 >> error; then : else exit 1 fi done fi if cat < 1e-6: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/poiseuille/poiseuille.gfs0000644000175100017510000000264212250371171017672 00000000000000# Title: Poiseuille flow # # Description: # # A simple parabolic Poiseuille flow in a periodic channel with a # constant along-channel acceleration $a$. The theoretical solution is given by: # $$u(y)={a\over 2\nu}(1/4-y^2)$$ # Figure \ref{convergence} illustrates the norms of the error between # the computed and theoretical solutions as functions of spatial # resolution. # # \begin{figure}[htbp] # \caption{\label{convergence}Convergence of the error norms as functions # of resolution (number of grid points across the channel).} # \begin{center} # \includegraphics[width=\hsize]{convergence.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh poiseuille.sh poiseuille.gfs # Version: 100416 # Required files: poiseuille.sh error.ref # Generated files: convergence.eps # 1 1 GfsSimulation GfsBox GfsGEdge {} { Refine LEVEL # use backward Euler to avoid Crank-Nicholson oscillations in time SourceViscosity 1. { beta = 1 } Source U 1 # add a transverse source term to also test hydrostatic balance Source V 1 EventStop { istep = 1 } U 1e-6 DU ProjectionParams { tolerance = 1e-6 } ApproxProjectionParams { tolerance = 1e-6 } OutputErrorNorm { start = end } { awk '{print LEVEL,$5,$7,$9}' } { v = U } { s = 1./2.*(1./4 - y*y) } } GfsBox { bottom = Boundary { BcDirichlet U 0 } top = Boundary { BcDirichlet U 0 } } 1 1 right gerris-snapshot-131206/test/poiseuille/river/0000755000175100017510000000000012250371673016231 500000000000000gerris-snapshot-131206/test/poiseuille/river/river.sh0000644000175100017510000000153112250371171017625 00000000000000nlayers="8 16 32 64" if test x$donotrun != xtrue; then rm -f error for nl in $nlayers; do if gerris2D -DNU=1. -DA=1. -DNL=$nl $1 >> error; then : else exit 1 fi done fi if cat < 1e-6: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/poiseuille/river/error.ref0000644000175100017510000000007312250371171017771 000000000000008 0.000488341 16 0.000122188 32 3.07801e-05 64 7.69127e-06 gerris-snapshot-131206/test/poiseuille/river/river.gfs0000644000175100017510000000305312250371171017773 00000000000000# Title: Poiseuille flow with multilayer Saint-Venant # # Description: # # Similar test case but for a half-Poiseuille flow solved using the # multi-layer Saint-Venant solver. # # \begin{figure}[htbp] # \caption{\label{convergence}Convergence of the error norms as functions # of resolution (number of grid points in the channel depth).} # \begin{center} # \includegraphics[width=\hsize]{convergence.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh river.sh river.gfs # Version: 120620 # Required files: river.sh error.ref # Generated files: convergence.eps # 1 1 GfsRiver GfsBox GfsGEdge {} { Layers NL PhysicalParams { L = 1. } Init {} { P = 0.5 } Source U A*P/NL EventStop { istep = 1 } U 1e-8 DU # OutputTime { istep = 1 } stderr Time { iend = 20 } OutputSimulation { start = end } { awk '{ nl = NL; if ($1 == "#") { for (i = 2; i <= NF; i++) { split($i,a,":") if (a[2] == "U0") start = a[1]; } } else { dz = $4/nl; emax = 0.; for (i = 0; i < nl; i++) { z = dz*(0.5+i) u = A/(2.*NU)*(1./4 - (0.5 - z)*(0.5 - z)) eu = u - $(start+i)/dz if (eu < 0.) eu = -eu; if (eu > emax) emax = eu; } print nl,emax } }' } { format = text } } { # vertical viscosity nu = NU } GfsBox { top = Boundary bottom = Boundary } 1 1 right gerris-snapshot-131206/test/rossby.sh0000755000175100017510000000003112250371662014520 00000000000000python -u test.py rossby gerris-snapshot-131206/test/nz.sh0000755000175100017510000000002512250371662013631 00000000000000python -u test.py nz gerris-snapshot-131206/test/electro/0000755000175100017510000000000012250371674014366 500000000000000gerris-snapshot-131206/test/electro/figure.gfv0000644000175100017510000000241712250371171016267 00000000000000# GfsView 2D View { tx = 0 ty = -0.0610865 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 2.34266 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Phi { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 100 } Vectors { r = 0.0366369 g = 0.0660868 b = 0.992248 shading = Constant maxlevel = 8 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } U V { scale = 0.2 use_scalar = 0 } VOF { r = 1 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } T { reversed = 0 use_scalar = 0 draw_edges = 0 interpolate = 0 } Boundaries { r = 0.171145 g = 0.827527 b = 0.180316 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } Isoline { r = 0 g = 0.919661 b = 1 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } x-y { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 0 levels = 0 } gerris-snapshot-131206/test/electro/convergence.ref0000644000175100017510000000014712250371171017274 000000000000008 0.00141608 0.00178271 9 0.000818828 0.00105673 10 0.000511782 0.000621844 11 0.000373595 0.000462139 gerris-snapshot-131206/test/electro/electro.sh0000644000175100017510000000354312250371171016274 00000000000000if test x$donotrun != xtrue; then awk 'BEGIN{for (x = 0.35/100.; x <= 0.35; x += 0.35/100.) print x,x,0;}' > thetapi4 cp -f electro.gfs result-7.gfs rm -f fprof-* convergence for level in 8 9 10; do level1=`expr $level - 1` echo -n "$level " >> convergence if sed -e 's/GfsTime.*$/Time { end = 1 }/' \ -e "s/maxlevel = $level1/maxlevel = $level/g" < result-$level1.gfs | \ gerris2D - 2> log; then mv -f result.gfs result-$level.gfs mv -f fprof fprof-$level cat log >> convergence else cat log > /dev/stderr exit 1 fi done fi if echo "Save figure.eps { format = EPS }" | gfsview-batch2D result-10.gfs figure.gfv; then : else exit 1 fi if cat < 1e-6 or\ (Curve('convergence',1,3) - Curve('convergence.ref',1,3)).max() > 1e-6 or\ Curve('rhoe',3,5).max() > 1e-9: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/electro/electro.gfs0000644000175100017510000001051412250371171016435 00000000000000# Title: Equilibrium of a droplet suspended in an electric field # # Description: # # A conducting droplet is suspended in a conducting liquid of the same # density. A constant horizontal potential difference is imposed far # from the droplet. At equilibrium, surface tension balances the # normal electrical stresses while recirculations are induced by # tangential electrical stresses due to the variable charge distribution # along the interface (Figure \ref{recirculation}). # # \begin{figure}[htbp] # \caption{\label{recirculation}Axisymmetric numerical solution in # stationary regime. Equipotential lines (black), interface (red), # velocity field (blue) and 45 degrees transect line (light blue).} # \begin{center} # \includegraphics[width=0.8\hsize]{figure.eps} # \end{center} # \end{figure} # # In the limit of Stokes flows, an analytical solution for the # velocity field is available \cite{taylor66,tomar2007}. Figure # \ref{profile} gives a comparison of the numerical and theoretical # results for the radial and azimuthal components of the velocity # along a transect inclined at 45 degrees. # # A more detailed discussion of this simulation is given in # \cite{lopez-herrera2011}. # # \begin{figure}[htbp] # \caption{\label{profile}Radial and azimuthal components of the # velocity along a 45 degrees transect. The lines show the theoretical # solution and the symbols the numerical results. The (adaptive) # maximum spatial resolution is such that $R/h=51.2$ on the interface.} # \begin{center} # \includegraphics[width=0.8\hsize]{profile.eps} # \end{center} # \end{figure} # # The total charge is conserved to within round-off errors. # # Author: Jose M. L\'opez-Herrera S\'anchez # Command: sh electro.sh # Version: 100527 # Required files: electro.sh figure.gfv convergence.ref # Running time: 15 minutes # Generated files: profile.eps figure.eps GModule electrohydro 1 0 GfsElectroHydroAxi GfsBox GfsGEdge {} { Global { #define R0 0.1 #define R 5.1 #define Q 10 #define Ef 1.34 #define Cmu 0.10 #define F 50. } PhysicalParams { L = 2 } Time { end = 1 } VariableTracer Rhoe VariableTracerVOF T VariableCurvature K T SourceTension T 1 K SourceViscosity Cmu InitFraction T (R0*R0 - (x*x + y*y)) AdaptGradient { istep = 1 } { cmax = 1e-4 minlevel = 4 maxlevel = 7 } T AdaptError { istep = 1 } { cmax = 2e-4 maxlevel = 7 } U AdaptError { istep = 1 } { cmax = 2e-4 maxlevel = 7 } V SourceElectric SourceDiffusionExplicit Rhoe F*((1. - T)+ R*T) Phi Init {} { Phi = Ef*x } EventStop { istep = 10 } Rhoe 0.001 { relative = 1 } # OutputTime { istep = 10 } stderr # OutputProjectionStats { istep = 10 } stderr # OutputDiffusionStats { istep = 10 } stderr # OutputSimulation { istep = 10 } stdout # OutputTiming { istep = 100 } stderr OutputScalarSum { istep = 10 } rhoe { v = Rhoe } OutputLocation { start = end } { awk ' BEGIN { R0 = 0.1 Ef = 1.34 mu = 0.1 ep2 = 1. R = 5.1 Q = 10. lambda = 1. factor = R0*Ef*Ef*ep2/mu theta = 3.14159265358979/4. A=-9./10.*(R-Q)/(R+2.)**2/(1.+lambda) st = sr = 0. sn = 0. } function radius(x,y) { return sqrt(x*x+y*y)/R0 } function vr(x,y,vx,vy) { return (vx*x+vy*y)/(factor*sqrt(x*x+y*y)) } function vt(x,y,vx,vy) { return (vx*y-vy*x)/(factor*sqrt(x*x+y*y)) } # Theoretical velocity profile function vtr(x) { if (x < 1.) return A*x*(1.-x**2)*(3.*sin(theta)**2-1.); else return A*x**(-2)*(x**(-2)-1.)*(3.*sin(theta)**2-1.); } function vtt(x) { if (x < 1.) return 3.*A/2.*x*(1.-5./3.*x**2)*sin(2.*theta); else return -A*x**(-4)*sin(2.*theta); } { if ($1 != "#") { r = radius($2,$3) tvr = vtr(r) tvt = vtt(r) print r,vr($2,$3,$7,$8),vt($2,$3,$7,$8),tvr,tvt sr += (vr($2,$3,$7,$8) - tvr)**2 st += (vt($2,$3,$7,$8) - tvt)**2 sn += 1. } } END { print sqrt(sr/sn),sqrt(st/sn) > "/dev/stderr" }' > fprof } thetapi4 OutputSimulation { start = end } result.gfs } { # Electric parameters perm = (Q*T + (1. - T)) charge = Rhoe ElectricProjectionParams { tolerance = 1e-4 } } GfsBox { right = Boundary { BcDirichlet Phi Ef*x } left = Boundary { BcDirichlet Phi Ef*x } top = Boundary { BcDirichlet Phi Ef*x } bottom = Boundary } gerris-snapshot-131206/test/debye.sh0000755000175100017510000000003012250371662014266 00000000000000python -u test.py debye gerris-snapshot-131206/test/oscillation.sh0000755000175100017510000000003612250371662015524 00000000000000python -u test.py oscillation gerris-snapshot-131206/test/nonlinear.sh0000755000175100017510000000003412250371662015167 00000000000000python -u test.py nonlinear gerris-snapshot-131206/test/parabola/0000755000175100017510000000000012250371673014511 500000000000000gerris-snapshot-131206/test/parabola/solid/0000755000175100017510000000000012250371673015623 500000000000000gerris-snapshot-131206/test/parabola/solid/error.ref0000644000175100017510000000024412250371171017363 000000000000005 0.00693689 0.012302 0.08361 6 0.00219188 0.00418086 0.04504 7 0.000793297 0.00155096 0.02427 8 0.000276496 0.000571011 0.01272 9 0.000110704 0.000227192 0.006498 gerris-snapshot-131206/test/parabola/solid/solid.gfs0000644000175100017510000000617512250371171017360 00000000000000# Title: Parabolic container with embedded solid # # Description: # # Same test case but with a slightly-inclined, narrow channel defined # using embedded solid boundaries. # # See also \cite{an2012} for details. # # \begin{figure}[htbp] # \caption{\label{u0}Time evolution of the (spatially constant) # horizontal velocity. Seven levels of refinement.} # \begin{center} # \includegraphics[width=0.8\hsize]{u0.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{convergence}Evolution of the relative elevation # error norms as functions of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{convergence.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{convergence-u}Evolution of the relative velocity error # L2-norm as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{convergence-u.eps} # \end{center} # \end{figure} # # Author: Hyunuk An, Soonyoung Yu and St\'ephane Popinet # Command: sh ../parabola.sh solid.gfs # Version: 120314 # Required files: error.ref # Generated files: u0.eps convergence.eps convergence-u.eps # Define h0 10. Define a 3000. Define tau 1e-3 Define B 5 Define G 9.81 Define SLOPE (0.3/pow(2., LEVEL)) Define ANGLE (atan(SLOPE)) Define R(x,y) ((x)*cos(ANGLE) + (y)*sin(ANGLE)) 1 0 GfsRiver GfsBox GfsGEdge {} { # Analytical solution, see Sampson, Easton, Singh, 2006 Global { static gdouble Psi (double x, double y, double t) { double p = sqrt (8.*G*h0)/a; double s = sqrt (p*p - tau*tau)/2.; return a*a*B*B*exp (-tau*t)/(8.*G*G*h0)*(- s*tau*sin (2.*s*t) + (tau*tau/4. - s*s)*cos (2.*s*t)) - B*B*exp(-tau*t)/(4.*G) - exp (-tau*t/2.)/G*(B*s*cos (s*t) + tau*B/2.*sin (s*t))*R(x,y); } } PhysicalParams { L = 10000 } Refine LEVEL Solid ({ double line1 = SLOPE*x - y + 28000./pow(2.,LEVEL); double line2 = - SLOPE*x + y + 28000./pow(2.,LEVEL); return union (line1, line2); }) Init {} { Zb = h0*pow(R(x,y), 2.)/(a*a) P = MAX (0., h0 + Psi (x, y, 0.) - Zb) } Init { istep = 1 } { Pt = MAX (0., h0 + Psi (x, y, t) - Zb) } PhysicalParams { g = G } SourceCoriolis 0 tau Time { end = 6000 } OutputSimulation { start = 1500 } { awk ' function atan(x) { return atan2(x,1.); } function pow(x,y) { return x**y; } { if ($1 == "#") print $0; else { printf ("%g", R($1,$2)); for (i = 2; i <= NF; i++) printf (" %s", $i); printf ("\n"); } }' > sim-LEVEL-1500.txt } { format = text } OutputSimulation { start = end } end-LEVEL.txt { format = text } OutputScalarSum { istep = 10 } ke-LEVEL { v = (P > 0. ? U*U/P : 0.) } OutputScalarSum { step = 50 } vol-LEVEL { v = P } OutputScalarSum { step = 50 } U-LEVEL { v = U*cos (ANGLE) + V*sin(ANGLE) } OutputErrorNorm { istep = 1 } error-LEVEL { v = P } { s = Pt v = DP } } { # this is necessary to obtain good convergence rates at high # resolutions dry = 1e-4 } GfsBox { left = Boundary right = Boundary } gerris-snapshot-131206/test/parabola/parabola.sh0000644000175100017510000000653312250371171016546 00000000000000levels="5 6 7 8 9" if test x$donotrun != xtrue; then for level in $levels; do if gerris2D -DLEVEL=$level $1; then : else exit 1 fi done fi for level in $levels; do awk -v level=$level 'BEGIN{ s1 = 0.; s2 = 0.; smax = 0.; n = 0; h0 = 10.; }{ n++; s1 += $5; s2 += $7*$7; if ($9 > smax) smax = $9; }END { print level, s1/n/h0, sqrt(s2/n)/h0, smax/h0; }' < error-$level done > error for level in $levels; do if paste U-$level vol-$level | awk -v level=$level 'BEGIN { sum = 0.; n = 0; h0 = 10. a = 3000. tau = 1e-3 B = 5. G = 9.81 p = sqrt (8.*G*h0)/a s = sqrt (p*p - tau*tau)/2. } { u0 = $5/$10; t = $3; ref = B*exp (-tau*t/2.)*sin (s*t); sum += (u0 - ref)*(u0 - ref); n += 1; } END { print level, sqrt (sum/n); }'; then : else exit 1; fi done > error-u if cat < bed(x) ? psi(x) : bed(x) lc 2 t 'Analytical', \ bed(x) lw 3 lc 1 lt 1 t 'Bed profile' EOF else exit 1 fi if cat < 1e-4: print (Curve('error',1,4) - Curve('error.ref',1,4)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/parabola/error.ref0000644000175100017510000000024412250371171016251 000000000000005 0.00687295 0.0121984 0.08313 6 0.00218884 0.00417614 0.04465 7 0.000790721 0.00154719 0.02417 8 0.000275948 0.000570273 0.0127 9 0.000110573 0.000227006 0.006487 gerris-snapshot-131206/test/parabola/parabola.gfs0000644000175100017510000000671212250371171016712 00000000000000# Title: Oscillations in a parabolic container # # Description: # # Analytical solutions for the damped oscillations of a liquid in a # parabolic container have been derived by Sampson et al # \cite{sampson2006,liang2008}. Figure \ref{elevation} illustrates the # numerical and analytical solutions at $t = 1500$ seconds. Wetting # and drying occur at the two moving contact points and hydrostatic # balance is approached as time passes. # # Figure \ref{u0} gives the analytical and numerical solutions for the # horizontal component of velocity (which is spatially # constant). Figures \ref{convergence} and \ref{convergence-u} give # the relative errors in surface elevation and horizontal velocity # respectively, as functions of spatial resolution. # # The errors are small and larger-than-first-order convergence rates # are obtained. # # See also \cite{popinet2011c} for details. # # \begin{figure}[htbp] # \caption{\label{elevation}Solution at $t = 1500$ seconds. Six levels of refinement.} # \begin{center} # \includegraphics[width=0.8\hsize]{elevation.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{u0}Time evolution of the (spatially constant) # horizontal velocity. Seven levels of refinement.} # \begin{center} # \includegraphics[width=0.8\hsize]{u0.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{convergence}Evolution of the relative elevation # error norms as functions of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{convergence.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{convergence-u}Evolution of the relative velocity error # L2-norm as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{convergence-u.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh parabola.sh parabola.gfs # Version: 1.3.1 # Required files: parabola.sh error.ref # Generated files: elevation.eps u0.eps convergence.eps convergence-u.eps # Define h0 10. Define a 3000. Define tau 1e-3 Define B 5 Define G 9.81 1 0 GfsRiver GfsBox GfsGEdge {} { # Analytical solution, see Sampson, Easton, Singh, 2006 Global { static gdouble Psi (double x, double t) { double p = sqrt (8.*G*h0)/a; double s = sqrt (p*p - tau*tau)/2.; return a*a*B*B*exp (-tau*t)/(8.*G*G*h0)*(- s*tau*sin (2.*s*t) + (tau*tau/4. - s*s)*cos (2.*s*t)) - B*B*exp(-tau*t)/(4.*G) - exp (-tau*t/2.)/G*(B*s*cos (s*t) + tau*B/2.*sin (s*t))*x; } } PhysicalParams { L = 10000 } RefineSurface LEVEL (y - 10000.*(0.5 - 1./pow(2,LEVEL))) InitMask {} (y < 10000.*(0.5 - 1./pow(2,LEVEL))) Init {} { Zb = h0*(x/a)*(x/a) P = MAX (0., h0 + Psi (x, 0.) - Zb) } Init { istep = 1 } { Pt = MAX (0., h0 + Psi (x, t) - Zb) } # Better convergence rates are obtained at lower CFL # AdvectionParams { cfl = 0.1 } PhysicalParams { g = G } SourceCoriolis 0 tau Time { end = 6000 } OutputSimulation { start = 1500 } sim-LEVEL-%g.txt { format = text } OutputSimulation { start = end } end-LEVEL.txt { format = text } OutputScalarSum { istep = 10 } ke-LEVEL { v = (P > 0. ? U*U/P : 0.) } OutputScalarSum { step = 50 } vol-LEVEL { v = P } OutputScalarSum { step = 50 } U-LEVEL { v = U } OutputErrorNorm { istep = 1 } error-LEVEL { v = P } { s = Pt v = DP } } { # this is necessary to obtain good convergence rates at high # resolutions dry = 1e-4 } GfsBox { left = Boundary right = Boundary } gerris-snapshot-131206/test/capwave/0000755000175100017510000000000012250371673014356 500000000000000gerris-snapshot-131206/test/capwave/capwave.sh0000644000175100017510000000345212250371171016255 00000000000000levels="3 4 5 6" if test x$donotrun != xtrue; then for level in $levels; do if sed "s/LEVEL/$level/g" < $1 | gerris2D -; then : else exit 1; fi done fi rm -f convergence for level in $levels; do if awk -v level=$level 'BEGIN {s = 0.; n = 0; } { t = $1; y = $2; getline < "prosperetti" s += (y - $2)*(y - $2); n += 1; } END { s = sqrt (s/n)/0.01; printf ("%d %g\n", level, s); }' < wave-$level >> convergence; then : else exit 1; fi done awk 'BEGIN{first=1}{ if (first) printf("Gerris &\n%.5f",$2); else printf(" &\n%.5f",$2); first=0; }' < convergence > convergence.tex if cat <> gerris.tex if cat < 1e-5: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/capwave/gravity/0000755000175100017510000000000012250371673016043 500000000000000gerris-snapshot-131206/test/capwave/gravity/prosperetti0000644000175100017510000003216612250371171020267 000000000000000 0.01 0.036167 0.0099936 0.072334 0.00997468 0.1085 0.0099435 0.14467 0.00990031 0.18083 0.00984532 0.217 0.00977877 0.25317 0.00970087 0.28933 0.00961185 0.3255 0.00951193 0.36167 0.00940137 0.39783 0.00928039 0.434 0.00914926 0.47017 0.00900822 0.50634 0.00885755 0.5425 0.00869751 0.57867 0.00852839 0.61484 0.00835047 0.651 0.00816404 0.68717 0.0079694 0.72334 0.00776686 0.7595 0.00755673 0.79567 0.00733931 0.83184 0.00711494 0.868 0.00688394 0.90417 0.00664663 0.94034 0.00640336 0.9765 0.00615445 1.0127 0.00590026 1.0488 0.00564112 1.085 0.00537737 1.1212 0.00510938 1.1573 0.00483749 1.1935 0.00456204 1.2297 0.00428339 1.2658 0.0040019 1.302 0.00371792 1.3382 0.0034318 1.3743 0.00314389 1.4105 0.00285454 1.4467 0.0025641 1.4828 0.00227293 1.519 0.00198136 1.5552 0.00168974 1.5913 0.0013984 1.6275 0.0011077 1.6637 0.00081795 1.6998 0.000529491 1.736 0.000242646 1.7722 4.22646e-05 1.8083 0.000324926 1.8445 0.000605028 1.8807 0.000882266 1.9168 0.00115634 1.953 0.00142696 1.9892 0.00169384 2.0253 0.0019567 2.0615 0.00221526 2.0977 0.00246927 2.1338 0.00271846 2.17 0.00296259 2.2062 0.00320141 2.2423 0.00343469 2.2785 0.0036622 2.3147 0.00388373 2.3508 0.00409907 2.387 0.00430802 2.4232 0.00451038 2.4593 0.00470599 2.4955 0.00489466 2.5317 0.00507624 2.5678 0.00525057 2.604 0.00541751 2.6402 0.00557692 2.6763 0.00572869 2.7125 0.00587269 2.7487 0.00600883 2.7848 0.00613702 2.821 0.00625715 2.8572 0.00636918 2.8933 0.00647302 2.9295 0.00656863 2.9657 0.00665595 3.0018 0.00673497 3.038 0.00680565 3.0742 0.00686798 3.1103 0.00692196 3.1465 0.00696759 3.1827 0.00700488 3.2188 0.00703386 3.255 0.00705457 3.2912 0.00706704 3.3273 0.00707133 3.3635 0.0070675 3.3997 0.00705561 3.4358 0.00703576 3.472 0.00700803 3.5082 0.0069725 3.5443 0.00692929 3.5805 0.00687851 3.6167 0.00682027 3.6528 0.00675471 3.689 0.00668196 3.7252 0.00660216 3.7613 0.00651546 3.7975 0.00642202 3.8337 0.006322 3.8698 0.00621556 3.906 0.00610289 3.9422 0.00598415 3.9783 0.00585955 4.0145 0.00572926 4.0507 0.00559349 4.0868 0.00545243 4.123 0.0053063 4.1592 0.0051553 4.1953 0.00499963 4.2315 0.00483954 4.2677 0.00467522 4.3038 0.0045069 4.34 0.00433482 4.3762 0.0041592 4.4123 0.00398027 4.4485 0.00379826 4.4847 0.0036134 4.5208 0.00342595 4.557 0.00323612 4.5932 0.00304416 4.6293 0.00285031 4.6655 0.0026548 4.7017 0.00245788 4.7379 0.00225977 4.774 0.00206073 4.8102 0.00186098 4.8464 0.00166077 4.8825 0.00146032 4.9187 0.00125987 4.9549 0.00105965 4.991 0.000859881 5.0272 0.0006608 5.0634 0.000462626 5.0995 0.000265579 5.1357 6.98778e-05 5.1719 0.000124264 5.208 0.000316636 5.2442 0.00050703 5.2804 0.000695245 5.3165 0.000881081 5.3527 0.00106434 5.3889 0.00124484 5.425 0.0014224 5.4612 0.00159682 5.4974 0.00176794 5.5335 0.00193559 5.5697 0.0020996 5.6059 0.00225981 5.642 0.00241608 5.6782 0.00256824 5.7144 0.00271617 5.7505 0.00285972 5.7867 0.00299877 5.8229 0.00313319 5.859 0.00326287 5.8952 0.00338769 5.9314 0.00350756 5.9675 0.00362237 6.0037 0.00373204 6.0399 0.00383647 6.076 0.0039356 6.1122 0.00402935 6.1484 0.00411766 6.1845 0.00420047 6.2207 0.00427773 6.2569 0.0043494 6.293 0.00441543 6.3292 0.00447582 6.3654 0.00453052 6.4015 0.00457952 6.4377 0.00462281 6.4739 0.0046604 6.51 0.00469227 6.5462 0.00471845 6.5824 0.00473895 6.6185 0.00475379 6.6547 0.00476301 6.6909 0.00476663 6.727 0.00476471 6.7632 0.00475728 6.7994 0.0047444 6.8355 0.00472614 6.8717 0.00470255 6.9079 0.00467371 6.944 0.00463969 6.9802 0.00460058 7.0164 0.00455646 7.0525 0.00450742 7.0887 0.00445357 7.1249 0.004395 7.161 0.00433182 7.1972 0.00426414 7.2334 0.00419208 7.2695 0.00411575 7.3057 0.00403528 7.3419 0.00395079 7.378 0.00386242 7.4142 0.0037703 7.4504 0.00367456 7.4865 0.00357534 7.5227 0.0034728 7.5589 0.00336707 7.595 0.0032583 7.6312 0.00314665 7.6674 0.00303226 7.7035 0.00291529 7.7397 0.0027959 7.7759 0.00267424 7.812 0.00255047 7.8482 0.00242476 7.8844 0.00229725 7.9205 0.00216813 7.9567 0.00203754 7.9929 0.00190565 8.029 0.00177262 8.0652 0.00163862 8.1014 0.0015038 8.1375 0.00136834 8.1737 0.00123239 8.2099 0.00109611 8.246 0.000959663 8.2822 0.000823208 8.3184 0.000686901 8.3545 0.000550899 8.3907 0.000415356 8.4269 0.000280425 8.463 0.000146256 8.4992 1.29976e-05 8.5354 0.000119203 8.5715 0.000250204 8.6077 0.000379862 8.6439 0.000508039 8.68 0.0006346 8.7162 0.000759411 8.7524 0.000882344 8.7885 0.00100327 8.8247 0.00112207 8.8609 0.00123862 8.897 0.00135281 8.9332 0.00146452 8.9694 0.00157364 9.0055 0.00168008 9.0417 0.00178373 9.0779 0.00188449 9.114 0.00198226 9.1502 0.00207697 9.1864 0.00216853 9.2225 0.00225686 9.2587 0.00234188 9.2949 0.00242352 9.331 0.00250171 9.3672 0.0025764 9.4034 0.00264752 9.4395 0.00271503 9.4757 0.00277887 9.5119 0.002839 9.548 0.00289538 9.5842 0.00294798 9.6204 0.00299677 9.6565 0.00304172 9.6927 0.00308281 9.7289 0.00312002 9.765 0.00315335 9.8012 0.00318279 9.8374 0.00320834 9.8735 0.00322999 9.9097 0.00324776 9.9459 0.00326165 9.982 0.00327169 10.018 0.00327789 10.054 0.00328027 10.091 0.00327887 10.127 0.00327372 10.163 0.00326485 10.199 0.0032523 10.235 0.00323612 10.271 0.00321636 10.308 0.00319306 10.344 0.0031663 10.38 0.00313611 10.416 0.00310257 10.452 0.00306575 10.488 0.0030257 10.525 0.00298251 10.561 0.00293625 10.597 0.002887 10.633 0.00283484 10.669 0.00277985 10.705 0.00272211 10.742 0.00266173 10.778 0.00259879 10.814 0.00253338 10.85 0.0024656 10.886 0.00239554 10.922 0.00232331 10.959 0.00224901 10.995 0.00217273 11.031 0.00209459 11.067 0.00201469 11.103 0.00193313 11.139 0.00185002 11.176 0.00176547 11.212 0.0016796 11.248 0.0015925 11.284 0.00150429 11.32 0.00141508 11.356 0.00132499 11.393 0.00123411 11.429 0.00114257 11.465 0.00105048 11.501 0.000957935 11.537 0.000865059 11.573 0.000771958 11.61 0.00067874 11.646 0.000585515 11.682 0.00049239 11.718 0.000399471 11.754 0.000306864 11.79 0.000214672 11.827 0.000122999 11.863 3.19457e-05 11.899 5.8388e-05 11.935 0.000147904 11.971 0.000236506 12.007 0.000324098 12.044 0.00041059 12.08 0.000495889 12.116 0.000579908 12.152 0.00066256 12.188 0.000743761 12.224 0.000823429 12.261 0.000901486 12.297 0.000977854 12.333 0.00105246 12.369 0.00112523 12.405 0.0011961 12.441 0.001265 12.478 0.00133187 12.514 0.00139664 12.55 0.00145927 12.586 0.00151969 12.622 0.00157785 12.658 0.00163371 12.695 0.00168722 12.731 0.00173834 12.767 0.00178702 12.803 0.00183324 12.839 0.00187695 12.875 0.00191814 12.912 0.00195677 12.948 0.00199281 12.984 0.00202626 13.02 0.00205709 13.056 0.00208528 13.092 0.00211083 13.129 0.00213373 13.165 0.00215397 13.201 0.00217156 13.237 0.00218649 13.273 0.00219877 13.309 0.0022084 13.346 0.0022154 13.382 0.00221979 13.418 0.00222156 13.454 0.00222076 13.49 0.00221739 13.526 0.00221149 13.563 0.00220307 13.599 0.00219218 13.635 0.00217884 13.671 0.00216309 13.707 0.00214497 13.743 0.00212452 13.78 0.00210177 13.816 0.00207678 13.852 0.0020496 13.888 0.00202026 13.924 0.00198883 13.96 0.00195536 13.997 0.0019199 14.033 0.0018825 14.069 0.00184324 14.105 0.00180216 14.141 0.00175934 14.177 0.00171483 14.214 0.0016687 14.25 0.00162102 14.286 0.00157185 14.322 0.00152126 14.358 0.00146933 14.394 0.00141612 14.431 0.0013617 14.467 0.00130616 14.503 0.00124955 14.539 0.00119196 14.575 0.00113347 14.611 0.00107413 14.648 0.00101404 14.684 0.00095326 14.72 0.000891873 14.756 0.000829954 14.792 0.000767577 14.828 0.000704819 14.865 0.000641755 14.901 0.00057846 14.937 0.000515009 14.973 0.000451477 15.009 0.000387937 15.045 0.000324463 15.082 0.000261128 15.118 0.000198003 15.154 0.00013516 15.19 7.26676e-05 15.226 1.05965e-05 15.262 5.09858e-05 15.299 0.000112012 15.335 0.000172417 15.371 0.000232135 15.407 0.000291104 15.443 0.000349261 15.479 0.000406547 15.516 0.000462902 15.552 0.000518269 15.588 0.000572591 15.624 0.000625817 15.66 0.000677891 15.696 0.000728765 15.733 0.000778389 15.769 0.000826716 15.805 0.000873701 15.841 0.000919301 15.877 0.000963475 15.913 0.00100618 15.95 0.00104739 15.986 0.00108706 16.022 0.00112515 16.058 0.00116165 16.094 0.00119651 16.13 0.00122971 16.167 0.00126123 16.203 0.00129105 16.239 0.00131914 16.275 0.00134549 16.311 0.00137007 16.347 0.00139288 16.384 0.00141391 16.42 0.00143314 16.456 0.00145057 16.492 0.00146618 16.528 0.00147999 16.564 0.00149198 16.601 0.00150217 16.637 0.00151054 16.673 0.00151711 16.709 0.00152188 16.745 0.00152487 16.781 0.00152608 16.818 0.00152553 16.854 0.00152322 16.89 0.00151919 16.926 0.00151345 16.962 0.00150601 16.998 0.00149691 17.035 0.00148616 17.071 0.00147379 17.107 0.00145983 17.143 0.0014443 17.179 0.00142725 17.215 0.00140869 17.252 0.00138867 17.288 0.00136722 17.324 0.00134437 17.36 0.00132016 17.396 0.00129464 17.432 0.00126784 17.469 0.00123981 17.505 0.00121057 17.541 0.00118019 17.577 0.00114871 17.613 0.00111616 17.649 0.00108259 17.686 0.00104806 17.722 0.00101261 17.758 0.000976289 17.794 0.000939143 17.83 0.000901225 17.866 0.000862583 17.903 0.000823268 17.939 0.000783332 17.975 0.000742825 18.011 0.000701798 18.047 0.000660303 18.083 0.000618392 18.12 0.000576117 18.156 0.000533528 18.192 0.000490678 18.228 0.000447619 18.264 0.0004044 18.3 0.000361075 18.337 0.000317692 18.373 0.000274304 18.409 0.000230959 18.445 0.000187708 18.481 0.0001446 18.517 0.000101682 18.554 5.90034e-05 18.59 1.66107e-05 18.626 2.54493e-05 18.662 6.71309e-05 18.698 0.000108389 18.734 0.00014918 18.771 0.000189461 18.807 0.000229189 18.843 0.000268323 18.879 0.000306822 18.915 0.000344649 18.951 0.000381764 18.988 0.00041813 19.024 0.000453713 19.06 0.000488477 19.096 0.000522388 19.132 0.000555416 19.168 0.000587529 19.205 0.000618697 19.241 0.000648892 19.277 0.000678088 19.313 0.00070626 19.349 0.000733382 19.385 0.000759433 19.422 0.00078439 19.458 0.000808236 19.494 0.00083095 19.53 0.000852516 19.566 0.000872919 19.602 0.000892145 19.639 0.00091018 19.675 0.000927015 19.711 0.00094264 19.747 0.000957046 19.783 0.000970227 19.819 0.000982177 19.856 0.000992894 19.892 0.00100237 19.928 0.00101062 19.964 0.00101763 20 0.0010234 20.036 0.00102794 20.073 0.00103126 20.109 0.00103335 20.145 0.00103424 20.181 0.00103392 20.217 0.00103241 20.253 0.00102971 20.29 0.00102585 20.326 0.00102084 20.362 0.00101468 20.398 0.0010074 20.434 0.000999018 20.47 0.000989547 20.507 0.00097901 20.543 0.000967427 20.579 0.000954819 20.615 0.000941211 20.651 0.000926626 20.687 0.000911088 20.724 0.000894624 20.76 0.000877259 20.796 0.000859022 20.832 0.000839941 20.868 0.000820044 20.904 0.000799361 20.941 0.000777922 20.977 0.000755759 21.013 0.000732903 21.049 0.000709385 21.085 0.000685239 21.121 0.000660497 21.158 0.000635193 21.194 0.00060936 21.23 0.000583033 21.266 0.000556246 21.302 0.000529034 21.338 0.000501431 21.375 0.000473473 21.411 0.000445194 21.447 0.000416631 21.483 0.000387817 21.519 0.00035879 21.555 0.000329582 21.592 0.000300231 21.628 0.000270771 21.664 0.000241236 21.7 0.000211662 21.736 0.000182083 21.772 0.000152532 21.809 0.000123044 21.845 9.3653e-05 21.881 6.4391e-05 21.917 3.52911e-05 21.953 6.38543e-06 21.989 2.22942e-05 22.026 5.07166e-05 22.062 7.88511e-05 22.098 0.000106668 22.134 0.000134137 22.17 0.000161229 22.206 0.000187918 22.243 0.000214174 22.279 0.000239972 22.315 0.000265285 22.351 0.000290088 22.387 0.000314357 22.423 0.000338069 22.46 0.000361199 22.496 0.000383727 22.532 0.000405631 22.568 0.000426892 22.604 0.000447489 22.64 0.000467405 22.677 0.000486623 22.713 0.000505125 22.749 0.000522897 22.785 0.000539923 22.821 0.000556191 22.857 0.000571688 22.894 0.000586402 22.93 0.000600322 22.966 0.00061344 23.002 0.000625746 23.038 0.000637233 23.074 0.000647894 23.111 0.000657724 23.147 0.000666719 23.183 0.000674874 23.219 0.000682188 23.255 0.000688659 23.291 0.000694285 23.328 0.000699068 23.364 0.00070301 23.4 0.000706111 23.436 0.000708376 23.472 0.000709809 23.508 0.000710415 23.545 0.0007102 23.581 0.00070917 23.617 0.000707335 23.653 0.000704702 23.689 0.000701281 23.725 0.000697083 23.762 0.000692119 23.798 0.0006864 23.834 0.000679939 23.87 0.00067275 23.906 0.000664848 23.942 0.000656246 23.979 0.000646962 24.015 0.00063701 24.051 0.000626408 24.087 0.000615174 24.123 0.000603325 24.159 0.00059088 24.196 0.000577859 24.232 0.000564281 24.268 0.000550167 24.304 0.000535536 24.34 0.000520411 24.376 0.000504812 24.413 0.000488762 24.449 0.000472282 24.485 0.000455395 24.521 0.000438124 24.557 0.000420492 24.593 0.000402523 24.63 0.000384239 24.666 0.000365664 24.702 0.000346822 24.738 0.000327738 24.774 0.000308434 24.81 0.000288935 24.847 0.000269266 24.883 0.000249449 24.919 0.00022951 24.955 0.000209472 24.991 0.000189358 25.027 0.000169194 25.064 0.000149002 25.1 0.000128806 25.136 0.000108629 25.172 8.84945e-05 25.208 6.84252e-05 25.244 4.84437e-05 25.281 2.85722e-05 25.317 8.83287e-06 25.353 1.07528e-05 25.389 3.01634e-05 25.425 4.9378e-05 25.461 6.83761e-05 25.498 8.71376e-05 25.534 0.000105643 25.57 0.000123872 25.606 0.000141808 25.642 0.000159431 25.678 0.000176723 25.715 0.000193669 25.751 0.00021025 25.787 0.00022645 25.823 0.000242255 25.859 0.000257649 25.895 0.000272618 25.932 0.000287148 25.968 0.000301226 26.004 0.000314839 26.04 0.000327976 26.076 0.000340625 26.112 0.000352776 26.149 0.000364418 26.185 0.000375543 26.221 0.000386143 26.257 0.000396208 26.293 0.000405732 26.329 0.000414708 26.366 0.000423131 26.402 0.000430995 26.438 0.000438295 26.474 0.000445029 26.51 0.000451193 26.546 0.000456784 26.583 0.000461801 26.619 0.000466242 26.655 0.000470108 26.691 0.000473398 gerris-snapshot-131206/test/capwave/gravity/gravity.gfs0000644000175100017510000000411512250371171020143 00000000000000# Title: Pure gravity wave # # Description: # # Similar to the capillary wave test case but for a pure gravity # wave. The density ratio is 10. The dynamic viscosities are # identical. # # The time-evolution of the amplitude given by Prosperetti's theory # and Gerris ($64^2$) is given on Figure \ref{amplitude}. # # \begin{table}[htbp] # \caption{\label{convergence}Convergence of the relative error between the analytical # solution and simulation results.} # \begin{center} # \begin{tabular}{|l|ccccc|} \hline # Method & $8^2$ & $16^2$ & $32^2$ & $64^2$ & $128^2$ \\ \hline # \input{convergence.tex} & 0.00417707 \\ # \end{tabular} # \end{center} # \end{table} # # \begin{figure}[htbp] # \caption{\label{amplitude}Evolution of the amplitude of the gravity wave as a # function of non-dimensional time $\tau=\omega_0 t$.} # \begin{center} # \includegraphics[width=\hsize]{amplitude.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../capwave.sh gravity.gfs # Version: 1.0.0 # Required files: convergence.ref prosperetti # Generated files: convergence.tex amplitude.eps # 1 1 GfsSimulation GfsBox GfsGEdge {} { Time { end = 1.66481717925811447992 } ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } Refine LEVEL VariableTracerVOFHeight T # Line below is for direct imposition of gravity acceleration # Source {} V 50 # It is better to use a formulation where the first-order # hydrostatic pressure is substracted away (in particular it # prevents the generation of "hydrostatic spurious currents") VariablePosition {} Y T y # acceleration of gravity is 50, the equivalent "reduced pressure" # is 50*(1. - 0.1) = 45 SourceTension {} T 45 Y SourceDiffusion {} U 0.0182571749236 SourceDiffusion {} V 0.0182571749236 PhysicalParams { alpha = 1./(T + 0.1*(1. - T)) } InitFraction {} T (y - 0.01*cos (2.*M_PI*x)) OutputScalarNorm { step = .00225584983639310905 } { awk '{printf ("%g %g\n", $3*16.032448313657, $9); fflush(stdout); }' > wave-LEVEL } { v = (T > 1e-6 && T < 1. - 1e-6 ? Y : 0.) } } GfsBox {} 1 1 right gerris-snapshot-131206/test/capwave/gravity/convergence.ref0000644000175100017510000000005712250371171020752 000000000000003 0.17816 4 0.0431471 5 0.0110681 6 0.00630056 gerris-snapshot-131206/test/capwave/surfer.tex0000644000175100017510000000005112250371171016313 00000000000000Surfer & - & - & 0.1168 & 0.0132 & 0.007 gerris-snapshot-131206/test/capwave/prost.tex0000644000175100017510000000005212250371171016155 00000000000000PROST & 0.2960 & 0.0818 & 0.0069 & 0.0018 gerris-snapshot-131206/test/capwave/capwave.gfs0000644000175100017510000000553612250371171016427 00000000000000# Title: Planar capillary waves # # Description: # # A small amplitude sinusoidal wave oscillates under surface # tension. Prosperetti \cite{prosperetti81} found a solution to this # initial value problem in the limit of a vanishingly small initial # amplitude. # # The domain size is 1x3 units, large enough to minimise the effect of # boundaries (Prosperetti's theory is valid for infinite domains). # # Table \ref{convergence} shows the convergence of various solvers as # a function of resolution: Gerris, the marker technique of # \cite{popinet99}, Surfer \cite{gueyffier98}, PROST and CLSVOF # \cite{gerlach2006}. The same data is represented on Figure \ref{fig-convergence}. # # The time-evolution of the amplitude given by Prosperetti's theory # and Gerris ($64^2$) is given on Figure \ref{amplitude}. # # \begin{table}[htbp] # \caption{\label{convergence}Convergence of the relative error between the analytical # solution and simulation results from various solvers.} # \begin{center} # \begin{tabular}{|l|ccccc|} \hline # Method & $8^2$ & $16^2$ & $32^2$ & $64^2$ & $128^2$ \\ \hline # \input{convergence.tex} & 0.000545 \\ # \input{markers.tex} \\ # \input{surfer.tex} \\ # \input{prost.tex} \\ # \input{clsvof.tex} \\ \hline # \end{tabular} # \end{center} # \end{table} # # \begin{figure}[htbp] # \caption{\label{fig-convergence}Convergence of the RMS error as a # function of resolution (number of grid points per wavelength) for # the methods indicated in the legend.} # \begin{center} # \includegraphics[width=\hsize]{convergence.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{amplitude}Evolution of the amplitude of the capillary wave as a # function of non-dimensional time $\tau=\omega_0 t$.} # \begin{center} # \includegraphics[width=\hsize]{amplitude.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh capwave.sh capwave.gfs # Version: 1.1.0 # Required files: capwave.sh convergence.ref prosperetti markers.tex surfer.tex prost.tex clsvof.tex # Generated files: convergence.tex amplitude.eps convergence.eps markers.tex surfer.tex prost.tex clsvof.tex # 3 5 GfsSimulation GfsBox GfsGEdge {} { Time { end = 2.2426211256 } ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } # Decrease the resolution linearly down to 3 levels close to the # bottom and top boundaries Refine floor(LEVEL + 1 - (LEVEL - 2)*fabs(y)/1.5) VariableTracerVOFHeight T VariableCurvature K T SourceTension T 1 K VariablePosition Y T y SourceDiffusion U 0.0182571749236 SourceDiffusion V 0.0182571749236 InitFraction T (y - 0.01*cos (2.*M_PI*x)) OutputScalarNorm { step = 3.04290519077e-3 } { awk '{printf ("%g %g\n", $3*11.1366559937, $9); fflush(stdout); }' > wave-LEVEL } { v = (T > 0. && T < 1. ? Y : 0.) } } GfsBox {} GfsBox {} GfsBox {} 1 1 right 2 2 right 3 3 right 1 2 top 1 3 bottom gerris-snapshot-131206/test/capwave/prosperetti0000644000175100017510000003331112250371171016573 000000000000000 0.01 0.0338878 0.0099944 0.0677755 0.00997795 0.101663 0.0099509 0.135551 0.00991345 0.169439 0.0098658 0.203326 0.00980815 0.237214 0.00974075 0.271102 0.0096637 0.30499 0.00957725 0.338877 0.0094816 0.372765 0.00937685 0.406653 0.0092633 0.440541 0.0091411 0.474428 0.0090105 0.508316 0.00887165 0.542204 0.0087248 0.576092 0.00857015 0.60998 0.00840795 0.643867 0.0082384 0.677755 0.00806175 0.711643 0.00787825 0.74553 0.0076881 0.779418 0.0074916 0.813306 0.00728895 0.847194 0.0070804 0.881081 0.0068662 0.914969 0.00664665 0.948857 0.006422 0.982745 0.0061925 1.01663 0.0059584 1.05052 0.00571995 1.08441 0.00547745 1.1183 0.0052312 1.15218 0.00498139 1.18607 0.00472836 1.21996 0.00447236 1.25385 0.00421366 1.28773 0.00395254 1.32162 0.00368927 1.35551 0.00342413 1.3894 0.00315738 1.42329 0.00288931 1.45717 0.00262018 1.49106 0.00235026 1.52495 0.00207982 1.55884 0.00180914 1.59272 0.00153848 1.62661 0.00126809 1.6605 0.000998245 1.69439 0.000729205 1.72828 0.000461218 1.76216 0.000194543 1.79605 7.05725e-05 1.82994 0.000333881 1.86383 0.00059514 1.89771 0.000854105 1.9316 0.00111055 1.96549 0.00136424 1.99938 0.00161495 2.03327 0.00186245 2.06715 0.00210654 2.10104 0.00234698 2.13493 0.0025836 2.16882 0.00281616 2.2027 0.00304448 2.23659 0.00326838 2.27048 0.00348767 2.30437 0.00370215 2.33825 0.00391166 2.37214 0.00411604 2.40603 0.00431513 2.43992 0.00450876 2.47381 0.00469679 2.50769 0.00487908 2.54158 0.0050555 2.57547 0.0052259 2.60936 0.00539015 2.64324 0.00554815 2.67713 0.00569985 2.71102 0.00584505 2.74491 0.0059837 2.7788 0.00611575 2.81268 0.00624105 2.84657 0.00635955 2.88046 0.0064712 2.91435 0.00657595 2.94823 0.0066737 2.98212 0.00676445 3.01601 0.00684815 3.0499 0.00692475 3.08379 0.00699425 3.11767 0.0070566 3.15156 0.00711185 3.18545 0.00715995 3.21934 0.0072009 3.25322 0.00723475 3.28711 0.0072615 3.321 0.00728115 3.35489 0.00729375 3.38877 0.0072993 3.42266 0.0072979 3.45655 0.0072896 3.49044 0.00727445 3.52433 0.00725245 3.55821 0.00722375 3.5921 0.00718835 3.62599 0.0071464 3.65988 0.007098 3.69376 0.00704315 3.72765 0.006982 3.76154 0.00691465 3.79543 0.00684125 3.82932 0.00676185 3.8632 0.00667655 3.89709 0.00658555 3.93098 0.00648895 3.96487 0.0063869 3.99875 0.00627945 4.03264 0.00616685 4.06653 0.00604915 4.10042 0.00592655 4.13431 0.00579925 4.16819 0.0056673 4.20208 0.0055309 4.23597 0.00539025 4.26986 0.0052455 4.30374 0.00509675 4.33763 0.00494428 4.37152 0.00478819 4.40541 0.00462866 4.4393 0.0044659 4.47318 0.00430005 4.50707 0.00413131 4.54096 0.00395986 4.57485 0.0037859 4.60873 0.00360958 4.64262 0.00343111 4.67651 0.00325067 4.7104 0.00306844 4.74428 0.00288463 4.77817 0.00269939 4.81206 0.00251294 4.84595 0.00232546 4.87984 0.00213712 4.91372 0.00194812 4.94761 0.00175865 4.9815 0.00156888 5.01539 0.001379 5.04927 0.00118921 5.08316 0.00099966 5.11705 0.00081055 5.15094 0.000622055 5.18483 0.000434348 5.21871 0.000247603 5.2526 6.19925e-05 5.28649 0.000122313 5.32038 0.000305148 5.35426 0.000486347 5.38815 0.00066575 5.42204 0.000843195 5.45593 0.00101853 5.48982 0.00119159 5.5237 0.00136225 5.55759 0.00153035 5.59148 0.00169574 5.62537 0.00185829 5.65925 0.00201786 5.69314 0.00217432 5.72703 0.00232755 5.76092 0.00247742 5.79481 0.00262381 5.82869 0.00276661 5.86258 0.00290569 5.89647 0.00304098 5.93036 0.00317234 5.96424 0.0032997 5.99813 0.00342295 6.03202 0.003542 6.06591 0.00365678 6.09979 0.00376721 6.13368 0.00387319 6.16757 0.00397469 6.20146 0.00407161 6.23535 0.00416391 6.26923 0.00425153 6.30312 0.00433443 6.33701 0.00441254 6.3709 0.00448584 6.40478 0.00455428 6.43867 0.00461784 6.47256 0.0046765 6.50645 0.00473023 6.54034 0.00477901 6.57422 0.00482283 6.60811 0.00486169 6.642 0.00489558 6.67589 0.00492451 6.70977 0.00494849 6.74366 0.00496753 6.77755 0.00498164 6.81144 0.00499086 6.84533 0.0049952 6.87921 0.0049947 6.9131 0.00498938 6.94699 0.00497929 6.98088 0.00496449 7.01476 0.004945 7.04865 0.00492089 7.08254 0.00489222 7.11643 0.00485903 7.15032 0.0048214 7.1842 0.0047794 7.21809 0.00473309 7.25198 0.00468255 7.28587 0.00462788 7.31975 0.00456912 7.35364 0.00450639 7.38753 0.00443976 7.42142 0.00436934 7.4553 0.0042952 7.48919 0.00421747 7.52308 0.00413622 7.55697 0.00405157 7.59086 0.00396362 7.62474 0.00387247 7.65863 0.00377825 7.69252 0.00368107 7.72641 0.00358103 7.76029 0.00347825 7.79418 0.00337286 7.82807 0.00326497 7.86196 0.0031547 7.89585 0.00304218 7.92973 0.00292752 7.96362 0.00281087 7.99751 0.00269234 8.0314 0.00257206 8.06528 0.00245015 8.09917 0.00232675 8.13306 0.00220199 8.16695 0.00207598 8.20084 0.00194888 8.23472 0.0018208 8.26861 0.00169188 8.3025 0.00156223 8.33639 0.00143201 8.37027 0.00130133 8.40416 0.00117032 8.43805 0.00103911 8.47194 0.000907825 8.50583 0.000776595 8.53971 0.000645545 8.5736 0.0005148 8.60749 0.000384484 8.64138 0.000254717 8.67526 0.000125619 8.70915 2.68836e-06 8.74304 0.000130089 8.77693 0.000256468 8.81081 0.000381709 8.8447 0.0005057 8.87859 0.000628335 8.91248 0.000749505 8.94637 0.0008691 8.98025 0.000987015 9.01414 0.00110315 9.04803 0.00121742 9.08192 0.00132971 9.1158 0.00143994 9.14969 0.00154801 9.18358 0.00165383 9.21747 0.00175732 9.25136 0.00185841 9.28524 0.00195699 9.31913 0.00205301 9.35302 0.00214637 9.38691 0.00223703 9.42079 0.0023249 9.45468 0.00240994 9.48857 0.00249205 9.52246 0.00257121 9.55635 0.00264734 9.59023 0.0027204 9.62412 0.00279034 9.65801 0.00285711 9.6919 0.00292068 9.72578 0.00298101 9.75967 0.00303805 9.79356 0.00309178 9.82745 0.00314217 9.86134 0.0031892 9.89522 0.00323285 9.92911 0.00327309 9.963 0.00330992 9.99689 0.00334332 10.0308 0.00337328 10.0647 0.00339981 10.0985 0.0034229 10.1324 0.00344254 10.1663 0.00345875 10.2002 0.00347155 10.2341 0.00348093 10.268 0.00348692 10.3019 0.00348952 10.3358 0.00348877 10.3697 0.0034847 10.4035 0.00347732 10.4374 0.00346666 10.4713 0.00345277 10.5052 0.00343568 10.5391 0.00341542 10.573 0.00339204 10.6069 0.00336558 10.6408 0.0033361 10.6746 0.00330364 10.7085 0.00326824 10.7424 0.00322998 10.7763 0.00318891 10.8102 0.00314508 10.8441 0.00309854 10.878 0.00304939 10.9119 0.00299767 10.9457 0.00294345 10.9796 0.00288681 11.0135 0.00282781 11.0474 0.00276654 11.0813 0.00270305 11.1152 0.00263744 11.1491 0.00256976 11.183 0.00250013 11.2168 0.0024286 11.2507 0.00235527 11.2846 0.0022802 11.3185 0.0022035 11.3524 0.00212524 11.3863 0.0020455 11.4202 0.00196438 11.4541 0.00188197 11.4879 0.00179836 11.5218 0.00171363 11.5557 0.00162786 11.5896 0.00154115 11.6235 0.0014536 11.6574 0.00136529 11.6913 0.0012763 11.7252 0.00118674 11.759 0.00109669 11.7929 0.00100624 11.8268 0.000915475 11.8607 0.00082449 11.8946 0.000733375 11.9285 0.000642215 11.9624 0.0005511 11.9963 0.000460114 12.0302 0.000369346 12.064 0.000278881 12.0979 0.000188802 12.1318 9.9195e-05 12.1657 1.01408e-05 12.1996 7.8279e-05 12.2335 0.000165984 12.2674 0.000252894 12.3013 0.000338934 12.3351 0.000424025 12.369 0.000508095 12.4029 0.00059107 12.4368 0.000672875 12.4707 0.000753445 12.5046 0.000832705 12.5385 0.000910595 12.5724 0.00098705 12.6062 0.001062 12.6401 0.00113539 12.674 0.00120716 12.7079 0.00127725 12.7418 0.00134562 12.7757 0.00141219 12.8096 0.00147693 12.8435 0.00153977 12.8773 0.00160069 12.9112 0.00165963 12.9451 0.00171655 12.979 0.00177141 13.0129 0.00182417 13.0468 0.00187481 13.0807 0.00192326 13.1146 0.00196953 13.1484 0.00201357 13.1823 0.00205536 13.2162 0.00209487 13.2501 0.00213209 13.284 0.00216698 13.3179 0.00219954 13.3518 0.00222975 13.3857 0.00225761 13.4195 0.0022831 13.4534 0.0023062 13.4873 0.00232692 13.5212 0.00234526 13.5551 0.00236121 13.589 0.00237477 13.6229 0.00238596 13.6568 0.00239478 13.6907 0.00240122 13.7245 0.00240532 13.7584 0.00240707 13.7923 0.00240649 13.8262 0.00240361 13.8601 0.00239844 13.894 0.00239099 13.9279 0.00238131 13.9618 0.0023694 13.9956 0.0023553 14.0295 0.00233904 14.0634 0.00232065 14.0973 0.00230015 14.1312 0.00227759 14.1651 0.00225301 14.199 0.00222643 14.2329 0.0021979 14.2667 0.00216747 14.3006 0.00213517 14.3345 0.00210105 14.3684 0.00206515 14.4023 0.00202753 14.4362 0.00198822 14.4701 0.00194728 14.504 0.00190477 14.5378 0.00186072 14.5717 0.00181521 14.6056 0.00176827 14.6395 0.00171998 14.6734 0.00167037 14.7073 0.0016195 14.7412 0.00156745 14.7751 0.00151426 14.8089 0.00145999 14.8428 0.00140471 14.8767 0.00134847 14.9106 0.00129134 14.9445 0.00123337 14.9784 0.00117463 15.0123 0.00111518 15.0462 0.00105508 15.08 0.000994395 15.1139 0.00093319 15.1478 0.00087152 15.1817 0.00080945 15.2156 0.000747045 15.2495 0.00068437 15.2834 0.00062148 15.3173 0.00055844 15.3512 0.00049531 15.385 0.000432154 15.4189 0.000369032 15.4528 0.000306004 15.4867 0.000243129 15.5206 0.000180467 15.5545 0.000118076 15.5884 5.60155e-05 15.6223 5.65895e-06 15.6561 6.68905e-05 15.69 0.000127624 15.7239 0.000187803 15.7578 0.000247376 15.7917 0.000306288 15.8256 0.00036449 15.8595 0.000421929 15.8934 0.000478555 15.9272 0.00053432 15.9611 0.00058918 15.995 0.000643085 16.0289 0.00069599 16.0628 0.00074785 16.0967 0.00079863 16.1306 0.00084828 16.1645 0.00089677 16.1983 0.00094405 16.2322 0.000990095 16.2661 0.00103486 16.3 0.00107832 16.3339 0.00112043 16.3678 0.00116118 16.4017 0.00120052 16.4356 0.00123843 16.4694 0.00127489 16.5033 0.00130986 16.5372 0.00134333 16.5711 0.00137528 16.605 0.00140569 16.6389 0.00143453 16.6728 0.00146179 16.7067 0.00148746 16.7405 0.00151152 16.7744 0.00153396 16.8083 0.00155478 16.8422 0.00157395 16.8761 0.00159149 16.91 0.00160738 16.9439 0.0016216 16.9778 0.00163419 17.0117 0.00164511 17.0455 0.00165438 17.0794 0.00166201 17.1133 0.00166798 17.1472 0.00167231 17.1811 0.00167502 17.215 0.0016761 17.2489 0.00167557 17.2828 0.00167344 17.3166 0.00166972 17.3505 0.00166443 17.3844 0.00165759 17.4183 0.00164921 17.4522 0.0016393 17.4861 0.00162791 17.52 0.00161503 17.5539 0.0016007 17.5877 0.00158494 17.6216 0.00156777 17.6555 0.00154923 17.6894 0.00152934 17.7233 0.00150812 17.7572 0.00148562 17.7911 0.00146185 17.825 0.00143685 17.8588 0.00141066 17.8927 0.00138331 17.9266 0.00135483 17.9605 0.00132525 17.9944 0.00129462 18.0283 0.00126296 18.0622 0.00123032 18.0961 0.00119674 18.1299 0.00116226 18.1638 0.00112692 18.1977 0.00109074 18.2316 0.00105379 18.2655 0.00101608 18.2994 0.000977675 18.3333 0.00093861 18.3672 0.00089893 18.401 0.00085867 18.4349 0.00081788 18.4688 0.0007766 18.5027 0.000734875 18.5366 0.00069274 18.5705 0.00065025 18.6044 0.00060744 18.6383 0.00056436 18.6722 0.000521045 18.706 0.000477546 18.7399 0.000433902 18.7738 0.000390157 18.8077 0.000346352 18.8416 0.000302531 18.8755 0.000258737 18.9094 0.00021501 18.9433 0.000171392 18.9771 0.000127924 19.011 8.46475e-05 19.0449 4.16014e-05 19.0788 1.17405e-06 19.1127 4.36399e-05 19.1466 8.57575e-05 19.1805 0.00012749 19.2144 0.000168798 19.2482 0.000209646 19.2821 0.000249999 19.316 0.000289822 19.3499 0.000329079 19.3838 0.000367737 19.4177 0.000405763 19.4516 0.000443126 19.4855 0.000479794 19.5193 0.00051574 19.5532 0.000550925 19.5871 0.000585335 19.621 0.00061893 19.6549 0.00065169 19.6888 0.00068359 19.7227 0.000714605 19.7566 0.00074471 19.7904 0.00077388 19.8243 0.0008021 19.8582 0.000829345 19.8921 0.000855595 19.926 0.00088084 19.9599 0.000905055 19.9938 0.000928225 20.0277 0.00095034 20.0615 0.00097138 20.0954 0.00099134 20.1293 0.0010102 20.1632 0.00102796 20.1971 0.00104459 20.231 0.00106011 20.2649 0.0010745 20.2988 0.00108775 20.3327 0.00109987 20.3665 0.00111083 20.4004 0.00112066 20.4343 0.00112933 20.4682 0.00113686 20.5021 0.00114324 20.536 0.00114849 20.5699 0.00115258 20.6038 0.00115554 20.6376 0.00115737 20.6715 0.00115807 20.7054 0.00115766 20.7393 0.00115614 20.7732 0.00115352 20.8071 0.00114981 20.841 0.00114502 20.8749 0.00113916 20.9087 0.00113225 20.9426 0.00112431 20.9765 0.00111534 21.0104 0.00110537 21.0443 0.00109439 21.0782 0.00108245 21.1121 0.00106956 21.146 0.00105573 21.1798 0.00104099 21.2137 0.00102535 21.2476 0.00100884 21.2815 0.00099147 21.3154 0.00097328 21.3493 0.000954285 21.3832 0.000934505 21.4171 0.00091397 21.4509 0.000892705 21.4848 0.000870735 21.5187 0.00084808 21.5526 0.00082478 21.5865 0.00080085 21.6204 0.00077632 21.6543 0.00075122 21.6882 0.00072558 21.722 0.000699425 21.7559 0.000672785 21.7898 0.000645685 21.8237 0.00061816 21.8576 0.00059024 21.8915 0.00056195 21.9254 0.000533325 21.9593 0.00050439 21.9931 0.000475175 22.027 0.000445714 22.0609 0.000416034 22.0948 0.000386166 22.1287 0.00035614 22.1626 0.000325985 22.1965 0.000295733 22.2304 0.000265412 22.2643 0.000235051 22.2981 0.000204681 22.332 0.000174331 22.3659 0.000144028 22.3998 0.000113804 22.4337 8.3685e-05 22.4676 5.37e-05 22.5015 2.38765e-05 22.5354 5.7578e-06 22.5692 3.51759e-05 22.6031 6.43515e-05 22.637 9.32575e-05 22.6709 0.000121869 22.7048 0.00015016 22.7387 0.000178105 22.7726 0.000205683 22.8065 0.000232865 22.8403 0.000259632 22.8742 0.00028596 22.9081 0.000311826 22.942 0.000337209 22.9759 0.000362089 23.0098 0.000386445 23.0437 0.000410257 23.0776 0.000433507 23.1114 0.000456176 23.1453 0.000478245 23.1792 0.000499701 23.2131 0.000520525 23.247 0.0005407 23.2809 0.000560215 23.3148 0.000579055 23.3487 0.000597205 23.3825 0.000614655 23.4164 0.00063139 23.4503 0.0006474 23.4842 0.00066268 23.5181 0.000677215 23.552 0.000690995 23.5859 0.000704015 23.6198 0.00071627 23.6536 0.00072775 23.6875 0.000738455 23.7214 0.00074837 23.7553 0.000757505 23.7892 0.000765845 23.8231 0.00077339 23.857 0.000780145 23.8909 0.0007861 23.9248 0.00079126 23.9586 0.00079563 23.9925 0.000799205 24.0264 0.000801985 24.0603 0.000803985 24.0942 0.000805195 24.1281 0.000805625 24.162 0.00080528 24.1959 0.00080417 24.2297 0.000802295 24.2636 0.00079967 24.2975 0.00079629 24.3314 0.00079218 24.3653 0.000787335 24.3992 0.00078177 24.4331 0.0007755 24.467 0.00076853 24.5008 0.000760875 24.5347 0.000752545 24.5686 0.000743555 24.6025 0.00073392 24.6364 0.000723645 24.6703 0.000712755 24.7042 0.00070126 24.7381 0.000689175 24.7719 0.000676515 24.8058 0.0006633 24.8397 0.000649545 24.8736 0.000635265 24.9075 0.00062048 24.9414 0.000605205 24.9753 0.00058946 gerris-snapshot-131206/test/capwave/markers.tex0000644000175100017510000000006612250371171016457 00000000000000Markers & 0.3018 & 0.0778 & 0.0131 & 0.0082 & 0.00645 gerris-snapshot-131206/test/capwave/air-water/0000755000175100017510000000000012250371673016251 500000000000000gerris-snapshot-131206/test/capwave/air-water/prosperetti0000644000175100017510000003553612250371171020501 000000000000000 0.01 0.0312892 0.00999512 0.0625783 0.00998051 0.0938675 0.00995625 0.125157 0.00992241 0.156446 0.00987909 0.187735 0.00982636 0.219025 0.00976434 0.250313 0.00969313 0.281603 0.00961285 0.312892 0.00952363 0.344182 0.0094256 0.37547 0.00931889 0.40676 0.00920366 0.438048 0.00908006 0.469338 0.00894826 0.500627 0.00880841 0.531916 0.0086607 0.563205 0.00850532 0.594495 0.00834244 0.625783 0.00817226 0.657073 0.00799498 0.688361 0.00781082 0.719651 0.00761997 0.75094 0.00742267 0.78223 0.00721912 0.813518 0.00700956 0.844808 0.00679422 0.876096 0.00657333 0.907386 0.00634713 0.938675 0.00611587 0.969965 0.00587979 1.00125 0.00563915 1.03254 0.0053942 1.06383 0.00514518 1.09512 0.00489238 1.12641 0.00463604 1.1577 0.00437642 1.18899 0.0041138 1.22028 0.00384844 1.25157 0.0035806 1.28286 0.00331056 1.31414 0.00303859 1.34543 0.00276495 1.37672 0.00248992 1.40801 0.00221377 1.4393 0.00193677 1.47059 0.00165918 1.50188 0.00138128 1.53317 0.00110333 1.56446 0.000825597 1.59574 0.000548353 1.62703 0.000271857 1.65832 3.62942e-06 1.68962 0.000277848 1.72091 0.000550542 1.7522 0.000821458 1.78349 0.00109035 1.81477 0.00135696 1.84606 0.00162105 1.87735 0.00188238 1.90864 0.00214071 1.93993 0.00239581 1.97122 0.00264745 2.0025 0.00289541 2.03379 0.00313947 2.06508 0.00337941 2.09637 0.00361503 2.12767 0.00384611 2.15896 0.00407247 2.19025 0.0042939 2.22152 0.00451022 2.25282 0.00472125 2.28411 0.00492681 2.3154 0.00512672 2.34669 0.00532084 2.37798 0.005509 2.40927 0.00569104 2.44055 0.00586683 2.47184 0.00603622 2.50313 0.00619909 2.53442 0.00635532 2.56572 0.00650477 2.59701 0.00664735 2.62828 0.00678295 2.65957 0.00691148 2.69087 0.00703284 2.72216 0.00714696 2.75345 0.00725376 2.78474 0.00735317 2.81603 0.00744514 2.84731 0.00752962 2.8786 0.00760655 2.90989 0.0076759 2.94118 0.00773765 2.97247 0.00779177 3.00377 0.00783825 3.03506 0.00787707 3.06633 0.00790824 3.09762 0.00793177 3.12892 0.00794766 3.16021 0.00795595 3.1915 0.00795666 3.22279 0.00794983 3.25408 0.00793549 3.28536 0.00791371 3.31665 0.00788453 3.34794 0.00784802 3.37923 0.00780425 3.41052 0.0077533 3.44182 0.00769524 3.47309 0.00763018 3.50438 0.00755821 3.53567 0.00747942 3.56697 0.00739393 3.59826 0.00730185 3.62955 0.0072033 3.66084 0.00709841 3.69212 0.0069873 3.72341 0.00687011 3.7547 0.00674699 3.78599 0.00661808 3.81728 0.00648352 3.84857 0.00634349 3.87986 0.00619813 3.91114 0.00604761 3.94243 0.0058921 3.97372 0.00573177 4.00502 0.0055668 4.03631 0.00539737 4.0676 0.00522366 4.09887 0.00504585 4.13017 0.00486414 4.16146 0.00467873 4.19275 0.00448979 4.22404 0.00429754 4.25533 0.00410216 4.28662 0.00390387 4.3179 0.00370286 4.34919 0.00349934 4.38048 0.00329352 4.41177 0.0030856 4.44306 0.0028758 4.47436 0.00266431 4.50565 0.00245135 4.53692 0.00223714 4.56822 0.00202187 4.59951 0.00180577 4.6308 0.00158903 4.66209 0.00137188 4.69338 0.00115452 4.72467 0.000937154 4.75595 0.000719994 4.78724 0.000503245 4.81853 0.000287112 4.84982 7.17978e-05 4.88111 0.000142497 4.91241 0.000355573 4.94368 0.000567232 4.97497 0.000777281 5.00627 0.000985526 5.03756 0.00119178 5.06885 0.00139585 5.10014 0.00159756 5.13143 0.00179673 5.16271 0.00199317 5.194 0.00218672 5.22529 0.0023772 5.25658 0.00256445 5.28787 0.0027483 5.31916 0.00292861 5.35046 0.0031052 5.38173 0.00327793 5.41302 0.00344667 5.44431 0.00361125 5.47561 0.00377156 5.5069 0.00392745 5.53819 0.0040788 5.56947 0.00422548 5.60076 0.00436739 5.63205 0.00450441 5.66334 0.00463643 5.69463 0.00476335 5.72592 0.00488507 5.75721 0.00500151 5.78849 0.00511258 5.81978 0.00521819 5.85107 0.00531829 5.88236 0.00541279 5.91366 0.00550163 5.94495 0.00558476 5.97624 0.00566213 6.00751 0.00573369 6.03881 0.0057994 6.0701 0.00585923 6.10139 0.00591315 6.13268 0.00596113 6.16397 0.00600317 6.19526 0.00603924 6.22654 0.00606935 6.25783 0.0060935 6.28912 0.00611168 6.32041 0.00612392 6.35171 0.00613023 6.383 0.00613063 6.41427 0.00612516 6.44556 0.00611384 6.47686 0.00609672 6.50815 0.00607384 6.53944 0.00604525 6.57073 0.006011 6.60202 0.00597117 6.6333 0.0059258 6.66459 0.00587498 6.69588 0.00581878 6.72717 0.00575728 6.75846 0.00569055 6.78976 0.00561871 6.82105 0.00554182 6.85232 0.00546 6.88361 0.00537335 6.91491 0.00528197 6.9462 0.00518598 6.97749 0.00508548 7.00878 0.0049806 7.04006 0.00487145 7.07135 0.00475817 7.10264 0.00464088 7.13393 0.00451971 7.16522 0.0043948 7.19651 0.00426629 7.22781 0.00413431 7.25908 0.003999 7.29037 0.00386052 7.32166 0.00371902 7.35296 0.00357463 7.38425 0.00342752 7.41554 0.00327783 7.44683 0.00312573 7.47811 0.00297137 7.5094 0.0028149 7.54069 0.0026565 7.57198 0.00249631 7.60327 0.0023345 7.63456 0.00217124 7.66586 0.00200668 7.69713 0.00184099 7.72842 0.00167433 7.75971 0.00150687 7.79101 0.00133877 7.8223 0.0011702 7.85359 0.00100131 7.88486 0.000832271 7.91616 0.000663246 7.94745 0.000494394 7.97874 0.000325876 8.01003 0.000157852 8.04132 9.52121e-06 8.07261 0.000176087 8.10389 0.000341689 8.13518 0.000506175 8.16647 0.000669393 8.19776 0.000831194 8.22906 0.00099143 8.26035 0.00114996 8.29164 0.00130663 8.32291 0.00146131 8.35421 0.00161385 8.3855 0.00176413 8.41679 0.00191201 8.44808 0.00205736 8.47937 0.00220006 8.51065 0.00233998 8.54194 0.00247699 8.57323 0.002611 8.60452 0.00274187 8.63581 0.00286951 8.66711 0.0029938 8.6984 0.00311465 8.72967 0.00323195 8.76096 0.00334562 8.79226 0.00345555 8.82355 0.00356167 8.85484 0.00366388 8.88613 0.00376212 8.91742 0.0038563 8.9487 0.00394637 8.97999 0.00403224 9.01128 0.00411387 9.04257 0.00419118 9.07386 0.00426414 9.10515 0.00433269 9.13645 0.00439679 9.16772 0.00445639 9.19901 0.00451147 9.23031 0.00456199 9.2616 0.00460793 9.29289 0.00464926 9.32418 0.00468597 9.35546 0.00471805 9.38675 0.00474549 9.41804 0.00476828 9.44933 0.00478642 9.48062 0.00479993 9.51191 0.0048088 9.5432 0.00481306 9.57448 0.00481272 9.60577 0.00480781 9.63706 0.00479835 9.66835 0.00478438 9.69965 0.00476592 9.73094 0.00474303 9.76223 0.00471573 9.79351 0.00468409 9.8248 0.00464814 9.85609 0.00460795 9.88738 0.00456358 9.91867 0.00451508 9.94996 0.00446253 9.98124 0.004406 10.0125 0.00434555 10.0438 0.00428126 10.0751 0.00421322 10.1064 0.00414151 10.1377 0.00406621 10.169 0.00398742 10.2003 0.00390522 10.2316 0.00381971 10.2628 0.00373099 10.2941 0.00363915 10.3254 0.00354431 10.3567 0.00344657 10.388 0.00334603 10.4193 0.0032428 10.4506 0.003137 10.4819 0.00302873 10.5132 0.00291812 10.5445 0.00280528 10.5757 0.00269033 10.607 0.00257339 10.6383 0.00245458 10.6696 0.00233402 10.7009 0.00221184 10.7322 0.00208816 10.7635 0.0019631 10.7948 0.0018368 10.826 0.00170938 10.8573 0.00158096 10.8886 0.00145167 10.9199 0.00132165 10.9512 0.00119101 10.9825 0.00105989 11.0138 0.000928413 11.0451 0.000796705 11.0764 0.000664895 11.1077 0.000533107 11.1389 0.000401468 11.1702 0.000270103 11.2015 0.000139135 11.2328 8.68841e-06 11.2641 0.000121116 11.2954 0.000250158 11.3267 0.000378317 11.358 0.000505476 11.3893 0.000631519 11.4206 0.00075633 11.4518 0.000879796 11.4831 0.00100181 11.5144 0.00112225 11.5457 0.00124103 11.577 0.00135802 11.6083 0.00147314 11.6396 0.00158628 11.6709 0.00169733 11.7021 0.00180622 11.7334 0.00191283 11.7647 0.00201709 11.796 0.0021189 11.8273 0.00221818 11.8586 0.00231484 11.8899 0.00240882 11.9212 0.00250002 11.9525 0.00258838 11.9838 0.00267382 12.015 0.00275629 12.0463 0.00283571 12.0776 0.00291203 12.1089 0.00298518 12.1402 0.00305512 12.1715 0.00312179 12.2028 0.00318513 12.2341 0.00324513 12.2654 0.00330172 12.2966 0.00335487 12.3279 0.00340455 12.3592 0.00345073 12.3905 0.00349338 12.4218 0.00353247 12.4531 0.003568 12.4844 0.00359993 12.5157 0.00362827 12.547 0.00365299 12.5782 0.00367409 12.6095 0.00369158 12.6408 0.00370545 12.6721 0.0037157 12.7034 0.00372235 12.7347 0.0037254 12.766 0.00372488 12.7973 0.00372079 12.8286 0.00371316 12.8599 0.00370201 12.8911 0.00368738 12.9224 0.00366929 12.9537 0.00364778 12.985 0.00362288 13.0163 0.00359464 13.0476 0.0035631 13.0789 0.0035283 13.1102 0.00349029 13.1414 0.00344913 13.1727 0.00340487 13.204 0.00335757 13.2353 0.00330729 13.2666 0.00325409 13.2979 0.00319803 13.3292 0.00313919 13.3605 0.00307762 13.3918 0.00301342 13.4231 0.00294664 13.4543 0.00287737 13.4856 0.00280568 13.5169 0.00273166 13.5482 0.00265538 13.5795 0.00257694 13.6108 0.00249641 13.6421 0.00241388 13.6734 0.00232944 13.7047 0.00224318 13.736 0.0021552 13.7672 0.00206558 13.7985 0.00197442 13.8298 0.00188181 13.8611 0.00178785 13.8924 0.00169264 13.9237 0.00159626 13.955 0.00149883 13.9863 0.00140043 14.0175 0.00130117 14.0488 0.00120115 14.0801 0.00110045 14.1114 0.000999197 14.1427 0.000897472 14.174 0.00079538 14.2053 0.00069302 14.2366 0.00059049 14.2679 0.00048789 14.2992 0.000385317 14.3304 0.00028287 14.3617 0.000180645 14.393 7.87392e-05 14.4243 2.27518e-05 14.4556 0.000123733 14.4869 0.000224111 14.5182 0.000323793 14.5495 0.000422687 14.5808 0.000520702 14.612 0.000617749 14.6433 0.00071374 14.6746 0.00080859 14.7059 0.000902212 14.7372 0.000994524 14.7685 0.00108544 14.7998 0.00117489 14.8311 0.00126279 14.8624 0.00134906 14.8936 0.00143363 14.9249 0.00151642 14.9562 0.00159738 14.9875 0.00167642 15.0188 0.00175348 15.0501 0.0018285 15.0814 0.00190142 15.1127 0.00197217 15.144 0.00204071 15.1753 0.00210697 15.2065 0.0021709 15.2378 0.00223246 15.2691 0.00229159 15.3004 0.00234826 15.3317 0.00240241 15.363 0.00245402 15.3943 0.00250304 15.4256 0.00254944 15.4568 0.00259319 15.4881 0.00263425 15.5194 0.00267262 15.5507 0.00270825 15.582 0.00274113 15.6133 0.00277124 15.6446 0.00279857 15.6759 0.0028231 15.7072 0.00284482 15.7385 0.00286374 15.7698 0.00287983 15.801 0.00289311 15.8323 0.00290356 15.8636 0.00291121 15.8949 0.00291604 15.9262 0.00291808 15.9574 0.00291733 15.9887 0.00291381 16.0201 0.00290753 16.0514 0.00289851 16.0827 0.00288679 16.1139 0.00287237 16.1452 0.00285529 16.1765 0.00283557 16.2078 0.00281325 16.239 0.00278837 16.2703 0.00276095 16.3017 0.00273104 16.333 0.00269868 16.3643 0.0026639 16.3955 0.00262677 16.4268 0.00258731 16.4581 0.00254559 16.4894 0.00250165 16.5208 0.00245554 16.5519 0.00240732 16.5832 0.00235705 16.6146 0.00230478 16.6459 0.00225058 16.6771 0.0021945 16.7084 0.00213661 16.7397 0.00207697 16.771 0.00201564 16.8023 0.0019527 16.8335 0.00188821 16.8648 0.00182224 16.8962 0.00175486 16.9275 0.00168614 16.9588 0.00161616 16.99 0.00154498 17.0213 0.00147269 17.0526 0.00139934 17.0839 0.00132503 17.1151 0.00124983 17.1464 0.0011738 17.1778 0.00109704 17.2091 0.00101961 17.2404 0.000941588 17.2716 0.000863058 17.3029 0.000784096 17.3342 0.000704778 17.3655 0.000625182 17.3969 0.000545385 17.428 0.000465464 17.4593 0.000385496 17.4907 0.000305557 17.522 0.000225724 17.5532 0.000146072 17.5845 6.66762e-05 17.6158 1.23887e-05 17.6471 9.1049e-05 17.6784 0.000169232 17.7096 0.000246864 17.7409 0.000323876 17.7723 0.000400196 17.8036 0.000475755 17.8349 0.000550484 17.8661 0.000624317 17.8974 0.000697188 17.9287 0.00076903 17.96 0.000839782 17.9912 0.000909381 18.0225 0.000977765 18.0539 0.00104488 18.0852 0.00111066 18.1165 0.00117505 18.1477 0.001238 18.179 0.00129946 18.2103 0.00135937 18.2416 0.00141768 18.273 0.00147436 18.3041 0.00152934 18.3354 0.00158259 18.3668 0.00163406 18.3981 0.00168371 18.4293 0.00173152 18.4606 0.00177743 18.4919 0.00182141 18.5232 0.00186343 18.5545 0.00190347 18.5857 0.00194149 18.617 0.00197746 18.6484 0.00201137 18.6797 0.00204319 18.7108 0.00207289 18.7422 0.00210047 18.7735 0.0021259 18.8048 0.00214918 18.8361 0.00217028 18.8673 0.00218921 18.8986 0.00220595 18.93 0.0022205 18.9613 0.00223285 18.9926 0.00224301 19.0238 0.00225097 19.0551 0.00225674 19.0864 0.00226032 19.1177 0.00226172 19.1489 0.00226096 19.1802 0.00225803 19.2115 0.00225296 19.2429 0.00224576 19.2742 0.00223645 19.3054 0.00222504 19.3367 0.00221157 19.368 0.00219604 19.3993 0.00217849 19.4306 0.00215894 19.4618 0.00213742 19.4931 0.00211396 19.5245 0.00208859 19.5558 0.00206136 19.5869 0.00203228 19.6183 0.0020014 19.6496 0.00196876 19.6809 0.00193439 19.7122 0.00189834 19.7434 0.00186065 19.7747 0.00182137 19.8061 0.00178054 19.8374 0.0017382 19.8687 0.0016944 19.8999 0.0016492 19.9312 0.00160264 19.9625 0.00155478 19.9938 0.00150566 20.025 0.00145534 20.0563 0.00140387 20.0876 0.00135131 20.119 0.00129771 20.1503 0.00124313 20.1815 0.00118763 20.2128 0.00113126 20.2441 0.00107409 20.2754 0.00101616 20.3067 0.000957546 20.3379 0.000898298 20.3692 0.000838478 20.4006 0.000778147 20.4319 0.000717363 20.463 0.000656187 20.4944 0.00059468 20.5257 0.000532902 20.557 0.000470914 20.5883 0.000408774 20.6195 0.000346544 20.6508 0.000284284 20.6822 0.000222052 20.7135 0.000159908 20.7448 9.79118e-05 20.776 3.61205e-05 20.8073 2.54074e-05 20.8386 8.66144e-05 20.8699 0.000147444 20.9011 0.000207839 20.9324 0.000267746 20.9637 0.000327108 20.9951 0.000385871 21.0264 0.000443984 21.0576 0.000501393 21.0889 0.000558047 21.1202 0.000613896 21.1515 0.00066889 21.1828 0.000722981 21.214 0.000776122 21.2453 0.000828267 21.2767 0.000879371 21.308 0.00092939 21.3391 0.000978281 21.3705 0.001026 21.4018 0.00107252 21.4331 0.00111779 21.4644 0.00116177 21.4956 0.00120444 21.5269 0.00124575 21.5583 0.00128567 21.5896 0.00132418 21.6209 0.00136124 21.6521 0.00139682 21.6834 0.0014309 21.7147 0.00146346 21.746 0.00149446 21.7772 0.00152388 21.8085 0.00155172 21.8398 0.00157794 21.8712 0.00160253 21.9025 0.00162548 21.9337 0.00164676 21.965 0.00166638 21.9963 0.00168431 22.0276 0.00170055 22.0589 0.0017151 22.0901 0.00172794 22.1214 0.00173907 22.1528 0.00174849 22.1841 0.00175621 22.2152 0.00176221 22.2466 0.00176651 22.2779 0.0017691 22.3092 0.00177 22.3405 0.0017692 22.3717 0.00176673 22.403 0.00176259 22.4343 0.00175679 22.4657 0.00174934 22.4968 0.00174027 22.5282 0.00172958 22.5595 0.0017173 22.5908 0.00170345 22.6221 0.00168804 22.6533 0.0016711 22.6846 0.00165265 22.7159 0.00163272 22.7473 0.00161133 22.7786 0.00158852 22.8098 0.0015643 22.8411 0.00153871 22.8724 0.00151178 22.9037 0.00148355 22.9349 0.00145404 22.9662 0.0014233 22.9975 0.00139134 23.0289 0.00135822 23.0602 0.00132398 23.0913 0.00128863 23.1227 0.00125224 23.154 0.00121483 23.1853 0.00117645 23.2166 0.00113714 23.2478 0.00109694 23.2791 0.00105589 23.3104 0.00101404 23.3418 0.000971429 23.3729 0.000928104 23.4043 0.000884109 23.4356 0.000839489 23.4669 0.000794289 23.4982 0.000748556 23.5294 0.000702336 23.5607 0.000655676 23.592 0.000608621 23.6234 0.000561219 23.6547 0.000513517 23.6859 0.000465562 23.7172 0.0004174 23.7485 0.000369079 23.7798 0.000320645 23.811 0.000272146 23.8423 0.000223628 23.8736 0.000175137 23.905 0.000126719 23.9363 7.84201e-05 23.9674 3.02862e-05 23.9988 1.7638e-05 24.0301 6.53077e-05 24.0614 0.000112679 24.0927 0.000159707 24.1239 0.00020635 24.1552 0.000252565 24.1865 0.00029831 24.2179 0.000343542 24.249 0.000388223 24.2804 0.000432312 24.3117 0.000475769 24.343 0.000518557 24.3743 0.000560638 24.4055 0.000601974 24.4368 0.000642531 24.4681 0.000682274 24.4995 0.000721168 24.5308 0.00075918 24.562 0.00079628 24.5933 0.000832435 24.6246 0.000867615 24.6559 0.000901793 24.6871 0.00093494 24.7184 0.000967031 24.7497 0.000998038 24.7811 0.00102794 24.8124 0.00105671 24.8435 0.00108433 24.8749 0.00111077 24.9062 0.00113603 24.9375 0.00116007 24.9688 0.00118289 25 0.00120446 gerris-snapshot-131206/test/capwave/air-water/air-water.gfs0000644000175100017510000000401712250371171020560 00000000000000# Title: Air-Water capillary wave # # Description: # # Same test as before but with density and viscosity ratio # corresponding to an air/water interface. # # \begin{table}[htbp] # \caption{\label{convergence}Convergence of the relative error between the analytical # solution and simulation results.} # \begin{center} # \begin{tabular}{|l|ccccc|} \hline # Method & $8^2$ & $16^2$ & $32^2$ & $64^2$ & $128^2$ \\ \hline # \input{convergence.tex} & 0.00313 \\ # \end{tabular} # \end{center} # \end{table} # # \begin{figure}[htbp] # \caption{\label{amplitude}Evolution of the amplitude of the capillary wave as a # function of non-dimensional time $\tau=\omega_0 t$.} # \begin{center} # \includegraphics[width=\hsize]{amplitude.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../capwave.sh air-water.gfs # Version: 1.2.0 # Required files: convergence.ref prosperetti # Generated files: convergence.tex amplitude.eps # # Theoretical solution generated using: # ~/local/src/laplace/oscillations planar 1 1 0.0182571749236 0.273038508 1 1 0.0012 0.01 0 0 | awk '{print $1*15.7402, ($2 > 0. ? $2 : -$2)}' > prosperetti # 3 5 GfsSimulation GfsBox GfsGEdge {} { Time { end = 1.58928694288774963184 } ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } Refine floor(LEVEL + 1 - (LEVEL - 2)*fabs(y)/1.5) VariableTracerVOFHeight T VariableFiltered T1 T 1 VariableCurvature K T SourceTension T 1 K VariablePosition Y T y Global { #define VAR(T,min,max) (min + CLAMP(T,0,1)*(max - min)) #define RHO(T) VAR(T, 1.2/1000., 1.) #define MU(T) VAR(T, 1.8e-5/1.003e-3, 1.) } PhysicalParams { alpha = 1./RHO(T1) } SourceViscosity 0.0182571749236*MU(T1) InitFraction T (y - 0.01*cos (2.*M_PI*x)) OutputScalarNorm { step = 0.00198785108553814829 } { awk '{printf ("%g %g\n", $3*15.7402, $9); fflush(stdout); }' > wave-LEVEL } { v = (T > 0. && T < 1. ? Y : 0.) } } GfsBox {} GfsBox {} GfsBox {} 1 1 right 2 2 right 3 3 right 1 2 top 1 3 bottom gerris-snapshot-131206/test/capwave/air-water/convergence.ref0000644000175100017510000000005712250371171021160 000000000000003 0.204093 4 0.0795353 5 0.0190833 6 0.0069135 gerris-snapshot-131206/test/capwave/convergence.ref0000644000175100017510000000006112250371171017260 000000000000003 0.159142 4 0.0316239 5 0.00769877 6 0.00215977 gerris-snapshot-131206/test/capwave/clsvof.tex0000644000175100017510000000005312250371171016303 00000000000000CLSVOF & 0.3169 & 0.0991 & 0.0131 & 0.0033 gerris-snapshot-131206/test/capwave/density/0000755000175100017510000000000012250371673016035 500000000000000gerris-snapshot-131206/test/capwave/density/density.gfs0000644000175100017510000000412512250371171020130 00000000000000# Title: Fluids of different densities # # Description: # # Same test as before but with a density ratio of 10. The dynamic # viscosities are identical. # # Table \ref{convergence} shows the convergence of various # solvers as a function of resolution: Gerris, the marker technique of # \cite{popinet99} and Surfer \cite{gueyffier98}. # # The time-evolution of the amplitude given by Prosperetti's theory # and Gerris ($64^2$) is given on Figure \ref{amplitude}. # # \begin{table}[htbp] # \caption{\label{convergence}Convergence of the relative error between the analytical # solution and simulation results from various solvers.} # \begin{center} # \begin{tabular}{|l|ccccc|} \hline # Method & $8^2$ & $16^2$ & $32^2$ & $64^2$ & $128^2$ \\ \hline # \input{convergence.tex} & 0.001155 \\ # Markers & 0.3593 & 0.1397 & 0.0566 & 0.0264 & 0.0148 \\ # Surfer & - & - & 0.1233 & 0.0300 & 0.0254 \\ \hline # \end{tabular} # \end{center} # \end{table} # # \begin{figure}[htbp] # \caption{\label{amplitude}Evolution of the amplitude of the capillary wave as a # function of non-dimensional time $\tau=\omega_0 t$.} # \begin{center} # \includegraphics[width=\hsize]{amplitude.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../capwave.sh density.gfs # Version: 1.1.0 # Required files: convergence.ref prosperetti # Generated files: convergence.tex amplitude.eps # 3 5 GfsSimulation GfsBox GfsGEdge {} { Time { end = 1.66481717925811447992 } ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } Refine floor(LEVEL + 1 - (LEVEL - 2)*fabs(y)/1.5) VariableTracerVOFHeight T VariableCurvature K T SourceTension T 1 K VariablePosition Y T y SourceDiffusion U 0.0182571749236 SourceDiffusion V 0.0182571749236 PhysicalParams { alpha = 1./(T + 0.1*(1. - T)) } InitFraction T (y - 0.01*cos (2.*M_PI*x)) OutputScalarNorm { step = .00225584983639310905 } { awk '{printf ("%g %g\n", $3*15.016663878457, $9); fflush(stdout); }' > wave-LEVEL } { v = (T > 0. && T < 1. ? Y : 0.) } } GfsBox {} GfsBox {} GfsBox {} 1 1 right 2 2 right 3 3 right 1 2 top 1 3 bottom gerris-snapshot-131206/test/capwave/density/prosperetti0000644000175100017510000003223512250371171020256 000000000000000 0.01 0.033875 0.00999439 0.067751 0.00997778 0.10163 0.00995043 0.1355 0.00991252 0.16938 0.00986426 0.20325 0.00980582 0.23713 0.00973741 0.271 0.00965919 0.30488 0.00957137 0.33875 0.00947414 0.37263 0.0093677 0.4065 0.00925226 0.44038 0.00912802 0.47425 0.0089952 0.50813 0.00885403 0.54201 0.00870472 0.57588 0.00854751 0.60976 0.00838263 0.64363 0.00821033 0.67751 0.00803084 0.71138 0.00784443 0.74526 0.00765134 0.77913 0.00745183 0.81301 0.00724616 0.84688 0.00703461 0.88076 0.00681743 0.91463 0.00659489 0.94851 0.00636728 0.98238 0.00613487 1.0163 0.00589795 1.0501 0.00565678 1.084 0.00541165 1.1179 0.00516286 1.1518 0.00491067 1.1856 0.00465539 1.2195 0.00439729 1.2534 0.00413667 1.2873 0.00387381 1.3211 0.00360899 1.355 0.00334252 1.3889 0.00307466 1.4228 0.00280571 1.4566 0.00253594 1.4905 0.00226565 1.5244 0.0019951 1.5583 0.00172459 1.5921 0.00145438 1.626 0.00118474 1.6599 0.000915948 1.6938 0.000648269 1.7276 0.000381966 1.7615 0.000117299 1.7954 0.000145477 1.8293 0.00040611 1.8631 0.000664353 1.897 0.000919961 1.9309 0.0011727 1.9648 0.00142233 1.9986 0.00166862 2.0325 0.00191136 2.0664 0.00215032 2.1003 0.0023853 2.1341 0.00261608 2.168 0.00284246 2.2019 0.00306426 2.2358 0.00328128 2.2696 0.00349334 2.3035 0.00370027 2.3374 0.00390189 2.3713 0.00409805 2.4051 0.00428859 2.439 0.00447337 2.4729 0.00465223 2.5068 0.00482505 2.5407 0.0049917 2.5745 0.00515207 2.6084 0.00530603 2.6423 0.00545348 2.6762 0.00559434 2.71 0.0057285 2.7439 0.00585588 2.7778 0.00597641 2.8117 0.00609003 2.8455 0.00619667 2.8794 0.00629628 2.9133 0.00638881 2.9472 0.00647424 2.981 0.00655252 3.0149 0.00662364 3.0488 0.00668758 3.0827 0.00674433 3.1165 0.0067939 3.1504 0.00683628 3.1843 0.00687151 3.2182 0.00689958 3.252 0.00692055 3.2859 0.00693443 3.3198 0.00694128 3.3537 0.00694114 3.3875 0.00693406 3.4214 0.00692012 3.4553 0.00689937 3.4892 0.00687189 3.523 0.00683777 3.5569 0.00679709 3.5908 0.00674995 3.6247 0.00669644 3.6585 0.00663666 3.6924 0.00657074 3.7263 0.00649877 3.7602 0.00642089 3.794 0.00633722 3.8279 0.00624789 3.8618 0.00615304 3.8957 0.00605279 3.9295 0.00594731 3.9634 0.00583673 3.9973 0.00572121 4.0312 0.0056009 4.065 0.00547597 4.0989 0.00534657 4.1328 0.00521287 4.1667 0.00507504 4.2005 0.00493325 4.2344 0.00478768 4.2683 0.00463849 4.3022 0.00448588 4.336 0.00433003 4.3699 0.0041711 4.4038 0.0040093 4.4377 0.0038448 4.4715 0.00367779 4.5054 0.00350847 4.5393 0.00333701 4.5732 0.00316361 4.607 0.00298846 4.6409 0.00281174 4.6748 0.00263366 4.7087 0.00245439 4.7425 0.00227413 4.7764 0.00209307 4.8103 0.0019114 4.8442 0.0017293 4.878 0.00154695 4.9119 0.00136456 4.9458 0.00118229 4.9797 0.00100034 5.0136 0.000818878 5.0474 0.000638086 5.0813 0.000458142 5.1152 0.000279219 5.1491 0.000101489 5.1829 7.48791e-05 5.2168 0.000249719 5.2507 0.000422866 5.2846 0.000594161 5.3184 0.000763445 5.3523 0.000930566 5.3862 0.00109537 5.4201 0.00125772 5.4539 0.00141745 5.4878 0.00157445 5.5217 0.00172856 5.5556 0.00187966 5.5894 0.00202762 5.6233 0.00217232 5.6572 0.00231363 5.6911 0.00245145 5.7249 0.00258565 5.7588 0.00271614 5.7927 0.00284282 5.8266 0.00296558 5.8604 0.00308434 5.8943 0.00319901 5.9282 0.0033095 5.9621 0.00341574 5.9959 0.00351766 6.0298 0.00361519 6.0637 0.00370826 6.0976 0.00379682 6.1314 0.00388081 6.1653 0.0039602 6.1992 0.00403492 6.2331 0.00410496 6.2669 0.00417027 6.3008 0.00423082 6.3347 0.0042866 6.3686 0.00433759 6.4024 0.00438377 6.4363 0.00442514 6.4702 0.00446169 6.5041 0.00449343 6.5379 0.00452036 6.5718 0.00454249 6.6057 0.00455985 6.6396 0.00457245 6.6734 0.00458032 6.7073 0.00458348 6.7412 0.00458198 6.7751 0.00457585 6.8089 0.00456514 6.8428 0.00454989 6.8767 0.00453015 6.9106 0.00450599 6.9444 0.00447746 6.9783 0.00444463 7.0122 0.00440756 7.0461 0.00436632 7.0799 0.004321 7.1138 0.00427167 7.1477 0.00421841 7.1816 0.0041613 7.2154 0.00410044 7.2493 0.00403592 7.2832 0.00396783 7.3171 0.00389627 7.3509 0.00382134 7.3848 0.00374314 7.4187 0.00366177 7.4526 0.00357736 7.4864 0.00349 7.5203 0.0033998 7.5542 0.00330688 7.5881 0.00321137 7.622 0.00311336 7.6558 0.00301299 7.6897 0.00291037 7.7236 0.00280562 7.7575 0.00269887 7.7913 0.00259024 7.8252 0.00247985 7.8591 0.00236784 7.893 0.00225432 7.9268 0.00213943 7.9607 0.00202329 7.9946 0.00190602 8.0285 0.00178776 8.0623 0.00166863 8.0962 0.00154876 8.1301 0.00142828 8.164 0.00130731 8.1978 0.00118598 8.2317 0.00106441 8.2656 0.000942728 8.2995 0.000821059 8.3333 0.000699524 8.3672 0.000578244 8.4011 0.000457341 8.435 0.000336932 8.4688 0.000217136 8.5027 9.80675e-05 8.5366 2.01585e-05 8.5705 0.00013743 8.6043 0.000253636 8.6382 0.000368668 8.6721 0.00048242 8.706 0.000594787 8.7398 0.000705667 8.7737 0.00081496 8.8076 0.00092257 8.8415 0.0010284 8.8753 0.00113236 8.9092 0.00123435 8.9431 0.0013343 8.977 0.00143212 9.0108 0.00152772 9.0447 0.00162103 9.0786 0.00171197 9.1125 0.00180047 9.1463 0.00188646 9.1802 0.00196987 9.2141 0.00205064 9.248 0.00212871 9.2818 0.00220403 9.3157 0.00227653 9.3496 0.00234617 9.3835 0.0024129 9.4173 0.00247668 9.4512 0.00253746 9.4851 0.00259521 9.519 0.0026499 9.5528 0.00270149 9.5867 0.00274996 9.6206 0.00279529 9.6545 0.00283744 9.6883 0.00287642 9.7222 0.00291219 9.7561 0.00294476 9.79 0.00297411 9.8238 0.00300025 9.8577 0.00302316 9.8916 0.00304286 9.9255 0.00305935 9.9593 0.00307264 9.9932 0.00308274 10.027 0.00308966 10.061 0.00309343 10.095 0.00309406 10.129 0.00309159 10.163 0.00308604 10.196 0.00307743 10.23 0.0030658 10.264 0.0030512 10.298 0.00303365 10.332 0.00301319 10.366 0.00298988 10.4 0.00296376 10.434 0.00293487 10.467 0.00290327 10.501 0.00286901 10.535 0.00283216 10.569 0.00279275 10.603 0.00275086 10.637 0.00270655 10.671 0.00265988 10.705 0.00261092 10.738 0.00255974 10.772 0.0025064 10.806 0.00245097 10.84 0.00239353 10.874 0.00233416 10.908 0.00227292 10.942 0.0022099 10.976 0.00214517 11.009 0.00207881 11.043 0.0020109 11.077 0.00194153 11.111 0.00187077 11.145 0.0017987 11.179 0.00172541 11.213 0.00165098 11.247 0.0015755 11.28 0.00149906 11.314 0.00142172 11.348 0.00134359 11.382 0.00126475 11.416 0.00118527 11.45 0.00110525 11.484 0.00102477 11.518 0.000943919 11.551 0.000862776 11.585 0.000781427 11.619 0.000699955 11.653 0.000618444 11.687 0.000536976 11.721 0.000455633 11.755 0.000374495 11.789 0.000293643 11.822 0.000213156 11.856 0.000133111 11.89 5.35859e-05 11.924 2.53436e-05 11.958 0.000103602 11.992 0.000181118 12.026 0.000257817 12.06 0.00033363 12.093 0.000408487 12.127 0.000482321 12.161 0.000555066 12.195 0.000626657 12.229 0.000697031 12.263 0.000766127 12.297 0.000833887 12.331 0.000900252 12.364 0.000965166 12.398 0.00102858 12.432 0.00109043 12.466 0.00115068 12.5 0.00120928 12.534 0.00126618 12.568 0.00132134 12.602 0.00137471 12.636 0.00142626 12.669 0.00147595 12.703 0.00152374 12.737 0.00156961 12.771 0.00161351 12.805 0.00165543 12.839 0.00169534 12.873 0.00173321 12.907 0.00176902 12.94 0.00180275 12.974 0.00183438 13.008 0.00186391 13.042 0.00189131 13.076 0.00191657 13.11 0.0019397 13.144 0.00196067 13.178 0.0019795 13.211 0.00199617 13.245 0.00201068 13.279 0.00202305 13.313 0.00203327 13.347 0.00204135 13.381 0.00204731 13.415 0.00205114 13.449 0.00205287 13.482 0.00205251 13.516 0.00205008 13.55 0.00204559 13.584 0.00203907 13.618 0.00203054 13.652 0.00202003 13.686 0.00200756 13.72 0.00199316 13.753 0.00197686 13.787 0.0019587 13.821 0.00193869 13.855 0.00191689 13.889 0.00189333 13.923 0.00186804 13.957 0.00184106 13.991 0.00181244 14.024 0.00178222 14.058 0.00175044 14.092 0.00171714 14.126 0.00168237 14.16 0.00164619 14.194 0.00160862 14.228 0.00156973 14.262 0.00152957 14.295 0.00148818 14.329 0.00144562 14.363 0.00140194 14.397 0.00135719 14.431 0.00131143 14.465 0.0012647 14.499 0.00121707 14.533 0.0011686 14.566 0.00111932 14.6 0.00106931 14.634 0.00101862 14.668 0.000967305 14.702 0.000915421 14.736 0.000863025 14.77 0.000810174 14.804 0.000756927 14.837 0.000703338 14.871 0.000649466 14.905 0.000595367 14.939 0.000541096 14.973 0.000486711 15.007 0.000432267 15.041 0.000377819 15.075 0.000323422 15.108 0.000269131 15.142 0.000214999 15.176 0.00016108 15.21 0.000107427 15.244 5.40904e-05 15.278 1.12259e-06 15.312 5.14263e-05 15.346 0.000103507 15.379 0.00015507 15.413 0.000206068 15.447 0.000256454 15.481 0.000306182 15.515 0.000355208 15.549 0.000403487 15.583 0.000450977 15.617 0.000497637 15.65 0.000543426 15.684 0.000588304 15.718 0.000632235 15.752 0.000675182 15.786 0.000717108 15.82 0.00075798 15.854 0.000797765 15.888 0.000836433 15.921 0.000873952 15.955 0.000910295 15.989 0.000945433 16.023 0.000979343 16.057 0.001012 16.091 0.00104338 16.125 0.00107346 16.159 0.00110222 16.192 0.00112965 16.226 0.00115572 16.26 0.00118042 16.294 0.00120375 16.328 0.00122567 16.362 0.00124619 16.396 0.0012653 16.43 0.00128298 16.463 0.00129924 16.497 0.00131405 16.531 0.00132744 16.565 0.00133938 16.599 0.00134988 16.633 0.00135894 16.667 0.00136657 16.701 0.00137276 16.734 0.00137752 16.768 0.00138087 16.802 0.0013828 16.836 0.00138333 16.87 0.00138246 16.904 0.00138021 16.938 0.0013766 16.972 0.00137164 17.005 0.00136533 17.039 0.00135771 17.073 0.00134878 17.107 0.00133858 17.141 0.00132711 17.175 0.0013144 17.209 0.00130048 17.243 0.00128536 17.276 0.00126907 17.31 0.00125164 17.344 0.0012331 17.378 0.00121347 17.412 0.00119277 17.446 0.00117105 17.48 0.00114833 17.514 0.00112463 17.547 0.0011 17.581 0.00107446 17.615 0.00104806 17.649 0.00102081 17.683 0.000992757 17.717 0.000963935 17.751 0.000934379 17.785 0.000904123 17.818 0.000873205 17.852 0.00084166 17.886 0.000809526 17.92 0.000776839 17.954 0.000743637 17.988 0.000709957 18.022 0.000675838 18.056 0.000641316 18.089 0.000606431 18.123 0.000571219 18.157 0.00053572 18.191 0.000499971 18.225 0.00046401 18.259 0.000427876 18.293 0.000391605 18.327 0.000355236 18.36 0.000318806 18.394 0.000282352 18.428 0.00024591 18.462 0.000209519 18.496 0.000173214 18.53 0.00013703 18.564 0.000101003 18.598 6.51686e-05 18.631 2.95609e-05 18.665 5.78599e-06 18.699 4.08387e-05 18.733 7.55641e-05 18.767 0.00010993 18.801 0.000143905 18.835 0.000177457 18.869 0.000210557 18.902 0.000243174 18.936 0.00027528 18.97 0.000306847 19.004 0.000337846 19.038 0.000368252 19.072 0.000398039 19.106 0.000427181 19.14 0.000455654 19.173 0.000483435 19.207 0.000510502 19.241 0.000536833 19.275 0.000562408 19.309 0.000587207 19.343 0.00061121 19.377 0.000634402 19.411 0.000656763 19.444 0.00067828 19.478 0.000698937 19.512 0.000718719 19.546 0.000737615 19.58 0.000755612 19.614 0.000772699 19.648 0.000788867 19.682 0.000804106 19.715 0.000818409 19.749 0.000831769 19.783 0.00084418 19.817 0.000855638 19.851 0.000866137 19.885 0.000875676 19.919 0.000884253 19.953 0.000891866 19.986 0.000898517 20.02 0.000904205 20.054 0.000908933 20.088 0.000912703 20.122 0.000915521 20.156 0.00091739 20.19 0.000918317 20.224 0.000918308 20.257 0.00091737 20.291 0.000915512 20.325 0.000912744 20.359 0.000909075 20.393 0.000904517 20.427 0.00089908 20.461 0.000892779 20.495 0.000885625 20.528 0.000877634 20.562 0.00086882 20.596 0.000859198 20.63 0.000848784 20.664 0.000837596 20.698 0.000825652 20.732 0.000812968 20.766 0.000799564 20.799 0.00078546 20.833 0.000770674 20.867 0.000755228 20.901 0.000739142 20.935 0.000722438 20.969 0.000705138 21.003 0.000687263 21.037 0.000668837 21.07 0.000649882 21.104 0.000630422 21.138 0.00061048 21.172 0.000590081 21.206 0.000569248 21.24 0.000548006 21.274 0.000526381 21.308 0.000504396 21.341 0.000482077 21.375 0.000459449 21.409 0.000436537 21.443 0.000413367 21.477 0.000389963 21.511 0.000366353 21.545 0.00034256 21.579 0.000318611 21.612 0.00029453 21.646 0.000270344 21.68 0.000246077 21.714 0.000221755 21.748 0.000197402 21.782 0.000173044 21.816 0.000148704 21.85 0.000124407 21.883 0.000100178 21.917 7.60401e-05 21.951 5.2017e-05 21.985 2.81319e-05 22.019 4.40794e-06 22.053 1.91323e-05 22.087 4.24667e-05 22.121 6.55733e-05 22.154 8.84306e-05 22.188 0.000111018 22.222 0.000133314 22.256 0.000155299 22.29 0.000176953 22.324 0.000198258 22.358 0.000219194 22.392 0.000239744 22.425 0.000259889 22.459 0.000279614 22.493 0.0002989 22.527 0.000317733 22.561 0.000336096 22.595 0.000353976 22.629 0.000371359 22.663 0.000388229 22.696 0.000404576 22.73 0.000420386 22.764 0.000435647 22.798 0.00045035 22.832 0.000464483 22.866 0.000478038 22.9 0.000491004 22.934 0.000503373 22.967 0.000515139 23.001 0.000526293 23.035 0.00053683 23.069 0.000546744 23.103 0.000556029 23.137 0.000564683 23.171 0.0005727 23.205 0.000580078 23.238 0.000586815 23.272 0.000592909 23.306 0.000598359 23.34 0.000603165 23.374 0.000607327 23.408 0.000610846 23.442 0.000613724 23.476 0.000615963 23.509 0.000617565 23.543 0.000618535 23.577 0.000618876 23.611 0.000618594 23.645 0.000617693 23.679 0.000616179 23.713 0.000614059 23.747 0.00061134 23.78 0.000608029 23.814 0.000604134 23.848 0.000599665 23.882 0.000594629 23.916 0.000589038 23.95 0.0005829 23.984 0.000576227 24.018 0.000569029 24.051 0.000561318 24.085 0.000553105 24.119 0.000544404 24.153 0.000535227 24.187 0.000525587 24.221 0.000515496 24.255 0.00050497 24.289 0.000494022 24.322 0.000482667 24.356 0.000470919 24.39 0.000458793 24.424 0.000446305 24.458 0.00043347 24.492 0.000420303 24.526 0.000406822 24.56 0.000393041 24.593 0.000378977 24.627 0.000364646 24.661 0.000350066 24.695 0.000335252 24.729 0.000320222 24.763 0.000304992 24.797 0.00028958 24.831 0.000274002 24.864 0.000258275 24.898 0.000242417 24.932 0.000226444 24.966 0.000210374 25 0.000194223 gerris-snapshot-131206/test/capwave/density/convergence.ref0000644000175100017510000000005712250371171020744 000000000000003 0.149715 4 0.0480361 5 0.010013 6 0.00280621 gerris-snapshot-131206/test/diffusion/0000755000175100017510000000000012250371673014716 500000000000000gerris-snapshot-131206/test/diffusion/diffusion.gfs0000644000175100017510000000242312250371171017317 00000000000000# Title: Comparison between the explicit and implicit diffusion schemes # # Description: # # A tracer diffuses from the (circular) boundary of the domain for a # given time. This test case compares the solutions obtained using the # implicit and the explicit diffusion schemes. # # The radial tracer profiles for both schemes are illustrated in # Figure \ref{profile}. # # \begin{figure}[htbp] # \caption{\label{profile}Radial tracer profile evolution as a function of time.} # \begin{center} # \includegraphics[width=0.8\hsize]{profile.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh diffusion.sh # Version: 101103 # Required files: diffusion.sh # Generated files: profile.eps # 1 0 GfsAdvection GfsBox GfsGEdge {} { VariableTracer T { scheme = none } # SourceDiffusion T 1 { beta = 1 } SourceDiffusionExplicit T 1 Solid (-sphere(0,0,0,0.4)) Refine 5 SurfaceBc T Dirichlet 1 # Just checks that it works with hypre GModule hypre Time { end = 0.02 dtmax = 9e-5 } # OutputTime { istep = 1 } stderr OutputSimulation { start = 0.01 } end.gfs OutputSimulation { start = 2.5e-3 step = 2.5e-3 } { awk '{ if ($1 != "#") print sqrt($1*$1+$2*$2),$8; }' > prof } { format = text } } GfsBox {} gerris-snapshot-131206/test/diffusion/diffusion.sh0000644000175100017510000000140012250371171017144 00000000000000if gerris2D diffusion.gfs; then mv end.gfs end-explicit.gfs mv prof prof-explicit else exit 1 fi if sed -e 's/SourceDiffusionExplicit T/#/' \ -e 's/# SourceDiffusion/ SourceDiffusion/' < diffusion.gfs | \ gerris2D -; then mv end.gfs end-implicit.gfs mv prof prof-implicit else exit 1 fi if cat <&1 | awk '{ if ($1 == "total" && ($6 > 3e-3 || $8 > 4e-3)) { print $0 exit (1) } }'; then : else exit 1 fi gerris-snapshot-131206/test/diffusion/concentration/0000755000175100017510000000000012250371673017564 500000000000000gerris-snapshot-131206/test/diffusion/concentration/concentration.sh0000644000175100017510000000153712250371171022705 00000000000000if gerris2D -m concentration.gfs; then mv end.gfs end-explicit.gfs mv prof prof-explicit else exit 1 fi if sed -e 's/SourceDiffusionExplicit C/#/' \ -e 's/# SourceDiffusion/ SourceDiffusion/' < concentration.gfs | \ gerris2D -m -; then mv end.gfs end-implicit.gfs mv prof prof-implicit else exit 1 fi if cat <&1 | awk '{ if ($1 == "total" && ($6 > 7.07e-4 || $8 > 2.27e-3)) { print $0 exit (1) } }'; then : else exit 1 fi gerris-snapshot-131206/test/diffusion/concentration/concentration.gfs0000644000175100017510000000423012250371171023043 00000000000000# Title: Comparison between explicit and implicit diffusion schemes on concentration tracer # # Description: # # A non-homogeneous concentration confined in an annular gap relaxes # by diffusion to the equilibrium state. This test case compares the # solutions obtained using the implicit and the explicit diffusion # schemes over a concentration. The total amount of the species is # preserved with both schemes to within $2\times 10^{-7}$. # # The radial concentration profiles for both schemes are illustrated in # Figure \ref{profile}. # # \begin{figure}[htbp] # \caption{\label{profile}Radial concentration profile at time t=0.005.} # \begin{center} # \includegraphics[width=0.8\hsize]{profile.eps} # \end{center} # \end{figure} # # Author: Jose Lopez-Herrera # Command: sh concentration.sh # Version: 121023 # Required files: concentration.sh # Generated files: profile.eps # Define R sqrt(x*x+y*y) Define R0 0.25 Define GAUSSIAN (exp(-250.*((R-R0)*(R-R0)))) 1 0 GfsAdvection GfsBox GfsGEdge {} { VariableTracerVOF T VariableTracer T1 { scheme = none } VariableVOFConcentration C T Refine 5 InitFraction T (-difference(sphere(0,0,0,0.4),sphere(0,0,0,0.1))) Init {} { C = GAUSSIAN*T T1 = C } # GModule hypre SourceDiffusion T1 T/(T+1.e9*(1.-T)*(1.-T)) {beta = 1} SourceDiffusionExplicit C T/(T+1.e9*(1.-T)*(1.-T)) # SourceDiffusion C T/(T+1.e9*(1.-T)*(1.-T)) Time { end = 0.02 dtmax = 9e-5 } OutputSimulation { start = 0.01 } end.gfs OutputScalarSum {istep = 10} T1vol { v = T1 } OutputScalarSum {istep = 10} Cvol { v = C } EventScript { start = end } { conservation() { if awk -v tolerance=$1 'BEGIN { min = 1.; max = -1.; }{ if ($5 > max) max = $5; if ($5 < min) min = $5; }END{ if (max - min > tolerance) { print max - min > "/dev/stderr"; exit (1); } }'; then : else exit $GFS_STOP; fi } conservation 2.1e-7 < T1vol conservation 2.1e-7 < Cvol } OutputSimulation {start = 0.005} { awk '{ if ($1 != "#" && $8 > 0.) print sqrt($1*$1+$2*$2),$12,$13; }' > prof } { format = text} } GfsBox {} gerris-snapshot-131206/test/swirl.sh0000755000175100017510000000003012250371662014336 00000000000000python -u test.py swirl gerris-snapshot-131206/test/cosine.sh0000755000175100017510000000003112250371662014457 00000000000000python -u test.py cosine gerris-snapshot-131206/test/debye/0000755000175100017510000000000012250371674014021 500000000000000gerris-snapshot-131206/test/debye/points0000644000175100017510000000076412250371171015177 000000000000000. 0. 0. 0.1 0. 0. 0.2 0. 0. 0.3 0. 0. 0.4 0. 0. 0.5 0. 0. 0.6 0. 0. 0.7 0. 0. 0.8 0. 0. 0.9 0. 0. 1.0 0. 0. 1.1 0. 0. 1.2 0. 0. 1.3 0. 0. 1.4 0. 0. 1.5 0. 0. 1.6 0. 0. 1.7 0. 0. 1.8 0. 0. 1.9 0. 0. 2.0 0. 0. 2.1 0. 0. 2.2 0. 0. 2.3 0. 0. 2.4 0. 0. 2.5 0. 0. 2.6 0. 0. 2.7 0. 0. 2.8 0. 0. 2.9 0. 0. 3.0 0. 0. 3.1 0. 0. 3.2 0. 0. 3.3 0. 0. 3.4 0. 0. 3.5 0. 0. 3.6 0. 0. 3.7 0. 0. 3.8 0. 0. 3.9 0. 0. 4.0 0. 0. 4.1 0. 0. 4.2 0. 0. 4.3 0. 0. 4.4 0. 0. 4.5 0. 0. 4.6 0. 0. 4.7 0. 0. 4.8 0. 0. 4.9 0. 0. gerris-snapshot-131206/test/debye/analytical0000644000175100017510000001454412250371171016005 00000000000000 0.0000000e+00 1.0000000e+00 3.6787944e-01 2.7182818e+00 5.0505051e-02 9.2845638e-01 3.9516322e-01 2.5305999e+00 1.0101010e-01 8.6237630e-01 4.2215772e-01 2.3687829e+00 1.5151515e-01 8.0126816e-01 4.4875950e-01 2.2283651e+00 2.0202020e-01 7.4469320e-01 4.7487997e-01 2.1057953e+00 2.5252525e-01 6.9229059e-01 5.0042848e-01 1.9982876e+00 3.0303030e-01 6.4370361e-01 5.2534315e-01 1.9035177e+00 3.5353535e-01 5.9861303e-01 5.4957335e-01 1.8195933e+00 4.0404040e-01 5.5677627e-01 5.7305346e-01 1.7450379e+00 4.5454545e-01 5.1795716e-01 5.9573630e-01 1.6785950e+00 5.0505051e-01 4.8191951e-01 6.1759677e-01 1.6191794e+00 5.5555556e-01 4.4842714e-01 6.3863184e-01 1.5658474e+00 6.0606061e-01 4.1727191e-01 6.5884175e-01 1.5178152e+00 6.5656566e-01 3.8830612e-01 6.7820470e-01 1.4744811e+00 7.0707071e-01 3.6138419e-01 6.9671127e-01 1.4353148e+00 7.5757576e-01 3.3636058e-01 7.1436547e-01 1.3998437e+00 8.0808081e-01 3.1308973e-01 7.3118430e-01 1.3676442e+00 8.5858586e-01 2.9142864e-01 7.4719533e-01 1.3383381e+00 9.0909091e-01 2.7126644e-01 7.6241333e-01 1.3116245e+00 9.5959596e-01 2.5250938e-01 7.7684893e-01 1.2872516e+00 1.0101010e+00 2.3506326e-01 7.9052084e-01 1.2649888e+00 1.0606061e+00 2.1883390e-01 8.0345516e-01 1.2446245e+00 1.1111111e+00 2.0372712e-01 8.1568493e-01 1.2259636e+00 1.1616162e+00 1.8965731e-01 8.2724257e-01 1.2088353e+00 1.2121212e+00 1.7656008e-01 8.3814842e-01 1.1931061e+00 1.2626263e+00 1.6437308e-01 8.4842543e-01 1.1786540e+00 1.3131313e+00 1.5303395e-01 8.5810059e-01 1.1653645e+00 1.3636364e+00 1.4248033e-01 8.6720461e-01 1.1531304e+00 1.4141414e+00 1.3265080e-01 8.7577086e-01 1.1418512e+00 1.4646465e+00 1.2349628e-01 8.8382493e-01 1.1314458e+00 1.5151515e+00 1.1497511e-01 8.9138833e-01 1.1218455e+00 1.5656566e+00 1.0704556e-01 8.9848473e-01 1.1129850e+00 1.6161616e+00 9.9665921e-02 9.0513976e-01 1.1048018e+00 1.6666667e+00 9.2794457e-02 9.1138081e-01 1.0972362e+00 1.7171717e+00 8.6392991e-02 9.1723370e-01 1.0902347e+00 1.7676768e+00 8.0432456e-02 9.2271723e-01 1.0837556e+00 1.8181818e+00 7.4884795e-02 9.2785037e-01 1.0777600e+00 1.8686869e+00 6.9721950e-02 9.3265311e-01 1.0722100e+00 1.9191919e+00 6.4915865e-02 9.3714631e-01 1.0670692e+00 1.9696970e+00 6.0438881e-02 9.4135130e-01 1.0623027e+00 2.0202020e+00 5.6268767e-02 9.4528504e-01 1.0578820e+00 2.0707071e+00 5.2386632e-02 9.4896190e-01 1.0537831e+00 2.1212121e+00 4.8773566e-02 9.5239676e-01 1.0499826e+00 2.1717172e+00 4.5410658e-02 9.5560497e-01 1.0464575e+00 2.2222222e+00 4.2278998e-02 9.5860229e-01 1.0431855e+00 2.2727273e+00 3.9361260e-02 9.6140333e-01 1.0401462e+00 2.3232323e+00 3.6644214e-02 9.6401906e-01 1.0373239e+00 2.3737374e+00 3.4115101e-02 9.6646026e-01 1.0347037e+00 2.4242424e+00 3.1761161e-02 9.6873793e-01 1.0322709e+00 2.4747475e+00 2.9569634e-02 9.7086327e-01 1.0300112e+00 2.5252525e+00 2.7527938e-02 9.7284750e-01 1.0279103e+00 2.5757576e+00 2.5625948e-02 9.7469961e-01 1.0259571e+00 2.6262626e+00 2.3855053e-02 9.7642723e-01 1.0241419e+00 2.6767677e+00 2.2206636e-02 9.7803812e-01 1.0224550e+00 2.7272727e+00 2.0672078e-02 9.7954012e-01 1.0208872e+00 2.7777778e+00 1.9242763e-02 9.8094120e-01 1.0194291e+00 2.8282828e+00 1.7910790e-02 9.8224865e-01 1.0180722e+00 2.8787879e+00 1.6670122e-02 9.8346806e-01 1.0168098e+00 2.9292929e+00 1.5514932e-02 9.8460480e-01 1.0156359e+00 2.9797980e+00 1.4439394e-02 9.8566435e-01 1.0145441e+00 3.0303030e+00 1.3437682e-02 9.8665220e-01 1.0135284e+00 3.0808081e+00 1.2504054e-02 9.8757380e-01 1.0125826e+00 3.1313131e+00 1.1633878e-02 9.8843353e-01 1.0117018e+00 3.1818182e+00 1.0823212e-02 9.8923515e-01 1.0108820e+00 3.2323232e+00 1.0068111e-02 9.8998240e-01 1.0101190e+00 3.2828283e+00 9.3646290e-03 9.9067908e-01 1.0094086e+00 3.3333333e+00 8.7088193e-03 9.9132899e-01 1.0087469e+00 3.3838384e+00 8.0970626e-03 9.9193563e-01 1.0081299e+00 3.4343434e+00 7.5265812e-03 9.9250167e-01 1.0075550e+00 3.4848485e+00 6.9946918e-03 9.9302971e-01 1.0070192e+00 3.5353535e+00 6.4987114e-03 9.9352236e-01 1.0065199e+00 3.5858586e+00 6.0359568e-03 9.9398222e-01 1.0060542e+00 3.6363636e+00 5.6037823e-03 9.9441189e-01 1.0056195e+00 3.6868687e+00 5.2000448e-03 9.9481345e-01 1.0052136e+00 3.7373737e+00 4.8229068e-03 9.9518870e-01 1.0048346e+00 3.7878788e+00 4.4705283e-03 9.9553945e-01 1.0044805e+00 3.8383838e+00 4.1410695e-03 9.9586749e-01 1.0041497e+00 3.8888889e+00 3.8326906e-03 9.9617464e-01 1.0038400e+00 3.9393939e+00 3.5436990e-03 9.9646257e-01 1.0035500e+00 3.9898990e+00 3.2727724e-03 9.9673258e-01 1.0032781e+00 4.0404040e+00 3.0186268e-03 9.9698592e-01 1.0030232e+00 4.0909091e+00 2.7799778e-03 9.9722388e-01 1.0027838e+00 4.1414141e+00 2.5555415e-03 9.9744772e-01 1.0025588e+00 4.1919192e+00 2.3440507e-03 9.9765869e-01 1.0023468e+00 4.2424242e+00 2.1444567e-03 9.9785784e-01 1.0021468e+00 4.2929293e+00 1.9558326e-03 9.9804608e-01 1.0019577e+00 4.3434343e+00 1.7772493e-03 9.9822433e-01 1.0017788e+00 4.3939394e+00 1.6077774e-03 9.9839351e-01 1.0016091e+00 4.4444444e+00 1.4464879e-03 9.9855456e-01 1.0014475e+00 4.4949495e+00 1.2925153e-03 9.9870832e-01 1.0012934e+00 4.5454545e+00 1.1451339e-03 9.9885552e-01 1.0011458e+00 4.5959596e+00 1.0036243e-03 9.9899688e-01 1.0010041e+00 4.6464646e+00 8.6726702e-04 9.9913311e-01 1.0008676e+00 4.6969697e+00 7.3534254e-04 9.9926493e-01 1.0007356e+00 4.7474747e+00 6.0713931e-04 9.9939304e-01 1.0006073e+00 4.7979798e+00 4.8202160e-04 9.9951809e-01 1.0004821e+00 4.8484848e+00 3.5937103e-04 9.9964069e-01 1.0003594e+00 4.8989899e+00 2.3856538e-04 9.9976146e-01 1.0002386e+00 4.9494949e+00 1.1898245e-04 9.9988102e-01 1.0001190e+00 5.0000000e+00 -1.1085209e-23 1.0000000e+00 1.0000000e+00 gerris-snapshot-131206/test/debye/debye.sh0000644000175100017510000000175512250371171015365 00000000000000if test x$donotrun != xtrue; then if gerris2D debye.gfs; then : else exit 1 fi fi if cat < 1.6e-3 or \ (Curve('profile',1,3) - Curve('analytical',1,3)).normi() > 6.9e-3 or \ (Curve('profile',1,4) - Curve('analytical',1,4)).normi() > 6.77e-3: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/debye/debye.gfs0000644000175100017510000000620612250371171015526 00000000000000# Title: Gouy-Chapman Debye layer # # Description: # # The Debye layer is the ionic concentration and potential # distribution equilibrium structure that appears on the surface of a # charged electrode in contact with solvents in which are dissolved # ionic species. Gouy and Chapman proposed a model of a diffuse Debye # layer taking into account that the concentrations of these ionic # species are governed by the combined effect of its thermal diffusion # and its electrostatic attraction or repulsion. # # In the case of a plane electrode within a fully dissolved binary # system (ion and counterions of valence $z$, $|z|=1$) the model # reduces to the following dimensionless equations: # $$ # n_{+} = e^{-\phi} \quad \mbox{and} \quad n_{-}=e^{\phi} # $$ # $$ # d^2 \phi/d x^2 = -(n_{+}-n_{-})=2 \sinh(\phi) # $$ # with the boundary conditions: $\phi(0)=\phi_o$ and $\phi(x # \rightarrow \infty)=0$. In the above equations the concentrations of # anions and cations, $n_{+}$ and $n_{-}$ respectively, have been made # dimensionless with the bulk concentration, $n_o$, the potential # $\phi$ with $(K_b T/e)$ and lengths with the Debye's length # $\lambda_D = [n_o e^2/(K_b T \varepsilon)]^{1/2}$ where $K_b$ is # Boltzmann's constant, $T$ the temperature, $e$ the charge of the # electron and $\varepsilon$ the permittivity of the fluid. # \begin{figure}[htbp] # \caption{\label{charge} Profiles of electric potential, # concentration of anions and cations in the Debye layer. The lines # are the analytical solution and the symbols the numerical # solution.} # \begin{center} # \includegraphics[width=\hsize]{profile.eps} # \end{center} # \end{figure} # # Author: J.M. L\'opez-Herrera # Command: sh debye.sh # Version: 111123 # Required files: debye.sh points analytical # Running time: 66.59 seconds # Generated files: profile.eps GModule electrohydro 5 4 GfsElectroHydro GfsBox GfsGEdge { x = 0.5 } { Global { #define Volt 1.0 } VariableTracer Cpos { scheme = none } VariableTracer Cneg { scheme = none } AdaptGradient { istep = 5 } { cmax = 0.02 minlevel = 3 maxlevel = 5 } Cneg Init {} { Phi = Volt*(1.-x/5.) Cpos = 1. Cneg = 1. } Time { end = 3.5 dtmax = 0.01 } SourceDiffusion Cpos 1.0 SourceDiffusionExplicit Cpos Cpos Phi SourceDiffusion Cneg 1.0 SourceDiffusionExplicit Cneg -Cneg Phi EventStop { istep = 10 } Phi 1e-4 DPhi # OutputSimulation { istep = 5 } stdout OutputLocation { start = end } { awk '{ if ($1 != "#") print $2, $9, $12, $13; }' > profile } points } { # Electric parameters perm = 1.0 charge = (Cpos - Cneg) } GfsBox { top = Boundary bottom = Boundary left = Boundary { BcDirichlet Phi Volt BcDirichlet Cpos exp(-Volt) BcDirichlet Cneg exp(Volt) } } GfsBox { top = Boundary bottom = Boundary } GfsBox { top = Boundary bottom = Boundary } GfsBox { top = Boundary bottom = Boundary } GfsBox { top = Boundary bottom = Boundary right = Boundary { BcDirichlet Phi 0. BcDirichlet Cpos 1. BcDirichlet Cneg 1. } } 1 2 right 2 3 right 3 4 right 4 5 right gerris-snapshot-131206/test/axi/0000755000175100017510000000000012250371673013511 500000000000000gerris-snapshot-131206/test/axi/viscous/0000755000175100017510000000000012250371673015204 500000000000000gerris-snapshot-131206/test/axi/viscous/fadlun-cp-1000000644000175100017510000000337012250371171017212 000000000000000.00650221 1.09141 0.0402099 1.09138 0.0708118 1.08118 0.101414 1.07099 0.138103 1.05063 0.177828 1.0235 0.226719 0.989586 0.269482 0.955678 0.30606 0.908232 0.345717 0.86417 0.379286 0.830272 0.421938 0.769275 0.440213 0.742167 0.470691 0.7015 0.49809 0.657451 0.516365 0.630343 0.531576 0.603237 0.549851 0.576129 0.726338 0.271189 0.741535 0.240698 0.750631 0.216986 0.768907 0.189877 0.784118 0.162772 0.802393 0.135663 0.81759 0.105172 0.835865 0.0780634 0.893687 -0.020196 0.951522 -0.115069 0.969797 -0.142178 0.988072 -0.169287 1.00328 -0.196392 1.02464 -0.220118 1.06726 -0.287886 1.1069 -0.335335 1.12826 -0.359061 1.20452 -0.443797 1.22895 -0.464141 1.25033 -0.481095 1.29918 -0.525168 1.32672 -0.535357 1.35426 -0.545547 1.3787 -0.562504 1.40933 -0.565925 1.43073 -0.579493 1.45214 -0.589675 1.46744 -0.593078 1.49807 -0.596499 1.51034 -0.593127 1.541 -0.589775 1.56553 -0.586417 1.59616 -0.589838 1.62072 -0.579707 1.65135 -0.583128 1.67895 -0.576387 1.70659 -0.562874 1.73727 -0.552751 1.74648 -0.549375 1.77409 -0.542634 1.80172 -0.529122 1.86004 -0.505485 1.90917 -0.481839 1.9368 -0.468326 1.95831 -0.454806 1.98286 -0.444676 2.00742 -0.434546 2.03197 -0.424415 2.05347 -0.414282 2.0811 -0.400769 2.10872 -0.390642 2.13635 -0.377129 2.16705 -0.36362 2.19466 -0.356879 2.22229 -0.343366 2.24684 -0.336622 2.27752 -0.326498 2.30514 -0.316371 2.33276 -0.306245 2.36037 -0.299504 2.38799 -0.289377 2.41866 -0.28264 2.4432 -0.275895 2.47387 -0.269158 2.50148 -0.262417 2.53215 -0.25568 2.55976 -0.248939 2.5843 -0.242194 2.61189 -0.23884 2.75911 -0.208532 2.78669 -0.208563 2.81429 -0.201822 2.84495 -0.198471 2.87562 -0.191733 2.90628 -0.188382 2.93387 -0.185027 2.96453 -0.181676 2.99519 -0.178324 3.02279 -0.171583 3.05342 -0.175004 3.08408 -0.171652 3.11474 -0.168301 gerris-snapshot-131206/test/axi/viscous/zhang0000644000175100017510000000016112250371171016145 00000000000000#x Zhang 29.8903 0.133929 40.0366 0.262897 49.9086 0.386905 60.0548 0.491071 80.0731 0.674603 99.8172 0.848214 gerris-snapshot-131206/test/axi/viscous/blanco-19950000644000175100017510000000007212250371171016702 0000000000000020.0453 0 38.4509 0.46092 70.6662 1.22222 99.8764 1.72006 gerris-snapshot-131206/test/axi/viscous/Re-120000644000175100017510000000053112250371171015625 0000000000000020 100 0.00601338 0.00214903 30 100 0.144321 -1.54293e-05 40 100 0.281624 0.000964816 50 100 0.405324 2.30829e-05 60 100 0.51502 2.97476e-05 80 22.7 0.703601 0.000283994 100 28.1 0.86826 -0.00022001 120 31.4 1.01188 -1.2337e-05 150 31.5 1.19646 -6.03988e-05 200 36.2 1.44074 -6.93522e-05 250 76 1.62679 -2.93692e-06 300 100 1.76844 -1.06835e-07 gerris-snapshot-131206/test/axi/viscous/fadlun0000644000175100017510000000024112250371171016306 00000000000000#x Fadlun 25.1277 0.0820564 30.2905 0.141539 39.8675 0.297622 50.1931 0.416587 59.7792 0.535541 75.2714 0.699138 79.7001 0.736332 199.284 1.70345 498.74 2.10889 gerris-snapshot-131206/test/axi/viscous/viscous.sh0000644000175100017510000000314512250371171017147 00000000000000if test x$donotrun != xtrue; then awk 'BEGIN{ for (x = 0.5; x <= 3.; x += 1./256.) print x, 0., 0.;}' > axis for Re in 100; do if gerris2D -DLEVEL=12 -DRE=$Re viscous.gfs; then : else exit 1 fi if gfs2oogl2D -c P -o -i < end-12-$Re.gfs | \ awk '{print 3.14159265359 - atan2($2,$1),$4*2.}' | \ sort -k 1,2 > cp-12-$Re; then : else exit 1 fi done fi if echo "Save isolines.eps { format = EPS }" | gfsview-batch2D end-12-100.gfs isolines.gfv; then : else exit 1 fi if cat < 1.6e-2: print (Curve('cp-12-100',1,2) - Curve('fadlun-cp-100',1,2)).norm2() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/axi/viscous/fadlun-cp-2000000644000175100017510000000332612250371171017214 00000000000000#x Re-200 0.00933136 1.03385 0.0368966 1.03043 0.0675123 1.02363 0.0950636 1.01682 0.122615 1.01002 0.150139 0.996445 0.174584 0.979487 0.19903 0.962529 0.220397 0.942189 0.247907 0.925228 0.26926 0.901502 0.290628 0.881162 0.311981 0.857436 0.333335 0.83371 0.354688 0.809983 0.406505 0.742205 0.497882 0.606662 0.577015 0.474518 0.637859 0.366097 0.713901 0.227185 0.774772 0.125536 0.823484 0.0476033 0.838681 0.0171121 0.856956 -0.00999656 0.872167 -0.0371018 0.890442 -0.0642104 0.908718 -0.0913191 0.923929 -0.118424 0.942204 -0.145533 0.96048 -0.172642 1.10064 -0.369188 1.12199 -0.392914 1.14336 -0.413254 1.16471 -0.43698 1.18609 -0.453935 1.20746 -0.474275 1.25941 -0.508193 1.3175 -0.542119 1.37565 -0.559115 1.4308 -0.562563 1.45838 -0.562594 1.48902 -0.562629 1.51664 -0.552502 1.54425 -0.545761 1.57185 -0.53902 1.5964 -0.532276 1.62709 -0.518766 1.65775 -0.515415 1.69768 -0.491758 1.72532 -0.478245 1.75297 -0.461346 1.78059 -0.45122 1.8236 -0.42418 1.85122 -0.414053 1.8758 -0.397151 1.90344 -0.383638 1.92799 -0.373508 1.95563 -0.359995 1.98326 -0.346482 2.01088 -0.336355 2.03547 -0.319453 2.06614 -0.312716 2.09376 -0.302589 2.12443 -0.295852 2.14899 -0.285721 2.17967 -0.275598 2.21034 -0.26886 2.23795 -0.26212 2.26862 -0.255382 2.29621 -0.252027 2.32687 -0.248676 2.35448 -0.241935 2.38513 -0.238584 2.41273 -0.235229 2.44032 -0.231874 2.47096 -0.231909 2.50162 -0.228557 2.53226 -0.228592 2.55987 -0.221851 2.59053 -0.218499 2.63344 -0.215162 2.68863 -0.208452 2.73156 -0.201729 2.75918 -0.191602 2.78983 -0.18825 2.81744 -0.18151 2.84813 -0.171386 2.87572 -0.168031 2.9064 -0.157908 2.9156 -0.157918 2.9432 -0.151177 2.97387 -0.14444 3.00454 -0.137703 3.03214 -0.134348 3.05973 -0.130993 3.09039 -0.127642 3.12104 -0.12429 gerris-snapshot-131206/test/axi/viscous/fornberg0000644000175100017510000000007612250371171016647 00000000000000#x Fornberg 99.6247 0.922272 199.31 1.59949 497.977 2.20542 gerris-snapshot-131206/test/axi/viscous/masliyah-19700000644000175100017510000000006112250371171017242 0000000000000020.0094 0.0825769 49.99 0.91264 99.9148 1.6556 gerris-snapshot-131206/test/axi/viscous/isolines.gfv0000644000175100017510000000175712250371171017460 00000000000000# GfsView 2D View { tx = -0.0102258 ty = 2.77268e-05 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 0.895771 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 1 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } U { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } Isoline { r = 0 g = 0.0160678 b = 1 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } V { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } Isoline { r = 0 g = 0.803098 b = 0.139818 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } U { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 0 levels = 0 } Solid { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } Symmetry { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 1 n.z = 0 pos = 0 } gerris-snapshot-131206/test/axi/viscous/cp-12-2000000644000175100017510000000547212250371171016171 000000000000000.0122082 1.03596 0.036632 1.03337 0.0610778 1.02801 0.08556 1.01973 0.110094 1.00848 0.134694 0.994156 0.159377 0.97694 0.184158 0.963758 0.206752 0.95857 0.219232 0.956152 0.234084 0.941808 0.259263 0.90893 0.284612 0.879878 0.303968 0.867636 0.316787 0.86038 0.335899 0.834982 0.361881 0.79477 0.378716 0.777 0.391904 0.765906 0.414648 0.733718 0.435666 0.70047 0.449168 0.686672 0.468673 0.657964 0.489793 0.621894 0.503675 0.60358 0.52422 0.569548 0.542272 0.533592 0.556615 0.51391 0.579278 0.479456 0.593887 0.455112 0.611131 0.426434 0.630019 0.387948 0.645253 0.36276 0.665318 0.328058 0.680918 0.298664 0.700022 0.264834 0.716033 0.235808 0.734326 0.203932 0.7508 0.174536 0.768399 0.143297 0.785398 0.113224 0.802397 0.0835276 0.819997 0.0534478 0.83647 0.0237254 0.854763 -0.00820992 0.870775 -0.0372544 0.889878 -0.0703106 0.905479 -0.0983104 0.925544 -0.129695 0.940778 -0.150842 0.959665 -0.183019 0.976909 -0.207078 0.991519 -0.230668 1.01418 -0.26238 1.02852 -0.278202 1.04658 -0.308696 1.06712 -0.337024 1.081 -0.351164 1.10212 -0.378892 1.12163 -0.399754 1.13513 -0.40825 1.15615 -0.4347 1.17889 -0.458974 1.19208 -0.46304 1.20891 -0.470916 1.2349 -0.50155 1.25401 -0.519646 1.26683 -0.51963 1.28618 -0.519728 1.31153 -0.537734 1.33671 -0.561508 1.35156 -0.56906 1.36404 -0.564762 1.38664 -0.555342 1.41142 -0.554992 1.4361 -0.561374 1.4607 -0.564578 1.48524 -0.565088 1.50972 -0.563096 1.53416 -0.558486 1.55859 -0.551548 1.583 -0.542996 1.60743 -0.533548 1.63187 -0.523638 1.65636 -0.513396 1.68089 -0.502784 1.70549 -0.49173 1.73017 -0.480044 1.75495 -0.46499 1.77755 -0.450128 1.79003 -0.443966 1.80488 -0.437696 1.83006 -0.427432 1.85541 -0.414374 1.87476 -0.40278 1.88758 -0.396722 1.90669 -0.388444 1.93268 -0.376222 1.94951 -0.367008 1.9627 -0.36128 1.98544 -0.351782 2.00646 -0.342482 2.01996 -0.337486 2.03947 -0.329846 2.06059 -0.320994 2.07447 -0.316432 2.09502 -0.309344 2.11307 -0.302192 2.12741 -0.297794 2.15007 -0.291136 2.16468 -0.287044 2.18193 -0.28244 2.20081 -0.276632 2.21605 -0.272968 2.23611 -0.268362 2.25171 -0.264858 2.27082 -0.260936 2.28683 -0.25778 2.30512 -0.254544 2.3216 -0.251754 2.3392 -0.249158 2.35619 -0.246772 2.37319 -0.2446 2.39079 -0.242494 2.40727 -0.24068 2.42556 -0.238842 2.44157 -0.23724 2.46067 -0.235464 2.47627 -0.233902 2.49634 -0.232184 2.51157 -0.231044 2.53046 -0.229146 2.54771 -0.22774 2.56232 -0.226114 2.58498 -0.22391 2.59932 -0.222744 2.61737 -0.21986 2.63792 -0.217012 2.6518 -0.21531 2.67292 -0.211322 2.69242 -0.208046 2.70593 -0.206326 2.72694 -0.20112 2.74969 -0.196002 2.76288 -0.194366 2.77971 -0.191118 2.80569 -0.18289 2.82481 -0.177534 2.83762 -0.176016 2.85698 -0.173063 2.88233 -0.165418 2.90751 -0.156343 2.92236 -0.152274 2.93484 -0.151542 2.95743 -0.14985 2.98222 -0.14547 3.0069 -0.139639 3.0315 -0.134555 3.05603 -0.130407 3.08051 -0.127268 3.10496 -0.125194 3.12938 -0.124181 gerris-snapshot-131206/test/axi/viscous/viscous.gfs0000644000175100017510000000654112250371171017317 00000000000000# Title: Viscous flow past a sphere # # Description: # # When viscosity is added, a recirculation region develops behind the # sphere (Figure \ref{isolines}). # # \begin{figure}[htbp] # \caption{\label{isolines}Viscous flow around a sphere at Reynolds # 100. Isolines of the velocity components ($x$ in red, $y$ in # blue). The recirculation region is indicated by the green isoline # where the value of the horizontal velocity component vanishes.} # \begin{center} # \includegraphics[width=\hsize]{isolines.eps} # \end{center} # \end{figure} # # The length of the recirculation depends on the Reynolds # number. Figure \ref{length} plots the results obtained with Gerris # as well as previously published results. Published results agree # with Gerris for Reynolds numbers smaller than 100. The mismatch for # results at Reynolds 200 can be attributed to the coarse mesh used to # resolve the wake in the studies of Fornberg \cite{fornberg1988} and # Fadlun et al \cite{fadlun2000}. # # \begin{figure}[htbp] # \caption{\label{length}Relative length of the recirculation region # as a function of the Reynolds number. The results of Gerris are # compared with the results of Masliyah \& Epstein # \cite{masliyah1970}, Fornberg \cite{fornberg1988}, Blanco \& # Magnaudet \cite{blanco1995}, Fadlun et al \cite{fadlun2000} and # Zhang \& Zheng \cite{zhang2007}.} # \begin{center} # \includegraphics[width=\hsize]{length.eps} # \end{center} # \end{figure} # # The pressure profiles are also in good agreement with those reported # by Fadlun et al (which also agree with those of Fornberg) (Figure # \ref{Cp}). # # \begin{figure}[htbp] # \caption{\label{Cp}Pressure coefficient over the sphere surface at # Reynolds numbers 100 and 200.} # \begin{center} # \includegraphics[width=\hsize]{Cp.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh viscous.sh # Version: 1.3.0 # Required files: viscous.sh cp-12-200 fadlun fadlun-cp-100 fadlun-cp-200 Re-12 zhang blanco-1995 masliyah-1970 isolines.gfv fornberg # Generated files: length.eps Cp.eps isolines.eps # Define A0 0.5 Define U0 1. 1 0 GfsAxi GfsBox GfsGEdge {} { Time { end = 100 } PhysicalParams { L = 50 } Refine 4 Refine (LEVEL + 1./50.*(x*x + y*y)*(4. - LEVEL)) Solid (ellipse (0., 0., A0, A0)) SourceViscosity 1./RE Init {} { U = U0 } AdaptGradient { istep = 1 } { cmax = 5e-2 maxlevel = LEVEL } U AdaptGradient { istep = 1 } { cmax = 5e-2 maxlevel = LEVEL } V AdaptFunction { istep = 1 } { cmax = 1e-2 maxlevel = LEVEL } { return (fabs(dx("U"))+fabs(dy("U")))/fabs(U)*ftt_cell_size (cell); } EventStop { step = 0.1 } U 1e-3 DU # OutputTime { step = 1 } stderr # OutputScalarNorm { step = 1 } stderr { v = DU } OutputSimulation { start = end } end-LEVEL-RE.gfs OutputLocation { step = 0.1 } { awk 'BEGIN { t = 2.; oldl = -1.; oldt = 0.; } { if ($1 != t) { t = $1; x1 = $2; u1 = $7; } else { x2 = $2; u2 = $7; if (u1 <= 0. && u2 > 0.) { l = (u1*x2 - u2*x1)/(u1 - u2) - A0; dl = (l - oldl)/(t - oldt); print t, l, dl; fflush (stdout); oldl = l; oldt = t; } x1 = x2; u1 = u2; } }' > l-LEVEL-RE } axis } GfsBox { left = Boundary { BcDirichlet U U0 } right = BoundaryOutflow bottom = Boundary } gerris-snapshot-131206/test/axi/order.ref0000644000175100017510000000007312250371171015233 0000000000000011 1.47106 1.19995 12 1.22132 0.915166 13 0.503267 0.92993 gerris-snapshot-131206/test/axi/axi.sh0000644000175100017510000000262612250371171014545 00000000000000if test x$donotrun != xtrue; then rm -f error for level in 10 11 12 13; do if sed "s/LEVEL/$level/g" < $1 | \ gerris2D - >> error; then : else exit 1 fi done fi if echo "Save isolines.eps { format = EPS }" | gfsview-batch2D sim-13.gfs isolines.gfv; then : else exit 1 fi if awk ' BEGIN { n = 0 } { l[n] = $1; n2[n] = $2; ni[n++] = $3; } END { for (i = 1; i < n; i++) print l[i] " " log(n2[i-1]/n2[i])/log(2.) " " log(ni[i-1]/ni[i])/log(2.); }' < error > order; then : else exit 1 fi if cat < 1e-5: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/axi/axi.gfs0000644000175100017510000000364312250371171014712 00000000000000# Title: Potential flow around a sphere # # Description: # # The axisymmetric potential flow around a sphere is computed (Figure # \ref{isolines}) and compared to the theoretical solution # \cite{lamb}. A large domain is used together with variable spatial # resolution to minimise the influence of the finite domain size. # # Figure \ref{error} and \ref{order} illustrate the convergence of the # solution for the horizontal component of velocity with increased # resolution. # # \begin{figure}[htbp] # \caption{\label{isolines}Isolines of the velocity components ($x$ in red, $y$ in blue).} # \begin{center} # \includegraphics[width=0.8\hsize]{isolines.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Evolution of the error as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Corresponding convergence order.} # \begin{center} # \includegraphics[width=0.8\hsize]{order.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh axi.sh axi.gfs # Version: 1.3.0 # Required files: axi.sh error.ref order.ref isolines.gfv # Generated files: error.eps order.eps isolines.eps # 1 0 GfsAxi GfsBox GfsGEdge {} { Time { end = 0 } PhysicalParams { L = 50 } AdvectionParams { scheme = none } ApproxProjectionParams { tolerance = 1e-10 } Refine 4 Refine (LEVEL + 1./50.*(x*x + y*y)*(4. - LEVEL)) Global { #define A0 0.5 #define U0 1. } Solid (ellipse (0., 0., A0, A0)) Init {} { U = U0 Phi = { double r = sqrt (cx*cx + cy*cy); return U0*A0*A0*A0*cx/(2.*r*r*r); } } OutputErrorNorm { start = end } { awk '{ print LEVEL " " $7 " " $9}' } { v = U } { s = (dx("Phi") + 1.) } OutputSimulation { start = end } sim-LEVEL.gfs } GfsBox { left = Boundary { BcDirichlet U U0 } right = Boundary { BcDirichlet U U0 } } gerris-snapshot-131206/test/axi/error.ref0000644000175100017510000000013412250371171015247 0000000000000010 1.115e-05 1.210e-01 11 4.022e-06 5.267e-02 12 1.725e-06 2.793e-02 13 1.217e-06 1.466e-02 gerris-snapshot-131206/test/axi/isolines.gfv0000644000175100017510000000137312250371171015757 00000000000000# GfsView 2D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 0.955076 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 1 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } U { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } Isoline { r = 0 g = 0.0160678 b = 1 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } V { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } Symmetry { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 1 n.z = 0 pos = 0 } Solid { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } gerris-snapshot-131206/test/channel.sh0000755000175100017510000000003212250371662014610 00000000000000python -u test.py channel gerris-snapshot-131206/test/harmonic.sh0000755000175100017510000000003312250371662015001 00000000000000python -u test.py harmonic gerris-snapshot-131206/test/summary.sh0000755000175100017510000000232312250371172014676 00000000000000endstamp=`date +%s` end=`date -d@$endstamp +"%a %d %b %H:%M:%S"` dirs="$TESTS" status=`for d in $dirs; do find $d -name status; done` fail=`grep FAIL $status | wc -l` pass=`grep PASS $status | wc -l` n=`echo $status | wc -w` logs="" for d in $dirs; do logs=$d.sh.log done earliest=`ls -tr *.log | head -n1` startstamp=`stat -c %Y $earliest` start=`date -d@$startstamp +"%a %d %b %H:%M:%S"` system=`uname -o -n -m | sed 's/_/\\\\_/'` path=`which gerris2D` version=`gerris2D -V 2>&1 | head -1 | cut -d' ' -f6-` if test x$fail = x0; then status="{\color{OliveGreen}PASS ($pass)}" else status="{\color{Red}FAIL ($fail/$n)}" fi elapsed=`awk "BEGIN{ elapsed = $endstamp - $startstamp days = int(elapsed/86400) elapsed -= days*86400 hours = int(elapsed/3600) elapsed -= hours*3600 mins = int(elapsed/60) elapsed -= mins*60 if (days > 0) printf(\"%02d:\", days); if (hours > 0) printf(\"%02d:\", hours); printf(\"%02d:%02d\", mins, elapsed); }"` cat < summary.tex \begin{tabular}{ll} {\bf Version} & $version \\\\ {\bf Path} & $path \\\\ {\bf System} & $system \\\\ {\bf Start} & $start \\\\ {\bf Finish} & $end \\\\ {\bf Elapsed} & $elapsed \\\\ {\bf Status} & $status \end{tabular} EOF gerris-snapshot-131206/test/Makefile.am0000644000175100017510000000506612250371171014704 00000000000000## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = parallel-tests EXTRA_DIST = \ template.tex \ depend.py \ test.py \ check.py \ gfs2tex \ summary.sh \ Makefile.deps clean-generic: mv -f summary.sh summary.sh.bak $(RM) *.dvi *.aux *.log *.toc *.out tests.tex *.pyc *.bbl *.blg $(TESTS) Makefile.deps mv -f summary.sh.bak summary.sh DOC = tests # we need this for gfs.sty TEXINPUTS = .:$(top_srcdir)/doc/examples: # and this for bibtex BIBINPUTS = $(top_srcdir)/doc Makefile.deps: template.tex depend.py Makefile.am python depend.py `grep \\test{[^/]*} < template.tex | sed 's/\\\\test{\(.*\)}/\1/g'` > Makefile.deps echo "" >> Makefile.deps echo -n "TESTDIRS = " >> Makefile.deps echo `grep \\test{[^/]*} < template.tex | sed 's/\\\\test{\(.*\)}/\1/g'` >> Makefile.deps include Makefile.deps tests.tex: template.tex Makefile.deps rm -r -f tests python gfs2tex $(TESTDIRS) sed -e 's/\\test{\(.*\)\/\(.*\)}/\\input{\1\/\2\/\2.tex}/g' \ -e 's/\\test{\(.*\)}/\\input{\1\/\1.tex}/g' < template.tex > tests.tex tests: tests.dvi if ! test -d $(DOC); then mkdir $(DOC); fi TEXINPUTS=$(TEXINPUTS) hevea -fix -I $(top_srcdir)/doc/examples $(DOC).tex TEXINPUTS=$(TEXINPUTS) imagen -res 500 -extra "pnmscale 0.24" $(DOC) hacha $(DOC).html rm -f $(DOC).html mv -f $(DOC)[0-9][0-9][0-9].png $(DOC) ## fixme: the character conversion below is a workaround for a bug in hevea version < 1.09 for f in *.html; do konwert iso1-utf8 < $$f > $(DOC)/$$f; rm -f $$f; done cat $(DOC).css ../doc/share/darcs.css > $(DOC)/$(DOC).css sh ../doc/share/fixnav.sh $(DOC) cp -f ../doc/share/contents.png ../doc/share/next.png ../doc/share/prev.png $(DOC) rm -f *_motif.gif $(DOC).h{tml,aux,ind,toc} $(DOC).image.tex $(DOC).css sh ../doc/examples/crossref.sh --url=http://gerris.dalembert.upmc.fr/gerris/tests/tests $(TESTDIRS) mv references tests tests.dvi: tests.tex $(top_srcdir)/doc/gerris.bib - TEXINPUTS=$(TEXINPUTS) latex -interaction=nonstopmode tests.tex > /dev/null 2>&1 BIBINPUTS=$(BIBINPUTS) bibtex tests - TEXINPUTS=$(TEXINPUTS) latex -interaction=nonstopmode tests.tex > /dev/null 2>&1 TEXINPUTS=$(TEXINPUTS) latex -interaction=nonstopmode tests.tex tests.pdf: tests.dvi dvips -Ppdf -G0 tests.dvi -o tests.ps ps2pdf -sPAPERSIZE=a4 -dMaxSubsetPct=100 -dCompatibilityLevel=1.2 -dSubsetFonts=true -dEmbedAllFonts=true tests.ps tests.pdf rm -f tests.ps tests.tar.gz: tests $(DOCS) tar czf tests.tar.gz tests $(DOCS) rm -r -f tests publish: tests.tar.gz cp tests.tar.gz $(WEBROOT)/tests cd $(WEBROOT)/tests && tar xzf tests.tar.gz && rm -f tests.tar.gz gerris-snapshot-131206/test/periodic.sh0000755000175100017510000000003312250371662014777 00000000000000python -u test.py periodic gerris-snapshot-131206/test/periodic/0000755000175100017510000000000012250371673014526 500000000000000gerris-snapshot-131206/test/periodic/periodic.gfs0000644000175100017510000000501212250371171016734 00000000000000# Title: Convergence for a simple periodic problem # # Description: # # This is one of the test cases presented in Popinet \cite{popinet2003}. # Following Minion \cite{minion96} and Almgren et al. \cite{almgren98}, # this convergence test illustrates the second-order # accuracy of Gerris for flows without solid boundaries. This # problem uses a square unit domain with periodic boundary conditions in # both directions. The initial conditions are taken as # \begin{eqnarray*} # u(x,y) &=& 1-2\cos(2\pi x)\sin(2\pi y), \\ # v(x,y) &=& 1+2\sin(2\pi x)\cos(2\pi y). # \end{eqnarray*} # The exact solution of the Euler equations for these initial conditions # is # \begin{eqnarray*} # u(x,y,t) &=& 1-2\cos(2\pi(x-t))\sin(2\pi(y-t)), \\ # v(x,y,t) &=& 1+2\sin(2\pi(x-t))\cos(2\pi(y-t)), \\ # p(x,y,t) &=& -\cos(4\pi(x-t))-\cos(4\pi(y-t)). # \end{eqnarray*} # As in \cite{almgren98} nine runs are performed on grids with $L=5,6$ # and $7$ levels of refinement (labelled ``uniform'') and with one # (labelled $r=1$) or two (labelled $r=2$) additional levels added only # within the square defined by the points $(-0.25,-0.25)$ and # $(0.25,0.25)$. The length of the run for each case is 0.5, the CFL number is # 0.75. For each run both the $L_2$ and $L_\infty$ norms of the error in # the $x$-component of the velocity is computed. Table \ref{minion1} # gives the errors and order of convergence obtained. # # Close to second-order convergence is obtained (asymptotically in # $L$) for the $L_2$ and $L_\infty$ norms. The values # obtained are comparable to that in \cite{minion96,almgren98}. # \begin{table} # \caption{\label{minion1}Errors and convergence orders in the $x$-component of the velocity # for a simple periodic problem. The reference solution values are given in blue.} # \begin{center} # \input{minion1.tex} # \end{center} # \end{table} # # Author: St\'ephane Popinet # Command: sh periodic.sh periodic.gfs # Version: 0.6.4 # Required files: periodic.sh r0.ref r1.ref r2.ref # Running time: 3 minutes # Generated files: minion1.tex # 1 2 GfsSimulation GfsBox GfsGEdge {} { Time { end = 0.5 } AdvectionParams { cfl = 0.75 } Refine (x < -0.25 || x > 0.25 || y < -0.25 || y > 0.25 ? LEVEL : LEVEL + BOX) Init {} { U = (1. - 2.*cos (2.*M_PI*x)*sin (2.*M_PI*y)) V = (1. + 2.*sin (2.*M_PI*x)*cos (2.*M_PI*y)) } ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } OutputErrorNorm { start = end } stdout { v = U } { s = (1. - 2.*cos (2.*M_PI*(x - t))*sin (2.*M_PI*(y - t))) } } GfsBox {} 1 1 right 1 1 top gerris-snapshot-131206/test/periodic/r0.ref0000644000175100017510000000010212250371171015447 000000000000005 8.268e-03 1.966e-02 6 1.155e-03 3.104e-03 7 2.073e-04 5.080e-04 gerris-snapshot-131206/test/periodic/r1.ref0000644000175100017510000000010212250371171015450 000000000000005 8.351e-03 2.200e-02 6 1.705e-03 4.765e-03 7 3.960e-04 1.144e-03 gerris-snapshot-131206/test/periodic/periodic.sh0000644000175100017510000000334512250371171016576 00000000000000if test x$donotrun != xtrue; then rm -f r0 r1 r2 for r in 0 1 2; do for level in 5 6 7; do if sed "s/LEVEL/$level/g" < $1 | \ sed "s/BOX/$r/g" | \ gerris2D - | \ awk -v level=$level '{ print level " " $7 " " $9 }' >> r$r; then : else exit 1 fi done done fi if cat < minion1.tex; then : from check import * from sys import * from math import * print r"""\begin{tabular}{|c|c|c|c|c|c|}\hline & \multicolumn{5}{c|}{\$L_2\$} \\\ \hline & \$L=5\$ & \$O_2\$ & \$L=6\$ & \$O_2\$ & \$L=7\$ \\\ \hline""" def order(r,color='black'): for i in range(0,len(r.l)-1): y0,y1 = r.l[i][1],r.l[i+1][1] print '& {\color{%s}%.2e} & {\color{%s}%4.2f}' % (color, y0, color, log(y0/y1)/log(2.)), print '& {\color{%s}%.2e}' % (color, r.l[i+1][1]), r'\\\' print 'Uniform', order(Curve('r0',1,2)) order(Curve('r0.ref',1,2),'blue') print '\$r=1\$', order(Curve('r1',1,2)) order(Curve('r1.ref',1,2),'blue') print '\$r=2\$', order(Curve('r2',1,2)) order(Curve('r2.ref',1,2),'blue') print r"""\hline & \multicolumn{5}{c|}{\$L_\infty\$} \\\ \hline & \$L=5\$ & \$O_\infty\$ & \$L=6\$ & \$O_\infty\$ & \$L=7\$ \\\ \hline""" print 'Uniform', order(Curve('r0',1,3)) order(Curve('r0.ref',1,3),'blue') print '\$r=1\$', order(Curve('r1',1,3)) order(Curve('r1.ref',1,3),'blue') print '\$r=2\$', order(Curve('r2',1,3)) order(Curve('r2.ref',1,3),'blue') print r"\hline\end{tabular}" EOF else exit 1 fi if cat < 1e-6 or\ (Curve(r,1,3) - Curve(r+'.ref',1,3)).max() > 1e-6: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/periodic/r2.ref0000644000175100017510000000010212250371171015451 000000000000005 1.062e-02 2.821e-02 6 2.505e-03 6.545e-03 7 6.242e-04 1.652e-03 gerris-snapshot-131206/test/terrain.sh0000755000175100017510000000003212250371662014644 00000000000000python -u test.py terrain gerris-snapshot-131206/test/plateau/0000755000175100017510000000000012250371673014363 500000000000000gerris-snapshot-131206/test/plateau/zoom.gfv0000644000175100017510000000151112250371171015762 00000000000000# GfsView 2D View { tx = -0.0528482 ty = -0.00119457 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 2.82706 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } VOF { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } T { reversed = 0 use_scalar = 0 draw_edges = 0 interpolate = 0 } Symmetry { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 1 n.z = 0 pos = 0 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Level { amin = 0 min = 2 amax = 0 max = 14 cmap = Jet } gerris-snapshot-131206/test/plateau/plateau.gfv0000644000175100017510000000166012250371171016436 00000000000000# GfsView 2D View { tx = -0.962113 ty = -0.0104586 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 16.3896 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } VOF { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } T { reversed = 0 use_scalar = 0 draw_edges = 0 interpolate = 0 } Symmetry { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 1 n.z = 0 pos = 0 } Symmetry { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 1 n.y = 0 n.z = 0 pos = 0.5 } Symmetry { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 1 n.y = 0 n.z = 0 pos = -0.5 } gerris-snapshot-131206/test/plateau/plateau.gfs0000644000175100017510000001364012250371171016434 00000000000000# Title: Scalings for Plateau--Rayleigh pinchoff # # Description: # # An inviscid cylinder of dense liquid is unstable under surface # tension forces. The initial growth of the perturbation is described # by the Rayleigh--Plateau linear stability theory. Close to pinchoff, # non-linear effects cannot be neglected and fully non-linear # solutions must be sought. Using simple similarity arguments, one can # predict that the minimum radius of the deformed cylinder should tend # toward zero as $(t_0-t)^{2/3}$ while the axial velocity should # diverge as $1/(t_0-t)^{1/3}$, with $t_0$ the time of pinchoff. # # This test case verifies that these scalings can be recovered using # an axisymmetric VOF calculation. # # Figure \ref{evolution} illustrates the initial growth, pinchoff and # satellite drop formation. The animation of Figure \ref{adaptivity} # shows how adaptivity is used to track the high curvatures and short # timescales close to pinchoff. Up to 14 levels of refinement are used # to capture roughly four orders of magnitude in characteristic # spatial scales. # # The scalings for the minimum radius and maximum velocity are given # in Figures \ref{radius} and \ref{velocity}, together with the # theoretical fits. The fit is excellent for at least three orders of # magnitude in timescale. The departures from the power laws close to # pinchoff are due to saturation of the spatial resolution (the # minimum value on the y-axis of Figure \ref{radius} is the grid size # $1/2^{14}$). # # See also \cite{popinet2009}, \cite{popinet2011b} and the # \htmladdnormallinkfoot{3D plateau example}{http://gerris.dalembert.upmc.fr/gerris/examples/examples/plateau.html}. # # \begin{figure}[htbp] # \caption{\label{evolution}Interface at times. (a) # $t=0.2$. (b) $t=0.6$. (c) pinchoff. (d) $t=0.8$.} # \begin{center} # \begin{tabular}{c} # (a) \includegraphics[width=0.7\hsize]{plateau-0.2.eps} \\ # (b) \includegraphics[width=0.7\hsize]{plateau-0.6.eps} \\ # (c) \includegraphics[width=0.7\hsize]{plateau-t0.eps} \\ # (d) \includegraphics[width=0.7\hsize]{plateau-0.8.eps} # \end{tabular} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{adaptivity}Animation of a closeup view of the # pinchoff area and adaptive mesh refinement. The colours correspond # to spatial resolution. Dark red is 14 levels of refinement.} # \begin{center} # \htmladdnormallinkfoot{\includegraphics[width=0.8\hsize]{zoom-t0.eps}}{plateau.mpg} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{radius}Evolution of the minimum radius.} # \begin{center} # \includegraphics[width=0.8\hsize]{y.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{velocity}Evolution of the maximum axial velocity.} # \begin{center} # \includegraphics[width=0.8\hsize]{u.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: gerris2D plateau.gfs # Version: 110927 # Required files: plateau.gfv zoom.gfv # Running time: 10 minutes # Generated files: plateau-0.2.eps plateau-0.6.eps plateau-t0.eps plateau-0.8.eps u.eps y.eps plateau.mpg zoom-t0.eps 1 0 GfsAxi GfsBox GfsGEdge {} { Refine 5 VariableTracerVOFHeight T PhysicalParams { alpha = 1./(T + 1e-2*(1. - T)) } VariableCurvature K T Kmax VariablePosition Y T y InitFraction T (0.2*(1. + 0.1*sin(M_PI*x)) - y) SourceTension T 1. K # SourceViscosity 1./20.*(T + 1e-2*(1. - T)) AdaptGradient { istep = 1 } { maxlevel = 6 cmax = 0 } T AdaptFunction { istep = 1 } { # adapt down to 14 levels to capture breakup asymptotics and # only 10 levels after breakup maxlevel = (t < 0.7455 ? 14 : 10) cmax = 0.2 } (T > 0 && T < 1)*Kmax*dL Time { end = 0.8 } OutputScalarStats { istep = 1 } p { v = P } # we need more precision for the time output OutputScalarStats { istep = 1 } y { v = Y format = "%10.6e" } OutputScalarStats { istep = 1 } k { v = K } OutputBalance { istep = 1 } balance OutputScalarSum { istep = 1 } ke { v = Velocity2*T } OutputScalarNorm { istep = 1 } u { v = U } # OutputSimulation { istep = 10 } stdout GModule gfsview OutputView { start = 0.6 istep = 5 end = 0.7455 } { ppm2mpeg -s 640x480 > plateau.mpg } { width = 1280 height = 960 } zoom.gfv OutputView { step = 0.2 } plateau-%g.eps { format = EPS } plateau.gfv OutputView { start = 0.7451 } plateau-t0.eps { format = EPS } plateau.gfv OutputView { start = 0.7451 } zoom-t0.eps { format = EPS } zoom.gfv EventScript { start = end } { # set t0 (breakup time) as the time for which the minimum # radius is smaller than the size of the finest cell: 1/2^14 t0=`awk '{ if ($5 < 1./2.**14) { print $3; exit(0);} }' < y` rm -f fit.log gnuplot < 4e-5)) { print "rmsy: " $8 > "/dev/stderr"; exit (1); }}' < fit.log; then : else status=$GFS_STOP; fi rm -f fit.log gnuplot < 8.)) { print "rmsu: " $8 > "/dev/stderr"; exit (1); }}' < fit.log; then : else status=$GFS_STOP; fi exit $status; } } GfsBox { bottom = Boundary left = Boundary right = Boundary } gerris-snapshot-131206/test/cylinder.sh0000755000175100017510000000003312250371662015012 00000000000000python -u test.py cylinder gerris-snapshot-131206/test/plateau.sh0000755000175100017510000000003212250371662014633 00000000000000python -u test.py plateau gerris-snapshot-131206/test/hydrostatic.sh0000755000175100017510000000003612250371662015541 00000000000000python -u test.py hydrostatic gerris-snapshot-131206/test/dumbell/0000755000175100017510000000000012250371672014353 500000000000000gerris-snapshot-131206/test/dumbell/dumbell.gfs0000644000175100017510000000077312250371171016421 00000000000000# Title: Poisson solution in a dumbbell-shaped domain # # Description: # # Domains with a dumbbell topology can trigger an instability in the # Poisson solver if care is not taken. # # Author: St\'ephane Popinet # Command: sh dumbell.sh # Version: 0.9.3 # Required files: dumbell.sh # 1 0 GfsPoisson GfsBox GfsGEdge {} { Refine 3 ApproxProjectionParams { nitermax = 1000 minlevel = 1 tolerance = 1e-30 } Solid dumbell.gts Init {} { Div = y } OutputProjectionStats { istep = 1 } stdout } GfsBox {} gerris-snapshot-131206/test/dumbell/dumbell.sh0000644000175100017510000000045612250371171016252 00000000000000#!/bin/sh bottom=.255 top=.49 tac < dumbell.gts -0.51 -0.51 -0.51 $bottom -0.1 $bottom -0.1 $top 0.1 $top 0.1 $bottom 0.51 $bottom 0.51 -0.51 EOF if gerris2D dumbell.gfs | awk '{ if ($1 == "residual.infty:" && $3 > 6.621e-02) exit (1); }'; then : else exit 1 fi gerris-snapshot-131206/test/terrain/0000755000175100017510000000000012250371673014374 500000000000000gerris-snapshot-131206/test/terrain/error-t.ref0000644000175100017510000000040012250371172016370 000000000000004 2.757e-02 2.551e-02 2.343e-02 5 8.357e-03 8.043e-03 9.228e-03 6 3.485e-03 3.452e-03 5.028e-03 7 5.526e-03 5.744e-03 6.830e-03 4 2.757e-02 2.551e-02 2.343e-02 5 8.357e-03 8.043e-03 9.228e-03 6 3.485e-03 3.452e-03 5.028e-03 7 5.526e-03 5.744e-03 6.830e-03 gerris-snapshot-131206/test/terrain/error-h.ref0000644000175100017510000000020012250371172016352 000000000000004 4.811e-02 4.480e-02 4.799e-02 5 1.041e-02 1.066e-02 1.687e-02 6 3.870e-03 4.229e-03 8.620e-03 7 3.426e-03 3.933e-03 7.388e-03 gerris-snapshot-131206/test/terrain/terrain.gfs0000644000175100017510000000532412250371172016457 00000000000000# Title: Terrain reconstruction # # Description: # # The terrain module is used to reconstruct a "terrain" map from # discrete samples of its analytical description: # $$z(r) = r^2/8+\cos(\pi r)/2$$ # A central area is sampled at high resolution and the surrounding # area at lower resolution to test the accuracy of the reconstruction # scheme when mixing terrain datasets at high- and low-resolutions. # # The reconstruction scheme converges initially but diverges when the # maximum spatial resolution becomes finer than the sampling # resolution of the (coarsest) terrain database. This divergence is # due to smoothing errors when interpolating the terrain data from the # coarse (database-resolved) grid to the fine grid. The errors remain # low however. # # Figures \ref{error}.(a) and \ref{error}.(b) illustrate the convergence # toward the analytical solution of the terrain reconstructed using # \htmladdnormallinkfoot{GfsVariableTerrain}{http://gfs.sourceforge.net/wiki/index.php/GfsVariableTerrain} # and # \htmladdnormallinkfoot{GfsRefineTerrain}{http://gfs.sourceforge.net/wiki/index.php/GfsRefineTerrain} # respectively. # # \begin{figure}[htbp] # \caption{\label{error}Convergence of relative error norms toward the # analytical solution for terrains reconstructed using: a) # GfsVariableTerrain, b) GfsRefineTerrain.} # \begin{center} # \begin{tabular}{cc} # \includegraphics[width=0.45\hsize]{error-t.eps} & # \includegraphics[width=0.45\hsize]{error-h.eps} \\ # (a) & (b) # \end{tabular} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh terrain.sh # Version: 120426 # Required files: terrain.sh error-t.ref error-h.ref # Running time: 5 seconds # Generated files: error-t.eps error-h.eps # 1 0 GfsRiver GfsBox GfsGEdge {} { PhysicalParams { L = 8 } GModule terrain RefineTerrain LEVEL H { basename = terrain,terrain-high } TRUE VariableTerrain T { basename = terrain,terrain-high } Time { end = 0 } OutputErrorNorm { start = end } { awk '{ print LEVEL,$5,$7,$9 }' >> error-t } { v = T } { s = { double r = sqrt (x*x + y*y); return r*r/8.+cos(M_PI*r)/2.; } w = (fabs (x) < 3.8 && fabs (y) < 3.8) relative = 1 v = Et } OutputErrorNorm { start = end } { awk '{ print LEVEL,$5,$7,$9 }' >> error-h } { v = H0 } { s = { double r = sqrt (x*x + y*y); return r*r/8.+cos(M_PI*r)/2.; } w = (fabs (x) < 3.8 && fabs (y) < 3.8) relative = 1 v = Eh } OutputSimulation { start = end } { awk '{ if ($1 != "#") { r = sqrt ($1*$1 + $2*$2); print r,$4,$5,$6,$7; } }' | sort -n -k 1,2 > end-LEVEL.txt } { format = text variables = T,H0,Et,Eh } OutputSimulation { start = end } end-LEVEL.gfs } GfsBox {} gerris-snapshot-131206/test/terrain/terrain.sh0000644000175100017510000000437012250371172016312 00000000000000#!/bin/sh if awk 'BEGIN { for (x = -4.1; x <= 4.; x += 8./128.) for (y = -4.1; y <= 4.; y += 8./128.) { r = sqrt (x*x + y*y); print x,y,r*r/8.+cos(3.14159265356*r)/2.; } }' | xyz2kdt terrain; then : else exit 1 fi if awk 'BEGIN { for (x = -4.1; x <= 4.; x += 8./512.) for (y = -4.1; y <= 4.; y += 8./512.) { r = sqrt (x*x + y*y); if (r < 2.) print x,y,r*r/8.+cos(3.14159265356*r)/2.; } }' | xyz2kdt terrain-high; then : else exit 1 fi rm -f error-t error-h for level in 4 5 6 7; do if gerris2D -DLEVEL=$level terrain.gfs; then : else exit 1 fi done if gnuplot < 0. or\ (Curve('error-t',1,4) - Curve('error-t.ref',1,4)).max() > 0. or\ (Curve('error-h',1,3) - Curve('error-h.ref',1,3)).max() > 0. or\ (Curve('error-h',1,4) - Curve('error-h.ref',1,4)).max() > 0.: print (Curve('error-t',1,3) - Curve('error-t.ref',1,3)).max() print (Curve('error-t',1,4) - Curve('error-t.ref',1,4)).max() print (Curve('error-h',1,3) - Curve('error-h.ref',1,3)).max() print (Curve('error-h',1,4) - Curve('error-h.ref',1,4)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/cylinder/0000755000175100017510000000000012250371674014542 500000000000000gerris-snapshot-131206/test/cylinder/norms.ref0000644000175100017510000000052412250371171016307 000000000000005 Ey time: 9 first: 3.050e-04 second: 2.033e-03 infty: 2.230e-02 bias: -1.598e-04 6 Ey time: 9 first: 1.632e-04 second: 1.601e-03 infty: 2.457e-02 bias: -8.971e-05 7 Ey time: 9 first: 4.149e-05 second: 5.942e-04 infty: 1.455e-02 bias: -6.469e-06 8 Ey time: 9 first: 2.281e-05 second: 3.521e-04 infty: 1.229e-02 bias: 2.924e-06 gerris-snapshot-131206/test/cylinder/cylinder.gfs0000644000175100017510000000626712250371171016777 00000000000000# Title: Charge relaxation in an axisymmetric insulated conducting column # # Description: # # A conducting rigid cylinder of radius $R_o=0.1$ is immersed in an # insulating medium. Initially an uniform charge volume density is set # in the cylinder ($\rho_e ({\bf x},0)=0.5$). As time passes the # charge migrates from the bulk to the interface of the cylinder but # the total charge in the cylinder section is preserved. # $$ # Q(t)= \int_{\Sigma} \rho_e({\bf x},t) \, d \Sigma = Q_o= \pi R_o^2 \, \rho_e({\bf x},0). # $$ # If a VariableVOFConcentration is used instead of a VariableTracer # the total charge is also preserved. The outer electric field # reaches a steady-state (Figure \ref{efield}). # # A more detailed discussion of this simulation is given in # \cite{lopez-herrera2011}. # # \begin{figure}[htbp] # \caption{\label{charge}Relative error on the # charge per unit of length of cylinder as a function of # resolution. (\% Error =$|1-Q(t)/Q_o)|$)} # \begin{center} # \includegraphics[width=0.8\hsize]{charge.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{efield} Steady-state electric field profile # as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{efield.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{Error norms for the electric field.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # Author: J.M. L\'opez-Herrera and S. Popinet # Command: sh cylinder.sh cylinder.gfs # Version: 100609 # Required files: cylinder.sh norms.ref # Running time: 15 seconds # Generated files: charge.eps efield.eps error.eps # GModule electrohydro 1 0 GfsElectroHydroAxi GfsBox GfsGEdge {} { Global { #define R0 0.1 #define rhoinic 0.5 #define K 3 #define E1 3 #define E2 1 } Time { end = 15 dtmax = 1.0 } VariableTracerVOF T VariableTracer Rhoe VariableVOFConcentration C T InitFraction T (R0 - y) AdaptGradient { istep = 1 } { cmax = 1e-4 minlevel = 5 maxlevel = LEVEL } T Init {} { Rhoe = rhoinic*T C = rhoinic*T } EventStop { istep = 10 } Ex 0.001 SourceDiffusionExplicit Rhoe K*T Phi SourceDiffusionExplicit C K*T/(T+1.e9*(1.-T)) Phi # OutputTime { istep = 1 } stderr OutputScalarSum { step = 1 } { awk 'BEGIN { R0 = 0.1 ; rhoinic = 0.5 ; L =1.0 ; Q = 0.5*R0*R0*L*rhoinic } { print $3,$5,100*sqrt((1.0 - $5/Q)*(1.0 - $5/Q)) }' > rhoe-LEVEL } { v = Rhoe } OutputScalarSum { step = 1 } { awk 'BEGIN { R0 = 0.1 ; rhoinic = 0.5 ; L =1.0 ; Q = 0.5*R0*R0*L*rhoinic } { print $3,$5,100*sqrt((1.0 - $5/Q)*(1.0 - $5/Q)) }' > C-LEVEL } { v = C } OutputSimulation { start = end } { awk '{ if ($1 != "#") print $2,sqrt($4*$4+$5*$5); }' > prof-LEVEL } { format = text variables = Ex,Ey } OutputErrorNorm { start = end } norms-LEVEL { v = Ey } { s = (y < R0 ? 0 : 0.5*R0*R0*rhoinic/y) } OutputSimulation { start = end } result-LEVEL.gfs } { # Electric parameters perm = E1*T+E2*(1.-T) charge = Rhoe # charge = C ElectricProjectionParams { tolerance = 1e-7 } } GfsBox { top = Boundary { BcDirichlet Phi 0 } bottom = Boundary } gerris-snapshot-131206/test/cylinder/cylinder.sh0000644000175100017510000000377612250371171016634 00000000000000if test x$donotrun != xtrue; then for level in 5 6 7 8; do if gerris2D -DLEVEL=$level $1; then : else exit 1 fi done fi for level in 5 6 7 8; do echo -n "$level " cat norms-$level done > norms if cat < 1e-5 or \ (Curve('norms',1,10) - Curve('norms.ref',1,10)).max() > 1e-5: print (Curve('norms',1,8) - Curve('norms.ref',1,8)).max() print (Curve('norms',1,10) - Curve('norms.ref',1,10)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/cylinder/planar/0000755000175100017510000000000012250371674016017 500000000000000gerris-snapshot-131206/test/cylinder/planar/norms.ref0000644000175100017510000000060412250371171017563 000000000000005 sqrt(Ex*Ex... time: 30 first: 4.747e-04 second: 1.590e-03 infty: 2.238e-02 bias: -3.211e-04 6 sqrt(Ex*Ex... time: 20 first: 3.978e-04 second: 1.229e-03 infty: 2.442e-02 bias: -2.167e-04 7 sqrt(Ex*Ex... time: 30 first: 3.478e-04 second: 8.139e-04 infty: 2.472e-02 bias: -1.589e-04 8 sqrt(Ex*Ex... time: 30 first: 3.341e-04 second: 7.034e-04 infty: 2.496e-02 bias: -1.448e-04 gerris-snapshot-131206/test/cylinder/planar/planar.gfs0000644000175100017510000000476212250371171017716 00000000000000# Title: Charge relaxation in a planar cross-section # # Description: # # Same problem but solved in a planar cross-section of the column. # # \begin{figure}[htbp] # \caption{\label{charge}Relative error on the # charge per unit of length of cylinder as a function of # resolution. (\% Error =$|1-Q(t)/Q_o)|$)} # \begin{center} # \includegraphics[width=0.8\hsize]{charge.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{efield} Steady-state electric field profile # as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{efield.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{Error norms for the electric field.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # Author: J.M. L\'opez-Herrera and S. Popinet # Command: sh ../cylinder.sh planar.gfs # Version: 100609 # Required files: norms.ref # Running time: 25 seconds # Generated files: charge.eps efield.eps error.eps # GModule electrohydro 1 0 GfsElectroHydro GfsBox GfsGEdge {} { Global { #define R0 0.1 #define rhoinic 0.5 #define K 3 #define E1 3 #define E2 1 } Time { end = 35 dtmax=1.0 } VariableTracerVOF T GfsVariableTracer Rhoe InitFraction T (R0*R0 - y*y - x*x) AdaptGradient { istep = 1 } { cmax = 1e-4 minlevel = 5 maxlevel = LEVEL + 1 } T PhysicalParams { L = 2 } Init {} { Rhoe = rhoinic*T } EventStop { istep = 10 } Ex 0.001 SourceDiffusionExplicit Rhoe K*T Phi # OutputTime { istep = 1 } stderr OutputScalarSum { istep = 1 } { awk 'BEGIN { rhoinic = 0.5 ; R0 = 0.1 ; Q = rhoinic*R0*R0*3.141592654 } { print $3,$5,100*sqrt((1.-$5/Q)*(1.-$5/Q)); fflush(stdout); }' > rhoe-LEVEL } { v = Rhoe} OutputSimulation { start = end } { awk '{ if ($1 != "#") print sqrt($2*$2+$1*$1),sqrt($4*$4+$5*$5); }' > prof-LEVEL } { format = text variables = Ex,Ey } OutputErrorNorm { start = end } norms-LEVEL { v = sqrt(Ex*Ex + Ey*Ey) } { s = { double r = sqrt (x*x + y*y); return (r < R0 ? 0 : 0.5*R0*R0*rhoinic/r); } } OutputSimulation { start = end } result-LEVEL.gfs } { # Electric parameters perm = E1*T+E2*(1.-T) charge = Rhoe GfsElectricProjectionParams { tolerance = 1e-7 } } GfsBox { top = Boundary { BcDirichlet Phi 0 } bottom = Boundary { BcDirichlet Phi 0 } left = Boundary { BcDirichlet Phi 0 } right = Boundary { BcDirichlet Phi 0 } } gerris-snapshot-131206/test/lonlat.sh0000755000175100017510000000003112250371662014470 00000000000000python -u test.py lonlat gerris-snapshot-131206/test/source.sh0000755000175100017510000000003112250371662014477 00000000000000python -u test.py source gerris-snapshot-131206/test/groundwater/0000755000175100017510000000000012250371674015272 500000000000000gerris-snapshot-131206/test/groundwater/groundwater.sh0000644000175100017510000000246612250371171020107 00000000000000if test x$donotrun != xtrue; then rm -f p U V for L in `seq 9`; do if gerris2D -DLEVEL=$L $1 ; then : else exit 1 fi done if echo Save solution.eps '{ format = EPS }' | \ gfsview-batch2D solution.gfs `basename $1 .gfs`.gfv ; then : else exit 1 fi else exit 1 fi if cat < 1e-8 or\ (Curve('p',1,3) - Curve('p.ref',1,3)).max() > 1e-6: print (Curve('p',1,2) - Curve('p.ref',1,2)).max() print (Curve('p',1,3) - Curve('p.ref',1,3)).max() exit(1) if (Curve('U',1,2) - Curve('U.ref',1,2)).max() > 1e-8 or\ (Curve('U',1,3) - Curve('U.ref',1,3)).max() > 1e-6: print (Curve('U',1,2) - Curve('U.ref',1,2)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/groundwater/p.ref0000644000175100017510000000044012250371171016135 000000000000001 4.386e-02 8.265e-02 1.558e-01 2 7.216e-03 9.110e-03 1.976e-02 3 2.332e-03 3.620e-03 3.286e-02 4 6.141e-04 1.049e-03 3.516e-02 5 1.667e-04 3.737e-04 1.546e-02 6 4.763e-05 1.353e-04 1.731e-02 7 1.184e-05 4.993e-05 6.851e-03 8 2.912e-06 1.756e-05 3.610e-03 9 7.390e-07 5.981e-06 2.007e-03 gerris-snapshot-131206/test/groundwater/piecewise/0000755000175100017510000000000012250371674017247 500000000000000gerris-snapshot-131206/test/groundwater/piecewise/piecewise.gfv0000644000175100017510000000144312250371171021642 00000000000000# GfsView 2D View { tx = -0.238706 ty = 0.360014 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0.00065937 q3 = 1 fov = 13.4804 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } Vectors { r = 0 g = 0 b = 0 shading = Constant maxlevel = 4 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } U V { scale = 0.03 use_scalar = 0 } Solid { r = 0 g = 1 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } gerris-snapshot-131206/test/groundwater/piecewise/p.ref0000644000175100017510000000044012250371171020112 000000000000001 7.099e-02 1.260e-01 2.996e-01 2 2.552e-02 3.224e-02 6.031e-02 3 2.174e-02 2.817e-02 7.810e-02 4 6.071e-03 7.689e-03 7.658e-02 5 2.925e-03 3.800e-03 3.126e-02 6 1.370e-03 1.624e-03 3.388e-02 7 6.621e-04 8.105e-04 1.302e-02 8 3.245e-04 3.820e-04 6.668e-03 9 1.536e-04 1.807e-04 3.942e-03 gerris-snapshot-131206/test/groundwater/piecewise/piecewise.gfs0000644000175100017510000000742712250371171021647 00000000000000# Title: Groundwater flow with piecewise constant permeability # # Description: # # Discontinuities of hydraulic conductivity are common in groundwater # flow. They can be handled by Gerris's projection method using the # \texttt{alpha} keyword in \texttt{GfsPhysicalParams}. # # Even with nonuniform porosity, the discharge velocity will be # divergence-free \cite[p.~198]{bear88} (assuming only that the local # liquid density is constant). Applying that condition to Darcy's # flux law yields # \begin{displaymath} # \nabla\cdot\left(k\nabla p\right) = \nabla\cdot\mathbf u\,, # \end{displaymath} # which closely resembles the projection Poisson equation used in # Gerris~\cite[eq.~7]{popinet2009}: # \begin{displaymath} # \nabla\cdot\left[\frac{\Delta t}{\rho_{n+\frac{1}{2}}} \nabla # p_{n+\frac{1}{2}}\right] = \nabla\cdot\mathbf u_{*}. # \end{displaymath} # noting that the (here false) time-step $\Delta t$ will be uniform in # space and so can be taken outside the divergence, all that is # required is to identify the `density' $\rho_{n+\frac{1}{2}}$ with # something inversely proportional to the permeability. As Gerris is # told about this density via its reciprocal \texttt{alpha} in # \texttt{GfsPhysicalParams}, we just that proportional to # permeability. # # In many soils, the permeability varies in proportion to the # porosity~\cite[p.~94]{harr77}, so this \texttt{alpha} factor can be # seen as the porosity too, in which case it reflects the difference # between the `discharge' and `seepage' velocities, the first being # the one that is calculated by Gerris and corresponding to # macroscopic measurements while the latter is that in the pores. The # relation between the two is simply that the discharge velocity is # the seepage velocity times the porosity~\cite[p.~23]{bear88}. # # Here we modify the first example by halving the porosity in the last # third of the aquifer (so that it has the same total hydraulic # resistance as the first two thirds). The exact solution has the # velocity field exactly as before, but with a steeper azimuthal # pressure gradient beyond porosity jump at $\theta < -\pi/3$. # # \begin{figure}[htbp] # \caption{Isobars and velocity vectors, for Darcy # flow in a confined annular sector aquifer with separate reservoir # and drain, and halved permeability in the most-clockwise third # sector.} # \begin{center} # \includegraphics[width=0.6\hsize]{solution.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{Grid-convergence of the pressure and # velocity, for Darcy flow with piecewise constant permeability.} # \begin{center} # \includegraphics[width=0.8\hsize]{convergence.eps} # \end{center} # \end{figure} # # Author: G. D. McBain # Command: sh ../groundwater.sh piecewise.gfs # Version: 120731 # Required files: piecewise.gfv p.ref U.ref # Running time: 52 s # Generated files: convergence.eps solution.eps # Define THETA atan2(y,x) 1 0 GfsSimulation GfsBox GfsGEdge { x = 0.5 y = -0.5 } { Time { dtmax = 1 } Refine LEVEL AdvectionParams { scheme = none } Solid (-difference(ellipse(0,0,0.7,0.7), ellipse(0,0,0.3,0.3))) SourceCoriolis 0 1 EventStop { istep = 1 } U 1e-9 Variable k Init {} { k = THETA>-M_PI/3 ? 1 : 0.5 } PhysicalParams { alpha = k } EventList { start = end } { OutputErrorNorm {} { awk '{print LEVEL, $5, $7, $9}' >> p } { v = P } { s = THETA>-M_PI/3 ? THETA : 2*THETA+M_PI/3 } OutputErrorNorm {} { awk '{print LEVEL, $5, $7, $9}' >> U } { v = U } { s = y / (x*x + y*y) } OutputErrorNorm {} { awk '{print LEVEL, $5, $7, $9}' >> V } { v = V } { s = -x / (x*x + y*y) } OutputSimulation {} solution.gfs } } Box { top = Boundary { BcDirichlet P 0 BcDirichlet U 0 BcNeumann V 0 } left = Boundary { BcDirichlet P -2*M_PI/3 BcNeumann U 0 BcDirichlet V 0 } } gerris-snapshot-131206/test/groundwater/piecewise/U.ref0000644000175100017510000000044012250371171020057 000000000000001 9.860e-01 1.115e+00 1.311e+00 2 1.197e-01 1.402e-01 3.516e-01 3 9.935e-02 1.488e-01 4.708e-01 4 3.513e-02 5.976e-02 2.019e-01 5 1.890e-02 4.321e-02 3.313e-01 6 8.923e-03 2.830e-02 4.283e-01 7 4.622e-03 1.928e-02 3.178e-01 8 2.275e-03 1.357e-02 3.632e-01 9 1.139e-03 9.601e-03 3.197e-01 gerris-snapshot-131206/test/groundwater/groundwater.gfs0000644000175100017510000000606312250371171020251 00000000000000# Title: Simple example of groundwater flow following Darcy's law # # Description: # # The simplest model of groundwater flow is provided by Darcy's law # \cite{bear88}: construed on the macroscopic scale, at # which individual pores are invisible, the `discharge' velocity # $\mathbf u$ is divergence-free # \begin{displaymath} # \nabla\cdot\mathbf u = 0 # \end{displaymath} # and proportional to the hydraulic gradient $\nabla p$: # \begin{displaymath} # \mathbf u = - k\nabla p\,. # \end{displaymath} # # The coefficient of proportionality $k$ is known as the permeability # or hydraulic conductivity, and may in general vary from place to # place or be a second-order tensor; for this first test it is taken # as constant. # # Such a problem can be solved by Gerris using its projection method: # one turns off the advection and does not activate viscosity. # Darcy's law itself is provided by linear implicit # \texttt{GfsSourceCoriolis} terms. The standard # \texttt{GfsSimulation} solver then works as a false-transient # iteration toward the steady-state, which will be correct if the # pressure converges, implying a divergence-free discharge velocity. # # The following example is based on Figure 5-3 of # Harr~\cite{harr77}[p.~146], but converted from rectangular to # circular geometry so as to permit a simple closed-form solution: a # uniform aquifer confined to an annular sector, with impermeable arcs # and different constant heads imposed on the two radii. The exact # solution has the head constant along radii and varying linearly with # angle. # # \begin{figure}[htbp] # \caption{Isobars and velocity vectors for Darcy # flow in a confined annular sector aquifer with separate reservoir # and drain.} # \begin{center} # \includegraphics[width=0.6\hsize]{solution.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{Grid-convergence of the pressure and # velocity, for Darcy flow in a confined annular sector aquifer with # separate reservoir and drain.} # \begin{center} # \includegraphics[width=0.8\hsize]{convergence.eps} # \end{center} # \end{figure} # # Author: G. D. McBain # Command: sh groundwater.sh groundwater.gfs # Version: 120706 # Required files: groundwater.sh groundwater.gfv p.ref U.ref # Running time: 46 s # Generated files: solution.eps convergence.eps # 1 0 GfsSimulation GfsBox GfsGEdge { x = 0.5 y = -0.5 } { Time { dtmax = 1 } Refine LEVEL AdvectionParams { scheme = none } Solid (-difference(ellipse(0,0,0.7,0.7), ellipse(0,0,0.3,0.3))) SourceCoriolis 0 1 EventStop { istep = 1 } U 1e-9 EventList { start = end } { OutputErrorNorm {} { awk '{print LEVEL, $5, $7, $9}' >> p } { v = P } { s = atan2 (y, x) } OutputErrorNorm {} { awk '{print LEVEL, $5, $7, $9}' >> U } { v = U } { s = y / (x*x + y*y) } OutputErrorNorm {} { awk '{print LEVEL, $5, $7, $9}' >> V } { v = V } { s = -x / (x*x + y*y) } OutputSimulation solution.gfs } } Box { top = Boundary { BcDirichlet P 0 BcDirichlet U 0 BcNeumann V 0 } left = Boundary { BcDirichlet P -M_PI/2 BcNeumann U 0 BcDirichlet V 0 } } gerris-snapshot-131206/test/groundwater/U.ref0000644000175100017510000000044012250371171016102 000000000000001 9.838e-01 1.108e+00 1.302e+00 2 9.206e-02 1.107e-01 3.875e-01 3 2.550e-02 4.917e-02 2.756e-01 4 9.965e-03 2.234e-02 1.788e-01 5 2.634e-03 8.103e-03 9.158e-02 6 7.150e-04 3.136e-03 5.803e-02 7 1.869e-04 1.082e-03 2.858e-02 8 4.754e-05 3.869e-04 1.741e-02 9 1.227e-05 1.434e-04 7.852e-03 gerris-snapshot-131206/test/groundwater/groundwater.gfv0000644000175100017510000000144312250371171020251 00000000000000# GfsView 2D View { tx = -0.238706 ty = 0.360014 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0.00065937 q3 = 1 fov = 13.4804 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } Vectors { r = 0 g = 0 b = 0 shading = Constant maxlevel = 4 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } U V { scale = 0.03 use_scalar = 0 } Solid { r = 0 g = 1 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } gerris-snapshot-131206/test/plate/0000755000175100017510000000000012250371673014035 500000000000000gerris-snapshot-131206/test/plate/plate.gfs0000644000175100017510000000136112250371171015555 00000000000000# Title: Potential flow around a thin plate # # Description: # # This test case triggers an instability if the cell-centered pressure # gradient used in the approximate projection is not computed using # solid-fraction-weighted averages of the face-centered pressure # gradients. # # Author: St\'ephane Popinet # Command: sh plate.sh plate.gfs # Version: 1.1.2 # Required files: plate.sh # 1 0 GfsSimulation GfsBox GfsGEdge {} { Time { iend = 30 dtmax = 1e-2 } Refine 5 RefineSolid 6 Solid (cube(0,0,0,0.5)) { sy = 0.06251 tx = 0.031249 ty = -0.015 } AdvectionParams { scheme = none } Init {} { U = 1 } OutputScalarNorm { start = end } stdout { v = Velocity } } GfsBox { left = Boundary { BcDirichlet U 1 } right = BoundaryOutflow } gerris-snapshot-131206/test/plate/plate.sh0000644000175100017510000000013112250371171015402 00000000000000if gerris2D $1 | awk '{ if ($9 < 10.) exit (1); }'; then : exit 1 else exit 0 fi gerris-snapshot-131206/test/merging.sh0000755000175100017510000000003212250371662014630 00000000000000python -u test.py merging gerris-snapshot-131206/test/advection.sh0000755000175100017510000000003412250371662015156 00000000000000python -u test.py advection gerris-snapshot-131206/test/gaussian/0000755000175100017510000000000012250371674014543 500000000000000gerris-snapshot-131206/test/gaussian/gaussian.sh0000644000175100017510000000105112250371171016616 00000000000000emax=$2 if test x$donotrun != xtrue; then awk '{printf("%4.3f %4.3f 0.\n",0.,$1)}' < prof.ref > profile if ( gerris2D -DLEVEL=7 $1 ) ; then : else exit 1 fi else exit 1 fi if cat < $emax: print (Curve('prof.ref',1,2) - c).normi() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/gaussian/prof.ref0000644000175100017510000001055612250371171016126 00000000000000-89.99990 -0.040858841760 -88.99990 -0.040783577840 -87.99990 -0.040559530185 -86.99990 -0.040191753718 -85.99990 -0.039688391383 -84.99990 -0.039060275012 -83.99990 -0.038320410689 -82.99990 -0.037483387077 -81.99990 -0.036564748804 -80.99990 -0.035580376654 -79.99990 -0.034545912139 -78.99990 -0.033476256927 -77.99990 -0.032385168550 -76.99990 -0.031284963961 -75.99990 -0.030186333008 -74.99990 -0.029098255571 -73.99990 -0.028028009707 -72.99990 -0.026981253878 -71.99990 -0.025962164340 -70.99990 -0.024973608680 -69.99990 -0.024017338046 -68.99990 -0.023094183235 -67.99990 -0.022204242987 -66.99990 -0.021347056258 -65.99990 -0.020521753363 -64.99990 -0.019727183659 -63.99990 -0.018962019566 -62.99990 -0.018224838341 -61.99990 -0.017514183962 -60.99990 -0.016828612052 -59.99990 -0.016166720874 -58.99990 -0.015527171324 -57.99990 -0.014908698531 -56.99990 -0.014310117305 -55.99990 -0.013730323254 -54.99990 -0.013168290997 -53.99990 -0.012623070565 -52.99990 -0.012093782773 -51.99990 -0.011579614115 -50.99990 -0.011079811563 -49.99990 -0.010593677493 -48.99990 -0.010120564887 -47.99990 -0.009659872881 -46.99990 -0.009211042681 -45.99990 -0.008773553860 -44.99990 -0.008346921004 -43.99990 -0.007930690693 -42.99990 -0.007524438781 -41.99990 -0.007127767957 -40.99990 -0.006740305536 -39.99990 -0.006361701483 -38.99990 -0.005991626621 -37.99990 -0.005629771014 -36.99990 -0.005275842504 -35.99990 -0.004929565384 -34.99990 -0.004590679189 -33.99990 -0.004258937605 -32.99990 -0.003934107464 -31.99990 -0.003615967830 -30.99990 -0.003304309169 -29.99990 -0.002998932579 -28.99990 -0.002699649092 -27.99990 -0.002406279026 -26.99990 -0.002118651394 -25.99990 -0.001836603359 -24.99990 -0.001559979726 -23.99990 -0.001288632481 -22.99990 -0.001022420357 -21.99990 -0.000761208437 -20.99990 -0.000504867786 -19.99990 -0.000253275106 -18.99990 -0.000006312417 -17.99990 0.000236133236 -16.99990 0.000474170062 -15.99990 0.000707901779 -14.99990 0.000937427855 -13.99990 0.001162843730 -12.99990 0.001384241029 -11.99990 0.001601707751 -10.99990 0.001815328460 -9.99990 0.002025184451 -8.99990 0.002231353912 -7.99990 0.002433912077 -6.99990 0.002632931366 -5.99990 0.002828481520 -4.99990 0.003020629724 -3.99990 0.003209440728 -2.99990 0.003394976956 -1.99990 0.003577298611 -0.99990 0.003756463775 0.00010 0.003932528502 1.00010 0.004105546907 2.00010 0.004275571248 3.00010 0.004442652003 4.00010 0.004606837949 5.00010 0.004768176231 6.00010 0.004926712427 7.00010 0.005082490613 8.00010 0.005235553422 9.00010 0.005385942103 10.00010 0.005533696574 11.00010 0.005678855472 12.00010 0.005821456206 13.00010 0.005961534997 14.00010 0.006099126930 15.00010 0.006234265988 16.00010 0.006366985100 17.00010 0.006497316171 18.00010 0.006625290125 19.00010 0.006750936938 20.00010 0.006874285667 21.00010 0.006995364486 22.00010 0.007114200715 23.00010 0.007230820849 24.00010 0.007345250581 25.00010 0.007457514837 26.00010 0.007567637790 27.00010 0.007675642895 28.00010 0.007781552902 29.00010 0.007885389886 30.00010 0.007987175261 31.00010 0.008086929805 32.00010 0.008184673677 33.00010 0.008280426436 34.00010 0.008374207055 35.00010 0.008466033946 36.00010 0.008555924967 37.00010 0.008643897442 38.00010 0.008729968177 39.00010 0.008814153470 40.00010 0.008896469128 41.00010 0.008976930478 42.00010 0.009055552382 43.00010 0.009132349246 44.00010 0.009207335032 45.00010 0.009280523270 46.00010 0.009351927069 47.00010 0.009421559126 48.00010 0.009489431736 49.00010 0.009555556800 50.00010 0.009619945836 51.00010 0.009682609987 52.00010 0.009743560029 53.00010 0.009802806378 54.00010 0.009860359097 55.00010 0.009916227908 56.00010 0.009970422191 57.00010 0.010022950998 58.00010 0.010073823055 59.00010 0.010123046768 60.00010 0.010170630232 61.00010 0.010216581234 62.00010 0.010260907257 63.00010 0.010303615490 64.00010 0.010344712827 65.00010 0.010384205875 66.00010 0.010422100957 67.00010 0.010458404119 68.00010 0.010493121128 69.00010 0.010526257483 70.00010 0.010557818412 71.00010 0.010587808880 72.00010 0.010616233590 73.00010 0.010643096986 74.00010 0.010668403258 75.00010 0.010692156340 76.00010 0.010714359919 77.00010 0.010735017430 78.00010 0.010754132064 79.00010 0.010771706769 80.00010 0.010787744247 81.00010 0.010802246963 82.00010 0.010815217140 83.00010 0.010826656766 84.00010 0.010836567589 85.00010 0.010844951125 86.00010 0.010851808654 87.00010 0.010857141221 88.00010 0.010860949640 89.00010 0.010863234491 gerris-snapshot-131206/test/gaussian/gaussian.gfs0000644000175100017510000000447412250371171016777 00000000000000# Title: Poisson equation on a sphere with Gaussian forcing # # Description: # # This test case is inspired from \cite{boyd2010} who derived an analytical # solution for the Poisson equation on a sphere forced by a Gaussian term on # the north pole. The equation is of the form # $$ # \nabla^2 \Phi = \exp(-2 \epsilon^2 (1-cos(\theta+\frac{\pi}{2}))) - cste # $$ # The problem is axisymmetric and has for solution: # $$ # \Phi = \frac{1}{4\epsilon^2} \left( 1 - \exp(-4 \epsilon^2) \right) \log(1-x) # - \frac{1}{4\epsilon^2} \exp(-4 \epsilon^2) \log \left( \frac{1+x}{1-x} \right) # $$ # $$ # + \frac{1}{4\epsilon^2} E_1 (2 \epsilon^2 (1-x)) # + \frac{1}{4\epsilon^2} \exp(-4 \epsilon^2) E_i(2 \epsilon^2 (1+x)) # $$ # where $E_1$ is the exponential integral function, $E_i(x) = -Re (E_1(-x))$ # and $x = cos(\theta+\frac{\pi}{2})$. # # The solution is not easy to compute and was evaluated over a cross-section # using the Maxima software. # # \begin{figure}[htbp] # \caption{\label{profile}Solution of the Poisson problem as a function of latitude.} # \begin{center} # \begin{tabular}{c} # \includegraphics[width=0.8\hsize]{profile.eps} # \end{tabular} # \end{center} # \end{figure} # # Author: S\'ebastien Delaux # Command: sh gaussian.sh gaussian.gfs 2e-5 # Version: 110208 # Required files: gaussian.sh prof.ref # Generated files: profile.eps # 6 12 GfsPoisson GfsBox GfsGEdge {} { PhysicalParams { L = 2.*M_PI/4. } MetricCubed M LEVEL Time { iend = 1 } Refine LEVEL ProjectionParams { tolerance = 1e-12 } ApproxProjectionParams { tolerance = 1e-12 } Init {} { Div = exp(-2.*5.*5.*(1.-cos((y + 90.)/180.*M_PI))) } OutputLocation { start = end } prof.dat profile OutputSimulation { start = end } end.gfs OutputProjectionStats { istep = 1 } stderr EventScript { start = end } { gnuplot <> error; then : else exit 1 fi done fi if awk ' BEGIN { n = 0 } { l[n] = $1; n1[n] = $2; n2[n] = $3; ni[n++] = $4; } END { for (i = 1; i < n; i++) print l[i] " " log(n1[i-1]/n1[i])/log(2.) " " log(n2[i-1]/n2[i])/log(2.) " " log(ni[i-1]/ni[i])/log(2.); }' < error > order; then : else exit 1 fi if cat < 1e-6: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/geo.sh0000755000175100017510000000002612250371662013755 00000000000000python -u test.py geo gerris-snapshot-131206/test/hexagon/0000755000175100017510000000000012250371673014361 500000000000000gerris-snapshot-131206/test/hexagon/hexagon.sh0000644000175100017510000000157712250371171016271 00000000000000if test x$donotrun != xtrue; then for order in 1 2 ; do if gerris2D -DORDER=$order hexagon.gfs; then : else exit 1 fi done fi if cat < 1e-6 or \ Curve('tracersum-2',1,2).normi() > 5e-6 or \ Curve('momentumerror-1',1,3).max() > 11e-3 or \ Curve('momentumerror-2',1,3).max() > 2e-3: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/hexagon/hexagon.gts0000644000175100017510000000650712250371171016452 0000000000000066 192 128 GtsSurface GtsFace GtsEdge GtsVertex 0.25 -0.5 0.6 0.25 -0.5 0.8 -0.25 -0.5 0.8 -0.5 0 0.6 -0.25 -0.5 0.6 -0.5 0 0.8 -0.25 0.5 -1 -0.25 0.5 -0.8 0.25 0.5 -0.8 -0.25 0.5 0.8 -0.25 0.5 1 0.5 0 -0.8 0.5 0 -0.6 0.5 0 -0.4 0.25 0.5 -0.4 0.5 0 -0.2 -0.5 0 -1 0.5 0 -1 0.25 0.5 -1 0.25 0.5 0.4 0.25 0.5 0.6 0.5 0 0.6 -0.5 0 -0.6 -0.5 0 -0.4 -0.25 0.5 -0.4 -0.25 0.5 0.6 0.25 0.5 0.8 0.5 0 0.2 0.5 0 0.4 0.25 -0.5 0.4 -0.25 -0.5 0.2 0.25 -0.5 0.2 -0.25 -0.5 0.4 0.25 0.5 -5.551115123e-17 -0.25 0.5 -5.551115123e-17 0.25 0.5 0.2 0.25 -0.5 -1 0.25 -0.5 -0.8 -0.25 -0.5 -0.8 0.25 -0.5 -0.2 0.25 0.5 -0.6 0.25 0.5 -0.2 0.5 0 -5.551115123e-17 0.25 -0.5 1 -0.25 -0.5 1 -0.25 -0.5 -0.4 0.25 -0.5 -0.4 -0.25 -0.5 -0.2 0.25 -0.5 -5.551115123e-17 -0.25 -0.5 -5.551115123e-17 -0.5 0 1 -0.25 -0.5 -1 0.25 -0.5 -0.6 -0.25 0.5 0.2 -0.25 0.5 -0.2 -0.5 0 0.2 -0.5 0 0.4 0.25 0.5 1 -0.5 0 -0.8 -0.5 0 -0.2 -0.5 0 -5.551115123e-17 0.5 0 1 -0.25 0.5 0.4 -0.25 -0.5 -0.6 0.5 0 0.8 -0.25 0.5 -0.6 1 2 1 3 3 2 4 5 4 6 5 6 7 8 7 9 9 8 10 6 10 11 6 11 12 9 12 13 9 13 14 15 14 16 15 16 17 18 18 19 17 19 20 21 20 22 22 21 4 10 23 24 23 25 25 24 18 12 19 12 21 26 21 27 26 27 28 29 28 30 30 29 31 32 31 33 32 33 34 35 34 36 35 36 37 38 37 39 39 38 33 30 33 5 30 5 14 40 40 16 13 41 13 14 41 14 42 34 42 43 43 34 2 44 2 45 45 44 46 47 46 48 47 48 43 28 43 32 32 28 7 17 19 7 40 49 16 49 50 49 50 31 49 31 5 3 6 3 6 51 11 51 9 41 15 42 16 42 17 52 52 18 53 13 53 47 13 47 38 12 38 53 12 53 19 9 41 15 36 54 36 20 54 20 26 10 27 10 37 18 18 38 25 55 24 55 32 30 30 1 5 1 56 31 56 57 31 57 3 45 3 51 51 45 57 33 57 4 33 4 47 40 48 40 27 58 10 58 16 43 49 43 17 59 52 59 24 46 24 60 46 60 49 32 48 50 40 50 61 50 61 56 50 56 51 62 45 62 54 56 54 63 56 63 20 63 63 21 64 53 64 46 53 46 62 58 51 58 39 64 38 64 60 48 60 61 48 61 22 65 21 65 55 60 59 39 59 23 39 23 65 27 65 62 27 62 34 28 42 55 55 34 58 11 52 39 47 14 63 57 63 26 57 26 1 22 22 2 8 41 35 61 35 54 61 54 23 64 64 24 55 35 60 35 41 66 66 15 28 36 36 29 29 1 8 59 8 66 59 66 17 8 15 25 25 42 2 65 65 44 26 4 52 37 29 20 29 22 66 23 66 25 44 62 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 5 25 10 26 27 28 20 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 17 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 21 67 50 68 69 70 71 72 73 6 74 75 12 76 77 15 51 78 18 79 19 80 81 82 83 84 85 86 87 88 30 13 89 53 16 90 91 92 93 33 94 95 43 96 28 97 98 99 39 46 100 48 101 102 103 104 105 106 107 108 109 110 111 62 112 94 113 114 115 69 116 80 117 118 119 120 121 122 72 37 112 123 124 125 126 127 107 128 129 130 131 132 14 87 82 133 22 134 135 136 137 138 128 139 45 140 141 142 143 144 131 92 133 29 96 85 24 145 146 120 98 147 148 149 150 151 152 153 38 104 108 56 63 154 155 54 156 47 110 4 11 114 157 158 118 148 52 84 159 160 161 162 163 1 164 61 121 142 68 124 70 71 127 102 139 76 157 9 77 165 166 167 168 161 134 31 83 137 60 86 141 135 169 26 170 123 144 125 67 88 8 147 171 172 173 89 174 167 42 90 175 34 176 32 146 151 36 100 177 113 153 138 178 179 180 41 154 175 171 156 40 66 7 181 182 78 183 103 132 160 184 57 185 109 162 186 145 164 184 101 73 2 179 165 173 126 168 130 81 187 95 188 189 23 136 170 119 140 150 169 186 93 25 190 191 27 143 172 166 191 174 182 91 176 188 189 177 163 65 99 35 149 180 190 187 158 44 74 75 106 3 105 58 117 181 178 97 183 155 152 185 192 159 111 49 79 115 55 116 122 64 59 129 192 gerris-snapshot-131206/test/hexagon/hexagon.gfv0000644000175100017510000000057212250371171016433 00000000000000# GfsView 2D View { tx = -0.180022 ty = -0.0101632 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 6.36061 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } fabs(U-1) { amin = 0 min = 1.64428e-08 amax = 0 max = 0.1 cmap = Jet } gerris-snapshot-131206/test/hexagon/hexagon.gfs0000644000175100017510000000372312250371171016431 00000000000000# Title: Translation of an hexagon in a uniform flow # # Description: # # An hexagonal solid object translates uniformly in a fluid moving at # the same speed (U = 1). There is no diffusion. # # The conservation properties of the scheme can be checked by filling # the simulation domain with tracer and computing the total amount at # each time step. # # \begin{figure}[htbp] # \caption{\label{errorvelocitytime} Error in the horizontal component # of the velocity field. Dark blue is zero, dark red 0.1.} # \begin{center} # \includegraphics[width=0.8\hsize]{end-2.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{ordertime} Evolution of the global RMS error on the # velocity field.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # Author: S\'ebastien Delaux # Command: sh hexagon.sh hexagon.gfs # Version: 090502 # Required files: hexagon.sh hexagon.gts hexagon.gfv # Generated files: error.eps end-2.eps # 2 1 GfsSimulationMoving GfsBox GfsGEdge {} { Time { end = .1875 } Refine 7 SolidMoving hexagon.gts { scale = 0.250001 } { level = 7 } AdvectionParams { moving_order = ORDER # uncommenting the following line leads to instabilities for the # first-order scheme # cfl = 0.45 } ProjectionParams { tolerance = 1e-10 } ApproxProjectionParams { tolerance = 1e-10 } AdaptVorticity { istep = 1 } { minlevel = 4 maxlevel = 7 cmax = 1e-2 } VariableTracer T SurfaceBc U Dirichlet 1. Init {} { U = 1 T = 1 } OutputErrorNorm { istep = 1 } { awk '{ printf ("%e %e %e %e\n", $3, $5, $7, $9) }' > momentumerror-ORDER } { v = sqrt((U - 1.)*(U - 1.) + V*V) } { s = 0. } OutputScalarSum { istep = 1 } { awk '{ printf ("%e %e\n", $3, $5 - 1.953125) }' > tracersum-ORDER } { v = T } OutputSimulation { start = end } end-ORDER.gfs } GfsBox { left = Boundary { BcDirichlet U 1 BcDirichlet T 1 } } GfsBox { right = BoundaryOutflow } 1 2 right gerris-snapshot-131206/test/reynolds.sh0000755000175100017510000000003312250371662015040 00000000000000python -u test.py reynolds gerris-snapshot-131206/test/circle.sh0000755000175100017510000000003112250371662014440 00000000000000python -u test.py circle gerris-snapshot-131206/test/check.py0000644000175100017510000000302512250371171014270 00000000000000from sys import * from math import * class Curve: def read(self,file,x,y): line = file.readline() while line: record = line.split() if record[0] != "#": self.l.append((float(record[x-1]),float(record[y-1]))) line = file.readline() def __init__(self,f=None,x=1,y=2): self.l = [] if f: self.read(open(f,'r'),x,y) def value(self,x): l,u = 0,len(self.l)-1 if u == l: return self.l[u][1] while u - l > 1: i = (u + l)/2 if self.l[i][0] > x: u = i else: l = i x0,x1,y0,y1 = self.l[l][0],self.l[u][0],self.l[l][1],self.l[u][1] return y0 + (x - x0)/(x1 - x0)*(y1 - y0) def __sub__(self,other): c = Curve() if len(self.l) < len(other.l): for p in self.l: c.l.append((p[0], p[1] - other.value(p[0]))) else: for p in other.l: c.l.append((p[0], self.value(p[0]) - p[1])) return c def sum(self,f=lambda x: x): s = 0. p1 = None for p in self.l: if p1: s += (p[0] - p1[0])*f((p[1] + p1[1])/2.) p1 = p return s def max(self,f=lambda x: x): m = None for p in self.l: v = f(p[1]) if not m or v > m: m = v return m def min(self,f=lambda x: x): m = None for p in self.l: v = f(p[1]) if not m or v < m: m = v return m def mean(self): return self.sum()/self.sum(lambda x: 1.) def norm1(self): return self.sum(lambda x: abs(x))/self.sum(lambda x: 1.) def norm2(self): return sqrt(self.sum(lambda x: x*x)/self.sum(lambda x: 1.)) def normi(self): return self.max(lambda x: abs(x)) def write(self): for p in self.l: print p[0],p[1] gerris-snapshot-131206/test/bump.sh0000755000175100017510000000002712250371662014147 00000000000000python -u test.py bump gerris-snapshot-131206/test/sessile.sh0000755000175100017510000000003212250371662014647 00000000000000python -u test.py sessile gerris-snapshot-131206/test/dumbell.sh0000755000175100017510000000003212250371662014624 00000000000000python -u test.py dumbell gerris-snapshot-131206/test/height.sh0000755000175100017510000000003112250371662014447 00000000000000python -u test.py height gerris-snapshot-131206/test/rotate.sh0000755000175100017510000000003112250371662014475 00000000000000python -u test.py rotate gerris-snapshot-131206/test/channel/0000755000175100017510000000000012250371673014340 500000000000000gerris-snapshot-131206/test/channel/orderV.ref0000644000175100017510000000010012250371171016177 000000000000005 1.724e-04 5.272e-04 4.552e-03 6 4.908e-05 1.913e-04 2.426e-03 gerris-snapshot-131206/test/channel/orderfV.ref0000644000175100017510000000010012250371171016345 000000000000005 1.543e-04 5.008e-04 4.552e-03 6 3.416e-05 1.440e-04 2.281e-03 gerris-snapshot-131206/test/channel/channel.sh0000644000175100017510000000464312250371171016224 00000000000000if test x$donotrun != xtrue; then shapes channel | transform --revert --scale 4 --tx 1.5 > channel.gts for level in 5 6 7; do if sed "s/LEVEL/$level/g" < $1 | \ gerris2D -; then : else exit 1 fi done fi for v in U V; do rm -f order$v orderf$v for level in 5 6; do level1=`expr $level + 1` echo -n "$level " >> order$v if gfscompare2D -v sim-$level sim-$level1 $v 2>&1 | \ awk '{if ($1 == "total") print $4 " " $6 " " $8;}' >> order$v; then : else exit 1 fi echo -n "$level " >> orderf$v if gfscompare2D -f 5 -v sim-$level sim-$level1 $v 2>&1 | \ awk '{if ($1 == "total") print $4 " " $6 " " $8;}' >> orderf$v; then : else exit 1 fi done done if cat < convergence.tex; then : from check import * from sys import * from math import * for component,variable in [('x','U'),('y','V')]: print r"""\begin{table}[htbp] \caption{""" print r"\label{channel-" + component + "}" print r"Errors and convergence rates for the \$"+component+r"\$-component of the velocity.}" print r"""\begin{center} \begin{tabular}{||l|c|c|c||c|c|c||} \hline & \multicolumn{3}{c||}{All cells} & \multicolumn{3}{c||}{Full 128 cells} \\\ \hline & 128-256 & Rate & 256-512 & 128-256 & Rate & 256-512 \\\ \hline""" for i,name in [(2,r"\$L_1\$"),(3,r"\$L_2\$"),(4,r"\$L_\infty\$")]: a=Curve('order'+variable,1,i) b=Curve('orderf'+variable,1,i) print name, print "& %.2e & %4.2f & %.2e & %.2e & %4.2f & %.2e" % (\ a.l[0][1], log(a.l[0][1]/a.l[1][1])/log(2.), a.l[1][1], \ b.l[0][1], log(b.l[0][1]/b.l[1][1])/log(2.), b.l[1][1]), print r"\\\" a=Curve('order'+variable+'.ref',1,i) b=Curve('orderf'+variable+'.ref',1,i) print "& {\color{blue}%.2e} & {\color{blue}%4.2f} & {\color{blue}%.2e} & {\color{blue}%.2e} & {\color{blue}%4.2f} & {\color{blue}%.2e}" % (\ a.l[0][1], log(a.l[0][1]/a.l[1][1])/log(2.), a.l[1][1], \ b.l[0][1], log(b.l[0][1]/b.l[1][1])/log(2.), b.l[1][1]), print r"\\\" print r"\hline" print r"""\end{tabular} \end{center} \end{table}""" EOF else exit 1 fi if cat < 1e-6 or\ (Curve(f,1,3) - Curve(f+'.ref',1,3)).max() > 1e-6 or\ (Curve(f,1,4) - Curve(f+'.ref',1,4)).max() > 1e-6: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/channel/orderfU.ref0000644000175100017510000000010012250371171016344 000000000000005 1.002e-04 2.567e-04 2.178e-03 6 3.457e-05 1.070e-04 1.363e-03 gerris-snapshot-131206/test/channel/channel.gfs0000644000175100017510000000373112250371171016366 00000000000000# Title: Flow through a divergent channel # # Description: # # A test case initially presented by Almgren et al \cite{almgren97}. # The Euler equations are solved in a divergent channel for a unit # inflow velocity on the left boundary and outflow on the right # boundary. # # Tables \ref{channel-x} and \ref{channel-y} illustrate the errors and # convergence orders obtained for both components of the velocity when # the resolution varies. Richardson extrapolation is used. The errors # are computed either on the whole domain (All cells) or on the cells # whose parents at level 5 are entirely contained in the fluid (Full # 128 cells). # # Close to second-order convergence is obtained in the bulk of the # fluid, reducing to first-order close to the boundaries. The errors # are small in all cases (with a maximum of .5\%) and comparable to # that obtained by Almgren et al using a different discretisation. # # \input{convergence.tex} # # Author: St\'ephane Popinet # Command: sh channel.sh channel.gfs # Version: 1.1.0 # Required files: channel.sh orderU.ref orderfU.ref orderV.ref orderfV.ref # Running time: 3 minutes # Generated files: convergence.tex # 4 3 GfsSimulation GfsBox GfsGEdge {} { Time { end = 1 } AdvectionParams { cfl = 0.9 } ProjectionParams { tolerance = 1e-6 } ApproxProjectionParams { tolerance = 1e-6 } Refine LEVEL Global { double channel (double x) { double y1 = 0.2/4.; double y2 = 1e-6/4.; return x <= -0.25 ? y1 : x < 0.25 ? y2 + 0.5*(y1 - y2)*(1. + cos (2.*M_PI*(x + 0.25))) : y2; } } Solid (0.125 - channel (x) - y) { scale = 4 tx = 1.5 } Solid (y + 0.125 - channel (x)) { scale = 4 tx = 1.5 } Init {} { U = 1 } OutputSimulation { start = end } sim-LEVEL { variables = U,V,P } } GfsBox { left = Boundary { BcDirichlet U 1 } } GfsBox {} GfsBox {} GfsBox { right = BoundaryOutflow } 1 2 right 2 3 right 3 4 right gerris-snapshot-131206/test/channel/orderU.ref0000644000175100017510000000010012250371171016176 000000000000005 1.176e-04 2.894e-04 2.335e-03 6 5.082e-05 1.545e-04 1.617e-03 gerris-snapshot-131206/test/lonlat/0000755000175100017510000000000012250371673014221 500000000000000gerris-snapshot-131206/test/lonlat/cubed/0000755000175100017510000000000012250371673015303 500000000000000gerris-snapshot-131206/test/lonlat/cubed/isolines.gfv0000644000175100017510000000067012250371171017550 00000000000000# GfsView 2D View { tx = -1.4195 ty = -1.03742 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 22.7612 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 20 } gerris-snapshot-131206/test/lonlat/cubed/cubed.gfs0000644000175100017510000001051212250371171016776 00000000000000# Title: Circular dam break on a ``cubed sphere'' # # Description: # # Same test case but using a ``cubed sphere'' metric and adaptive mesh # refinement. There is noticeable distortion close to the cubed sphere # ``poles'' (Figures \ref{height}.(c) and \ref{scatter}.(c)). # # \begin{figure}[htbp] # \caption{\label{height}Solution to the shallow-water equations # computed on a ``cubed sphere'' with adaptive mesh refinement. # The solution is shown at times (a) $t=0.3$, (b) # $t=0.6$, (c) $t=0.9$, (d) $t=1.2$, and (e) $t=1.5$. The contours do # not appear circular because the solution has been projected down to # a plane.} # \begin{center} # \begin{tabular}{cc} # (a) \includegraphics[width=0.45\hsize]{isolines-0.3.eps} & # (b) \includegraphics[width=0.45\hsize]{isolines-0.6.eps} \\ # (c) \includegraphics[width=0.45\hsize]{isolines-0.9.eps} & # (d) \includegraphics[width=0.45\hsize]{isolines-1.2.eps} \\ # \multicolumn{2}{c}{(e) \includegraphics[width=0.45\hsize]{isolines-1.5.eps}} # \end{tabular} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{scatter}Scatter plot of the (radial) solution shown in Figure # \ref{height}. The green line is the average solution. The solution # is shown at times (a) $t=0.3$, (b) $t=0.6$, (c) $t=0.9$, (d) # $t=1.2$, and (e) $t=1.5$.} # \begin{center} # \begin{tabular}{c} # (a) \includegraphics[width=0.8\hsize]{p-0.3.eps} \\ # (b) \includegraphics[width=0.8\hsize]{p-0.6.eps} \\ # (c) \includegraphics[width=0.8\hsize]{p-0.9.eps} \\ # (d) \includegraphics[width=0.8\hsize]{p-1.2.eps} \\ # (e) \includegraphics[width=0.8\hsize]{p-1.5.eps} # \end{tabular} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: gerris2D -m cubed.gfs # Version: 120812 # Required files: isolines.gfv # Running time: 5 minutes # Generated files: isolines-0.3.eps isolines-0.6.eps isolines-0.9.eps isolines-1.2.eps isolines-1.5.eps p-0.3.eps p-0.6.eps p-0.9.eps p-1.2.eps p-1.5.eps # Define LENGTH (150./180.*M_PI) 6 12 GfsRiver GfsBox GfsGEdge {} { PhysicalParams { L = 2.*M_PI/4. } MetricCubed M 8 Refine 8 InitFraction P (0.2 - acos(cos(x*M_PI/180.)*cos(y*M_PI/180.))) Init {} { P = 0.2 + 1.8*P/LENGTH } Time { end = 1.5 } AdaptGradient { istep = 1 } { cmax = 1e-2 maxlevel = 8 } P # OutputTime { istep = 10 } stderr GModule gfsview OutputView { start = 0.3 step = 0.3 } isolines-%g.gnu { format = Gnuplot } isolines.gfv OutputSimulation { step = 0.3 } sim-%g.txt { variables = U,V,P format = text } OutputScalarSum { istep = 1 } sp { v = P } # OutputSimulation { istep = 10 } stdout EventScript { start = end } { status=0 for i in 0.3 0.6 0.9 1.2 1.5; do if awk 'BEGIN { n1 = 0; pi = 3.14159265359 }{ if ($1 != "#") { c = cos($1*pi/180.)*cos($2*pi/180.); d = atan2(sqrt(1. - c*c),c)*180./pi i = int(d*2.) x[i] += d y[i] += $6 n[i]++ x1[n1] = d; y1[n1++] = $6; } }END { for (i = 0; i <= 180; i++) if (n[i] > 0) print x[i]/n[i], y[i]/n[i], n[i]; sum = 0.; for (i = 0; i < n1; i++) { j = int(x1[i]*2.) d = y1[i] - y[j]/n[j]; sum += d*d; } scatter = sqrt(sum/n1); if (scatter > 0.015) { print scatter > "/dev/stderr"; exit (1); } }' < sim-$i.txt > prof-$i.txt ; then : else status=$GFS_STOP; fi gnuplot < 0) print x[i]/n[i], y[i]/n[i], n[i]; sum = 0.; for (i = 0; i < n1; i++) { j = int(x1[i]*2.) d = y1[i] - y[j]/n[j]; sum += d*d; } scatter = sqrt(sum/n1); if (scatter > 0.013) { print scatter > "/dev/stderr"; exit (1); } }' < sim-$i.txt > prof-$i.txt ; then : else status=$GFS_STOP; fi cat < error if gnuplot < 1e-5 or\ (Curve('eh-5',3,9) - Curve('eh-5.ref',3,9)).max() > 1e-5: print (Curve('eh-4',3,9) - Curve('eh-4.ref',3,9)).max() print (Curve('eh-5',3,9) - Curve('eh-5.ref',3,9)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/rossby/href.gfv0000644000175100017510000000071012250371171015610 00000000000000# GfsView 2D View { tx = -1.42722 ty = -1.00301 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.0257 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } H0+p0(x*DTR,y*DTR,0)/G { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } gerris-snapshot-131206/test/rossby/ocean/0000755000175100017510000000000012250371674015337 500000000000000gerris-snapshot-131206/test/rossby/ocean/eh-5.ref0000644000175100017510000004515112250371171016511 00000000000000P/G time: 999.775 first: 1.304e-02 second: 1.567e-02 infty: 2.216e-02 bias: 4.967e-15 P/G time: 10997.5 first: 9.174e-02 second: 1.074e-01 infty: 1.623e-01 bias: 1.345e-14 P/G time: 20995.3 first: 3.070e-02 second: 3.639e-02 infty: 7.077e-02 bias: -7.181e-15 P/G time: 30993 first: 7.331e-02 second: 8.373e-02 infty: 1.264e-01 bias: -4.180e-14 P/G time: 40990.8 first: 5.264e-02 second: 6.674e-02 infty: 1.136e-01 bias: -2.496e-14 P/G time: 50988.5 first: 4.457e-02 second: 5.033e-02 infty: 7.668e-02 bias: -2.739e-14 P/G time: 60986.3 first: 6.627e-02 second: 8.169e-02 infty: 1.307e-01 bias: -3.795e-14 P/G time: 70984 first: 1.750e-02 second: 2.064e-02 infty: 4.484e-02 bias: -8.489e-14 P/G time: 80981.8 first: 6.421e-02 second: 7.644e-02 infty: 1.349e-01 bias: -9.135e-14 P/G time: 90979.6 first: 2.462e-02 second: 2.914e-02 infty: 5.965e-02 bias: -1.472e-13 P/G time: 100977 first: 5.331e-02 second: 6.151e-02 infty: 1.001e-01 bias: -1.399e-13 P/G time: 110975 first: 4.927e-02 second: 5.615e-02 infty: 1.091e-01 bias: -1.336e-13 P/G time: 120973 first: 3.063e-02 second: 3.463e-02 infty: 6.767e-02 bias: -1.311e-13 P/G time: 130971 first: 4.537e-02 second: 5.625e-02 infty: 1.000e-01 bias: -8.881e-14 P/G time: 140968 first: 2.114e-02 second: 2.190e-02 infty: 2.786e-02 bias: -1.843e-13 P/G time: 150966 first: 4.677e-02 second: 5.530e-02 infty: 8.912e-02 bias: -1.747e-13 P/G time: 160964 first: 3.167e-02 second: 3.382e-02 infty: 6.147e-02 bias: -2.199e-13 P/G time: 170962 first: 3.438e-02 second: 3.849e-02 infty: 5.911e-02 bias: -1.946e-13 P/G time: 180959 first: 3.209e-02 second: 3.602e-02 infty: 6.750e-02 bias: -2.739e-13 P/G time: 190957 first: 2.870e-02 second: 3.120e-02 infty: 5.408e-02 bias: -9.018e-15 P/G time: 200955 first: 4.092e-02 second: 4.501e-02 infty: 8.129e-02 bias: -1.794e-13 P/G time: 210953 first: 3.187e-02 second: 3.216e-02 infty: 3.958e-02 bias: -2.044e-13 P/G time: 220950 first: 2.461e-02 second: 2.991e-02 infty: 5.341e-02 bias: -2.908e-13 P/G time: 230948 first: 2.569e-02 second: 2.807e-02 infty: 4.690e-02 bias: -2.233e-13 P/G time: 240946 first: 2.630e-02 second: 2.973e-02 infty: 5.637e-02 bias: -3.310e-13 P/G time: 250944 first: 3.082e-02 second: 3.290e-02 infty: 5.054e-02 bias: -2.007e-13 P/G time: 260941 first: 2.195e-02 second: 2.406e-02 infty: 5.022e-02 bias: -1.728e-13 P/G time: 270939 first: 1.967e-02 second: 2.320e-02 infty: 4.278e-02 bias: -2.119e-13 P/G time: 280937 first: 2.054e-02 second: 2.377e-02 infty: 5.494e-02 bias: -7.185e-14 P/G time: 290935 first: 2.648e-02 second: 2.880e-02 infty: 4.657e-02 bias: -9.183e-14 P/G time: 300932 first: 2.750e-02 second: 2.898e-02 infty: 4.297e-02 bias: -4.427e-13 P/G time: 310930 first: 1.674e-02 second: 1.855e-02 infty: 3.601e-02 bias: -3.363e-13 P/G time: 320928 first: 1.644e-02 second: 1.849e-02 infty: 3.657e-02 bias: -2.281e-13 P/G time: 330926 first: 1.778e-02 second: 1.958e-02 infty: 3.105e-02 bias: -2.967e-13 P/G time: 340923 first: 2.276e-02 second: 2.498e-02 infty: 3.583e-02 bias: -2.260e-13 P/G time: 350921 first: 1.593e-02 second: 1.652e-02 infty: 2.775e-02 bias: -2.062e-13 P/G time: 360919 first: 1.671e-02 second: 1.852e-02 infty: 3.532e-02 bias: -1.352e-13 P/G time: 370917 first: 1.650e-02 second: 1.873e-02 infty: 3.905e-02 bias: -1.617e-13 P/G time: 380914 first: 2.160e-02 second: 2.256e-02 infty: 2.979e-02 bias: -1.293e-13 P/G time: 390912 first: 2.120e-02 second: 2.285e-02 infty: 3.717e-02 bias: -1.464e-13 P/G time: 400910 first: 9.138e-03 second: 1.030e-02 infty: 1.677e-02 bias: -1.450e-13 P/G time: 410908 first: 1.165e-02 second: 1.401e-02 infty: 2.688e-02 bias: -7.812e-14 P/G time: 420905 first: 8.590e-03 second: 9.367e-03 infty: 1.418e-02 bias: -6.912e-14 P/G time: 430903 first: 1.805e-02 second: 2.018e-02 infty: 3.161e-02 bias: -4.719e-14 P/G time: 440901 first: 1.340e-02 second: 1.453e-02 infty: 1.884e-02 bias: -3.948e-14 P/G time: 450899 first: 1.268e-02 second: 1.364e-02 infty: 2.248e-02 bias: -3.093e-14 P/G time: 460896 first: 1.601e-02 second: 1.756e-02 infty: 2.757e-02 bias: -4.219e-15 P/G time: 470894 first: 1.680e-02 second: 1.773e-02 infty: 2.355e-02 bias: -8.521e-15 P/G time: 480892 first: 2.062e-02 second: 2.122e-02 infty: 2.836e-02 bias: -5.934e-16 P/G time: 490890 first: 9.750e-03 second: 1.019e-02 infty: 1.636e-02 bias: 3.840e-15 P/G time: 500887 first: 7.587e-03 second: 9.045e-03 infty: 1.819e-02 bias: 6.766e-15 P/G time: 510885 first: 7.021e-03 second: 8.173e-03 infty: 1.594e-02 bias: 5.060e-15 P/G time: 520883 first: 1.428e-02 second: 1.553e-02 infty: 2.428e-02 bias: 2.904e-15 P/G time: 530881 first: 1.653e-02 second: 1.722e-02 infty: 2.534e-02 bias: -6.439e-15 P/G time: 540878 first: 1.172e-02 second: 1.241e-02 infty: 1.914e-02 bias: -1.427e-14 P/G time: 550876 first: 1.432e-02 second: 1.547e-02 infty: 2.273e-02 bias: -4.128e-14 P/G time: 560874 first: 1.518e-02 second: 1.587e-02 infty: 2.322e-02 bias: -2.331e-14 P/G time: 570872 first: 1.828e-02 second: 1.871e-02 infty: 2.650e-02 bias: -5.118e-14 P/G time: 580869 first: 1.336e-02 second: 1.413e-02 infty: 2.287e-02 bias: -4.704e-14 P/G time: 590867 first: 7.613e-03 second: 8.828e-03 infty: 1.907e-02 bias: -5.847e-14 P/G time: 600865 first: 8.859e-03 second: 1.008e-02 infty: 2.095e-02 bias: -8.671e-14 P/G time: 610863 first: 1.169e-02 second: 1.317e-02 infty: 2.643e-02 bias: -9.709e-14 P/G time: 620860 first: 1.680e-02 second: 1.742e-02 infty: 2.786e-02 bias: -8.785e-14 P/G time: 630858 first: 1.442e-02 second: 1.502e-02 infty: 2.388e-02 bias: -8.937e-14 P/G time: 640856 first: 1.320e-02 second: 1.371e-02 infty: 2.157e-02 bias: -7.620e-14 P/G time: 650854 first: 1.309e-02 second: 1.387e-02 infty: 2.528e-02 bias: -1.171e-13 P/G time: 660851 first: 1.511e-02 second: 1.582e-02 infty: 2.941e-02 bias: -1.592e-13 P/G time: 670849 first: 1.463e-02 second: 1.571e-02 infty: 2.730e-02 bias: -1.829e-13 P/G time: 680847 first: 1.067e-02 second: 1.164e-02 infty: 2.189e-02 bias: -1.804e-13 P/G time: 690845 first: 9.602e-03 second: 1.045e-02 infty: 2.070e-02 bias: -1.623e-13 P/G time: 700842 first: 1.059e-02 second: 1.211e-02 infty: 2.381e-02 bias: -2.586e-13 P/G time: 710840 first: 1.508e-02 second: 1.582e-02 infty: 2.392e-02 bias: -2.446e-13 P/G time: 720838 first: 1.608e-02 second: 1.682e-02 infty: 2.367e-02 bias: -1.891e-13 P/G time: 730836 first: 1.465e-02 second: 1.495e-02 infty: 2.235e-02 bias: -3.390e-13 P/G time: 740834 first: 1.279e-02 second: 1.345e-02 infty: 1.926e-02 bias: -1.189e-13 P/G time: 750831 first: 1.283e-02 second: 1.367e-02 infty: 1.939e-02 bias: -9.576e-14 P/G time: 760829 first: 1.381e-02 second: 1.469e-02 infty: 1.924e-02 bias: -3.012e-13 P/G time: 770827 first: 1.304e-02 second: 1.367e-02 infty: 1.970e-02 bias: -3.116e-13 P/G time: 780825 first: 1.053e-02 second: 1.154e-02 infty: 1.656e-02 bias: -2.652e-13 P/G time: 790822 first: 1.039e-02 second: 1.167e-02 infty: 1.814e-02 bias: -2.336e-13 P/G time: 800820 first: 1.388e-02 second: 1.461e-02 infty: 2.130e-02 bias: -4.187e-13 P/G time: 810818 first: 1.659e-02 second: 1.737e-02 infty: 2.318e-02 bias: -3.101e-13 P/G time: 820816 first: 1.650e-02 second: 1.710e-02 infty: 2.305e-02 bias: -3.267e-13 P/G time: 830813 first: 1.403e-02 second: 1.469e-02 infty: 2.038e-02 bias: -3.042e-13 P/G time: 840811 first: 1.236e-02 second: 1.332e-02 infty: 2.093e-02 bias: -2.306e-13 P/G time: 850809 first: 1.291e-02 second: 1.402e-02 infty: 2.151e-02 bias: -2.035e-13 P/G time: 860807 first: 1.327e-02 second: 1.411e-02 infty: 2.034e-02 bias: -1.888e-13 P/G time: 870804 first: 1.138e-02 second: 1.260e-02 infty: 1.915e-02 bias: -1.709e-13 P/G time: 880802 first: 1.140e-02 second: 1.261e-02 infty: 2.023e-02 bias: -1.742e-13 P/G time: 890800 first: 1.468e-02 second: 1.545e-02 infty: 2.310e-02 bias: -1.386e-13 P/G time: 900798 first: 1.761e-02 second: 1.821e-02 infty: 2.506e-02 bias: -1.362e-13 P/G time: 910795 first: 1.773e-02 second: 1.821e-02 infty: 2.421e-02 bias: -3.657e-14 P/G time: 920793 first: 1.553e-02 second: 1.597e-02 infty: 2.169e-02 bias: -7.266e-14 P/G time: 930791 first: 1.341e-02 second: 1.418e-02 infty: 2.101e-02 bias: -1.386e-13 P/G time: 940789 first: 1.332e-02 second: 1.444e-02 infty: 2.196e-02 bias: -6.534e-14 P/G time: 950786 first: 1.342e-02 second: 1.490e-02 infty: 2.251e-02 bias: -2.420e-14 P/G time: 960784 first: 1.311e-02 second: 1.429e-02 infty: 2.259e-02 bias: -3.930e-14 P/G time: 970782 first: 1.411e-02 second: 1.488e-02 infty: 2.391e-02 bias: -1.827e-14 P/G time: 980780 first: 1.689e-02 second: 1.748e-02 infty: 2.645e-02 bias: -1.576e-14 P/G time: 990777 first: 1.939e-02 second: 1.992e-02 infty: 2.892e-02 bias: -7.850e-15 P/G time: 1.00078e+06 first: 1.953e-02 second: 2.009e-02 infty: 2.957e-02 bias: 1.225e-15 P/G time: 1.01077e+06 first: 1.755e-02 second: 1.832e-02 infty: 2.935e-02 bias: 1.217e-16 P/G time: 1.02077e+06 first: 1.569e-02 second: 1.681e-02 infty: 2.975e-02 bias: 3.675e-15 P/G time: 1.03077e+06 first: 1.556e-02 second: 1.687e-02 infty: 3.099e-02 bias: 1.957e-15 P/G time: 1.04077e+06 first: 1.619e-02 second: 1.755e-02 infty: 3.239e-02 bias: -2.777e-16 P/G time: 1.05076e+06 first: 1.654e-02 second: 1.784e-02 infty: 3.301e-02 bias: -3.514e-15 P/G time: 1.06076e+06 first: 1.734e-02 second: 1.871e-02 infty: 3.390e-02 bias: -1.315e-14 P/G time: 1.07076e+06 first: 1.932e-02 second: 2.067e-02 infty: 3.495e-02 bias: -3.111e-14 P/G time: 1.08076e+06 first: 2.114e-02 second: 2.239e-02 infty: 3.533e-02 bias: -4.798e-14 P/G time: 1.09075e+06 first: 2.132e-02 second: 2.252e-02 infty: 3.502e-02 bias: -4.108e-14 P/G time: 1.10075e+06 first: 1.984e-02 second: 2.114e-02 infty: 3.402e-02 bias: -6.747e-14 P/G time: 1.11075e+06 first: 1.827e-02 second: 1.979e-02 infty: 3.331e-02 bias: -7.787e-14 P/G time: 1.12075e+06 first: 1.801e-02 second: 1.957e-02 infty: 3.347e-02 bias: -1.296e-14 P/G time: 1.13075e+06 first: 1.869e-02 second: 2.009e-02 infty: 3.521e-02 bias: -1.029e-13 P/G time: 1.14074e+06 first: 1.936e-02 second: 2.063e-02 infty: 3.643e-02 bias: -7.081e-14 P/G time: 1.15074e+06 first: 2.004e-02 second: 2.132e-02 infty: 3.729e-02 bias: -1.468e-13 P/G time: 1.16074e+06 first: 2.123e-02 second: 2.247e-02 infty: 3.796e-02 bias: -8.776e-14 P/G time: 1.17074e+06 first: 2.233e-02 second: 2.348e-02 infty: 3.834e-02 bias: -3.562e-13 P/G time: 1.18073e+06 first: 2.240e-02 second: 2.348e-02 infty: 3.810e-02 bias: -1.324e-13 P/G time: 1.19073e+06 first: 2.124e-02 second: 2.237e-02 infty: 3.723e-02 bias: -1.985e-13 P/G time: 1.20073e+06 first: 1.978e-02 second: 2.115e-02 infty: 3.603e-02 bias: -2.431e-13 P/G time: 1.21073e+06 first: 1.927e-02 second: 2.074e-02 infty: 3.461e-02 bias: -2.571e-13 P/G time: 1.22073e+06 first: 1.967e-02 second: 2.111e-02 infty: 3.284e-02 bias: -2.065e-13 P/G time: 1.23072e+06 first: 2.042e-02 second: 2.175e-02 infty: 3.098e-02 bias: -1.379e-13 P/G time: 1.24072e+06 first: 2.115e-02 second: 2.246e-02 infty: 3.126e-02 bias: -1.796e-13 P/G time: 1.25072e+06 first: 2.188e-02 second: 2.325e-02 infty: 3.213e-02 bias: -2.576e-13 P/G time: 1.26072e+06 first: 2.241e-02 second: 2.379e-02 infty: 3.280e-02 bias: -2.650e-13 P/G time: 1.27071e+06 first: 2.227e-02 second: 2.365e-02 infty: 3.240e-02 bias: -2.650e-13 P/G time: 1.28071e+06 first: 2.137e-02 second: 2.283e-02 infty: 3.184e-02 bias: -1.840e-13 P/G time: 1.29071e+06 first: 2.022e-02 second: 2.188e-02 infty: 3.132e-02 bias: -1.424e-13 P/G time: 1.30071e+06 first: 1.964e-02 second: 2.142e-02 infty: 3.130e-02 bias: -4.732e-13 P/G time: 1.31071e+06 first: 1.990e-02 second: 2.163e-02 infty: 3.168e-02 bias: -2.572e-13 P/G time: 1.3207e+06 first: 2.072e-02 second: 2.234e-02 infty: 3.188e-02 bias: -2.194e-13 P/G time: 1.3307e+06 first: 2.170e-02 second: 2.322e-02 infty: 3.288e-02 bias: -2.054e-13 P/G time: 1.3407e+06 first: 2.247e-02 second: 2.392e-02 infty: 3.378e-02 bias: -1.811e-13 P/G time: 1.3507e+06 first: 2.273e-02 second: 2.416e-02 infty: 3.401e-02 bias: -1.801e-13 P/G time: 1.36069e+06 first: 2.239e-02 second: 2.384e-02 infty: 3.329e-02 bias: -1.765e-13 P/G time: 1.37069e+06 first: 2.156e-02 second: 2.311e-02 infty: 3.252e-02 bias: -1.207e-13 P/G time: 1.38069e+06 first: 2.061e-02 second: 2.231e-02 infty: 3.193e-02 bias: -1.289e-13 P/G time: 1.39069e+06 first: 2.006e-02 second: 2.185e-02 infty: 3.128e-02 bias: -1.978e-13 P/G time: 1.40069e+06 first: 2.025e-02 second: 2.200e-02 infty: 3.160e-02 bias: -1.592e-13 P/G time: 1.41068e+06 first: 2.109e-02 second: 2.269e-02 infty: 3.219e-02 bias: -1.198e-13 P/G time: 1.42068e+06 first: 2.210e-02 second: 2.354e-02 infty: 3.285e-02 bias: -1.151e-13 P/G time: 1.43068e+06 first: 2.277e-02 second: 2.412e-02 infty: 3.306e-02 bias: -5.446e-14 P/G time: 1.44068e+06 first: 2.285e-02 second: 2.417e-02 infty: 3.329e-02 bias: -4.029e-14 P/G time: 1.45067e+06 first: 2.238e-02 second: 2.375e-02 infty: 3.339e-02 bias: -3.978e-14 P/G time: 1.46067e+06 first: 2.158e-02 second: 2.308e-02 infty: 3.359e-02 bias: -4.484e-14 P/G time: 1.47067e+06 first: 2.079e-02 second: 2.247e-02 infty: 3.396e-02 bias: -9.320e-14 P/G time: 1.48067e+06 first: 2.041e-02 second: 2.220e-02 infty: 3.481e-02 bias: -5.585e-14 P/G time: 1.49066e+06 first: 2.078e-02 second: 2.250e-02 infty: 3.578e-02 bias: -1.725e-14 P/G time: 1.50066e+06 first: 2.180e-02 second: 2.331e-02 infty: 3.728e-02 bias: -2.420e-14 P/G time: 1.51066e+06 first: 2.296e-02 second: 2.428e-02 infty: 3.831e-02 bias: 2.524e-15 P/G time: 1.52066e+06 first: 2.369e-02 second: 2.493e-02 infty: 3.946e-02 bias: -1.159e-15 P/G time: 1.53066e+06 first: 2.378e-02 second: 2.505e-02 infty: 3.997e-02 bias: -8.744e-15 P/G time: 1.54065e+06 first: 2.339e-02 second: 2.476e-02 infty: 4.069e-02 bias: 1.519e-16 P/G time: 1.55065e+06 first: 2.282e-02 second: 2.434e-02 infty: 4.108e-02 bias: 4.058e-15 P/G time: 1.56065e+06 first: 2.239e-02 second: 2.406e-02 infty: 4.187e-02 bias: 1.408e-15 P/G time: 1.57065e+06 first: 2.233e-02 second: 2.409e-02 infty: 4.218e-02 bias: 2.354e-15 P/G time: 1.58064e+06 first: 2.284e-02 second: 2.456e-02 infty: 4.286e-02 bias: -1.709e-14 P/G time: 1.59064e+06 first: 2.382e-02 second: 2.541e-02 infty: 4.345e-02 bias: -9.483e-15 P/G time: 1.60064e+06 first: 2.487e-02 second: 2.636e-02 infty: 4.369e-02 bias: -5.449e-14 P/G time: 1.61064e+06 first: 2.551e-02 second: 2.697e-02 infty: 4.323e-02 bias: -6.762e-14 P/G time: 1.62064e+06 first: 2.560e-02 second: 2.706e-02 infty: 4.269e-02 bias: -5.600e-14 P/G time: 1.63063e+06 first: 2.528e-02 second: 2.677e-02 infty: 4.195e-02 bias: -1.338e-13 P/G time: 1.64063e+06 first: 2.492e-02 second: 2.643e-02 infty: 4.156e-02 bias: -1.137e-13 P/G time: 1.65063e+06 first: 2.471e-02 second: 2.625e-02 infty: 4.136e-02 bias: -5.633e-14 P/G time: 1.66063e+06 first: 2.485e-02 second: 2.636e-02 infty: 4.298e-02 bias: -5.835e-14 P/G time: 1.67062e+06 first: 2.534e-02 second: 2.679e-02 infty: 4.475e-02 bias: -7.716e-14 P/G time: 1.68062e+06 first: 2.620e-02 second: 2.754e-02 infty: 4.594e-02 bias: -9.403e-15 P/G time: 1.69062e+06 first: 2.704e-02 second: 2.833e-02 infty: 4.663e-02 bias: 7.964e-14 P/G time: 1.70062e+06 first: 2.755e-02 second: 2.882e-02 infty: 4.669e-02 bias: -7.925e-14 P/G time: 1.71062e+06 first: 2.753e-02 second: 2.882e-02 infty: 4.614e-02 bias: -3.240e-13 P/G time: 1.72061e+06 first: 2.715e-02 second: 2.849e-02 infty: 4.506e-02 bias: -1.333e-13 P/G time: 1.73061e+06 first: 2.680e-02 second: 2.814e-02 infty: 4.337e-02 bias: -2.637e-13 P/G time: 1.74061e+06 first: 2.657e-02 second: 2.799e-02 infty: 4.163e-02 bias: -2.901e-13 P/G time: 1.75061e+06 first: 2.671e-02 second: 2.813e-02 infty: 4.145e-02 bias: -1.405e-13 P/G time: 1.7606e+06 first: 2.712e-02 second: 2.857e-02 infty: 4.135e-02 bias: -2.348e-13 P/G time: 1.7706e+06 first: 2.778e-02 second: 2.926e-02 infty: 4.192e-02 bias: -2.661e-13 P/G time: 1.7806e+06 first: 2.848e-02 second: 2.995e-02 infty: 4.213e-02 bias: -2.878e-13 P/G time: 1.7906e+06 first: 2.884e-02 second: 3.033e-02 infty: 4.192e-02 bias: -1.333e-13 P/G time: 1.8006e+06 first: 2.873e-02 second: 3.027e-02 infty: 4.216e-02 bias: -1.137e-13 P/G time: 1.81059e+06 first: 2.835e-02 second: 2.990e-02 infty: 4.187e-02 bias: -2.097e-13 P/G time: 1.82059e+06 first: 2.790e-02 second: 2.952e-02 infty: 4.178e-02 bias: -2.139e-13 P/G time: 1.83059e+06 first: 2.774e-02 second: 2.938e-02 infty: 4.190e-02 bias: -1.638e-13 P/G time: 1.84059e+06 first: 2.789e-02 second: 2.955e-02 infty: 4.199e-02 bias: -2.544e-13 P/G time: 1.85058e+06 first: 2.838e-02 second: 3.003e-02 infty: 4.230e-02 bias: -1.514e-14 P/G time: 1.86058e+06 first: 2.907e-02 second: 3.068e-02 infty: 4.271e-02 bias: -1.698e-13 P/G time: 1.87058e+06 first: 2.965e-02 second: 3.127e-02 infty: 4.333e-02 bias: -2.096e-13 P/G time: 1.88058e+06 first: 2.991e-02 second: 3.153e-02 infty: 4.365e-02 bias: -2.101e-13 P/G time: 1.89058e+06 first: 2.971e-02 second: 3.136e-02 infty: 4.387e-02 bias: -1.824e-13 P/G time: 1.90057e+06 first: 2.921e-02 second: 3.093e-02 infty: 4.405e-02 bias: -1.862e-13 P/G time: 1.91057e+06 first: 2.873e-02 second: 3.051e-02 infty: 4.411e-02 bias: -3.528e-13 P/G time: 1.92057e+06 first: 2.849e-02 second: 3.033e-02 infty: 4.457e-02 bias: -2.889e-13 P/G time: 1.93057e+06 first: 2.865e-02 second: 3.048e-02 infty: 4.484e-02 bias: -1.758e-13 P/G time: 1.94056e+06 first: 2.910e-02 second: 3.091e-02 infty: 4.550e-02 bias: -1.275e-13 P/G time: 1.95056e+06 first: 2.969e-02 second: 3.146e-02 infty: 4.568e-02 bias: -1.018e-13 P/G time: 1.96056e+06 first: 3.016e-02 second: 3.188e-02 infty: 4.621e-02 bias: -1.400e-13 P/G time: 1.97056e+06 first: 3.028e-02 second: 3.200e-02 infty: 4.640e-02 bias: -6.112e-14 P/G time: 1.98055e+06 first: 2.999e-02 second: 3.176e-02 infty: 4.663e-02 bias: -4.954e-14 P/G time: 1.99055e+06 first: 2.951e-02 second: 3.135e-02 infty: 4.751e-02 bias: -9.530e-14 P/G time: 2.00055e+06 first: 2.907e-02 second: 3.101e-02 infty: 4.809e-02 bias: -1.853e-14 P/G time: 2.01055e+06 first: 2.894e-02 second: 3.093e-02 infty: 4.891e-02 bias: -2.644e-14 P/G time: 2.02055e+06 first: 2.916e-02 second: 3.115e-02 infty: 4.929e-02 bias: -2.006e-14 P/G time: 2.03054e+06 first: 2.967e-02 second: 3.160e-02 infty: 5.011e-02 bias: -1.731e-14 P/G time: 2.04054e+06 first: 3.024e-02 second: 3.211e-02 infty: 5.040e-02 bias: -9.930e-15 P/G time: 2.05054e+06 first: 3.064e-02 second: 3.249e-02 infty: 5.112e-02 bias: -5.175e-15 P/G time: 2.06054e+06 first: 3.073e-02 second: 3.260e-02 infty: 5.148e-02 bias: -6.225e-15 P/G time: 2.07053e+06 first: 3.049e-02 second: 3.245e-02 infty: 5.204e-02 bias: -3.290e-15 gerris-snapshot-131206/test/rossby/ocean/ehm.gfv0000644000175100017510000000071612250371171016530 00000000000000# GfsView 2D View { tx = -1.47931 ty = -1.02043 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.0946 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0.0250706 b = 1 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } EH { amin = 0 min = -100 amax = 0 max = 0 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 9 } gerris-snapshot-131206/test/rossby/ocean/eh-4.ref0000644000175100017510000004515112250371171016510 00000000000000P/G time: 999.775 first: 5.229e-02 second: 6.262e-02 infty: 8.804e-02 bias: 7.660e-15 P/G time: 10997.5 first: 3.982e-02 second: 4.791e-02 infty: 9.691e-02 bias: -5.284e-15 P/G time: 20995.3 first: 7.568e-02 second: 9.610e-02 infty: 1.621e-01 bias: -1.863e-14 P/G time: 30993 first: 1.009e-01 second: 1.212e-01 infty: 2.043e-01 bias: 6.891e-15 P/G time: 40990.8 first: 9.019e-02 second: 1.091e-01 infty: 1.935e-01 bias: -3.149e-14 P/G time: 50988.5 first: 7.357e-02 second: 8.647e-02 infty: 1.512e-01 bias: -1.808e-14 P/G time: 60986.3 first: 3.865e-02 second: 4.534e-02 infty: 8.886e-02 bias: -6.397e-14 P/G time: 70984 first: 1.937e-02 second: 2.162e-02 infty: 3.834e-02 bias: -4.316e-14 P/G time: 80981.8 first: 2.812e-02 second: 3.107e-02 infty: 6.019e-02 bias: -4.009e-14 P/G time: 90979.6 first: 2.464e-02 second: 2.775e-02 infty: 4.969e-02 bias: -1.010e-13 P/G time: 100977 first: 4.328e-02 second: 4.633e-02 infty: 7.816e-02 bias: -7.192e-14 P/G time: 110975 first: 1.969e-02 second: 2.345e-02 infty: 4.147e-02 bias: -7.497e-14 P/G time: 120973 first: 2.620e-02 second: 2.889e-02 infty: 4.558e-02 bias: -5.087e-14 P/G time: 130971 first: 1.330e-02 second: 1.598e-02 infty: 3.929e-02 bias: -5.621e-14 P/G time: 140968 first: 1.639e-02 second: 1.908e-02 infty: 2.969e-02 bias: -6.297e-14 P/G time: 150966 first: 2.577e-02 second: 2.668e-02 infty: 3.296e-02 bias: -8.861e-14 P/G time: 160964 first: 9.965e-03 second: 1.041e-02 infty: 2.182e-02 bias: -1.403e-13 P/G time: 170962 first: 2.015e-02 second: 2.127e-02 infty: 3.842e-02 bias: -1.482e-14 P/G time: 180959 first: 1.474e-02 second: 1.527e-02 infty: 2.141e-02 bias: -1.523e-13 P/G time: 190957 first: 2.195e-02 second: 2.277e-02 infty: 3.011e-02 bias: -1.149e-13 P/G time: 200955 first: 1.789e-02 second: 1.865e-02 infty: 2.536e-02 bias: -1.668e-13 P/G time: 210953 first: 1.269e-02 second: 1.378e-02 infty: 2.188e-02 bias: -1.500e-13 P/G time: 220950 first: 1.952e-02 second: 2.025e-02 infty: 2.562e-02 bias: -1.497e-13 P/G time: 230948 first: 2.168e-02 second: 2.224e-02 infty: 2.943e-02 bias: -1.290e-13 P/G time: 240946 first: 2.114e-02 second: 2.204e-02 infty: 2.837e-02 bias: -7.901e-14 P/G time: 250944 first: 1.628e-02 second: 1.694e-02 infty: 2.258e-02 bias: -1.048e-13 P/G time: 260941 first: 1.621e-02 second: 1.698e-02 infty: 2.325e-02 bias: -9.223e-14 P/G time: 270939 first: 2.286e-02 second: 2.377e-02 infty: 3.114e-02 bias: -1.602e-13 P/G time: 280937 first: 2.353e-02 second: 2.429e-02 infty: 3.231e-02 bias: -2.159e-13 P/G time: 290935 first: 1.966e-02 second: 2.052e-02 infty: 2.769e-02 bias: -1.069e-13 P/G time: 300932 first: 1.722e-02 second: 1.810e-02 infty: 2.540e-02 bias: -7.615e-14 P/G time: 310930 first: 2.088e-02 second: 2.204e-02 infty: 2.944e-02 bias: -1.537e-13 P/G time: 320928 first: 2.544e-02 second: 2.633e-02 infty: 3.476e-02 bias: -1.376e-13 P/G time: 330926 first: 2.236e-02 second: 2.346e-02 infty: 3.163e-02 bias: -5.467e-14 P/G time: 340923 first: 1.898e-02 second: 2.030e-02 infty: 3.007e-02 bias: -5.085e-14 P/G time: 350921 first: 2.020e-02 second: 2.140e-02 infty: 3.158e-02 bias: -8.222e-14 P/G time: 360919 first: 2.504e-02 second: 2.608e-02 infty: 3.467e-02 bias: -6.896e-14 P/G time: 370917 first: 2.527e-02 second: 2.631e-02 infty: 3.469e-02 bias: -1.076e-13 P/G time: 380914 first: 2.199e-02 second: 2.300e-02 infty: 3.351e-02 bias: -5.088e-14 P/G time: 390912 first: 2.149e-02 second: 2.251e-02 infty: 3.315e-02 bias: -1.403e-14 P/G time: 400910 first: 2.477e-02 second: 2.575e-02 infty: 3.515e-02 bias: -4.966e-14 P/G time: 410908 first: 2.712e-02 second: 2.818e-02 infty: 3.616e-02 bias: -7.538e-14 P/G time: 420905 first: 2.543e-02 second: 2.639e-02 infty: 3.506e-02 bias: -4.581e-14 P/G time: 430903 first: 2.410e-02 second: 2.512e-02 infty: 3.604e-02 bias: -3.751e-14 P/G time: 440901 first: 2.582e-02 second: 2.682e-02 infty: 3.793e-02 bias: -1.716e-14 P/G time: 450899 first: 2.864e-02 second: 2.971e-02 infty: 3.997e-02 bias: -5.178e-15 P/G time: 460896 first: 2.876e-02 second: 2.987e-02 infty: 4.154e-02 bias: -1.452e-14 P/G time: 470894 first: 2.741e-02 second: 2.869e-02 infty: 4.274e-02 bias: -4.627e-15 P/G time: 480892 first: 2.786e-02 second: 2.933e-02 infty: 4.427e-02 bias: -3.964e-15 P/G time: 490890 first: 3.006e-02 second: 3.157e-02 infty: 4.742e-02 bias: -2.771e-15 P/G time: 500887 first: 3.126e-02 second: 3.290e-02 infty: 5.042e-02 bias: 2.213e-15 P/G time: 510885 first: 3.050e-02 second: 3.239e-02 infty: 5.292e-02 bias: -3.684e-16 P/G time: 520883 first: 3.020e-02 second: 3.240e-02 infty: 5.515e-02 bias: 1.216e-16 P/G time: 530881 first: 3.146e-02 second: 3.372e-02 infty: 5.836e-02 bias: -3.641e-16 P/G time: 540878 first: 3.286e-02 second: 3.521e-02 infty: 6.091e-02 bias: 7.923e-16 P/G time: 550876 first: 3.281e-02 second: 3.534e-02 infty: 6.242e-02 bias: -9.692e-15 P/G time: 560874 first: 3.222e-02 second: 3.508e-02 infty: 6.433e-02 bias: -7.890e-15 P/G time: 570872 first: 3.263e-02 second: 3.563e-02 infty: 6.549e-02 bias: -2.453e-14 P/G time: 580869 first: 3.379e-02 second: 3.671e-02 infty: 6.556e-02 bias: -2.235e-14 P/G time: 590867 first: 3.420e-02 second: 3.718e-02 infty: 6.464e-02 bias: -2.701e-14 P/G time: 600865 first: 3.379e-02 second: 3.695e-02 infty: 6.456e-02 bias: -4.287e-14 P/G time: 610863 first: 3.378e-02 second: 3.705e-02 infty: 6.592e-02 bias: -2.575e-14 P/G time: 620860 first: 3.451e-02 second: 3.768e-02 infty: 6.605e-02 bias: -5.899e-14 P/G time: 630858 first: 3.511e-02 second: 3.827e-02 infty: 6.638e-02 bias: -6.721e-14 P/G time: 640856 first: 3.487e-02 second: 3.829e-02 infty: 6.789e-02 bias: -4.736e-14 P/G time: 650854 first: 3.457e-02 second: 3.826e-02 infty: 6.897e-02 bias: -3.225e-14 P/G time: 660851 first: 3.515e-02 second: 3.863e-02 infty: 6.919e-02 bias: -8.482e-14 P/G time: 670849 first: 3.580e-02 second: 3.919e-02 infty: 6.878e-02 bias: -7.754e-14 P/G time: 680847 first: 3.588e-02 second: 3.945e-02 infty: 6.780e-02 bias: -1.066e-13 P/G time: 690845 first: 3.580e-02 second: 3.947e-02 infty: 6.606e-02 bias: -1.583e-13 P/G time: 700842 first: 3.591e-02 second: 3.966e-02 infty: 6.361e-02 bias: -5.818e-14 P/G time: 710840 first: 3.631e-02 second: 4.010e-02 infty: 6.053e-02 bias: -1.340e-13 P/G time: 720838 first: 3.678e-02 second: 4.045e-02 infty: 5.853e-02 bias: -4.553e-14 P/G time: 730836 first: 3.694e-02 second: 4.052e-02 infty: 5.767e-02 bias: -5.577e-14 P/G time: 740834 first: 3.696e-02 second: 4.058e-02 infty: 5.833e-02 bias: -9.343e-14 P/G time: 750831 first: 3.706e-02 second: 4.084e-02 infty: 5.912e-02 bias: -1.619e-13 P/G time: 760829 first: 3.732e-02 second: 4.117e-02 infty: 5.906e-02 bias: -7.214e-14 P/G time: 770827 first: 3.746e-02 second: 4.129e-02 infty: 5.803e-02 bias: -9.513e-14 P/G time: 780825 first: 3.751e-02 second: 4.128e-02 infty: 5.825e-02 bias: -1.670e-13 P/G time: 790822 first: 3.779e-02 second: 4.142e-02 infty: 5.769e-02 bias: -1.504e-13 P/G time: 800820 first: 3.818e-02 second: 4.175e-02 infty: 5.697e-02 bias: -1.310e-13 P/G time: 810818 first: 3.838e-02 second: 4.199e-02 infty: 5.873e-02 bias: -7.958e-14 P/G time: 820816 first: 3.840e-02 second: 4.204e-02 infty: 5.931e-02 bias: -1.723e-13 P/G time: 830813 first: 3.856e-02 second: 4.213e-02 infty: 5.974e-02 bias: -2.089e-14 P/G time: 840811 first: 3.906e-02 second: 4.243e-02 infty: 6.183e-02 bias: -3.842e-14 P/G time: 850809 first: 3.949e-02 second: 4.278e-02 infty: 6.303e-02 bias: -1.116e-13 P/G time: 860807 first: 3.968e-02 second: 4.294e-02 infty: 6.327e-02 bias: -5.009e-14 P/G time: 870804 first: 3.987e-02 second: 4.305e-02 infty: 6.367e-02 bias: -7.459e-14 P/G time: 880802 first: 4.023e-02 second: 4.334e-02 infty: 6.499e-02 bias: -5.242e-14 P/G time: 890800 first: 4.073e-02 second: 4.381e-02 infty: 6.578e-02 bias: -2.922e-14 P/G time: 900798 first: 4.133e-02 second: 4.421e-02 infty: 6.575e-02 bias: -7.011e-14 P/G time: 910795 first: 4.159e-02 second: 4.450e-02 infty: 6.671e-02 bias: -4.165e-14 P/G time: 920793 first: 4.201e-02 second: 4.492e-02 infty: 6.788e-02 bias: -5.959e-14 P/G time: 930791 first: 4.293e-02 second: 4.559e-02 infty: 6.836e-02 bias: -4.093e-14 P/G time: 940789 first: 4.380e-02 second: 4.631e-02 infty: 6.785e-02 bias: -3.842e-14 P/G time: 950786 first: 4.427e-02 second: 4.695e-02 infty: 6.961e-02 bias: -3.880e-14 P/G time: 960784 first: 4.494e-02 second: 4.763e-02 infty: 7.066e-02 bias: -2.379e-14 P/G time: 970782 first: 4.592e-02 second: 4.852e-02 infty: 7.200e-02 bias: -1.112e-14 P/G time: 980780 first: 4.689e-02 second: 4.955e-02 infty: 7.474e-02 bias: -2.545e-14 P/G time: 990777 first: 4.781e-02 second: 5.053e-02 infty: 7.660e-02 bias: -2.166e-15 P/G time: 1.00078e+06 first: 4.872e-02 second: 5.146e-02 infty: 7.831e-02 bias: -1.539e-14 P/G time: 1.01077e+06 first: 4.968e-02 second: 5.250e-02 infty: 8.173e-02 bias: -1.533e-15 P/G time: 1.02077e+06 first: 5.077e-02 second: 5.366e-02 infty: 8.423e-02 bias: -1.158e-15 P/G time: 1.03077e+06 first: 5.178e-02 second: 5.480e-02 infty: 8.576e-02 bias: -2.001e-15 P/G time: 1.04077e+06 first: 5.279e-02 second: 5.583e-02 infty: 8.875e-02 bias: -3.808e-15 P/G time: 1.05076e+06 first: 5.368e-02 second: 5.683e-02 infty: 9.177e-02 bias: -3.438e-15 P/G time: 1.06076e+06 first: 5.458e-02 second: 5.790e-02 infty: 9.446e-02 bias: -2.736e-15 P/G time: 1.07076e+06 first: 5.557e-02 second: 5.894e-02 infty: 9.693e-02 bias: -3.457e-15 P/G time: 1.08076e+06 first: 5.646e-02 second: 5.985e-02 infty: 1.000e-01 bias: -7.979e-15 P/G time: 1.09075e+06 first: 5.719e-02 second: 6.066e-02 infty: 1.017e-01 bias: -1.075e-14 P/G time: 1.10075e+06 first: 5.784e-02 second: 6.145e-02 infty: 1.022e-01 bias: -4.672e-15 P/G time: 1.11075e+06 first: 5.865e-02 second: 6.224e-02 infty: 1.011e-01 bias: -1.346e-14 P/G time: 1.12075e+06 first: 5.934e-02 second: 6.292e-02 infty: 1.008e-01 bias: -4.314e-14 P/G time: 1.13075e+06 first: 5.992e-02 second: 6.349e-02 infty: 1.008e-01 bias: -2.924e-14 P/G time: 1.14074e+06 first: 6.042e-02 second: 6.402e-02 infty: 1.004e-01 bias: -3.467e-15 P/G time: 1.15074e+06 first: 6.090e-02 second: 6.456e-02 infty: 1.013e-01 bias: -2.420e-14 P/G time: 1.16074e+06 first: 6.153e-02 second: 6.505e-02 infty: 1.051e-01 bias: -4.638e-14 P/G time: 1.17074e+06 first: 6.171e-02 second: 6.547e-02 infty: 1.082e-01 bias: -4.531e-14 P/G time: 1.18073e+06 first: 6.183e-02 second: 6.584e-02 infty: 1.098e-01 bias: -5.804e-14 P/G time: 1.19073e+06 first: 6.242e-02 second: 6.621e-02 infty: 1.105e-01 bias: -9.176e-14 P/G time: 1.20073e+06 first: 6.272e-02 second: 6.658e-02 infty: 1.102e-01 bias: -5.596e-14 P/G time: 1.21073e+06 first: 6.272e-02 second: 6.689e-02 infty: 1.085e-01 bias: -3.690e-14 P/G time: 1.22073e+06 first: 6.302e-02 second: 6.715e-02 infty: 1.056e-01 bias: -1.333e-13 P/G time: 1.23072e+06 first: 6.345e-02 second: 6.740e-02 infty: 1.018e-01 bias: -7.039e-14 P/G time: 1.24072e+06 first: 6.358e-02 second: 6.765e-02 infty: 9.932e-02 bias: -1.067e-13 P/G time: 1.25072e+06 first: 6.373e-02 second: 6.787e-02 infty: 9.788e-02 bias: -9.160e-14 P/G time: 1.26072e+06 first: 6.376e-02 second: 6.804e-02 infty: 9.620e-02 bias: -9.460e-14 P/G time: 1.27071e+06 first: 6.369e-02 second: 6.818e-02 infty: 9.612e-02 bias: -1.752e-13 P/G time: 1.28071e+06 first: 6.377e-02 second: 6.832e-02 infty: 9.581e-02 bias: -8.248e-14 P/G time: 1.29071e+06 first: 6.409e-02 second: 6.846e-02 infty: 9.703e-02 bias: -1.673e-13 P/G time: 1.30071e+06 first: 6.399e-02 second: 6.856e-02 infty: 9.705e-02 bias: -8.246e-14 P/G time: 1.31071e+06 first: 6.354e-02 second: 6.864e-02 infty: 9.584e-02 bias: -4.601e-14 P/G time: 1.3207e+06 first: 6.398e-02 second: 6.873e-02 infty: 9.609e-02 bias: -7.846e-14 P/G time: 1.3307e+06 first: 6.423e-02 second: 6.883e-02 infty: 9.692e-02 bias: -1.491e-13 P/G time: 1.3407e+06 first: 6.417e-02 second: 6.893e-02 infty: 9.646e-02 bias: -1.673e-13 P/G time: 1.3507e+06 first: 6.414e-02 second: 6.900e-02 infty: 9.501e-02 bias: -1.533e-13 P/G time: 1.36069e+06 first: 6.436e-02 second: 6.907e-02 infty: 9.695e-02 bias: -9.601e-14 P/G time: 1.37069e+06 first: 6.460e-02 second: 6.914e-02 infty: 9.805e-02 bias: -1.849e-13 P/G time: 1.38069e+06 first: 6.457e-02 second: 6.921e-02 infty: 9.812e-02 bias: -1.069e-13 P/G time: 1.39069e+06 first: 6.457e-02 second: 6.925e-02 infty: 9.750e-02 bias: -4.429e-14 P/G time: 1.40069e+06 first: 6.469e-02 second: 6.929e-02 infty: 9.959e-02 bias: -6.917e-14 P/G time: 1.41068e+06 first: 6.480e-02 second: 6.935e-02 infty: 1.006e-01 bias: -4.146e-14 P/G time: 1.42068e+06 first: 6.477e-02 second: 6.942e-02 infty: 1.004e-01 bias: -8.878e-14 P/G time: 1.43068e+06 first: 6.488e-02 second: 6.951e-02 infty: 1.007e-01 bias: -2.704e-14 P/G time: 1.44068e+06 first: 6.502e-02 second: 6.962e-02 infty: 1.025e-01 bias: -1.067e-14 P/G time: 1.45067e+06 first: 6.514e-02 second: 6.976e-02 infty: 1.032e-01 bias: -7.257e-14 P/G time: 1.46067e+06 first: 6.550e-02 second: 6.996e-02 infty: 1.024e-01 bias: -2.556e-14 P/G time: 1.47067e+06 first: 6.585e-02 second: 7.020e-02 infty: 1.025e-01 bias: -5.297e-14 P/G time: 1.48067e+06 first: 6.604e-02 second: 7.049e-02 infty: 1.043e-01 bias: 9.349e-15 P/G time: 1.49066e+06 first: 6.627e-02 second: 7.082e-02 infty: 1.048e-01 bias: -3.378e-14 P/G time: 1.50066e+06 first: 6.684e-02 second: 7.123e-02 infty: 1.040e-01 bias: -8.675e-15 P/G time: 1.51066e+06 first: 6.715e-02 second: 7.170e-02 infty: 1.071e-01 bias: -3.607e-14 P/G time: 1.52066e+06 first: 6.742e-02 second: 7.222e-02 infty: 1.090e-01 bias: -2.248e-14 P/G time: 1.53066e+06 first: 6.827e-02 second: 7.278e-02 infty: 1.091e-01 bias: -1.126e-14 P/G time: 1.54065e+06 first: 6.882e-02 second: 7.340e-02 infty: 1.113e-01 bias: -5.057e-15 P/G time: 1.55065e+06 first: 6.916e-02 second: 7.407e-02 infty: 1.141e-01 bias: -1.372e-14 P/G time: 1.56065e+06 first: 7.007e-02 second: 7.478e-02 infty: 1.153e-01 bias: -2.861e-17 P/G time: 1.57065e+06 first: 7.091e-02 second: 7.550e-02 infty: 1.158e-01 bias: -2.588e-15 P/G time: 1.58064e+06 first: 7.137e-02 second: 7.625e-02 infty: 1.192e-01 bias: -3.907e-15 P/G time: 1.59064e+06 first: 7.214e-02 second: 7.701e-02 infty: 1.224e-01 bias: 3.018e-16 P/G time: 1.60064e+06 first: 7.310e-02 second: 7.777e-02 infty: 1.235e-01 bias: -8.650e-15 P/G time: 1.61064e+06 first: 7.376e-02 second: 7.852e-02 infty: 1.258e-01 bias: -1.047e-14 P/G time: 1.62064e+06 first: 7.437e-02 second: 7.926e-02 infty: 1.286e-01 bias: -8.047e-15 P/G time: 1.63063e+06 first: 7.517e-02 second: 7.998e-02 infty: 1.293e-01 bias: -2.565e-14 P/G time: 1.64063e+06 first: 7.606e-02 second: 8.069e-02 infty: 1.282e-01 bias: -1.575e-14 P/G time: 1.65063e+06 first: 7.683e-02 second: 8.138e-02 infty: 1.293e-01 bias: -2.963e-14 P/G time: 1.66063e+06 first: 7.736e-02 second: 8.204e-02 infty: 1.299e-01 bias: -5.674e-14 P/G time: 1.67062e+06 first: 7.791e-02 second: 8.269e-02 infty: 1.289e-01 bias: -1.792e-14 P/G time: 1.68062e+06 first: 7.889e-02 second: 8.332e-02 infty: 1.288e-01 bias: -7.353e-14 P/G time: 1.69062e+06 first: 7.959e-02 second: 8.393e-02 infty: 1.303e-01 bias: -2.361e-14 P/G time: 1.70062e+06 first: 7.976e-02 second: 8.452e-02 infty: 1.342e-01 bias: -8.132e-14 P/G time: 1.71062e+06 first: 8.053e-02 second: 8.510e-02 infty: 1.371e-01 bias: -3.488e-14 P/G time: 1.72061e+06 first: 8.135e-02 second: 8.565e-02 infty: 1.387e-01 bias: -1.482e-13 P/G time: 1.73061e+06 first: 8.161e-02 second: 8.618e-02 infty: 1.383e-01 bias: -1.275e-13 P/G time: 1.74061e+06 first: 8.174e-02 second: 8.669e-02 infty: 1.363e-01 bias: -8.226e-14 P/G time: 1.75061e+06 first: 8.269e-02 second: 8.716e-02 infty: 1.330e-01 bias: -2.366e-13 P/G time: 1.7606e+06 first: 8.327e-02 second: 8.760e-02 infty: 1.317e-01 bias: -1.305e-13 P/G time: 1.7706e+06 first: 8.338e-02 second: 8.802e-02 infty: 1.320e-01 bias: -2.014e-13 P/G time: 1.7806e+06 first: 8.375e-02 second: 8.840e-02 infty: 1.307e-01 bias: -8.881e-14 P/G time: 1.7906e+06 first: 8.405e-02 second: 8.875e-02 infty: 1.302e-01 bias: -7.567e-14 P/G time: 1.8006e+06 first: 8.415e-02 second: 8.907e-02 infty: 1.296e-01 bias: -1.240e-14 P/G time: 1.81059e+06 first: 8.448e-02 second: 8.936e-02 infty: 1.298e-01 bias: -1.796e-13 P/G time: 1.82059e+06 first: 8.483e-02 second: 8.963e-02 infty: 1.308e-01 bias: -8.528e-14 P/G time: 1.83059e+06 first: 8.458e-02 second: 8.988e-02 infty: 1.301e-01 bias: -1.348e-13 P/G time: 1.84059e+06 first: 8.496e-02 second: 9.012e-02 infty: 1.284e-01 bias: -7.160e-14 P/G time: 1.85058e+06 first: 8.562e-02 second: 9.034e-02 infty: 1.302e-01 bias: -8.611e-14 P/G time: 1.86058e+06 first: 8.574e-02 second: 9.056e-02 infty: 1.303e-01 bias: -1.130e-13 P/G time: 1.87058e+06 first: 8.529e-02 second: 9.077e-02 infty: 1.290e-01 bias: -2.321e-13 P/G time: 1.88058e+06 first: 8.581e-02 second: 9.097e-02 infty: 1.300e-01 bias: -8.523e-14 P/G time: 1.89058e+06 first: 8.626e-02 second: 9.116e-02 infty: 1.314e-01 bias: -1.194e-13 P/G time: 1.90057e+06 first: 8.622e-02 second: 9.133e-02 infty: 1.321e-01 bias: -6.044e-14 P/G time: 1.91057e+06 first: 8.600e-02 second: 9.149e-02 infty: 1.311e-01 bias: -1.497e-13 P/G time: 1.92057e+06 first: 8.650e-02 second: 9.164e-02 infty: 1.330e-01 bias: -1.434e-13 P/G time: 1.93057e+06 first: 8.665e-02 second: 9.178e-02 infty: 1.348e-01 bias: -5.061e-14 P/G time: 1.94056e+06 first: 8.645e-02 second: 9.192e-02 infty: 1.350e-01 bias: -6.717e-14 P/G time: 1.95056e+06 first: 8.647e-02 second: 9.205e-02 infty: 1.336e-01 bias: -1.735e-14 P/G time: 1.96056e+06 first: 8.683e-02 second: 9.220e-02 infty: 1.364e-01 bias: -6.458e-14 P/G time: 1.97056e+06 first: 8.692e-02 second: 9.235e-02 infty: 1.377e-01 bias: -2.599e-14 P/G time: 1.98055e+06 first: 8.692e-02 second: 9.251e-02 infty: 1.369e-01 bias: 1.795e-14 P/G time: 1.99055e+06 first: 8.716e-02 second: 9.269e-02 infty: 1.346e-01 bias: -3.013e-14 P/G time: 2.00055e+06 first: 8.739e-02 second: 9.290e-02 infty: 1.372e-01 bias: -2.678e-14 P/G time: 2.01055e+06 first: 8.750e-02 second: 9.313e-02 infty: 1.382e-01 bias: -2.765e-14 P/G time: 2.02055e+06 first: 8.791e-02 second: 9.339e-02 infty: 1.373e-01 bias: -1.964e-14 P/G time: 2.03054e+06 first: 8.813e-02 second: 9.367e-02 infty: 1.366e-01 bias: -2.004e-14 P/G time: 2.04054e+06 first: 8.821e-02 second: 9.398e-02 infty: 1.396e-01 bias: -1.172e-14 P/G time: 2.05054e+06 first: 8.863e-02 second: 9.433e-02 infty: 1.403e-01 bias: -1.169e-14 P/G time: 2.06054e+06 first: 8.910e-02 second: 9.469e-02 infty: 1.396e-01 bias: 2.884e-15 P/G time: 2.07053e+06 first: 8.929e-02 second: 9.508e-02 infty: 1.420e-01 bias: -6.476e-15 gerris-snapshot-131206/test/rossby/ocean/ec-60000644000175100017510000002271712250371171015735 00000000000000Velocity2 time: 0 sum: 9.729986e+16 Velocity2 time: 9997.75 sum: 9.731863e+16 Velocity2 time: 19995.5 sum: 9.733735e+16 Velocity2 time: 29993.3 sum: 9.735703e+16 Velocity2 time: 39991 sum: 9.737735e+16 Velocity2 time: 49988.8 sum: 9.739691e+16 Velocity2 time: 59986.5 sum: 9.741376e+16 Velocity2 time: 69984.3 sum: 9.742636e+16 Velocity2 time: 79982 sum: 9.743436e+16 Velocity2 time: 89979.8 sum: 9.743877e+16 Velocity2 time: 99977.5 sum: 9.744157e+16 Velocity2 time: 109975 sum: 9.744419e+16 Velocity2 time: 119973 sum: 9.744589e+16 Velocity2 time: 129971 sum: 9.744401e+16 Velocity2 time: 139969 sum: 9.743641e+16 Velocity2 time: 149966 sum: 9.742327e+16 Velocity2 time: 159964 sum: 9.740590e+16 Velocity2 time: 169962 sum: 9.738496e+16 Velocity2 time: 179960 sum: 9.736054e+16 Velocity2 time: 189957 sum: 9.733324e+16 Velocity2 time: 199955 sum: 9.730410e+16 Velocity2 time: 209953 sum: 9.727410e+16 Velocity2 time: 219951 sum: 9.724410e+16 Velocity2 time: 229948 sum: 9.721504e+16 Velocity2 time: 239946 sum: 9.718791e+16 Velocity2 time: 249944 sum: 9.716219e+16 Velocity2 time: 259942 sum: 9.713650e+16 Velocity2 time: 269939 sum: 9.711012e+16 Velocity2 time: 279937 sum: 9.708377e+16 Velocity2 time: 289935 sum: 9.705932e+16 Velocity2 time: 299933 sum: 9.703889e+16 Velocity2 time: 309930 sum: 9.702386e+16 Velocity2 time: 319928 sum: 9.701373e+16 Velocity2 time: 329926 sum: 9.700680e+16 Velocity2 time: 339924 sum: 9.700176e+16 Velocity2 time: 349921 sum: 9.699923e+16 Velocity2 time: 359919 sum: 9.700115e+16 Velocity2 time: 369917 sum: 9.700904e+16 Velocity2 time: 379915 sum: 9.702300e+16 Velocity2 time: 389912 sum: 9.704205e+16 Velocity2 time: 399910 sum: 9.706483e+16 Velocity2 time: 409908 sum: 9.709010e+16 Velocity2 time: 419906 sum: 9.711724e+16 Velocity2 time: 429903 sum: 9.714624e+16 Velocity2 time: 439901 sum: 9.717728e+16 Velocity2 time: 449899 sum: 9.720995e+16 Velocity2 time: 459897 sum: 9.724300e+16 Velocity2 time: 469894 sum: 9.727487e+16 Velocity2 time: 479892 sum: 9.730457e+16 Velocity2 time: 489890 sum: 9.733219e+16 Velocity2 time: 499888 sum: 9.735858e+16 Velocity2 time: 509885 sum: 9.738440e+16 Velocity2 time: 519883 sum: 9.740935e+16 Velocity2 time: 529881 sum: 9.743235e+16 Velocity2 time: 539879 sum: 9.745247e+16 Velocity2 time: 549876 sum: 9.746967e+16 Velocity2 time: 559874 sum: 9.748500e+16 Velocity2 time: 569872 sum: 9.749981e+16 Velocity2 time: 579870 sum: 9.751483e+16 Velocity2 time: 589867 sum: 9.752961e+16 Velocity2 time: 599865 sum: 9.754278e+16 Velocity2 time: 609863 sum: 9.755280e+16 Velocity2 time: 619861 sum: 9.755867e+16 Velocity2 time: 629858 sum: 9.756015e+16 Velocity2 time: 639856 sum: 9.755764e+16 Velocity2 time: 649854 sum: 9.755167e+16 Velocity2 time: 659852 sum: 9.754247e+16 Velocity2 time: 669849 sum: 9.752991e+16 Velocity2 time: 679847 sum: 9.751379e+16 Velocity2 time: 689845 sum: 9.749437e+16 Velocity2 time: 699843 sum: 9.747238e+16 Velocity2 time: 709840 sum: 9.744840e+16 Velocity2 time: 719838 sum: 9.742246e+16 Velocity2 time: 729836 sum: 9.739420e+16 Velocity2 time: 739834 sum: 9.736337e+16 Velocity2 time: 749831 sum: 9.733059e+16 Velocity2 time: 759829 sum: 9.729816e+16 Velocity2 time: 769827 sum: 9.726854e+16 Velocity2 time: 779825 sum: 9.724298e+16 Velocity2 time: 789822 sum: 9.722100e+16 Velocity2 time: 799820 sum: 9.720090e+16 Velocity2 time: 809818 sum: 9.718108e+16 Velocity2 time: 819816 sum: 9.716116e+16 Velocity2 time: 829814 sum: 9.714244e+16 Velocity2 time: 839811 sum: 9.712710e+16 Velocity2 time: 849809 sum: 9.711728e+16 Velocity2 time: 859807 sum: 9.711367e+16 Velocity2 time: 869805 sum: 9.711553e+16 Velocity2 time: 879802 sum: 9.712147e+16 Velocity2 time: 889800 sum: 9.713050e+16 Velocity2 time: 899798 sum: 9.714265e+16 Velocity2 time: 909796 sum: 9.715874e+16 Velocity2 time: 919793 sum: 9.717955e+16 Velocity2 time: 929791 sum: 9.720497e+16 Velocity2 time: 939789 sum: 9.723385e+16 Velocity2 time: 949787 sum: 9.726455e+16 Velocity2 time: 959784 sum: 9.729578e+16 Velocity2 time: 969782 sum: 9.732706e+16 Velocity2 time: 979780 sum: 9.735853e+16 Velocity2 time: 989778 sum: 9.739019e+16 Velocity2 time: 999775 sum: 9.742146e+16 Velocity2 time: 1.00977e+06 sum: 9.745118e+16 Velocity2 time: 1.01977e+06 sum: 9.747828e+16 Velocity2 time: 1.02977e+06 sum: 9.750249e+16 Velocity2 time: 1.03977e+06 sum: 9.752445e+16 Velocity2 time: 1.04976e+06 sum: 9.754535e+16 Velocity2 time: 1.05976e+06 sum: 9.756595e+16 Velocity2 time: 1.06976e+06 sum: 9.758612e+16 Velocity2 time: 1.07976e+06 sum: 9.760495e+16 Velocity2 time: 1.08976e+06 sum: 9.762145e+16 Velocity2 time: 1.09975e+06 sum: 9.763517e+16 Velocity2 time: 1.10975e+06 sum: 9.764637e+16 Velocity2 time: 1.11975e+06 sum: 9.765574e+16 Velocity2 time: 1.12975e+06 sum: 9.766368e+16 Velocity2 time: 1.13974e+06 sum: 9.766997e+16 Velocity2 time: 1.14974e+06 sum: 9.767372e+16 Velocity2 time: 1.15974e+06 sum: 9.767388e+16 Velocity2 time: 1.16974e+06 sum: 9.766966e+16 Velocity2 time: 1.17973e+06 sum: 9.766083e+16 Velocity2 time: 1.18973e+06 sum: 9.764760e+16 Velocity2 time: 1.19973e+06 sum: 9.763045e+16 Velocity2 time: 1.20973e+06 sum: 9.760988e+16 Velocity2 time: 1.21973e+06 sum: 9.758645e+16 Velocity2 time: 1.22972e+06 sum: 9.756086e+16 Velocity2 time: 1.23972e+06 sum: 9.753396e+16 Velocity2 time: 1.24972e+06 sum: 9.750657e+16 Velocity2 time: 1.25972e+06 sum: 9.747889e+16 Velocity2 time: 1.26971e+06 sum: 9.745043e+16 Velocity2 time: 1.27971e+06 sum: 9.742121e+16 Velocity2 time: 1.28971e+06 sum: 9.739152e+16 Velocity2 time: 1.29971e+06 sum: 9.736223e+16 Velocity2 time: 1.30971e+06 sum: 9.733471e+16 Velocity2 time: 1.3197e+06 sum: 9.731037e+16 Velocity2 time: 1.3297e+06 sum: 9.729004e+16 Velocity2 time: 1.3397e+06 sum: 9.727358e+16 Velocity2 time: 1.3497e+06 sum: 9.726016e+16 Velocity2 time: 1.35969e+06 sum: 9.724895e+16 Velocity2 time: 1.36969e+06 sum: 9.723990e+16 Velocity2 time: 1.37969e+06 sum: 9.723376e+16 Velocity2 time: 1.38969e+06 sum: 9.723182e+16 Velocity2 time: 1.39969e+06 sum: 9.723522e+16 Velocity2 time: 1.40968e+06 sum: 9.724437e+16 Velocity2 time: 1.41968e+06 sum: 9.725876e+16 Velocity2 time: 1.42968e+06 sum: 9.727739e+16 Velocity2 time: 1.43968e+06 sum: 9.729931e+16 Velocity2 time: 1.44967e+06 sum: 9.732396e+16 Velocity2 time: 1.45967e+06 sum: 9.735117e+16 Velocity2 time: 1.46967e+06 sum: 9.738071e+16 Velocity2 time: 1.47967e+06 sum: 9.741202e+16 Velocity2 time: 1.48967e+06 sum: 9.744414e+16 Velocity2 time: 1.49966e+06 sum: 9.747600e+16 Velocity2 time: 1.50966e+06 sum: 9.750687e+16 Velocity2 time: 1.51966e+06 sum: 9.753653e+16 Velocity2 time: 1.52966e+06 sum: 9.756512e+16 Velocity2 time: 1.53965e+06 sum: 9.759272e+16 Velocity2 time: 1.54965e+06 sum: 9.761906e+16 Velocity2 time: 1.55965e+06 sum: 9.764351e+16 Velocity2 time: 1.56965e+06 sum: 9.766557e+16 Velocity2 time: 1.57964e+06 sum: 9.768516e+16 Velocity2 time: 1.58964e+06 sum: 9.770276e+16 Velocity2 time: 1.59964e+06 sum: 9.771916e+16 Velocity2 time: 1.60964e+06 sum: 9.773495e+16 Velocity2 time: 1.61964e+06 sum: 9.775007e+16 Velocity2 time: 1.62963e+06 sum: 9.776381e+16 Velocity2 time: 1.63963e+06 sum: 9.777515e+16 Velocity2 time: 1.64963e+06 sum: 9.778330e+16 Velocity2 time: 1.65963e+06 sum: 9.778793e+16 Velocity2 time: 1.66962e+06 sum: 9.778925e+16 Velocity2 time: 1.67962e+06 sum: 9.778757e+16 Velocity2 time: 1.68962e+06 sum: 9.778300e+16 Velocity2 time: 1.69962e+06 sum: 9.777524e+16 Velocity2 time: 1.70962e+06 sum: 9.776378e+16 Velocity2 time: 1.71961e+06 sum: 9.774822e+16 Velocity2 time: 1.72961e+06 sum: 9.772859e+16 Velocity2 time: 1.73961e+06 sum: 9.770539e+16 Velocity2 time: 1.74961e+06 sum: 9.767951e+16 Velocity2 time: 1.7596e+06 sum: 9.765191e+16 Velocity2 time: 1.7696e+06 sum: 9.762350e+16 Velocity2 time: 1.7796e+06 sum: 9.759476e+16 Velocity2 time: 1.7896e+06 sum: 9.756565e+16 Velocity2 time: 1.7996e+06 sum: 9.753674e+16 Velocity2 time: 1.80959e+06 sum: 9.750852e+16 Velocity2 time: 1.81959e+06 sum: 9.748137e+16 Velocity2 time: 1.82959e+06 sum: 9.745559e+16 Velocity2 time: 1.83959e+06 sum: 9.743155e+16 Velocity2 time: 1.84958e+06 sum: 9.740974e+16 Velocity2 time: 1.85958e+06 sum: 9.739073e+16 Velocity2 time: 1.86958e+06 sum: 9.737511e+16 Velocity2 time: 1.87958e+06 sum: 9.736330e+16 Velocity2 time: 1.88958e+06 sum: 9.735562e+16 Velocity2 time: 1.89957e+06 sum: 9.735203e+16 Velocity2 time: 1.90957e+06 sum: 9.735244e+16 Velocity2 time: 1.91957e+06 sum: 9.735680e+16 Velocity2 time: 1.92957e+06 sum: 9.736527e+16 Velocity2 time: 1.93956e+06 sum: 9.737803e+16 Velocity2 time: 1.94956e+06 sum: 9.739522e+16 Velocity2 time: 1.95956e+06 sum: 9.741669e+16 Velocity2 time: 1.96956e+06 sum: 9.744192e+16 Velocity2 time: 1.97956e+06 sum: 9.747008e+16 Velocity2 time: 1.98955e+06 sum: 9.750026e+16 Velocity2 time: 1.99955e+06 sum: 9.753161e+16 Velocity2 time: 2.00955e+06 sum: 9.756347e+16 Velocity2 time: 2.01955e+06 sum: 9.759532e+16 Velocity2 time: 2.02954e+06 sum: 9.762663e+16 Velocity2 time: 2.03954e+06 sum: 9.765690e+16 Velocity2 time: 2.04954e+06 sum: 9.768568e+16 Velocity2 time: 2.05954e+06 sum: 9.771275e+16 Velocity2 time: 2.06953e+06 sum: 9.773813e+16 gerris-snapshot-131206/test/rossby/ocean/eh-6.ref0000644000175100017510000004515112250371171016512 00000000000000P/G time: 999.775 first: 3.258e-03 second: 3.918e-03 infty: 5.516e-03 bias: 4.319e-17 P/G time: 10997.5 first: 3.246e-02 second: 3.851e-02 infty: 5.475e-02 bias: -4.450e-15 P/G time: 20995.3 first: 4.627e-02 second: 5.423e-02 infty: 8.155e-02 bias: -1.025e-15 P/G time: 30993 first: 3.993e-02 second: 4.660e-02 infty: 7.814e-02 bias: 1.560e-14 P/G time: 40990.8 first: 1.727e-02 second: 2.039e-02 infty: 3.900e-02 bias: 5.275e-14 P/G time: 50988.5 first: 1.670e-02 second: 1.792e-02 infty: 2.578e-02 bias: 1.219e-13 P/G time: 60986.3 first: 3.737e-02 second: 4.326e-02 infty: 6.454e-02 bias: 8.136e-14 P/G time: 70984 first: 4.219e-02 second: 5.078e-02 infty: 8.240e-02 bias: 1.479e-13 P/G time: 80981.8 first: 2.942e-02 second: 3.691e-02 infty: 6.238e-02 bias: 1.116e-13 P/G time: 90979.6 first: 9.258e-03 second: 9.916e-03 infty: 1.564e-02 bias: 2.834e-13 P/G time: 100977 first: 2.561e-02 second: 2.806e-02 infty: 4.265e-02 bias: 2.396e-13 P/G time: 110975 first: 3.943e-02 second: 4.724e-02 infty: 7.587e-02 bias: 1.635e-13 P/G time: 120973 first: 3.833e-02 second: 4.659e-02 infty: 7.500e-02 bias: 3.212e-13 P/G time: 130971 first: 2.498e-02 second: 2.768e-02 infty: 4.612e-02 bias: 4.099e-13 P/G time: 140968 first: 1.135e-02 second: 1.371e-02 infty: 3.228e-02 bias: 2.860e-13 P/G time: 150966 first: 3.120e-02 second: 3.473e-02 infty: 5.551e-02 bias: 3.466e-13 P/G time: 160964 first: 4.021e-02 second: 4.543e-02 infty: 7.552e-02 bias: 2.745e-13 P/G time: 170962 first: 3.299e-02 second: 3.774e-02 infty: 6.631e-02 bias: 4.309e-13 P/G time: 180959 first: 1.618e-02 second: 1.758e-02 infty: 3.144e-02 bias: 2.907e-13 P/G time: 190957 first: 1.866e-02 second: 2.053e-02 infty: 3.446e-02 bias: 3.663e-13 P/G time: 200955 first: 3.554e-02 second: 3.933e-02 infty: 5.547e-02 bias: -8.863e-14 P/G time: 210953 first: 4.081e-02 second: 4.464e-02 infty: 6.744e-02 bias: 2.091e-13 P/G time: 220950 first: 3.104e-02 second: 3.395e-02 infty: 5.678e-02 bias: 2.664e-13 P/G time: 230948 first: 1.962e-02 second: 2.013e-02 infty: 2.769e-02 bias: 1.462e-13 P/G time: 240946 first: 2.572e-02 second: 2.866e-02 infty: 4.898e-02 bias: 2.721e-13 P/G time: 250944 first: 3.368e-02 second: 3.821e-02 infty: 6.190e-02 bias: 6.868e-13 P/G time: 260941 first: 2.907e-02 second: 3.441e-02 infty: 5.746e-02 bias: 3.054e-13 P/G time: 270939 first: 1.864e-02 second: 2.108e-02 infty: 4.496e-02 bias: 3.589e-13 P/G time: 280937 first: 1.940e-02 second: 2.028e-02 infty: 2.816e-02 bias: 5.612e-13 P/G time: 290935 first: 3.089e-02 second: 3.394e-02 infty: 5.210e-02 bias: 6.083e-13 P/G time: 300932 first: 3.402e-02 second: 3.931e-02 infty: 6.371e-02 bias: 4.181e-13 P/G time: 310930 first: 2.722e-02 second: 3.163e-02 infty: 5.004e-02 bias: 3.353e-13 P/G time: 320928 first: 1.723e-02 second: 1.843e-02 infty: 3.286e-02 bias: 5.057e-13 P/G time: 330926 first: 2.021e-02 second: 2.176e-02 infty: 3.403e-02 bias: 2.453e-13 P/G time: 340923 first: 2.874e-02 second: 3.199e-02 infty: 5.494e-02 bias: 3.097e-13 P/G time: 350921 first: 2.622e-02 second: 3.254e-02 infty: 5.801e-02 bias: 3.548e-13 P/G time: 360919 first: 1.903e-02 second: 2.245e-02 infty: 4.146e-02 bias: 3.632e-13 P/G time: 370917 first: 1.217e-02 second: 1.433e-02 infty: 2.793e-02 bias: 3.503e-13 P/G time: 380914 first: 2.362e-02 second: 2.582e-02 infty: 3.999e-02 bias: 3.583e-13 P/G time: 390912 first: 3.129e-02 second: 3.538e-02 infty: 5.697e-02 bias: 1.499e-13 P/G time: 400910 first: 2.898e-02 second: 3.317e-02 infty: 5.560e-02 bias: 2.451e-13 P/G time: 410908 first: 1.862e-02 second: 2.079e-02 infty: 3.946e-02 bias: 1.126e-13 P/G time: 420905 first: 1.508e-02 second: 1.554e-02 infty: 2.226e-02 bias: 7.168e-14 P/G time: 430903 first: 2.482e-02 second: 2.733e-02 infty: 4.911e-02 bias: 1.242e-13 P/G time: 440901 first: 2.872e-02 second: 3.245e-02 infty: 5.808e-02 bias: 5.888e-14 P/G time: 450899 first: 2.121e-02 second: 2.436e-02 infty: 4.425e-02 bias: 3.354e-14 P/G time: 460896 first: 7.308e-03 second: 8.228e-03 infty: 1.441e-02 bias: 9.184e-15 P/G time: 470894 first: 1.662e-02 second: 1.814e-02 infty: 2.553e-02 bias: 2.798e-15 P/G time: 480892 first: 2.825e-02 second: 3.193e-02 infty: 5.355e-02 bias: -8.186e-15 P/G time: 490890 first: 2.948e-02 second: 3.344e-02 infty: 6.018e-02 bias: 3.559e-15 P/G time: 500887 first: 1.934e-02 second: 2.214e-02 infty: 4.263e-02 bias: 2.510e-15 P/G time: 510885 first: 5.346e-03 second: 6.629e-03 infty: 1.535e-02 bias: -1.118e-15 P/G time: 520883 first: 1.678e-02 second: 1.802e-02 infty: 2.787e-02 bias: 1.152e-14 P/G time: 530881 first: 2.343e-02 second: 2.754e-02 infty: 4.980e-02 bias: 3.418e-14 P/G time: 540878 first: 2.148e-02 second: 2.547e-02 infty: 4.986e-02 bias: 4.061e-14 P/G time: 550876 first: 1.461e-02 second: 1.575e-02 infty: 2.936e-02 bias: 4.823e-14 P/G time: 560874 first: 1.502e-02 second: 1.631e-02 infty: 2.761e-02 bias: 4.826e-14 P/G time: 570872 first: 2.603e-02 second: 2.694e-02 infty: 3.631e-02 bias: 7.510e-14 P/G time: 580869 first: 2.866e-02 second: 3.095e-02 infty: 4.480e-02 bias: 7.407e-14 P/G time: 590867 first: 2.219e-02 second: 2.473e-02 infty: 4.104e-02 bias: 1.760e-13 P/G time: 600865 first: 1.064e-02 second: 1.185e-02 infty: 2.339e-02 bias: 2.050e-13 P/G time: 610863 first: 1.051e-02 second: 1.161e-02 infty: 1.816e-02 bias: 1.357e-13 P/G time: 620860 first: 1.813e-02 second: 2.191e-02 infty: 4.148e-02 bias: 1.830e-13 P/G time: 630858 first: 1.852e-02 second: 2.391e-02 infty: 4.648e-02 bias: 5.654e-13 P/G time: 640856 first: 1.248e-02 second: 1.638e-02 infty: 3.233e-02 bias: 3.074e-13 P/G time: 650854 first: 9.237e-03 second: 1.047e-02 infty: 2.354e-02 bias: 4.163e-13 P/G time: 660851 first: 1.881e-02 second: 2.062e-02 infty: 3.379e-02 bias: 1.927e-13 P/G time: 670849 first: 2.477e-02 second: 2.768e-02 infty: 4.578e-02 bias: 2.182e-13 P/G time: 680847 first: 2.169e-02 second: 2.458e-02 infty: 4.127e-02 bias: 3.104e-13 P/G time: 690845 first: 1.211e-02 second: 1.289e-02 infty: 1.992e-02 bias: 6.058e-13 P/G time: 700842 first: 6.955e-03 second: 7.443e-03 infty: 1.409e-02 bias: 6.119e-13 P/G time: 710840 first: 1.572e-02 second: 1.764e-02 infty: 3.096e-02 bias: 5.204e-13 P/G time: 720838 first: 1.763e-02 second: 2.094e-02 infty: 3.832e-02 bias: 4.548e-13 P/G time: 730836 first: 1.396e-02 second: 1.637e-02 infty: 2.869e-02 bias: 3.992e-13 P/G time: 740834 first: 1.338e-02 second: 1.394e-02 infty: 1.939e-02 bias: 1.865e-13 P/G time: 750831 first: 1.999e-02 second: 2.125e-02 infty: 3.188e-02 bias: 3.998e-13 P/G time: 760829 first: 2.584e-02 second: 2.638e-02 infty: 3.556e-02 bias: 2.567e-13 P/G time: 770827 first: 2.322e-02 second: 2.386e-02 infty: 3.257e-02 bias: 7.395e-13 P/G time: 780825 first: 1.490e-02 second: 1.608e-02 infty: 2.919e-02 bias: 1.154e-13 P/G time: 790822 first: 1.210e-02 second: 1.253e-02 infty: 1.644e-02 bias: 3.428e-13 P/G time: 800820 first: 1.534e-02 second: 1.649e-02 infty: 2.344e-02 bias: 5.644e-13 P/G time: 810818 first: 1.656e-02 second: 1.810e-02 infty: 2.934e-02 bias: 8.105e-13 P/G time: 820816 first: 1.436e-02 second: 1.583e-02 infty: 2.808e-02 bias: 6.299e-13 P/G time: 830813 first: 1.322e-02 second: 1.495e-02 infty: 2.515e-02 bias: 5.618e-13 P/G time: 840811 first: 1.669e-02 second: 1.809e-02 infty: 2.869e-02 bias: 2.819e-13 P/G time: 850809 first: 1.816e-02 second: 2.030e-02 infty: 3.234e-02 bias: 4.418e-13 P/G time: 860807 first: 1.554e-02 second: 1.857e-02 infty: 3.563e-02 bias: 5.534e-13 P/G time: 870804 first: 1.179e-02 second: 1.428e-02 infty: 2.701e-02 bias: 4.450e-13 P/G time: 880802 first: 1.154e-02 second: 1.288e-02 infty: 2.009e-02 bias: 1.943e-13 P/G time: 890800 first: 1.557e-02 second: 1.641e-02 infty: 2.277e-02 bias: 2.126e-13 P/G time: 900798 first: 1.720e-02 second: 1.923e-02 infty: 3.686e-02 bias: 2.234e-13 P/G time: 910795 first: 1.580e-02 second: 1.817e-02 infty: 3.566e-02 bias: 2.509e-13 P/G time: 920793 first: 1.382e-02 second: 1.474e-02 infty: 2.100e-02 bias: 1.403e-13 P/G time: 930791 first: 1.273e-02 second: 1.468e-02 infty: 3.126e-02 bias: 1.574e-13 P/G time: 940789 first: 1.733e-02 second: 1.874e-02 infty: 3.176e-02 bias: 1.080e-13 P/G time: 950786 first: 1.962e-02 second: 2.063e-02 infty: 2.931e-02 bias: 1.118e-13 P/G time: 960784 first: 1.682e-02 second: 1.754e-02 infty: 2.690e-02 bias: 4.563e-14 P/G time: 970782 first: 1.143e-02 second: 1.213e-02 infty: 1.648e-02 bias: 5.845e-14 P/G time: 980780 first: 1.135e-02 second: 1.209e-02 infty: 1.675e-02 bias: 2.481e-14 P/G time: 990777 first: 1.439e-02 second: 1.570e-02 infty: 2.994e-02 bias: 1.733e-15 P/G time: 1.00078e+06 first: 1.380e-02 second: 1.566e-02 infty: 3.074e-02 bias: -4.853e-15 P/G time: 1.01077e+06 first: 1.004e-02 second: 1.180e-02 infty: 1.845e-02 bias: -1.088e-14 P/G time: 1.02077e+06 first: 9.851e-03 second: 1.115e-02 infty: 2.154e-02 bias: -1.471e-14 P/G time: 1.03077e+06 first: 1.428e-02 second: 1.618e-02 infty: 2.761e-02 bias: -1.518e-14 P/G time: 1.04077e+06 first: 1.690e-02 second: 1.910e-02 infty: 3.122e-02 bias: -5.225e-15 P/G time: 1.05076e+06 first: 1.439e-02 second: 1.664e-02 infty: 2.910e-02 bias: 1.278e-14 P/G time: 1.06076e+06 first: 9.368e-03 second: 1.043e-02 infty: 1.585e-02 bias: 1.059e-14 P/G time: 1.07076e+06 first: 8.193e-03 second: 8.952e-03 infty: 1.283e-02 bias: 6.009e-14 P/G time: 1.08076e+06 first: 1.371e-02 second: 1.502e-02 infty: 2.573e-02 bias: 7.215e-14 P/G time: 1.09075e+06 first: 1.819e-02 second: 1.939e-02 infty: 3.447e-02 bias: 6.999e-14 P/G time: 1.10075e+06 first: 1.928e-02 second: 1.991e-02 infty: 3.161e-02 bias: 1.061e-13 P/G time: 1.11075e+06 first: 1.755e-02 second: 1.827e-02 infty: 2.536e-02 bias: 1.555e-13 P/G time: 1.12075e+06 first: 1.551e-02 second: 1.761e-02 infty: 2.860e-02 bias: 1.183e-13 P/G time: 1.13075e+06 first: 1.773e-02 second: 1.839e-02 infty: 2.767e-02 bias: 1.959e-13 P/G time: 1.14074e+06 first: 1.702e-02 second: 1.767e-02 infty: 2.487e-02 bias: 3.674e-13 P/G time: 1.15074e+06 first: 1.293e-02 second: 1.357e-02 infty: 2.064e-02 bias: 2.180e-13 P/G time: 1.16074e+06 first: 7.751e-03 second: 8.272e-03 infty: 1.248e-02 bias: 3.400e-13 P/G time: 1.17074e+06 first: 9.225e-03 second: 9.860e-03 infty: 1.355e-02 bias: -5.734e-15 P/G time: 1.18073e+06 first: 1.343e-02 second: 1.481e-02 infty: 2.528e-02 bias: 4.480e-13 P/G time: 1.19073e+06 first: 1.475e-02 second: 1.636e-02 infty: 2.668e-02 bias: 3.166e-13 P/G time: 1.20073e+06 first: 1.344e-02 second: 1.437e-02 infty: 2.204e-02 bias: 5.391e-13 P/G time: 1.21073e+06 first: 1.206e-02 second: 1.313e-02 infty: 2.710e-02 bias: 4.133e-14 P/G time: 1.22073e+06 first: 1.459e-02 second: 1.533e-02 infty: 2.777e-02 bias: 3.583e-13 P/G time: 1.23072e+06 first: 1.638e-02 second: 1.676e-02 infty: 2.328e-02 bias: 2.669e-13 P/G time: 1.24072e+06 first: 1.419e-02 second: 1.446e-02 infty: 2.004e-02 bias: 6.773e-13 P/G time: 1.25072e+06 first: 1.001e-02 second: 1.057e-02 infty: 1.575e-02 bias: 5.168e-13 P/G time: 1.26072e+06 first: 1.092e-02 second: 1.177e-02 infty: 1.704e-02 bias: 3.958e-13 P/G time: 1.27071e+06 first: 1.495e-02 second: 1.641e-02 infty: 2.794e-02 bias: 7.091e-13 P/G time: 1.28071e+06 first: 1.771e-02 second: 1.893e-02 infty: 3.070e-02 bias: 3.487e-13 P/G time: 1.29071e+06 first: 1.809e-02 second: 1.872e-02 infty: 2.390e-02 bias: 3.294e-13 P/G time: 1.30071e+06 first: 1.667e-02 second: 1.791e-02 infty: 2.489e-02 bias: 3.951e-13 P/G time: 1.31071e+06 first: 1.569e-02 second: 1.767e-02 infty: 2.581e-02 bias: 6.461e-13 P/G time: 1.3207e+06 first: 1.566e-02 second: 1.652e-02 infty: 2.281e-02 bias: 6.021e-13 P/G time: 1.3307e+06 first: 1.282e-02 second: 1.333e-02 infty: 1.709e-02 bias: 4.280e-13 P/G time: 1.3407e+06 first: 9.131e-03 second: 1.015e-02 infty: 1.651e-02 bias: 4.268e-13 P/G time: 1.3507e+06 first: 1.016e-02 second: 1.111e-02 infty: 1.922e-02 bias: 4.875e-13 P/G time: 1.36069e+06 first: 1.355e-02 second: 1.431e-02 infty: 2.055e-02 bias: 3.899e-13 P/G time: 1.37069e+06 first: 1.552e-02 second: 1.593e-02 infty: 1.962e-02 bias: 3.828e-13 P/G time: 1.38069e+06 first: 1.477e-02 second: 1.532e-02 infty: 1.900e-02 bias: 2.638e-13 P/G time: 1.39069e+06 first: 1.311e-02 second: 1.372e-02 infty: 2.083e-02 bias: 2.094e-13 P/G time: 1.40069e+06 first: 1.180e-02 second: 1.265e-02 infty: 2.069e-02 bias: 3.924e-13 P/G time: 1.41068e+06 first: 1.183e-02 second: 1.246e-02 infty: 1.788e-02 bias: 1.462e-13 P/G time: 1.42068e+06 first: 1.245e-02 second: 1.294e-02 infty: 1.630e-02 bias: 2.949e-13 P/G time: 1.43068e+06 first: 1.347e-02 second: 1.440e-02 infty: 2.164e-02 bias: 1.563e-13 P/G time: 1.44068e+06 first: 1.634e-02 second: 1.685e-02 infty: 2.590e-02 bias: 1.403e-13 P/G time: 1.45067e+06 first: 1.787e-02 second: 1.905e-02 infty: 2.708e-02 bias: 7.195e-14 P/G time: 1.46067e+06 first: 1.815e-02 second: 1.957e-02 infty: 2.790e-02 bias: 2.006e-13 P/G time: 1.47067e+06 first: 1.720e-02 second: 1.804e-02 infty: 2.511e-02 bias: 1.167e-13 P/G time: 1.48067e+06 first: 1.493e-02 second: 1.567e-02 infty: 2.176e-02 bias: 6.152e-14 P/G time: 1.49066e+06 first: 1.291e-02 second: 1.435e-02 infty: 2.347e-02 bias: 3.670e-14 P/G time: 1.50066e+06 first: 1.319e-02 second: 1.415e-02 infty: 2.320e-02 bias: 3.609e-14 P/G time: 1.51066e+06 first: 1.290e-02 second: 1.342e-02 infty: 2.252e-02 bias: 1.792e-14 P/G time: 1.52066e+06 first: 1.078e-02 second: 1.188e-02 infty: 1.988e-02 bias: -3.322e-15 P/G time: 1.53066e+06 first: 1.031e-02 second: 1.146e-02 infty: 1.851e-02 bias: 2.416e-16 P/G time: 1.54065e+06 first: 1.228e-02 second: 1.306e-02 infty: 1.763e-02 bias: 1.219e-15 P/G time: 1.55065e+06 first: 1.390e-02 second: 1.465e-02 infty: 2.005e-02 bias: -1.563e-15 P/G time: 1.56065e+06 first: 1.366e-02 second: 1.487e-02 infty: 2.252e-02 bias: 4.021e-15 P/G time: 1.57065e+06 first: 1.330e-02 second: 1.431e-02 infty: 2.645e-02 bias: 1.020e-14 P/G time: 1.58064e+06 first: 1.257e-02 second: 1.425e-02 infty: 2.952e-02 bias: 1.828e-14 P/G time: 1.59064e+06 first: 1.272e-02 second: 1.450e-02 infty: 2.982e-02 bias: 4.039e-14 P/G time: 1.60064e+06 first: 1.297e-02 second: 1.395e-02 infty: 2.637e-02 bias: 3.178e-14 P/G time: 1.61064e+06 first: 1.235e-02 second: 1.286e-02 infty: 2.042e-02 bias: 1.365e-13 P/G time: 1.62064e+06 first: 1.322e-02 second: 1.333e-02 infty: 1.636e-02 bias: 1.110e-13 P/G time: 1.63063e+06 first: 1.601e-02 second: 1.618e-02 infty: 1.857e-02 bias: 1.760e-13 P/G time: 1.64063e+06 first: 1.867e-02 second: 1.933e-02 infty: 2.433e-02 bias: 1.874e-13 P/G time: 1.65063e+06 first: 2.012e-02 second: 2.078e-02 infty: 2.616e-02 bias: 2.009e-13 P/G time: 1.66063e+06 first: 1.936e-02 second: 1.993e-02 infty: 2.850e-02 bias: 1.630e-13 P/G time: 1.67062e+06 first: 1.647e-02 second: 1.740e-02 infty: 3.043e-02 bias: 1.412e-13 P/G time: 1.68062e+06 first: 1.262e-02 second: 1.451e-02 infty: 2.960e-02 bias: 5.884e-14 P/G time: 1.69062e+06 first: 1.123e-02 second: 1.227e-02 infty: 2.655e-02 bias: 3.577e-13 P/G time: 1.70062e+06 first: 1.032e-02 second: 1.079e-02 infty: 2.262e-02 bias: 4.057e-13 P/G time: 1.71062e+06 first: 9.731e-03 second: 1.038e-02 infty: 1.924e-02 bias: 9.285e-14 P/G time: 1.72061e+06 first: 1.109e-02 second: 1.203e-02 infty: 1.840e-02 bias: 5.005e-13 P/G time: 1.73061e+06 first: 1.418e-02 second: 1.507e-02 infty: 2.064e-02 bias: 3.808e-13 P/G time: 1.74061e+06 first: 1.632e-02 second: 1.739e-02 infty: 2.312e-02 bias: 4.585e-13 P/G time: 1.75061e+06 first: 1.692e-02 second: 1.769e-02 infty: 2.361e-02 bias: 4.741e-13 P/G time: 1.7606e+06 first: 1.591e-02 second: 1.636e-02 infty: 2.288e-02 bias: 4.011e-13 P/G time: 1.7706e+06 first: 1.389e-02 second: 1.514e-02 infty: 2.219e-02 bias: 7.100e-13 P/G time: 1.7806e+06 first: 1.358e-02 second: 1.525e-02 infty: 2.154e-02 bias: 6.180e-13 P/G time: 1.7906e+06 first: 1.452e-02 second: 1.592e-02 infty: 2.293e-02 bias: 3.999e-13 P/G time: 1.8006e+06 first: 1.532e-02 second: 1.634e-02 infty: 2.447e-02 bias: 5.353e-13 P/G time: 1.81059e+06 first: 1.653e-02 second: 1.716e-02 infty: 2.581e-02 bias: 6.496e-13 P/G time: 1.82059e+06 first: 1.787e-02 second: 1.890e-02 infty: 2.653e-02 bias: 3.690e-13 P/G time: 1.83059e+06 first: 1.946e-02 second: 2.049e-02 infty: 2.657e-02 bias: 8.190e-13 P/G time: 1.84059e+06 first: 1.969e-02 second: 2.054e-02 infty: 2.677e-02 bias: 5.652e-13 P/G time: 1.85058e+06 first: 1.815e-02 second: 1.887e-02 infty: 2.533e-02 bias: 5.024e-13 P/G time: 1.86058e+06 first: 1.544e-02 second: 1.654e-02 infty: 2.383e-02 bias: 6.340e-13 P/G time: 1.87058e+06 first: 1.290e-02 second: 1.469e-02 infty: 2.241e-02 bias: 4.551e-13 P/G time: 1.88058e+06 first: 1.200e-02 second: 1.348e-02 infty: 2.100e-02 bias: 2.603e-13 P/G time: 1.89058e+06 first: 1.130e-02 second: 1.283e-02 infty: 2.161e-02 bias: 4.705e-13 P/G time: 1.90057e+06 first: 1.168e-02 second: 1.349e-02 infty: 2.324e-02 bias: 2.869e-13 P/G time: 1.91057e+06 first: 1.398e-02 second: 1.552e-02 infty: 2.455e-02 bias: 1.165e-13 P/G time: 1.92057e+06 first: 1.610e-02 second: 1.748e-02 infty: 2.466e-02 bias: 3.189e-13 P/G time: 1.93057e+06 first: 1.684e-02 second: 1.815e-02 infty: 2.530e-02 bias: 3.285e-13 P/G time: 1.94056e+06 first: 1.685e-02 second: 1.764e-02 infty: 2.543e-02 bias: 1.706e-13 P/G time: 1.95056e+06 first: 1.607e-02 second: 1.703e-02 infty: 2.470e-02 bias: 1.392e-13 P/G time: 1.96056e+06 first: 1.581e-02 second: 1.723e-02 infty: 2.433e-02 bias: 1.146e-13 P/G time: 1.97056e+06 first: 1.715e-02 second: 1.812e-02 infty: 2.501e-02 bias: 1.938e-13 P/G time: 1.98055e+06 first: 1.874e-02 second: 1.920e-02 infty: 2.591e-02 bias: 1.258e-13 P/G time: 1.99055e+06 first: 2.003e-02 second: 2.025e-02 infty: 2.736e-02 bias: 7.892e-14 P/G time: 2.00055e+06 first: 2.060e-02 second: 2.110e-02 infty: 2.848e-02 bias: 7.053e-14 P/G time: 2.01055e+06 first: 2.032e-02 second: 2.127e-02 infty: 2.912e-02 bias: 3.190e-14 P/G time: 2.02055e+06 first: 1.958e-02 second: 2.036e-02 infty: 2.931e-02 bias: 1.194e-14 P/G time: 2.03054e+06 first: 1.795e-02 second: 1.855e-02 infty: 2.882e-02 bias: 3.154e-15 P/G time: 2.04054e+06 first: 1.577e-02 second: 1.664e-02 infty: 2.847e-02 bias: -4.750e-15 P/G time: 2.05054e+06 first: 1.367e-02 second: 1.540e-02 infty: 2.854e-02 bias: -1.277e-14 P/G time: 2.06054e+06 first: 1.260e-02 second: 1.484e-02 infty: 2.873e-02 bias: -3.829e-15 P/G time: 2.07053e+06 first: 1.228e-02 second: 1.462e-02 infty: 2.879e-02 bias: -4.119e-15 gerris-snapshot-131206/test/rossby/ocean/ehp.gfv0000644000175100017510000000070512250371171016531 00000000000000# GfsView 2D View { tx = -1.47931 ty = -1.02043 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.0946 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } EH { amin = 0 min = 0 amax = 0 max = 100 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 9 } gerris-snapshot-131206/test/rossby/ocean/ocean.gfs0000644000175100017510000001177612250371172017052 00000000000000# Title: Rossby--Haurwitz wave with a free surface # # Description: # # Same test case but using the GfsOcean solver implementing an # implicit solution to the linearised shallow-water equations. # # The initial transient (geostrophic adjustement) seems to be too # strong. # # \begin{figure}[htbp] # \caption{\label{height}Detail of height field after one complete revolution # (24 days). Numerical solution in red and reference solution in # green. (a) C16, (b) C32, (c) C64.} # \begin{center} # \begin{tabular}{cc} # (a) \includegraphics[width=0.45\hsize]{h-4.eps} & # (b) \includegraphics[width=0.45\hsize]{h-5.eps} \\ # \multicolumn{2}{c}{(c) \includegraphics[width=0.45\hsize]{h-6.eps}} # \end{tabular} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Detail of relative error field after one # complete revolution (24 days). Red is positive and green # negative. 10 metres contour interval. (a) C16, (b) C32, (c) C64.} # \begin{center} # \begin{tabular}{cc} # (a) \includegraphics[width=0.45\hsize]{ehpm-4.eps} & # (b) \includegraphics[width=0.45\hsize]{ehpm-5.eps} \\ # \multicolumn{2}{c}{(c) \includegraphics[width=0.45\hsize]{ehpm-6.eps}} # \end{tabular} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error-t}Evolution of maximum relative error on height with time.} # \begin{center} # \includegraphics[width=0.8\hsize]{eh.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Convergence of final errors with spatial resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{order.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{kinetic}Evolution of kinetic energy with time.} # \begin{center} # \includegraphics[width=0.8\hsize]{ec.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../rossby.sh ocean.gfs # Version: 120614 # Required files: ehp.gfv ehm.gfv h.gfv href.gfv ec-6 eh-4.ref eh-5.ref eh-6.ref # Running time: 10 minutes # Generated files: ehpm-4.eps ehpm-5.eps ehpm-6.eps h-4.eps h-5.eps h-6.eps ec.eps eh.eps order.eps # 6 12 GfsOcean GfsBox GfsGEdge {} { Global { #define AR 6.37122e6 #define N 4. #define Umax 50. #define M (Umax/(N*AR)) #define K M #define Omega 7.292e-5 #define G 9.806116 #define DTR (M_PI/180.) // Williamson 1992, eq. (137) static double u0 (double lambda, double phi) { double cosphi = cos (phi), sinphi = sin (phi); return AR*M*cosphi + AR*K*pow (cosphi, N - 1)* cos (N*lambda)*(N*sinphi*sinphi - cosphi*cosphi); } // Williamson 1992, eq. (138) static double v0 (double lambda, double phi) { double cosphi = cos (phi), sinphi = sin (phi); return - AR*K*N*pow (cosphi, N - 1)*sinphi*sin (N*lambda); } // Williamson 1992, eq. (139) static double vorticity0 (double lambda, double phi) { return 2.*M*sin(phi) - K*sin(phi)*pow (cos (phi), N)*(N*N + 3.*N + 2.)*cos (N*lambda); } // Williamson 1992, eqs. (140-143) static double p0 (double lambda, double phi, double t) { double nu = (N*(3. + N)*M - 2.*Omega)/((1. + N)*(2. + N)); lambda -= nu*t; double cosphi = cos (phi); double Aphi = M/2.*(2.*Omega + M)*cosphi*cosphi + K*K/4.*pow (cosphi, 2.*N)* ((N + 1.)*cosphi*cosphi + 2.*N*N - N - 2. - 2.*N*N*pow(cosphi, -2.)); double Bphi = 2.*(Omega + M)*K/((N + 1.)*(N + 2.))*pow(cosphi, N)* (N*N + 2.*N + 2. - (N + 1.)*(N + 1.)*cosphi*cosphi); double Cphi = K*K/4.*pow(cosphi,2.*N)*((N + 1.)*cosphi*cosphi - (N + 2.)); return AR*AR*(Aphi + Bphi*cos (N*lambda) + Cphi*cos (2.*N*lambda)); } } PhysicalParams { L = 2.*M_PI*AR/4. # g*H0 g = G*8e3 } MetricCubed M LEVEL SourceCoriolis 2.*Omega*sin(y*DTR) Init {} { (U,V) = (u0(x*DTR,y*DTR), v0(x*DTR,y*DTR)) P = p0(x*DTR,y*DTR,0) # fixme: it would be more logical to set H = H0 and g = 9.806116 H = 1 } ApproxProjectionParams { tolerance = 1e-9 } Refine LEVEL # ~24 days Time { end = 2073534 dtmax = 1e3 } # OutputTime { istep = 1 } stderr # OutputProjectionStats { istep = 1 } stderr OutputScalarNorm { istep = 10 } v-LEVEL { v = V } OutputScalarSum { istep = 10 } ec-LEVEL { v = Velocity2 } OutputScalarSum { istep = 10 } zeta-LEVEL { v = Vorticity } OutputScalarSum { istep = 10 } p-LEVEL { v = P } OutputErrorNorm { istart = 1 istep = 10 } eh-LEVEL { v = P/G } { s = p0(x*DTR,y*DTR,t)/G v = EH unbiased = 1 relative = 1 } OutputSimulation { start = end } end-LEVEL.gfs # OutputSimulation { istep = 10 } stdout GModule gfsview OutputView { start = end } ehp-LEVEL.gnu { format = Gnuplot } ehp.gfv OutputView { start = end } ehm-LEVEL.gnu { format = Gnuplot } ehm.gfv OutputView { start = end } h-LEVEL.gnu { format = Gnuplot } h.gfv OutputView { start = end } href-LEVEL.gnu { format = Gnuplot } href.gfv } GfsBox {} GfsBox {} GfsBox {} GfsBox {} GfsBox {} GfsBox {} 1 2 right 2 3 top 3 4 right 4 5 top 5 6 right 6 1 top 1 3 top left 3 5 top left 5 1 top left 2 6 bottom right 4 2 bottom right 6 4 bottom right gerris-snapshot-131206/test/rossby/ocean/href.gfv0000644000175100017510000000070512250371172016702 00000000000000# GfsView 2D View { tx = -1.42722 ty = -1.00301 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.0257 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } p0(x*DTR,y*DTR,0)/G { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } gerris-snapshot-131206/test/rossby/ocean/h.gfv0000644000175100017510000000067012250371172016206 00000000000000# GfsView 2D View { tx = -1.42722 ty = -1.00301 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.0257 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 1 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } H0+P/G { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } gerris-snapshot-131206/test/rossby/h.gfv0000644000175100017510000000067012250371171015120 00000000000000# GfsView 2D View { tx = -1.42722 ty = -1.00301 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.0257 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 1 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } H0+P/G { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } gerris-snapshot-131206/test/rossby/river/0000755000175100017510000000000012250371674015401 500000000000000gerris-snapshot-131206/test/rossby/river/eh-5.ref0000644000175100017510000033013112250371172016547 00000000000000P time: 0 first: 1.358e-13 second: 1.218e-13 infty: 8.687e-14 bias: 5.310e-11 P time: 1723.03 first: 3.367e-03 second: 3.715e-03 infty: 1.030e-02 bias: 6.184e-11 P time: 3444.82 first: 6.255e-03 second: 6.893e-03 infty: 1.380e-02 bias: 2.570e-11 P time: 5165.37 first: 8.367e-03 second: 9.225e-03 infty: 1.779e-02 bias: 5.126e-11 P time: 6884.64 first: 9.480e-03 second: 1.054e-02 infty: 2.136e-02 bias: 3.938e-11 P time: 8602.74 first: 9.621e-03 second: 1.089e-02 infty: 2.372e-02 bias: 3.254e-11 P time: 10319.9 first: 9.117e-03 second: 1.055e-02 infty: 2.459e-02 bias: 4.778e-11 P time: 12036.3 first: 8.495e-03 second: 9.864e-03 infty: 2.422e-02 bias: 3.992e-11 P time: 13752.5 first: 7.924e-03 second: 9.174e-03 infty: 2.308e-02 bias: 7.502e-11 P time: 15468.5 first: 7.663e-03 second: 8.708e-03 infty: 2.169e-02 bias: 4.123e-11 P time: 17184.8 first: 7.860e-03 second: 8.612e-03 infty: 2.039e-02 bias: 3.980e-11 P time: 18901.3 first: 8.117e-03 second: 8.966e-03 infty: 1.942e-02 bias: 6.180e-11 P time: 20617.9 first: 8.564e-03 second: 9.660e-03 infty: 1.899e-02 bias: 5.296e-11 P time: 22334.4 first: 8.855e-03 second: 1.035e-02 infty: 2.104e-02 bias: 2.928e-11 P time: 24050.7 first: 9.083e-03 second: 1.064e-02 infty: 2.238e-02 bias: 4.456e-11 P time: 25766.6 first: 8.947e-03 second: 1.024e-02 infty: 2.134e-02 bias: -2.087e-12 P time: 27482 first: 8.349e-03 second: 9.218e-03 infty: 2.032e-02 bias: 4.009e-11 P time: 29197 first: 7.641e-03 second: 8.118e-03 infty: 2.131e-02 bias: 3.798e-11 P time: 30910.9 first: 7.173e-03 second: 7.852e-03 infty: 2.180e-02 bias: 1.171e-11 P time: 32623.5 first: 7.891e-03 second: 8.824e-03 infty: 2.143e-02 bias: 3.582e-11 P time: 34335.1 first: 8.789e-03 second: 1.036e-02 infty: 2.025e-02 bias: 6.743e-12 P time: 36045.7 first: 9.700e-03 second: 1.162e-02 infty: 2.197e-02 bias: 3.040e-11 P time: 37755.2 first: 1.040e-02 second: 1.221e-02 infty: 2.254e-02 bias: 6.977e-11 P time: 39463.5 first: 1.071e-02 second: 1.211e-02 infty: 2.056e-02 bias: 4.860e-11 P time: 41170.4 first: 1.059e-02 second: 1.157e-02 infty: 1.778e-02 bias: 3.294e-11 P time: 42875.9 first: 1.005e-02 second: 1.094e-02 infty: 1.956e-02 bias: 4.895e-11 P time: 44579.7 first: 9.396e-03 second: 1.042e-02 infty: 2.201e-02 bias: 5.437e-11 P time: 46282 first: 8.868e-03 second: 9.986e-03 infty: 2.442e-02 bias: 4.515e-11 P time: 47982.6 first: 8.399e-03 second: 9.485e-03 infty: 2.612e-02 bias: 6.095e-11 P time: 49681.8 first: 7.786e-03 second: 8.849e-03 infty: 2.674e-02 bias: 3.987e-11 P time: 51379.8 first: 7.038e-03 second: 8.168e-03 infty: 2.624e-02 bias: 3.380e-11 P time: 53076.8 first: 6.589e-03 second: 7.619e-03 infty: 2.485e-02 bias: 3.454e-11 P time: 54773 first: 6.922e-03 second: 7.377e-03 infty: 2.295e-02 bias: 4.373e-11 P time: 56468.5 first: 7.707e-03 second: 7.635e-03 infty: 2.092e-02 bias: 2.619e-11 P time: 58163.2 first: 8.709e-03 second: 8.633e-03 infty: 1.909e-02 bias: 3.975e-11 P time: 59857.1 first: 1.024e-02 second: 1.047e-02 infty: 1.862e-02 bias: 2.053e-11 P time: 61550 first: 1.226e-02 second: 1.290e-02 infty: 2.002e-02 bias: 3.334e-11 P time: 63241.8 first: 1.432e-02 second: 1.547e-02 infty: 2.158e-02 bias: 5.474e-11 P time: 64932.2 first: 1.604e-02 second: 1.765e-02 infty: 2.410e-02 bias: 5.705e-11 P time: 66621.1 first: 1.707e-02 second: 1.900e-02 infty: 2.660e-02 bias: 2.501e-11 P time: 68308.7 first: 1.722e-02 second: 1.929e-02 infty: 2.702e-02 bias: 2.555e-11 P time: 69995 first: 1.652e-02 second: 1.851e-02 infty: 2.582e-02 bias: 4.576e-11 P time: 71680.1 first: 1.519e-02 second: 1.687e-02 infty: 2.726e-02 bias: 4.141e-11 P time: 73364.1 first: 1.352e-02 second: 1.478e-02 infty: 2.713e-02 bias: 7.786e-12 P time: 75047.2 first: 1.177e-02 second: 1.270e-02 infty: 2.560e-02 bias: 3.899e-11 P time: 76729.5 first: 1.032e-02 second: 1.107e-02 infty: 2.334e-02 bias: 3.256e-11 P time: 78411 first: 9.509e-03 second: 1.019e-02 infty: 2.115e-02 bias: 6.060e-11 P time: 80091.7 first: 9.189e-03 second: 1.008e-02 infty: 2.304e-02 bias: 4.613e-11 P time: 81771.4 first: 9.423e-03 second: 1.051e-02 infty: 2.418e-02 bias: 4.985e-11 P time: 83449.9 first: 9.941e-03 second: 1.120e-02 infty: 2.453e-02 bias: 4.062e-11 P time: 85127.3 first: 1.050e-02 second: 1.189e-02 infty: 2.438e-02 bias: 4.211e-11 P time: 86803.3 first: 1.096e-02 second: 1.246e-02 infty: 2.412e-02 bias: 2.501e-11 P time: 88478 first: 1.127e-02 second: 1.297e-02 infty: 2.411e-02 bias: 3.316e-11 P time: 90151.3 first: 1.179e-02 second: 1.367e-02 infty: 2.450e-02 bias: 5.652e-11 P time: 91823.6 first: 1.298e-02 second: 1.481e-02 infty: 2.588e-02 bias: 4.371e-11 P time: 93494.8 first: 1.460e-02 second: 1.641e-02 infty: 2.737e-02 bias: 2.050e-11 P time: 95165.3 first: 1.631e-02 second: 1.819e-02 infty: 2.880e-02 bias: 4.115e-11 P time: 96835 first: 1.776e-02 second: 1.974e-02 infty: 3.004e-02 bias: 2.853e-11 P time: 98504 first: 1.875e-02 second: 2.075e-02 infty: 3.087e-02 bias: 3.552e-11 P time: 100172 first: 1.914e-02 second: 2.110e-02 infty: 3.145e-02 bias: 5.477e-11 P time: 101840 first: 1.900e-02 second: 2.088e-02 infty: 3.170e-02 bias: 5.076e-11 P time: 103507 first: 1.881e-02 second: 2.033e-02 infty: 3.139e-02 bias: 3.757e-11 P time: 105172 first: 1.865e-02 second: 1.966e-02 infty: 3.055e-02 bias: 1.234e-11 P time: 106837 first: 1.822e-02 second: 1.899e-02 infty: 2.915e-02 bias: 3.236e-11 P time: 108501 first: 1.759e-02 second: 1.832e-02 infty: 2.732e-02 bias: 3.440e-12 P time: 110163 first: 1.687e-02 second: 1.764e-02 infty: 2.628e-02 bias: 3.860e-11 P time: 111825 first: 1.631e-02 second: 1.705e-02 infty: 2.722e-02 bias: 1.538e-11 P time: 113487 first: 1.604e-02 second: 1.674e-02 infty: 2.689e-02 bias: 3.957e-11 P time: 115148 first: 1.615e-02 second: 1.688e-02 infty: 2.571e-02 bias: 1.735e-11 P time: 116808 first: 1.661e-02 second: 1.753e-02 infty: 2.830e-02 bias: 4.384e-11 P time: 118468 first: 1.729e-02 second: 1.857e-02 infty: 3.129e-02 bias: 4.527e-11 P time: 120128 first: 1.819e-02 second: 1.983e-02 infty: 3.409e-02 bias: 4.519e-11 P time: 121787 first: 1.926e-02 second: 2.116e-02 infty: 3.625e-02 bias: 6.917e-11 P time: 123446 first: 2.033e-02 second: 2.240e-02 infty: 3.783e-02 bias: 8.838e-11 P time: 125104 first: 2.114e-02 second: 2.337e-02 infty: 3.882e-02 bias: 2.537e-11 P time: 126761 first: 2.154e-02 second: 2.387e-02 infty: 3.966e-02 bias: 5.309e-11 P time: 128417 first: 2.143e-02 second: 2.376e-02 infty: 4.000e-02 bias: 7.532e-11 P time: 130073 first: 2.076e-02 second: 2.299e-02 infty: 3.923e-02 bias: 3.943e-11 P time: 131728 first: 1.965e-02 second: 2.172e-02 infty: 3.738e-02 bias: 3.473e-11 P time: 133382 first: 1.831e-02 second: 2.032e-02 infty: 3.479e-02 bias: 2.963e-12 P time: 135036 first: 1.718e-02 second: 1.926e-02 infty: 3.286e-02 bias: 5.539e-11 P time: 136690 first: 1.700e-02 second: 1.891e-02 infty: 3.185e-02 bias: 3.187e-11 P time: 138343 first: 1.766e-02 second: 1.931e-02 infty: 3.308e-02 bias: 1.070e-11 P time: 139996 first: 1.864e-02 second: 2.020e-02 infty: 3.517e-02 bias: 3.042e-11 P time: 141648 first: 1.964e-02 second: 2.124e-02 infty: 3.620e-02 bias: -3.183e-13 P time: 143300 first: 2.054e-02 second: 2.217e-02 infty: 3.642e-02 bias: 5.493e-11 P time: 144952 first: 2.130e-02 second: 2.293e-02 infty: 3.588e-02 bias: 2.674e-11 P time: 146604 first: 2.191e-02 second: 2.354e-02 infty: 3.499e-02 bias: 3.143e-11 P time: 148254 first: 2.241e-02 second: 2.411e-02 infty: 3.435e-02 bias: 3.273e-11 P time: 149905 first: 2.285e-02 second: 2.473e-02 infty: 3.448e-02 bias: 6.122e-11 P time: 151555 first: 2.330e-02 second: 2.551e-02 infty: 3.566e-02 bias: 1.780e-11 P time: 153205 first: 2.391e-02 second: 2.648e-02 infty: 3.782e-02 bias: 3.371e-11 P time: 154854 first: 2.480e-02 second: 2.756e-02 infty: 4.058e-02 bias: 5.839e-11 P time: 156503 first: 2.574e-02 second: 2.857e-02 infty: 4.336e-02 bias: 4.276e-11 P time: 158152 first: 2.643e-02 second: 2.926e-02 infty: 4.558e-02 bias: 4.225e-11 P time: 159802 first: 2.661e-02 second: 2.941e-02 infty: 4.681e-02 bias: 1.433e-11 P time: 161451 first: 2.615e-02 second: 2.893e-02 infty: 4.691e-02 bias: 2.130e-11 P time: 163101 first: 2.522e-02 second: 2.787e-02 infty: 4.599e-02 bias: 8.511e-11 P time: 164750 first: 2.407e-02 second: 2.645e-02 infty: 4.441e-02 bias: 6.817e-11 P time: 166400 first: 2.269e-02 second: 2.494e-02 infty: 4.268e-02 bias: 3.313e-11 P time: 168048 first: 2.126e-02 second: 2.362e-02 infty: 4.132e-02 bias: 3.277e-11 P time: 169697 first: 2.006e-02 second: 2.268e-02 infty: 4.080e-02 bias: 4.344e-11 P time: 171344 first: 1.947e-02 second: 2.223e-02 infty: 4.139e-02 bias: 3.263e-11 P time: 172992 first: 1.955e-02 second: 2.234e-02 infty: 4.315e-02 bias: 5.711e-11 P time: 174639 first: 2.010e-02 second: 2.305e-02 infty: 4.595e-02 bias: 5.049e-11 P time: 176286 first: 2.112e-02 second: 2.433e-02 infty: 4.939e-02 bias: 1.402e-11 P time: 177933 first: 2.264e-02 second: 2.603e-02 infty: 5.282e-02 bias: 5.729e-11 P time: 179580 first: 2.431e-02 second: 2.791e-02 infty: 5.599e-02 bias: 3.661e-11 P time: 181227 first: 2.590e-02 second: 2.969e-02 infty: 5.848e-02 bias: 4.990e-11 P time: 182875 first: 2.732e-02 second: 3.114e-02 infty: 5.971e-02 bias: 9.190e-11 P time: 184523 first: 2.840e-02 second: 3.211e-02 infty: 5.960e-02 bias: 4.167e-11 P time: 186172 first: 2.903e-02 second: 3.252e-02 infty: 5.837e-02 bias: 3.850e-11 P time: 187820 first: 2.906e-02 second: 3.234e-02 infty: 5.652e-02 bias: 5.389e-11 P time: 189468 first: 2.852e-02 second: 3.165e-02 infty: 5.472e-02 bias: 2.067e-11 P time: 191117 first: 2.748e-02 second: 3.059e-02 infty: 5.366e-02 bias: 4.587e-11 P time: 192765 first: 2.620e-02 second: 2.943e-02 infty: 5.380e-02 bias: 4.135e-11 P time: 194413 first: 2.511e-02 second: 2.853e-02 infty: 5.528e-02 bias: 6.929e-11 P time: 196062 first: 2.473e-02 second: 2.819e-02 infty: 5.784e-02 bias: 3.005e-11 P time: 197711 first: 2.497e-02 second: 2.853e-02 infty: 6.093e-02 bias: 3.818e-11 P time: 199360 first: 2.556e-02 second: 2.936e-02 infty: 6.385e-02 bias: 5.204e-11 P time: 201010 first: 2.622e-02 second: 3.033e-02 infty: 6.600e-02 bias: 3.469e-11 P time: 202660 first: 2.668e-02 second: 3.107e-02 infty: 6.706e-02 bias: 5.880e-11 P time: 204310 first: 2.684e-02 second: 3.140e-02 infty: 6.700e-02 bias: 3.770e-11 P time: 205961 first: 2.673e-02 second: 3.131e-02 infty: 6.607e-02 bias: 3.784e-11 P time: 207612 first: 2.656e-02 second: 3.098e-02 infty: 6.472e-02 bias: 7.434e-11 P time: 209264 first: 2.651e-02 second: 3.065e-02 infty: 6.342e-02 bias: 4.490e-11 P time: 210916 first: 2.674e-02 second: 3.056e-02 infty: 6.262e-02 bias: 5.622e-11 P time: 212568 first: 2.732e-02 second: 3.085e-02 infty: 6.260e-02 bias: 6.173e-11 P time: 214220 first: 2.816e-02 second: 3.152e-02 infty: 6.348e-02 bias: 5.575e-11 P time: 215873 first: 2.906e-02 second: 3.245e-02 infty: 6.519e-02 bias: 5.856e-11 P time: 217527 first: 2.980e-02 second: 3.343e-02 infty: 6.745e-02 bias: 4.972e-11 P time: 219181 first: 3.016e-02 second: 3.422e-02 infty: 6.981e-02 bias: 2.210e-11 P time: 220836 first: 2.998e-02 second: 3.461e-02 infty: 7.175e-02 bias: 5.716e-11 P time: 222492 first: 2.928e-02 second: 3.449e-02 infty: 7.286e-02 bias: 3.696e-11 P time: 224148 first: 2.844e-02 second: 3.385e-02 infty: 7.290e-02 bias: 1.182e-11 P time: 225805 first: 2.758e-02 second: 3.283e-02 infty: 7.190e-02 bias: 5.261e-11 P time: 227463 first: 2.659e-02 second: 3.169e-02 infty: 7.019e-02 bias: 4.887e-11 P time: 229120 first: 2.565e-02 second: 3.069e-02 infty: 6.829e-02 bias: 5.657e-11 P time: 230779 first: 2.507e-02 second: 3.005e-02 infty: 6.677e-02 bias: 5.249e-11 P time: 232437 first: 2.503e-02 second: 2.989e-02 infty: 6.617e-02 bias: 4.628e-11 P time: 234096 first: 2.550e-02 second: 3.025e-02 infty: 6.678e-02 bias: 4.814e-11 P time: 235755 first: 2.634e-02 second: 3.111e-02 infty: 6.860e-02 bias: 4.997e-11 P time: 237413 first: 2.745e-02 second: 3.237e-02 infty: 7.129e-02 bias: 4.484e-11 P time: 239072 first: 2.876e-02 second: 3.387e-02 infty: 7.430e-02 bias: 8.163e-12 P time: 240731 first: 3.004e-02 second: 3.538e-02 infty: 7.696e-02 bias: 6.209e-11 P time: 242390 first: 3.114e-02 second: 3.662e-02 infty: 7.894e-02 bias: 3.918e-11 P time: 244050 first: 3.190e-02 second: 3.737e-02 infty: 7.988e-02 bias: 2.363e-11 P time: 245711 first: 3.219e-02 second: 3.749e-02 infty: 7.941e-02 bias: 4.154e-11 P time: 247372 first: 3.191e-02 second: 3.695e-02 infty: 7.777e-02 bias: 5.387e-11 P time: 249033 first: 3.112e-02 second: 3.585e-02 infty: 7.538e-02 bias: 4.727e-11 P time: 250694 first: 3.000e-02 second: 3.438e-02 infty: 7.279e-02 bias: 5.771e-11 P time: 252356 first: 2.868e-02 second: 3.281e-02 infty: 7.050e-02 bias: 5.284e-11 P time: 254017 first: 2.745e-02 second: 3.147e-02 infty: 6.896e-02 bias: 4.054e-11 P time: 255679 first: 2.653e-02 second: 3.070e-02 infty: 6.843e-02 bias: 1.409e-11 P time: 257340 first: 2.615e-02 second: 3.073e-02 infty: 6.898e-02 bias: 3.441e-11 P time: 259001 first: 2.651e-02 second: 3.152e-02 infty: 7.040e-02 bias: 6.184e-11 P time: 260662 first: 2.744e-02 second: 3.275e-02 infty: 7.225e-02 bias: 1.386e-11 P time: 262322 first: 2.868e-02 second: 3.400e-02 infty: 7.399e-02 bias: 4.758e-11 P time: 263983 first: 2.962e-02 second: 3.486e-02 infty: 7.509e-02 bias: 7.275e-11 P time: 265643 first: 3.002e-02 second: 3.515e-02 infty: 7.522e-02 bias: 4.904e-11 P time: 267304 first: 2.998e-02 second: 3.491e-02 infty: 7.436e-02 bias: 4.822e-11 P time: 268964 first: 2.978e-02 second: 3.437e-02 infty: 7.281e-02 bias: 3.061e-11 P time: 270625 first: 2.969e-02 second: 3.384e-02 infty: 7.110e-02 bias: 5.426e-11 P time: 272285 first: 2.984e-02 second: 3.362e-02 infty: 6.982e-02 bias: 2.734e-11 P time: 273945 first: 3.025e-02 second: 3.382e-02 infty: 6.942e-02 bias: 3.075e-11 P time: 275604 first: 3.081e-02 second: 3.441e-02 infty: 7.003e-02 bias: 3.936e-11 P time: 277264 first: 3.140e-02 second: 3.520e-02 infty: 7.153e-02 bias: 2.618e-11 P time: 278923 first: 3.185e-02 second: 3.597e-02 infty: 7.349e-02 bias: 2.168e-11 P time: 280582 first: 3.203e-02 second: 3.651e-02 infty: 7.536e-02 bias: 4.693e-12 P time: 282241 first: 3.189e-02 second: 3.663e-02 infty: 7.658e-02 bias: 3.833e-11 P time: 283901 first: 3.147e-02 second: 3.625e-02 infty: 7.673e-02 bias: 1.113e-11 P time: 285561 first: 3.069e-02 second: 3.539e-02 infty: 7.561e-02 bias: 4.183e-11 P time: 287221 first: 2.959e-02 second: 3.422e-02 infty: 7.331e-02 bias: 2.751e-11 P time: 288881 first: 2.842e-02 second: 3.299e-02 infty: 7.016e-02 bias: 1.921e-11 P time: 290541 first: 2.759e-02 second: 3.198e-02 infty: 6.663e-02 bias: 4.906e-11 P time: 292202 first: 2.749e-02 second: 3.141e-02 infty: 6.331e-02 bias: 2.401e-11 P time: 293862 first: 2.789e-02 second: 3.137e-02 infty: 6.100e-02 bias: 3.321e-11 P time: 295522 first: 2.858e-02 second: 3.185e-02 infty: 6.018e-02 bias: 3.850e-11 P time: 297181 first: 2.949e-02 second: 3.277e-02 infty: 6.073e-02 bias: 4.416e-11 P time: 298841 first: 3.056e-02 second: 3.400e-02 infty: 6.251e-02 bias: 3.520e-11 P time: 300501 first: 3.171e-02 second: 3.536e-02 infty: 6.507e-02 bias: 5.556e-11 P time: 302162 first: 3.275e-02 second: 3.660e-02 infty: 6.775e-02 bias: 1.084e-11 P time: 303823 first: 3.353e-02 second: 3.749e-02 infty: 6.990e-02 bias: 1.626e-11 P time: 305485 first: 3.388e-02 second: 3.781e-02 infty: 7.100e-02 bias: 2.496e-11 P time: 307147 first: 3.376e-02 second: 3.749e-02 infty: 7.046e-02 bias: 2.233e-11 P time: 308810 first: 3.317e-02 second: 3.660e-02 infty: 6.840e-02 bias: 5.244e-11 P time: 310472 first: 3.226e-02 second: 3.534e-02 infty: 6.529e-02 bias: 4.619e-11 P time: 312133 first: 3.121e-02 second: 3.401e-02 infty: 6.206e-02 bias: 3.557e-11 P time: 313794 first: 3.026e-02 second: 3.295e-02 infty: 5.936e-02 bias: 5.734e-11 P time: 315455 first: 2.958e-02 second: 3.241e-02 infty: 5.799e-02 bias: 6.213e-11 P time: 317114 first: 2.934e-02 second: 3.255e-02 infty: 6.180e-02 bias: 6.687e-11 P time: 318773 first: 2.969e-02 second: 3.332e-02 infty: 6.543e-02 bias: 4.789e-11 P time: 320430 first: 3.047e-02 second: 3.450e-02 infty: 6.854e-02 bias: 4.104e-11 P time: 322088 first: 3.140e-02 second: 3.578e-02 infty: 7.088e-02 bias: 3.507e-11 P time: 323744 first: 3.238e-02 second: 3.684e-02 infty: 7.240e-02 bias: 5.065e-11 P time: 325401 first: 3.305e-02 second: 3.746e-02 infty: 7.317e-02 bias: 4.509e-11 P time: 327057 first: 3.326e-02 second: 3.759e-02 infty: 7.341e-02 bias: 5.160e-11 P time: 328713 first: 3.314e-02 second: 3.734e-02 infty: 7.341e-02 bias: 5.513e-11 P time: 330369 first: 3.297e-02 second: 3.697e-02 infty: 7.351e-02 bias: 4.461e-11 P time: 332025 first: 3.298e-02 second: 3.672e-02 infty: 7.399e-02 bias: 2.106e-11 P time: 333681 first: 3.337e-02 second: 3.674e-02 infty: 7.502e-02 bias: 1.883e-11 P time: 335336 first: 3.393e-02 second: 3.703e-02 infty: 7.661e-02 bias: 2.968e-11 P time: 336990 first: 3.447e-02 second: 3.747e-02 infty: 7.856e-02 bias: 3.851e-11 P time: 338645 first: 3.483e-02 second: 3.790e-02 infty: 8.061e-02 bias: 2.844e-11 P time: 340299 first: 3.489e-02 second: 3.819e-02 infty: 8.249e-02 bias: 2.473e-11 P time: 341953 first: 3.461e-02 second: 3.825e-02 infty: 8.398e-02 bias: 1.260e-11 P time: 343607 first: 3.405e-02 second: 3.804e-02 infty: 8.506e-02 bias: 5.227e-11 P time: 345261 first: 3.338e-02 second: 3.757e-02 infty: 8.585e-02 bias: 5.449e-11 P time: 346915 first: 3.258e-02 second: 3.695e-02 infty: 8.660e-02 bias: 3.069e-11 P time: 348569 first: 3.179e-02 second: 3.637e-02 infty: 8.760e-02 bias: 3.400e-11 P time: 350224 first: 3.131e-02 second: 3.603e-02 infty: 8.906e-02 bias: 3.039e-11 P time: 351878 first: 3.142e-02 second: 3.610e-02 infty: 9.106e-02 bias: 3.481e-11 P time: 353532 first: 3.189e-02 second: 3.662e-02 infty: 9.349e-02 bias: 4.002e-11 P time: 355186 first: 3.257e-02 second: 3.752e-02 infty: 9.619e-02 bias: 6.317e-11 P time: 356840 first: 3.342e-02 second: 3.864e-02 infty: 9.891e-02 bias: 9.054e-11 P time: 358493 first: 3.438e-02 second: 3.986e-02 infty: 1.014e-01 bias: 4.106e-11 P time: 360146 first: 3.553e-02 second: 4.105e-02 infty: 1.034e-01 bias: 2.390e-11 P time: 361798 first: 3.678e-02 second: 4.212e-02 infty: 1.048e-01 bias: 8.098e-11 P time: 363451 first: 3.786e-02 second: 4.296e-02 infty: 1.056e-01 bias: 4.397e-11 P time: 365104 first: 3.854e-02 second: 4.344e-02 infty: 1.058e-01 bias: 3.471e-11 P time: 366757 first: 3.868e-02 second: 4.347e-02 infty: 1.057e-01 bias: 7.006e-11 P time: 368411 first: 3.829e-02 second: 4.306e-02 infty: 1.054e-01 bias: 2.254e-11 P time: 370065 first: 3.748e-02 second: 4.232e-02 infty: 1.054e-01 bias: 5.069e-11 P time: 371719 first: 3.645e-02 second: 4.144e-02 infty: 1.058e-01 bias: 6.165e-12 P time: 373373 first: 3.545e-02 second: 4.067e-02 infty: 1.069e-01 bias: 3.002e-11 P time: 375027 first: 3.474e-02 second: 4.023e-02 infty: 1.087e-01 bias: 3.840e-11 P time: 376682 first: 3.440e-02 second: 4.024e-02 infty: 1.110e-01 bias: 5.431e-11 P time: 378336 first: 3.449e-02 second: 4.070e-02 infty: 1.136e-01 bias: 3.363e-11 P time: 379990 first: 3.496e-02 second: 4.149e-02 infty: 1.161e-01 bias: -8.140e-12 P time: 381645 first: 3.578e-02 second: 4.244e-02 infty: 1.181e-01 bias: 5.147e-11 P time: 383299 first: 3.669e-02 second: 4.332e-02 infty: 1.195e-01 bias: 7.379e-11 P time: 384954 first: 3.755e-02 second: 4.396e-02 infty: 1.201e-01 bias: 2.006e-11 P time: 386609 first: 3.804e-02 second: 4.428e-02 infty: 1.202e-01 bias: 5.862e-11 P time: 388265 first: 3.812e-02 second: 4.431e-02 infty: 1.200e-01 bias: 3.632e-11 P time: 389921 first: 3.795e-02 second: 4.421e-02 infty: 1.199e-01 bias: 4.051e-11 P time: 391577 first: 3.780e-02 second: 4.417e-02 infty: 1.201e-01 bias: 3.656e-11 P time: 393234 first: 3.800e-02 second: 4.434e-02 infty: 1.209e-01 bias: 5.267e-11 P time: 394891 first: 3.846e-02 second: 4.476e-02 infty: 1.221e-01 bias: 5.546e-11 P time: 396549 first: 3.896e-02 second: 4.532e-02 infty: 1.237e-01 bias: 4.412e-11 P time: 398207 first: 3.931e-02 second: 4.584e-02 infty: 1.253e-01 bias: 4.309e-11 P time: 399865 first: 3.939e-02 second: 4.618e-02 infty: 1.269e-01 bias: 6.012e-11 P time: 401524 first: 3.935e-02 second: 4.626e-02 infty: 1.281e-01 bias: 4.434e-11 P time: 403183 first: 3.939e-02 second: 4.612e-02 infty: 1.287e-01 bias: 6.047e-11 P time: 404842 first: 3.934e-02 second: 4.583e-02 infty: 1.287e-01 bias: 1.294e-11 P time: 406502 first: 3.917e-02 second: 4.552e-02 infty: 1.283e-01 bias: 2.726e-11 P time: 408163 first: 3.901e-02 second: 4.534e-02 infty: 1.277e-01 bias: 3.421e-11 P time: 409825 first: 3.901e-02 second: 4.542e-02 infty: 1.271e-01 bias: -2.118e-12 P time: 411487 first: 3.930e-02 second: 4.584e-02 infty: 1.270e-01 bias: 6.487e-11 P time: 413149 first: 3.996e-02 second: 4.657e-02 infty: 1.274e-01 bias: 1.171e-11 P time: 414812 first: 4.082e-02 second: 4.751e-02 infty: 1.286e-01 bias: 6.074e-11 P time: 416476 first: 4.165e-02 second: 4.850e-02 infty: 1.305e-01 bias: 7.381e-11 P time: 418139 first: 4.234e-02 second: 4.935e-02 infty: 1.326e-01 bias: 3.366e-11 P time: 419803 first: 4.282e-02 second: 4.997e-02 infty: 1.346e-01 bias: 3.599e-11 P time: 421467 first: 4.309e-02 second: 5.028e-02 infty: 1.360e-01 bias: 1.382e-11 P time: 423132 first: 4.311e-02 second: 5.028e-02 infty: 1.367e-01 bias: 1.922e-11 P time: 424797 first: 4.284e-02 second: 4.996e-02 infty: 1.364e-01 bias: 6.031e-11 P time: 426463 first: 4.232e-02 second: 4.937e-02 infty: 1.353e-01 bias: 4.401e-11 P time: 428131 first: 4.158e-02 second: 4.856e-02 infty: 1.337e-01 bias: 5.780e-11 P time: 429799 first: 4.071e-02 second: 4.765e-02 infty: 1.319e-01 bias: 1.001e-11 P time: 431469 first: 3.990e-02 second: 4.682e-02 infty: 1.303e-01 bias: 2.905e-11 P time: 433140 first: 3.937e-02 second: 4.626e-02 infty: 1.291e-01 bias: 3.005e-11 P time: 434812 first: 3.918e-02 second: 4.613e-02 infty: 1.284e-01 bias: 6.309e-11 P time: 436484 first: 3.937e-02 second: 4.648e-02 infty: 1.283e-01 bias: 2.894e-11 P time: 438158 first: 4.002e-02 second: 4.725e-02 infty: 1.287e-01 bias: 3.791e-11 P time: 439832 first: 4.097e-02 second: 4.827e-02 infty: 1.294e-01 bias: 5.859e-11 P time: 441507 first: 4.220e-02 second: 4.935e-02 infty: 1.303e-01 bias: 4.091e-11 P time: 443183 first: 4.341e-02 second: 5.030e-02 infty: 1.309e-01 bias: 2.328e-11 P time: 444859 first: 4.442e-02 second: 5.100e-02 infty: 1.312e-01 bias: 5.410e-11 P time: 446536 first: 4.502e-02 second: 5.139e-02 infty: 1.311e-01 bias: 5.369e-11 P time: 448214 first: 4.519e-02 second: 5.149e-02 infty: 1.305e-01 bias: 6.561e-11 P time: 449893 first: 4.506e-02 second: 5.142e-02 infty: 1.297e-01 bias: 4.814e-11 P time: 451573 first: 4.481e-02 second: 5.131e-02 infty: 1.288e-01 bias: 5.349e-11 P time: 453254 first: 4.459e-02 second: 5.129e-02 infty: 1.281e-01 bias: 2.940e-11 P time: 454936 first: 4.450e-02 second: 5.140e-02 infty: 1.278e-01 bias: 4.667e-11 P time: 456619 first: 4.451e-02 second: 5.156e-02 infty: 1.278e-01 bias: 5.898e-11 P time: 458303 first: 4.446e-02 second: 5.163e-02 infty: 1.279e-01 bias: 4.476e-11 P time: 459987 first: 4.428e-02 second: 5.148e-02 infty: 1.279e-01 bias: 4.382e-11 P time: 461673 first: 4.396e-02 second: 5.102e-02 infty: 1.274e-01 bias: 4.463e-11 P time: 463360 first: 4.347e-02 second: 5.030e-02 infty: 1.262e-01 bias: 5.383e-11 P time: 465048 first: 4.285e-02 second: 4.947e-02 infty: 1.242e-01 bias: 4.072e-11 P time: 466738 first: 4.223e-02 second: 4.874e-02 infty: 1.217e-01 bias: 3.475e-11 P time: 468429 first: 4.183e-02 second: 4.833e-02 infty: 1.187e-01 bias: 1.172e-11 P time: 470122 first: 4.197e-02 second: 4.839e-02 infty: 1.158e-01 bias: 1.718e-11 P time: 471816 first: 4.259e-02 second: 4.896e-02 infty: 1.134e-01 bias: 3.340e-11 P time: 473511 first: 4.352e-02 second: 4.994e-02 infty: 1.117e-01 bias: 5.945e-11 P time: 475207 first: 4.466e-02 second: 5.115e-02 infty: 1.109e-01 bias: 6.075e-11 P time: 476905 first: 4.567e-02 second: 5.235e-02 infty: 1.109e-01 bias: 4.132e-11 P time: 478604 first: 4.639e-02 second: 5.330e-02 infty: 1.116e-01 bias: 1.742e-11 P time: 480303 first: 4.673e-02 second: 5.385e-02 infty: 1.126e-01 bias: 2.673e-11 P time: 482004 first: 4.670e-02 second: 5.391e-02 infty: 1.134e-01 bias: 5.541e-11 P time: 483705 first: 4.641e-02 second: 5.349e-02 infty: 1.136e-01 bias: 2.969e-11 P time: 485408 first: 4.577e-02 second: 5.267e-02 infty: 1.128e-01 bias: 3.700e-11 P time: 487112 first: 4.490e-02 second: 5.159e-02 infty: 1.110e-01 bias: 8.010e-11 P time: 488817 first: 4.389e-02 second: 5.045e-02 infty: 1.083e-01 bias: 4.169e-11 P time: 490525 first: 4.294e-02 second: 4.945e-02 infty: 1.050e-01 bias: 4.530e-11 P time: 492234 first: 4.224e-02 second: 4.882e-02 infty: 1.016e-01 bias: 5.529e-11 P time: 493944 first: 4.196e-02 second: 4.873e-02 infty: 9.838e-02 bias: 2.415e-11 P time: 495656 first: 4.222e-02 second: 4.925e-02 infty: 9.576e-02 bias: 5.148e-11 P time: 497370 first: 4.302e-02 second: 5.027e-02 infty: 9.507e-02 bias: 4.579e-11 P time: 499085 first: 4.417e-02 second: 5.159e-02 infty: 9.602e-02 bias: 2.057e-11 P time: 500801 first: 4.545e-02 second: 5.292e-02 infty: 9.687e-02 bias: 3.755e-11 P time: 502519 first: 4.664e-02 second: 5.402e-02 infty: 9.728e-02 bias: 5.725e-11 P time: 504237 first: 4.756e-02 second: 5.470e-02 infty: 9.706e-02 bias: 1.511e-11 P time: 505957 first: 4.798e-02 second: 5.489e-02 infty: 9.623e-02 bias: 2.540e-11 P time: 507677 first: 4.790e-02 second: 5.465e-02 infty: 9.496e-02 bias: 3.875e-11 P time: 509399 first: 4.745e-02 second: 5.410e-02 infty: 9.353e-02 bias: 5.299e-11 P time: 511122 first: 4.682e-02 second: 5.345e-02 infty: 9.225e-02 bias: 4.635e-11 P time: 512845 first: 4.624e-02 second: 5.288e-02 infty: 9.134e-02 bias: 5.926e-11 P time: 514569 first: 4.586e-02 second: 5.251e-02 infty: 9.090e-02 bias: 4.783e-11 P time: 516293 first: 4.558e-02 second: 5.235e-02 infty: 9.093e-02 bias: 4.459e-11 P time: 518018 first: 4.528e-02 second: 5.230e-02 infty: 9.136e-02 bias: 4.636e-11 P time: 519744 first: 4.490e-02 second: 5.222e-02 infty: 9.156e-02 bias: 5.575e-11 P time: 521469 first: 4.449e-02 second: 5.200e-02 infty: 9.131e-02 bias: 2.865e-11 P time: 523196 first: 4.415e-02 second: 5.160e-02 infty: 9.047e-02 bias: 4.438e-11 P time: 524922 first: 4.389e-02 second: 5.114e-02 infty: 8.908e-02 bias: 6.278e-11 P time: 526649 first: 4.382e-02 second: 5.082e-02 infty: 8.733e-02 bias: 5.175e-11 P time: 528377 first: 4.411e-02 second: 5.086e-02 infty: 8.552e-02 bias: 1.808e-11 P time: 530105 first: 4.492e-02 second: 5.141e-02 infty: 8.399e-02 bias: 3.475e-11 P time: 531834 first: 4.619e-02 second: 5.249e-02 infty: 8.300e-02 bias: 3.894e-11 P time: 533563 first: 4.772e-02 second: 5.395e-02 infty: 8.299e-02 bias: 5.020e-11 P time: 535291 first: 4.926e-02 second: 5.555e-02 infty: 8.438e-02 bias: 4.733e-11 P time: 537020 first: 5.058e-02 second: 5.701e-02 infty: 8.647e-02 bias: 6.431e-11 P time: 538748 first: 5.150e-02 second: 5.808e-02 infty: 8.801e-02 bias: 4.114e-11 P time: 540475 first: 5.193e-02 second: 5.859e-02 infty: 8.901e-02 bias: -6.204e-12 P time: 542202 first: 5.183e-02 second: 5.844e-02 infty: 8.976e-02 bias: 1.426e-11 P time: 543929 first: 5.123e-02 second: 5.765e-02 infty: 8.945e-02 bias: 6.090e-11 P time: 545654 first: 5.018e-02 second: 5.634e-02 infty: 8.803e-02 bias: 1.758e-11 P time: 547380 first: 4.886e-02 second: 5.474e-02 infty: 8.569e-02 bias: 5.300e-11 P time: 549105 first: 4.749e-02 second: 5.312e-02 infty: 8.286e-02 bias: 4.993e-11 P time: 550830 first: 4.631e-02 second: 5.181e-02 infty: 8.008e-02 bias: 3.931e-11 P time: 552556 first: 4.555e-02 second: 5.110e-02 infty: 7.877e-02 bias: 4.165e-11 P time: 554282 first: 4.537e-02 second: 5.114e-02 infty: 7.967e-02 bias: 5.913e-11 P time: 556008 first: 4.583e-02 second: 5.198e-02 infty: 8.133e-02 bias: 4.434e-11 P time: 557733 first: 4.691e-02 second: 5.343e-02 infty: 8.330e-02 bias: 7.825e-12 P time: 559458 first: 4.846e-02 second: 5.522e-02 infty: 8.510e-02 bias: 3.714e-11 P time: 561181 first: 5.028e-02 second: 5.702e-02 infty: 8.632e-02 bias: 5.785e-11 P time: 562903 first: 5.204e-02 second: 5.850e-02 infty: 8.668e-02 bias: 4.658e-11 P time: 564624 first: 5.334e-02 second: 5.946e-02 infty: 8.613e-02 bias: 3.426e-11 P time: 566343 first: 5.402e-02 second: 5.981e-02 infty: 8.483e-02 bias: 6.557e-11 P time: 568062 first: 5.407e-02 second: 5.961e-02 infty: 8.309e-02 bias: 4.490e-11 P time: 569779 first: 5.364e-02 second: 5.900e-02 infty: 8.128e-02 bias: 3.561e-11 P time: 571495 first: 5.295e-02 second: 5.822e-02 infty: 7.979e-02 bias: 4.364e-11 P time: 573211 first: 5.217e-02 second: 5.747e-02 infty: 7.904e-02 bias: 3.781e-11 P time: 574925 first: 5.149e-02 second: 5.690e-02 infty: 7.877e-02 bias: 4.277e-11 P time: 576638 first: 5.097e-02 second: 5.658e-02 infty: 7.881e-02 bias: 3.566e-11 P time: 578350 first: 5.067e-02 second: 5.646e-02 infty: 8.013e-02 bias: 2.963e-11 P time: 580062 first: 5.052e-02 second: 5.644e-02 infty: 8.143e-02 bias: 3.375e-11 P time: 581772 first: 5.052e-02 second: 5.642e-02 infty: 8.240e-02 bias: 3.156e-11 P time: 583480 first: 5.060e-02 second: 5.639e-02 infty: 8.290e-02 bias: 7.212e-12 P time: 585188 first: 5.072e-02 second: 5.637e-02 infty: 8.296e-02 bias: 4.400e-11 P time: 586895 first: 5.091e-02 second: 5.651e-02 infty: 8.316e-02 bias: 1.555e-11 P time: 588601 first: 5.134e-02 second: 5.694e-02 infty: 8.339e-02 bias: 5.378e-11 P time: 590306 first: 5.217e-02 second: 5.775e-02 infty: 8.392e-02 bias: 2.392e-11 P time: 592009 first: 5.333e-02 second: 5.891e-02 infty: 8.564e-02 bias: 4.831e-11 P time: 593713 first: 5.463e-02 second: 6.027e-02 infty: 8.775e-02 bias: 3.340e-11 P time: 595415 first: 5.584e-02 second: 6.159e-02 infty: 9.004e-02 bias: 4.837e-11 P time: 597116 first: 5.675e-02 second: 6.265e-02 infty: 9.223e-02 bias: 1.397e-11 P time: 598817 first: 5.719e-02 second: 6.325e-02 infty: 9.399e-02 bias: 5.685e-11 P time: 600516 first: 5.708e-02 second: 6.327e-02 infty: 9.504e-02 bias: 2.336e-11 P time: 602214 first: 5.642e-02 second: 6.269e-02 infty: 9.524e-02 bias: 2.051e-11 P time: 603911 first: 5.528e-02 second: 6.157e-02 infty: 9.462e-02 bias: 3.698e-11 P time: 605606 first: 5.382e-02 second: 6.005e-02 infty: 9.339e-02 bias: 1.172e-11 P time: 607301 first: 5.222e-02 second: 5.835e-02 infty: 9.197e-02 bias: 8.228e-11 P time: 608993 first: 5.069e-02 second: 5.677e-02 infty: 9.077e-02 bias: 4.268e-11 P time: 610685 first: 4.950e-02 second: 5.561e-02 infty: 9.018e-02 bias: 8.873e-11 P time: 612376 first: 4.885e-02 second: 5.511e-02 infty: 9.044e-02 bias: 2.512e-11 P time: 614066 first: 4.886e-02 second: 5.539e-02 infty: 9.183e-02 bias: 4.052e-11 P time: 615754 first: 4.956e-02 second: 5.643e-02 infty: 9.430e-02 bias: 6.210e-11 P time: 617442 first: 5.093e-02 second: 5.807e-02 infty: 9.712e-02 bias: 3.310e-11 P time: 619129 first: 5.273e-02 second: 6.004e-02 infty: 9.991e-02 bias: 2.222e-11 P time: 620815 first: 5.476e-02 second: 6.204e-02 infty: 1.023e-01 bias: 5.370e-11 P time: 622501 first: 5.667e-02 second: 6.380e-02 infty: 1.040e-01 bias: 4.904e-11 P time: 624185 first: 5.817e-02 second: 6.508e-02 infty: 1.053e-01 bias: 6.236e-11 P time: 625868 first: 5.903e-02 second: 6.576e-02 infty: 1.059e-01 bias: 3.022e-11 P time: 627550 first: 5.919e-02 second: 6.581e-02 infty: 1.058e-01 bias: 7.038e-11 P time: 629232 first: 5.871e-02 second: 6.531e-02 infty: 1.054e-01 bias: 6.321e-11 P time: 630913 first: 5.775e-02 second: 6.442e-02 infty: 1.048e-01 bias: 5.556e-11 P time: 632593 first: 5.650e-02 second: 6.333e-02 infty: 1.043e-01 bias: 3.894e-11 P time: 634272 first: 5.516e-02 second: 6.222e-02 infty: 1.041e-01 bias: 6.585e-11 P time: 635951 first: 5.385e-02 second: 6.120e-02 infty: 1.043e-01 bias: 2.585e-11 P time: 637628 first: 5.272e-02 second: 6.036e-02 infty: 1.045e-01 bias: 4.052e-11 P time: 639305 first: 5.187e-02 second: 5.969e-02 infty: 1.048e-01 bias: 3.666e-11 P time: 640981 first: 5.137e-02 second: 5.921e-02 infty: 1.049e-01 bias: 4.997e-11 P time: 642656 first: 5.113e-02 second: 5.893e-02 infty: 1.049e-01 bias: 6.867e-11 P time: 644330 first: 5.113e-02 second: 5.888e-02 infty: 1.048e-01 bias: 3.492e-11 P time: 646003 first: 5.139e-02 second: 5.914e-02 infty: 1.047e-01 bias: 7.087e-11 P time: 647675 first: 5.203e-02 second: 5.976e-02 infty: 1.044e-01 bias: 4.616e-11 P time: 649346 first: 5.314e-02 second: 6.078e-02 infty: 1.044e-01 bias: 6.596e-11 P time: 651016 first: 5.460e-02 second: 6.214e-02 infty: 1.049e-01 bias: 4.232e-11 P time: 652686 first: 5.616e-02 second: 6.371e-02 infty: 1.063e-01 bias: 5.421e-11 P time: 654356 first: 5.764e-02 second: 6.525e-02 infty: 1.079e-01 bias: 4.692e-11 P time: 656025 first: 5.880e-02 second: 6.653e-02 infty: 1.095e-01 bias: 3.986e-11 P time: 657693 first: 5.948e-02 second: 6.734e-02 infty: 1.109e-01 bias: 4.370e-11 P time: 659361 first: 5.959e-02 second: 6.755e-02 infty: 1.118e-01 bias: 7.303e-11 P time: 661028 first: 5.914e-02 second: 6.712e-02 infty: 1.121e-01 bias: 4.698e-11 P time: 662695 first: 5.818e-02 second: 6.614e-02 infty: 1.115e-01 bias: 3.866e-11 P time: 664360 first: 5.687e-02 second: 6.474e-02 infty: 1.104e-01 bias: 3.461e-11 P time: 666025 first: 5.540e-02 second: 6.313e-02 infty: 1.088e-01 bias: 5.454e-11 P time: 667689 first: 5.399e-02 second: 6.158e-02 infty: 1.071e-01 bias: 3.429e-11 P time: 669353 first: 5.290e-02 second: 6.034e-02 infty: 1.056e-01 bias: 1.892e-11 P time: 671015 first: 5.230e-02 second: 5.965e-02 infty: 1.046e-01 bias: 4.334e-11 P time: 672677 first: 5.226e-02 second: 5.963e-02 infty: 1.042e-01 bias: 8.116e-11 P time: 674339 first: 5.284e-02 second: 6.030e-02 infty: 1.045e-01 bias: -1.205e-12 P time: 676000 first: 5.392e-02 second: 6.154e-02 infty: 1.053e-01 bias: 2.660e-11 P time: 677661 first: 5.538e-02 second: 6.315e-02 infty: 1.065e-01 bias: 2.609e-11 P time: 679322 first: 5.707e-02 second: 6.488e-02 infty: 1.077e-01 bias: 4.443e-11 P time: 680983 first: 5.884e-02 second: 6.652e-02 infty: 1.088e-01 bias: 5.953e-11 P time: 682643 first: 6.046e-02 second: 6.786e-02 infty: 1.093e-01 bias: 1.342e-11 P time: 684303 first: 6.169e-02 second: 6.877e-02 infty: 1.093e-01 bias: 3.522e-11 P time: 685963 first: 6.239e-02 second: 6.916e-02 infty: 1.085e-01 bias: 6.326e-11 P time: 687623 first: 6.251e-02 second: 6.905e-02 infty: 1.072e-01 bias: 4.299e-11 P time: 689282 first: 6.209e-02 second: 6.848e-02 infty: 1.059e-01 bias: 6.969e-11 P time: 690941 first: 6.125e-02 second: 6.761e-02 infty: 1.047e-01 bias: 5.702e-11 P time: 692600 first: 6.014e-02 second: 6.659e-02 infty: 1.038e-01 bias: 3.488e-11 P time: 694258 first: 5.893e-02 second: 6.556e-02 infty: 1.032e-01 bias: 4.613e-11 P time: 695916 first: 5.776e-02 second: 6.462e-02 infty: 1.029e-01 bias: 3.363e-11 P time: 697573 first: 5.678e-02 second: 6.382e-02 infty: 1.027e-01 bias: 4.390e-11 P time: 699230 first: 5.606e-02 second: 6.319e-02 infty: 1.026e-01 bias: 4.700e-11 P time: 700887 first: 5.570e-02 second: 6.273e-02 infty: 1.024e-01 bias: 5.144e-11 P time: 702543 first: 5.566e-02 second: 6.252e-02 infty: 1.019e-01 bias: 2.181e-11 P time: 704199 first: 5.596e-02 second: 6.262e-02 infty: 1.011e-01 bias: 3.781e-11 P time: 705854 first: 5.663e-02 second: 6.311e-02 infty: 1.003e-01 bias: 4.639e-11 P time: 707509 first: 5.775e-02 second: 6.406e-02 infty: 9.948e-02 bias: 3.654e-11 P time: 709163 first: 5.931e-02 second: 6.545e-02 infty: 9.890e-02 bias: 5.108e-12 P time: 710817 first: 6.114e-02 second: 6.718e-02 infty: 9.881e-02 bias: 6.606e-11 P time: 712471 first: 6.302e-02 second: 6.906e-02 infty: 9.987e-02 bias: 4.605e-11 P time: 714126 first: 6.473e-02 second: 7.085e-02 infty: 1.012e-01 bias: 7.674e-12 P time: 715780 first: 6.606e-02 second: 7.228e-02 infty: 1.026e-01 bias: 6.668e-11 P time: 717435 first: 6.681e-02 second: 7.313e-02 infty: 1.037e-01 bias: 2.669e-11 P time: 719091 first: 6.686e-02 second: 7.324e-02 infty: 1.043e-01 bias: 2.326e-11 P time: 720746 first: 6.619e-02 second: 7.261e-02 infty: 1.041e-01 bias: 4.069e-11 P time: 722402 first: 6.491e-02 second: 7.130e-02 infty: 1.032e-01 bias: 5.389e-11 P time: 724057 first: 6.319e-02 second: 6.952e-02 infty: 1.015e-01 bias: 1.768e-11 P time: 725713 first: 6.128e-02 second: 6.753e-02 infty: 9.956e-02 bias: 1.393e-11 P time: 727368 first: 5.946e-02 second: 6.564e-02 infty: 9.759e-02 bias: 7.310e-11 P time: 729023 first: 5.800e-02 second: 6.416e-02 infty: 9.669e-02 bias: 1.790e-11 P time: 730678 first: 5.707e-02 second: 6.334e-02 infty: 9.712e-02 bias: -2.013e-12 P time: 732333 first: 5.682e-02 second: 6.330e-02 infty: 9.865e-02 bias: 7.757e-11 P time: 733988 first: 5.723e-02 second: 6.403e-02 infty: 1.008e-01 bias: 5.080e-11 P time: 735643 first: 5.828e-02 second: 6.538e-02 infty: 1.034e-01 bias: 1.271e-11 P time: 737298 first: 5.980e-02 second: 6.711e-02 infty: 1.061e-01 bias: 4.845e-11 P time: 738953 first: 6.157e-02 second: 6.896e-02 infty: 1.085e-01 bias: 7.549e-11 P time: 740609 first: 6.338e-02 second: 7.069e-02 infty: 1.104e-01 bias: 7.984e-11 P time: 742265 first: 6.501e-02 second: 7.210e-02 infty: 1.118e-01 bias: 4.205e-11 P time: 743922 first: 6.626e-02 second: 7.308e-02 infty: 1.126e-01 bias: 6.039e-11 P time: 745579 first: 6.699e-02 second: 7.357e-02 infty: 1.131e-01 bias: 6.855e-11 P time: 747236 first: 6.717e-02 second: 7.359e-02 infty: 1.134e-01 bias: 2.863e-11 P time: 748893 first: 6.685e-02 second: 7.321e-02 infty: 1.138e-01 bias: 2.839e-11 P time: 750551 first: 6.609e-02 second: 7.253e-02 infty: 1.144e-01 bias: 4.270e-11 P time: 752209 first: 6.505e-02 second: 7.169e-02 infty: 1.153e-01 bias: 2.375e-12 P time: 753867 first: 6.383e-02 second: 7.082e-02 infty: 1.165e-01 bias: 3.950e-11 P time: 755526 first: 6.261e-02 second: 6.999e-02 infty: 1.177e-01 bias: 2.573e-11 P time: 757185 first: 6.149e-02 second: 6.925e-02 infty: 1.188e-01 bias: 2.680e-11 P time: 758845 first: 6.057e-02 second: 6.860e-02 infty: 1.196e-01 bias: 7.001e-11 P time: 760505 first: 5.991e-02 second: 6.804e-02 infty: 1.199e-01 bias: 3.719e-11 P time: 762166 first: 5.945e-02 second: 6.760e-02 infty: 1.198e-01 bias: 3.707e-11 P time: 763827 first: 5.922e-02 second: 6.737e-02 infty: 1.194e-01 bias: 6.463e-11 P time: 765488 first: 5.934e-02 second: 6.745e-02 infty: 1.189e-01 bias: 3.301e-11 P time: 767150 first: 5.993e-02 second: 6.795e-02 infty: 1.188e-01 bias: 5.715e-11 P time: 768812 first: 6.102e-02 second: 6.891e-02 infty: 1.192e-01 bias: 6.240e-11 P time: 770475 first: 6.249e-02 second: 7.028e-02 infty: 1.202e-01 bias: 4.590e-11 P time: 772138 first: 6.413e-02 second: 7.191e-02 infty: 1.218e-01 bias: 3.724e-11 P time: 773802 first: 6.569e-02 second: 7.356e-02 infty: 1.239e-01 bias: 6.228e-11 P time: 775465 first: 6.695e-02 second: 7.496e-02 infty: 1.260e-01 bias: 3.676e-11 P time: 777129 first: 6.768e-02 second: 7.586e-02 infty: 1.278e-01 bias: 4.871e-11 P time: 778793 first: 6.776e-02 second: 7.608e-02 infty: 1.289e-01 bias: 3.823e-11 P time: 780458 first: 6.713e-02 second: 7.554e-02 infty: 1.291e-01 bias: 3.417e-11 P time: 782123 first: 6.583e-02 second: 7.429e-02 infty: 1.283e-01 bias: 5.692e-11 P time: 783788 first: 6.402e-02 second: 7.251e-02 infty: 1.266e-01 bias: 3.933e-11 P time: 785453 first: 6.199e-02 second: 7.046e-02 infty: 1.244e-01 bias: 1.765e-13 P time: 787118 first: 6.004e-02 second: 6.849e-02 infty: 1.224e-01 bias: 3.619e-11 P time: 788783 first: 5.846e-02 second: 6.692e-02 infty: 1.210e-01 bias: 3.847e-11 P time: 790448 first: 5.749e-02 second: 6.603e-02 infty: 1.202e-01 bias: 7.954e-11 P time: 792112 first: 5.727e-02 second: 6.594e-02 infty: 1.204e-01 bias: 5.465e-11 P time: 793776 first: 5.779e-02 second: 6.665e-02 infty: 1.215e-01 bias: 3.527e-11 P time: 795440 first: 5.896e-02 second: 6.801e-02 infty: 1.231e-01 bias: 3.246e-11 P time: 797104 first: 6.057e-02 second: 6.976e-02 infty: 1.251e-01 bias: 3.194e-11 P time: 798769 first: 6.241e-02 second: 7.162e-02 infty: 1.270e-01 bias: 2.134e-11 P time: 800433 first: 6.423e-02 second: 7.333e-02 infty: 1.285e-01 bias: 1.703e-11 P time: 802097 first: 6.580e-02 second: 7.469e-02 infty: 1.293e-01 bias: 2.994e-11 P time: 803760 first: 6.694e-02 second: 7.558e-02 infty: 1.293e-01 bias: 5.108e-11 P time: 805424 first: 6.754e-02 second: 7.593e-02 infty: 1.286e-01 bias: 3.033e-11 P time: 807088 first: 6.758e-02 second: 7.577e-02 infty: 1.275e-01 bias: 6.305e-11 P time: 808752 first: 6.712e-02 second: 7.517e-02 infty: 1.262e-01 bias: 5.547e-11 P time: 810416 first: 6.624e-02 second: 7.426e-02 infty: 1.249e-01 bias: 5.463e-11 P time: 812080 first: 6.508e-02 second: 7.316e-02 infty: 1.239e-01 bias: 4.051e-11 P time: 813743 first: 6.382e-02 second: 7.203e-02 infty: 1.231e-01 bias: 4.368e-11 P time: 815407 first: 6.254e-02 second: 7.096e-02 infty: 1.226e-01 bias: 7.280e-11 P time: 817070 first: 6.135e-02 second: 7.002e-02 infty: 1.221e-01 bias: 1.446e-11 P time: 818734 first: 6.034e-02 second: 6.925e-02 infty: 1.215e-01 bias: -2.034e-12 P time: 820397 first: 5.958e-02 second: 6.865e-02 infty: 1.206e-01 bias: 3.464e-11 P time: 822060 first: 5.912e-02 second: 6.825e-02 infty: 1.194e-01 bias: 3.706e-11 P time: 823724 first: 5.906e-02 second: 6.809e-02 infty: 1.178e-01 bias: 7.183e-11 P time: 825387 first: 5.946e-02 second: 6.825e-02 infty: 1.164e-01 bias: 2.926e-11 P time: 827051 first: 6.035e-02 second: 6.883e-02 infty: 1.154e-01 bias: 3.800e-11 P time: 828714 first: 6.166e-02 second: 6.984e-02 infty: 1.149e-01 bias: 5.698e-11 P time: 830377 first: 6.327e-02 second: 7.125e-02 infty: 1.150e-01 bias: 3.733e-11 P time: 832040 first: 6.500e-02 second: 7.290e-02 infty: 1.157e-01 bias: 3.009e-11 P time: 833703 first: 6.665e-02 second: 7.456e-02 infty: 1.170e-01 bias: 7.603e-11 P time: 835366 first: 6.797e-02 second: 7.599e-02 infty: 1.185e-01 bias: 3.657e-11 P time: 837029 first: 6.877e-02 second: 7.694e-02 infty: 1.200e-01 bias: 5.190e-11 P time: 838693 first: 6.895e-02 second: 7.726e-02 infty: 1.208e-01 bias: 6.258e-11 P time: 840357 first: 6.845e-02 second: 7.686e-02 infty: 1.208e-01 bias: 1.876e-11 P time: 842022 first: 6.734e-02 second: 7.579e-02 infty: 1.197e-01 bias: 4.508e-11 P time: 843687 first: 6.577e-02 second: 7.420e-02 infty: 1.175e-01 bias: 2.904e-11 P time: 845353 first: 6.397e-02 second: 7.234e-02 infty: 1.146e-01 bias: 5.401e-11 P time: 847018 first: 6.222e-02 second: 7.054e-02 infty: 1.113e-01 bias: 4.166e-11 P time: 848684 first: 6.079e-02 second: 6.909e-02 infty: 1.088e-01 bias: 1.786e-11 P time: 850350 first: 5.988e-02 second: 6.825e-02 infty: 1.071e-01 bias: 2.594e-11 P time: 852016 first: 5.964e-02 second: 6.814e-02 infty: 1.062e-01 bias: 3.226e-11 P time: 853681 first: 6.004e-02 second: 6.876e-02 infty: 1.065e-01 bias: 4.132e-11 P time: 855345 first: 6.104e-02 second: 6.995e-02 infty: 1.079e-01 bias: 3.157e-11 P time: 857008 first: 6.245e-02 second: 7.151e-02 infty: 1.095e-01 bias: 3.031e-11 P time: 858671 first: 6.411e-02 second: 7.320e-02 infty: 1.115e-01 bias: 7.296e-12 P time: 860334 first: 6.578e-02 second: 7.479e-02 infty: 1.132e-01 bias: 5.734e-11 P time: 861996 first: 6.724e-02 second: 7.610e-02 infty: 1.144e-01 bias: 5.244e-11 P time: 863659 first: 6.834e-02 second: 7.701e-02 infty: 1.150e-01 bias: 6.416e-11 P time: 865321 first: 6.898e-02 second: 7.747e-02 infty: 1.155e-01 bias: 3.892e-11 P time: 866983 first: 6.911e-02 second: 7.749e-02 infty: 1.157e-01 bias: 4.911e-11 P time: 868645 first: 6.876e-02 second: 7.712e-02 infty: 1.159e-01 bias: 2.002e-11 P time: 870308 first: 6.804e-02 second: 7.647e-02 infty: 1.166e-01 bias: 3.524e-11 P time: 871970 first: 6.706e-02 second: 7.565e-02 infty: 1.175e-01 bias: 4.725e-11 P time: 873631 first: 6.593e-02 second: 7.479e-02 infty: 1.190e-01 bias: 4.446e-11 P time: 875293 first: 6.480e-02 second: 7.398e-02 infty: 1.205e-01 bias: 2.379e-11 P time: 876954 first: 6.382e-02 second: 7.330e-02 infty: 1.218e-01 bias: 3.000e-11 P time: 878615 first: 6.309e-02 second: 7.281e-02 infty: 1.228e-01 bias: 5.075e-11 P time: 880276 first: 6.271e-02 second: 7.252e-02 infty: 1.236e-01 bias: 3.186e-11 P time: 881936 first: 6.266e-02 second: 7.246e-02 infty: 1.247e-01 bias: 4.626e-11 P time: 883597 first: 6.289e-02 second: 7.267e-02 infty: 1.264e-01 bias: 3.889e-11 P time: 885257 first: 6.347e-02 second: 7.319e-02 infty: 1.284e-01 bias: 1.350e-11 P time: 886917 first: 6.443e-02 second: 7.406e-02 infty: 1.309e-01 bias: 8.404e-12 P time: 888577 first: 6.576e-02 second: 7.528e-02 infty: 1.337e-01 bias: 3.754e-11 P time: 890237 first: 6.731e-02 second: 7.677e-02 infty: 1.369e-01 bias: 2.816e-11 P time: 891897 first: 6.893e-02 second: 7.838e-02 infty: 1.401e-01 bias: 4.885e-11 P time: 893556 first: 7.044e-02 second: 7.993e-02 infty: 1.431e-01 bias: 2.835e-11 P time: 895216 first: 7.161e-02 second: 8.117e-02 infty: 1.457e-01 bias: 5.645e-11 P time: 896875 first: 7.228e-02 second: 8.193e-02 infty: 1.477e-01 bias: 5.345e-11 P time: 898534 first: 7.234e-02 second: 8.207e-02 infty: 1.489e-01 bias: 4.042e-11 P time: 900194 first: 7.177e-02 second: 8.158e-02 infty: 1.495e-01 bias: 7.218e-11 P time: 901854 first: 7.064e-02 second: 8.052e-02 infty: 1.495e-01 bias: 2.337e-11 P time: 903514 first: 6.914e-02 second: 7.906e-02 infty: 1.494e-01 bias: 1.077e-11 P time: 905175 first: 6.749e-02 second: 7.746e-02 infty: 1.493e-01 bias: 3.471e-11 P time: 906836 first: 6.597e-02 second: 7.600e-02 infty: 1.496e-01 bias: 1.355e-11 P time: 908498 first: 6.486e-02 second: 7.497e-02 infty: 1.505e-01 bias: 4.979e-11 P time: 910159 first: 6.431e-02 second: 7.454e-02 infty: 1.520e-01 bias: 3.857e-11 P time: 911821 first: 6.443e-02 second: 7.480e-02 infty: 1.542e-01 bias: 2.895e-11 P time: 913482 first: 6.515e-02 second: 7.566e-02 infty: 1.569e-01 bias: 6.571e-11 P time: 915144 first: 6.637e-02 second: 7.699e-02 infty: 1.597e-01 bias: 6.774e-11 P time: 916805 first: 6.791e-02 second: 7.856e-02 infty: 1.625e-01 bias: 2.820e-11 P time: 918467 first: 6.960e-02 second: 8.019e-02 infty: 1.649e-01 bias: 2.530e-11 P time: 920128 first: 7.125e-02 second: 8.171e-02 infty: 1.668e-01 bias: 5.926e-11 P time: 921790 first: 7.273e-02 second: 8.298e-02 infty: 1.682e-01 bias: 2.282e-11 P time: 923452 first: 7.390e-02 second: 8.392e-02 infty: 1.692e-01 bias: 7.115e-11 P time: 925115 first: 7.471e-02 second: 8.450e-02 infty: 1.698e-01 bias: 6.716e-12 P time: 926777 first: 7.513e-02 second: 8.473e-02 infty: 1.704e-01 bias: 3.927e-11 P time: 928441 first: 7.516e-02 second: 8.464e-02 infty: 1.709e-01 bias: 1.700e-11 P time: 930105 first: 7.485e-02 second: 8.429e-02 infty: 1.715e-01 bias: 3.979e-11 P time: 931769 first: 7.429e-02 second: 8.377e-02 infty: 1.722e-01 bias: 1.131e-11 P time: 933434 first: 7.356e-02 second: 8.314e-02 infty: 1.730e-01 bias: 3.395e-11 P time: 935099 first: 7.273e-02 second: 8.249e-02 infty: 1.737e-01 bias: 4.972e-11 P time: 936764 first: 7.194e-02 second: 8.187e-02 infty: 1.742e-01 bias: 6.812e-11 P time: 938430 first: 7.132e-02 second: 8.134e-02 infty: 1.745e-01 bias: 6.546e-11 P time: 940096 first: 7.089e-02 second: 8.094e-02 infty: 1.745e-01 bias: 5.369e-11 P time: 941762 first: 7.067e-02 second: 8.073e-02 infty: 1.743e-01 bias: 2.179e-11 P time: 943429 first: 7.073e-02 second: 8.077e-02 infty: 1.741e-01 bias: 2.681e-11 P time: 945096 first: 7.115e-02 second: 8.111e-02 infty: 1.741e-01 bias: 4.541e-12 P time: 946764 first: 7.196e-02 second: 8.179e-02 infty: 1.745e-01 bias: 4.599e-11 P time: 948432 first: 7.313e-02 second: 8.280e-02 infty: 1.753e-01 bias: 6.456e-11 P time: 950101 first: 7.452e-02 second: 8.409e-02 infty: 1.766e-01 bias: 3.587e-11 P time: 951770 first: 7.600e-02 second: 8.550e-02 infty: 1.783e-01 bias: 5.870e-11 P time: 953440 first: 7.737e-02 second: 8.686e-02 infty: 1.800e-01 bias: 4.141e-11 P time: 955110 first: 7.843e-02 second: 8.795e-02 infty: 1.815e-01 bias: 2.601e-11 P time: 956781 first: 7.904e-02 second: 8.859e-02 infty: 1.825e-01 bias: 3.485e-11 P time: 958452 first: 7.910e-02 second: 8.866e-02 infty: 1.827e-01 bias: 4.221e-11 P time: 960124 first: 7.862e-02 second: 8.816e-02 infty: 1.822e-01 bias: -7.926e-13 P time: 961797 first: 7.769e-02 second: 8.718e-02 infty: 1.808e-01 bias: 4.954e-11 P time: 963470 first: 7.649e-02 second: 8.589e-02 infty: 1.789e-01 bias: 3.995e-11 P time: 965145 first: 7.524e-02 second: 8.457e-02 infty: 1.767e-01 bias: 4.349e-11 P time: 966821 first: 7.419e-02 second: 8.347e-02 infty: 1.745e-01 bias: 2.534e-11 P time: 968497 first: 7.355e-02 second: 8.282e-02 infty: 1.728e-01 bias: 4.984e-11 P time: 970174 first: 7.344e-02 second: 8.275e-02 infty: 1.716e-01 bias: 1.506e-11 P time: 971852 first: 7.385e-02 second: 8.327e-02 infty: 1.712e-01 bias: 9.876e-11 P time: 973531 first: 7.473e-02 second: 8.427e-02 infty: 1.714e-01 bias: 3.238e-11 P time: 975210 first: 7.591e-02 second: 8.556e-02 infty: 1.723e-01 bias: 4.023e-11 P time: 976889 first: 7.720e-02 second: 8.692e-02 infty: 1.733e-01 bias: 4.364e-11 P time: 978569 first: 7.847e-02 second: 8.816e-02 infty: 1.743e-01 bias: 1.829e-11 P time: 980249 first: 7.960e-02 second: 8.916e-02 infty: 1.749e-01 bias: 4.213e-11 P time: 981931 first: 8.047e-02 second: 8.983e-02 infty: 1.749e-01 bias: 5.630e-11 P time: 983612 first: 8.101e-02 second: 9.015e-02 infty: 1.742e-01 bias: 3.492e-11 P time: 985295 first: 8.121e-02 second: 9.015e-02 infty: 1.729e-01 bias: 1.359e-11 P time: 986979 first: 8.109e-02 second: 8.988e-02 infty: 1.710e-01 bias: 5.235e-11 P time: 988664 first: 8.067e-02 second: 8.941e-02 infty: 1.689e-01 bias: 2.225e-11 P time: 990350 first: 8.001e-02 second: 8.881e-02 infty: 1.667e-01 bias: 4.010e-11 P time: 992038 first: 7.918e-02 second: 8.817e-02 infty: 1.647e-01 bias: 1.638e-11 P time: 993726 first: 7.829e-02 second: 8.754e-02 infty: 1.627e-01 bias: 3.916e-11 P time: 995416 first: 7.741e-02 second: 8.698e-02 infty: 1.609e-01 bias: 4.818e-11 P time: 997107 first: 7.663e-02 second: 8.650e-02 infty: 1.591e-01 bias: 6.150e-11 P time: 998798 first: 7.605e-02 second: 8.613e-02 infty: 1.573e-01 bias: 4.566e-11 P time: 1.00049e+06 first: 7.571e-02 second: 8.590e-02 infty: 1.554e-01 bias: 4.447e-11 P time: 1.00218e+06 first: 7.567e-02 second: 8.583e-02 infty: 1.533e-01 bias: 3.576e-11 P time: 1.00388e+06 first: 7.593e-02 second: 8.600e-02 infty: 1.511e-01 bias: 3.603e-11 P time: 1.00558e+06 first: 7.653e-02 second: 8.644e-02 infty: 1.489e-01 bias: 2.458e-11 P time: 1.00727e+06 first: 7.742e-02 second: 8.718e-02 infty: 1.470e-01 bias: 4.006e-11 P time: 1.00897e+06 first: 7.856e-02 second: 8.821e-02 infty: 1.462e-01 bias: 4.690e-11 P time: 1.01067e+06 first: 7.985e-02 second: 8.944e-02 infty: 1.470e-01 bias: 3.600e-11 P time: 1.01237e+06 first: 8.115e-02 second: 9.071e-02 infty: 1.482e-01 bias: 4.121e-11 P time: 1.01407e+06 first: 8.226e-02 second: 9.183e-02 infty: 1.498e-01 bias: 4.065e-11 P time: 1.01577e+06 first: 8.301e-02 second: 9.260e-02 infty: 1.510e-01 bias: 3.800e-11 P time: 1.01747e+06 first: 8.324e-02 second: 9.286e-02 infty: 1.517e-01 bias: 8.702e-11 P time: 1.01918e+06 first: 8.287e-02 second: 9.252e-02 infty: 1.516e-01 bias: 1.666e-11 P time: 1.02088e+06 first: 8.195e-02 second: 9.163e-02 infty: 1.507e-01 bias: 7.275e-11 P time: 1.02259e+06 first: 8.062e-02 second: 9.033e-02 infty: 1.491e-01 bias: 6.082e-11 P time: 1.0243e+06 first: 7.910e-02 second: 8.886e-02 infty: 1.471e-01 bias: 8.054e-11 P time: 1.02601e+06 first: 7.766e-02 second: 8.752e-02 infty: 1.450e-01 bias: 3.562e-11 P time: 1.02772e+06 first: 7.655e-02 second: 8.658e-02 infty: 1.433e-01 bias: 5.681e-11 P time: 1.02943e+06 first: 7.598e-02 second: 8.621e-02 infty: 1.423e-01 bias: 3.218e-11 P time: 1.03114e+06 first: 7.600e-02 second: 8.648e-02 infty: 1.424e-01 bias: 3.354e-11 P time: 1.03286e+06 first: 7.658e-02 second: 8.730e-02 infty: 1.432e-01 bias: 6.236e-11 P time: 1.03457e+06 first: 7.756e-02 second: 8.846e-02 infty: 1.443e-01 bias: 1.428e-11 P time: 1.03629e+06 first: 7.875e-02 second: 8.973e-02 infty: 1.454e-01 bias: 3.856e-11 P time: 1.03801e+06 first: 7.993e-02 second: 9.090e-02 infty: 1.463e-01 bias: 2.698e-11 P time: 1.03973e+06 first: 8.096e-02 second: 9.179e-02 infty: 1.468e-01 bias: 2.440e-11 P time: 1.04145e+06 first: 8.170e-02 second: 9.232e-02 infty: 1.468e-01 bias: 4.667e-11 P time: 1.04317e+06 first: 8.212e-02 second: 9.248e-02 infty: 1.462e-01 bias: 4.907e-11 P time: 1.04489e+06 first: 8.222e-02 second: 9.233e-02 infty: 1.453e-01 bias: 5.215e-11 P time: 1.04661e+06 first: 8.203e-02 second: 9.197e-02 infty: 1.441e-01 bias: 1.231e-11 P time: 1.04834e+06 first: 8.165e-02 second: 9.148e-02 infty: 1.431e-01 bias: 4.879e-11 P time: 1.05006e+06 first: 8.112e-02 second: 9.097e-02 infty: 1.423e-01 bias: 2.247e-11 P time: 1.05179e+06 first: 8.053e-02 second: 9.053e-02 infty: 1.419e-01 bias: 1.352e-11 P time: 1.05351e+06 first: 7.995e-02 second: 9.020e-02 infty: 1.424e-01 bias: 3.309e-13 P time: 1.05523e+06 first: 7.947e-02 second: 9.001e-02 infty: 1.430e-01 bias: 3.725e-11 P time: 1.05696e+06 first: 7.916e-02 second: 8.994e-02 infty: 1.435e-01 bias: 3.631e-11 P time: 1.05869e+06 first: 7.904e-02 second: 8.997e-02 infty: 1.436e-01 bias: 6.734e-11 P time: 1.06041e+06 first: 7.912e-02 second: 9.008e-02 infty: 1.434e-01 bias: 4.266e-11 P time: 1.06214e+06 first: 7.937e-02 second: 9.025e-02 infty: 1.428e-01 bias: 3.540e-11 P time: 1.06386e+06 first: 7.980e-02 second: 9.050e-02 infty: 1.419e-01 bias: 5.672e-11 P time: 1.06559e+06 first: 8.044e-02 second: 9.089e-02 infty: 1.410e-01 bias: 4.456e-11 P time: 1.06732e+06 first: 8.122e-02 second: 9.143e-02 infty: 1.402e-01 bias: 5.555e-11 P time: 1.06905e+06 first: 8.210e-02 second: 9.214e-02 infty: 1.399e-01 bias: 6.939e-11 P time: 1.07077e+06 first: 8.301e-02 second: 9.296e-02 infty: 1.399e-01 bias: 2.994e-11 P time: 1.0725e+06 first: 8.386e-02 second: 9.378e-02 infty: 1.407e-01 bias: 4.746e-11 P time: 1.07423e+06 first: 8.450e-02 second: 9.447e-02 infty: 1.416e-01 bias: 7.121e-11 P time: 1.07595e+06 first: 8.482e-02 second: 9.486e-02 infty: 1.423e-01 bias: 5.293e-11 P time: 1.07768e+06 first: 8.471e-02 second: 9.483e-02 infty: 1.426e-01 bias: 2.490e-11 P time: 1.07941e+06 first: 8.417e-02 second: 9.434e-02 infty: 1.423e-01 bias: 3.553e-11 P time: 1.08113e+06 first: 8.326e-02 second: 9.343e-02 infty: 1.413e-01 bias: 6.240e-11 P time: 1.08286e+06 first: 8.212e-02 second: 9.227e-02 infty: 1.398e-01 bias: 5.353e-11 P time: 1.08458e+06 first: 8.099e-02 second: 9.110e-02 infty: 1.380e-01 bias: 5.343e-11 P time: 1.08631e+06 first: 8.012e-02 second: 9.019e-02 infty: 1.362e-01 bias: 2.947e-11 P time: 1.08803e+06 first: 7.972e-02 second: 8.976e-02 infty: 1.348e-01 bias: 4.268e-11 P time: 1.08976e+06 first: 7.988e-02 second: 8.993e-02 infty: 1.342e-01 bias: 2.230e-11 P time: 1.09148e+06 first: 8.060e-02 second: 9.068e-02 infty: 1.350e-01 bias: 2.974e-11 P time: 1.09321e+06 first: 8.176e-02 second: 9.187e-02 infty: 1.364e-01 bias: 6.123e-11 P time: 1.09493e+06 first: 8.315e-02 second: 9.327e-02 infty: 1.381e-01 bias: 1.006e-11 P time: 1.09665e+06 first: 8.456e-02 second: 9.463e-02 infty: 1.398e-01 bias: 2.619e-11 P time: 1.09838e+06 first: 8.577e-02 second: 9.574e-02 infty: 1.411e-01 bias: 4.912e-11 P time: 1.1001e+06 first: 8.667e-02 second: 9.646e-02 infty: 1.419e-01 bias: 4.722e-11 P time: 1.10182e+06 first: 8.717e-02 second: 9.675e-02 infty: 1.419e-01 bias: 3.657e-11 P time: 1.10354e+06 first: 8.729e-02 second: 9.664e-02 infty: 1.414e-01 bias: 2.838e-11 P time: 1.10526e+06 first: 8.707e-02 second: 9.621e-02 infty: 1.405e-01 bias: 2.991e-12 P time: 1.10697e+06 first: 8.660e-02 second: 9.559e-02 infty: 1.398e-01 bias: 8.131e-11 P time: 1.10869e+06 first: 8.598e-02 second: 9.491e-02 infty: 1.394e-01 bias: 2.041e-11 P time: 1.1104e+06 first: 8.531e-02 second: 9.430e-02 infty: 1.393e-01 bias: 4.317e-11 P time: 1.11212e+06 first: 8.467e-02 second: 9.383e-02 infty: 1.396e-01 bias: 2.038e-11 P time: 1.11383e+06 first: 8.416e-02 second: 9.357e-02 infty: 1.402e-01 bias: 4.875e-11 P time: 1.11554e+06 first: 8.384e-02 second: 9.351e-02 infty: 1.411e-01 bias: 3.649e-11 P time: 1.11726e+06 first: 8.374e-02 second: 9.364e-02 infty: 1.423e-01 bias: 1.620e-11 P time: 1.11897e+06 first: 8.387e-02 second: 9.389e-02 infty: 1.433e-01 bias: 3.648e-11 P time: 1.12068e+06 first: 8.418e-02 second: 9.423e-02 infty: 1.439e-01 bias: 3.897e-11 P time: 1.12239e+06 first: 8.466e-02 second: 9.460e-02 infty: 1.441e-01 bias: 5.634e-11 P time: 1.12409e+06 first: 8.521e-02 second: 9.499e-02 infty: 1.441e-01 bias: 5.769e-11 P time: 1.1258e+06 first: 8.578e-02 second: 9.541e-02 infty: 1.441e-01 bias: 3.181e-11 P time: 1.12751e+06 first: 8.635e-02 second: 9.587e-02 infty: 1.443e-01 bias: 1.587e-11 P time: 1.12921e+06 first: 8.693e-02 second: 9.636e-02 infty: 1.451e-01 bias: 4.649e-11 P time: 1.13092e+06 first: 8.747e-02 second: 9.686e-02 infty: 1.465e-01 bias: 2.207e-11 P time: 1.13262e+06 first: 8.789e-02 second: 9.732e-02 infty: 1.480e-01 bias: 2.847e-11 P time: 1.13432e+06 first: 8.813e-02 second: 9.763e-02 infty: 1.495e-01 bias: 4.047e-11 P time: 1.13603e+06 first: 8.813e-02 second: 9.772e-02 infty: 1.508e-01 bias: 3.018e-11 P time: 1.13773e+06 first: 8.784e-02 second: 9.752e-02 infty: 1.518e-01 bias: 5.849e-11 P time: 1.13942e+06 first: 8.728e-02 second: 9.703e-02 infty: 1.523e-01 bias: 7.243e-11 P time: 1.14112e+06 first: 8.650e-02 second: 9.630e-02 infty: 1.523e-01 bias: 3.591e-11 P time: 1.14282e+06 first: 8.563e-02 second: 9.547e-02 infty: 1.521e-01 bias: 2.386e-11 P time: 1.14451e+06 first: 8.484e-02 second: 9.473e-02 infty: 1.518e-01 bias: 5.425e-11 P time: 1.14621e+06 first: 8.430e-02 second: 9.426e-02 infty: 1.516e-01 bias: 4.611e-11 P time: 1.1479e+06 first: 8.411e-02 second: 9.422e-02 infty: 1.517e-01 bias: 7.554e-11 P time: 1.14959e+06 first: 8.441e-02 second: 9.466e-02 infty: 1.522e-01 bias: 3.211e-11 P time: 1.15129e+06 first: 8.517e-02 second: 9.551e-02 infty: 1.540e-01 bias: 1.388e-11 P time: 1.15298e+06 first: 8.622e-02 second: 9.663e-02 infty: 1.558e-01 bias: 2.553e-11 P time: 1.15467e+06 first: 8.736e-02 second: 9.782e-02 infty: 1.577e-01 bias: 5.333e-11 P time: 1.15636e+06 first: 8.838e-02 second: 9.886e-02 infty: 1.592e-01 bias: 5.141e-11 P time: 1.15805e+06 first: 8.913e-02 second: 9.958e-02 infty: 1.603e-01 bias: 3.361e-11 P time: 1.15974e+06 first: 8.950e-02 second: 9.991e-02 infty: 1.609e-01 bias: 4.830e-11 P time: 1.16142e+06 first: 8.947e-02 second: 9.980e-02 infty: 1.610e-01 bias: 6.423e-11 P time: 1.16311e+06 first: 8.905e-02 second: 9.932e-02 infty: 1.606e-01 bias: 1.754e-11 P time: 1.1648e+06 first: 8.832e-02 second: 9.857e-02 infty: 1.600e-01 bias: 3.930e-11 P time: 1.16648e+06 first: 8.741e-02 second: 9.768e-02 infty: 1.593e-01 bias: 2.942e-11 P time: 1.16816e+06 first: 8.645e-02 second: 9.682e-02 infty: 1.588e-01 bias: 1.800e-11 P time: 1.16985e+06 first: 8.553e-02 second: 9.609e-02 infty: 1.586e-01 bias: 7.760e-12 P time: 1.17153e+06 first: 8.478e-02 second: 9.560e-02 infty: 1.587e-01 bias: 4.017e-11 P time: 1.17321e+06 first: 8.432e-02 second: 9.539e-02 infty: 1.592e-01 bias: 6.016e-11 P time: 1.17489e+06 first: 8.417e-02 second: 9.546e-02 infty: 1.598e-01 bias: 1.523e-11 P time: 1.17657e+06 first: 8.435e-02 second: 9.579e-02 infty: 1.604e-01 bias: 4.598e-11 P time: 1.17825e+06 first: 8.482e-02 second: 9.631e-02 infty: 1.609e-01 bias: 2.220e-11 P time: 1.17992e+06 first: 8.549e-02 second: 9.696e-02 infty: 1.613e-01 bias: 6.723e-11 P time: 1.1816e+06 first: 8.629e-02 second: 9.766e-02 infty: 1.619e-01 bias: 5.302e-11 P time: 1.18328e+06 first: 8.717e-02 second: 9.835e-02 infty: 1.622e-01 bias: 3.305e-11 P time: 1.18495e+06 first: 8.797e-02 second: 9.898e-02 infty: 1.624e-01 bias: 4.842e-11 P time: 1.18663e+06 first: 8.862e-02 second: 9.954e-02 infty: 1.627e-01 bias: 2.452e-11 P time: 1.1883e+06 first: 8.911e-02 second: 1.000e-01 infty: 1.630e-01 bias: 6.275e-11 P time: 1.18998e+06 first: 8.942e-02 second: 1.003e-01 infty: 1.636e-01 bias: 7.518e-11 P time: 1.19165e+06 first: 8.954e-02 second: 1.005e-01 infty: 1.642e-01 bias: 1.697e-11 P time: 1.19332e+06 first: 8.947e-02 second: 1.006e-01 infty: 1.649e-01 bias: 3.821e-11 P time: 1.19499e+06 first: 8.916e-02 second: 1.003e-01 infty: 1.653e-01 bias: 9.007e-11 P time: 1.19666e+06 first: 8.864e-02 second: 9.989e-02 infty: 1.655e-01 bias: 3.070e-11 P time: 1.19834e+06 first: 8.791e-02 second: 9.921e-02 infty: 1.652e-01 bias: 4.337e-11 P time: 1.20001e+06 first: 8.706e-02 second: 9.836e-02 infty: 1.645e-01 bias: 4.488e-11 P time: 1.20167e+06 first: 8.621e-02 second: 9.748e-02 infty: 1.634e-01 bias: -2.145e-12 P time: 1.20334e+06 first: 8.550e-02 second: 9.670e-02 infty: 1.620e-01 bias: 2.117e-11 P time: 1.20501e+06 first: 8.506e-02 second: 9.622e-02 infty: 1.605e-01 bias: 6.271e-11 P time: 1.20668e+06 first: 8.502e-02 second: 9.615e-02 infty: 1.591e-01 bias: 4.954e-11 P time: 1.20834e+06 first: 8.544e-02 second: 9.656e-02 infty: 1.581e-01 bias: 4.554e-11 P time: 1.21001e+06 first: 8.628e-02 second: 9.742e-02 infty: 1.580e-01 bias: 4.027e-11 P time: 1.21168e+06 first: 8.746e-02 second: 9.858e-02 infty: 1.589e-01 bias: 6.017e-11 P time: 1.21334e+06 first: 8.882e-02 second: 9.987e-02 infty: 1.600e-01 bias: 3.604e-11 P time: 1.21501e+06 first: 9.009e-02 second: 1.010e-01 infty: 1.611e-01 bias: 7.435e-11 P time: 1.21667e+06 first: 9.107e-02 second: 1.019e-01 infty: 1.619e-01 bias: 6.401e-11 P time: 1.21834e+06 first: 9.166e-02 second: 1.024e-01 infty: 1.624e-01 bias: 4.235e-11 P time: 1.22e+06 first: 9.180e-02 second: 1.025e-01 infty: 1.624e-01 bias: 4.707e-11 P time: 1.22167e+06 first: 9.154e-02 second: 1.021e-01 infty: 1.618e-01 bias: 3.944e-11 P time: 1.22333e+06 first: 9.096e-02 second: 1.014e-01 infty: 1.608e-01 bias: 6.965e-12 P time: 1.22499e+06 first: 9.017e-02 second: 1.005e-01 infty: 1.595e-01 bias: 5.480e-11 P time: 1.22666e+06 first: 8.932e-02 second: 9.959e-02 infty: 1.583e-01 bias: 6.039e-12 P time: 1.22832e+06 first: 8.852e-02 second: 9.883e-02 infty: 1.572e-01 bias: 5.185e-11 P time: 1.22998e+06 first: 8.789e-02 second: 9.830e-02 infty: 1.564e-01 bias: 4.238e-11 P time: 1.23164e+06 first: 8.753e-02 second: 9.806e-02 infty: 1.558e-01 bias: 5.475e-11 P time: 1.2333e+06 first: 8.752e-02 second: 9.813e-02 infty: 1.554e-01 bias: 1.716e-11 P time: 1.23496e+06 first: 8.784e-02 second: 9.848e-02 infty: 1.554e-01 bias: 5.067e-11 P time: 1.23662e+06 first: 8.841e-02 second: 9.905e-02 infty: 1.558e-01 bias: 2.257e-11 P time: 1.23828e+06 first: 8.916e-02 second: 9.976e-02 infty: 1.560e-01 bias: 4.128e-11 P time: 1.23994e+06 first: 9.004e-02 second: 1.005e-01 infty: 1.560e-01 bias: 2.200e-11 P time: 1.2416e+06 first: 9.099e-02 second: 1.013e-01 infty: 1.556e-01 bias: 2.678e-11 P time: 1.24326e+06 first: 9.186e-02 second: 1.020e-01 infty: 1.551e-01 bias: 4.807e-11 P time: 1.24492e+06 first: 9.260e-02 second: 1.026e-01 infty: 1.545e-01 bias: 5.267e-11 P time: 1.24657e+06 first: 9.315e-02 second: 1.031e-01 infty: 1.539e-01 bias: 3.127e-11 P time: 1.24823e+06 first: 9.345e-02 second: 1.034e-01 infty: 1.536e-01 bias: 8.600e-11 P time: 1.24989e+06 first: 9.350e-02 second: 1.035e-01 infty: 1.539e-01 bias: 2.415e-11 P time: 1.25155e+06 first: 9.331e-02 second: 1.034e-01 infty: 1.545e-01 bias: 8.354e-12 P time: 1.25321e+06 first: 9.290e-02 second: 1.031e-01 infty: 1.550e-01 bias: 8.341e-12 P time: 1.25487e+06 first: 9.228e-02 second: 1.026e-01 infty: 1.554e-01 bias: 4.137e-11 P time: 1.25653e+06 first: 9.147e-02 second: 1.019e-01 infty: 1.554e-01 bias: 3.295e-11 P time: 1.25819e+06 first: 9.054e-02 second: 1.010e-01 infty: 1.549e-01 bias: 5.032e-11 P time: 1.25985e+06 first: 8.959e-02 second: 1.001e-01 infty: 1.541e-01 bias: -4.220e-12 P time: 1.2615e+06 first: 8.872e-02 second: 9.923e-02 infty: 1.531e-01 bias: 1.929e-11 P time: 1.26316e+06 first: 8.811e-02 second: 9.860e-02 infty: 1.527e-01 bias: 1.461e-11 P time: 1.26482e+06 first: 8.783e-02 second: 9.835e-02 infty: 1.525e-01 bias: 3.637e-11 P time: 1.26648e+06 first: 8.802e-02 second: 9.859e-02 infty: 1.527e-01 bias: -1.940e-11 P time: 1.26814e+06 first: 8.871e-02 second: 9.935e-02 infty: 1.534e-01 bias: 5.266e-11 P time: 1.2698e+06 first: 8.980e-02 second: 1.006e-01 infty: 1.556e-01 bias: 4.302e-11 P time: 1.27146e+06 first: 9.117e-02 second: 1.020e-01 infty: 1.581e-01 bias: 3.491e-11 P time: 1.27311e+06 first: 9.258e-02 second: 1.035e-01 infty: 1.607e-01 bias: 2.995e-11 P time: 1.27477e+06 first: 9.383e-02 second: 1.049e-01 infty: 1.631e-01 bias: 3.912e-11 P time: 1.27643e+06 first: 9.475e-02 second: 1.058e-01 infty: 1.650e-01 bias: 5.015e-11 P time: 1.27809e+06 first: 9.518e-02 second: 1.062e-01 infty: 1.662e-01 bias: 3.181e-11 P time: 1.27975e+06 first: 9.509e-02 second: 1.061e-01 infty: 1.667e-01 bias: 6.212e-11 P time: 1.28141e+06 first: 9.450e-02 second: 1.054e-01 infty: 1.665e-01 bias: 5.367e-11 P time: 1.28308e+06 first: 9.351e-02 second: 1.044e-01 infty: 1.658e-01 bias: 1.673e-11 P time: 1.28474e+06 first: 9.226e-02 second: 1.031e-01 infty: 1.650e-01 bias: 5.553e-11 P time: 1.2864e+06 first: 9.093e-02 second: 1.019e-01 infty: 1.642e-01 bias: 3.483e-11 P time: 1.28806e+06 first: 8.967e-02 second: 1.007e-01 infty: 1.643e-01 bias: 4.845e-11 P time: 1.28972e+06 first: 8.865e-02 second: 9.992e-02 infty: 1.649e-01 bias: 6.867e-11 P time: 1.29139e+06 first: 8.794e-02 second: 9.948e-02 infty: 1.658e-01 bias: 4.205e-11 P time: 1.29305e+06 first: 8.759e-02 second: 9.943e-02 infty: 1.671e-01 bias: 1.486e-11 P time: 1.29471e+06 first: 8.765e-02 second: 9.975e-02 infty: 1.684e-01 bias: 5.152e-11 P time: 1.29638e+06 first: 8.803e-02 second: 1.003e-01 infty: 1.698e-01 bias: 3.343e-11 P time: 1.29804e+06 first: 8.876e-02 second: 1.011e-01 infty: 1.708e-01 bias: 9.933e-12 P time: 1.2997e+06 first: 8.969e-02 second: 1.020e-01 infty: 1.716e-01 bias: 3.357e-11 P time: 1.30137e+06 first: 9.072e-02 second: 1.028e-01 infty: 1.722e-01 bias: 1.802e-11 P time: 1.30304e+06 first: 9.167e-02 second: 1.036e-01 infty: 1.725e-01 bias: 6.898e-11 P time: 1.3047e+06 first: 9.243e-02 second: 1.042e-01 infty: 1.728e-01 bias: 6.361e-11 P time: 1.30637e+06 first: 9.292e-02 second: 1.047e-01 infty: 1.732e-01 bias: 3.599e-11 P time: 1.30803e+06 first: 9.312e-02 second: 1.049e-01 infty: 1.736e-01 bias: 2.475e-11 P time: 1.3097e+06 first: 9.301e-02 second: 1.049e-01 infty: 1.742e-01 bias: 1.859e-11 P time: 1.31136e+06 first: 9.260e-02 second: 1.047e-01 infty: 1.748e-01 bias: -3.194e-13 P time: 1.31303e+06 first: 9.196e-02 second: 1.043e-01 infty: 1.752e-01 bias: 4.488e-11 P time: 1.3147e+06 first: 9.109e-02 second: 1.036e-01 infty: 1.753e-01 bias: 4.273e-11 P time: 1.31636e+06 first: 9.009e-02 second: 1.027e-01 infty: 1.753e-01 bias: 6.257e-11 P time: 1.31803e+06 first: 8.901e-02 second: 1.016e-01 infty: 1.749e-01 bias: 5.384e-11 P time: 1.31969e+06 first: 8.795e-02 second: 1.006e-01 infty: 1.741e-01 bias: 4.468e-11 P time: 1.32136e+06 first: 8.705e-02 second: 9.963e-02 infty: 1.731e-01 bias: 2.996e-11 P time: 1.32303e+06 first: 8.639e-02 second: 9.895e-02 infty: 1.721e-01 bias: 4.197e-11 P time: 1.32469e+06 first: 8.618e-02 second: 9.868e-02 infty: 1.713e-01 bias: 4.182e-11 P time: 1.32636e+06 first: 8.644e-02 second: 9.893e-02 infty: 1.710e-01 bias: 1.904e-11 P time: 1.32802e+06 first: 8.725e-02 second: 9.969e-02 infty: 1.711e-01 bias: 5.271e-11 P time: 1.32969e+06 first: 8.845e-02 second: 1.009e-01 infty: 1.718e-01 bias: 9.308e-12 P time: 1.33136e+06 first: 8.989e-02 second: 1.023e-01 infty: 1.728e-01 bias: 4.371e-11 P time: 1.33302e+06 first: 9.130e-02 second: 1.037e-01 infty: 1.741e-01 bias: 7.235e-11 P time: 1.33469e+06 first: 9.247e-02 second: 1.049e-01 infty: 1.752e-01 bias: 3.871e-11 P time: 1.33636e+06 first: 9.325e-02 second: 1.057e-01 infty: 1.759e-01 bias: 2.419e-11 P time: 1.33802e+06 first: 9.350e-02 second: 1.059e-01 infty: 1.760e-01 bias: 5.252e-11 P time: 1.33969e+06 first: 9.318e-02 second: 1.056e-01 infty: 1.753e-01 bias: 2.195e-11 P time: 1.34135e+06 first: 9.236e-02 second: 1.046e-01 infty: 1.740e-01 bias: 3.281e-11 P time: 1.34302e+06 first: 9.114e-02 second: 1.033e-01 infty: 1.721e-01 bias: 2.932e-11 P time: 1.34469e+06 first: 8.970e-02 second: 1.018e-01 infty: 1.699e-01 bias: 5.271e-11 P time: 1.34635e+06 first: 8.826e-02 second: 1.003e-01 infty: 1.676e-01 bias: 5.022e-11 P time: 1.34802e+06 first: 8.700e-02 second: 9.904e-02 infty: 1.656e-01 bias: 1.888e-11 P time: 1.34969e+06 first: 8.607e-02 second: 9.815e-02 infty: 1.644e-01 bias: 4.932e-11 P time: 1.35135e+06 first: 8.556e-02 second: 9.773e-02 infty: 1.639e-01 bias: 2.936e-11 P time: 1.35302e+06 first: 8.553e-02 second: 9.779e-02 infty: 1.638e-01 bias: 1.983e-11 P time: 1.35468e+06 first: 8.597e-02 second: 9.829e-02 infty: 1.640e-01 bias: 3.293e-11 P time: 1.35635e+06 first: 8.681e-02 second: 9.912e-02 infty: 1.643e-01 bias: 5.777e-11 P time: 1.35801e+06 first: 8.794e-02 second: 1.002e-01 infty: 1.645e-01 bias: 2.724e-11 P time: 1.35968e+06 first: 8.922e-02 second: 1.013e-01 infty: 1.644e-01 bias: 5.920e-11 P time: 1.36135e+06 first: 9.053e-02 second: 1.024e-01 infty: 1.641e-01 bias: 5.847e-11 P time: 1.36301e+06 first: 9.171e-02 second: 1.034e-01 infty: 1.635e-01 bias: 6.274e-11 P time: 1.36468e+06 first: 9.261e-02 second: 1.042e-01 infty: 1.627e-01 bias: 1.437e-11 P time: 1.36634e+06 first: 9.318e-02 second: 1.047e-01 infty: 1.618e-01 bias: -1.205e-11 P time: 1.36801e+06 first: 9.340e-02 second: 1.048e-01 infty: 1.611e-01 bias: 5.122e-11 P time: 1.36967e+06 first: 9.324e-02 second: 1.047e-01 infty: 1.608e-01 bias: 3.667e-11 P time: 1.37134e+06 first: 9.272e-02 second: 1.042e-01 infty: 1.605e-01 bias: 3.038e-11 P time: 1.37301e+06 first: 9.190e-02 second: 1.035e-01 infty: 1.601e-01 bias: 5.237e-11 P time: 1.37467e+06 first: 9.084e-02 second: 1.025e-01 infty: 1.593e-01 bias: 4.177e-11 P time: 1.37634e+06 first: 8.964e-02 second: 1.013e-01 infty: 1.581e-01 bias: 3.077e-11 P time: 1.37801e+06 first: 8.842e-02 second: 1.001e-01 infty: 1.566e-01 bias: 5.140e-11 P time: 1.37968e+06 first: 8.729e-02 second: 9.898e-02 infty: 1.548e-01 bias: 4.057e-11 P time: 1.38135e+06 first: 8.641e-02 second: 9.806e-02 infty: 1.528e-01 bias: 5.132e-11 P time: 1.38302e+06 first: 8.588e-02 second: 9.753e-02 infty: 1.507e-01 bias: 4.316e-11 P time: 1.38468e+06 first: 8.586e-02 second: 9.750e-02 infty: 1.497e-01 bias: 6.254e-11 P time: 1.38635e+06 first: 8.638e-02 second: 9.805e-02 infty: 1.492e-01 bias: 3.024e-11 P time: 1.38802e+06 first: 8.743e-02 second: 9.913e-02 infty: 1.495e-01 bias: 1.420e-11 P time: 1.38969e+06 first: 8.885e-02 second: 1.006e-01 infty: 1.510e-01 bias: 7.223e-11 P time: 1.39136e+06 first: 9.048e-02 second: 1.023e-01 infty: 1.530e-01 bias: 3.904e-11 P time: 1.39303e+06 first: 9.206e-02 second: 1.039e-01 infty: 1.550e-01 bias: 1.529e-11 P time: 1.39469e+06 first: 9.340e-02 second: 1.053e-01 infty: 1.568e-01 bias: 5.794e-11 P time: 1.39636e+06 first: 9.430e-02 second: 1.061e-01 infty: 1.586e-01 bias: 1.458e-11 P time: 1.39803e+06 first: 9.464e-02 second: 1.064e-01 infty: 1.596e-01 bias: 4.847e-11 P time: 1.3997e+06 first: 9.441e-02 second: 1.061e-01 infty: 1.599e-01 bias: 3.696e-11 P time: 1.40136e+06 first: 9.365e-02 second: 1.053e-01 infty: 1.596e-01 bias: 4.522e-11 P time: 1.40303e+06 first: 9.252e-02 second: 1.041e-01 infty: 1.590e-01 bias: 6.063e-11 P time: 1.4047e+06 first: 9.118e-02 second: 1.027e-01 infty: 1.581e-01 bias: 2.093e-11 P time: 1.40636e+06 first: 8.983e-02 second: 1.014e-01 infty: 1.577e-01 bias: 3.818e-11 P time: 1.40803e+06 first: 8.866e-02 second: 1.003e-01 infty: 1.578e-01 bias: 5.003e-11 P time: 1.4097e+06 first: 8.785e-02 second: 9.964e-02 infty: 1.583e-01 bias: 7.313e-11 P time: 1.41136e+06 first: 8.744e-02 second: 9.940e-02 infty: 1.595e-01 bias: 1.345e-11 P time: 1.41303e+06 first: 8.751e-02 second: 9.962e-02 infty: 1.610e-01 bias: 3.769e-11 P time: 1.41469e+06 first: 8.799e-02 second: 1.003e-01 infty: 1.628e-01 bias: 2.739e-11 P time: 1.41636e+06 first: 8.884e-02 second: 1.012e-01 infty: 1.645e-01 bias: 4.689e-11 P time: 1.41802e+06 first: 8.998e-02 second: 1.024e-01 infty: 1.663e-01 bias: 4.410e-11 P time: 1.41969e+06 first: 9.126e-02 second: 1.037e-01 infty: 1.683e-01 bias: 3.421e-11 P time: 1.42135e+06 first: 9.256e-02 second: 1.049e-01 infty: 1.700e-01 bias: 2.129e-11 P time: 1.42302e+06 first: 9.374e-02 second: 1.060e-01 infty: 1.714e-01 bias: 1.563e-11 P time: 1.42468e+06 first: 9.467e-02 second: 1.069e-01 infty: 1.727e-01 bias: 5.272e-11 P time: 1.42635e+06 first: 9.526e-02 second: 1.075e-01 infty: 1.738e-01 bias: 1.972e-11 P time: 1.42801e+06 first: 9.549e-02 second: 1.077e-01 infty: 1.748e-01 bias: 1.100e-11 P time: 1.42968e+06 first: 9.532e-02 second: 1.076e-01 infty: 1.767e-01 bias: 5.860e-11 P time: 1.43134e+06 first: 9.477e-02 second: 1.072e-01 infty: 1.783e-01 bias: 4.154e-11 P time: 1.43301e+06 first: 9.394e-02 second: 1.064e-01 infty: 1.796e-01 bias: 3.258e-11 P time: 1.43468e+06 first: 9.289e-02 second: 1.055e-01 infty: 1.806e-01 bias: 2.705e-11 P time: 1.43634e+06 first: 9.175e-02 second: 1.044e-01 infty: 1.814e-01 bias: 4.769e-11 P time: 1.43801e+06 first: 9.065e-02 second: 1.033e-01 infty: 1.821e-01 bias: 6.046e-11 P time: 1.43967e+06 first: 8.977e-02 second: 1.024e-01 infty: 1.828e-01 bias: 7.276e-11 P time: 1.44134e+06 first: 8.922e-02 second: 1.018e-01 infty: 1.837e-01 bias: 3.836e-11 P time: 1.44301e+06 first: 8.912e-02 second: 1.017e-01 infty: 1.851e-01 bias: 4.843e-11 P time: 1.44468e+06 first: 8.956e-02 second: 1.021e-01 infty: 1.869e-01 bias: 4.274e-11 P time: 1.44634e+06 first: 9.052e-02 second: 1.031e-01 infty: 1.893e-01 bias: 8.000e-11 P time: 1.44801e+06 first: 9.194e-02 second: 1.046e-01 infty: 1.922e-01 bias: 6.319e-11 P time: 1.44968e+06 first: 9.367e-02 second: 1.063e-01 infty: 1.953e-01 bias: 5.566e-11 P time: 1.45134e+06 first: 9.550e-02 second: 1.081e-01 infty: 1.984e-01 bias: 4.594e-11 P time: 1.45301e+06 first: 9.719e-02 second: 1.098e-01 infty: 2.012e-01 bias: 2.119e-11 P time: 1.45468e+06 first: 9.854e-02 second: 1.111e-01 infty: 2.035e-01 bias: 1.295e-11 P time: 1.45635e+06 first: 9.938e-02 second: 1.119e-01 infty: 2.050e-01 bias: 6.588e-11 P time: 1.45801e+06 first: 9.963e-02 second: 1.120e-01 infty: 2.057e-01 bias: 8.547e-11 P time: 1.45968e+06 first: 9.929e-02 second: 1.116e-01 infty: 2.058e-01 bias: 5.188e-11 P time: 1.46135e+06 first: 9.844e-02 second: 1.107e-01 infty: 2.054e-01 bias: 2.213e-11 P time: 1.46302e+06 first: 9.724e-02 second: 1.094e-01 infty: 2.046e-01 bias: 5.110e-11 P time: 1.46469e+06 first: 9.588e-02 second: 1.080e-01 infty: 2.039e-01 bias: 1.792e-11 P time: 1.46636e+06 first: 9.455e-02 second: 1.067e-01 infty: 2.033e-01 bias: 1.125e-11 P time: 1.46803e+06 first: 9.344e-02 second: 1.057e-01 infty: 2.031e-01 bias: 4.025e-11 P time: 1.4697e+06 first: 9.270e-02 second: 1.051e-01 infty: 2.034e-01 bias: 2.621e-11 P time: 1.47138e+06 first: 9.240e-02 second: 1.049e-01 infty: 2.040e-01 bias: 5.181e-11 P time: 1.47305e+06 first: 9.260e-02 second: 1.052e-01 infty: 2.049e-01 bias: 4.536e-11 P time: 1.47472e+06 first: 9.326e-02 second: 1.059e-01 infty: 2.061e-01 bias: 6.623e-11 P time: 1.47639e+06 first: 9.430e-02 second: 1.069e-01 infty: 2.072e-01 bias: -1.761e-12 P time: 1.47807e+06 first: 9.563e-02 second: 1.082e-01 infty: 2.083e-01 bias: 3.850e-11 P time: 1.47974e+06 first: 9.714e-02 second: 1.095e-01 infty: 2.092e-01 bias: 2.855e-11 P time: 1.48142e+06 first: 9.865e-02 second: 1.108e-01 infty: 2.099e-01 bias: 2.912e-12 P time: 1.48309e+06 first: 1.001e-01 second: 1.120e-01 infty: 2.104e-01 bias: 1.811e-11 P time: 1.48477e+06 first: 1.012e-01 second: 1.129e-01 infty: 2.108e-01 bias: 2.503e-11 P time: 1.48644e+06 first: 1.020e-01 second: 1.136e-01 infty: 2.110e-01 bias: 6.224e-12 P time: 1.48812e+06 first: 1.024e-01 second: 1.139e-01 infty: 2.110e-01 bias: 4.651e-11 P time: 1.4898e+06 first: 1.023e-01 second: 1.139e-01 infty: 2.108e-01 bias: 4.128e-11 P time: 1.49147e+06 first: 1.018e-01 second: 1.134e-01 infty: 2.104e-01 bias: 3.313e-11 P time: 1.49315e+06 first: 1.010e-01 second: 1.127e-01 infty: 2.097e-01 bias: 5.010e-11 P time: 1.49483e+06 first: 9.990e-02 second: 1.116e-01 infty: 2.087e-01 bias: 4.283e-11 P time: 1.49651e+06 first: 9.873e-02 second: 1.105e-01 infty: 2.073e-01 bias: 3.674e-11 P time: 1.49819e+06 first: 9.762e-02 second: 1.093e-01 infty: 2.057e-01 bias: 1.882e-11 P time: 1.49987e+06 first: 9.673e-02 second: 1.084e-01 infty: 2.039e-01 bias: 2.888e-11 P time: 1.50155e+06 first: 9.616e-02 second: 1.078e-01 infty: 2.021e-01 bias: 4.798e-11 P time: 1.50324e+06 first: 9.604e-02 second: 1.077e-01 infty: 2.005e-01 bias: 3.977e-11 P time: 1.50492e+06 first: 9.649e-02 second: 1.081e-01 infty: 1.991e-01 bias: 3.851e-11 P time: 1.5066e+06 first: 9.743e-02 second: 1.091e-01 infty: 1.982e-01 bias: 3.551e-11 P time: 1.50829e+06 first: 9.877e-02 second: 1.105e-01 infty: 1.978e-01 bias: 5.426e-11 P time: 1.50997e+06 first: 1.004e-01 second: 1.121e-01 infty: 1.977e-01 bias: 3.328e-11 P time: 1.51166e+06 first: 1.020e-01 second: 1.137e-01 infty: 1.979e-01 bias: 5.077e-12 P time: 1.51335e+06 first: 1.035e-01 second: 1.151e-01 infty: 1.981e-01 bias: 1.667e-11 P time: 1.51503e+06 first: 1.045e-01 second: 1.161e-01 infty: 1.980e-01 bias: 2.097e-11 P time: 1.51672e+06 first: 1.050e-01 second: 1.165e-01 infty: 1.973e-01 bias: 1.274e-11 P time: 1.51841e+06 first: 1.049e-01 second: 1.163e-01 infty: 1.960e-01 bias: 2.365e-11 P time: 1.5201e+06 first: 1.043e-01 second: 1.156e-01 infty: 1.939e-01 bias: 7.405e-11 P time: 1.52179e+06 first: 1.032e-01 second: 1.144e-01 infty: 1.912e-01 bias: 1.625e-11 P time: 1.52348e+06 first: 1.018e-01 second: 1.131e-01 infty: 1.880e-01 bias: 3.694e-11 P time: 1.52518e+06 first: 1.004e-01 second: 1.117e-01 infty: 1.847e-01 bias: 5.898e-11 P time: 1.52687e+06 first: 9.909e-02 second: 1.106e-01 infty: 1.814e-01 bias: 2.375e-11 P time: 1.52857e+06 first: 9.815e-02 second: 1.098e-01 infty: 1.784e-01 bias: 5.090e-11 P time: 1.53026e+06 first: 9.764e-02 second: 1.095e-01 infty: 1.762e-01 bias: 4.934e-11 P time: 1.53196e+06 first: 9.762e-02 second: 1.096e-01 infty: 1.764e-01 bias: 2.981e-11 P time: 1.53366e+06 first: 9.805e-02 second: 1.102e-01 infty: 1.768e-01 bias: 3.452e-11 P time: 1.53536e+06 first: 9.890e-02 second: 1.111e-01 infty: 1.772e-01 bias: 4.350e-11 P time: 1.53706e+06 first: 1.000e-01 second: 1.122e-01 infty: 1.776e-01 bias: 5.308e-11 P time: 1.53876e+06 first: 1.014e-01 second: 1.133e-01 infty: 1.781e-01 bias: 8.091e-11 P time: 1.54046e+06 first: 1.027e-01 second: 1.145e-01 infty: 1.784e-01 bias: 3.600e-11 P time: 1.54217e+06 first: 1.040e-01 second: 1.156e-01 infty: 1.785e-01 bias: 3.504e-11 P time: 1.54387e+06 first: 1.050e-01 second: 1.165e-01 infty: 1.785e-01 bias: 2.783e-11 P time: 1.54557e+06 first: 1.057e-01 second: 1.171e-01 infty: 1.785e-01 bias: 5.003e-11 P time: 1.54728e+06 first: 1.059e-01 second: 1.173e-01 infty: 1.784e-01 bias: 2.292e-11 P time: 1.54899e+06 first: 1.057e-01 second: 1.172e-01 infty: 1.783e-01 bias: 6.262e-11 P time: 1.5507e+06 first: 1.051e-01 second: 1.167e-01 infty: 1.781e-01 bias: 5.039e-11 P time: 1.55241e+06 first: 1.040e-01 second: 1.159e-01 infty: 1.781e-01 bias: 4.647e-11 P time: 1.55412e+06 first: 1.027e-01 second: 1.148e-01 infty: 1.778e-01 bias: 5.757e-11 P time: 1.55583e+06 first: 1.013e-01 second: 1.135e-01 infty: 1.771e-01 bias: 5.275e-11 P time: 1.55754e+06 first: 9.986e-02 second: 1.123e-01 infty: 1.761e-01 bias: 6.062e-11 P time: 1.55925e+06 first: 9.869e-02 second: 1.112e-01 infty: 1.749e-01 bias: 3.100e-11 P time: 1.56097e+06 first: 9.791e-02 second: 1.104e-01 infty: 1.737e-01 bias: 7.796e-12 P time: 1.56269e+06 first: 9.763e-02 second: 1.102e-01 infty: 1.727e-01 bias: 2.722e-12 P time: 1.5644e+06 first: 9.797e-02 second: 1.105e-01 infty: 1.723e-01 bias: 5.829e-11 P time: 1.56612e+06 first: 9.889e-02 second: 1.114e-01 infty: 1.725e-01 bias: 5.259e-11 P time: 1.56784e+06 first: 1.003e-01 second: 1.128e-01 infty: 1.732e-01 bias: 6.249e-11 P time: 1.56957e+06 first: 1.019e-01 second: 1.144e-01 infty: 1.749e-01 bias: 2.524e-11 P time: 1.57129e+06 first: 1.037e-01 second: 1.161e-01 infty: 1.766e-01 bias: 2.735e-11 P time: 1.57301e+06 first: 1.052e-01 second: 1.176e-01 infty: 1.782e-01 bias: 7.125e-11 P time: 1.57474e+06 first: 1.064e-01 second: 1.187e-01 infty: 1.792e-01 bias: 3.884e-11 P time: 1.57646e+06 first: 1.070e-01 second: 1.192e-01 infty: 1.797e-01 bias: 6.784e-11 P time: 1.57818e+06 first: 1.070e-01 second: 1.191e-01 infty: 1.796e-01 bias: 4.808e-11 P time: 1.5799e+06 first: 1.064e-01 second: 1.184e-01 infty: 1.788e-01 bias: 1.048e-11 P time: 1.58163e+06 first: 1.053e-01 second: 1.173e-01 infty: 1.776e-01 bias: 5.199e-11 P time: 1.58335e+06 first: 1.039e-01 second: 1.159e-01 infty: 1.763e-01 bias: 3.395e-11 P time: 1.58508e+06 first: 1.025e-01 second: 1.146e-01 infty: 1.749e-01 bias: 2.376e-11 P time: 1.5868e+06 first: 1.012e-01 second: 1.134e-01 infty: 1.737e-01 bias: 5.476e-11 P time: 1.58853e+06 first: 1.003e-01 second: 1.127e-01 infty: 1.729e-01 bias: 2.729e-11 P time: 1.59025e+06 first: 9.981e-02 second: 1.124e-01 infty: 1.727e-01 bias: 3.300e-11 P time: 1.59198e+06 first: 9.983e-02 second: 1.125e-01 infty: 1.731e-01 bias: 2.962e-11 P time: 1.59371e+06 first: 1.003e-01 second: 1.131e-01 infty: 1.736e-01 bias: 2.984e-11 P time: 1.59543e+06 first: 1.012e-01 second: 1.140e-01 infty: 1.740e-01 bias: 6.984e-11 P time: 1.59716e+06 first: 1.024e-01 second: 1.150e-01 infty: 1.743e-01 bias: 3.731e-11 P time: 1.59889e+06 first: 1.037e-01 second: 1.161e-01 infty: 1.744e-01 bias: 1.576e-11 P time: 1.60062e+06 first: 1.050e-01 second: 1.171e-01 infty: 1.746e-01 bias: 5.351e-11 P time: 1.60234e+06 first: 1.061e-01 second: 1.180e-01 infty: 1.747e-01 bias: 5.601e-11 P time: 1.60407e+06 first: 1.071e-01 second: 1.187e-01 infty: 1.747e-01 bias: 4.668e-11 P time: 1.6058e+06 first: 1.077e-01 second: 1.192e-01 infty: 1.747e-01 bias: 2.410e-11 P time: 1.60752e+06 first: 1.078e-01 second: 1.194e-01 infty: 1.746e-01 bias: 2.830e-11 P time: 1.60925e+06 first: 1.076e-01 second: 1.192e-01 infty: 1.745e-01 bias: 4.757e-11 P time: 1.61098e+06 first: 1.070e-01 second: 1.188e-01 infty: 1.743e-01 bias: 3.090e-11 P time: 1.6127e+06 first: 1.061e-01 second: 1.180e-01 infty: 1.744e-01 bias: 4.444e-11 P time: 1.61443e+06 first: 1.051e-01 second: 1.171e-01 infty: 1.743e-01 bias: 4.362e-11 P time: 1.61615e+06 first: 1.040e-01 second: 1.161e-01 infty: 1.740e-01 bias: 2.001e-11 P time: 1.61788e+06 first: 1.030e-01 second: 1.151e-01 infty: 1.733e-01 bias: 5.534e-11 P time: 1.6196e+06 first: 1.024e-01 second: 1.144e-01 infty: 1.725e-01 bias: 4.615e-11 P time: 1.62133e+06 first: 1.021e-01 second: 1.140e-01 infty: 1.717e-01 bias: 3.117e-11 P time: 1.62305e+06 first: 1.024e-01 second: 1.141e-01 infty: 1.711e-01 bias: 2.188e-11 P time: 1.62477e+06 first: 1.031e-01 second: 1.147e-01 infty: 1.708e-01 bias: 4.448e-11 P time: 1.6265e+06 first: 1.043e-01 second: 1.158e-01 infty: 1.715e-01 bias: 5.144e-11 P time: 1.62822e+06 first: 1.058e-01 second: 1.171e-01 infty: 1.729e-01 bias: 4.990e-11 P time: 1.62994e+06 first: 1.073e-01 second: 1.187e-01 infty: 1.745e-01 bias: 4.897e-11 P time: 1.63166e+06 first: 1.089e-01 second: 1.201e-01 infty: 1.761e-01 bias: 4.358e-11 P time: 1.63338e+06 first: 1.101e-01 second: 1.213e-01 infty: 1.775e-01 bias: 5.778e-11 P time: 1.6351e+06 first: 1.109e-01 second: 1.220e-01 infty: 1.785e-01 bias: 3.229e-11 P time: 1.63682e+06 first: 1.111e-01 second: 1.221e-01 infty: 1.788e-01 bias: 4.048e-11 P time: 1.63853e+06 first: 1.108e-01 second: 1.217e-01 infty: 1.786e-01 bias: 4.935e-11 P time: 1.64025e+06 first: 1.099e-01 second: 1.208e-01 infty: 1.778e-01 bias: 5.613e-11 P time: 1.64196e+06 first: 1.087e-01 second: 1.196e-01 infty: 1.766e-01 bias: 5.093e-11 P time: 1.64368e+06 first: 1.073e-01 second: 1.183e-01 infty: 1.762e-01 bias: 5.549e-11 P time: 1.64539e+06 first: 1.059e-01 second: 1.171e-01 infty: 1.759e-01 bias: 9.910e-12 P time: 1.6471e+06 first: 1.048e-01 second: 1.162e-01 infty: 1.759e-01 bias: 5.017e-11 P time: 1.64881e+06 first: 1.040e-01 second: 1.157e-01 infty: 1.763e-01 bias: 4.620e-11 P time: 1.65052e+06 first: 1.038e-01 second: 1.156e-01 infty: 1.769e-01 bias: 5.722e-12 P time: 1.65223e+06 first: 1.040e-01 second: 1.160e-01 infty: 1.778e-01 bias: 5.186e-11 P time: 1.65394e+06 first: 1.047e-01 second: 1.168e-01 infty: 1.788e-01 bias: 4.313e-11 P time: 1.65565e+06 first: 1.058e-01 second: 1.178e-01 infty: 1.801e-01 bias: 3.952e-11 P time: 1.65736e+06 first: 1.070e-01 second: 1.188e-01 infty: 1.816e-01 bias: 2.065e-11 P time: 1.65906e+06 first: 1.083e-01 second: 1.199e-01 infty: 1.828e-01 bias: 2.716e-11 P time: 1.66077e+06 first: 1.095e-01 second: 1.209e-01 infty: 1.838e-01 bias: 8.301e-11 P time: 1.66247e+06 first: 1.105e-01 second: 1.217e-01 infty: 1.848e-01 bias: 4.296e-11 P time: 1.66418e+06 first: 1.112e-01 second: 1.222e-01 infty: 1.857e-01 bias: 3.623e-11 P time: 1.66588e+06 first: 1.116e-01 second: 1.226e-01 infty: 1.866e-01 bias: 3.431e-11 P time: 1.66758e+06 first: 1.115e-01 second: 1.226e-01 infty: 1.875e-01 bias: 2.996e-11 P time: 1.66928e+06 first: 1.111e-01 second: 1.224e-01 infty: 1.882e-01 bias: 3.059e-11 P time: 1.67098e+06 first: 1.104e-01 second: 1.219e-01 infty: 1.889e-01 bias: 1.517e-11 P time: 1.67268e+06 first: 1.094e-01 second: 1.211e-01 infty: 1.892e-01 bias: 4.214e-11 P time: 1.67438e+06 first: 1.083e-01 second: 1.202e-01 infty: 1.892e-01 bias: 4.639e-11 P time: 1.67607e+06 first: 1.071e-01 second: 1.193e-01 infty: 1.889e-01 bias: 5.224e-11 P time: 1.67777e+06 first: 1.061e-01 second: 1.184e-01 infty: 1.889e-01 bias: 4.217e-11 P time: 1.67947e+06 first: 1.053e-01 second: 1.178e-01 infty: 1.889e-01 bias: 3.641e-11 P time: 1.68116e+06 first: 1.050e-01 second: 1.175e-01 infty: 1.891e-01 bias: 5.149e-11 P time: 1.68285e+06 first: 1.050e-01 second: 1.176e-01 infty: 1.894e-01 bias: 4.853e-11 P time: 1.68455e+06 first: 1.055e-01 second: 1.181e-01 infty: 1.900e-01 bias: 2.233e-11 P time: 1.68624e+06 first: 1.064e-01 second: 1.189e-01 infty: 1.910e-01 bias: 4.913e-11 P time: 1.68793e+06 first: 1.075e-01 second: 1.201e-01 infty: 1.923e-01 bias: 3.260e-11 P time: 1.68962e+06 first: 1.087e-01 second: 1.213e-01 infty: 1.937e-01 bias: 4.383e-11 P time: 1.69131e+06 first: 1.098e-01 second: 1.225e-01 infty: 1.951e-01 bias: 4.761e-11 P time: 1.693e+06 first: 1.107e-01 second: 1.234e-01 infty: 1.963e-01 bias: 2.286e-11 P time: 1.69469e+06 first: 1.112e-01 second: 1.239e-01 infty: 1.973e-01 bias: 3.879e-11 P time: 1.69637e+06 first: 1.113e-01 second: 1.240e-01 infty: 1.977e-01 bias: 6.250e-11 P time: 1.69806e+06 first: 1.109e-01 second: 1.237e-01 infty: 1.977e-01 bias: 4.629e-11 P time: 1.69974e+06 first: 1.101e-01 second: 1.229e-01 infty: 1.971e-01 bias: 3.969e-11 P time: 1.70143e+06 first: 1.090e-01 second: 1.219e-01 infty: 1.962e-01 bias: 4.436e-11 P time: 1.70311e+06 first: 1.078e-01 second: 1.208e-01 infty: 1.951e-01 bias: 4.262e-11 P time: 1.7048e+06 first: 1.067e-01 second: 1.198e-01 infty: 1.946e-01 bias: 6.817e-11 P time: 1.70648e+06 first: 1.058e-01 second: 1.191e-01 infty: 1.948e-01 bias: 1.895e-11 P time: 1.70816e+06 first: 1.053e-01 second: 1.187e-01 infty: 1.951e-01 bias: 4.496e-11 P time: 1.70984e+06 first: 1.051e-01 second: 1.188e-01 infty: 1.957e-01 bias: 7.483e-11 P time: 1.71152e+06 first: 1.053e-01 second: 1.192e-01 infty: 1.964e-01 bias: 3.972e-11 P time: 1.7132e+06 first: 1.059e-01 second: 1.199e-01 infty: 1.972e-01 bias: 9.205e-12 P time: 1.71488e+06 first: 1.068e-01 second: 1.208e-01 infty: 1.979e-01 bias: 5.841e-11 P time: 1.71656e+06 first: 1.078e-01 second: 1.217e-01 infty: 1.984e-01 bias: 2.664e-11 P time: 1.71823e+06 first: 1.088e-01 second: 1.225e-01 infty: 1.990e-01 bias: 3.506e-11 P time: 1.71991e+06 first: 1.097e-01 second: 1.233e-01 infty: 1.993e-01 bias: 3.357e-11 P time: 1.72159e+06 first: 1.104e-01 second: 1.239e-01 infty: 1.994e-01 bias: -1.170e-11 P time: 1.72326e+06 first: 1.109e-01 second: 1.242e-01 infty: 1.993e-01 bias: 2.725e-11 P time: 1.72494e+06 first: 1.111e-01 second: 1.244e-01 infty: 1.991e-01 bias: 6.580e-11 P time: 1.72661e+06 first: 1.110e-01 second: 1.243e-01 infty: 1.988e-01 bias: 2.444e-11 P time: 1.72829e+06 first: 1.106e-01 second: 1.241e-01 infty: 1.985e-01 bias: 5.178e-11 P time: 1.72996e+06 first: 1.100e-01 second: 1.236e-01 infty: 1.980e-01 bias: 3.325e-11 P time: 1.73163e+06 first: 1.092e-01 second: 1.229e-01 infty: 1.973e-01 bias: -1.686e-12 P time: 1.73331e+06 first: 1.083e-01 second: 1.221e-01 infty: 1.965e-01 bias: 2.172e-11 P time: 1.73498e+06 first: 1.074e-01 second: 1.213e-01 infty: 1.961e-01 bias: 6.204e-11 P time: 1.73665e+06 first: 1.066e-01 second: 1.206e-01 infty: 1.955e-01 bias: 2.794e-11 P time: 1.73832e+06 first: 1.062e-01 second: 1.200e-01 infty: 1.947e-01 bias: 4.099e-11 P time: 1.73999e+06 first: 1.060e-01 second: 1.198e-01 infty: 1.939e-01 bias: 3.359e-11 P time: 1.74166e+06 first: 1.062e-01 second: 1.199e-01 infty: 1.932e-01 bias: 2.987e-11 P time: 1.74333e+06 first: 1.068e-01 second: 1.204e-01 infty: 1.928e-01 bias: 2.503e-11 P time: 1.745e+06 first: 1.078e-01 second: 1.212e-01 infty: 1.928e-01 bias: 4.219e-11 P time: 1.74667e+06 first: 1.089e-01 second: 1.223e-01 infty: 1.931e-01 bias: 5.226e-11 P time: 1.74833e+06 first: 1.101e-01 second: 1.234e-01 infty: 1.937e-01 bias: 5.702e-11 P time: 1.75e+06 first: 1.113e-01 second: 1.246e-01 infty: 1.944e-01 bias: 4.846e-11 P time: 1.75167e+06 first: 1.123e-01 second: 1.255e-01 infty: 1.951e-01 bias: 9.599e-12 P time: 1.75334e+06 first: 1.130e-01 second: 1.262e-01 infty: 1.956e-01 bias: 7.097e-11 P time: 1.75501e+06 first: 1.133e-01 second: 1.264e-01 infty: 1.955e-01 bias: -1.002e-12 P time: 1.75667e+06 first: 1.132e-01 second: 1.262e-01 infty: 1.949e-01 bias: 5.084e-11 P time: 1.75834e+06 first: 1.128e-01 second: 1.257e-01 infty: 1.938e-01 bias: 2.387e-11 P time: 1.76e+06 first: 1.120e-01 second: 1.248e-01 infty: 1.926e-01 bias: 5.160e-11 P time: 1.76167e+06 first: 1.111e-01 second: 1.238e-01 infty: 1.914e-01 bias: 5.381e-11 P time: 1.76333e+06 first: 1.101e-01 second: 1.228e-01 infty: 1.901e-01 bias: 2.352e-11 P time: 1.765e+06 first: 1.093e-01 second: 1.220e-01 infty: 1.890e-01 bias: 6.135e-11 P time: 1.76666e+06 first: 1.087e-01 second: 1.215e-01 infty: 1.880e-01 bias: 6.977e-12 P time: 1.76833e+06 first: 1.084e-01 second: 1.214e-01 infty: 1.874e-01 bias: 5.994e-11 P time: 1.76999e+06 first: 1.085e-01 second: 1.216e-01 infty: 1.870e-01 bias: 1.003e-11 P time: 1.77165e+06 first: 1.089e-01 second: 1.222e-01 infty: 1.867e-01 bias: 4.279e-11 P time: 1.77332e+06 first: 1.096e-01 second: 1.229e-01 infty: 1.866e-01 bias: 1.818e-11 P time: 1.77498e+06 first: 1.105e-01 second: 1.237e-01 infty: 1.869e-01 bias: 5.289e-11 P time: 1.77664e+06 first: 1.115e-01 second: 1.246e-01 infty: 1.875e-01 bias: 5.605e-11 P time: 1.77831e+06 first: 1.124e-01 second: 1.253e-01 infty: 1.880e-01 bias: 4.757e-11 P time: 1.77997e+06 first: 1.131e-01 second: 1.258e-01 infty: 1.882e-01 bias: 6.628e-11 P time: 1.78163e+06 first: 1.136e-01 second: 1.262e-01 infty: 1.883e-01 bias: 3.905e-11 P time: 1.7833e+06 first: 1.139e-01 second: 1.264e-01 infty: 1.883e-01 bias: 4.991e-11 P time: 1.78496e+06 first: 1.140e-01 second: 1.264e-01 infty: 1.882e-01 bias: 5.271e-11 P time: 1.78662e+06 first: 1.138e-01 second: 1.262e-01 infty: 1.880e-01 bias: 2.765e-11 P time: 1.78829e+06 first: 1.134e-01 second: 1.259e-01 infty: 1.881e-01 bias: 6.388e-11 P time: 1.78995e+06 first: 1.128e-01 second: 1.254e-01 infty: 1.886e-01 bias: 1.871e-11 P time: 1.79161e+06 first: 1.120e-01 second: 1.249e-01 infty: 1.891e-01 bias: 2.574e-11 P time: 1.79328e+06 first: 1.112e-01 second: 1.243e-01 infty: 1.893e-01 bias: 4.936e-11 P time: 1.79494e+06 first: 1.105e-01 second: 1.237e-01 infty: 1.893e-01 bias: 5.131e-11 P time: 1.7966e+06 first: 1.100e-01 second: 1.232e-01 infty: 1.891e-01 bias: 4.234e-11 P time: 1.79827e+06 first: 1.096e-01 second: 1.229e-01 infty: 1.892e-01 bias: 4.411e-11 P time: 1.79993e+06 first: 1.096e-01 second: 1.229e-01 infty: 1.899e-01 bias: 5.006e-11 P time: 1.80159e+06 first: 1.098e-01 second: 1.232e-01 infty: 1.907e-01 bias: 4.011e-11 P time: 1.80326e+06 first: 1.104e-01 second: 1.237e-01 infty: 1.918e-01 bias: 6.493e-11 P time: 1.80492e+06 first: 1.112e-01 second: 1.245e-01 infty: 1.931e-01 bias: 5.082e-11 P time: 1.80658e+06 first: 1.120e-01 second: 1.254e-01 infty: 1.946e-01 bias: 5.485e-11 P time: 1.80825e+06 first: 1.129e-01 second: 1.263e-01 infty: 1.962e-01 bias: 1.696e-11 P time: 1.80991e+06 first: 1.137e-01 second: 1.271e-01 infty: 1.978e-01 bias: 3.856e-11 P time: 1.81158e+06 first: 1.142e-01 second: 1.277e-01 infty: 1.996e-01 bias: 4.204e-11 P time: 1.81324e+06 first: 1.144e-01 second: 1.280e-01 infty: 2.010e-01 bias: 2.263e-11 P time: 1.81491e+06 first: 1.142e-01 second: 1.278e-01 infty: 2.019e-01 bias: 3.070e-11 P time: 1.81657e+06 first: 1.137e-01 second: 1.273e-01 infty: 2.023e-01 bias: 5.860e-11 P time: 1.81824e+06 first: 1.128e-01 second: 1.265e-01 infty: 2.023e-01 bias: 7.045e-11 P time: 1.81991e+06 first: 1.117e-01 second: 1.255e-01 infty: 2.021e-01 bias: 2.640e-11 P time: 1.82157e+06 first: 1.105e-01 second: 1.244e-01 infty: 2.019e-01 bias: 1.801e-11 P time: 1.82324e+06 first: 1.094e-01 second: 1.234e-01 infty: 2.018e-01 bias: 7.040e-11 P time: 1.82491e+06 first: 1.085e-01 second: 1.227e-01 infty: 2.020e-01 bias: 6.121e-11 P time: 1.82658e+06 first: 1.080e-01 second: 1.224e-01 infty: 2.025e-01 bias: 4.903e-11 P time: 1.82824e+06 first: 1.079e-01 second: 1.225e-01 infty: 2.033e-01 bias: 5.634e-11 P time: 1.82991e+06 first: 1.082e-01 second: 1.229e-01 infty: 2.044e-01 bias: 3.602e-11 P time: 1.83158e+06 first: 1.088e-01 second: 1.237e-01 infty: 2.056e-01 bias: 3.736e-11 P time: 1.83325e+06 first: 1.096e-01 second: 1.245e-01 infty: 2.067e-01 bias: 4.523e-11 P time: 1.83492e+06 first: 1.105e-01 second: 1.254e-01 infty: 2.078e-01 bias: 2.907e-11 P time: 1.83659e+06 first: 1.113e-01 second: 1.262e-01 infty: 2.090e-01 bias: 4.104e-11 P time: 1.83826e+06 first: 1.120e-01 second: 1.267e-01 infty: 2.100e-01 bias: 2.685e-11 P time: 1.83992e+06 first: 1.124e-01 second: 1.270e-01 infty: 2.106e-01 bias: 3.131e-11 P time: 1.84159e+06 first: 1.126e-01 second: 1.271e-01 infty: 2.110e-01 bias: 1.644e-11 P time: 1.84326e+06 first: 1.125e-01 second: 1.270e-01 infty: 2.112e-01 bias: 5.871e-11 P time: 1.84493e+06 first: 1.122e-01 second: 1.267e-01 infty: 2.114e-01 bias: 6.646e-11 P time: 1.8466e+06 first: 1.116e-01 second: 1.262e-01 infty: 2.115e-01 bias: -1.469e-11 P time: 1.84827e+06 first: 1.109e-01 second: 1.256e-01 infty: 2.115e-01 bias: 2.316e-11 P time: 1.84994e+06 first: 1.101e-01 second: 1.249e-01 infty: 2.115e-01 bias: 5.422e-11 P time: 1.85161e+06 first: 1.093e-01 second: 1.242e-01 infty: 2.113e-01 bias: 2.158e-11 P time: 1.85328e+06 first: 1.085e-01 second: 1.236e-01 infty: 2.110e-01 bias: 4.748e-11 P time: 1.85495e+06 first: 1.078e-01 second: 1.230e-01 infty: 2.105e-01 bias: 2.192e-11 P time: 1.85662e+06 first: 1.073e-01 second: 1.225e-01 infty: 2.098e-01 bias: 5.041e-11 P time: 1.85829e+06 first: 1.071e-01 second: 1.223e-01 infty: 2.091e-01 bias: 2.169e-11 P time: 1.85996e+06 first: 1.072e-01 second: 1.223e-01 infty: 2.084e-01 bias: 6.798e-11 P time: 1.86163e+06 first: 1.076e-01 second: 1.226e-01 infty: 2.077e-01 bias: 6.316e-11 P time: 1.8633e+06 first: 1.082e-01 second: 1.232e-01 infty: 2.073e-01 bias: 5.347e-11 P time: 1.86497e+06 first: 1.090e-01 second: 1.239e-01 infty: 2.071e-01 bias: 1.764e-11 P time: 1.86664e+06 first: 1.098e-01 second: 1.247e-01 infty: 2.074e-01 bias: 4.052e-11 P time: 1.86831e+06 first: 1.106e-01 second: 1.255e-01 infty: 2.083e-01 bias: 5.297e-11 P time: 1.86998e+06 first: 1.112e-01 second: 1.261e-01 infty: 2.091e-01 bias: 3.188e-11 P time: 1.87165e+06 first: 1.116e-01 second: 1.264e-01 infty: 2.096e-01 bias: 2.655e-11 P time: 1.87332e+06 first: 1.116e-01 second: 1.264e-01 infty: 2.098e-01 bias: 3.500e-11 P time: 1.87499e+06 first: 1.113e-01 second: 1.260e-01 infty: 2.094e-01 bias: 4.669e-11 P time: 1.87666e+06 first: 1.107e-01 second: 1.253e-01 infty: 2.085e-01 bias: 9.748e-12 P time: 1.87833e+06 first: 1.099e-01 second: 1.244e-01 infty: 2.072e-01 bias: 1.842e-11 P time: 1.88e+06 first: 1.089e-01 second: 1.233e-01 infty: 2.056e-01 bias: 2.169e-11 P time: 1.88167e+06 first: 1.080e-01 second: 1.223e-01 infty: 2.039e-01 bias: 3.113e-11 P time: 1.88334e+06 first: 1.072e-01 second: 1.215e-01 infty: 2.023e-01 bias: 2.394e-11 P time: 1.88501e+06 first: 1.068e-01 second: 1.210e-01 infty: 2.009e-01 bias: 3.168e-11 P time: 1.88668e+06 first: 1.066e-01 second: 1.209e-01 infty: 1.999e-01 bias: 3.184e-11 P time: 1.88835e+06 first: 1.069e-01 second: 1.212e-01 infty: 1.992e-01 bias: 3.799e-11 P time: 1.89001e+06 first: 1.075e-01 second: 1.219e-01 infty: 1.987e-01 bias: 3.493e-11 P time: 1.89168e+06 first: 1.083e-01 second: 1.227e-01 infty: 1.984e-01 bias: 4.866e-11 P time: 1.89335e+06 first: 1.093e-01 second: 1.236e-01 infty: 1.988e-01 bias: 2.171e-11 P time: 1.89502e+06 first: 1.102e-01 second: 1.245e-01 infty: 1.991e-01 bias: 2.177e-11 P time: 1.89669e+06 first: 1.109e-01 second: 1.251e-01 infty: 1.991e-01 bias: 5.709e-11 P time: 1.89836e+06 first: 1.114e-01 second: 1.255e-01 infty: 1.987e-01 bias: 4.077e-11 P time: 1.90003e+06 first: 1.117e-01 second: 1.255e-01 infty: 1.980e-01 bias: 5.877e-11 P time: 1.9017e+06 first: 1.116e-01 second: 1.253e-01 infty: 1.970e-01 bias: 7.532e-11 P time: 1.90337e+06 first: 1.113e-01 second: 1.249e-01 infty: 1.959e-01 bias: 5.156e-11 P time: 1.90504e+06 first: 1.108e-01 second: 1.244e-01 infty: 1.947e-01 bias: 2.601e-11 P time: 1.90671e+06 first: 1.101e-01 second: 1.237e-01 infty: 1.935e-01 bias: 6.650e-11 P time: 1.90838e+06 first: 1.094e-01 second: 1.230e-01 infty: 1.922e-01 bias: 1.988e-11 P time: 1.91005e+06 first: 1.086e-01 second: 1.223e-01 infty: 1.912e-01 bias: 4.588e-11 P time: 1.91172e+06 first: 1.079e-01 second: 1.217e-01 infty: 1.902e-01 bias: 3.325e-11 P time: 1.91339e+06 first: 1.073e-01 second: 1.212e-01 infty: 1.899e-01 bias: 8.308e-11 P time: 1.91507e+06 first: 1.070e-01 second: 1.209e-01 infty: 1.895e-01 bias: 4.941e-11 P time: 1.91674e+06 first: 1.069e-01 second: 1.208e-01 infty: 1.890e-01 bias: 5.333e-12 P time: 1.91841e+06 first: 1.071e-01 second: 1.210e-01 infty: 1.884e-01 bias: 5.941e-11 P time: 1.92008e+06 first: 1.076e-01 second: 1.215e-01 infty: 1.879e-01 bias: 2.947e-12 P time: 1.92176e+06 first: 1.083e-01 second: 1.222e-01 infty: 1.880e-01 bias: 8.766e-11 P time: 1.92343e+06 first: 1.093e-01 second: 1.231e-01 infty: 1.887e-01 bias: 2.868e-11 P time: 1.9251e+06 first: 1.102e-01 second: 1.240e-01 infty: 1.896e-01 bias: 3.450e-11 P time: 1.92677e+06 first: 1.112e-01 second: 1.249e-01 infty: 1.905e-01 bias: 4.441e-11 P time: 1.92844e+06 first: 1.119e-01 second: 1.256e-01 infty: 1.914e-01 bias: 5.569e-11 P time: 1.93012e+06 first: 1.124e-01 second: 1.261e-01 infty: 1.925e-01 bias: 3.504e-11 P time: 1.93179e+06 first: 1.126e-01 second: 1.263e-01 infty: 1.934e-01 bias: 2.066e-11 P time: 1.93346e+06 first: 1.124e-01 second: 1.261e-01 infty: 1.939e-01 bias: 2.574e-11 P time: 1.93513e+06 first: 1.119e-01 second: 1.255e-01 infty: 1.939e-01 bias: 1.958e-11 P time: 1.9368e+06 first: 1.111e-01 second: 1.247e-01 infty: 1.936e-01 bias: 3.734e-11 P time: 1.93847e+06 first: 1.101e-01 second: 1.237e-01 infty: 1.930e-01 bias: 5.721e-12 P time: 1.94015e+06 first: 1.090e-01 second: 1.226e-01 infty: 1.925e-01 bias: 3.574e-11 P time: 1.94182e+06 first: 1.081e-01 second: 1.218e-01 infty: 1.921e-01 bias: 1.262e-11 P time: 1.94349e+06 first: 1.074e-01 second: 1.212e-01 infty: 1.922e-01 bias: -2.126e-12 P time: 1.94516e+06 first: 1.071e-01 second: 1.210e-01 infty: 1.932e-01 bias: 6.170e-11 P time: 1.94683e+06 first: 1.071e-01 second: 1.212e-01 infty: 1.945e-01 bias: 2.125e-11 P time: 1.9485e+06 first: 1.076e-01 second: 1.219e-01 infty: 1.960e-01 bias: 2.592e-11 P time: 1.95017e+06 first: 1.084e-01 second: 1.228e-01 infty: 1.977e-01 bias: 7.030e-12 P time: 1.95184e+06 first: 1.094e-01 second: 1.239e-01 infty: 1.994e-01 bias: 3.764e-11 P time: 1.95351e+06 first: 1.105e-01 second: 1.250e-01 infty: 2.010e-01 bias: 6.903e-11 P time: 1.95518e+06 first: 1.114e-01 second: 1.259e-01 infty: 2.026e-01 bias: 3.449e-11 P time: 1.95685e+06 first: 1.122e-01 second: 1.266e-01 infty: 2.038e-01 bias: 3.357e-11 P time: 1.95851e+06 first: 1.127e-01 second: 1.270e-01 infty: 2.047e-01 bias: 1.710e-11 P time: 1.96018e+06 first: 1.129e-01 second: 1.271e-01 infty: 2.052e-01 bias: 4.790e-11 P time: 1.96185e+06 first: 1.128e-01 second: 1.269e-01 infty: 2.057e-01 bias: 1.433e-11 P time: 1.96352e+06 first: 1.125e-01 second: 1.265e-01 infty: 2.062e-01 bias: 1.264e-11 P time: 1.96519e+06 first: 1.120e-01 second: 1.260e-01 infty: 2.067e-01 bias: 4.741e-11 P time: 1.96687e+06 first: 1.113e-01 second: 1.254e-01 infty: 2.073e-01 bias: 4.789e-11 P time: 1.96854e+06 first: 1.107e-01 second: 1.248e-01 infty: 2.079e-01 bias: 3.943e-11 P time: 1.97021e+06 first: 1.101e-01 second: 1.243e-01 infty: 2.084e-01 bias: 4.852e-11 P time: 1.97188e+06 first: 1.095e-01 second: 1.238e-01 infty: 2.097e-01 bias: 5.603e-11 P time: 1.97355e+06 first: 1.092e-01 second: 1.236e-01 infty: 2.114e-01 bias: 1.797e-11 P time: 1.97523e+06 first: 1.092e-01 second: 1.236e-01 infty: 2.130e-01 bias: 4.567e-11 P time: 1.9769e+06 first: 1.093e-01 second: 1.238e-01 infty: 2.146e-01 bias: 2.484e-11 P time: 1.97857e+06 first: 1.098e-01 second: 1.243e-01 infty: 2.163e-01 bias: 2.934e-11 P time: 1.98024e+06 first: 1.105e-01 second: 1.250e-01 infty: 2.181e-01 bias: 5.865e-11 P time: 1.98191e+06 first: 1.115e-01 second: 1.259e-01 infty: 2.200e-01 bias: 2.936e-11 P time: 1.98358e+06 first: 1.125e-01 second: 1.269e-01 infty: 2.219e-01 bias: 4.932e-11 P time: 1.98526e+06 first: 1.135e-01 second: 1.279e-01 infty: 2.239e-01 bias: 3.922e-11 P time: 1.98693e+06 first: 1.144e-01 second: 1.287e-01 infty: 2.257e-01 bias: 1.646e-11 P time: 1.9886e+06 first: 1.150e-01 second: 1.293e-01 infty: 2.273e-01 bias: 6.793e-11 P time: 1.99027e+06 first: 1.153e-01 second: 1.296e-01 infty: 2.284e-01 bias: 1.601e-11 P time: 1.99195e+06 first: 1.152e-01 second: 1.295e-01 infty: 2.291e-01 bias: 6.537e-11 P time: 1.99362e+06 first: 1.148e-01 second: 1.290e-01 infty: 2.293e-01 bias: 4.718e-11 P time: 1.9953e+06 first: 1.141e-01 second: 1.283e-01 infty: 2.292e-01 bias: 3.447e-11 P time: 1.99697e+06 first: 1.132e-01 second: 1.274e-01 infty: 2.287e-01 bias: 4.999e-11 P time: 1.99865e+06 first: 1.123e-01 second: 1.264e-01 infty: 2.281e-01 bias: 4.081e-11 P time: 2.00033e+06 first: 1.114e-01 second: 1.255e-01 infty: 2.275e-01 bias: 4.408e-11 P time: 2.002e+06 first: 1.108e-01 second: 1.248e-01 infty: 2.271e-01 bias: 5.437e-11 P time: 2.00368e+06 first: 1.106e-01 second: 1.246e-01 infty: 2.271e-01 bias: 4.166e-11 P time: 2.00536e+06 first: 1.107e-01 second: 1.247e-01 infty: 2.274e-01 bias: 2.317e-11 P time: 2.00704e+06 first: 1.113e-01 second: 1.253e-01 infty: 2.280e-01 bias: 4.508e-11 P time: 2.00872e+06 first: 1.123e-01 second: 1.263e-01 infty: 2.288e-01 bias: 2.290e-11 P time: 2.0104e+06 first: 1.135e-01 second: 1.275e-01 infty: 2.298e-01 bias: 5.717e-11 P time: 2.01207e+06 first: 1.148e-01 second: 1.288e-01 infty: 2.307e-01 bias: 2.324e-11 P time: 2.01375e+06 first: 1.161e-01 second: 1.299e-01 infty: 2.315e-01 bias: 4.510e-12 P time: 2.01543e+06 first: 1.171e-01 second: 1.308e-01 infty: 2.319e-01 bias: 1.859e-11 P time: 2.01711e+06 first: 1.179e-01 second: 1.314e-01 infty: 2.319e-01 bias: 4.184e-11 P time: 2.01879e+06 first: 1.182e-01 second: 1.316e-01 infty: 2.315e-01 bias: 5.604e-11 P time: 2.02047e+06 first: 1.182e-01 second: 1.315e-01 infty: 2.307e-01 bias: 2.643e-11 P time: 2.02215e+06 first: 1.179e-01 second: 1.311e-01 infty: 2.297e-01 bias: 2.963e-11 P time: 2.02384e+06 first: 1.173e-01 second: 1.304e-01 infty: 2.284e-01 bias: 4.000e-11 P time: 2.02552e+06 first: 1.165e-01 second: 1.296e-01 infty: 2.270e-01 bias: 7.459e-11 P time: 2.02721e+06 first: 1.156e-01 second: 1.288e-01 infty: 2.256e-01 bias: 3.459e-11 P time: 2.02889e+06 first: 1.148e-01 second: 1.281e-01 infty: 2.242e-01 bias: 3.335e-11 P time: 2.03058e+06 first: 1.141e-01 second: 1.274e-01 infty: 2.228e-01 bias: 5.997e-11 P time: 2.03226e+06 first: 1.136e-01 second: 1.270e-01 infty: 2.214e-01 bias: 1.581e-11 P time: 2.03394e+06 first: 1.133e-01 second: 1.268e-01 infty: 2.199e-01 bias: -8.373e-12 P time: 2.03563e+06 first: 1.134e-01 second: 1.268e-01 infty: 2.183e-01 bias: 5.979e-11 P time: 2.03731e+06 first: 1.138e-01 second: 1.272e-01 infty: 2.167e-01 bias: 5.577e-11 P time: 2.039e+06 first: 1.146e-01 second: 1.279e-01 infty: 2.151e-01 bias: 4.311e-11 P time: 2.04068e+06 first: 1.155e-01 second: 1.287e-01 infty: 2.135e-01 bias: 8.227e-11 P time: 2.04238e+06 first: 1.167e-01 second: 1.297e-01 infty: 2.119e-01 bias: 6.573e-11 P time: 2.04407e+06 first: 1.178e-01 second: 1.308e-01 infty: 2.106e-01 bias: 5.603e-11 P time: 2.04576e+06 first: 1.188e-01 second: 1.317e-01 infty: 2.094e-01 bias: 4.504e-11 P time: 2.04746e+06 first: 1.195e-01 second: 1.324e-01 infty: 2.083e-01 bias: 4.486e-11 P time: 2.04915e+06 first: 1.199e-01 second: 1.328e-01 infty: 2.072e-01 bias: 6.836e-11 P time: 2.05084e+06 first: 1.199e-01 second: 1.328e-01 infty: 2.059e-01 bias: 4.134e-11 P time: 2.05254e+06 first: 1.195e-01 second: 1.324e-01 infty: 2.050e-01 bias: 4.416e-11 P time: 2.05423e+06 first: 1.188e-01 second: 1.317e-01 infty: 2.042e-01 bias: 1.740e-11 P time: 2.05592e+06 first: 1.178e-01 second: 1.307e-01 infty: 2.034e-01 bias: 4.572e-11 P time: 2.05762e+06 first: 1.167e-01 second: 1.296e-01 infty: 2.023e-01 bias: 3.353e-11 P time: 2.05931e+06 first: 1.156e-01 second: 1.286e-01 infty: 2.011e-01 bias: 1.948e-11 P time: 2.061e+06 first: 1.148e-01 second: 1.277e-01 infty: 1.998e-01 bias: 5.051e-11 P time: 2.0627e+06 first: 1.142e-01 second: 1.273e-01 infty: 1.987e-01 bias: 4.859e-11 P time: 2.06439e+06 first: 1.141e-01 second: 1.272e-01 infty: 1.985e-01 bias: 3.679e-11 P time: 2.06608e+06 first: 1.144e-01 second: 1.276e-01 infty: 1.988e-01 bias: 4.675e-11 P time: 2.06778e+06 first: 1.151e-01 second: 1.284e-01 infty: 1.993e-01 bias: 3.134e-11 P time: 2.06947e+06 first: 1.162e-01 second: 1.295e-01 infty: 2.000e-01 bias: 6.477e-11 P time: 2.07116e+06 first: 1.173e-01 second: 1.307e-01 infty: 2.006e-01 bias: 5.249e-11 P time: 2.07286e+06 first: 1.185e-01 second: 1.318e-01 infty: 2.011e-01 bias: 2.769e-11 gerris-snapshot-131206/test/rossby/river/ehm.gfv0000644000175100017510000000071612250371172016573 00000000000000# GfsView 2D View { tx = -1.47931 ty = -1.02043 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.0946 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0.0250706 b = 1 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } EH { amin = 0 min = -100 amax = 0 max = 0 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 9 } gerris-snapshot-131206/test/rossby/river/eh-4.ref0000644000175100017510000012525512250371172016557 00000000000000P time: 0 first: 1.945e-14 second: 1.755e-14 infty: 1.569e-14 bias: 7.607e-12 P time: 4331.77 first: 7.717e-03 second: 8.642e-03 infty: 1.580e-02 bias: 9.766e-12 P time: 8652.42 first: 1.155e-02 second: 1.309e-02 infty: 2.379e-02 bias: 4.389e-12 P time: 12964.8 first: 1.138e-02 second: 1.270e-02 infty: 2.110e-02 bias: 1.404e-11 P time: 17274 first: 1.060e-02 second: 1.143e-02 infty: 1.842e-02 bias: 1.995e-11 P time: 21582 first: 1.104e-02 second: 1.177e-02 infty: 1.939e-02 bias: 1.054e-11 P time: 25887 first: 1.203e-02 second: 1.277e-02 infty: 2.034e-02 bias: 1.201e-11 P time: 30188 first: 1.150e-02 second: 1.204e-02 infty: 2.058e-02 bias: 1.640e-11 P time: 34486 first: 1.174e-02 second: 1.266e-02 infty: 2.030e-02 bias: 1.765e-11 P time: 38782.6 first: 1.310e-02 second: 1.476e-02 infty: 2.314e-02 bias: 2.204e-11 P time: 43076.2 first: 1.405e-02 second: 1.564e-02 infty: 2.182e-02 bias: 1.398e-11 P time: 47363.8 first: 1.412e-02 second: 1.559e-02 infty: 2.550e-02 bias: 3.059e-11 P time: 51641.5 first: 1.309e-02 second: 1.383e-02 infty: 2.510e-02 bias: 2.642e-11 P time: 55911.4 first: 1.243e-02 second: 1.232e-02 infty: 1.837e-02 bias: 1.908e-11 P time: 60175.1 first: 1.544e-02 second: 1.551e-02 infty: 2.282e-02 bias: 1.217e-11 P time: 64431.2 first: 2.050e-02 second: 2.150e-02 infty: 3.065e-02 bias: 4.078e-11 P time: 68678.3 first: 2.326e-02 second: 2.477e-02 infty: 3.528e-02 bias: 1.956e-11 P time: 72916.6 first: 2.175e-02 second: 2.291e-02 infty: 3.056e-02 bias: 1.431e-11 P time: 77148.2 first: 1.811e-02 second: 1.882e-02 infty: 2.461e-02 bias: 5.724e-12 P time: 81374.6 first: 1.600e-02 second: 1.687e-02 infty: 2.996e-02 bias: 1.716e-11 P time: 85594.6 first: 1.647e-02 second: 1.768e-02 infty: 3.015e-02 bias: 2.085e-11 P time: 89806.7 first: 1.831e-02 second: 1.975e-02 infty: 3.215e-02 bias: 1.933e-11 P time: 94010.9 first: 2.117e-02 second: 2.289e-02 infty: 3.214e-02 bias: 2.516e-11 P time: 98209.3 first: 2.482e-02 second: 2.661e-02 infty: 3.642e-02 bias: 1.135e-11 P time: 102402 first: 2.694e-02 second: 2.869e-02 infty: 3.931e-02 bias: 8.336e-12 P time: 106590 first: 2.734e-02 second: 2.835e-02 infty: 4.200e-02 bias: 3.525e-11 P time: 110770 first: 2.591e-02 second: 2.626e-02 infty: 3.968e-02 bias: 8.337e-12 P time: 114945 first: 2.401e-02 second: 2.420e-02 infty: 3.581e-02 bias: 2.959e-11 P time: 119118 first: 2.439e-02 second: 2.521e-02 infty: 4.269e-02 bias: 1.972e-11 P time: 123287 first: 2.681e-02 second: 2.887e-02 infty: 4.787e-02 bias: 2.648e-11 P time: 127453 first: 2.871e-02 second: 3.161e-02 infty: 4.857e-02 bias: 4.757e-12 P time: 131613 first: 2.858e-02 second: 3.125e-02 infty: 4.661e-02 bias: 2.676e-11 P time: 135769 first: 2.724e-02 second: 2.914e-02 infty: 4.504e-02 bias: 1.441e-11 P time: 139921 first: 2.739e-02 second: 2.863e-02 infty: 4.744e-02 bias: 1.902e-11 P time: 144070 first: 2.929e-02 second: 3.022e-02 infty: 4.903e-02 bias: 2.318e-12 P time: 148217 first: 3.130e-02 second: 3.239e-02 infty: 4.972e-02 bias: 5.045e-12 P time: 152361 first: 3.312e-02 second: 3.480e-02 infty: 5.045e-02 bias: 3.066e-11 P time: 156503 first: 3.506e-02 second: 3.724e-02 infty: 5.174e-02 bias: 2.064e-11 P time: 160645 first: 3.626e-02 second: 3.849e-02 infty: 5.579e-02 bias: -2.846e-12 P time: 164787 first: 3.505e-02 second: 3.724e-02 infty: 5.653e-02 bias: 2.282e-11 P time: 168928 first: 3.218e-02 second: 3.412e-02 infty: 5.321e-02 bias: 1.825e-11 P time: 173067 first: 3.003e-02 second: 3.172e-02 infty: 4.984e-02 bias: 2.692e-11 P time: 177204 first: 3.113e-02 second: 3.301e-02 infty: 5.143e-02 bias: 2.943e-11 P time: 181343 first: 3.540e-02 second: 3.775e-02 infty: 5.653e-02 bias: 2.043e-11 P time: 185482 first: 3.948e-02 second: 4.222e-02 infty: 6.142e-02 bias: 6.370e-12 P time: 189622 first: 4.094e-02 second: 4.368e-02 infty: 6.249e-02 bias: 2.795e-11 P time: 193763 first: 3.991e-02 second: 4.235e-02 infty: 6.080e-02 bias: 2.037e-11 P time: 197905 first: 3.866e-02 second: 4.067e-02 infty: 6.023e-02 bias: 2.176e-11 P time: 202049 first: 3.845e-02 second: 4.044e-02 infty: 6.273e-02 bias: 9.169e-12 P time: 206196 first: 3.862e-02 second: 4.103e-02 infty: 6.510e-02 bias: 1.939e-11 P time: 210346 first: 3.893e-02 second: 4.196e-02 infty: 6.523e-02 bias: 1.439e-11 P time: 214498 first: 4.063e-02 second: 4.386e-02 infty: 6.573e-02 bias: 3.150e-11 P time: 218654 first: 4.291e-02 second: 4.622e-02 infty: 6.870e-02 bias: 1.380e-11 P time: 222814 first: 4.359e-02 second: 4.733e-02 infty: 7.258e-02 bias: 1.968e-11 P time: 226977 first: 4.257e-02 second: 4.625e-02 infty: 7.424e-02 bias: 2.120e-12 P time: 231144 first: 4.114e-02 second: 4.433e-02 infty: 7.331e-02 bias: 7.914e-12 P time: 235314 first: 4.135e-02 second: 4.427e-02 infty: 7.299e-02 bias: 1.903e-11 P time: 239489 first: 4.395e-02 second: 4.723e-02 infty: 7.760e-02 bias: 1.366e-11 P time: 243670 first: 4.721e-02 second: 5.107e-02 infty: 8.254e-02 bias: 1.933e-11 P time: 247858 first: 4.861e-02 second: 5.270e-02 infty: 8.384e-02 bias: 2.054e-11 P time: 252048 first: 4.715e-02 second: 5.127e-02 infty: 8.227e-02 bias: 2.344e-11 P time: 256238 first: 4.447e-02 second: 4.878e-02 infty: 8.168e-02 bias: 1.726e-11 P time: 260429 first: 4.327e-02 second: 4.792e-02 infty: 8.396e-02 bias: 2.048e-11 P time: 264621 first: 4.428e-02 second: 4.902e-02 infty: 8.713e-02 bias: -5.295e-12 P time: 268813 first: 4.609e-02 second: 5.082e-02 infty: 8.886e-02 bias: 3.121e-11 P time: 273003 first: 4.844e-02 second: 5.300e-02 infty: 8.961e-02 bias: 3.609e-11 P time: 277192 first: 5.094e-02 second: 5.538e-02 infty: 9.144e-02 bias: 3.529e-12 P time: 281380 first: 5.207e-02 second: 5.674e-02 infty: 9.429e-02 bias: 3.402e-11 P time: 285568 first: 5.116e-02 second: 5.594e-02 infty: 9.556e-02 bias: 3.499e-12 P time: 289757 first: 4.874e-02 second: 5.355e-02 infty: 9.367e-02 bias: 1.227e-11 P time: 293945 first: 4.700e-02 second: 5.199e-02 infty: 9.055e-02 bias: 2.293e-12 P time: 298132 first: 4.806e-02 second: 5.333e-02 infty: 9.243e-02 bias: 2.792e-12 P time: 302321 first: 5.127e-02 second: 5.679e-02 infty: 9.745e-02 bias: 3.016e-11 P time: 306511 first: 5.389e-02 second: 5.953e-02 infty: 1.009e-01 bias: 2.058e-11 P time: 310704 first: 5.419e-02 second: 5.976e-02 infty: 1.008e-01 bias: 2.301e-11 P time: 314897 first: 5.301e-02 second: 5.829e-02 infty: 9.921e-02 bias: 2.491e-11 P time: 319091 first: 5.245e-02 second: 5.741e-02 infty: 9.992e-02 bias: 3.844e-11 P time: 323281 first: 5.332e-02 second: 5.817e-02 infty: 1.018e-01 bias: 2.617e-11 P time: 327469 first: 5.475e-02 second: 5.983e-02 infty: 1.031e-01 bias: 1.319e-11 P time: 331655 first: 5.621e-02 second: 6.159e-02 infty: 1.031e-01 bias: 6.372e-13 P time: 335840 first: 5.773e-02 second: 6.324e-02 infty: 1.028e-01 bias: 2.626e-11 P time: 340023 first: 5.856e-02 second: 6.422e-02 infty: 1.034e-01 bias: 1.562e-11 P time: 344207 first: 5.794e-02 second: 6.380e-02 infty: 1.037e-01 bias: 3.261e-11 P time: 348390 first: 5.658e-02 second: 6.233e-02 infty: 1.029e-01 bias: 1.164e-11 P time: 352572 first: 5.598e-02 second: 6.152e-02 infty: 1.025e-01 bias: 2.933e-11 P time: 356754 first: 5.759e-02 second: 6.303e-02 infty: 1.038e-01 bias: 2.513e-11 P time: 360935 first: 6.095e-02 second: 6.648e-02 infty: 1.075e-01 bias: 2.667e-11 P time: 365116 first: 6.392e-02 second: 6.966e-02 infty: 1.111e-01 bias: 1.805e-11 P time: 369299 first: 6.480e-02 second: 7.067e-02 infty: 1.120e-01 bias: 2.960e-11 P time: 373482 first: 6.354e-02 second: 6.953e-02 infty: 1.102e-01 bias: 8.185e-12 P time: 377667 first: 6.193e-02 second: 6.804e-02 infty: 1.082e-01 bias: 1.575e-11 P time: 381853 first: 6.152e-02 second: 6.789e-02 infty: 1.104e-01 bias: 2.869e-12 P time: 386040 first: 6.234e-02 second: 6.917e-02 infty: 1.128e-01 bias: 2.981e-11 P time: 390230 first: 6.392e-02 second: 7.113e-02 infty: 1.146e-01 bias: 1.057e-11 P time: 394422 first: 6.595e-02 second: 7.320e-02 infty: 1.163e-01 bias: 1.516e-11 P time: 398617 first: 6.751e-02 second: 7.481e-02 infty: 1.191e-01 bias: 2.304e-11 P time: 402815 first: 6.794e-02 second: 7.526e-02 infty: 1.222e-01 bias: 1.764e-11 P time: 407016 first: 6.729e-02 second: 7.457e-02 infty: 1.236e-01 bias: 1.539e-11 P time: 411221 first: 6.664e-02 second: 7.395e-02 infty: 1.242e-01 bias: 1.305e-11 P time: 415428 first: 6.724e-02 second: 7.476e-02 infty: 1.281e-01 bias: 2.675e-11 P time: 419639 first: 6.916e-02 second: 7.706e-02 infty: 1.334e-01 bias: 2.174e-11 P time: 423852 first: 7.111e-02 second: 7.938e-02 infty: 1.377e-01 bias: 1.632e-11 P time: 428071 first: 7.174e-02 second: 8.017e-02 infty: 1.393e-01 bias: 1.158e-11 P time: 432295 first: 7.077e-02 second: 7.927e-02 infty: 1.398e-01 bias: 3.138e-11 P time: 436524 first: 6.951e-02 second: 7.810e-02 infty: 1.424e-01 bias: 2.192e-11 P time: 440758 first: 6.950e-02 second: 7.824e-02 infty: 1.467e-01 bias: 1.859e-11 P time: 444997 first: 7.094e-02 second: 7.982e-02 infty: 1.509e-01 bias: 1.966e-11 P time: 449240 first: 7.285e-02 second: 8.191e-02 infty: 1.541e-01 bias: 2.194e-11 P time: 453489 first: 7.458e-02 second: 8.370e-02 infty: 1.564e-01 bias: 2.818e-11 P time: 457742 first: 7.554e-02 second: 8.470e-02 infty: 1.585e-01 bias: 1.623e-11 P time: 462001 first: 7.519e-02 second: 8.453e-02 infty: 1.598e-01 bias: 1.869e-11 P time: 466266 first: 7.401e-02 second: 8.338e-02 infty: 1.597e-01 bias: 7.318e-12 P time: 470538 first: 7.294e-02 second: 8.242e-02 infty: 1.591e-01 bias: -1.470e-12 P time: 474816 first: 7.324e-02 second: 8.295e-02 infty: 1.598e-01 bias: 6.237e-12 P time: 479100 first: 7.517e-02 second: 8.504e-02 infty: 1.622e-01 bias: 2.155e-11 P time: 483389 first: 7.736e-02 second: 8.727e-02 infty: 1.644e-01 bias: 2.116e-11 P time: 487685 first: 7.828e-02 second: 8.812e-02 infty: 1.641e-01 bias: 3.074e-11 P time: 491983 first: 7.774e-02 second: 8.743e-02 infty: 1.617e-01 bias: 2.165e-11 P time: 496285 first: 7.689e-02 second: 8.648e-02 infty: 1.593e-01 bias: 5.454e-12 P time: 500589 first: 7.700e-02 second: 8.660e-02 infty: 1.581e-01 bias: 1.449e-11 P time: 504895 first: 7.795e-02 second: 8.781e-02 infty: 1.578e-01 bias: 2.544e-11 P time: 509201 first: 7.924e-02 second: 8.919e-02 infty: 1.587e-01 bias: 2.624e-11 P time: 513509 first: 8.023e-02 second: 9.010e-02 infty: 1.587e-01 bias: 1.202e-11 P time: 517818 first: 8.045e-02 second: 9.037e-02 infty: 1.584e-01 bias: 2.942e-11 P time: 522129 first: 7.996e-02 second: 8.998e-02 infty: 1.577e-01 bias: 1.593e-11 P time: 526442 first: 7.921e-02 second: 8.927e-02 infty: 1.562e-01 bias: 1.566e-11 P time: 530756 first: 7.916e-02 second: 8.914e-02 infty: 1.542e-01 bias: 1.455e-11 P time: 535072 first: 8.040e-02 second: 9.032e-02 infty: 1.550e-01 bias: -1.762e-12 P time: 539385 first: 8.250e-02 second: 9.236e-02 infty: 1.567e-01 bias: 1.790e-11 P time: 543696 first: 8.401e-02 second: 9.387e-02 infty: 1.579e-01 bias: 1.178e-11 P time: 548004 first: 8.401e-02 second: 9.384e-02 infty: 1.572e-01 bias: 9.437e-12 P time: 552310 first: 8.277e-02 second: 9.257e-02 infty: 1.548e-01 bias: 3.070e-11 P time: 556615 first: 8.162e-02 second: 9.151e-02 infty: 1.521e-01 bias: 1.727e-11 P time: 560918 first: 8.177e-02 second: 9.180e-02 infty: 1.508e-01 bias: 1.425e-11 P time: 565219 first: 8.295e-02 second: 9.320e-02 infty: 1.521e-01 bias: 3.399e-11 P time: 569517 first: 8.463e-02 second: 9.466e-02 infty: 1.529e-01 bias: 2.200e-11 P time: 573812 first: 8.572e-02 second: 9.550e-02 infty: 1.531e-01 bias: 7.128e-12 P time: 578105 first: 8.592e-02 second: 9.563e-02 infty: 1.530e-01 bias: 2.820e-11 P time: 582394 first: 8.553e-02 second: 9.521e-02 infty: 1.530e-01 bias: 1.309e-11 P time: 586681 first: 8.512e-02 second: 9.469e-02 infty: 1.529e-01 bias: 2.801e-11 P time: 590966 first: 8.521e-02 second: 9.475e-02 infty: 1.519e-01 bias: 2.502e-11 P time: 595249 first: 8.610e-02 second: 9.572e-02 infty: 1.512e-01 bias: 1.437e-11 P time: 599530 first: 8.747e-02 second: 9.707e-02 infty: 1.524e-01 bias: 2.431e-11 P time: 603807 first: 8.820e-02 second: 9.778e-02 infty: 1.543e-01 bias: 1.748e-11 P time: 608079 first: 8.786e-02 second: 9.733e-02 infty: 1.548e-01 bias: 3.210e-11 P time: 612346 first: 8.688e-02 second: 9.629e-02 infty: 1.548e-01 bias: 1.732e-11 P time: 616607 first: 8.654e-02 second: 9.585e-02 infty: 1.553e-01 bias: 1.364e-11 P time: 620864 first: 8.732e-02 second: 9.670e-02 infty: 1.564e-01 bias: 1.245e-11 P time: 625117 first: 8.887e-02 second: 9.830e-02 infty: 1.573e-01 bias: 2.483e-11 P time: 629365 first: 9.021e-02 second: 9.955e-02 infty: 1.574e-01 bias: 2.840e-11 P time: 633610 first: 9.060e-02 second: 9.985e-02 infty: 1.564e-01 bias: 9.746e-12 P time: 637850 first: 9.007e-02 second: 9.930e-02 infty: 1.556e-01 bias: 2.709e-11 P time: 642087 first: 8.910e-02 second: 9.839e-02 infty: 1.567e-01 bias: 2.004e-12 P time: 646321 first: 8.853e-02 second: 9.776e-02 infty: 1.575e-01 bias: 1.943e-11 P time: 650551 first: 8.885e-02 second: 9.803e-02 infty: 1.584e-01 bias: 2.276e-11 P time: 654778 first: 9.015e-02 second: 9.927e-02 infty: 1.594e-01 bias: 2.136e-11 P time: 659002 first: 9.164e-02 second: 1.008e-01 infty: 1.606e-01 bias: 2.445e-11 P time: 663224 first: 9.248e-02 second: 1.015e-01 infty: 1.612e-01 bias: 2.423e-11 P time: 667442 first: 9.219e-02 second: 1.012e-01 infty: 1.607e-01 bias: 1.694e-11 P time: 671658 first: 9.121e-02 second: 1.003e-01 infty: 1.591e-01 bias: 2.526e-11 P time: 675872 first: 9.053e-02 second: 9.980e-02 infty: 1.574e-01 bias: 2.474e-11 P time: 680084 first: 9.084e-02 second: 1.004e-01 infty: 1.582e-01 bias: 9.490e-12 P time: 684295 first: 9.197e-02 second: 1.017e-01 infty: 1.604e-01 bias: 3.927e-11 P time: 688506 first: 9.299e-02 second: 1.026e-01 infty: 1.615e-01 bias: 8.665e-12 P time: 692715 first: 9.319e-02 second: 1.028e-01 infty: 1.623e-01 bias: 4.157e-12 P time: 696923 first: 9.280e-02 second: 1.024e-01 infty: 1.626e-01 bias: 2.803e-11 P time: 701131 first: 9.226e-02 second: 1.017e-01 infty: 1.627e-01 bias: 2.823e-11 P time: 705337 first: 9.208e-02 second: 1.015e-01 infty: 1.626e-01 bias: 9.889e-12 P time: 709543 first: 9.263e-02 second: 1.022e-01 infty: 1.624e-01 bias: 1.346e-11 P time: 713749 first: 9.377e-02 second: 1.036e-01 infty: 1.624e-01 bias: 1.119e-11 P time: 717956 first: 9.509e-02 second: 1.051e-01 infty: 1.623e-01 bias: 2.723e-11 P time: 722164 first: 9.566e-02 second: 1.056e-01 infty: 1.617e-01 bias: 2.949e-11 P time: 726373 first: 9.499e-02 second: 1.050e-01 infty: 1.624e-01 bias: 2.492e-11 P time: 730583 first: 9.394e-02 second: 1.038e-01 infty: 1.624e-01 bias: 1.915e-11 P time: 734794 first: 9.355e-02 second: 1.032e-01 infty: 1.626e-01 bias: 2.004e-11 P time: 739006 first: 9.413e-02 second: 1.038e-01 infty: 1.637e-01 bias: 9.079e-12 P time: 743220 first: 9.549e-02 second: 1.054e-01 infty: 1.651e-01 bias: 2.778e-11 P time: 747436 first: 9.677e-02 second: 1.069e-01 infty: 1.660e-01 bias: 2.077e-11 P time: 751655 first: 9.733e-02 second: 1.074e-01 infty: 1.655e-01 bias: 1.995e-11 P time: 755875 first: 9.707e-02 second: 1.071e-01 infty: 1.641e-01 bias: 1.435e-11 P time: 760096 first: 9.641e-02 second: 1.064e-01 infty: 1.623e-01 bias: 2.919e-11 P time: 764316 first: 9.611e-02 second: 1.060e-01 infty: 1.614e-01 bias: 1.623e-11 P time: 768537 first: 9.660e-02 second: 1.063e-01 infty: 1.629e-01 bias: 1.728e-11 P time: 772759 first: 9.769e-02 second: 1.074e-01 infty: 1.647e-01 bias: 9.522e-12 P time: 776982 first: 9.892e-02 second: 1.087e-01 infty: 1.664e-01 bias: 1.440e-11 P time: 781206 first: 9.931e-02 second: 1.093e-01 infty: 1.672e-01 bias: 1.750e-11 P time: 785432 first: 9.881e-02 second: 1.088e-01 infty: 1.667e-01 bias: 1.133e-11 P time: 789658 first: 9.796e-02 second: 1.079e-01 infty: 1.652e-01 bias: 1.460e-11 P time: 793885 first: 9.761e-02 second: 1.075e-01 infty: 1.636e-01 bias: 3.502e-11 P time: 798112 first: 9.835e-02 second: 1.083e-01 infty: 1.626e-01 bias: 2.851e-11 P time: 802339 first: 9.983e-02 second: 1.099e-01 infty: 1.658e-01 bias: 1.334e-11 P time: 806565 first: 1.013e-01 second: 1.112e-01 infty: 1.684e-01 bias: 9.205e-12 P time: 810792 first: 1.017e-01 second: 1.116e-01 infty: 1.695e-01 bias: 1.565e-11 P time: 815020 first: 1.010e-01 second: 1.109e-01 infty: 1.694e-01 bias: 2.194e-11 P time: 819247 first: 1.000e-01 second: 1.099e-01 infty: 1.689e-01 bias: 3.016e-11 P time: 823473 first: 9.958e-02 second: 1.095e-01 infty: 1.683e-01 bias: 3.069e-11 P time: 827699 first: 1.000e-01 second: 1.100e-01 infty: 1.680e-01 bias: 1.842e-11 P time: 831925 first: 1.013e-01 second: 1.114e-01 infty: 1.679e-01 bias: 1.014e-11 P time: 836153 first: 1.027e-01 second: 1.130e-01 infty: 1.696e-01 bias: 1.184e-11 P time: 840381 first: 1.034e-01 second: 1.138e-01 infty: 1.721e-01 bias: 1.427e-11 P time: 844610 first: 1.030e-01 second: 1.135e-01 infty: 1.730e-01 bias: 2.882e-11 P time: 848841 first: 1.022e-01 second: 1.126e-01 infty: 1.729e-01 bias: 1.622e-11 P time: 853071 first: 1.019e-01 second: 1.121e-01 infty: 1.727e-01 bias: 3.505e-11 P time: 857303 first: 1.025e-01 second: 1.126e-01 infty: 1.731e-01 bias: 6.010e-12 P time: 861535 first: 1.038e-01 second: 1.140e-01 infty: 1.740e-01 bias: 2.797e-11 P time: 865769 first: 1.051e-01 second: 1.154e-01 infty: 1.745e-01 bias: 2.193e-11 P time: 870005 first: 1.057e-01 second: 1.160e-01 infty: 1.739e-01 bias: 1.939e-11 P time: 874243 first: 1.054e-01 second: 1.157e-01 infty: 1.738e-01 bias: 1.010e-11 P time: 878483 first: 1.048e-01 second: 1.151e-01 infty: 1.746e-01 bias: 2.594e-11 P time: 882723 first: 1.047e-01 second: 1.150e-01 infty: 1.755e-01 bias: 4.383e-12 P time: 886965 first: 1.055e-01 second: 1.158e-01 infty: 1.766e-01 bias: -1.091e-13 P time: 891208 first: 1.071e-01 second: 1.173e-01 infty: 1.780e-01 bias: 2.449e-11 P time: 895453 first: 1.086e-01 second: 1.188e-01 infty: 1.790e-01 bias: 9.081e-12 P time: 899700 first: 1.091e-01 second: 1.195e-01 infty: 1.793e-01 bias: 1.839e-11 P time: 903947 first: 1.087e-01 second: 1.191e-01 infty: 1.790e-01 bias: 2.364e-11 P time: 908195 first: 1.077e-01 second: 1.183e-01 infty: 1.775e-01 bias: 2.761e-11 P time: 912445 first: 1.073e-01 second: 1.180e-01 infty: 1.781e-01 bias: 1.762e-11 P time: 916696 first: 1.080e-01 second: 1.188e-01 infty: 1.808e-01 bias: 2.157e-11 P time: 920948 first: 1.098e-01 second: 1.205e-01 infty: 1.838e-01 bias: 9.841e-12 P time: 925202 first: 1.114e-01 second: 1.222e-01 infty: 1.862e-01 bias: 2.136e-11 P time: 929457 first: 1.123e-01 second: 1.230e-01 infty: 1.876e-01 bias: 2.943e-11 P time: 933715 first: 1.121e-01 second: 1.228e-01 infty: 1.879e-01 bias: 1.948e-11 P time: 937975 first: 1.113e-01 second: 1.222e-01 infty: 1.874e-01 bias: 1.359e-11 P time: 942237 first: 1.110e-01 second: 1.220e-01 infty: 1.884e-01 bias: 8.291e-12 P time: 946502 first: 1.113e-01 second: 1.226e-01 infty: 1.910e-01 bias: 1.026e-11 P time: 950769 first: 1.126e-01 second: 1.239e-01 infty: 1.938e-01 bias: 1.131e-11 P time: 955038 first: 1.139e-01 second: 1.254e-01 infty: 1.963e-01 bias: 4.768e-11 P time: 959311 first: 1.147e-01 second: 1.262e-01 infty: 1.979e-01 bias: 8.684e-12 P time: 963587 first: 1.146e-01 second: 1.261e-01 infty: 1.985e-01 bias: 9.724e-13 P time: 967867 first: 1.142e-01 second: 1.256e-01 infty: 1.982e-01 bias: 1.575e-11 P time: 972148 first: 1.140e-01 second: 1.255e-01 infty: 1.991e-01 bias: 1.905e-11 P time: 976432 first: 1.146e-01 second: 1.263e-01 infty: 2.016e-01 bias: 1.203e-11 P time: 980717 first: 1.160e-01 second: 1.278e-01 infty: 2.042e-01 bias: 1.407e-11 P time: 985003 first: 1.173e-01 second: 1.291e-01 infty: 2.061e-01 bias: 8.810e-12 P time: 989291 first: 1.177e-01 second: 1.296e-01 infty: 2.067e-01 bias: 9.431e-12 P time: 993581 first: 1.172e-01 second: 1.292e-01 infty: 2.063e-01 bias: 1.581e-11 P time: 997873 first: 1.166e-01 second: 1.285e-01 infty: 2.059e-01 bias: 2.406e-11 P time: 1.00217e+06 first: 1.164e-01 second: 1.284e-01 infty: 2.080e-01 bias: 2.329e-11 P time: 1.00646e+06 first: 1.171e-01 second: 1.292e-01 infty: 2.098e-01 bias: 3.166e-11 P time: 1.01076e+06 first: 1.186e-01 second: 1.307e-01 infty: 2.115e-01 bias: 2.003e-11 P time: 1.01506e+06 first: 1.199e-01 second: 1.320e-01 infty: 2.128e-01 bias: 1.140e-11 P time: 1.01936e+06 first: 1.206e-01 second: 1.326e-01 infty: 2.131e-01 bias: 1.575e-11 P time: 1.02366e+06 first: 1.204e-01 second: 1.323e-01 infty: 2.123e-01 bias: 2.869e-11 P time: 1.02796e+06 first: 1.196e-01 second: 1.316e-01 infty: 2.115e-01 bias: 1.964e-11 P time: 1.03226e+06 first: 1.193e-01 second: 1.313e-01 infty: 2.125e-01 bias: 3.049e-11 P time: 1.03656e+06 first: 1.199e-01 second: 1.320e-01 infty: 2.138e-01 bias: 2.238e-11 P time: 1.04087e+06 first: 1.211e-01 second: 1.333e-01 infty: 2.146e-01 bias: 2.904e-11 P time: 1.04517e+06 first: 1.223e-01 second: 1.344e-01 infty: 2.149e-01 bias: 1.308e-11 P time: 1.04948e+06 first: 1.226e-01 second: 1.347e-01 infty: 2.143e-01 bias: 5.826e-12 P time: 1.05379e+06 first: 1.223e-01 second: 1.344e-01 infty: 2.127e-01 bias: 1.564e-11 P time: 1.05809e+06 first: 1.219e-01 second: 1.339e-01 infty: 2.109e-01 bias: 2.722e-11 P time: 1.0624e+06 first: 1.219e-01 second: 1.339e-01 infty: 2.117e-01 bias: 1.561e-11 P time: 1.0667e+06 first: 1.227e-01 second: 1.346e-01 infty: 2.124e-01 bias: 1.725e-11 P time: 1.07101e+06 first: 1.237e-01 second: 1.357e-01 infty: 2.128e-01 bias: 6.675e-12 P time: 1.07531e+06 first: 1.245e-01 second: 1.366e-01 infty: 2.122e-01 bias: 2.355e-11 P time: 1.07961e+06 first: 1.247e-01 second: 1.367e-01 infty: 2.108e-01 bias: 2.465e-11 P time: 1.08391e+06 first: 1.242e-01 second: 1.362e-01 infty: 2.087e-01 bias: 2.506e-11 P time: 1.0882e+06 first: 1.236e-01 second: 1.355e-01 infty: 2.082e-01 bias: 3.113e-11 P time: 1.0925e+06 first: 1.236e-01 second: 1.355e-01 infty: 2.089e-01 bias: 4.093e-11 P time: 1.09679e+06 first: 1.243e-01 second: 1.363e-01 infty: 2.098e-01 bias: 1.092e-11 P time: 1.10109e+06 first: 1.255e-01 second: 1.375e-01 infty: 2.105e-01 bias: 3.997e-11 P time: 1.10538e+06 first: 1.264e-01 second: 1.384e-01 infty: 2.105e-01 bias: 2.071e-11 P time: 1.10967e+06 first: 1.266e-01 second: 1.384e-01 infty: 2.095e-01 bias: 2.651e-11 P time: 1.11396e+06 first: 1.261e-01 second: 1.378e-01 infty: 2.088e-01 bias: 1.105e-11 P time: 1.11824e+06 first: 1.255e-01 second: 1.372e-01 infty: 2.076e-01 bias: 2.131e-11 P time: 1.12253e+06 first: 1.255e-01 second: 1.371e-01 infty: 2.063e-01 bias: 1.784e-11 P time: 1.12681e+06 first: 1.261e-01 second: 1.377e-01 infty: 2.074e-01 bias: 2.055e-11 P time: 1.13109e+06 first: 1.270e-01 second: 1.387e-01 infty: 2.100e-01 bias: 2.091e-11 P time: 1.13537e+06 first: 1.277e-01 second: 1.394e-01 infty: 2.120e-01 bias: 2.334e-11 P time: 1.13965e+06 first: 1.278e-01 second: 1.394e-01 infty: 2.131e-01 bias: 2.181e-11 P time: 1.14392e+06 first: 1.274e-01 second: 1.389e-01 infty: 2.131e-01 bias: 2.145e-11 P time: 1.1482e+06 first: 1.270e-01 second: 1.384e-01 infty: 2.127e-01 bias: 2.514e-11 P time: 1.15247e+06 first: 1.271e-01 second: 1.384e-01 infty: 2.120e-01 bias: 3.290e-11 P time: 1.15674e+06 first: 1.278e-01 second: 1.391e-01 infty: 2.114e-01 bias: 1.622e-11 P time: 1.16101e+06 first: 1.287e-01 second: 1.399e-01 infty: 2.105e-01 bias: 3.154e-11 P time: 1.16528e+06 first: 1.291e-01 second: 1.403e-01 infty: 2.111e-01 bias: 1.036e-11 P time: 1.16954e+06 first: 1.289e-01 second: 1.401e-01 infty: 2.129e-01 bias: 1.744e-11 P time: 1.17381e+06 first: 1.284e-01 second: 1.395e-01 infty: 2.138e-01 bias: 1.400e-11 P time: 1.17807e+06 first: 1.280e-01 second: 1.390e-01 infty: 2.144e-01 bias: 5.416e-12 P time: 1.18233e+06 first: 1.282e-01 second: 1.392e-01 infty: 2.148e-01 bias: 1.650e-11 P time: 1.18659e+06 first: 1.289e-01 second: 1.399e-01 infty: 2.152e-01 bias: 1.854e-11 P time: 1.19085e+06 first: 1.297e-01 second: 1.407e-01 infty: 2.153e-01 bias: 2.074e-11 P time: 1.1951e+06 first: 1.303e-01 second: 1.412e-01 infty: 2.147e-01 bias: 1.743e-11 P time: 1.19936e+06 first: 1.300e-01 second: 1.410e-01 infty: 2.134e-01 bias: 8.949e-12 P time: 1.20361e+06 first: 1.292e-01 second: 1.404e-01 infty: 2.112e-01 bias: 1.929e-11 P time: 1.20786e+06 first: 1.284e-01 second: 1.399e-01 infty: 2.110e-01 bias: 2.446e-11 P time: 1.21211e+06 first: 1.283e-01 second: 1.398e-01 infty: 2.124e-01 bias: 1.911e-11 P time: 1.21637e+06 first: 1.289e-01 second: 1.404e-01 infty: 2.138e-01 bias: 2.634e-11 P time: 1.22062e+06 first: 1.299e-01 second: 1.412e-01 infty: 2.150e-01 bias: 1.571e-11 P time: 1.22487e+06 first: 1.308e-01 second: 1.417e-01 infty: 2.156e-01 bias: 1.775e-11 P time: 1.22912e+06 first: 1.308e-01 second: 1.416e-01 infty: 2.155e-01 bias: 2.535e-11 P time: 1.23336e+06 first: 1.305e-01 second: 1.411e-01 infty: 2.147e-01 bias: 3.203e-11 P time: 1.23761e+06 first: 1.300e-01 second: 1.408e-01 infty: 2.133e-01 bias: 1.496e-11 P time: 1.24186e+06 first: 1.297e-01 second: 1.409e-01 infty: 2.118e-01 bias: 2.535e-11 P time: 1.24611e+06 first: 1.298e-01 second: 1.414e-01 infty: 2.103e-01 bias: 3.340e-11 P time: 1.25035e+06 first: 1.301e-01 second: 1.421e-01 infty: 2.089e-01 bias: 1.889e-11 P time: 1.2546e+06 first: 1.307e-01 second: 1.424e-01 infty: 2.110e-01 bias: 2.472e-11 P time: 1.25885e+06 first: 1.308e-01 second: 1.422e-01 infty: 2.123e-01 bias: 2.553e-11 P time: 1.2631e+06 first: 1.306e-01 second: 1.417e-01 infty: 2.130e-01 bias: 2.929e-11 P time: 1.26734e+06 first: 1.304e-01 second: 1.413e-01 infty: 2.130e-01 bias: 8.326e-12 P time: 1.27159e+06 first: 1.306e-01 second: 1.415e-01 infty: 2.128e-01 bias: 5.540e-12 P time: 1.27583e+06 first: 1.310e-01 second: 1.422e-01 infty: 2.125e-01 bias: 9.105e-12 P time: 1.28008e+06 first: 1.315e-01 second: 1.430e-01 infty: 2.119e-01 bias: 1.346e-11 P time: 1.28433e+06 first: 1.316e-01 second: 1.434e-01 infty: 2.105e-01 bias: 3.056e-11 P time: 1.28858e+06 first: 1.314e-01 second: 1.431e-01 infty: 2.082e-01 bias: 6.668e-12 P time: 1.29282e+06 first: 1.313e-01 second: 1.425e-01 infty: 2.068e-01 bias: 1.190e-11 P time: 1.29707e+06 first: 1.314e-01 second: 1.422e-01 infty: 2.082e-01 bias: 2.716e-11 P time: 1.30132e+06 first: 1.317e-01 second: 1.423e-01 infty: 2.092e-01 bias: 1.781e-11 P time: 1.30557e+06 first: 1.324e-01 second: 1.430e-01 infty: 2.101e-01 bias: 2.191e-12 P time: 1.30982e+06 first: 1.329e-01 second: 1.437e-01 infty: 2.106e-01 bias: 4.061e-11 P time: 1.31407e+06 first: 1.330e-01 second: 1.441e-01 infty: 2.104e-01 bias: 2.637e-11 P time: 1.31832e+06 first: 1.328e-01 second: 1.440e-01 infty: 2.093e-01 bias: 2.529e-11 P time: 1.32257e+06 first: 1.324e-01 second: 1.436e-01 infty: 2.075e-01 bias: 1.742e-11 P time: 1.32683e+06 first: 1.321e-01 second: 1.433e-01 infty: 2.052e-01 bias: 1.494e-11 P time: 1.33108e+06 first: 1.324e-01 second: 1.435e-01 infty: 2.053e-01 bias: 1.741e-11 P time: 1.33533e+06 first: 1.332e-01 second: 1.442e-01 infty: 2.074e-01 bias: 1.553e-11 P time: 1.33958e+06 first: 1.340e-01 second: 1.448e-01 infty: 2.089e-01 bias: 3.913e-11 P time: 1.34384e+06 first: 1.343e-01 second: 1.450e-01 infty: 2.097e-01 bias: 5.003e-12 P time: 1.34809e+06 first: 1.341e-01 second: 1.449e-01 infty: 2.096e-01 bias: 3.596e-11 P time: 1.35234e+06 first: 1.338e-01 second: 1.445e-01 infty: 2.089e-01 bias: 1.279e-11 P time: 1.35659e+06 first: 1.338e-01 second: 1.444e-01 infty: 2.078e-01 bias: 1.080e-11 P time: 1.36084e+06 first: 1.342e-01 second: 1.448e-01 infty: 2.063e-01 bias: 2.756e-11 P time: 1.3651e+06 first: 1.349e-01 second: 1.456e-01 infty: 2.065e-01 bias: 3.445e-11 P time: 1.36935e+06 first: 1.356e-01 second: 1.463e-01 infty: 2.089e-01 bias: 2.076e-11 P time: 1.37361e+06 first: 1.359e-01 second: 1.466e-01 infty: 2.106e-01 bias: 1.630e-11 P time: 1.37786e+06 first: 1.356e-01 second: 1.464e-01 infty: 2.114e-01 bias: 1.843e-11 P time: 1.38212e+06 first: 1.354e-01 second: 1.460e-01 infty: 2.116e-01 bias: 1.509e-11 P time: 1.38638e+06 first: 1.354e-01 second: 1.459e-01 infty: 2.114e-01 bias: 2.314e-11 P time: 1.39063e+06 first: 1.357e-01 second: 1.463e-01 infty: 2.110e-01 bias: 2.637e-11 P time: 1.39489e+06 first: 1.365e-01 second: 1.471e-01 infty: 2.101e-01 bias: 2.363e-11 P time: 1.39915e+06 first: 1.372e-01 second: 1.479e-01 infty: 2.098e-01 bias: 1.879e-11 P time: 1.40341e+06 first: 1.376e-01 second: 1.483e-01 infty: 2.121e-01 bias: 2.458e-11 P time: 1.40768e+06 first: 1.377e-01 second: 1.483e-01 infty: 2.137e-01 bias: 1.847e-11 P time: 1.41194e+06 first: 1.375e-01 second: 1.481e-01 infty: 2.146e-01 bias: 1.327e-11 P time: 1.4162e+06 first: 1.377e-01 second: 1.481e-01 infty: 2.153e-01 bias: 3.936e-11 P time: 1.42047e+06 first: 1.382e-01 second: 1.486e-01 infty: 2.162e-01 bias: 2.765e-11 P time: 1.42474e+06 first: 1.389e-01 second: 1.493e-01 infty: 2.170e-01 bias: 2.084e-11 P time: 1.429e+06 first: 1.396e-01 second: 1.501e-01 infty: 2.172e-01 bias: 2.248e-11 P time: 1.43327e+06 first: 1.397e-01 second: 1.504e-01 infty: 2.168e-01 bias: 2.282e-11 P time: 1.43754e+06 first: 1.396e-01 second: 1.504e-01 infty: 2.161e-01 bias: 2.633e-11 P time: 1.44182e+06 first: 1.394e-01 second: 1.502e-01 infty: 2.182e-01 bias: 2.883e-11 P time: 1.44609e+06 first: 1.398e-01 second: 1.504e-01 infty: 2.206e-01 bias: 2.641e-11 P time: 1.45036e+06 first: 1.405e-01 second: 1.510e-01 infty: 2.229e-01 bias: 1.713e-11 P time: 1.45464e+06 first: 1.414e-01 second: 1.519e-01 infty: 2.248e-01 bias: 2.146e-11 P time: 1.45892e+06 first: 1.421e-01 second: 1.527e-01 infty: 2.257e-01 bias: 2.682e-11 P time: 1.4632e+06 first: 1.422e-01 second: 1.530e-01 infty: 2.258e-01 bias: 1.434e-11 P time: 1.46748e+06 first: 1.418e-01 second: 1.529e-01 infty: 2.251e-01 bias: 1.401e-11 P time: 1.47176e+06 first: 1.417e-01 second: 1.527e-01 infty: 2.249e-01 bias: 2.728e-11 P time: 1.47604e+06 first: 1.419e-01 second: 1.528e-01 infty: 2.274e-01 bias: 2.153e-11 P time: 1.48032e+06 first: 1.426e-01 second: 1.535e-01 infty: 2.299e-01 bias: 1.773e-11 P time: 1.48461e+06 first: 1.434e-01 second: 1.544e-01 infty: 2.320e-01 bias: 5.982e-12 P time: 1.4889e+06 first: 1.442e-01 second: 1.551e-01 infty: 2.333e-01 bias: 2.614e-11 P time: 1.49318e+06 first: 1.445e-01 second: 1.555e-01 infty: 2.335e-01 bias: 1.083e-11 P time: 1.49747e+06 first: 1.444e-01 second: 1.555e-01 infty: 2.329e-01 bias: 3.058e-12 P time: 1.50176e+06 first: 1.442e-01 second: 1.553e-01 infty: 2.319e-01 bias: 1.554e-11 P time: 1.50606e+06 first: 1.441e-01 second: 1.555e-01 infty: 2.321e-01 bias: 2.730e-11 P time: 1.51035e+06 first: 1.448e-01 second: 1.561e-01 infty: 2.335e-01 bias: 4.119e-11 P time: 1.51464e+06 first: 1.456e-01 second: 1.569e-01 infty: 2.349e-01 bias: 2.196e-11 P time: 1.51894e+06 first: 1.462e-01 second: 1.575e-01 infty: 2.357e-01 bias: 2.295e-11 P time: 1.52323e+06 first: 1.464e-01 second: 1.577e-01 infty: 2.364e-01 bias: 1.515e-11 P time: 1.52753e+06 first: 1.463e-01 second: 1.576e-01 infty: 2.368e-01 bias: 2.268e-11 P time: 1.53182e+06 first: 1.462e-01 second: 1.575e-01 infty: 2.366e-01 bias: 2.218e-11 P time: 1.53612e+06 first: 1.464e-01 second: 1.578e-01 infty: 2.362e-01 bias: 7.022e-12 P time: 1.54042e+06 first: 1.472e-01 second: 1.584e-01 infty: 2.376e-01 bias: 2.220e-11 P time: 1.54472e+06 first: 1.480e-01 second: 1.592e-01 infty: 2.388e-01 bias: 2.501e-11 P time: 1.54902e+06 first: 1.484e-01 second: 1.598e-01 infty: 2.394e-01 bias: 2.557e-11 P time: 1.55332e+06 first: 1.485e-01 second: 1.599e-01 infty: 2.407e-01 bias: 2.755e-11 P time: 1.55762e+06 first: 1.483e-01 second: 1.597e-01 infty: 2.418e-01 bias: 2.011e-11 P time: 1.56193e+06 first: 1.482e-01 second: 1.595e-01 infty: 2.423e-01 bias: 3.189e-12 P time: 1.56623e+06 first: 1.481e-01 second: 1.597e-01 infty: 2.425e-01 bias: 1.354e-11 P time: 1.57053e+06 first: 1.489e-01 second: 1.603e-01 infty: 2.425e-01 bias: 1.218e-11 P time: 1.57484e+06 first: 1.498e-01 second: 1.611e-01 infty: 2.422e-01 bias: 2.348e-11 P time: 1.57914e+06 first: 1.503e-01 second: 1.616e-01 infty: 2.413e-01 bias: 2.308e-11 P time: 1.58343e+06 first: 1.505e-01 second: 1.617e-01 infty: 2.400e-01 bias: 2.014e-11 P time: 1.58773e+06 first: 1.503e-01 second: 1.615e-01 infty: 2.408e-01 bias: -1.072e-11 P time: 1.59203e+06 first: 1.502e-01 second: 1.613e-01 infty: 2.407e-01 bias: 1.417e-11 P time: 1.59633e+06 first: 1.501e-01 second: 1.614e-01 infty: 2.402e-01 bias: 1.894e-11 P time: 1.60063e+06 first: 1.505e-01 second: 1.620e-01 infty: 2.394e-01 bias: 1.828e-11 P time: 1.60492e+06 first: 1.513e-01 second: 1.626e-01 infty: 2.382e-01 bias: 2.322e-11 P time: 1.60922e+06 first: 1.517e-01 second: 1.630e-01 infty: 2.365e-01 bias: 2.542e-11 P time: 1.61351e+06 first: 1.517e-01 second: 1.629e-01 infty: 2.375e-01 bias: 3.156e-11 P time: 1.61781e+06 first: 1.515e-01 second: 1.627e-01 infty: 2.384e-01 bias: 2.536e-11 P time: 1.6221e+06 first: 1.514e-01 second: 1.626e-01 infty: 2.388e-01 bias: 9.144e-12 P time: 1.62639e+06 first: 1.515e-01 second: 1.628e-01 infty: 2.385e-01 bias: 6.089e-12 P time: 1.63068e+06 first: 1.521e-01 second: 1.633e-01 infty: 2.378e-01 bias: 1.037e-11 P time: 1.63497e+06 first: 1.526e-01 second: 1.639e-01 infty: 2.367e-01 bias: 1.746e-11 P time: 1.63926e+06 first: 1.530e-01 second: 1.641e-01 infty: 2.363e-01 bias: 1.410e-11 P time: 1.64354e+06 first: 1.528e-01 second: 1.640e-01 infty: 2.354e-01 bias: 5.307e-12 P time: 1.64783e+06 first: 1.525e-01 second: 1.636e-01 infty: 2.344e-01 bias: 1.894e-11 P time: 1.65211e+06 first: 1.523e-01 second: 1.634e-01 infty: 2.354e-01 bias: 8.754e-12 P time: 1.65639e+06 first: 1.526e-01 second: 1.636e-01 infty: 2.376e-01 bias: 1.015e-11 P time: 1.66068e+06 first: 1.532e-01 second: 1.641e-01 infty: 2.392e-01 bias: 1.522e-11 P time: 1.66496e+06 first: 1.538e-01 second: 1.647e-01 infty: 2.403e-01 bias: 1.674e-11 P time: 1.66924e+06 first: 1.541e-01 second: 1.649e-01 infty: 2.408e-01 bias: 4.178e-11 P time: 1.67352e+06 first: 1.540e-01 second: 1.647e-01 infty: 2.405e-01 bias: 1.905e-11 P time: 1.6778e+06 first: 1.537e-01 second: 1.644e-01 infty: 2.395e-01 bias: 2.199e-11 P time: 1.68207e+06 first: 1.536e-01 second: 1.642e-01 infty: 2.381e-01 bias: 3.139e-11 P time: 1.68635e+06 first: 1.537e-01 second: 1.643e-01 infty: 2.365e-01 bias: 1.954e-11 P time: 1.69063e+06 first: 1.543e-01 second: 1.647e-01 infty: 2.386e-01 bias: 1.333e-11 P time: 1.6949e+06 first: 1.546e-01 second: 1.651e-01 infty: 2.405e-01 bias: 1.983e-11 P time: 1.69917e+06 first: 1.548e-01 second: 1.653e-01 infty: 2.419e-01 bias: 2.994e-11 P time: 1.70345e+06 first: 1.547e-01 second: 1.651e-01 infty: 2.425e-01 bias: 2.562e-11 P time: 1.70772e+06 first: 1.544e-01 second: 1.648e-01 infty: 2.426e-01 bias: 1.468e-11 P time: 1.71199e+06 first: 1.542e-01 second: 1.646e-01 infty: 2.424e-01 bias: 2.141e-11 P time: 1.71626e+06 first: 1.546e-01 second: 1.648e-01 infty: 2.418e-01 bias: 1.509e-11 P time: 1.72053e+06 first: 1.550e-01 second: 1.652e-01 infty: 2.409e-01 bias: 2.696e-11 P time: 1.7248e+06 first: 1.553e-01 second: 1.656e-01 infty: 2.391e-01 bias: 2.249e-11 P time: 1.72906e+06 first: 1.553e-01 second: 1.656e-01 infty: 2.370e-01 bias: 2.043e-11 P time: 1.73333e+06 first: 1.549e-01 second: 1.654e-01 infty: 2.388e-01 bias: 2.283e-11 P time: 1.7376e+06 first: 1.544e-01 second: 1.650e-01 infty: 2.402e-01 bias: -5.860e-12 P time: 1.74187e+06 first: 1.543e-01 second: 1.648e-01 infty: 2.412e-01 bias: 1.214e-11 P time: 1.74614e+06 first: 1.548e-01 second: 1.650e-01 infty: 2.420e-01 bias: 2.383e-11 P time: 1.7504e+06 first: 1.556e-01 second: 1.654e-01 infty: 2.425e-01 bias: 2.094e-11 P time: 1.75467e+06 first: 1.561e-01 second: 1.658e-01 infty: 2.422e-01 bias: 1.875e-11 P time: 1.75893e+06 first: 1.562e-01 second: 1.659e-01 infty: 2.411e-01 bias: 1.205e-11 P time: 1.76319e+06 first: 1.557e-01 second: 1.657e-01 infty: 2.392e-01 bias: 3.140e-11 P time: 1.76746e+06 first: 1.550e-01 second: 1.653e-01 infty: 2.368e-01 bias: 2.649e-11 P time: 1.77172e+06 first: 1.542e-01 second: 1.651e-01 infty: 2.340e-01 bias: 2.141e-11 P time: 1.77598e+06 first: 1.541e-01 second: 1.653e-01 infty: 2.351e-01 bias: -4.003e-13 P time: 1.78024e+06 first: 1.550e-01 second: 1.657e-01 infty: 2.370e-01 bias: 1.674e-11 P time: 1.78451e+06 first: 1.558e-01 second: 1.660e-01 infty: 2.383e-01 bias: 3.364e-11 P time: 1.78877e+06 first: 1.561e-01 second: 1.661e-01 infty: 2.386e-01 bias: 1.561e-11 P time: 1.79303e+06 first: 1.561e-01 second: 1.659e-01 infty: 2.383e-01 bias: 1.590e-11 P time: 1.7973e+06 first: 1.558e-01 second: 1.656e-01 infty: 2.375e-01 bias: 2.916e-11 P time: 1.80156e+06 first: 1.554e-01 second: 1.655e-01 infty: 2.363e-01 bias: 3.461e-11 P time: 1.80582e+06 first: 1.550e-01 second: 1.657e-01 infty: 2.347e-01 bias: 2.619e-11 P time: 1.81009e+06 first: 1.550e-01 second: 1.661e-01 infty: 2.328e-01 bias: 1.926e-11 P time: 1.81435e+06 first: 1.556e-01 second: 1.664e-01 infty: 2.305e-01 bias: 1.214e-11 P time: 1.81861e+06 first: 1.561e-01 second: 1.665e-01 infty: 2.315e-01 bias: 1.834e-11 P time: 1.82288e+06 first: 1.563e-01 second: 1.663e-01 infty: 2.326e-01 bias: 2.786e-11 P time: 1.82715e+06 first: 1.564e-01 second: 1.660e-01 infty: 2.331e-01 bias: 2.411e-11 P time: 1.83142e+06 first: 1.563e-01 second: 1.659e-01 infty: 2.333e-01 bias: 2.533e-11 P time: 1.83569e+06 first: 1.564e-01 second: 1.662e-01 infty: 2.332e-01 bias: 2.121e-11 P time: 1.83996e+06 first: 1.565e-01 second: 1.666e-01 infty: 2.327e-01 bias: 1.214e-11 P time: 1.84423e+06 first: 1.566e-01 second: 1.670e-01 infty: 2.316e-01 bias: 1.107e-11 P time: 1.8485e+06 first: 1.567e-01 second: 1.671e-01 infty: 2.298e-01 bias: 2.388e-12 P time: 1.85277e+06 first: 1.567e-01 second: 1.669e-01 infty: 2.273e-01 bias: 2.448e-11 P time: 1.85704e+06 first: 1.568e-01 second: 1.667e-01 infty: 2.276e-01 bias: 2.423e-11 P time: 1.86131e+06 first: 1.570e-01 second: 1.666e-01 infty: 2.291e-01 bias: 2.562e-11 P time: 1.86558e+06 first: 1.573e-01 second: 1.669e-01 infty: 2.302e-01 bias: 1.791e-11 P time: 1.86985e+06 first: 1.576e-01 second: 1.673e-01 infty: 2.310e-01 bias: 1.598e-11 P time: 1.87412e+06 first: 1.579e-01 second: 1.677e-01 infty: 2.311e-01 bias: 1.723e-11 P time: 1.87839e+06 first: 1.580e-01 second: 1.678e-01 infty: 2.303e-01 bias: 3.101e-11 P time: 1.88266e+06 first: 1.580e-01 second: 1.677e-01 infty: 2.293e-01 bias: 3.504e-11 P time: 1.88693e+06 first: 1.580e-01 second: 1.676e-01 infty: 2.277e-01 bias: 3.551e-11 P time: 1.8912e+06 first: 1.583e-01 second: 1.677e-01 infty: 2.267e-01 bias: 3.728e-12 P time: 1.89547e+06 first: 1.586e-01 second: 1.680e-01 infty: 2.290e-01 bias: 2.146e-11 P time: 1.89974e+06 first: 1.590e-01 second: 1.685e-01 infty: 2.308e-01 bias: 1.246e-11 P time: 1.90401e+06 first: 1.593e-01 second: 1.689e-01 infty: 2.320e-01 bias: 1.751e-11 P time: 1.90828e+06 first: 1.595e-01 second: 1.690e-01 infty: 2.323e-01 bias: 2.379e-11 P time: 1.91255e+06 first: 1.595e-01 second: 1.689e-01 infty: 2.324e-01 bias: 3.220e-11 P time: 1.91682e+06 first: 1.595e-01 second: 1.688e-01 infty: 2.320e-01 bias: 2.150e-11 P time: 1.92109e+06 first: 1.598e-01 second: 1.690e-01 infty: 2.313e-01 bias: 9.122e-12 P time: 1.92536e+06 first: 1.603e-01 second: 1.694e-01 infty: 2.302e-01 bias: 6.343e-12 P time: 1.92963e+06 first: 1.608e-01 second: 1.700e-01 infty: 2.323e-01 bias: 1.691e-11 P time: 1.9339e+06 first: 1.611e-01 second: 1.704e-01 infty: 2.343e-01 bias: 2.577e-11 P time: 1.93817e+06 first: 1.613e-01 second: 1.706e-01 infty: 2.365e-01 bias: 1.370e-11 P time: 1.94244e+06 first: 1.613e-01 second: 1.705e-01 infty: 2.377e-01 bias: 1.154e-11 P time: 1.94671e+06 first: 1.613e-01 second: 1.705e-01 infty: 2.382e-01 bias: 1.524e-11 P time: 1.95099e+06 first: 1.614e-01 second: 1.707e-01 infty: 2.384e-01 bias: 1.090e-11 P time: 1.95527e+06 first: 1.618e-01 second: 1.711e-01 infty: 2.383e-01 bias: 1.700e-12 P time: 1.95956e+06 first: 1.624e-01 second: 1.717e-01 infty: 2.377e-01 bias: 1.827e-11 P time: 1.96384e+06 first: 1.627e-01 second: 1.721e-01 infty: 2.390e-01 bias: 2.083e-11 P time: 1.96813e+06 first: 1.628e-01 second: 1.724e-01 infty: 2.419e-01 bias: 1.791e-11 P time: 1.97241e+06 first: 1.630e-01 second: 1.724e-01 infty: 2.441e-01 bias: 2.623e-11 P time: 1.9767e+06 first: 1.632e-01 second: 1.724e-01 infty: 2.453e-01 bias: 2.064e-11 P time: 1.98098e+06 first: 1.633e-01 second: 1.727e-01 infty: 2.461e-01 bias: 2.442e-11 P time: 1.98527e+06 first: 1.638e-01 second: 1.731e-01 infty: 2.465e-01 bias: 1.823e-11 P time: 1.98955e+06 first: 1.641e-01 second: 1.737e-01 infty: 2.465e-01 bias: 3.151e-11 P time: 1.99384e+06 first: 1.645e-01 second: 1.741e-01 infty: 2.458e-01 bias: 2.344e-11 P time: 1.99812e+06 first: 1.648e-01 second: 1.743e-01 infty: 2.470e-01 bias: 1.573e-11 P time: 2.00241e+06 first: 1.648e-01 second: 1.743e-01 infty: 2.494e-01 bias: 2.310e-11 P time: 2.00669e+06 first: 1.650e-01 second: 1.744e-01 infty: 2.511e-01 bias: 2.022e-11 P time: 2.01098e+06 first: 1.652e-01 second: 1.747e-01 infty: 2.519e-01 bias: 2.174e-11 P time: 2.01526e+06 first: 1.655e-01 second: 1.752e-01 infty: 2.524e-01 bias: 1.216e-11 P time: 2.01955e+06 first: 1.659e-01 second: 1.757e-01 infty: 2.524e-01 bias: 2.987e-11 P time: 2.02383e+06 first: 1.664e-01 second: 1.762e-01 infty: 2.535e-01 bias: 2.081e-11 P time: 2.02812e+06 first: 1.666e-01 second: 1.763e-01 infty: 2.540e-01 bias: 1.865e-11 P time: 2.0324e+06 first: 1.666e-01 second: 1.763e-01 infty: 2.538e-01 bias: 2.849e-11 P time: 2.03668e+06 first: 1.666e-01 second: 1.763e-01 infty: 2.532e-01 bias: 4.869e-12 P time: 2.04097e+06 first: 1.670e-01 second: 1.766e-01 infty: 2.532e-01 bias: 2.813e-11 P time: 2.04525e+06 first: 1.675e-01 second: 1.771e-01 infty: 2.547e-01 bias: 2.117e-11 P time: 2.04954e+06 first: 1.677e-01 second: 1.776e-01 infty: 2.557e-01 bias: 2.324e-11 P time: 2.05382e+06 first: 1.681e-01 second: 1.780e-01 infty: 2.560e-01 bias: 1.072e-11 P time: 2.05811e+06 first: 1.682e-01 second: 1.781e-01 infty: 2.557e-01 bias: 1.944e-11 P time: 2.06239e+06 first: 1.682e-01 second: 1.781e-01 infty: 2.563e-01 bias: 2.056e-11 P time: 2.06668e+06 first: 1.683e-01 second: 1.782e-01 infty: 2.573e-01 bias: 2.413e-11 P time: 2.07096e+06 first: 1.686e-01 second: 1.784e-01 infty: 2.580e-01 bias: 2.843e-11 gerris-snapshot-131206/test/rossby/river/ec-60000644000175100017510000043301212250371172015772 00000000000000Velocity2 time: 0 sum: 9.729986e+16 Velocity2 time: 684.36 sum: 9.730166e+16 Velocity2 time: 1368.44 sum: 9.730937e+16 Velocity2 time: 2052.5 sum: 9.732277e+16 Velocity2 time: 2736.54 sum: 9.734147e+16 Velocity2 time: 3420.47 sum: 9.736496e+16 Velocity2 time: 4104.27 sum: 9.739262e+16 Velocity2 time: 4787.96 sum: 9.742370e+16 Velocity2 time: 5471.52 sum: 9.745738e+16 Velocity2 time: 6154.95 sum: 9.749279e+16 Velocity2 time: 6838.25 sum: 9.752902e+16 Velocity2 time: 7521.43 sum: 9.756520e+16 Velocity2 time: 8204.49 sum: 9.760048e+16 Velocity2 time: 8887.44 sum: 9.763409e+16 Velocity2 time: 9570.31 sum: 9.766538e+16 Velocity2 time: 10253.1 sum: 9.769384e+16 Velocity2 time: 10935.8 sum: 9.771911e+16 Velocity2 time: 11618.5 sum: 9.774097e+16 Velocity2 time: 12301.2 sum: 9.775940e+16 Velocity2 time: 12983.8 sum: 9.777450e+16 Velocity2 time: 13666.5 sum: 9.778651e+16 Velocity2 time: 14349.2 sum: 9.779577e+16 Velocity2 time: 15031.9 sum: 9.780269e+16 Velocity2 time: 15714.7 sum: 9.780771e+16 Velocity2 time: 16397.5 sum: 9.781128e+16 Velocity2 time: 17080.4 sum: 9.781385e+16 Velocity2 time: 17763.4 sum: 9.781579e+16 Velocity2 time: 18446.4 sum: 9.781744e+16 Velocity2 time: 19129.5 sum: 9.781902e+16 Velocity2 time: 19812.6 sum: 9.782071e+16 Velocity2 time: 20495.7 sum: 9.782256e+16 Velocity2 time: 21178.9 sum: 9.782457e+16 Velocity2 time: 21862.1 sum: 9.782663e+16 Velocity2 time: 22545.2 sum: 9.782855e+16 Velocity2 time: 23228.2 sum: 9.783006e+16 Velocity2 time: 23911.1 sum: 9.783085e+16 Velocity2 time: 24593.8 sum: 9.783053e+16 Velocity2 time: 25276.2 sum: 9.782868e+16 Velocity2 time: 25958.5 sum: 9.782487e+16 Velocity2 time: 26640.6 sum: 9.781869e+16 Velocity2 time: 27322.5 sum: 9.780975e+16 Velocity2 time: 28004.1 sum: 9.779774e+16 Velocity2 time: 28685.6 sum: 9.778243e+16 Velocity2 time: 29366.9 sum: 9.776375e+16 Velocity2 time: 30048 sum: 9.774176e+16 Velocity2 time: 30728.9 sum: 9.771667e+16 Velocity2 time: 31409.7 sum: 9.768888e+16 Velocity2 time: 32090.3 sum: 9.765895e+16 Velocity2 time: 32770.8 sum: 9.762755e+16 Velocity2 time: 33451.1 sum: 9.759550e+16 Velocity2 time: 34131.3 sum: 9.756366e+16 Velocity2 time: 34811.4 sum: 9.753293e+16 Velocity2 time: 35491.3 sum: 9.750417e+16 Velocity2 time: 36171.1 sum: 9.747821e+16 Velocity2 time: 36850.8 sum: 9.745574e+16 Velocity2 time: 37530.2 sum: 9.743732e+16 Velocity2 time: 38209.6 sum: 9.742337e+16 Velocity2 time: 38888.7 sum: 9.741408e+16 Velocity2 time: 39567.7 sum: 9.740949e+16 Velocity2 time: 40246.5 sum: 9.740944e+16 Velocity2 time: 40925.1 sum: 9.741362e+16 Velocity2 time: 41603.5 sum: 9.742156e+16 Velocity2 time: 42281.7 sum: 9.743267e+16 Velocity2 time: 42959.7 sum: 9.744629e+16 Velocity2 time: 43637.4 sum: 9.746169e+16 Velocity2 time: 44314.9 sum: 9.747813e+16 Velocity2 time: 44992.2 sum: 9.749485e+16 Velocity2 time: 45669.3 sum: 9.751116e+16 Velocity2 time: 46346.1 sum: 9.752643e+16 Velocity2 time: 47022.8 sum: 9.754011e+16 Velocity2 time: 47699.2 sum: 9.755178e+16 Velocity2 time: 48375.4 sum: 9.756117e+16 Velocity2 time: 49051.5 sum: 9.756813e+16 Velocity2 time: 49727.3 sum: 9.757270e+16 Velocity2 time: 50403 sum: 9.757509e+16 Velocity2 time: 51078.6 sum: 9.757565e+16 Velocity2 time: 51754 sum: 9.757490e+16 Velocity2 time: 52429.3 sum: 9.757349e+16 Velocity2 time: 53104.5 sum: 9.757213e+16 Velocity2 time: 53779.6 sum: 9.757163e+16 Velocity2 time: 54454.5 sum: 9.757278e+16 Velocity2 time: 55129.4 sum: 9.757634e+16 Velocity2 time: 55804.1 sum: 9.758300e+16 Velocity2 time: 56478.7 sum: 9.759332e+16 Velocity2 time: 57153.1 sum: 9.760769e+16 Velocity2 time: 57827.4 sum: 9.762632e+16 Velocity2 time: 58501.6 sum: 9.764924e+16 Velocity2 time: 59175.6 sum: 9.767624e+16 Velocity2 time: 59849.4 sum: 9.770693e+16 Velocity2 time: 60523.1 sum: 9.774074e+16 Velocity2 time: 61196.6 sum: 9.777692e+16 Velocity2 time: 61869.9 sum: 9.781462e+16 Velocity2 time: 62543 sum: 9.785286e+16 Velocity2 time: 63216 sum: 9.789064e+16 Velocity2 time: 63888.7 sum: 9.792691e+16 Velocity2 time: 64561.3 sum: 9.796062e+16 Velocity2 time: 65233.7 sum: 9.799079e+16 Velocity2 time: 65905.8 sum: 9.801649e+16 Velocity2 time: 66577.8 sum: 9.803689e+16 Velocity2 time: 67249.6 sum: 9.805129e+16 Velocity2 time: 67921.2 sum: 9.805911e+16 Velocity2 time: 68592.6 sum: 9.805997e+16 Velocity2 time: 69263.8 sum: 9.805362e+16 Velocity2 time: 69934.7 sum: 9.804005e+16 Velocity2 time: 70605.6 sum: 9.801943e+16 Velocity2 time: 71276.2 sum: 9.799213e+16 Velocity2 time: 71946.7 sum: 9.795873e+16 Velocity2 time: 72617 sum: 9.791997e+16 Velocity2 time: 73287.2 sum: 9.787679e+16 Velocity2 time: 73957.3 sum: 9.783022e+16 Velocity2 time: 74627.2 sum: 9.778141e+16 Velocity2 time: 75297.1 sum: 9.773159e+16 Velocity2 time: 75966.8 sum: 9.768196e+16 Velocity2 time: 76636.4 sum: 9.763372e+16 Velocity2 time: 77305.9 sum: 9.758799e+16 Velocity2 time: 77975.3 sum: 9.754574e+16 Velocity2 time: 78644.6 sum: 9.750782e+16 Velocity2 time: 79313.7 sum: 9.747489e+16 Velocity2 time: 79982.8 sum: 9.744739e+16 Velocity2 time: 80651.7 sum: 9.742559e+16 Velocity2 time: 81320.5 sum: 9.740952e+16 Velocity2 time: 81989.1 sum: 9.739904e+16 Velocity2 time: 82657.5 sum: 9.739384e+16 Velocity2 time: 83325.8 sum: 9.739344e+16 Velocity2 time: 83993.9 sum: 9.739727e+16 Velocity2 time: 84661.9 sum: 9.740466e+16 Velocity2 time: 85329.6 sum: 9.741487e+16 Velocity2 time: 85997.2 sum: 9.742718e+16 Velocity2 time: 86664.5 sum: 9.744085e+16 Velocity2 time: 87331.6 sum: 9.745517e+16 Velocity2 time: 87998.6 sum: 9.746953e+16 Velocity2 time: 88665.3 sum: 9.748340e+16 Velocity2 time: 89331.9 sum: 9.749637e+16 Velocity2 time: 89998.3 sum: 9.750817e+16 Velocity2 time: 90664.5 sum: 9.751868e+16 Velocity2 time: 91330.5 sum: 9.752794e+16 Velocity2 time: 91996.4 sum: 9.753614e+16 Velocity2 time: 92662.2 sum: 9.754363e+16 Velocity2 time: 93327.8 sum: 9.755086e+16 Velocity2 time: 93993.3 sum: 9.755841e+16 Velocity2 time: 94658.7 sum: 9.756690e+16 Velocity2 time: 95324 sum: 9.757697e+16 Velocity2 time: 95989.2 sum: 9.758922e+16 Velocity2 time: 96654.3 sum: 9.760419e+16 Velocity2 time: 97319.3 sum: 9.762228e+16 Velocity2 time: 97984.2 sum: 9.764374e+16 Velocity2 time: 98649 sum: 9.766862e+16 Velocity2 time: 99313.8 sum: 9.769677e+16 Velocity2 time: 99978.4 sum: 9.772781e+16 Velocity2 time: 100643 sum: 9.776116e+16 Velocity2 time: 101307 sum: 9.779607e+16 Velocity2 time: 101972 sum: 9.783160e+16 Velocity2 time: 102636 sum: 9.786673e+16 Velocity2 time: 103300 sum: 9.790038e+16 Velocity2 time: 103964 sum: 9.793143e+16 Velocity2 time: 104628 sum: 9.795882e+16 Velocity2 time: 105291 sum: 9.798155e+16 Velocity2 time: 105955 sum: 9.799875e+16 Velocity2 time: 106618 sum: 9.800969e+16 Velocity2 time: 107281 sum: 9.801385e+16 Velocity2 time: 107944 sum: 9.801087e+16 Velocity2 time: 108607 sum: 9.800064e+16 Velocity2 time: 109270 sum: 9.798324e+16 Velocity2 time: 109933 sum: 9.795899e+16 Velocity2 time: 110595 sum: 9.792839e+16 Velocity2 time: 111257 sum: 9.789216e+16 Velocity2 time: 111920 sum: 9.785118e+16 Velocity2 time: 112582 sum: 9.780648e+16 Velocity2 time: 113244 sum: 9.775923e+16 Velocity2 time: 113906 sum: 9.771064e+16 Velocity2 time: 114568 sum: 9.766199e+16 Velocity2 time: 115230 sum: 9.761458e+16 Velocity2 time: 115892 sum: 9.756961e+16 Velocity2 time: 116554 sum: 9.752823e+16 Velocity2 time: 117216 sum: 9.749144e+16 Velocity2 time: 117877 sum: 9.746005e+16 Velocity2 time: 118539 sum: 9.743469e+16 Velocity2 time: 119201 sum: 9.741572e+16 Velocity2 time: 119862 sum: 9.740328e+16 Velocity2 time: 120524 sum: 9.739725e+16 Velocity2 time: 121185 sum: 9.739726e+16 Velocity2 time: 121847 sum: 9.740275e+16 Velocity2 time: 122508 sum: 9.741295e+16 Velocity2 time: 123170 sum: 9.742695e+16 Velocity2 time: 123831 sum: 9.744370e+16 Velocity2 time: 124492 sum: 9.746212e+16 Velocity2 time: 125153 sum: 9.748107e+16 Velocity2 time: 125814 sum: 9.749947e+16 Velocity2 time: 126475 sum: 9.751624e+16 Velocity2 time: 127135 sum: 9.753045e+16 Velocity2 time: 127796 sum: 9.754125e+16 Velocity2 time: 128457 sum: 9.754796e+16 Velocity2 time: 129117 sum: 9.755007e+16 Velocity2 time: 129777 sum: 9.754725e+16 Velocity2 time: 130437 sum: 9.753938e+16 Velocity2 time: 131097 sum: 9.752652e+16 Velocity2 time: 131757 sum: 9.750897e+16 Velocity2 time: 132417 sum: 9.748721e+16 Velocity2 time: 133077 sum: 9.746189e+16 Velocity2 time: 133737 sum: 9.743385e+16 Velocity2 time: 134397 sum: 9.740407e+16 Velocity2 time: 135056 sum: 9.737360e+16 Velocity2 time: 135716 sum: 9.734360e+16 Velocity2 time: 136375 sum: 9.731521e+16 Velocity2 time: 137035 sum: 9.728957e+16 Velocity2 time: 137694 sum: 9.726771e+16 Velocity2 time: 138353 sum: 9.725056e+16 Velocity2 time: 139013 sum: 9.723888e+16 Velocity2 time: 139672 sum: 9.723322e+16 Velocity2 time: 140331 sum: 9.723391e+16 Velocity2 time: 140990 sum: 9.724105e+16 Velocity2 time: 141649 sum: 9.725447e+16 Velocity2 time: 142309 sum: 9.727378e+16 Velocity2 time: 142968 sum: 9.729837e+16 Velocity2 time: 143627 sum: 9.732744e+16 Velocity2 time: 144286 sum: 9.736004e+16 Velocity2 time: 144944 sum: 9.739510e+16 Velocity2 time: 145603 sum: 9.743147e+16 Velocity2 time: 146262 sum: 9.746800e+16 Velocity2 time: 146921 sum: 9.750355e+16 Velocity2 time: 147579 sum: 9.753705e+16 Velocity2 time: 148238 sum: 9.756752e+16 Velocity2 time: 148896 sum: 9.759412e+16 Velocity2 time: 149555 sum: 9.761615e+16 Velocity2 time: 150213 sum: 9.763310e+16 Velocity2 time: 150872 sum: 9.764461e+16 Velocity2 time: 151530 sum: 9.765054e+16 Velocity2 time: 152189 sum: 9.765090e+16 Velocity2 time: 152847 sum: 9.764592e+16 Velocity2 time: 153505 sum: 9.763595e+16 Velocity2 time: 154163 sum: 9.762150e+16 Velocity2 time: 154822 sum: 9.760320e+16 Velocity2 time: 155480 sum: 9.758175e+16 Velocity2 time: 156138 sum: 9.755791e+16 Velocity2 time: 156796 sum: 9.753244e+16 Velocity2 time: 157454 sum: 9.750609e+16 Velocity2 time: 158113 sum: 9.747951e+16 Velocity2 time: 158771 sum: 9.745327e+16 Velocity2 time: 159429 sum: 9.742780e+16 Velocity2 time: 160088 sum: 9.740336e+16 Velocity2 time: 160746 sum: 9.738007e+16 Velocity2 time: 161404 sum: 9.735786e+16 Velocity2 time: 162063 sum: 9.733654e+16 Velocity2 time: 162721 sum: 9.731577e+16 Velocity2 time: 163379 sum: 9.729509e+16 Velocity2 time: 164038 sum: 9.727401e+16 Velocity2 time: 164696 sum: 9.725199e+16 Velocity2 time: 165355 sum: 9.722853e+16 Velocity2 time: 166013 sum: 9.720316e+16 Velocity2 time: 166671 sum: 9.717551e+16 Velocity2 time: 167329 sum: 9.714534e+16 Velocity2 time: 167987 sum: 9.711252e+16 Velocity2 time: 168645 sum: 9.707711e+16 Velocity2 time: 169303 sum: 9.703931e+16 Velocity2 time: 169961 sum: 9.699947e+16 Velocity2 time: 170619 sum: 9.695810e+16 Velocity2 time: 171276 sum: 9.691585e+16 Velocity2 time: 171934 sum: 9.687348e+16 Velocity2 time: 172591 sum: 9.683183e+16 Velocity2 time: 173249 sum: 9.679183e+16 Velocity2 time: 173906 sum: 9.675442e+16 Velocity2 time: 174564 sum: 9.672058e+16 Velocity2 time: 175221 sum: 9.669125e+16 Velocity2 time: 175878 sum: 9.666732e+16 Velocity2 time: 176536 sum: 9.664959e+16 Velocity2 time: 177193 sum: 9.663874e+16 Velocity2 time: 177850 sum: 9.663530e+16 Velocity2 time: 178508 sum: 9.663963e+16 Velocity2 time: 179165 sum: 9.665189e+16 Velocity2 time: 179823 sum: 9.667201e+16 Velocity2 time: 180480 sum: 9.669974e+16 Velocity2 time: 181138 sum: 9.673455e+16 Velocity2 time: 181796 sum: 9.677573e+16 Velocity2 time: 182453 sum: 9.682234e+16 Velocity2 time: 183111 sum: 9.687328e+16 Velocity2 time: 183769 sum: 9.692730e+16 Velocity2 time: 184427 sum: 9.698302e+16 Velocity2 time: 185085 sum: 9.703900e+16 Velocity2 time: 185743 sum: 9.709378e+16 Velocity2 time: 186401 sum: 9.714595e+16 Velocity2 time: 187059 sum: 9.719412e+16 Velocity2 time: 187717 sum: 9.723708e+16 Velocity2 time: 188375 sum: 9.727370e+16 Velocity2 time: 189033 sum: 9.730309e+16 Velocity2 time: 189691 sum: 9.732452e+16 Velocity2 time: 190349 sum: 9.733751e+16 Velocity2 time: 191007 sum: 9.734177e+16 Velocity2 time: 191665 sum: 9.733727e+16 Velocity2 time: 192323 sum: 9.732417e+16 Velocity2 time: 192980 sum: 9.730287e+16 Velocity2 time: 193638 sum: 9.727396e+16 Velocity2 time: 194296 sum: 9.723819e+16 Velocity2 time: 194954 sum: 9.719649e+16 Velocity2 time: 195612 sum: 9.714993e+16 Velocity2 time: 196270 sum: 9.709963e+16 Velocity2 time: 196929 sum: 9.704682e+16 Velocity2 time: 197587 sum: 9.699273e+16 Velocity2 time: 198245 sum: 9.693855e+16 Velocity2 time: 198903 sum: 9.688545e+16 Velocity2 time: 199561 sum: 9.683448e+16 Velocity2 time: 200220 sum: 9.678654e+16 Velocity2 time: 200878 sum: 9.674239e+16 Velocity2 time: 201537 sum: 9.670259e+16 Velocity2 time: 202195 sum: 9.666750e+16 Velocity2 time: 202854 sum: 9.663729e+16 Velocity2 time: 203513 sum: 9.661191e+16 Velocity2 time: 204172 sum: 9.659114e+16 Velocity2 time: 204831 sum: 9.657459e+16 Velocity2 time: 205489 sum: 9.656177e+16 Velocity2 time: 206148 sum: 9.655207e+16 Velocity2 time: 206808 sum: 9.654484e+16 Velocity2 time: 207467 sum: 9.653945e+16 Velocity2 time: 208126 sum: 9.653524e+16 Velocity2 time: 208785 sum: 9.653164e+16 Velocity2 time: 209444 sum: 9.652814e+16 Velocity2 time: 210103 sum: 9.652433e+16 Velocity2 time: 210763 sum: 9.651989e+16 Velocity2 time: 211422 sum: 9.651464e+16 Velocity2 time: 212081 sum: 9.650849e+16 Velocity2 time: 212741 sum: 9.650145e+16 Velocity2 time: 213400 sum: 9.649363e+16 Velocity2 time: 214059 sum: 9.648523e+16 Velocity2 time: 214719 sum: 9.647649e+16 Velocity2 time: 215379 sum: 9.646772e+16 Velocity2 time: 216038 sum: 9.645924e+16 Velocity2 time: 216698 sum: 9.645136e+16 Velocity2 time: 217358 sum: 9.644441e+16 Velocity2 time: 218018 sum: 9.643865e+16 Velocity2 time: 218678 sum: 9.643430e+16 Velocity2 time: 219338 sum: 9.643154e+16 Velocity2 time: 219999 sum: 9.643044e+16 Velocity2 time: 220659 sum: 9.643099e+16 Velocity2 time: 221320 sum: 9.643310e+16 Velocity2 time: 221980 sum: 9.643658e+16 Velocity2 time: 222641 sum: 9.644114e+16 Velocity2 time: 223302 sum: 9.644644e+16 Velocity2 time: 223963 sum: 9.645205e+16 Velocity2 time: 224624 sum: 9.645752e+16 Velocity2 time: 225285 sum: 9.646240e+16 Velocity2 time: 225946 sum: 9.646623e+16 Velocity2 time: 226608 sum: 9.646862e+16 Velocity2 time: 227269 sum: 9.646924e+16 Velocity2 time: 227930 sum: 9.646788e+16 Velocity2 time: 228592 sum: 9.646442e+16 Velocity2 time: 229253 sum: 9.645889e+16 Velocity2 time: 229915 sum: 9.645141e+16 Velocity2 time: 230576 sum: 9.644227e+16 Velocity2 time: 231237 sum: 9.643183e+16 Velocity2 time: 231899 sum: 9.642055e+16 Velocity2 time: 232560 sum: 9.640895e+16 Velocity2 time: 233221 sum: 9.639759e+16 Velocity2 time: 233882 sum: 9.638705e+16 Velocity2 time: 234543 sum: 9.637786e+16 Velocity2 time: 235204 sum: 9.637055e+16 Velocity2 time: 235865 sum: 9.636555e+16 Velocity2 time: 236526 sum: 9.636321e+16 Velocity2 time: 237187 sum: 9.636381e+16 Velocity2 time: 237847 sum: 9.636747e+16 Velocity2 time: 238508 sum: 9.637422e+16 Velocity2 time: 239169 sum: 9.638395e+16 Velocity2 time: 239830 sum: 9.639643e+16 Velocity2 time: 240491 sum: 9.641129e+16 Velocity2 time: 241152 sum: 9.642804e+16 Velocity2 time: 241813 sum: 9.644608e+16 Velocity2 time: 242474 sum: 9.646470e+16 Velocity2 time: 243135 sum: 9.648311e+16 Velocity2 time: 243797 sum: 9.650047e+16 Velocity2 time: 244458 sum: 9.651592e+16 Velocity2 time: 245120 sum: 9.652857e+16 Velocity2 time: 245782 sum: 9.653760e+16 Velocity2 time: 246443 sum: 9.654225e+16 Velocity2 time: 247105 sum: 9.654185e+16 Velocity2 time: 247767 sum: 9.653589e+16 Velocity2 time: 248429 sum: 9.652398e+16 Velocity2 time: 249091 sum: 9.650593e+16 Velocity2 time: 249753 sum: 9.648172e+16 Velocity2 time: 250415 sum: 9.645152e+16 Velocity2 time: 251077 sum: 9.641565e+16 Velocity2 time: 251739 sum: 9.637465e+16 Velocity2 time: 252400 sum: 9.632915e+16 Velocity2 time: 253062 sum: 9.627995e+16 Velocity2 time: 253724 sum: 9.622789e+16 Velocity2 time: 254386 sum: 9.617392e+16 Velocity2 time: 255048 sum: 9.611902e+16 Velocity2 time: 255710 sum: 9.606417e+16 Velocity2 time: 256371 sum: 9.601034e+16 Velocity2 time: 257033 sum: 9.595848e+16 Velocity2 time: 257695 sum: 9.590950e+16 Velocity2 time: 258356 sum: 9.586424e+16 Velocity2 time: 259018 sum: 9.582344e+16 Velocity2 time: 259679 sum: 9.578780e+16 Velocity2 time: 260341 sum: 9.575789e+16 Velocity2 time: 261002 sum: 9.573415e+16 Velocity2 time: 261663 sum: 9.571694e+16 Velocity2 time: 262325 sum: 9.570645e+16 Velocity2 time: 262986 sum: 9.570274e+16 Velocity2 time: 263647 sum: 9.570570e+16 Velocity2 time: 264309 sum: 9.571511e+16 Velocity2 time: 264970 sum: 9.573059e+16 Velocity2 time: 265632 sum: 9.575165e+16 Velocity2 time: 266293 sum: 9.577769e+16 Velocity2 time: 266954 sum: 9.580803e+16 Velocity2 time: 267616 sum: 9.584195e+16 Velocity2 time: 268277 sum: 9.587871e+16 Velocity2 time: 268939 sum: 9.591757e+16 Velocity2 time: 269600 sum: 9.595782e+16 Velocity2 time: 270262 sum: 9.599883e+16 Velocity2 time: 270923 sum: 9.603999e+16 Velocity2 time: 271584 sum: 9.608081e+16 Velocity2 time: 272246 sum: 9.612087e+16 Velocity2 time: 272907 sum: 9.615980e+16 Velocity2 time: 273568 sum: 9.619731e+16 Velocity2 time: 274229 sum: 9.623317e+16 Velocity2 time: 274890 sum: 9.626715e+16 Velocity2 time: 275551 sum: 9.629906e+16 Velocity2 time: 276212 sum: 9.632871e+16 Velocity2 time: 276873 sum: 9.635590e+16 Velocity2 time: 277534 sum: 9.638041e+16 Velocity2 time: 278195 sum: 9.640200e+16 Velocity2 time: 278856 sum: 9.642041e+16 Velocity2 time: 279517 sum: 9.643536e+16 Velocity2 time: 280178 sum: 9.644656e+16 Velocity2 time: 280839 sum: 9.645369e+16 Velocity2 time: 281500 sum: 9.645646e+16 Velocity2 time: 282162 sum: 9.645457e+16 Velocity2 time: 282823 sum: 9.644776e+16 Velocity2 time: 283484 sum: 9.643581e+16 Velocity2 time: 284146 sum: 9.641854e+16 Velocity2 time: 284807 sum: 9.639589e+16 Velocity2 time: 285469 sum: 9.636785e+16 Velocity2 time: 286130 sum: 9.633454e+16 Velocity2 time: 286792 sum: 9.629622e+16 Velocity2 time: 287453 sum: 9.625327e+16 Velocity2 time: 288115 sum: 9.620621e+16 Velocity2 time: 288777 sum: 9.615574e+16 Velocity2 time: 289439 sum: 9.610267e+16 Velocity2 time: 290101 sum: 9.604795e+16 Velocity2 time: 290762 sum: 9.599263e+16 Velocity2 time: 291424 sum: 9.593784e+16 Velocity2 time: 292086 sum: 9.588476e+16 Velocity2 time: 292748 sum: 9.583456e+16 Velocity2 time: 293409 sum: 9.578835e+16 Velocity2 time: 294071 sum: 9.574718e+16 Velocity2 time: 294733 sum: 9.571195e+16 Velocity2 time: 295394 sum: 9.568340e+16 Velocity2 time: 296056 sum: 9.566207e+16 Velocity2 time: 296717 sum: 9.564830e+16 Velocity2 time: 297379 sum: 9.564221e+16 Velocity2 time: 298041 sum: 9.564371e+16 Velocity2 time: 298702 sum: 9.565249e+16 Velocity2 time: 299364 sum: 9.566805e+16 Velocity2 time: 300026 sum: 9.568976e+16 Velocity2 time: 300687 sum: 9.571681e+16 Velocity2 time: 301349 sum: 9.574832e+16 Velocity2 time: 302011 sum: 9.578330e+16 Velocity2 time: 302673 sum: 9.582074e+16 Velocity2 time: 303335 sum: 9.585961e+16 Velocity2 time: 303998 sum: 9.589889e+16 Velocity2 time: 304660 sum: 9.593757e+16 Velocity2 time: 305323 sum: 9.597474e+16 Velocity2 time: 305985 sum: 9.600956e+16 Velocity2 time: 306648 sum: 9.604128e+16 Velocity2 time: 307311 sum: 9.606930e+16 Velocity2 time: 307974 sum: 9.609313e+16 Velocity2 time: 308637 sum: 9.611247e+16 Velocity2 time: 309300 sum: 9.612716e+16 Velocity2 time: 309962 sum: 9.613722e+16 Velocity2 time: 310625 sum: 9.614282e+16 Velocity2 time: 311288 sum: 9.614429e+16 Velocity2 time: 311950 sum: 9.614212e+16 Velocity2 time: 312613 sum: 9.613687e+16 Velocity2 time: 313275 sum: 9.612922e+16 Velocity2 time: 313937 sum: 9.611989e+16 Velocity2 time: 314599 sum: 9.610962e+16 Velocity2 time: 315261 sum: 9.609914e+16 Velocity2 time: 315923 sum: 9.608913e+16 Velocity2 time: 316585 sum: 9.608022e+16 Velocity2 time: 317246 sum: 9.607292e+16 Velocity2 time: 317908 sum: 9.606765e+16 Velocity2 time: 318569 sum: 9.606473e+16 Velocity2 time: 319230 sum: 9.606433e+16 Velocity2 time: 319892 sum: 9.606654e+16 Velocity2 time: 320553 sum: 9.607132e+16 Velocity2 time: 321213 sum: 9.607852e+16 Velocity2 time: 321874 sum: 9.608793e+16 Velocity2 time: 322535 sum: 9.609926e+16 Velocity2 time: 323196 sum: 9.611214e+16 Velocity2 time: 323856 sum: 9.612619e+16 Velocity2 time: 324517 sum: 9.614096e+16 Velocity2 time: 325177 sum: 9.615602e+16 Velocity2 time: 325838 sum: 9.617091e+16 Velocity2 time: 326498 sum: 9.618518e+16 Velocity2 time: 327159 sum: 9.619842e+16 Velocity2 time: 327819 sum: 9.621025e+16 Velocity2 time: 328480 sum: 9.622037e+16 Velocity2 time: 329140 sum: 9.622853e+16 Velocity2 time: 329801 sum: 9.623460e+16 Velocity2 time: 330461 sum: 9.623855e+16 Velocity2 time: 331122 sum: 9.624043e+16 Velocity2 time: 331782 sum: 9.624042e+16 Velocity2 time: 332442 sum: 9.623877e+16 Velocity2 time: 333103 sum: 9.623581e+16 Velocity2 time: 333763 sum: 9.623192e+16 Velocity2 time: 334423 sum: 9.622747e+16 Velocity2 time: 335083 sum: 9.622283e+16 Velocity2 time: 335743 sum: 9.621833e+16 Velocity2 time: 336403 sum: 9.621420e+16 Velocity2 time: 337063 sum: 9.621060e+16 Velocity2 time: 337723 sum: 9.620758e+16 Velocity2 time: 338382 sum: 9.620506e+16 Velocity2 time: 339042 sum: 9.620288e+16 Velocity2 time: 339702 sum: 9.620077e+16 Velocity2 time: 340361 sum: 9.619838e+16 Velocity2 time: 341021 sum: 9.619532e+16 Velocity2 time: 341680 sum: 9.619115e+16 Velocity2 time: 342340 sum: 9.618547e+16 Velocity2 time: 342999 sum: 9.617788e+16 Velocity2 time: 343659 sum: 9.616804e+16 Velocity2 time: 344318 sum: 9.615569e+16 Velocity2 time: 344977 sum: 9.614067e+16 Velocity2 time: 345637 sum: 9.612295e+16 Velocity2 time: 346296 sum: 9.610260e+16 Velocity2 time: 346956 sum: 9.607985e+16 Velocity2 time: 347615 sum: 9.605505e+16 Velocity2 time: 348275 sum: 9.602871e+16 Velocity2 time: 348934 sum: 9.600147e+16 Velocity2 time: 349594 sum: 9.597410e+16 Velocity2 time: 350253 sum: 9.594747e+16 Velocity2 time: 350913 sum: 9.592254e+16 Velocity2 time: 351572 sum: 9.590036e+16 Velocity2 time: 352232 sum: 9.588195e+16 Velocity2 time: 352891 sum: 9.586837e+16 Velocity2 time: 353551 sum: 9.586058e+16 Velocity2 time: 354210 sum: 9.585946e+16 Velocity2 time: 354869 sum: 9.586572e+16 Velocity2 time: 355528 sum: 9.587990e+16 Velocity2 time: 356187 sum: 9.590232e+16 Velocity2 time: 356846 sum: 9.593305e+16 Velocity2 time: 357505 sum: 9.597192e+16 Velocity2 time: 358164 sum: 9.601846e+16 Velocity2 time: 358822 sum: 9.607197e+16 Velocity2 time: 359481 sum: 9.613154e+16 Velocity2 time: 360139 sum: 9.619600e+16 Velocity2 time: 360798 sum: 9.626408e+16 Velocity2 time: 361456 sum: 9.633433e+16 Velocity2 time: 362115 sum: 9.640527e+16 Velocity2 time: 362773 sum: 9.647537e+16 Velocity2 time: 363431 sum: 9.654314e+16 Velocity2 time: 364090 sum: 9.660716e+16 Velocity2 time: 364748 sum: 9.666608e+16 Velocity2 time: 365406 sum: 9.671873e+16 Velocity2 time: 366065 sum: 9.676408e+16 Velocity2 time: 366723 sum: 9.680129e+16 Velocity2 time: 367382 sum: 9.682972e+16 Velocity2 time: 368040 sum: 9.684894e+16 Velocity2 time: 368699 sum: 9.685874e+16 Velocity2 time: 369357 sum: 9.685914e+16 Velocity2 time: 370016 sum: 9.685038e+16 Velocity2 time: 370675 sum: 9.683291e+16 Velocity2 time: 371333 sum: 9.680738e+16 Velocity2 time: 371992 sum: 9.677463e+16 Velocity2 time: 372650 sum: 9.673564e+16 Velocity2 time: 373309 sum: 9.669155e+16 Velocity2 time: 373968 sum: 9.664355e+16 Velocity2 time: 374626 sum: 9.659292e+16 Velocity2 time: 375285 sum: 9.654090e+16 Velocity2 time: 375943 sum: 9.648875e+16 Velocity2 time: 376602 sum: 9.643761e+16 Velocity2 time: 377260 sum: 9.638855e+16 Velocity2 time: 377918 sum: 9.634247e+16 Velocity2 time: 378577 sum: 9.630013e+16 Velocity2 time: 379235 sum: 9.626212e+16 Velocity2 time: 379893 sum: 9.622885e+16 Velocity2 time: 380551 sum: 9.620056e+16 Velocity2 time: 381210 sum: 9.617734e+16 Velocity2 time: 381868 sum: 9.615914e+16 Velocity2 time: 382526 sum: 9.614578e+16 Velocity2 time: 383184 sum: 9.613700e+16 Velocity2 time: 383842 sum: 9.613244e+16 Velocity2 time: 384501 sum: 9.613172e+16 Velocity2 time: 385159 sum: 9.613440e+16 Velocity2 time: 385817 sum: 9.614005e+16 Velocity2 time: 386476 sum: 9.614822e+16 Velocity2 time: 387134 sum: 9.615850e+16 Velocity2 time: 387793 sum: 9.617049e+16 Velocity2 time: 388451 sum: 9.618387e+16 Velocity2 time: 389110 sum: 9.619834e+16 Velocity2 time: 389769 sum: 9.621372e+16 Velocity2 time: 390427 sum: 9.622987e+16 Velocity2 time: 391086 sum: 9.624673e+16 Velocity2 time: 391745 sum: 9.626435e+16 Velocity2 time: 392404 sum: 9.628281e+16 Velocity2 time: 393063 sum: 9.630230e+16 Velocity2 time: 393722 sum: 9.632301e+16 Velocity2 time: 394381 sum: 9.634516e+16 Velocity2 time: 395040 sum: 9.636898e+16 Velocity2 time: 395700 sum: 9.639465e+16 Velocity2 time: 396359 sum: 9.642228e+16 Velocity2 time: 397018 sum: 9.645190e+16 Velocity2 time: 397677 sum: 9.648341e+16 Velocity2 time: 398336 sum: 9.651658e+16 Velocity2 time: 398996 sum: 9.655106e+16 Velocity2 time: 399655 sum: 9.658634e+16 Velocity2 time: 400314 sum: 9.662182e+16 Velocity2 time: 400974 sum: 9.665677e+16 Velocity2 time: 401633 sum: 9.669042e+16 Velocity2 time: 402293 sum: 9.672195e+16 Velocity2 time: 402952 sum: 9.675055e+16 Velocity2 time: 403612 sum: 9.677546e+16 Velocity2 time: 404272 sum: 9.679598e+16 Velocity2 time: 404931 sum: 9.681154e+16 Velocity2 time: 405591 sum: 9.682169e+16 Velocity2 time: 406251 sum: 9.682613e+16 Velocity2 time: 406911 sum: 9.682474e+16 Velocity2 time: 407572 sum: 9.681757e+16 Velocity2 time: 408232 sum: 9.680483e+16 Velocity2 time: 408892 sum: 9.678691e+16 Velocity2 time: 409553 sum: 9.676437e+16 Velocity2 time: 410214 sum: 9.673791e+16 Velocity2 time: 410874 sum: 9.670836e+16 Velocity2 time: 411535 sum: 9.667667e+16 Velocity2 time: 412196 sum: 9.664386e+16 Velocity2 time: 412857 sum: 9.661101e+16 Velocity2 time: 413518 sum: 9.657920e+16 Velocity2 time: 414180 sum: 9.654950e+16 Velocity2 time: 414841 sum: 9.652290e+16 Velocity2 time: 415502 sum: 9.650030e+16 Velocity2 time: 416163 sum: 9.648244e+16 Velocity2 time: 416825 sum: 9.646990e+16 Velocity2 time: 417486 sum: 9.646302e+16 Velocity2 time: 418147 sum: 9.646195e+16 Velocity2 time: 418809 sum: 9.646662e+16 Velocity2 time: 419470 sum: 9.647669e+16 Velocity2 time: 420132 sum: 9.649163e+16 Velocity2 time: 420793 sum: 9.651074e+16 Velocity2 time: 421455 sum: 9.653312e+16 Velocity2 time: 422117 sum: 9.655777e+16 Velocity2 time: 422778 sum: 9.658363e+16 Velocity2 time: 423440 sum: 9.660958e+16 Velocity2 time: 424102 sum: 9.663450e+16 Velocity2 time: 424764 sum: 9.665736e+16 Velocity2 time: 425427 sum: 9.667716e+16 Velocity2 time: 426089 sum: 9.669307e+16 Velocity2 time: 426752 sum: 9.670438e+16 Velocity2 time: 427415 sum: 9.671053e+16 Velocity2 time: 428078 sum: 9.671117e+16 Velocity2 time: 428741 sum: 9.670612e+16 Velocity2 time: 429404 sum: 9.669540e+16 Velocity2 time: 430068 sum: 9.667919e+16 Velocity2 time: 430732 sum: 9.665789e+16 Velocity2 time: 431396 sum: 9.663203e+16 Velocity2 time: 432060 sum: 9.660231e+16 Velocity2 time: 432724 sum: 9.656955e+16 Velocity2 time: 433389 sum: 9.653468e+16 Velocity2 time: 434054 sum: 9.649871e+16 Velocity2 time: 434719 sum: 9.646267e+16 Velocity2 time: 435384 sum: 9.642762e+16 Velocity2 time: 436049 sum: 9.639458e+16 Velocity2 time: 436714 sum: 9.636452e+16 Velocity2 time: 437380 sum: 9.633829e+16 Velocity2 time: 438046 sum: 9.631663e+16 Velocity2 time: 438711 sum: 9.630011e+16 Velocity2 time: 439377 sum: 9.628915e+16 Velocity2 time: 440043 sum: 9.628399e+16 Velocity2 time: 440709 sum: 9.628467e+16 Velocity2 time: 441375 sum: 9.629109e+16 Velocity2 time: 442042 sum: 9.630298e+16 Velocity2 time: 442708 sum: 9.631993e+16 Velocity2 time: 443375 sum: 9.634145e+16 Velocity2 time: 444041 sum: 9.636694e+16 Velocity2 time: 444708 sum: 9.639575e+16 Velocity2 time: 445375 sum: 9.642719e+16 Velocity2 time: 446042 sum: 9.646059e+16 Velocity2 time: 446709 sum: 9.649525e+16 Velocity2 time: 447376 sum: 9.653051e+16 Velocity2 time: 448044 sum: 9.656575e+16 Velocity2 time: 448712 sum: 9.660039e+16 Velocity2 time: 449379 sum: 9.663391e+16 Velocity2 time: 450047 sum: 9.666586e+16 Velocity2 time: 450716 sum: 9.669583e+16 Velocity2 time: 451384 sum: 9.672352e+16 Velocity2 time: 452052 sum: 9.674867e+16 Velocity2 time: 452721 sum: 9.677111e+16 Velocity2 time: 453390 sum: 9.679074e+16 Velocity2 time: 454059 sum: 9.680753e+16 Velocity2 time: 454728 sum: 9.682148e+16 Velocity2 time: 455398 sum: 9.683267e+16 Velocity2 time: 456067 sum: 9.684117e+16 Velocity2 time: 456737 sum: 9.684708e+16 Velocity2 time: 457406 sum: 9.685047e+16 Velocity2 time: 458076 sum: 9.685141e+16 Velocity2 time: 458746 sum: 9.684988e+16 Velocity2 time: 459417 sum: 9.684586e+16 Velocity2 time: 460087 sum: 9.683924e+16 Velocity2 time: 460758 sum: 9.682985e+16 Velocity2 time: 461428 sum: 9.681751e+16 Velocity2 time: 462099 sum: 9.680199e+16 Velocity2 time: 462770 sum: 9.678304e+16 Velocity2 time: 463442 sum: 9.676043e+16 Velocity2 time: 464113 sum: 9.673400e+16 Velocity2 time: 464785 sum: 9.670361e+16 Velocity2 time: 465457 sum: 9.666926e+16 Velocity2 time: 466129 sum: 9.663102e+16 Velocity2 time: 466801 sum: 9.658911e+16 Velocity2 time: 467474 sum: 9.654388e+16 Velocity2 time: 468147 sum: 9.649584e+16 Velocity2 time: 468820 sum: 9.644560e+16 Velocity2 time: 469493 sum: 9.639392e+16 Velocity2 time: 470167 sum: 9.634165e+16 Velocity2 time: 470841 sum: 9.628974e+16 Velocity2 time: 471515 sum: 9.623920e+16 Velocity2 time: 472189 sum: 9.619105e+16 Velocity2 time: 472864 sum: 9.614632e+16 Velocity2 time: 473539 sum: 9.610603e+16 Velocity2 time: 474214 sum: 9.607112e+16 Velocity2 time: 474889 sum: 9.604243e+16 Velocity2 time: 475564 sum: 9.602069e+16 Velocity2 time: 476240 sum: 9.600647e+16 Velocity2 time: 476915 sum: 9.600017e+16 Velocity2 time: 477591 sum: 9.600199e+16 Velocity2 time: 478267 sum: 9.601189e+16 Velocity2 time: 478944 sum: 9.602964e+16 Velocity2 time: 479620 sum: 9.605478e+16 Velocity2 time: 480296 sum: 9.608664e+16 Velocity2 time: 480973 sum: 9.612434e+16 Velocity2 time: 481650 sum: 9.616688e+16 Velocity2 time: 482327 sum: 9.621310e+16 Velocity2 time: 483004 sum: 9.626178e+16 Velocity2 time: 483681 sum: 9.631166e+16 Velocity2 time: 484358 sum: 9.636150e+16 Velocity2 time: 485036 sum: 9.641009e+16 Velocity2 time: 485713 sum: 9.645635e+16 Velocity2 time: 486391 sum: 9.649929e+16 Velocity2 time: 487070 sum: 9.653810e+16 Velocity2 time: 487748 sum: 9.657211e+16 Velocity2 time: 488427 sum: 9.660083e+16 Velocity2 time: 489106 sum: 9.662394e+16 Velocity2 time: 489785 sum: 9.664129e+16 Velocity2 time: 490465 sum: 9.665288e+16 Velocity2 time: 491145 sum: 9.665882e+16 Velocity2 time: 491825 sum: 9.665939e+16 Velocity2 time: 492505 sum: 9.665493e+16 Velocity2 time: 493186 sum: 9.664587e+16 Velocity2 time: 493867 sum: 9.663273e+16 Velocity2 time: 494549 sum: 9.661605e+16 Velocity2 time: 495230 sum: 9.659641e+16 Velocity2 time: 495912 sum: 9.657440e+16 Velocity2 time: 496594 sum: 9.655060e+16 Velocity2 time: 497276 sum: 9.652557e+16 Velocity2 time: 497959 sum: 9.649985e+16 Velocity2 time: 498641 sum: 9.647390e+16 Velocity2 time: 499324 sum: 9.644815e+16 Velocity2 time: 500007 sum: 9.642295e+16 Velocity2 time: 500691 sum: 9.639857e+16 Velocity2 time: 501374 sum: 9.637523e+16 Velocity2 time: 502058 sum: 9.635306e+16 Velocity2 time: 502741 sum: 9.633215e+16 Velocity2 time: 503425 sum: 9.631251e+16 Velocity2 time: 504109 sum: 9.629413e+16 Velocity2 time: 504793 sum: 9.627695e+16 Velocity2 time: 505478 sum: 9.626091e+16 Velocity2 time: 506162 sum: 9.624593e+16 Velocity2 time: 506847 sum: 9.623194e+16 Velocity2 time: 507532 sum: 9.621889e+16 Velocity2 time: 508217 sum: 9.620674e+16 Velocity2 time: 508903 sum: 9.619547e+16 Velocity2 time: 509589 sum: 9.618510e+16 Velocity2 time: 510275 sum: 9.617564e+16 Velocity2 time: 510961 sum: 9.616713e+16 Velocity2 time: 511647 sum: 9.615961e+16 Velocity2 time: 512334 sum: 9.615312e+16 Velocity2 time: 513020 sum: 9.614771e+16 Velocity2 time: 513707 sum: 9.614340e+16 Velocity2 time: 514394 sum: 9.614019e+16 Velocity2 time: 515081 sum: 9.613807e+16 Velocity2 time: 515768 sum: 9.613701e+16 Velocity2 time: 516455 sum: 9.613694e+16 Velocity2 time: 517143 sum: 9.613774e+16 Velocity2 time: 517830 sum: 9.613927e+16 Velocity2 time: 518518 sum: 9.614134e+16 Velocity2 time: 519205 sum: 9.614372e+16 Velocity2 time: 519893 sum: 9.614614e+16 Velocity2 time: 520580 sum: 9.614830e+16 Velocity2 time: 521268 sum: 9.614986e+16 Velocity2 time: 521956 sum: 9.615048e+16 Velocity2 time: 522644 sum: 9.614984e+16 Velocity2 time: 523332 sum: 9.614764e+16 Velocity2 time: 524020 sum: 9.614362e+16 Velocity2 time: 524708 sum: 9.613761e+16 Velocity2 time: 525396 sum: 9.612955e+16 Velocity2 time: 526084 sum: 9.611947e+16 Velocity2 time: 526772 sum: 9.610754e+16 Velocity2 time: 527461 sum: 9.609406e+16 Velocity2 time: 528149 sum: 9.607946e+16 Velocity2 time: 528838 sum: 9.606427e+16 Velocity2 time: 529527 sum: 9.604916e+16 Velocity2 time: 530215 sum: 9.603482e+16 Velocity2 time: 530904 sum: 9.602202e+16 Velocity2 time: 531593 sum: 9.601150e+16 Velocity2 time: 532282 sum: 9.600400e+16 Velocity2 time: 532971 sum: 9.600017e+16 Velocity2 time: 533660 sum: 9.600055e+16 Velocity2 time: 534349 sum: 9.600557e+16 Velocity2 time: 535038 sum: 9.601547e+16 Velocity2 time: 535727 sum: 9.603036e+16 Velocity2 time: 536415 sum: 9.605012e+16 Velocity2 time: 537104 sum: 9.607449e+16 Velocity2 time: 537793 sum: 9.610299e+16 Velocity2 time: 538482 sum: 9.613500e+16 Velocity2 time: 539170 sum: 9.616974e+16 Velocity2 time: 539859 sum: 9.620632e+16 Velocity2 time: 540547 sum: 9.624375e+16 Velocity2 time: 541236 sum: 9.628098e+16 Velocity2 time: 541924 sum: 9.631693e+16 Velocity2 time: 542612 sum: 9.635055e+16 Velocity2 time: 543300 sum: 9.638081e+16 Velocity2 time: 543988 sum: 9.640678e+16 Velocity2 time: 544676 sum: 9.642765e+16 Velocity2 time: 545364 sum: 9.644276e+16 Velocity2 time: 546052 sum: 9.645159e+16 Velocity2 time: 546740 sum: 9.645383e+16 Velocity2 time: 547427 sum: 9.644936e+16 Velocity2 time: 548115 sum: 9.643827e+16 Velocity2 time: 548803 sum: 9.642082e+16 Velocity2 time: 549490 sum: 9.639745e+16 Velocity2 time: 550178 sum: 9.636878e+16 Velocity2 time: 550866 sum: 9.633553e+16 Velocity2 time: 551553 sum: 9.629851e+16 Velocity2 time: 552241 sum: 9.625862e+16 Velocity2 time: 552928 sum: 9.621675e+16 Velocity2 time: 553616 sum: 9.617380e+16 Velocity2 time: 554303 sum: 9.613061e+16 Velocity2 time: 554990 sum: 9.608798e+16 Velocity2 time: 555677 sum: 9.604660e+16 Velocity2 time: 556364 sum: 9.600708e+16 Velocity2 time: 557051 sum: 9.596994e+16 Velocity2 time: 557737 sum: 9.593555e+16 Velocity2 time: 558424 sum: 9.590421e+16 Velocity2 time: 559110 sum: 9.587614e+16 Velocity2 time: 559796 sum: 9.585143e+16 Velocity2 time: 560482 sum: 9.583014e+16 Velocity2 time: 561168 sum: 9.581226e+16 Velocity2 time: 561854 sum: 9.579773e+16 Velocity2 time: 562539 sum: 9.578646e+16 Velocity2 time: 563224 sum: 9.577835e+16 Velocity2 time: 563909 sum: 9.577330e+16 Velocity2 time: 564594 sum: 9.577118e+16 Velocity2 time: 565279 sum: 9.577190e+16 Velocity2 time: 565963 sum: 9.577540e+16 Velocity2 time: 566648 sum: 9.578160e+16 Velocity2 time: 567332 sum: 9.579048e+16 Velocity2 time: 568016 sum: 9.580203e+16 Velocity2 time: 568700 sum: 9.581627e+16 Velocity2 time: 569383 sum: 9.583321e+16 Velocity2 time: 570067 sum: 9.585289e+16 Velocity2 time: 570751 sum: 9.587533e+16 Velocity2 time: 571434 sum: 9.590052e+16 Velocity2 time: 572117 sum: 9.592843e+16 Velocity2 time: 572800 sum: 9.595896e+16 Velocity2 time: 573483 sum: 9.599197e+16 Velocity2 time: 574165 sum: 9.602722e+16 Velocity2 time: 574848 sum: 9.606440e+16 Velocity2 time: 575530 sum: 9.610309e+16 Velocity2 time: 576212 sum: 9.614280e+16 Velocity2 time: 576894 sum: 9.618294e+16 Velocity2 time: 577575 sum: 9.622286e+16 Velocity2 time: 578257 sum: 9.626183e+16 Velocity2 time: 578938 sum: 9.629909e+16 Velocity2 time: 579619 sum: 9.633385e+16 Velocity2 time: 580300 sum: 9.636535e+16 Velocity2 time: 580981 sum: 9.639282e+16 Velocity2 time: 581661 sum: 9.641557e+16 Velocity2 time: 582342 sum: 9.643298e+16 Velocity2 time: 583022 sum: 9.644453e+16 Velocity2 time: 583701 sum: 9.644982e+16 Velocity2 time: 584381 sum: 9.644861e+16 Velocity2 time: 585061 sum: 9.644079e+16 Velocity2 time: 585740 sum: 9.642644e+16 Velocity2 time: 586419 sum: 9.640581e+16 Velocity2 time: 587098 sum: 9.637935e+16 Velocity2 time: 587776 sum: 9.634767e+16 Velocity2 time: 588455 sum: 9.631154e+16 Velocity2 time: 589133 sum: 9.627191e+16 Velocity2 time: 589812 sum: 9.622982e+16 Velocity2 time: 590490 sum: 9.618643e+16 Velocity2 time: 591168 sum: 9.614292e+16 Velocity2 time: 591846 sum: 9.610051e+16 Velocity2 time: 592523 sum: 9.606035e+16 Velocity2 time: 593201 sum: 9.602355e+16 Velocity2 time: 593879 sum: 9.599104e+16 Velocity2 time: 594556 sum: 9.596362e+16 Velocity2 time: 595233 sum: 9.594187e+16 Velocity2 time: 595910 sum: 9.592616e+16 Velocity2 time: 596587 sum: 9.591661e+16 Velocity2 time: 597264 sum: 9.591313e+16 Velocity2 time: 597941 sum: 9.591536e+16 Velocity2 time: 598617 sum: 9.592277e+16 Velocity2 time: 599294 sum: 9.593464e+16 Velocity2 time: 599970 sum: 9.595011e+16 Velocity2 time: 600646 sum: 9.596822e+16 Velocity2 time: 601321 sum: 9.598794e+16 Velocity2 time: 601997 sum: 9.600825e+16 Velocity2 time: 602672 sum: 9.602815e+16 Velocity2 time: 603347 sum: 9.604671e+16 Velocity2 time: 604022 sum: 9.606310e+16 Velocity2 time: 604697 sum: 9.607664e+16 Velocity2 time: 605371 sum: 9.608680e+16 Velocity2 time: 606045 sum: 9.609324e+16 Velocity2 time: 606719 sum: 9.609579e+16 Velocity2 time: 607393 sum: 9.609447e+16 Velocity2 time: 608066 sum: 9.608948e+16 Velocity2 time: 608740 sum: 9.608119e+16 Velocity2 time: 609413 sum: 9.607014e+16 Velocity2 time: 610085 sum: 9.605695e+16 Velocity2 time: 610758 sum: 9.604239e+16 Velocity2 time: 611430 sum: 9.602727e+16 Velocity2 time: 612102 sum: 9.601241e+16 Velocity2 time: 612774 sum: 9.599864e+16 Velocity2 time: 613446 sum: 9.598676e+16 Velocity2 time: 614118 sum: 9.597746e+16 Velocity2 time: 614790 sum: 9.597133e+16 Velocity2 time: 615461 sum: 9.596883e+16 Velocity2 time: 616132 sum: 9.597024e+16 Velocity2 time: 616803 sum: 9.597570e+16 Velocity2 time: 617474 sum: 9.598517e+16 Velocity2 time: 618145 sum: 9.599845e+16 Velocity2 time: 618816 sum: 9.601520e+16 Velocity2 time: 619486 sum: 9.603495e+16 Velocity2 time: 620156 sum: 9.605712e+16 Velocity2 time: 620827 sum: 9.608107e+16 Velocity2 time: 621497 sum: 9.610612e+16 Velocity2 time: 622166 sum: 9.613157e+16 Velocity2 time: 622836 sum: 9.615675e+16 Velocity2 time: 623505 sum: 9.618100e+16 Velocity2 time: 624175 sum: 9.620375e+16 Velocity2 time: 624844 sum: 9.622449e+16 Velocity2 time: 625513 sum: 9.624280e+16 Velocity2 time: 626181 sum: 9.625838e+16 Velocity2 time: 626850 sum: 9.627101e+16 Velocity2 time: 627518 sum: 9.628058e+16 Velocity2 time: 628187 sum: 9.628711e+16 Velocity2 time: 628855 sum: 9.629068e+16 Velocity2 time: 629523 sum: 9.629151e+16 Velocity2 time: 630191 sum: 9.628986e+16 Velocity2 time: 630858 sum: 9.628610e+16 Velocity2 time: 631526 sum: 9.628063e+16 Velocity2 time: 632194 sum: 9.627387e+16 Velocity2 time: 632861 sum: 9.626625e+16 Velocity2 time: 633528 sum: 9.625820e+16 Velocity2 time: 634196 sum: 9.625008e+16 Velocity2 time: 634863 sum: 9.624219e+16 Velocity2 time: 635530 sum: 9.623475e+16 Velocity2 time: 636197 sum: 9.622786e+16 Velocity2 time: 636863 sum: 9.622151e+16 Velocity2 time: 637530 sum: 9.621560e+16 Velocity2 time: 638196 sum: 9.620988e+16 Velocity2 time: 638863 sum: 9.620405e+16 Velocity2 time: 639529 sum: 9.619771e+16 Velocity2 time: 640195 sum: 9.619040e+16 Velocity2 time: 640861 sum: 9.618167e+16 Velocity2 time: 641526 sum: 9.617103e+16 Velocity2 time: 642192 sum: 9.615807e+16 Velocity2 time: 642857 sum: 9.614239e+16 Velocity2 time: 643522 sum: 9.612373e+16 Velocity2 time: 644187 sum: 9.610189e+16 Velocity2 time: 644852 sum: 9.607681e+16 Velocity2 time: 645517 sum: 9.604857e+16 Velocity2 time: 646181 sum: 9.601737e+16 Velocity2 time: 646845 sum: 9.598358e+16 Velocity2 time: 647510 sum: 9.594767e+16 Velocity2 time: 648174 sum: 9.591026e+16 Velocity2 time: 648837 sum: 9.587207e+16 Velocity2 time: 649501 sum: 9.583394e+16 Velocity2 time: 650165 sum: 9.579676e+16 Velocity2 time: 650829 sum: 9.576150e+16 Velocity2 time: 651492 sum: 9.572911e+16 Velocity2 time: 652155 sum: 9.570058e+16 Velocity2 time: 652819 sum: 9.567681e+16 Velocity2 time: 653482 sum: 9.565865e+16 Velocity2 time: 654145 sum: 9.564681e+16 Velocity2 time: 654808 sum: 9.564185e+16 Velocity2 time: 655471 sum: 9.564415e+16 Velocity2 time: 656135 sum: 9.565386e+16 Velocity2 time: 656798 sum: 9.567093e+16 Velocity2 time: 657460 sum: 9.569505e+16 Velocity2 time: 658123 sum: 9.572570e+16 Velocity2 time: 658786 sum: 9.576212e+16 Velocity2 time: 659449 sum: 9.580337e+16 Velocity2 time: 660111 sum: 9.584833e+16 Velocity2 time: 660774 sum: 9.589579e+16 Velocity2 time: 661436 sum: 9.594443e+16 Velocity2 time: 662099 sum: 9.599291e+16 Velocity2 time: 662761 sum: 9.603991e+16 Velocity2 time: 663423 sum: 9.608419e+16 Velocity2 time: 664085 sum: 9.612460e+16 Velocity2 time: 664747 sum: 9.616014e+16 Velocity2 time: 665408 sum: 9.618998e+16 Velocity2 time: 666070 sum: 9.621348e+16 Velocity2 time: 666731 sum: 9.623023e+16 Velocity2 time: 667392 sum: 9.624001e+16 Velocity2 time: 668053 sum: 9.624283e+16 Velocity2 time: 668714 sum: 9.623889e+16 Velocity2 time: 669375 sum: 9.622859e+16 Velocity2 time: 670036 sum: 9.621250e+16 Velocity2 time: 670697 sum: 9.619132e+16 Velocity2 time: 671357 sum: 9.616590e+16 Velocity2 time: 672018 sum: 9.613713e+16 Velocity2 time: 672678 sum: 9.610597e+16 Velocity2 time: 673338 sum: 9.607338e+16 Velocity2 time: 673999 sum: 9.604030e+16 Velocity2 time: 674659 sum: 9.600758e+16 Velocity2 time: 675319 sum: 9.597600e+16 Velocity2 time: 675979 sum: 9.594619e+16 Velocity2 time: 676639 sum: 9.591864e+16 Velocity2 time: 677299 sum: 9.589369e+16 Velocity2 time: 677959 sum: 9.587148e+16 Velocity2 time: 678619 sum: 9.585203e+16 Velocity2 time: 679279 sum: 9.583517e+16 Velocity2 time: 679939 sum: 9.582062e+16 Velocity2 time: 680599 sum: 9.580797e+16 Velocity2 time: 681259 sum: 9.579675e+16 Velocity2 time: 681919 sum: 9.578643e+16 Velocity2 time: 682579 sum: 9.577649e+16 Velocity2 time: 683239 sum: 9.576641e+16 Velocity2 time: 683899 sum: 9.575572e+16 Velocity2 time: 684559 sum: 9.574402e+16 Velocity2 time: 685218 sum: 9.573101e+16 Velocity2 time: 685878 sum: 9.571646e+16 Velocity2 time: 686538 sum: 9.570029e+16 Velocity2 time: 687197 sum: 9.568247e+16 Velocity2 time: 687857 sum: 9.566311e+16 Velocity2 time: 688516 sum: 9.564239e+16 Velocity2 time: 689176 sum: 9.562059e+16 Velocity2 time: 689835 sum: 9.559805e+16 Velocity2 time: 690494 sum: 9.557515e+16 Velocity2 time: 691153 sum: 9.555234e+16 Velocity2 time: 691813 sum: 9.553010e+16 Velocity2 time: 692472 sum: 9.550890e+16 Velocity2 time: 693131 sum: 9.548922e+16 Velocity2 time: 693790 sum: 9.547153e+16 Velocity2 time: 694449 sum: 9.545625e+16 Velocity2 time: 695108 sum: 9.544373e+16 Velocity2 time: 695767 sum: 9.543426e+16 Velocity2 time: 696426 sum: 9.542804e+16 Velocity2 time: 697085 sum: 9.542516e+16 Velocity2 time: 697744 sum: 9.542558e+16 Velocity2 time: 698403 sum: 9.542917e+16 Velocity2 time: 699062 sum: 9.543565e+16 Velocity2 time: 699721 sum: 9.544466e+16 Velocity2 time: 700379 sum: 9.545573e+16 Velocity2 time: 701038 sum: 9.546831e+16 Velocity2 time: 701697 sum: 9.548181e+16 Velocity2 time: 702355 sum: 9.549560e+16 Velocity2 time: 703014 sum: 9.550908e+16 Velocity2 time: 703672 sum: 9.552165e+16 Velocity2 time: 704330 sum: 9.553278e+16 Velocity2 time: 704988 sum: 9.554204e+16 Velocity2 time: 705646 sum: 9.554906e+16 Velocity2 time: 706304 sum: 9.555360e+16 Velocity2 time: 706962 sum: 9.555552e+16 Velocity2 time: 707619 sum: 9.555483e+16 Velocity2 time: 708277 sum: 9.555161e+16 Velocity2 time: 708935 sum: 9.554607e+16 Velocity2 time: 709592 sum: 9.553853e+16 Velocity2 time: 710250 sum: 9.552937e+16 Velocity2 time: 710907 sum: 9.551905e+16 Velocity2 time: 711565 sum: 9.550807e+16 Velocity2 time: 712222 sum: 9.549697e+16 Velocity2 time: 712880 sum: 9.548628e+16 Velocity2 time: 713537 sum: 9.547650e+16 Velocity2 time: 714195 sum: 9.546811e+16 Velocity2 time: 714852 sum: 9.546149e+16 Velocity2 time: 715510 sum: 9.545693e+16 Velocity2 time: 716168 sum: 9.545461e+16 Velocity2 time: 716826 sum: 9.545456e+16 Velocity2 time: 717484 sum: 9.545669e+16 Velocity2 time: 718142 sum: 9.546072e+16 Velocity2 time: 718800 sum: 9.546626e+16 Velocity2 time: 719458 sum: 9.547275e+16 Velocity2 time: 720116 sum: 9.547954e+16 Velocity2 time: 720774 sum: 9.548588e+16 Velocity2 time: 721432 sum: 9.549097e+16 Velocity2 time: 722090 sum: 9.549399e+16 Velocity2 time: 722749 sum: 9.549414e+16 Velocity2 time: 723407 sum: 9.549071e+16 Velocity2 time: 724065 sum: 9.548306e+16 Velocity2 time: 724723 sum: 9.547071e+16 Velocity2 time: 725381 sum: 9.545333e+16 Velocity2 time: 726040 sum: 9.543075e+16 Velocity2 time: 726698 sum: 9.540302e+16 Velocity2 time: 727356 sum: 9.537034e+16 Velocity2 time: 728014 sum: 9.533310e+16 Velocity2 time: 728671 sum: 9.529185e+16 Velocity2 time: 729329 sum: 9.524729e+16 Velocity2 time: 729987 sum: 9.520023e+16 Velocity2 time: 730645 sum: 9.515154e+16 Velocity2 time: 731303 sum: 9.510219e+16 Velocity2 time: 731960 sum: 9.505314e+16 Velocity2 time: 732618 sum: 9.500535e+16 Velocity2 time: 733276 sum: 9.495973e+16 Velocity2 time: 733933 sum: 9.491715e+16 Velocity2 time: 734591 sum: 9.487836e+16 Velocity2 time: 735249 sum: 9.484401e+16 Velocity2 time: 735906 sum: 9.481462e+16 Velocity2 time: 736564 sum: 9.479055e+16 Velocity2 time: 737222 sum: 9.477203e+16 Velocity2 time: 737880 sum: 9.475912e+16 Velocity2 time: 738538 sum: 9.475172e+16 Velocity2 time: 739196 sum: 9.474960e+16 Velocity2 time: 739854 sum: 9.475238e+16 Velocity2 time: 740512 sum: 9.475958e+16 Velocity2 time: 741170 sum: 9.477062e+16 Velocity2 time: 741828 sum: 9.478486e+16 Velocity2 time: 742486 sum: 9.480163e+16 Velocity2 time: 743145 sum: 9.482024e+16 Velocity2 time: 743803 sum: 9.484002e+16 Velocity2 time: 744462 sum: 9.486034e+16 Velocity2 time: 745120 sum: 9.488064e+16 Velocity2 time: 745779 sum: 9.490042e+16 Velocity2 time: 746437 sum: 9.491929e+16 Velocity2 time: 747096 sum: 9.493693e+16 Velocity2 time: 747754 sum: 9.495309e+16 Velocity2 time: 748413 sum: 9.496765e+16 Velocity2 time: 749072 sum: 9.498052e+16 Velocity2 time: 749730 sum: 9.499169e+16 Velocity2 time: 750389 sum: 9.500120e+16 Velocity2 time: 751048 sum: 9.500912e+16 Velocity2 time: 751706 sum: 9.501556e+16 Velocity2 time: 752365 sum: 9.502063e+16 Velocity2 time: 753024 sum: 9.502446e+16 Velocity2 time: 753683 sum: 9.502716e+16 Velocity2 time: 754341 sum: 9.502885e+16 Velocity2 time: 755000 sum: 9.502962e+16 Velocity2 time: 755659 sum: 9.502957e+16 Velocity2 time: 756318 sum: 9.502872e+16 Velocity2 time: 756978 sum: 9.502712e+16 Velocity2 time: 757637 sum: 9.502473e+16 Velocity2 time: 758296 sum: 9.502150e+16 Velocity2 time: 758955 sum: 9.501732e+16 Velocity2 time: 759615 sum: 9.501205e+16 Velocity2 time: 760274 sum: 9.500550e+16 Velocity2 time: 760934 sum: 9.499746e+16 Velocity2 time: 761594 sum: 9.498768e+16 Velocity2 time: 762253 sum: 9.497593e+16 Velocity2 time: 762913 sum: 9.496198e+16 Velocity2 time: 763573 sum: 9.494564e+16 Velocity2 time: 764233 sum: 9.492677e+16 Velocity2 time: 764893 sum: 9.490529e+16 Velocity2 time: 765553 sum: 9.488122e+16 Velocity2 time: 766213 sum: 9.485467e+16 Velocity2 time: 766873 sum: 9.482584e+16 Velocity2 time: 767533 sum: 9.479503e+16 Velocity2 time: 768193 sum: 9.476265e+16 Velocity2 time: 768853 sum: 9.472917e+16 Velocity2 time: 769513 sum: 9.469513e+16 Velocity2 time: 770173 sum: 9.466112e+16 Velocity2 time: 770834 sum: 9.462775e+16 Velocity2 time: 771494 sum: 9.459563e+16 Velocity2 time: 772154 sum: 9.456533e+16 Velocity2 time: 772815 sum: 9.453739e+16 Velocity2 time: 773476 sum: 9.451229e+16 Velocity2 time: 774136 sum: 9.449040e+16 Velocity2 time: 774797 sum: 9.447202e+16 Velocity2 time: 775458 sum: 9.445733e+16 Velocity2 time: 776119 sum: 9.444640e+16 Velocity2 time: 776780 sum: 9.443915e+16 Velocity2 time: 777441 sum: 9.443542e+16 Velocity2 time: 778103 sum: 9.443491e+16 Velocity2 time: 778764 sum: 9.443723e+16 Velocity2 time: 779425 sum: 9.444187e+16 Velocity2 time: 780087 sum: 9.444828e+16 Velocity2 time: 780748 sum: 9.445585e+16 Velocity2 time: 781410 sum: 9.446393e+16 Velocity2 time: 782071 sum: 9.447189e+16 Velocity2 time: 782733 sum: 9.447913e+16 Velocity2 time: 783394 sum: 9.448512e+16 Velocity2 time: 784056 sum: 9.448941e+16 Velocity2 time: 784718 sum: 9.449167e+16 Velocity2 time: 785379 sum: 9.449169e+16 Velocity2 time: 786041 sum: 9.448943e+16 Velocity2 time: 786702 sum: 9.448497e+16 Velocity2 time: 787364 sum: 9.447855e+16 Velocity2 time: 788025 sum: 9.447053e+16 Velocity2 time: 788687 sum: 9.446140e+16 Velocity2 time: 789348 sum: 9.445170e+16 Velocity2 time: 790009 sum: 9.444206e+16 Velocity2 time: 790670 sum: 9.443310e+16 Velocity2 time: 791331 sum: 9.442546e+16 Velocity2 time: 791992 sum: 9.441971e+16 Velocity2 time: 792653 sum: 9.441636e+16 Velocity2 time: 793314 sum: 9.441582e+16 Velocity2 time: 793974 sum: 9.441838e+16 Velocity2 time: 794635 sum: 9.442421e+16 Velocity2 time: 795296 sum: 9.443336e+16 Velocity2 time: 795956 sum: 9.444572e+16 Velocity2 time: 796617 sum: 9.446107e+16 Velocity2 time: 797278 sum: 9.447906e+16 Velocity2 time: 797938 sum: 9.449924e+16 Velocity2 time: 798599 sum: 9.452106e+16 Velocity2 time: 799260 sum: 9.454391e+16 Velocity2 time: 799921 sum: 9.456710e+16 Velocity2 time: 800582 sum: 9.458993e+16 Velocity2 time: 801243 sum: 9.461170e+16 Velocity2 time: 801904 sum: 9.463171e+16 Velocity2 time: 802565 sum: 9.464931e+16 Velocity2 time: 803226 sum: 9.466391e+16 Velocity2 time: 803888 sum: 9.467501e+16 Velocity2 time: 804549 sum: 9.468223e+16 Velocity2 time: 805210 sum: 9.468527e+16 Velocity2 time: 805871 sum: 9.468401e+16 Velocity2 time: 806532 sum: 9.467842e+16 Velocity2 time: 807194 sum: 9.466863e+16 Velocity2 time: 807855 sum: 9.465488e+16 Velocity2 time: 808516 sum: 9.463752e+16 Velocity2 time: 809177 sum: 9.461701e+16 Velocity2 time: 809838 sum: 9.459386e+16 Velocity2 time: 810500 sum: 9.456862e+16 Velocity2 time: 811161 sum: 9.454189e+16 Velocity2 time: 811822 sum: 9.451423e+16 Velocity2 time: 812483 sum: 9.448620e+16 Velocity2 time: 813144 sum: 9.445828e+16 Velocity2 time: 813805 sum: 9.443092e+16 Velocity2 time: 814465 sum: 9.440449e+16 Velocity2 time: 815126 sum: 9.437926e+16 Velocity2 time: 815787 sum: 9.435546e+16 Velocity2 time: 816448 sum: 9.433320e+16 Velocity2 time: 817109 sum: 9.431255e+16 Velocity2 time: 817770 sum: 9.429351e+16 Velocity2 time: 818431 sum: 9.427602e+16 Velocity2 time: 819092 sum: 9.426000e+16 Velocity2 time: 819753 sum: 9.424530e+16 Velocity2 time: 820413 sum: 9.423180e+16 Velocity2 time: 821074 sum: 9.421933e+16 Velocity2 time: 821736 sum: 9.420774e+16 Velocity2 time: 822397 sum: 9.419691e+16 Velocity2 time: 823058 sum: 9.418674e+16 Velocity2 time: 823719 sum: 9.417715e+16 Velocity2 time: 824380 sum: 9.416813e+16 Velocity2 time: 825041 sum: 9.415975e+16 Velocity2 time: 825702 sum: 9.415211e+16 Velocity2 time: 826363 sum: 9.414541e+16 Velocity2 time: 827024 sum: 9.413990e+16 Velocity2 time: 827685 sum: 9.413592e+16 Velocity2 time: 828346 sum: 9.413384e+16 Velocity2 time: 829007 sum: 9.413408e+16 Velocity2 time: 829668 sum: 9.413706e+16 Velocity2 time: 830329 sum: 9.414322e+16 Velocity2 time: 830990 sum: 9.415292e+16 Velocity2 time: 831650 sum: 9.416648e+16 Velocity2 time: 832311 sum: 9.418413e+16 Velocity2 time: 832972 sum: 9.420598e+16 Velocity2 time: 833633 sum: 9.423201e+16 Velocity2 time: 834293 sum: 9.426206e+16 Velocity2 time: 834954 sum: 9.429581e+16 Velocity2 time: 835615 sum: 9.433281e+16 Velocity2 time: 836276 sum: 9.437247e+16 Velocity2 time: 836937 sum: 9.441407e+16 Velocity2 time: 837598 sum: 9.445678e+16 Velocity2 time: 838259 sum: 9.449970e+16 Velocity2 time: 838920 sum: 9.454189e+16 Velocity2 time: 839581 sum: 9.458237e+16 Velocity2 time: 840243 sum: 9.462017e+16 Velocity2 time: 840904 sum: 9.465435e+16 Velocity2 time: 841566 sum: 9.468407e+16 Velocity2 time: 842227 sum: 9.470856e+16 Velocity2 time: 842889 sum: 9.472719e+16 Velocity2 time: 843551 sum: 9.473947e+16 Velocity2 time: 844213 sum: 9.474509e+16 Velocity2 time: 844875 sum: 9.474392e+16 Velocity2 time: 845537 sum: 9.473604e+16 Velocity2 time: 846200 sum: 9.472170e+16 Velocity2 time: 846862 sum: 9.470140e+16 Velocity2 time: 847524 sum: 9.467577e+16 Velocity2 time: 848187 sum: 9.464563e+16 Velocity2 time: 848849 sum: 9.461194e+16 Velocity2 time: 849512 sum: 9.457577e+16 Velocity2 time: 850174 sum: 9.453822e+16 Velocity2 time: 850836 sum: 9.450045e+16 Velocity2 time: 851499 sum: 9.446357e+16 Velocity2 time: 852161 sum: 9.442863e+16 Velocity2 time: 852823 sum: 9.439658e+16 Velocity2 time: 853486 sum: 9.436821e+16 Velocity2 time: 854148 sum: 9.434416e+16 Velocity2 time: 854810 sum: 9.432487e+16 Velocity2 time: 855472 sum: 9.431056e+16 Velocity2 time: 856135 sum: 9.430129e+16 Velocity2 time: 856797 sum: 9.429689e+16 Velocity2 time: 857459 sum: 9.429702e+16 Velocity2 time: 858121 sum: 9.430121e+16 Velocity2 time: 858783 sum: 9.430885e+16 Velocity2 time: 859445 sum: 9.431923e+16 Velocity2 time: 860106 sum: 9.433161e+16 Velocity2 time: 860768 sum: 9.434520e+16 Velocity2 time: 861430 sum: 9.435925e+16 Velocity2 time: 862092 sum: 9.437303e+16 Velocity2 time: 862753 sum: 9.438589e+16 Velocity2 time: 863415 sum: 9.439726e+16 Velocity2 time: 864077 sum: 9.440670e+16 Velocity2 time: 864739 sum: 9.441390e+16 Velocity2 time: 865401 sum: 9.441867e+16 Velocity2 time: 866062 sum: 9.442098e+16 Velocity2 time: 866724 sum: 9.442093e+16 Velocity2 time: 867386 sum: 9.441878e+16 Velocity2 time: 868048 sum: 9.441489e+16 Velocity2 time: 868710 sum: 9.440974e+16 Velocity2 time: 869371 sum: 9.440388e+16 Velocity2 time: 870033 sum: 9.439793e+16 Velocity2 time: 870695 sum: 9.439251e+16 Velocity2 time: 871356 sum: 9.438824e+16 Velocity2 time: 872018 sum: 9.438570e+16 Velocity2 time: 872679 sum: 9.438540e+16 Velocity2 time: 873341 sum: 9.438776e+16 Velocity2 time: 874002 sum: 9.439307e+16 Velocity2 time: 874664 sum: 9.440149e+16 Velocity2 time: 875325 sum: 9.441305e+16 Velocity2 time: 875986 sum: 9.442765e+16 Velocity2 time: 876647 sum: 9.444506e+16 Velocity2 time: 877308 sum: 9.446492e+16 Velocity2 time: 877970 sum: 9.448680e+16 Velocity2 time: 878631 sum: 9.451018e+16 Velocity2 time: 879292 sum: 9.453450e+16 Velocity2 time: 879953 sum: 9.455918e+16 Velocity2 time: 880613 sum: 9.458361e+16 Velocity2 time: 881274 sum: 9.460725e+16 Velocity2 time: 881935 sum: 9.462956e+16 Velocity2 time: 882596 sum: 9.465009e+16 Velocity2 time: 883257 sum: 9.466846e+16 Velocity2 time: 883918 sum: 9.468437e+16 Velocity2 time: 884579 sum: 9.469763e+16 Velocity2 time: 885239 sum: 9.470815e+16 Velocity2 time: 885900 sum: 9.471594e+16 Velocity2 time: 886561 sum: 9.472114e+16 Velocity2 time: 887221 sum: 9.472396e+16 Velocity2 time: 887882 sum: 9.472474e+16 Velocity2 time: 888542 sum: 9.472387e+16 Velocity2 time: 889203 sum: 9.472185e+16 Velocity2 time: 889863 sum: 9.471918e+16 Velocity2 time: 890524 sum: 9.471642e+16 Velocity2 time: 891184 sum: 9.471413e+16 Velocity2 time: 891844 sum: 9.471281e+16 Velocity2 time: 892504 sum: 9.471293e+16 Velocity2 time: 893164 sum: 9.471487e+16 Velocity2 time: 893824 sum: 9.471888e+16 Velocity2 time: 894484 sum: 9.472510e+16 Velocity2 time: 895144 sum: 9.473351e+16 Velocity2 time: 895804 sum: 9.474394e+16 Velocity2 time: 896464 sum: 9.475607e+16 Velocity2 time: 897124 sum: 9.476945e+16 Velocity2 time: 897784 sum: 9.478349e+16 Velocity2 time: 898443 sum: 9.479750e+16 Velocity2 time: 899103 sum: 9.481073e+16 Velocity2 time: 899763 sum: 9.482239e+16 Velocity2 time: 900423 sum: 9.483169e+16 Velocity2 time: 901083 sum: 9.483787e+16 Velocity2 time: 901742 sum: 9.484025e+16 Velocity2 time: 902402 sum: 9.483824e+16 Velocity2 time: 903062 sum: 9.483140e+16 Velocity2 time: 903722 sum: 9.481944e+16 Velocity2 time: 904383 sum: 9.480223e+16 Velocity2 time: 905043 sum: 9.477987e+16 Velocity2 time: 905703 sum: 9.475262e+16 Velocity2 time: 906363 sum: 9.472096e+16 Velocity2 time: 907023 sum: 9.468554e+16 Velocity2 time: 907684 sum: 9.464721e+16 Velocity2 time: 908344 sum: 9.460696e+16 Velocity2 time: 909004 sum: 9.456592e+16 Velocity2 time: 909664 sum: 9.452529e+16 Velocity2 time: 910325 sum: 9.448634e+16 Velocity2 time: 910985 sum: 9.445034e+16 Velocity2 time: 911645 sum: 9.441851e+16 Velocity2 time: 912305 sum: 9.439202e+16 Velocity2 time: 912965 sum: 9.437186e+16 Velocity2 time: 913625 sum: 9.435888e+16 Velocity2 time: 914285 sum: 9.435370e+16 Velocity2 time: 914945 sum: 9.435672e+16 Velocity2 time: 915605 sum: 9.436808e+16 Velocity2 time: 916265 sum: 9.438768e+16 Velocity2 time: 916924 sum: 9.441513e+16 Velocity2 time: 917584 sum: 9.444984e+16 Velocity2 time: 918244 sum: 9.449099e+16 Velocity2 time: 918903 sum: 9.453757e+16 Velocity2 time: 919563 sum: 9.458846e+16 Velocity2 time: 920222 sum: 9.464243e+16 Velocity2 time: 920882 sum: 9.469818e+16 Velocity2 time: 921541 sum: 9.475444e+16 Velocity2 time: 922201 sum: 9.480996e+16 Velocity2 time: 922861 sum: 9.486357e+16 Velocity2 time: 923520 sum: 9.491422e+16 Velocity2 time: 924180 sum: 9.496098e+16 Velocity2 time: 924839 sum: 9.500311e+16 Velocity2 time: 925499 sum: 9.504001e+16 Velocity2 time: 926159 sum: 9.507128e+16 Velocity2 time: 926819 sum: 9.509669e+16 Velocity2 time: 927479 sum: 9.511619e+16 Velocity2 time: 928139 sum: 9.512988e+16 Velocity2 time: 928799 sum: 9.513802e+16 Velocity2 time: 929459 sum: 9.514098e+16 Velocity2 time: 930119 sum: 9.513927e+16 Velocity2 time: 930779 sum: 9.513344e+16 Velocity2 time: 931439 sum: 9.512412e+16 Velocity2 time: 932099 sum: 9.511195e+16 Velocity2 time: 932759 sum: 9.509758e+16 Velocity2 time: 933420 sum: 9.508162e+16 Velocity2 time: 934080 sum: 9.506462e+16 Velocity2 time: 934740 sum: 9.504709e+16 Velocity2 time: 935400 sum: 9.502942e+16 Velocity2 time: 936061 sum: 9.501192e+16 Velocity2 time: 936721 sum: 9.499478e+16 Velocity2 time: 937381 sum: 9.497812e+16 Velocity2 time: 938042 sum: 9.496194e+16 Velocity2 time: 938702 sum: 9.494619e+16 Velocity2 time: 939362 sum: 9.493075e+16 Velocity2 time: 940023 sum: 9.491546e+16 Velocity2 time: 940683 sum: 9.490012e+16 Velocity2 time: 941344 sum: 9.488457e+16 Velocity2 time: 942004 sum: 9.486864e+16 Velocity2 time: 942665 sum: 9.485221e+16 Velocity2 time: 943325 sum: 9.483519e+16 Velocity2 time: 943986 sum: 9.481757e+16 Velocity2 time: 944647 sum: 9.479940e+16 Velocity2 time: 945308 sum: 9.478079e+16 Velocity2 time: 945969 sum: 9.476193e+16 Velocity2 time: 946630 sum: 9.474307e+16 Velocity2 time: 947291 sum: 9.472453e+16 Velocity2 time: 947952 sum: 9.470668e+16 Velocity2 time: 948613 sum: 9.468994e+16 Velocity2 time: 949275 sum: 9.467476e+16 Velocity2 time: 949936 sum: 9.466162e+16 Velocity2 time: 950597 sum: 9.465101e+16 Velocity2 time: 951259 sum: 9.464340e+16 Velocity2 time: 951920 sum: 9.463923e+16 Velocity2 time: 952582 sum: 9.463888e+16 Velocity2 time: 953244 sum: 9.464264e+16 Velocity2 time: 953905 sum: 9.465074e+16 Velocity2 time: 954567 sum: 9.466324e+16 Velocity2 time: 955229 sum: 9.468009e+16 Velocity2 time: 955891 sum: 9.470111e+16 Velocity2 time: 956553 sum: 9.472594e+16 Velocity2 time: 957215 sum: 9.475407e+16 Velocity2 time: 957877 sum: 9.478487e+16 Velocity2 time: 958539 sum: 9.481758e+16 Velocity2 time: 959201 sum: 9.485132e+16 Velocity2 time: 959864 sum: 9.488518e+16 Velocity2 time: 960526 sum: 9.491818e+16 Velocity2 time: 961189 sum: 9.494937e+16 Velocity2 time: 961852 sum: 9.497782e+16 Velocity2 time: 962515 sum: 9.500271e+16 Velocity2 time: 963178 sum: 9.502332e+16 Velocity2 time: 963841 sum: 9.503908e+16 Velocity2 time: 964505 sum: 9.504961e+16 Velocity2 time: 965168 sum: 9.505467e+16 Velocity2 time: 965832 sum: 9.505427e+16 Velocity2 time: 966496 sum: 9.504859e+16 Velocity2 time: 967160 sum: 9.503801e+16 Velocity2 time: 967824 sum: 9.502306e+16 Velocity2 time: 968489 sum: 9.500446e+16 Velocity2 time: 969153 sum: 9.498304e+16 Velocity2 time: 969818 sum: 9.495973e+16 Velocity2 time: 970483 sum: 9.493553e+16 Velocity2 time: 971148 sum: 9.491147e+16 Velocity2 time: 971813 sum: 9.488855e+16 Velocity2 time: 972478 sum: 9.486773e+16 Velocity2 time: 973143 sum: 9.484988e+16 Velocity2 time: 973808 sum: 9.483574e+16 Velocity2 time: 974474 sum: 9.482590e+16 Velocity2 time: 975139 sum: 9.482077e+16 Velocity2 time: 975804 sum: 9.482056e+16 Velocity2 time: 976470 sum: 9.482526e+16 Velocity2 time: 977135 sum: 9.483467e+16 Velocity2 time: 977801 sum: 9.484838e+16 Velocity2 time: 978467 sum: 9.486581e+16 Velocity2 time: 979132 sum: 9.488622e+16 Velocity2 time: 979798 sum: 9.490874e+16 Velocity2 time: 980464 sum: 9.493245e+16 Velocity2 time: 981130 sum: 9.495635e+16 Velocity2 time: 981796 sum: 9.497946e+16 Velocity2 time: 982462 sum: 9.500084e+16 Velocity2 time: 983129 sum: 9.501961e+16 Velocity2 time: 983795 sum: 9.503502e+16 Velocity2 time: 984462 sum: 9.504643e+16 Velocity2 time: 985129 sum: 9.505333e+16 Velocity2 time: 985796 sum: 9.505541e+16 Velocity2 time: 986463 sum: 9.505248e+16 Velocity2 time: 987131 sum: 9.504452e+16 Velocity2 time: 987798 sum: 9.503166e+16 Velocity2 time: 988466 sum: 9.501416e+16 Velocity2 time: 989134 sum: 9.499241e+16 Velocity2 time: 989802 sum: 9.496688e+16 Velocity2 time: 990471 sum: 9.493813e+16 Velocity2 time: 991140 sum: 9.490679e+16 Velocity2 time: 991809 sum: 9.487352e+16 Velocity2 time: 992478 sum: 9.483899e+16 Velocity2 time: 993147 sum: 9.480390e+16 Velocity2 time: 993816 sum: 9.476889e+16 Velocity2 time: 994486 sum: 9.473461e+16 Velocity2 time: 995156 sum: 9.470162e+16 Velocity2 time: 995826 sum: 9.467044e+16 Velocity2 time: 996496 sum: 9.464151e+16 Velocity2 time: 997167 sum: 9.461518e+16 Velocity2 time: 997837 sum: 9.459172e+16 Velocity2 time: 998508 sum: 9.457130e+16 Velocity2 time: 999179 sum: 9.455402e+16 Velocity2 time: 999850 sum: 9.453989e+16 Velocity2 time: 1.00052e+06 sum: 9.452887e+16 Velocity2 time: 1.00119e+06 sum: 9.452086e+16 Velocity2 time: 1.00186e+06 sum: 9.451573e+16 Velocity2 time: 1.00254e+06 sum: 9.451334e+16 Velocity2 time: 1.00321e+06 sum: 9.451353e+16 Velocity2 time: 1.00388e+06 sum: 9.451616e+16 Velocity2 time: 1.00455e+06 sum: 9.452111e+16 Velocity2 time: 1.00522e+06 sum: 9.452828e+16 Velocity2 time: 1.0059e+06 sum: 9.453761e+16 Velocity2 time: 1.00657e+06 sum: 9.454904e+16 Velocity2 time: 1.00724e+06 sum: 9.456256e+16 Velocity2 time: 1.00791e+06 sum: 9.457815e+16 Velocity2 time: 1.00859e+06 sum: 9.459581e+16 Velocity2 time: 1.00926e+06 sum: 9.461552e+16 Velocity2 time: 1.00993e+06 sum: 9.463726e+16 Velocity2 time: 1.01061e+06 sum: 9.466097e+16 Velocity2 time: 1.01128e+06 sum: 9.468654e+16 Velocity2 time: 1.01196e+06 sum: 9.471384e+16 Velocity2 time: 1.01263e+06 sum: 9.474266e+16 Velocity2 time: 1.01331e+06 sum: 9.477276e+16 Velocity2 time: 1.01398e+06 sum: 9.480379e+16 Velocity2 time: 1.01465e+06 sum: 9.483538e+16 Velocity2 time: 1.01533e+06 sum: 9.486704e+16 Velocity2 time: 1.016e+06 sum: 9.489825e+16 Velocity2 time: 1.01668e+06 sum: 9.492840e+16 Velocity2 time: 1.01736e+06 sum: 9.495682e+16 Velocity2 time: 1.01803e+06 sum: 9.498281e+16 Velocity2 time: 1.01871e+06 sum: 9.500563e+16 Velocity2 time: 1.01938e+06 sum: 9.502454e+16 Velocity2 time: 1.02006e+06 sum: 9.503880e+16 Velocity2 time: 1.02073e+06 sum: 9.504774e+16 Velocity2 time: 1.02141e+06 sum: 9.505077e+16 Velocity2 time: 1.02209e+06 sum: 9.504737e+16 Velocity2 time: 1.02276e+06 sum: 9.503719e+16 Velocity2 time: 1.02344e+06 sum: 9.502003e+16 Velocity2 time: 1.02412e+06 sum: 9.499586e+16 Velocity2 time: 1.0248e+06 sum: 9.496484e+16 Velocity2 time: 1.02547e+06 sum: 9.492733e+16 Velocity2 time: 1.02615e+06 sum: 9.488389e+16 Velocity2 time: 1.02683e+06 sum: 9.483525e+16 Velocity2 time: 1.02751e+06 sum: 9.478230e+16 Velocity2 time: 1.02819e+06 sum: 9.472607e+16 Velocity2 time: 1.02887e+06 sum: 9.466771e+16 Velocity2 time: 1.02955e+06 sum: 9.460842e+16 Velocity2 time: 1.03023e+06 sum: 9.454943e+16 Velocity2 time: 1.03091e+06 sum: 9.449199e+16 Velocity2 time: 1.03159e+06 sum: 9.443726e+16 Velocity2 time: 1.03227e+06 sum: 9.438636e+16 Velocity2 time: 1.03295e+06 sum: 9.434028e+16 Velocity2 time: 1.03363e+06 sum: 9.429987e+16 Velocity2 time: 1.03431e+06 sum: 9.426581e+16 Velocity2 time: 1.03499e+06 sum: 9.423862e+16 Velocity2 time: 1.03567e+06 sum: 9.421859e+16 Velocity2 time: 1.03635e+06 sum: 9.420585e+16 Velocity2 time: 1.03703e+06 sum: 9.420030e+16 Velocity2 time: 1.03772e+06 sum: 9.420167e+16 Velocity2 time: 1.0384e+06 sum: 9.420948e+16 Velocity2 time: 1.03908e+06 sum: 9.422311e+16 Velocity2 time: 1.03976e+06 sum: 9.424180e+16 Velocity2 time: 1.04044e+06 sum: 9.426468e+16 Velocity2 time: 1.04113e+06 sum: 9.429082e+16 Velocity2 time: 1.04181e+06 sum: 9.431923e+16 Velocity2 time: 1.04249e+06 sum: 9.434895e+16 Velocity2 time: 1.04318e+06 sum: 9.437905e+16 Velocity2 time: 1.04386e+06 sum: 9.440869e+16 Velocity2 time: 1.04454e+06 sum: 9.443711e+16 Velocity2 time: 1.04523e+06 sum: 9.446369e+16 Velocity2 time: 1.04591e+06 sum: 9.448795e+16 Velocity2 time: 1.0466e+06 sum: 9.450956e+16 Velocity2 time: 1.04728e+06 sum: 9.452830e+16 Velocity2 time: 1.04796e+06 sum: 9.454410e+16 Velocity2 time: 1.04865e+06 sum: 9.455701e+16 Velocity2 time: 1.04934e+06 sum: 9.456715e+16 Velocity2 time: 1.05002e+06 sum: 9.457471e+16 Velocity2 time: 1.05071e+06 sum: 9.457992e+16 Velocity2 time: 1.05139e+06 sum: 9.458303e+16 Velocity2 time: 1.05208e+06 sum: 9.458430e+16 Velocity2 time: 1.05277e+06 sum: 9.458395e+16 Velocity2 time: 1.05345e+06 sum: 9.458221e+16 Velocity2 time: 1.05414e+06 sum: 9.457923e+16 Velocity2 time: 1.05483e+06 sum: 9.457515e+16 Velocity2 time: 1.05551e+06 sum: 9.457008e+16 Velocity2 time: 1.0562e+06 sum: 9.456407e+16 Velocity2 time: 1.05689e+06 sum: 9.455716e+16 Velocity2 time: 1.05757e+06 sum: 9.454936e+16 Velocity2 time: 1.05826e+06 sum: 9.454068e+16 Velocity2 time: 1.05895e+06 sum: 9.453112e+16 Velocity2 time: 1.05964e+06 sum: 9.452066e+16 Velocity2 time: 1.06032e+06 sum: 9.450933e+16 Velocity2 time: 1.06101e+06 sum: 9.449716e+16 Velocity2 time: 1.0617e+06 sum: 9.448420e+16 Velocity2 time: 1.06238e+06 sum: 9.447056e+16 Velocity2 time: 1.06307e+06 sum: 9.445637e+16 Velocity2 time: 1.06376e+06 sum: 9.444181e+16 Velocity2 time: 1.06445e+06 sum: 9.442711e+16 Velocity2 time: 1.06513e+06 sum: 9.441254e+16 Velocity2 time: 1.06582e+06 sum: 9.439840e+16 Velocity2 time: 1.06651e+06 sum: 9.438503e+16 Velocity2 time: 1.0672e+06 sum: 9.437278e+16 Velocity2 time: 1.06789e+06 sum: 9.436201e+16 Velocity2 time: 1.06857e+06 sum: 9.435304e+16 Velocity2 time: 1.06926e+06 sum: 9.434616e+16 Velocity2 time: 1.06995e+06 sum: 9.434159e+16 Velocity2 time: 1.07064e+06 sum: 9.433950e+16 Velocity2 time: 1.07133e+06 sum: 9.433993e+16 Velocity2 time: 1.07202e+06 sum: 9.434285e+16 Velocity2 time: 1.0727e+06 sum: 9.434810e+16 Velocity2 time: 1.07339e+06 sum: 9.435543e+16 Velocity2 time: 1.07408e+06 sum: 9.436448e+16 Velocity2 time: 1.07477e+06 sum: 9.437480e+16 Velocity2 time: 1.07546e+06 sum: 9.438586e+16 Velocity2 time: 1.07615e+06 sum: 9.439707e+16 Velocity2 time: 1.07684e+06 sum: 9.440780e+16 Velocity2 time: 1.07753e+06 sum: 9.441739e+16 Velocity2 time: 1.07821e+06 sum: 9.442518e+16 Velocity2 time: 1.0789e+06 sum: 9.443056e+16 Velocity2 time: 1.07959e+06 sum: 9.443290e+16 Velocity2 time: 1.08028e+06 sum: 9.443169e+16 Velocity2 time: 1.08097e+06 sum: 9.442648e+16 Velocity2 time: 1.08165e+06 sum: 9.441692e+16 Velocity2 time: 1.08234e+06 sum: 9.440280e+16 Velocity2 time: 1.08303e+06 sum: 9.438407e+16 Velocity2 time: 1.08372e+06 sum: 9.436082e+16 Velocity2 time: 1.08441e+06 sum: 9.433334e+16 Velocity2 time: 1.08509e+06 sum: 9.430206e+16 Velocity2 time: 1.08578e+06 sum: 9.426764e+16 Velocity2 time: 1.08647e+06 sum: 9.423086e+16 Velocity2 time: 1.08716e+06 sum: 9.419267e+16 Velocity2 time: 1.08785e+06 sum: 9.415414e+16 Velocity2 time: 1.08853e+06 sum: 9.411639e+16 Velocity2 time: 1.08922e+06 sum: 9.408062e+16 Velocity2 time: 1.08991e+06 sum: 9.404799e+16 Velocity2 time: 1.0906e+06 sum: 9.401961e+16 Velocity2 time: 1.09129e+06 sum: 9.399651e+16 Velocity2 time: 1.09197e+06 sum: 9.397957e+16 Velocity2 time: 1.09266e+06 sum: 9.396949e+16 Velocity2 time: 1.09335e+06 sum: 9.396678e+16 Velocity2 time: 1.09404e+06 sum: 9.397169e+16 Velocity2 time: 1.09473e+06 sum: 9.398429e+16 Velocity2 time: 1.09541e+06 sum: 9.400436e+16 Velocity2 time: 1.0961e+06 sum: 9.403150e+16 Velocity2 time: 1.09679e+06 sum: 9.406507e+16 Velocity2 time: 1.09748e+06 sum: 9.410427e+16 Velocity2 time: 1.09816e+06 sum: 9.414813e+16 Velocity2 time: 1.09885e+06 sum: 9.419555e+16 Velocity2 time: 1.09954e+06 sum: 9.424536e+16 Velocity2 time: 1.10022e+06 sum: 9.429634e+16 Velocity2 time: 1.10091e+06 sum: 9.434725e+16 Velocity2 time: 1.1016e+06 sum: 9.439689e+16 Velocity2 time: 1.10228e+06 sum: 9.444413e+16 Velocity2 time: 1.10297e+06 sum: 9.448793e+16 Velocity2 time: 1.10365e+06 sum: 9.452739e+16 Velocity2 time: 1.10434e+06 sum: 9.456178e+16 Velocity2 time: 1.10502e+06 sum: 9.459051e+16 Velocity2 time: 1.10571e+06 sum: 9.461320e+16 Velocity2 time: 1.10639e+06 sum: 9.462967e+16 Velocity2 time: 1.10708e+06 sum: 9.463989e+16 Velocity2 time: 1.10776e+06 sum: 9.464402e+16 Velocity2 time: 1.10845e+06 sum: 9.464238e+16 Velocity2 time: 1.10913e+06 sum: 9.463538e+16 Velocity2 time: 1.10982e+06 sum: 9.462354e+16 Velocity2 time: 1.1105e+06 sum: 9.460743e+16 Velocity2 time: 1.11119e+06 sum: 9.458766e+16 Velocity2 time: 1.11187e+06 sum: 9.456482e+16 Velocity2 time: 1.11255e+06 sum: 9.453946e+16 Velocity2 time: 1.11324e+06 sum: 9.451208e+16 Velocity2 time: 1.11392e+06 sum: 9.448314e+16 Velocity2 time: 1.1146e+06 sum: 9.445300e+16 Velocity2 time: 1.11529e+06 sum: 9.442196e+16 Velocity2 time: 1.11597e+06 sum: 9.439027e+16 Velocity2 time: 1.11665e+06 sum: 9.435811e+16 Velocity2 time: 1.11734e+06 sum: 9.432565e+16 Velocity2 time: 1.11802e+06 sum: 9.429302e+16 Velocity2 time: 1.1187e+06 sum: 9.426035e+16 Velocity2 time: 1.11938e+06 sum: 9.422780e+16 Velocity2 time: 1.12006e+06 sum: 9.419552e+16 Velocity2 time: 1.12075e+06 sum: 9.416372e+16 Velocity2 time: 1.12143e+06 sum: 9.413262e+16 Velocity2 time: 1.12211e+06 sum: 9.410250e+16 Velocity2 time: 1.12279e+06 sum: 9.407368e+16 Velocity2 time: 1.12347e+06 sum: 9.404651e+16 Velocity2 time: 1.12415e+06 sum: 9.402139e+16 Velocity2 time: 1.12483e+06 sum: 9.399876e+16 Velocity2 time: 1.12551e+06 sum: 9.397905e+16 Velocity2 time: 1.1262e+06 sum: 9.396275e+16 Velocity2 time: 1.12688e+06 sum: 9.395031e+16 Velocity2 time: 1.12756e+06 sum: 9.394220e+16 Velocity2 time: 1.12824e+06 sum: 9.393882e+16 Velocity2 time: 1.12892e+06 sum: 9.394054e+16 Velocity2 time: 1.1296e+06 sum: 9.394764e+16 Velocity2 time: 1.13027e+06 sum: 9.396031e+16 Velocity2 time: 1.13095e+06 sum: 9.397862e+16 Velocity2 time: 1.13163e+06 sum: 9.400251e+16 Velocity2 time: 1.13231e+06 sum: 9.403175e+16 Velocity2 time: 1.13299e+06 sum: 9.406600e+16 Velocity2 time: 1.13367e+06 sum: 9.410472e+16 Velocity2 time: 1.13435e+06 sum: 9.414725e+16 Velocity2 time: 1.13503e+06 sum: 9.419281e+16 Velocity2 time: 1.13571e+06 sum: 9.424048e+16 Velocity2 time: 1.13638e+06 sum: 9.428926e+16 Velocity2 time: 1.13706e+06 sum: 9.433810e+16 Velocity2 time: 1.13774e+06 sum: 9.438592e+16 Velocity2 time: 1.13842e+06 sum: 9.443164e+16 Velocity2 time: 1.13909e+06 sum: 9.447420e+16 Velocity2 time: 1.13977e+06 sum: 9.451265e+16 Velocity2 time: 1.14045e+06 sum: 9.454609e+16 Velocity2 time: 1.14112e+06 sum: 9.457376e+16 Velocity2 time: 1.1418e+06 sum: 9.459506e+16 Velocity2 time: 1.14247e+06 sum: 9.460951e+16 Velocity2 time: 1.14315e+06 sum: 9.461686e+16 Velocity2 time: 1.14382e+06 sum: 9.461701e+16 Velocity2 time: 1.1445e+06 sum: 9.461007e+16 Velocity2 time: 1.14517e+06 sum: 9.459635e+16 Velocity2 time: 1.14585e+06 sum: 9.457635e+16 Velocity2 time: 1.14652e+06 sum: 9.455077e+16 Velocity2 time: 1.14719e+06 sum: 9.452044e+16 Velocity2 time: 1.14787e+06 sum: 9.448638e+16 Velocity2 time: 1.14854e+06 sum: 9.444968e+16 Velocity2 time: 1.14922e+06 sum: 9.441153e+16 Velocity2 time: 1.14989e+06 sum: 9.437316e+16 Velocity2 time: 1.15056e+06 sum: 9.433578e+16 Velocity2 time: 1.15124e+06 sum: 9.430055e+16 Velocity2 time: 1.15191e+06 sum: 9.426853e+16 Velocity2 time: 1.15258e+06 sum: 9.424063e+16 Velocity2 time: 1.15326e+06 sum: 9.421760e+16 Velocity2 time: 1.15393e+06 sum: 9.419999e+16 Velocity2 time: 1.1546e+06 sum: 9.418812e+16 Velocity2 time: 1.15527e+06 sum: 9.418210e+16 Velocity2 time: 1.15595e+06 sum: 9.418178e+16 Velocity2 time: 1.15662e+06 sum: 9.418684e+16 Velocity2 time: 1.15729e+06 sum: 9.419673e+16 Velocity2 time: 1.15796e+06 sum: 9.421077e+16 Velocity2 time: 1.15864e+06 sum: 9.422812e+16 Velocity2 time: 1.15931e+06 sum: 9.424786e+16 Velocity2 time: 1.15998e+06 sum: 9.426900e+16 Velocity2 time: 1.16065e+06 sum: 9.429056e+16 Velocity2 time: 1.16132e+06 sum: 9.431157e+16 Velocity2 time: 1.16199e+06 sum: 9.433109e+16 Velocity2 time: 1.16266e+06 sum: 9.434833e+16 Velocity2 time: 1.16333e+06 sum: 9.436256e+16 Velocity2 time: 1.164e+06 sum: 9.437324e+16 Velocity2 time: 1.16467e+06 sum: 9.437996e+16 Velocity2 time: 1.16534e+06 sum: 9.438250e+16 Velocity2 time: 1.16601e+06 sum: 9.438078e+16 Velocity2 time: 1.16668e+06 sum: 9.437493e+16 Velocity2 time: 1.16735e+06 sum: 9.436520e+16 Velocity2 time: 1.16802e+06 sum: 9.435201e+16 Velocity2 time: 1.16869e+06 sum: 9.433587e+16 Velocity2 time: 1.16936e+06 sum: 9.431739e+16 Velocity2 time: 1.17002e+06 sum: 9.429726e+16 Velocity2 time: 1.17069e+06 sum: 9.427615e+16 Velocity2 time: 1.17136e+06 sum: 9.425475e+16 Velocity2 time: 1.17203e+06 sum: 9.423370e+16 Velocity2 time: 1.1727e+06 sum: 9.421359e+16 Velocity2 time: 1.17336e+06 sum: 9.419489e+16 Velocity2 time: 1.17403e+06 sum: 9.417799e+16 Velocity2 time: 1.1747e+06 sum: 9.416317e+16 Velocity2 time: 1.17537e+06 sum: 9.415058e+16 Velocity2 time: 1.17603e+06 sum: 9.414027e+16 Velocity2 time: 1.1767e+06 sum: 9.413220e+16 Velocity2 time: 1.17737e+06 sum: 9.412625e+16 Velocity2 time: 1.17803e+06 sum: 9.412224e+16 Velocity2 time: 1.1787e+06 sum: 9.411995e+16 Velocity2 time: 1.17937e+06 sum: 9.411915e+16 Velocity2 time: 1.18003e+06 sum: 9.411961e+16 Velocity2 time: 1.1807e+06 sum: 9.412111e+16 Velocity2 time: 1.18136e+06 sum: 9.412347e+16 Velocity2 time: 1.18203e+06 sum: 9.412657e+16 Velocity2 time: 1.18269e+06 sum: 9.413029e+16 Velocity2 time: 1.18336e+06 sum: 9.413461e+16 Velocity2 time: 1.18402e+06 sum: 9.413952e+16 Velocity2 time: 1.18469e+06 sum: 9.414508e+16 Velocity2 time: 1.18535e+06 sum: 9.415138e+16 Velocity2 time: 1.18602e+06 sum: 9.415853e+16 Velocity2 time: 1.18668e+06 sum: 9.416667e+16 Velocity2 time: 1.18735e+06 sum: 9.417596e+16 Velocity2 time: 1.18801e+06 sum: 9.418655e+16 Velocity2 time: 1.18868e+06 sum: 9.419858e+16 Velocity2 time: 1.18934e+06 sum: 9.421219e+16 Velocity2 time: 1.19e+06 sum: 9.422745e+16 Velocity2 time: 1.19067e+06 sum: 9.424441e+16 Velocity2 time: 1.19133e+06 sum: 9.426304e+16 Velocity2 time: 1.192e+06 sum: 9.428326e+16 Velocity2 time: 1.19266e+06 sum: 9.430488e+16 Velocity2 time: 1.19332e+06 sum: 9.432763e+16 Velocity2 time: 1.19399e+06 sum: 9.435116e+16 Velocity2 time: 1.19465e+06 sum: 9.437501e+16 Velocity2 time: 1.19531e+06 sum: 9.439865e+16 Velocity2 time: 1.19598e+06 sum: 9.442146e+16 Velocity2 time: 1.19664e+06 sum: 9.444277e+16 Velocity2 time: 1.1973e+06 sum: 9.446187e+16 Velocity2 time: 1.19797e+06 sum: 9.447801e+16 Velocity2 time: 1.19863e+06 sum: 9.449049e+16 Velocity2 time: 1.19929e+06 sum: 9.449860e+16 Velocity2 time: 1.19996e+06 sum: 9.450172e+16 Velocity2 time: 1.20062e+06 sum: 9.449929e+16 Velocity2 time: 1.20128e+06 sum: 9.449088e+16 Velocity2 time: 1.20194e+06 sum: 9.447618e+16 Velocity2 time: 1.2026e+06 sum: 9.445502e+16 Velocity2 time: 1.20327e+06 sum: 9.442739e+16 Velocity2 time: 1.20393e+06 sum: 9.439345e+16 Velocity2 time: 1.20459e+06 sum: 9.435352e+16 Velocity2 time: 1.20525e+06 sum: 9.430810e+16 Velocity2 time: 1.20591e+06 sum: 9.425785e+16 Velocity2 time: 1.20657e+06 sum: 9.420356e+16 Velocity2 time: 1.20723e+06 sum: 9.414618e+16 Velocity2 time: 1.20789e+06 sum: 9.408678e+16 Velocity2 time: 1.20855e+06 sum: 9.402648e+16 Velocity2 time: 1.20922e+06 sum: 9.396650e+16 Velocity2 time: 1.20988e+06 sum: 9.390806e+16 Velocity2 time: 1.21054e+06 sum: 9.385237e+16 Velocity2 time: 1.2112e+06 sum: 9.380061e+16 Velocity2 time: 1.21186e+06 sum: 9.375385e+16 Velocity2 time: 1.21252e+06 sum: 9.371305e+16 Velocity2 time: 1.21318e+06 sum: 9.367902e+16 Velocity2 time: 1.21384e+06 sum: 9.365237e+16 Velocity2 time: 1.2145e+06 sum: 9.363353e+16 Velocity2 time: 1.21516e+06 sum: 9.362270e+16 Velocity2 time: 1.21582e+06 sum: 9.361986e+16 Velocity2 time: 1.21648e+06 sum: 9.362477e+16 Velocity2 time: 1.21714e+06 sum: 9.363700e+16 Velocity2 time: 1.2178e+06 sum: 9.365592e+16 Velocity2 time: 1.21846e+06 sum: 9.368074e+16 Velocity2 time: 1.21912e+06 sum: 9.371054e+16 Velocity2 time: 1.21978e+06 sum: 9.374432e+16 Velocity2 time: 1.22044e+06 sum: 9.378101e+16 Velocity2 time: 1.2211e+06 sum: 9.381954e+16 Velocity2 time: 1.22176e+06 sum: 9.385883e+16 Velocity2 time: 1.22242e+06 sum: 9.389787e+16 Velocity2 time: 1.22308e+06 sum: 9.393571e+16 Velocity2 time: 1.22374e+06 sum: 9.397152e+16 Velocity2 time: 1.2244e+06 sum: 9.400457e+16 Velocity2 time: 1.22506e+06 sum: 9.403427e+16 Velocity2 time: 1.22572e+06 sum: 9.406017e+16 Velocity2 time: 1.22638e+06 sum: 9.408197e+16 Velocity2 time: 1.22704e+06 sum: 9.409949e+16 Velocity2 time: 1.2277e+06 sum: 9.411270e+16 Velocity2 time: 1.22836e+06 sum: 9.412169e+16 Velocity2 time: 1.22901e+06 sum: 9.412664e+16 Velocity2 time: 1.22967e+06 sum: 9.412781e+16 Velocity2 time: 1.23033e+06 sum: 9.412555e+16 Velocity2 time: 1.23099e+06 sum: 9.412022e+16 Velocity2 time: 1.23165e+06 sum: 9.411223e+16 Velocity2 time: 1.23231e+06 sum: 9.410195e+16 Velocity2 time: 1.23296e+06 sum: 9.408977e+16 Velocity2 time: 1.23362e+06 sum: 9.407600e+16 Velocity2 time: 1.23428e+06 sum: 9.406094e+16 Velocity2 time: 1.23494e+06 sum: 9.404480e+16 Velocity2 time: 1.2356e+06 sum: 9.402774e+16 Velocity2 time: 1.23626e+06 sum: 9.400985e+16 Velocity2 time: 1.23691e+06 sum: 9.399117e+16 Velocity2 time: 1.23757e+06 sum: 9.397170e+16 Velocity2 time: 1.23823e+06 sum: 9.395140e+16 Velocity2 time: 1.23889e+06 sum: 9.393021e+16 Velocity2 time: 1.23954e+06 sum: 9.390807e+16 Velocity2 time: 1.2402e+06 sum: 9.388494e+16 Velocity2 time: 1.24086e+06 sum: 9.386080e+16 Velocity2 time: 1.24152e+06 sum: 9.383569e+16 Velocity2 time: 1.24218e+06 sum: 9.380966e+16 Velocity2 time: 1.24283e+06 sum: 9.378285e+16 Velocity2 time: 1.24349e+06 sum: 9.375545e+16 Velocity2 time: 1.24415e+06 sum: 9.372768e+16 Velocity2 time: 1.24481e+06 sum: 9.369984e+16 Velocity2 time: 1.24546e+06 sum: 9.367224e+16 Velocity2 time: 1.24612e+06 sum: 9.364523e+16 Velocity2 time: 1.24678e+06 sum: 9.361919e+16 Velocity2 time: 1.24744e+06 sum: 9.359448e+16 Velocity2 time: 1.24809e+06 sum: 9.357146e+16 Velocity2 time: 1.24875e+06 sum: 9.355047e+16 Velocity2 time: 1.24941e+06 sum: 9.353180e+16 Velocity2 time: 1.25007e+06 sum: 9.351569e+16 Velocity2 time: 1.25072e+06 sum: 9.350235e+16 Velocity2 time: 1.25138e+06 sum: 9.349189e+16 Velocity2 time: 1.25204e+06 sum: 9.348435e+16 Velocity2 time: 1.2527e+06 sum: 9.347969e+16 Velocity2 time: 1.25335e+06 sum: 9.347780e+16 Velocity2 time: 1.25401e+06 sum: 9.347847e+16 Velocity2 time: 1.25467e+06 sum: 9.348142e+16 Velocity2 time: 1.25533e+06 sum: 9.348628e+16 Velocity2 time: 1.25598e+06 sum: 9.349261e+16 Velocity2 time: 1.25664e+06 sum: 9.349994e+16 Velocity2 time: 1.2573e+06 sum: 9.350774e+16 Velocity2 time: 1.25796e+06 sum: 9.351544e+16 Velocity2 time: 1.25861e+06 sum: 9.352250e+16 Velocity2 time: 1.25927e+06 sum: 9.352837e+16 Velocity2 time: 1.25993e+06 sum: 9.353253e+16 Velocity2 time: 1.26059e+06 sum: 9.353452e+16 Velocity2 time: 1.26124e+06 sum: 9.353396e+16 Velocity2 time: 1.2619e+06 sum: 9.353055e+16 Velocity2 time: 1.26256e+06 sum: 9.352409e+16 Velocity2 time: 1.26322e+06 sum: 9.351449e+16 Velocity2 time: 1.26387e+06 sum: 9.350176e+16 Velocity2 time: 1.26453e+06 sum: 9.348606e+16 Velocity2 time: 1.26519e+06 sum: 9.346763e+16 Velocity2 time: 1.26584e+06 sum: 9.344683e+16 Velocity2 time: 1.2665e+06 sum: 9.342412e+16 Velocity2 time: 1.26716e+06 sum: 9.340004e+16 Velocity2 time: 1.26782e+06 sum: 9.337518e+16 Velocity2 time: 1.26847e+06 sum: 9.335020e+16 Velocity2 time: 1.26913e+06 sum: 9.332576e+16 Velocity2 time: 1.26979e+06 sum: 9.330253e+16 Velocity2 time: 1.27044e+06 sum: 9.328118e+16 Velocity2 time: 1.2711e+06 sum: 9.326231e+16 Velocity2 time: 1.27176e+06 sum: 9.324648e+16 Velocity2 time: 1.27241e+06 sum: 9.323414e+16 Velocity2 time: 1.27307e+06 sum: 9.322565e+16 Velocity2 time: 1.27373e+06 sum: 9.322127e+16 Velocity2 time: 1.27439e+06 sum: 9.322110e+16 Velocity2 time: 1.27504e+06 sum: 9.322513e+16 Velocity2 time: 1.2757e+06 sum: 9.323320e+16 Velocity2 time: 1.27636e+06 sum: 9.324501e+16 Velocity2 time: 1.27702e+06 sum: 9.326014e+16 Velocity2 time: 1.27767e+06 sum: 9.327807e+16 Velocity2 time: 1.27833e+06 sum: 9.329814e+16 Velocity2 time: 1.27899e+06 sum: 9.331964e+16 Velocity2 time: 1.27965e+06 sum: 9.334182e+16 Velocity2 time: 1.2803e+06 sum: 9.336387e+16 Velocity2 time: 1.28096e+06 sum: 9.338501e+16 Velocity2 time: 1.28162e+06 sum: 9.340447e+16 Velocity2 time: 1.28228e+06 sum: 9.342155e+16 Velocity2 time: 1.28294e+06 sum: 9.343562e+16 Velocity2 time: 1.28359e+06 sum: 9.344614e+16 Velocity2 time: 1.28425e+06 sum: 9.345270e+16 Velocity2 time: 1.28491e+06 sum: 9.345499e+16 Velocity2 time: 1.28557e+06 sum: 9.345284e+16 Velocity2 time: 1.28623e+06 sum: 9.344621e+16 Velocity2 time: 1.28688e+06 sum: 9.343515e+16 Velocity2 time: 1.28754e+06 sum: 9.341985e+16 Velocity2 time: 1.2882e+06 sum: 9.340059e+16 Velocity2 time: 1.28886e+06 sum: 9.337770e+16 Velocity2 time: 1.28952e+06 sum: 9.335160e+16 Velocity2 time: 1.29018e+06 sum: 9.332274e+16 Velocity2 time: 1.29083e+06 sum: 9.329159e+16 Velocity2 time: 1.29149e+06 sum: 9.325863e+16 Velocity2 time: 1.29215e+06 sum: 9.322431e+16 Velocity2 time: 1.29281e+06 sum: 9.318909e+16 Velocity2 time: 1.29347e+06 sum: 9.315335e+16 Velocity2 time: 1.29413e+06 sum: 9.311745e+16 Velocity2 time: 1.29479e+06 sum: 9.308171e+16 Velocity2 time: 1.29544e+06 sum: 9.304637e+16 Velocity2 time: 1.2961e+06 sum: 9.301165e+16 Velocity2 time: 1.29676e+06 sum: 9.297771e+16 Velocity2 time: 1.29742e+06 sum: 9.294468e+16 Velocity2 time: 1.29808e+06 sum: 9.291268e+16 Velocity2 time: 1.29874e+06 sum: 9.288179e+16 Velocity2 time: 1.2994e+06 sum: 9.285210e+16 Velocity2 time: 1.30006e+06 sum: 9.282372e+16 Velocity2 time: 1.30072e+06 sum: 9.279676e+16 Velocity2 time: 1.30138e+06 sum: 9.277138e+16 Velocity2 time: 1.30204e+06 sum: 9.274777e+16 Velocity2 time: 1.30269e+06 sum: 9.272613e+16 Velocity2 time: 1.30335e+06 sum: 9.270672e+16 Velocity2 time: 1.30401e+06 sum: 9.268982e+16 Velocity2 time: 1.30467e+06 sum: 9.267573e+16 Velocity2 time: 1.30533e+06 sum: 9.266476e+16 Velocity2 time: 1.30599e+06 sum: 9.265721e+16 Velocity2 time: 1.30665e+06 sum: 9.265336e+16 Velocity2 time: 1.30731e+06 sum: 9.265345e+16 Velocity2 time: 1.30797e+06 sum: 9.265764e+16 Velocity2 time: 1.30863e+06 sum: 9.266606e+16 Velocity2 time: 1.30929e+06 sum: 9.267871e+16 Velocity2 time: 1.30995e+06 sum: 9.269551e+16 Velocity2 time: 1.31061e+06 sum: 9.271630e+16 Velocity2 time: 1.31127e+06 sum: 9.274076e+16 Velocity2 time: 1.31194e+06 sum: 9.276851e+16 Velocity2 time: 1.3126e+06 sum: 9.279906e+16 Velocity2 time: 1.31326e+06 sum: 9.283182e+16 Velocity2 time: 1.31392e+06 sum: 9.286613e+16 Velocity2 time: 1.31458e+06 sum: 9.290129e+16 Velocity2 time: 1.31524e+06 sum: 9.293652e+16 Velocity2 time: 1.3159e+06 sum: 9.297104e+16 Velocity2 time: 1.31656e+06 sum: 9.300408e+16 Velocity2 time: 1.31722e+06 sum: 9.303487e+16 Velocity2 time: 1.31788e+06 sum: 9.306266e+16 Velocity2 time: 1.31854e+06 sum: 9.308680e+16 Velocity2 time: 1.3192e+06 sum: 9.310667e+16 Velocity2 time: 1.31986e+06 sum: 9.312176e+16 Velocity2 time: 1.32052e+06 sum: 9.313166e+16 Velocity2 time: 1.32118e+06 sum: 9.313607e+16 Velocity2 time: 1.32184e+06 sum: 9.313481e+16 Velocity2 time: 1.3225e+06 sum: 9.312783e+16 Velocity2 time: 1.32317e+06 sum: 9.311524e+16 Velocity2 time: 1.32383e+06 sum: 9.309725e+16 Velocity2 time: 1.32449e+06 sum: 9.307421e+16 Velocity2 time: 1.32515e+06 sum: 9.304659e+16 Velocity2 time: 1.32581e+06 sum: 9.301497e+16 Velocity2 time: 1.32647e+06 sum: 9.298003e+16 Velocity2 time: 1.32713e+06 sum: 9.294249e+16 Velocity2 time: 1.32779e+06 sum: 9.290315e+16 Velocity2 time: 1.32845e+06 sum: 9.286282e+16 Velocity2 time: 1.32911e+06 sum: 9.282232e+16 Velocity2 time: 1.32977e+06 sum: 9.278245e+16 Velocity2 time: 1.33043e+06 sum: 9.274395e+16 Velocity2 time: 1.33109e+06 sum: 9.270750e+16 Velocity2 time: 1.33175e+06 sum: 9.267369e+16 Velocity2 time: 1.33241e+06 sum: 9.264302e+16 Velocity2 time: 1.33307e+06 sum: 9.261586e+16 Velocity2 time: 1.33373e+06 sum: 9.259248e+16 Velocity2 time: 1.33439e+06 sum: 9.257300e+16 Velocity2 time: 1.33505e+06 sum: 9.255746e+16 Velocity2 time: 1.33571e+06 sum: 9.254575e+16 Velocity2 time: 1.33637e+06 sum: 9.253765e+16 Velocity2 time: 1.33703e+06 sum: 9.253287e+16 Velocity2 time: 1.33769e+06 sum: 9.253103e+16 Velocity2 time: 1.33835e+06 sum: 9.253168e+16 Velocity2 time: 1.33902e+06 sum: 9.253434e+16 Velocity2 time: 1.33968e+06 sum: 9.253848e+16 Velocity2 time: 1.34034e+06 sum: 9.254361e+16 Velocity2 time: 1.341e+06 sum: 9.254923e+16 Velocity2 time: 1.34166e+06 sum: 9.255490e+16 Velocity2 time: 1.34232e+06 sum: 9.256022e+16 Velocity2 time: 1.34298e+06 sum: 9.256488e+16 Velocity2 time: 1.34364e+06 sum: 9.256867e+16 Velocity2 time: 1.34431e+06 sum: 9.257144e+16 Velocity2 time: 1.34497e+06 sum: 9.257317e+16 Velocity2 time: 1.34563e+06 sum: 9.257391e+16 Velocity2 time: 1.34629e+06 sum: 9.257381e+16 Velocity2 time: 1.34695e+06 sum: 9.257310e+16 Velocity2 time: 1.34761e+06 sum: 9.257204e+16 Velocity2 time: 1.34827e+06 sum: 9.257096e+16 Velocity2 time: 1.34893e+06 sum: 9.257018e+16 Velocity2 time: 1.34959e+06 sum: 9.257002e+16 Velocity2 time: 1.35026e+06 sum: 9.257076e+16 Velocity2 time: 1.35092e+06 sum: 9.257262e+16 Velocity2 time: 1.35158e+06 sum: 9.257578e+16 Velocity2 time: 1.35224e+06 sum: 9.258032e+16 Velocity2 time: 1.3529e+06 sum: 9.258623e+16 Velocity2 time: 1.35356e+06 sum: 9.259342e+16 Velocity2 time: 1.35422e+06 sum: 9.260173e+16 Velocity2 time: 1.35488e+06 sum: 9.261091e+16 Velocity2 time: 1.35554e+06 sum: 9.262066e+16 Velocity2 time: 1.3562e+06 sum: 9.263066e+16 Velocity2 time: 1.35686e+06 sum: 9.264055e+16 Velocity2 time: 1.35752e+06 sum: 9.264997e+16 Velocity2 time: 1.35818e+06 sum: 9.265859e+16 Velocity2 time: 1.35884e+06 sum: 9.266611e+16 Velocity2 time: 1.3595e+06 sum: 9.267230e+16 Velocity2 time: 1.36016e+06 sum: 9.267697e+16 Velocity2 time: 1.36083e+06 sum: 9.268004e+16 Velocity2 time: 1.36149e+06 sum: 9.268148e+16 Velocity2 time: 1.36215e+06 sum: 9.268137e+16 Velocity2 time: 1.36281e+06 sum: 9.267986e+16 Velocity2 time: 1.36347e+06 sum: 9.267719e+16 Velocity2 time: 1.36413e+06 sum: 9.267366e+16 Velocity2 time: 1.36479e+06 sum: 9.266964e+16 Velocity2 time: 1.36545e+06 sum: 9.266553e+16 Velocity2 time: 1.36611e+06 sum: 9.266175e+16 Velocity2 time: 1.36677e+06 sum: 9.265872e+16 Velocity2 time: 1.36743e+06 sum: 9.265684e+16 Velocity2 time: 1.36809e+06 sum: 9.265646e+16 Velocity2 time: 1.36875e+06 sum: 9.265786e+16 Velocity2 time: 1.36942e+06 sum: 9.266125e+16 Velocity2 time: 1.37008e+06 sum: 9.266673e+16 Velocity2 time: 1.37074e+06 sum: 9.267429e+16 Velocity2 time: 1.3714e+06 sum: 9.268380e+16 Velocity2 time: 1.37206e+06 sum: 9.269502e+16 Velocity2 time: 1.37272e+06 sum: 9.270761e+16 Velocity2 time: 1.37338e+06 sum: 9.272111e+16 Velocity2 time: 1.37404e+06 sum: 9.273502e+16 Velocity2 time: 1.3747e+06 sum: 9.274874e+16 Velocity2 time: 1.37537e+06 sum: 9.276165e+16 Velocity2 time: 1.37603e+06 sum: 9.277314e+16 Velocity2 time: 1.37669e+06 sum: 9.278258e+16 Velocity2 time: 1.37735e+06 sum: 9.278939e+16 Velocity2 time: 1.37801e+06 sum: 9.279308e+16 Velocity2 time: 1.37867e+06 sum: 9.279320e+16 Velocity2 time: 1.37934e+06 sum: 9.278941e+16 Velocity2 time: 1.38e+06 sum: 9.278151e+16 Velocity2 time: 1.38066e+06 sum: 9.276938e+16 Velocity2 time: 1.38132e+06 sum: 9.275307e+16 Velocity2 time: 1.38199e+06 sum: 9.273272e+16 Velocity2 time: 1.38265e+06 sum: 9.270864e+16 Velocity2 time: 1.38331e+06 sum: 9.268124e+16 Velocity2 time: 1.38397e+06 sum: 9.265106e+16 Velocity2 time: 1.38464e+06 sum: 9.261874e+16 Velocity2 time: 1.3853e+06 sum: 9.258503e+16 Velocity2 time: 1.38596e+06 sum: 9.255075e+16 Velocity2 time: 1.38662e+06 sum: 9.251675e+16 Velocity2 time: 1.38729e+06 sum: 9.248395e+16 Velocity2 time: 1.38795e+06 sum: 9.245324e+16 Velocity2 time: 1.38861e+06 sum: 9.242552e+16 Velocity2 time: 1.38927e+06 sum: 9.240160e+16 Velocity2 time: 1.38994e+06 sum: 9.238223e+16 Velocity2 time: 1.3906e+06 sum: 9.236805e+16 Velocity2 time: 1.39126e+06 sum: 9.235957e+16 Velocity2 time: 1.39192e+06 sum: 9.235713e+16 Velocity2 time: 1.39259e+06 sum: 9.236093e+16 Velocity2 time: 1.39325e+06 sum: 9.237099e+16 Velocity2 time: 1.39391e+06 sum: 9.238716e+16 Velocity2 time: 1.39457e+06 sum: 9.240910e+16 Velocity2 time: 1.39523e+06 sum: 9.243636e+16 Velocity2 time: 1.3959e+06 sum: 9.246832e+16 Velocity2 time: 1.39656e+06 sum: 9.250427e+16 Velocity2 time: 1.39722e+06 sum: 9.254339e+16 Velocity2 time: 1.39788e+06 sum: 9.258480e+16 Velocity2 time: 1.39854e+06 sum: 9.262762e+16 Velocity2 time: 1.39921e+06 sum: 9.267091e+16 Velocity2 time: 1.39987e+06 sum: 9.271381e+16 Velocity2 time: 1.40053e+06 sum: 9.275546e+16 Velocity2 time: 1.40119e+06 sum: 9.279510e+16 Velocity2 time: 1.40186e+06 sum: 9.283208e+16 Velocity2 time: 1.40252e+06 sum: 9.286582e+16 Velocity2 time: 1.40318e+06 sum: 9.289590e+16 Velocity2 time: 1.40384e+06 sum: 9.292203e+16 Velocity2 time: 1.4045e+06 sum: 9.294404e+16 Velocity2 time: 1.40517e+06 sum: 9.296193e+16 Velocity2 time: 1.40583e+06 sum: 9.297580e+16 Velocity2 time: 1.40649e+06 sum: 9.298588e+16 Velocity2 time: 1.40715e+06 sum: 9.299253e+16 Velocity2 time: 1.40781e+06 sum: 9.299614e+16 Velocity2 time: 1.40847e+06 sum: 9.299720e+16 Velocity2 time: 1.40914e+06 sum: 9.299619e+16 Velocity2 time: 1.4098e+06 sum: 9.299363e+16 Velocity2 time: 1.41046e+06 sum: 9.298996e+16 Velocity2 time: 1.41112e+06 sum: 9.298562e+16 Velocity2 time: 1.41178e+06 sum: 9.298092e+16 Velocity2 time: 1.41244e+06 sum: 9.297613e+16 Velocity2 time: 1.4131e+06 sum: 9.297139e+16 Velocity2 time: 1.41377e+06 sum: 9.296674e+16 Velocity2 time: 1.41443e+06 sum: 9.296213e+16 Velocity2 time: 1.41509e+06 sum: 9.295743e+16 Velocity2 time: 1.41575e+06 sum: 9.295243e+16 Velocity2 time: 1.41641e+06 sum: 9.294689e+16 Velocity2 time: 1.41707e+06 sum: 9.294052e+16 Velocity2 time: 1.41773e+06 sum: 9.293306e+16 Velocity2 time: 1.41839e+06 sum: 9.292425e+16 Velocity2 time: 1.41905e+06 sum: 9.291391e+16 Velocity2 time: 1.41971e+06 sum: 9.290190e+16 Velocity2 time: 1.42037e+06 sum: 9.288819e+16 Velocity2 time: 1.42103e+06 sum: 9.287281e+16 Velocity2 time: 1.42169e+06 sum: 9.285592e+16 Velocity2 time: 1.42235e+06 sum: 9.283777e+16 Velocity2 time: 1.42301e+06 sum: 9.281869e+16 Velocity2 time: 1.42368e+06 sum: 9.279911e+16 Velocity2 time: 1.42434e+06 sum: 9.277951e+16 Velocity2 time: 1.425e+06 sum: 9.276045e+16 Velocity2 time: 1.42566e+06 sum: 9.274251e+16 Velocity2 time: 1.42632e+06 sum: 9.272629e+16 Velocity2 time: 1.42698e+06 sum: 9.271237e+16 Velocity2 time: 1.42764e+06 sum: 9.270132e+16 Velocity2 time: 1.4283e+06 sum: 9.269363e+16 Velocity2 time: 1.42896e+06 sum: 9.268974e+16 Velocity2 time: 1.42962e+06 sum: 9.268997e+16 Velocity2 time: 1.43028e+06 sum: 9.269455e+16 Velocity2 time: 1.43094e+06 sum: 9.270355e+16 Velocity2 time: 1.4316e+06 sum: 9.271693e+16 Velocity2 time: 1.43226e+06 sum: 9.273450e+16 Velocity2 time: 1.43292e+06 sum: 9.275594e+16 Velocity2 time: 1.43358e+06 sum: 9.278080e+16 Velocity2 time: 1.43424e+06 sum: 9.280853e+16 Velocity2 time: 1.4349e+06 sum: 9.283847e+16 Velocity2 time: 1.43556e+06 sum: 9.286991e+16 Velocity2 time: 1.43622e+06 sum: 9.290209e+16 Velocity2 time: 1.43688e+06 sum: 9.293424e+16 Velocity2 time: 1.43754e+06 sum: 9.296562e+16 Velocity2 time: 1.4382e+06 sum: 9.299553e+16 Velocity2 time: 1.43886e+06 sum: 9.302332e+16 Velocity2 time: 1.43952e+06 sum: 9.304845e+16 Velocity2 time: 1.44018e+06 sum: 9.307047e+16 Velocity2 time: 1.44084e+06 sum: 9.308906e+16 Velocity2 time: 1.4415e+06 sum: 9.310401e+16 Velocity2 time: 1.44216e+06 sum: 9.311526e+16 Velocity2 time: 1.44283e+06 sum: 9.312286e+16 Velocity2 time: 1.44349e+06 sum: 9.312698e+16 Velocity2 time: 1.44415e+06 sum: 9.312792e+16 Velocity2 time: 1.44481e+06 sum: 9.312607e+16 Velocity2 time: 1.44547e+06 sum: 9.312194e+16 Velocity2 time: 1.44613e+06 sum: 9.311608e+16 Velocity2 time: 1.44679e+06 sum: 9.310911e+16 Velocity2 time: 1.44745e+06 sum: 9.310169e+16 Velocity2 time: 1.44811e+06 sum: 9.309450e+16 Velocity2 time: 1.44877e+06 sum: 9.308817e+16 Velocity2 time: 1.44943e+06 sum: 9.308333e+16 Velocity2 time: 1.45009e+06 sum: 9.308054e+16 Velocity2 time: 1.45075e+06 sum: 9.308027e+16 Velocity2 time: 1.45141e+06 sum: 9.308287e+16 Velocity2 time: 1.45207e+06 sum: 9.308859e+16 Velocity2 time: 1.45272e+06 sum: 9.309753e+16 Velocity2 time: 1.45338e+06 sum: 9.310965e+16 Velocity2 time: 1.45404e+06 sum: 9.312476e+16 Velocity2 time: 1.4547e+06 sum: 9.314255e+16 Velocity2 time: 1.45536e+06 sum: 9.316256e+16 Velocity2 time: 1.45602e+06 sum: 9.318423e+16 Velocity2 time: 1.45668e+06 sum: 9.320693e+16 Velocity2 time: 1.45734e+06 sum: 9.322993e+16 Velocity2 time: 1.458e+06 sum: 9.325250e+16 Velocity2 time: 1.45866e+06 sum: 9.327390e+16 Velocity2 time: 1.45932e+06 sum: 9.329340e+16 Velocity2 time: 1.45998e+06 sum: 9.331035e+16 Velocity2 time: 1.46064e+06 sum: 9.332416e+16 Velocity2 time: 1.4613e+06 sum: 9.333433e+16 Velocity2 time: 1.46196e+06 sum: 9.334051e+16 Velocity2 time: 1.46262e+06 sum: 9.334243e+16 Velocity2 time: 1.46328e+06 sum: 9.334001e+16 Velocity2 time: 1.46394e+06 sum: 9.333326e+16 Velocity2 time: 1.4646e+06 sum: 9.332236e+16 Velocity2 time: 1.46526e+06 sum: 9.330762e+16 Velocity2 time: 1.46592e+06 sum: 9.328947e+16 Velocity2 time: 1.46658e+06 sum: 9.326843e+16 Velocity2 time: 1.46724e+06 sum: 9.324514e+16 Velocity2 time: 1.4679e+06 sum: 9.322029e+16 Velocity2 time: 1.46856e+06 sum: 9.319462e+16 Velocity2 time: 1.46922e+06 sum: 9.316886e+16 Velocity2 time: 1.46988e+06 sum: 9.314377e+16 Velocity2 time: 1.47054e+06 sum: 9.312004e+16 Velocity2 time: 1.4712e+06 sum: 9.309829e+16 Velocity2 time: 1.47186e+06 sum: 9.307907e+16 Velocity2 time: 1.47252e+06 sum: 9.306282e+16 Velocity2 time: 1.47318e+06 sum: 9.304985e+16 Velocity2 time: 1.47384e+06 sum: 9.304034e+16 Velocity2 time: 1.4745e+06 sum: 9.303436e+16 Velocity2 time: 1.47516e+06 sum: 9.303183e+16 Velocity2 time: 1.47582e+06 sum: 9.303260e+16 Velocity2 time: 1.47648e+06 sum: 9.303638e+16 Velocity2 time: 1.47714e+06 sum: 9.304284e+16 Velocity2 time: 1.4778e+06 sum: 9.305159e+16 Velocity2 time: 1.47847e+06 sum: 9.306221e+16 Velocity2 time: 1.47913e+06 sum: 9.307430e+16 Velocity2 time: 1.47979e+06 sum: 9.308746e+16 Velocity2 time: 1.48045e+06 sum: 9.310135e+16 Velocity2 time: 1.48111e+06 sum: 9.311568e+16 Velocity2 time: 1.48177e+06 sum: 9.313022e+16 Velocity2 time: 1.48243e+06 sum: 9.314482e+16 Velocity2 time: 1.48309e+06 sum: 9.315942e+16 Velocity2 time: 1.48375e+06 sum: 9.317400e+16 Velocity2 time: 1.48441e+06 sum: 9.318864e+16 Velocity2 time: 1.48508e+06 sum: 9.320343e+16 Velocity2 time: 1.48574e+06 sum: 9.321854e+16 Velocity2 time: 1.4864e+06 sum: 9.323415e+16 Velocity2 time: 1.48706e+06 sum: 9.325042e+16 Velocity2 time: 1.48772e+06 sum: 9.326754e+16 Velocity2 time: 1.48838e+06 sum: 9.328565e+16 Velocity2 time: 1.48904e+06 sum: 9.330485e+16 Velocity2 time: 1.48971e+06 sum: 9.332518e+16 Velocity2 time: 1.49037e+06 sum: 9.334661e+16 Velocity2 time: 1.49103e+06 sum: 9.336904e+16 Velocity2 time: 1.49169e+06 sum: 9.339230e+16 Velocity2 time: 1.49236e+06 sum: 9.341609e+16 Velocity2 time: 1.49302e+06 sum: 9.344009e+16 Velocity2 time: 1.49368e+06 sum: 9.346385e+16 Velocity2 time: 1.49434e+06 sum: 9.348688e+16 Velocity2 time: 1.495e+06 sum: 9.350866e+16 Velocity2 time: 1.49567e+06 sum: 9.352862e+16 Velocity2 time: 1.49633e+06 sum: 9.354619e+16 Velocity2 time: 1.49699e+06 sum: 9.356082e+16 Velocity2 time: 1.49766e+06 sum: 9.357200e+16 Velocity2 time: 1.49832e+06 sum: 9.357929e+16 Velocity2 time: 1.49898e+06 sum: 9.358235e+16 Velocity2 time: 1.49964e+06 sum: 9.358092e+16 Velocity2 time: 1.50031e+06 sum: 9.357489e+16 Velocity2 time: 1.50097e+06 sum: 9.356425e+16 Velocity2 time: 1.50164e+06 sum: 9.354914e+16 Velocity2 time: 1.5023e+06 sum: 9.352981e+16 Velocity2 time: 1.50296e+06 sum: 9.350664e+16 Velocity2 time: 1.50363e+06 sum: 9.348011e+16 Velocity2 time: 1.50429e+06 sum: 9.345081e+16 Velocity2 time: 1.50496e+06 sum: 9.341937e+16 Velocity2 time: 1.50562e+06 sum: 9.338649e+16 Velocity2 time: 1.50628e+06 sum: 9.335293e+16 Velocity2 time: 1.50695e+06 sum: 9.331942e+16 Velocity2 time: 1.50761e+06 sum: 9.328670e+16 Velocity2 time: 1.50828e+06 sum: 9.325549e+16 Velocity2 time: 1.50894e+06 sum: 9.322645e+16 Velocity2 time: 1.50961e+06 sum: 9.320019e+16 Velocity2 time: 1.51027e+06 sum: 9.317722e+16 Velocity2 time: 1.51094e+06 sum: 9.315797e+16 Velocity2 time: 1.5116e+06 sum: 9.314276e+16 Velocity2 time: 1.51227e+06 sum: 9.313179e+16 Velocity2 time: 1.51294e+06 sum: 9.312514e+16 Velocity2 time: 1.5136e+06 sum: 9.312275e+16 Velocity2 time: 1.51427e+06 sum: 9.312447e+16 Velocity2 time: 1.51493e+06 sum: 9.312999e+16 Velocity2 time: 1.5156e+06 sum: 9.313893e+16 Velocity2 time: 1.51626e+06 sum: 9.315079e+16 Velocity2 time: 1.51693e+06 sum: 9.316501e+16 Velocity2 time: 1.5176e+06 sum: 9.318097e+16 Velocity2 time: 1.51826e+06 sum: 9.319804e+16 Velocity2 time: 1.51893e+06 sum: 9.321556e+16 Velocity2 time: 1.5196e+06 sum: 9.323290e+16 Velocity2 time: 1.52026e+06 sum: 9.324949e+16 Velocity2 time: 1.52093e+06 sum: 9.326480e+16 Velocity2 time: 1.5216e+06 sum: 9.327840e+16 Velocity2 time: 1.52227e+06 sum: 9.328993e+16 Velocity2 time: 1.52293e+06 sum: 9.329917e+16 Velocity2 time: 1.5236e+06 sum: 9.330599e+16 Velocity2 time: 1.52427e+06 sum: 9.331039e+16 Velocity2 time: 1.52494e+06 sum: 9.331246e+16 Velocity2 time: 1.52561e+06 sum: 9.331241e+16 Velocity2 time: 1.52628e+06 sum: 9.331052e+16 Velocity2 time: 1.52695e+06 sum: 9.330717e+16 Velocity2 time: 1.52762e+06 sum: 9.330277e+16 Velocity2 time: 1.52829e+06 sum: 9.329780e+16 Velocity2 time: 1.52895e+06 sum: 9.329271e+16 Velocity2 time: 1.52962e+06 sum: 9.328799e+16 Velocity2 time: 1.53029e+06 sum: 9.328407e+16 Velocity2 time: 1.53097e+06 sum: 9.328134e+16 Velocity2 time: 1.53164e+06 sum: 9.328014e+16 Velocity2 time: 1.53231e+06 sum: 9.328069e+16 Velocity2 time: 1.53298e+06 sum: 9.328313e+16 Velocity2 time: 1.53365e+06 sum: 9.328749e+16 Velocity2 time: 1.53432e+06 sum: 9.329369e+16 Velocity2 time: 1.53499e+06 sum: 9.330156e+16 Velocity2 time: 1.53566e+06 sum: 9.331080e+16 Velocity2 time: 1.53633e+06 sum: 9.332105e+16 Velocity2 time: 1.537e+06 sum: 9.333189e+16 Velocity2 time: 1.53767e+06 sum: 9.334285e+16 Velocity2 time: 1.53835e+06 sum: 9.335345e+16 Velocity2 time: 1.53902e+06 sum: 9.336324e+16 Velocity2 time: 1.53969e+06 sum: 9.337177e+16 Velocity2 time: 1.54036e+06 sum: 9.337868e+16 Velocity2 time: 1.54103e+06 sum: 9.338370e+16 Velocity2 time: 1.54171e+06 sum: 9.338660e+16 Velocity2 time: 1.54238e+06 sum: 9.338731e+16 Velocity2 time: 1.54305e+06 sum: 9.338582e+16 Velocity2 time: 1.54372e+06 sum: 9.338221e+16 Velocity2 time: 1.5444e+06 sum: 9.337667e+16 Velocity2 time: 1.54507e+06 sum: 9.336943e+16 Velocity2 time: 1.54575e+06 sum: 9.336078e+16 Velocity2 time: 1.54642e+06 sum: 9.335103e+16 Velocity2 time: 1.54709e+06 sum: 9.334050e+16 Velocity2 time: 1.54777e+06 sum: 9.332949e+16 Velocity2 time: 1.54844e+06 sum: 9.331828e+16 Velocity2 time: 1.54912e+06 sum: 9.330709e+16 Velocity2 time: 1.54979e+06 sum: 9.329609e+16 Velocity2 time: 1.55047e+06 sum: 9.328535e+16 Velocity2 time: 1.55114e+06 sum: 9.327491e+16 Velocity2 time: 1.55182e+06 sum: 9.326472e+16 Velocity2 time: 1.55249e+06 sum: 9.325466e+16 Velocity2 time: 1.55317e+06 sum: 9.324456e+16 Velocity2 time: 1.55385e+06 sum: 9.323420e+16 Velocity2 time: 1.55452e+06 sum: 9.322333e+16 Velocity2 time: 1.5552e+06 sum: 9.321169e+16 Velocity2 time: 1.55588e+06 sum: 9.319902e+16 Velocity2 time: 1.55655e+06 sum: 9.318508e+16 Velocity2 time: 1.55723e+06 sum: 9.316969e+16 Velocity2 time: 1.55791e+06 sum: 9.315272e+16 Velocity2 time: 1.55858e+06 sum: 9.313410e+16 Velocity2 time: 1.55926e+06 sum: 9.311386e+16 Velocity2 time: 1.55994e+06 sum: 9.309213e+16 Velocity2 time: 1.56062e+06 sum: 9.306911e+16 Velocity2 time: 1.5613e+06 sum: 9.304514e+16 Velocity2 time: 1.56197e+06 sum: 9.302061e+16 Velocity2 time: 1.56265e+06 sum: 9.299601e+16 Velocity2 time: 1.56333e+06 sum: 9.297190e+16 Velocity2 time: 1.56401e+06 sum: 9.294887e+16 Velocity2 time: 1.56469e+06 sum: 9.292754e+16 Velocity2 time: 1.56537e+06 sum: 9.290855e+16 Velocity2 time: 1.56605e+06 sum: 9.289248e+16 Velocity2 time: 1.56673e+06 sum: 9.287990e+16 Velocity2 time: 1.56741e+06 sum: 9.287128e+16 Velocity2 time: 1.56809e+06 sum: 9.286702e+16 Velocity2 time: 1.56877e+06 sum: 9.286741e+16 Velocity2 time: 1.56946e+06 sum: 9.287260e+16 Velocity2 time: 1.57014e+06 sum: 9.288265e+16 Velocity2 time: 1.57082e+06 sum: 9.289746e+16 Velocity2 time: 1.5715e+06 sum: 9.291680e+16 Velocity2 time: 1.57218e+06 sum: 9.294033e+16 Velocity2 time: 1.57287e+06 sum: 9.296756e+16 Velocity2 time: 1.57355e+06 sum: 9.299790e+16 Velocity2 time: 1.57423e+06 sum: 9.303068e+16 Velocity2 time: 1.57491e+06 sum: 9.306511e+16 Velocity2 time: 1.5756e+06 sum: 9.310036e+16 Velocity2 time: 1.57628e+06 sum: 9.313556e+16 Velocity2 time: 1.57696e+06 sum: 9.316981e+16 Velocity2 time: 1.57765e+06 sum: 9.320223e+16 Velocity2 time: 1.57833e+06 sum: 9.323196e+16 Velocity2 time: 1.57902e+06 sum: 9.325823e+16 Velocity2 time: 1.5797e+06 sum: 9.328034e+16 Velocity2 time: 1.58038e+06 sum: 9.329771e+16 Velocity2 time: 1.58107e+06 sum: 9.330989e+16 Velocity2 time: 1.58175e+06 sum: 9.331659e+16 Velocity2 time: 1.58244e+06 sum: 9.331767e+16 Velocity2 time: 1.58312e+06 sum: 9.331315e+16 Velocity2 time: 1.58381e+06 sum: 9.330323e+16 Velocity2 time: 1.58449e+06 sum: 9.328825e+16 Velocity2 time: 1.58518e+06 sum: 9.326867e+16 Velocity2 time: 1.58587e+06 sum: 9.324509e+16 Velocity2 time: 1.58655e+06 sum: 9.321821e+16 Velocity2 time: 1.58724e+06 sum: 9.318875e+16 Velocity2 time: 1.58793e+06 sum: 9.315752e+16 Velocity2 time: 1.58861e+06 sum: 9.312527e+16 Velocity2 time: 1.5893e+06 sum: 9.309278e+16 Velocity2 time: 1.58999e+06 sum: 9.306075e+16 Velocity2 time: 1.59067e+06 sum: 9.302980e+16 Velocity2 time: 1.59136e+06 sum: 9.300047e+16 Velocity2 time: 1.59205e+06 sum: 9.297317e+16 Velocity2 time: 1.59274e+06 sum: 9.294821e+16 Velocity2 time: 1.59342e+06 sum: 9.292576e+16 Velocity2 time: 1.59411e+06 sum: 9.290588e+16 Velocity2 time: 1.5948e+06 sum: 9.288853e+16 Velocity2 time: 1.59549e+06 sum: 9.287354e+16 Velocity2 time: 1.59617e+06 sum: 9.286069e+16 Velocity2 time: 1.59686e+06 sum: 9.284968e+16 Velocity2 time: 1.59755e+06 sum: 9.284019e+16 Velocity2 time: 1.59824e+06 sum: 9.283188e+16 Velocity2 time: 1.59892e+06 sum: 9.282440e+16 Velocity2 time: 1.59961e+06 sum: 9.281748e+16 Velocity2 time: 1.6003e+06 sum: 9.281088e+16 Velocity2 time: 1.60099e+06 sum: 9.280442e+16 Velocity2 time: 1.60168e+06 sum: 9.279803e+16 Velocity2 time: 1.60237e+06 sum: 9.279171e+16 Velocity2 time: 1.60305e+06 sum: 9.278558e+16 Velocity2 time: 1.60374e+06 sum: 9.277981e+16 Velocity2 time: 1.60443e+06 sum: 9.277465e+16 Velocity2 time: 1.60512e+06 sum: 9.277040e+16 Velocity2 time: 1.60581e+06 sum: 9.276740e+16 Velocity2 time: 1.6065e+06 sum: 9.276597e+16 Velocity2 time: 1.60719e+06 sum: 9.276642e+16 Velocity2 time: 1.60787e+06 sum: 9.276898e+16 Velocity2 time: 1.60856e+06 sum: 9.277382e+16 Velocity2 time: 1.60925e+06 sum: 9.278103e+16 Velocity2 time: 1.60994e+06 sum: 9.279057e+16 Velocity2 time: 1.61063e+06 sum: 9.280228e+16 Velocity2 time: 1.61132e+06 sum: 9.281591e+16 Velocity2 time: 1.61201e+06 sum: 9.283110e+16 Velocity2 time: 1.61269e+06 sum: 9.284738e+16 Velocity2 time: 1.61338e+06 sum: 9.286423e+16 Velocity2 time: 1.61407e+06 sum: 9.288109e+16 Velocity2 time: 1.61476e+06 sum: 9.289736e+16 Velocity2 time: 1.61545e+06 sum: 9.291245e+16 Velocity2 time: 1.61613e+06 sum: 9.292580e+16 Velocity2 time: 1.61682e+06 sum: 9.293693e+16 Velocity2 time: 1.61751e+06 sum: 9.294542e+16 Velocity2 time: 1.6182e+06 sum: 9.295096e+16 Velocity2 time: 1.61889e+06 sum: 9.295335e+16 Velocity2 time: 1.61957e+06 sum: 9.295253e+16 Velocity2 time: 1.62026e+06 sum: 9.294856e+16 Velocity2 time: 1.62095e+06 sum: 9.294164e+16 Velocity2 time: 1.62164e+06 sum: 9.293210e+16 Velocity2 time: 1.62232e+06 sum: 9.292039e+16 Velocity2 time: 1.62301e+06 sum: 9.290703e+16 Velocity2 time: 1.6237e+06 sum: 9.289266e+16 Velocity2 time: 1.62439e+06 sum: 9.287795e+16 Velocity2 time: 1.62508e+06 sum: 9.286360e+16 Velocity2 time: 1.62576e+06 sum: 9.285030e+16 Velocity2 time: 1.62645e+06 sum: 9.283869e+16 Velocity2 time: 1.62714e+06 sum: 9.282937e+16 Velocity2 time: 1.62783e+06 sum: 9.282284e+16 Velocity2 time: 1.62851e+06 sum: 9.281946e+16 Velocity2 time: 1.6292e+06 sum: 9.281948e+16 Velocity2 time: 1.62989e+06 sum: 9.282299e+16 Velocity2 time: 1.63057e+06 sum: 9.282993e+16 Velocity2 time: 1.63126e+06 sum: 9.284010e+16 Velocity2 time: 1.63195e+06 sum: 9.285312e+16 Velocity2 time: 1.63263e+06 sum: 9.286850e+16 Velocity2 time: 1.63332e+06 sum: 9.288563e+16 Velocity2 time: 1.63401e+06 sum: 9.290380e+16 Velocity2 time: 1.63469e+06 sum: 9.292226e+16 Velocity2 time: 1.63538e+06 sum: 9.294018e+16 Velocity2 time: 1.63606e+06 sum: 9.295675e+16 Velocity2 time: 1.63675e+06 sum: 9.297118e+16 Velocity2 time: 1.63743e+06 sum: 9.298271e+16 Velocity2 time: 1.63812e+06 sum: 9.299067e+16 Velocity2 time: 1.6388e+06 sum: 9.299448e+16 Velocity2 time: 1.63949e+06 sum: 9.299368e+16 Velocity2 time: 1.64017e+06 sum: 9.298797e+16 Velocity2 time: 1.64086e+06 sum: 9.297717e+16 Velocity2 time: 1.64154e+06 sum: 9.296130e+16 Velocity2 time: 1.64222e+06 sum: 9.294052e+16 Velocity2 time: 1.64291e+06 sum: 9.291516e+16 Velocity2 time: 1.64359e+06 sum: 9.288573e+16 Velocity2 time: 1.64427e+06 sum: 9.285287e+16 Velocity2 time: 1.64496e+06 sum: 9.281736e+16 Velocity2 time: 1.64564e+06 sum: 9.278009e+16 Velocity2 time: 1.64632e+06 sum: 9.274201e+16 Velocity2 time: 1.64701e+06 sum: 9.270412e+16 Velocity2 time: 1.64769e+06 sum: 9.266744e+16 Velocity2 time: 1.64837e+06 sum: 9.263295e+16 Velocity2 time: 1.64905e+06 sum: 9.260157e+16 Velocity2 time: 1.64974e+06 sum: 9.257410e+16 Velocity2 time: 1.65042e+06 sum: 9.255125e+16 Velocity2 time: 1.6511e+06 sum: 9.253356e+16 Velocity2 time: 1.65178e+06 sum: 9.252140e+16 Velocity2 time: 1.65246e+06 sum: 9.251498e+16 Velocity2 time: 1.65314e+06 sum: 9.251432e+16 Velocity2 time: 1.65382e+06 sum: 9.251927e+16 Velocity2 time: 1.65451e+06 sum: 9.252954e+16 Velocity2 time: 1.65519e+06 sum: 9.254468e+16 Velocity2 time: 1.65587e+06 sum: 9.256413e+16 Velocity2 time: 1.65655e+06 sum: 9.258723e+16 Velocity2 time: 1.65723e+06 sum: 9.261328e+16 Velocity2 time: 1.65791e+06 sum: 9.264152e+16 Velocity2 time: 1.65859e+06 sum: 9.267121e+16 Velocity2 time: 1.65927e+06 sum: 9.270163e+16 Velocity2 time: 1.65995e+06 sum: 9.273211e+16 Velocity2 time: 1.66062e+06 sum: 9.276207e+16 Velocity2 time: 1.6613e+06 sum: 9.279099e+16 Velocity2 time: 1.66198e+06 sum: 9.281849e+16 Velocity2 time: 1.66266e+06 sum: 9.284427e+16 Velocity2 time: 1.66334e+06 sum: 9.286815e+16 Velocity2 time: 1.66402e+06 sum: 9.289006e+16 Velocity2 time: 1.6647e+06 sum: 9.291001e+16 Velocity2 time: 1.66537e+06 sum: 9.292811e+16 Velocity2 time: 1.66605e+06 sum: 9.294449e+16 Velocity2 time: 1.66673e+06 sum: 9.295935e+16 Velocity2 time: 1.66741e+06 sum: 9.297288e+16 Velocity2 time: 1.66808e+06 sum: 9.298526e+16 Velocity2 time: 1.66876e+06 sum: 9.299662e+16 Velocity2 time: 1.66944e+06 sum: 9.300706e+16 Velocity2 time: 1.67011e+06 sum: 9.301660e+16 Velocity2 time: 1.67079e+06 sum: 9.302516e+16 Velocity2 time: 1.67147e+06 sum: 9.303259e+16 Velocity2 time: 1.67214e+06 sum: 9.303869e+16 Velocity2 time: 1.67282e+06 sum: 9.304315e+16 Velocity2 time: 1.67349e+06 sum: 9.304564e+16 Velocity2 time: 1.67417e+06 sum: 9.304577e+16 Velocity2 time: 1.67484e+06 sum: 9.304318e+16 Velocity2 time: 1.67552e+06 sum: 9.303750e+16 Velocity2 time: 1.67619e+06 sum: 9.302842e+16 Velocity2 time: 1.67687e+06 sum: 9.301568e+16 Velocity2 time: 1.67754e+06 sum: 9.299913e+16 Velocity2 time: 1.67822e+06 sum: 9.297872e+16 Velocity2 time: 1.67889e+06 sum: 9.295451e+16 Velocity2 time: 1.67956e+06 sum: 9.292669e+16 Velocity2 time: 1.68024e+06 sum: 9.289558e+16 Velocity2 time: 1.68091e+06 sum: 9.286163e+16 Velocity2 time: 1.68158e+06 sum: 9.282538e+16 Velocity2 time: 1.68226e+06 sum: 9.278752e+16 Velocity2 time: 1.68293e+06 sum: 9.274880e+16 Velocity2 time: 1.6836e+06 sum: 9.271003e+16 Velocity2 time: 1.68428e+06 sum: 9.267208e+16 Velocity2 time: 1.68495e+06 sum: 9.263585e+16 Velocity2 time: 1.68562e+06 sum: 9.260220e+16 Velocity2 time: 1.68629e+06 sum: 9.257198e+16 Velocity2 time: 1.68696e+06 sum: 9.254596e+16 Velocity2 time: 1.68764e+06 sum: 9.252483e+16 Velocity2 time: 1.68831e+06 sum: 9.250913e+16 Velocity2 time: 1.68898e+06 sum: 9.249929e+16 Velocity2 time: 1.68965e+06 sum: 9.249556e+16 Velocity2 time: 1.69032e+06 sum: 9.249803e+16 Velocity2 time: 1.69099e+06 sum: 9.250661e+16 Velocity2 time: 1.69166e+06 sum: 9.252101e+16 Velocity2 time: 1.69234e+06 sum: 9.254081e+16 Velocity2 time: 1.69301e+06 sum: 9.256539e+16 Velocity2 time: 1.69368e+06 sum: 9.259402e+16 Velocity2 time: 1.69435e+06 sum: 9.262585e+16 Velocity2 time: 1.69502e+06 sum: 9.265994e+16 Velocity2 time: 1.69569e+06 sum: 9.269530e+16 Velocity2 time: 1.69636e+06 sum: 9.273093e+16 Velocity2 time: 1.69702e+06 sum: 9.276582e+16 Velocity2 time: 1.69769e+06 sum: 9.279904e+16 Velocity2 time: 1.69836e+06 sum: 9.282970e+16 Velocity2 time: 1.69903e+06 sum: 9.285703e+16 Velocity2 time: 1.6997e+06 sum: 9.288038e+16 Velocity2 time: 1.70037e+06 sum: 9.289925e+16 Velocity2 time: 1.70104e+06 sum: 9.291327e+16 Velocity2 time: 1.7017e+06 sum: 9.292225e+16 Velocity2 time: 1.70237e+06 sum: 9.292614e+16 Velocity2 time: 1.70304e+06 sum: 9.292509e+16 Velocity2 time: 1.70371e+06 sum: 9.291936e+16 Velocity2 time: 1.70437e+06 sum: 9.290936e+16 Velocity2 time: 1.70504e+06 sum: 9.289564e+16 Velocity2 time: 1.70571e+06 sum: 9.287883e+16 Velocity2 time: 1.70637e+06 sum: 9.285966e+16 Velocity2 time: 1.70704e+06 sum: 9.283889e+16 Velocity2 time: 1.70771e+06 sum: 9.281733e+16 Velocity2 time: 1.70837e+06 sum: 9.279577e+16 Velocity2 time: 1.70904e+06 sum: 9.277498e+16 Velocity2 time: 1.70971e+06 sum: 9.275566e+16 Velocity2 time: 1.71037e+06 sum: 9.273842e+16 Velocity2 time: 1.71104e+06 sum: 9.272379e+16 Velocity2 time: 1.7117e+06 sum: 9.271215e+16 Velocity2 time: 1.71237e+06 sum: 9.270376e+16 Velocity2 time: 1.71303e+06 sum: 9.269871e+16 Velocity2 time: 1.7137e+06 sum: 9.269699e+16 Velocity2 time: 1.71436e+06 sum: 9.269842e+16 Velocity2 time: 1.71503e+06 sum: 9.270271e+16 Velocity2 time: 1.7157e+06 sum: 9.270946e+16 Velocity2 time: 1.71636e+06 sum: 9.271819e+16 Velocity2 time: 1.71702e+06 sum: 9.272833e+16 Velocity2 time: 1.71769e+06 sum: 9.273931e+16 Velocity2 time: 1.71835e+06 sum: 9.275051e+16 Velocity2 time: 1.71902e+06 sum: 9.276137e+16 Velocity2 time: 1.71968e+06 sum: 9.277132e+16 Velocity2 time: 1.72035e+06 sum: 9.277988e+16 Velocity2 time: 1.72101e+06 sum: 9.278663e+16 Velocity2 time: 1.72167e+06 sum: 9.279124e+16 Velocity2 time: 1.72234e+06 sum: 9.279348e+16 Velocity2 time: 1.723e+06 sum: 9.279323e+16 Velocity2 time: 1.72367e+06 sum: 9.279045e+16 Velocity2 time: 1.72433e+06 sum: 9.278523e+16 Velocity2 time: 1.72499e+06 sum: 9.277772e+16 Velocity2 time: 1.72566e+06 sum: 9.276816e+16 Velocity2 time: 1.72632e+06 sum: 9.275685e+16 Velocity2 time: 1.72698e+06 sum: 9.274412e+16 Velocity2 time: 1.72764e+06 sum: 9.273033e+16 Velocity2 time: 1.72831e+06 sum: 9.271584e+16 Velocity2 time: 1.72897e+06 sum: 9.270097e+16 Velocity2 time: 1.72963e+06 sum: 9.268601e+16 Velocity2 time: 1.73029e+06 sum: 9.267119e+16 Velocity2 time: 1.73096e+06 sum: 9.265667e+16 Velocity2 time: 1.73162e+06 sum: 9.264252e+16 Velocity2 time: 1.73228e+06 sum: 9.262876e+16 Velocity2 time: 1.73294e+06 sum: 9.261530e+16 Velocity2 time: 1.73361e+06 sum: 9.260199e+16 Velocity2 time: 1.73427e+06 sum: 9.258864e+16 Velocity2 time: 1.73493e+06 sum: 9.257502e+16 Velocity2 time: 1.73559e+06 sum: 9.256088e+16 Velocity2 time: 1.73625e+06 sum: 9.254599e+16 Velocity2 time: 1.73691e+06 sum: 9.253016e+16 Velocity2 time: 1.73757e+06 sum: 9.251322e+16 Velocity2 time: 1.73824e+06 sum: 9.249512e+16 Velocity2 time: 1.7389e+06 sum: 9.247585e+16 Velocity2 time: 1.73956e+06 sum: 9.245554e+16 Velocity2 time: 1.74022e+06 sum: 9.243439e+16 Velocity2 time: 1.74088e+06 sum: 9.241269e+16 Velocity2 time: 1.74154e+06 sum: 9.239086e+16 Velocity2 time: 1.7422e+06 sum: 9.236935e+16 Velocity2 time: 1.74286e+06 sum: 9.234871e+16 Velocity2 time: 1.74352e+06 sum: 9.232950e+16 Velocity2 time: 1.74418e+06 sum: 9.231232e+16 Velocity2 time: 1.74484e+06 sum: 9.229776e+16 Velocity2 time: 1.7455e+06 sum: 9.228637e+16 Velocity2 time: 1.74616e+06 sum: 9.227866e+16 Velocity2 time: 1.74682e+06 sum: 9.227507e+16 Velocity2 time: 1.74748e+06 sum: 9.227593e+16 Velocity2 time: 1.74814e+06 sum: 9.228149e+16 Velocity2 time: 1.7488e+06 sum: 9.229185e+16 Velocity2 time: 1.74946e+06 sum: 9.230699e+16 Velocity2 time: 1.75012e+06 sum: 9.232674e+16 Velocity2 time: 1.75078e+06 sum: 9.235082e+16 Velocity2 time: 1.75144e+06 sum: 9.237876e+16 Velocity2 time: 1.7521e+06 sum: 9.241000e+16 Velocity2 time: 1.75276e+06 sum: 9.244386e+16 Velocity2 time: 1.75342e+06 sum: 9.247952e+16 Velocity2 time: 1.75408e+06 sum: 9.251611e+16 Velocity2 time: 1.75474e+06 sum: 9.255270e+16 Velocity2 time: 1.75539e+06 sum: 9.258832e+16 Velocity2 time: 1.75605e+06 sum: 9.262198e+16 Velocity2 time: 1.75671e+06 sum: 9.265273e+16 Velocity2 time: 1.75737e+06 sum: 9.267968e+16 Velocity2 time: 1.75803e+06 sum: 9.270200e+16 Velocity2 time: 1.75869e+06 sum: 9.271896e+16 Velocity2 time: 1.75935e+06 sum: 9.272996e+16 Velocity2 time: 1.76001e+06 sum: 9.273453e+16 Velocity2 time: 1.76067e+06 sum: 9.273238e+16 Velocity2 time: 1.76132e+06 sum: 9.272333e+16 Velocity2 time: 1.76198e+06 sum: 9.270739e+16 Velocity2 time: 1.76264e+06 sum: 9.268474e+16 Velocity2 time: 1.7633e+06 sum: 9.265571e+16 Velocity2 time: 1.76396e+06 sum: 9.262074e+16 Velocity2 time: 1.76462e+06 sum: 9.258047e+16 Velocity2 time: 1.76528e+06 sum: 9.253559e+16 Velocity2 time: 1.76593e+06 sum: 9.248693e+16 Velocity2 time: 1.76659e+06 sum: 9.243537e+16 Velocity2 time: 1.76725e+06 sum: 9.238187e+16 Velocity2 time: 1.76791e+06 sum: 9.232738e+16 Velocity2 time: 1.76857e+06 sum: 9.227287e+16 Velocity2 time: 1.76922e+06 sum: 9.221929e+16 Velocity2 time: 1.76988e+06 sum: 9.216752e+16 Velocity2 time: 1.77054e+06 sum: 9.211839e+16 Velocity2 time: 1.7712e+06 sum: 9.207262e+16 Velocity2 time: 1.77186e+06 sum: 9.203081e+16 Velocity2 time: 1.77251e+06 sum: 9.199346e+16 Velocity2 time: 1.77317e+06 sum: 9.196090e+16 Velocity2 time: 1.77383e+06 sum: 9.193335e+16 Velocity2 time: 1.77449e+06 sum: 9.191087e+16 Velocity2 time: 1.77515e+06 sum: 9.189340e+16 Velocity2 time: 1.7758e+06 sum: 9.188075e+16 Velocity2 time: 1.77646e+06 sum: 9.187262e+16 Velocity2 time: 1.77712e+06 sum: 9.186864e+16 Velocity2 time: 1.77778e+06 sum: 9.186836e+16 Velocity2 time: 1.77844e+06 sum: 9.187130e+16 Velocity2 time: 1.77909e+06 sum: 9.187696e+16 Velocity2 time: 1.77975e+06 sum: 9.188483e+16 Velocity2 time: 1.78041e+06 sum: 9.189443e+16 Velocity2 time: 1.78107e+06 sum: 9.190533e+16 Velocity2 time: 1.78172e+06 sum: 9.191713e+16 Velocity2 time: 1.78238e+06 sum: 9.192951e+16 Velocity2 time: 1.78304e+06 sum: 9.194220e+16 Velocity2 time: 1.7837e+06 sum: 9.195499e+16 Velocity2 time: 1.78435e+06 sum: 9.196773e+16 Velocity2 time: 1.78501e+06 sum: 9.198033e+16 Velocity2 time: 1.78567e+06 sum: 9.199272e+16 Velocity2 time: 1.78633e+06 sum: 9.200487e+16 Velocity2 time: 1.78698e+06 sum: 9.201676e+16 Velocity2 time: 1.78764e+06 sum: 9.202837e+16 Velocity2 time: 1.7883e+06 sum: 9.203967e+16 Velocity2 time: 1.78896e+06 sum: 9.205061e+16 Velocity2 time: 1.78961e+06 sum: 9.206109e+16 Velocity2 time: 1.79027e+06 sum: 9.207098e+16 Velocity2 time: 1.79093e+06 sum: 9.208013e+16 Velocity2 time: 1.79158e+06 sum: 9.208830e+16 Velocity2 time: 1.79224e+06 sum: 9.209523e+16 Velocity2 time: 1.7929e+06 sum: 9.210065e+16 Velocity2 time: 1.79356e+06 sum: 9.210421e+16 Velocity2 time: 1.79421e+06 sum: 9.210560e+16 Velocity2 time: 1.79487e+06 sum: 9.210448e+16 Velocity2 time: 1.79553e+06 sum: 9.210054e+16 Velocity2 time: 1.79618e+06 sum: 9.209353e+16 Velocity2 time: 1.79684e+06 sum: 9.208324e+16 Velocity2 time: 1.7975e+06 sum: 9.206952e+16 Velocity2 time: 1.79816e+06 sum: 9.205234e+16 Velocity2 time: 1.79881e+06 sum: 9.203176e+16 Velocity2 time: 1.79947e+06 sum: 9.200794e+16 Velocity2 time: 1.80013e+06 sum: 9.198116e+16 Velocity2 time: 1.80078e+06 sum: 9.195182e+16 Velocity2 time: 1.80144e+06 sum: 9.192038e+16 Velocity2 time: 1.8021e+06 sum: 9.188743e+16 Velocity2 time: 1.80275e+06 sum: 9.185360e+16 Velocity2 time: 1.80341e+06 sum: 9.181958e+16 Velocity2 time: 1.80407e+06 sum: 9.178607e+16 Velocity2 time: 1.80472e+06 sum: 9.175377e+16 Velocity2 time: 1.80538e+06 sum: 9.172337e+16 Velocity2 time: 1.80604e+06 sum: 9.169549e+16 Velocity2 time: 1.80669e+06 sum: 9.167068e+16 Velocity2 time: 1.80735e+06 sum: 9.164938e+16 Velocity2 time: 1.80801e+06 sum: 9.163195e+16 Velocity2 time: 1.80866e+06 sum: 9.161860e+16 Velocity2 time: 1.80932e+06 sum: 9.160943e+16 Velocity2 time: 1.80998e+06 sum: 9.160440e+16 Velocity2 time: 1.81064e+06 sum: 9.160332e+16 Velocity2 time: 1.81129e+06 sum: 9.160591e+16 Velocity2 time: 1.81195e+06 sum: 9.161173e+16 Velocity2 time: 1.81261e+06 sum: 9.162026e+16 Velocity2 time: 1.81327e+06 sum: 9.163090e+16 Velocity2 time: 1.81392e+06 sum: 9.164296e+16 Velocity2 time: 1.81458e+06 sum: 9.165570e+16 Velocity2 time: 1.81524e+06 sum: 9.166838e+16 Velocity2 time: 1.8159e+06 sum: 9.168022e+16 Velocity2 time: 1.81655e+06 sum: 9.169051e+16 Velocity2 time: 1.81721e+06 sum: 9.169854e+16 Velocity2 time: 1.81787e+06 sum: 9.170369e+16 Velocity2 time: 1.81853e+06 sum: 9.170544e+16 Velocity2 time: 1.81919e+06 sum: 9.170335e+16 Velocity2 time: 1.81984e+06 sum: 9.169714e+16 Velocity2 time: 1.8205e+06 sum: 9.168662e+16 Velocity2 time: 1.82116e+06 sum: 9.167176e+16 Velocity2 time: 1.82182e+06 sum: 9.165267e+16 Velocity2 time: 1.82248e+06 sum: 9.162960e+16 Velocity2 time: 1.82313e+06 sum: 9.160289e+16 Velocity2 time: 1.82379e+06 sum: 9.157305e+16 Velocity2 time: 1.82445e+06 sum: 9.154063e+16 Velocity2 time: 1.82511e+06 sum: 9.150630e+16 Velocity2 time: 1.82576e+06 sum: 9.147076e+16 Velocity2 time: 1.82642e+06 sum: 9.143478e+16 Velocity2 time: 1.82708e+06 sum: 9.139911e+16 Velocity2 time: 1.82774e+06 sum: 9.136450e+16 Velocity2 time: 1.8284e+06 sum: 9.133168e+16 Velocity2 time: 1.82905e+06 sum: 9.130133e+16 Velocity2 time: 1.82971e+06 sum: 9.127406e+16 Velocity2 time: 1.83037e+06 sum: 9.125039e+16 Velocity2 time: 1.83103e+06 sum: 9.123075e+16 Velocity2 time: 1.83169e+06 sum: 9.121545e+16 Velocity2 time: 1.83235e+06 sum: 9.120470e+16 Velocity2 time: 1.833e+06 sum: 9.119859e+16 Velocity2 time: 1.83366e+06 sum: 9.119707e+16 Velocity2 time: 1.83432e+06 sum: 9.120000e+16 Velocity2 time: 1.83498e+06 sum: 9.120711e+16 Velocity2 time: 1.83564e+06 sum: 9.121806e+16 Velocity2 time: 1.8363e+06 sum: 9.123241e+16 Velocity2 time: 1.83696e+06 sum: 9.124964e+16 Velocity2 time: 1.83761e+06 sum: 9.126920e+16 Velocity2 time: 1.83827e+06 sum: 9.129052e+16 Velocity2 time: 1.83893e+06 sum: 9.131301e+16 Velocity2 time: 1.83959e+06 sum: 9.133608e+16 Velocity2 time: 1.84025e+06 sum: 9.135920e+16 Velocity2 time: 1.84091e+06 sum: 9.138187e+16 Velocity2 time: 1.84157e+06 sum: 9.140365e+16 Velocity2 time: 1.84223e+06 sum: 9.142418e+16 Velocity2 time: 1.84289e+06 sum: 9.144314e+16 Velocity2 time: 1.84355e+06 sum: 9.146031e+16 Velocity2 time: 1.84421e+06 sum: 9.147553e+16 Velocity2 time: 1.84487e+06 sum: 9.148868e+16 Velocity2 time: 1.84553e+06 sum: 9.149971e+16 Velocity2 time: 1.84619e+06 sum: 9.150859e+16 Velocity2 time: 1.84685e+06 sum: 9.151531e+16 Velocity2 time: 1.84751e+06 sum: 9.151987e+16 Velocity2 time: 1.84817e+06 sum: 9.152226e+16 Velocity2 time: 1.84883e+06 sum: 9.152244e+16 Velocity2 time: 1.84949e+06 sum: 9.152038e+16 Velocity2 time: 1.85015e+06 sum: 9.151599e+16 Velocity2 time: 1.85081e+06 sum: 9.150916e+16 Velocity2 time: 1.85147e+06 sum: 9.149975e+16 Velocity2 time: 1.85213e+06 sum: 9.148762e+16 Velocity2 time: 1.85279e+06 sum: 9.147260e+16 Velocity2 time: 1.85345e+06 sum: 9.145454e+16 Velocity2 time: 1.85411e+06 sum: 9.143331e+16 Velocity2 time: 1.85477e+06 sum: 9.140879e+16 Velocity2 time: 1.85543e+06 sum: 9.138094e+16 Velocity2 time: 1.85609e+06 sum: 9.134975e+16 Velocity2 time: 1.85675e+06 sum: 9.131531e+16 Velocity2 time: 1.85741e+06 sum: 9.127780e+16 Velocity2 time: 1.85807e+06 sum: 9.123748e+16 Velocity2 time: 1.85874e+06 sum: 9.119475e+16 Velocity2 time: 1.8594e+06 sum: 9.115008e+16 Velocity2 time: 1.86006e+06 sum: 9.110406e+16 Velocity2 time: 1.86072e+06 sum: 9.105738e+16 Velocity2 time: 1.86138e+06 sum: 9.101080e+16 Velocity2 time: 1.86204e+06 sum: 9.096517e+16 Velocity2 time: 1.8627e+06 sum: 9.092135e+16 Velocity2 time: 1.86336e+06 sum: 9.088023e+16 Velocity2 time: 1.86402e+06 sum: 9.084270e+16 Velocity2 time: 1.86468e+06 sum: 9.080961e+16 Velocity2 time: 1.86534e+06 sum: 9.078172e+16 Velocity2 time: 1.866e+06 sum: 9.075973e+16 Velocity2 time: 1.86666e+06 sum: 9.074417e+16 Velocity2 time: 1.86732e+06 sum: 9.073546e+16 Velocity2 time: 1.86798e+06 sum: 9.073385e+16 Velocity2 time: 1.86864e+06 sum: 9.073940e+16 Velocity2 time: 1.8693e+06 sum: 9.075202e+16 Velocity2 time: 1.86996e+06 sum: 9.077143e+16 Velocity2 time: 1.87062e+06 sum: 9.079716e+16 Velocity2 time: 1.87128e+06 sum: 9.082861e+16 Velocity2 time: 1.87194e+06 sum: 9.086502e+16 Velocity2 time: 1.87261e+06 sum: 9.090550e+16 Velocity2 time: 1.87327e+06 sum: 9.094911e+16 Velocity2 time: 1.87393e+06 sum: 9.099477e+16 Velocity2 time: 1.87459e+06 sum: 9.104141e+16 Velocity2 time: 1.87525e+06 sum: 9.108796e+16 Velocity2 time: 1.87591e+06 sum: 9.113331e+16 Velocity2 time: 1.87657e+06 sum: 9.117646e+16 Velocity2 time: 1.87723e+06 sum: 9.121645e+16 Velocity2 time: 1.87789e+06 sum: 9.125242e+16 Velocity2 time: 1.87855e+06 sum: 9.128365e+16 Velocity2 time: 1.87922e+06 sum: 9.130954e+16 Velocity2 time: 1.87988e+06 sum: 9.132966e+16 Velocity2 time: 1.88054e+06 sum: 9.134371e+16 Velocity2 time: 1.8812e+06 sum: 9.135160e+16 Velocity2 time: 1.88186e+06 sum: 9.135338e+16 Velocity2 time: 1.88252e+06 sum: 9.134925e+16 Velocity2 time: 1.88318e+06 sum: 9.133957e+16 Velocity2 time: 1.88384e+06 sum: 9.132483e+16 Velocity2 time: 1.8845e+06 sum: 9.130564e+16 Velocity2 time: 1.88517e+06 sum: 9.128267e+16 Velocity2 time: 1.88583e+06 sum: 9.125667e+16 Velocity2 time: 1.88649e+06 sum: 9.122843e+16 Velocity2 time: 1.88715e+06 sum: 9.119875e+16 Velocity2 time: 1.88781e+06 sum: 9.116840e+16 Velocity2 time: 1.88847e+06 sum: 9.113811e+16 Velocity2 time: 1.88913e+06 sum: 9.110857e+16 Velocity2 time: 1.88979e+06 sum: 9.108038e+16 Velocity2 time: 1.89045e+06 sum: 9.105406e+16 Velocity2 time: 1.89111e+06 sum: 9.103002e+16 Velocity2 time: 1.89177e+06 sum: 9.100857e+16 Velocity2 time: 1.89243e+06 sum: 9.098993e+16 Velocity2 time: 1.89309e+06 sum: 9.097421e+16 Velocity2 time: 1.89375e+06 sum: 9.096140e+16 Velocity2 time: 1.89441e+06 sum: 9.095145e+16 Velocity2 time: 1.89507e+06 sum: 9.094419e+16 Velocity2 time: 1.89573e+06 sum: 9.093941e+16 Velocity2 time: 1.89639e+06 sum: 9.093683e+16 Velocity2 time: 1.89705e+06 sum: 9.093615e+16 Velocity2 time: 1.89771e+06 sum: 9.093705e+16 Velocity2 time: 1.89837e+06 sum: 9.093919e+16 Velocity2 time: 1.89903e+06 sum: 9.094227e+16 Velocity2 time: 1.89969e+06 sum: 9.094598e+16 Velocity2 time: 1.90036e+06 sum: 9.095008e+16 Velocity2 time: 1.90102e+06 sum: 9.095435e+16 Velocity2 time: 1.90168e+06 sum: 9.095864e+16 Velocity2 time: 1.90234e+06 sum: 9.096286e+16 Velocity2 time: 1.903e+06 sum: 9.096698e+16 Velocity2 time: 1.90366e+06 sum: 9.097101e+16 Velocity2 time: 1.90432e+06 sum: 9.097501e+16 Velocity2 time: 1.90498e+06 sum: 9.097908e+16 Velocity2 time: 1.90564e+06 sum: 9.098333e+16 Velocity2 time: 1.9063e+06 sum: 9.098790e+16 Velocity2 time: 1.90696e+06 sum: 9.099289e+16 Velocity2 time: 1.90762e+06 sum: 9.099839e+16 Velocity2 time: 1.90829e+06 sum: 9.100444e+16 Velocity2 time: 1.90895e+06 sum: 9.101106e+16 Velocity2 time: 1.90961e+06 sum: 9.101817e+16 Velocity2 time: 1.91027e+06 sum: 9.102566e+16 Velocity2 time: 1.91093e+06 sum: 9.103334e+16 Velocity2 time: 1.91159e+06 sum: 9.104099e+16 Velocity2 time: 1.91225e+06 sum: 9.104832e+16 Velocity2 time: 1.91291e+06 sum: 9.105501e+16 Velocity2 time: 1.91357e+06 sum: 9.106075e+16 Velocity2 time: 1.91424e+06 sum: 9.106519e+16 Velocity2 time: 1.9149e+06 sum: 9.106803e+16 Velocity2 time: 1.91556e+06 sum: 9.106900e+16 Velocity2 time: 1.91622e+06 sum: 9.106789e+16 Velocity2 time: 1.91688e+06 sum: 9.106456e+16 Velocity2 time: 1.91754e+06 sum: 9.105898e+16 Velocity2 time: 1.9182e+06 sum: 9.105119e+16 Velocity2 time: 1.91887e+06 sum: 9.104136e+16 Velocity2 time: 1.91953e+06 sum: 9.102974e+16 Velocity2 time: 1.92019e+06 sum: 9.101673e+16 Velocity2 time: 1.92085e+06 sum: 9.100279e+16 Velocity2 time: 1.92151e+06 sum: 9.098848e+16 Velocity2 time: 1.92218e+06 sum: 9.097443e+16 Velocity2 time: 1.92284e+06 sum: 9.096133e+16 Velocity2 time: 1.9235e+06 sum: 9.094987e+16 Velocity2 time: 1.92416e+06 sum: 9.094077e+16 Velocity2 time: 1.92482e+06 sum: 9.093469e+16 Velocity2 time: 1.92548e+06 sum: 9.093225e+16 Velocity2 time: 1.92615e+06 sum: 9.093399e+16 Velocity2 time: 1.92681e+06 sum: 9.094032e+16 Velocity2 time: 1.92747e+06 sum: 9.095152e+16 Velocity2 time: 1.92813e+06 sum: 9.096772e+16 Velocity2 time: 1.92879e+06 sum: 9.098890e+16 Velocity2 time: 1.92946e+06 sum: 9.101483e+16 Velocity2 time: 1.93012e+06 sum: 9.104515e+16 Velocity2 time: 1.93078e+06 sum: 9.107929e+16 Velocity2 time: 1.93144e+06 sum: 9.111656e+16 Velocity2 time: 1.9321e+06 sum: 9.115616e+16 Velocity2 time: 1.93277e+06 sum: 9.119714e+16 Velocity2 time: 1.93343e+06 sum: 9.123851e+16 Velocity2 time: 1.93409e+06 sum: 9.127921e+16 Velocity2 time: 1.93475e+06 sum: 9.131821e+16 Velocity2 time: 1.93542e+06 sum: 9.135446e+16 Velocity2 time: 1.93608e+06 sum: 9.138700e+16 Velocity2 time: 1.93674e+06 sum: 9.141496e+16 Velocity2 time: 1.93741e+06 sum: 9.143757e+16 Velocity2 time: 1.93807e+06 sum: 9.145422e+16 Velocity2 time: 1.93873e+06 sum: 9.146444e+16 Velocity2 time: 1.93939e+06 sum: 9.146796e+16 Velocity2 time: 1.94006e+06 sum: 9.146465e+16 Velocity2 time: 1.94072e+06 sum: 9.145458e+16 Velocity2 time: 1.94138e+06 sum: 9.143801e+16 Velocity2 time: 1.94204e+06 sum: 9.141536e+16 Velocity2 time: 1.94271e+06 sum: 9.138719e+16 Velocity2 time: 1.94337e+06 sum: 9.135421e+16 Velocity2 time: 1.94403e+06 sum: 9.131725e+16 Velocity2 time: 1.94469e+06 sum: 9.127721e+16 Velocity2 time: 1.94536e+06 sum: 9.123508e+16 Velocity2 time: 1.94602e+06 sum: 9.119189e+16 Velocity2 time: 1.94668e+06 sum: 9.114864e+16 Velocity2 time: 1.94734e+06 sum: 9.110632e+16 Velocity2 time: 1.948e+06 sum: 9.106588e+16 Velocity2 time: 1.94867e+06 sum: 9.102820e+16 Velocity2 time: 1.94933e+06 sum: 9.099406e+16 Velocity2 time: 1.94999e+06 sum: 9.096410e+16 Velocity2 time: 1.95065e+06 sum: 9.093888e+16 Velocity2 time: 1.95131e+06 sum: 9.091880e+16 Velocity2 time: 1.95198e+06 sum: 9.090413e+16 Velocity2 time: 1.95264e+06 sum: 9.089501e+16 Velocity2 time: 1.9533e+06 sum: 9.089144e+16 Velocity2 time: 1.95396e+06 sum: 9.089331e+16 Velocity2 time: 1.95462e+06 sum: 9.090037e+16 Velocity2 time: 1.95528e+06 sum: 9.091232e+16 Velocity2 time: 1.95594e+06 sum: 9.092874e+16 Velocity2 time: 1.95661e+06 sum: 9.094918e+16 Velocity2 time: 1.95727e+06 sum: 9.097311e+16 Velocity2 time: 1.95793e+06 sum: 9.100000e+16 Velocity2 time: 1.95859e+06 sum: 9.102930e+16 Velocity2 time: 1.95925e+06 sum: 9.106047e+16 Velocity2 time: 1.95991e+06 sum: 9.109298e+16 Velocity2 time: 1.96057e+06 sum: 9.112636e+16 Velocity2 time: 1.96124e+06 sum: 9.116015e+16 Velocity2 time: 1.9619e+06 sum: 9.119397e+16 Velocity2 time: 1.96256e+06 sum: 9.122749e+16 Velocity2 time: 1.96322e+06 sum: 9.126044e+16 Velocity2 time: 1.96388e+06 sum: 9.129260e+16 Velocity2 time: 1.96454e+06 sum: 9.132384e+16 Velocity2 time: 1.96521e+06 sum: 9.135403e+16 Velocity2 time: 1.96587e+06 sum: 9.138310e+16 Velocity2 time: 1.96653e+06 sum: 9.141099e+16 Velocity2 time: 1.96719e+06 sum: 9.143767e+16 Velocity2 time: 1.96785e+06 sum: 9.146310e+16 Velocity2 time: 1.96851e+06 sum: 9.148719e+16 Velocity2 time: 1.96917e+06 sum: 9.150985e+16 Velocity2 time: 1.96984e+06 sum: 9.153095e+16 Velocity2 time: 1.9705e+06 sum: 9.155028e+16 Velocity2 time: 1.97116e+06 sum: 9.156764e+16 Velocity2 time: 1.97182e+06 sum: 9.158276e+16 Velocity2 time: 1.97248e+06 sum: 9.159532e+16 Velocity2 time: 1.97314e+06 sum: 9.160503e+16 Velocity2 time: 1.9738e+06 sum: 9.161156e+16 Velocity2 time: 1.97446e+06 sum: 9.161461e+16 Velocity2 time: 1.97512e+06 sum: 9.161393e+16 Velocity2 time: 1.97579e+06 sum: 9.160930e+16 Velocity2 time: 1.97645e+06 sum: 9.160059e+16 Velocity2 time: 1.97711e+06 sum: 9.158777e+16 Velocity2 time: 1.97777e+06 sum: 9.157090e+16 Velocity2 time: 1.97843e+06 sum: 9.155017e+16 Velocity2 time: 1.97909e+06 sum: 9.152588e+16 Velocity2 time: 1.97975e+06 sum: 9.149846e+16 Velocity2 time: 1.98041e+06 sum: 9.146843e+16 Velocity2 time: 1.98107e+06 sum: 9.143646e+16 Velocity2 time: 1.98173e+06 sum: 9.140325e+16 Velocity2 time: 1.98239e+06 sum: 9.136963e+16 Velocity2 time: 1.98306e+06 sum: 9.133641e+16 Velocity2 time: 1.98372e+06 sum: 9.130448e+16 Velocity2 time: 1.98438e+06 sum: 9.127466e+16 Velocity2 time: 1.98504e+06 sum: 9.124779e+16 Velocity2 time: 1.9857e+06 sum: 9.122458e+16 Velocity2 time: 1.98636e+06 sum: 9.120571e+16 Velocity2 time: 1.98702e+06 sum: 9.119170e+16 Velocity2 time: 1.98768e+06 sum: 9.118295e+16 Velocity2 time: 1.98834e+06 sum: 9.117970e+16 Velocity2 time: 1.989e+06 sum: 9.118204e+16 Velocity2 time: 1.98966e+06 sum: 9.118989e+16 Velocity2 time: 1.99033e+06 sum: 9.120301e+16 Velocity2 time: 1.99099e+06 sum: 9.122099e+16 Velocity2 time: 1.99165e+06 sum: 9.124329e+16 Velocity2 time: 1.99231e+06 sum: 9.126925e+16 Velocity2 time: 1.99297e+06 sum: 9.129809e+16 Velocity2 time: 1.99363e+06 sum: 9.132898e+16 Velocity2 time: 1.99429e+06 sum: 9.136104e+16 Velocity2 time: 1.99495e+06 sum: 9.139335e+16 Velocity2 time: 1.99561e+06 sum: 9.142503e+16 Velocity2 time: 1.99627e+06 sum: 9.145525e+16 Velocity2 time: 1.99693e+06 sum: 9.148324e+16 Velocity2 time: 1.9976e+06 sum: 9.150831e+16 Velocity2 time: 1.99826e+06 sum: 9.152991e+16 Velocity2 time: 1.99892e+06 sum: 9.154760e+16 Velocity2 time: 1.99958e+06 sum: 9.156109e+16 Velocity2 time: 2.00024e+06 sum: 9.157021e+16 Velocity2 time: 2.0009e+06 sum: 9.157495e+16 Velocity2 time: 2.00156e+06 sum: 9.157543e+16 Velocity2 time: 2.00223e+06 sum: 9.157193e+16 Velocity2 time: 2.00289e+06 sum: 9.156480e+16 Velocity2 time: 2.00355e+06 sum: 9.155454e+16 Velocity2 time: 2.00421e+06 sum: 9.154171e+16 Velocity2 time: 2.00487e+06 sum: 9.152695e+16 Velocity2 time: 2.00553e+06 sum: 9.151092e+16 Velocity2 time: 2.00619e+06 sum: 9.149431e+16 Velocity2 time: 2.00686e+06 sum: 9.147783e+16 Velocity2 time: 2.00752e+06 sum: 9.146214e+16 Velocity2 time: 2.00818e+06 sum: 9.144785e+16 Velocity2 time: 2.00884e+06 sum: 9.143554e+16 Velocity2 time: 2.0095e+06 sum: 9.142567e+16 Velocity2 time: 2.01016e+06 sum: 9.141863e+16 Velocity2 time: 2.01082e+06 sum: 9.141471e+16 Velocity2 time: 2.01149e+06 sum: 9.141407e+16 Velocity2 time: 2.01215e+06 sum: 9.141679e+16 Velocity2 time: 2.01281e+06 sum: 9.142281e+16 Velocity2 time: 2.01347e+06 sum: 9.143197e+16 Velocity2 time: 2.01413e+06 sum: 9.144403e+16 Velocity2 time: 2.01479e+06 sum: 9.145866e+16 Velocity2 time: 2.01545e+06 sum: 9.147546e+16 Velocity2 time: 2.01612e+06 sum: 9.149398e+16 Velocity2 time: 2.01678e+06 sum: 9.151372e+16 Velocity2 time: 2.01744e+06 sum: 9.153421e+16 Velocity2 time: 2.0181e+06 sum: 9.155491e+16 Velocity2 time: 2.01876e+06 sum: 9.157535e+16 Velocity2 time: 2.01943e+06 sum: 9.159505e+16 Velocity2 time: 2.02009e+06 sum: 9.161361e+16 Velocity2 time: 2.02075e+06 sum: 9.163068e+16 Velocity2 time: 2.02141e+06 sum: 9.164596e+16 Velocity2 time: 2.02208e+06 sum: 9.165924e+16 Velocity2 time: 2.02274e+06 sum: 9.167036e+16 Velocity2 time: 2.0234e+06 sum: 9.167923e+16 Velocity2 time: 2.02406e+06 sum: 9.168585e+16 Velocity2 time: 2.02473e+06 sum: 9.169024e+16 Velocity2 time: 2.02539e+06 sum: 9.169248e+16 Velocity2 time: 2.02605e+06 sum: 9.169270e+16 Velocity2 time: 2.02672e+06 sum: 9.169105e+16 Velocity2 time: 2.02738e+06 sum: 9.168768e+16 Velocity2 time: 2.02804e+06 sum: 9.168275e+16 Velocity2 time: 2.02871e+06 sum: 9.167642e+16 Velocity2 time: 2.02937e+06 sum: 9.166880e+16 Velocity2 time: 2.03003e+06 sum: 9.165998e+16 Velocity2 time: 2.0307e+06 sum: 9.165004e+16 Velocity2 time: 2.03136e+06 sum: 9.163897e+16 Velocity2 time: 2.03202e+06 sum: 9.162677e+16 Velocity2 time: 2.03269e+06 sum: 9.161339e+16 Velocity2 time: 2.03335e+06 sum: 9.159878e+16 Velocity2 time: 2.03402e+06 sum: 9.158286e+16 Velocity2 time: 2.03468e+06 sum: 9.156558e+16 Velocity2 time: 2.03534e+06 sum: 9.154686e+16 Velocity2 time: 2.03601e+06 sum: 9.152672e+16 Velocity2 time: 2.03667e+06 sum: 9.150519e+16 Velocity2 time: 2.03734e+06 sum: 9.148236e+16 Velocity2 time: 2.038e+06 sum: 9.145843e+16 Velocity2 time: 2.03867e+06 sum: 9.143359e+16 Velocity2 time: 2.03933e+06 sum: 9.140824e+16 Velocity2 time: 2.04e+06 sum: 9.138279e+16 Velocity2 time: 2.04066e+06 sum: 9.135775e+16 Velocity2 time: 2.04133e+06 sum: 9.133366e+16 Velocity2 time: 2.04199e+06 sum: 9.131114e+16 Velocity2 time: 2.04266e+06 sum: 9.129081e+16 Velocity2 time: 2.04332e+06 sum: 9.127330e+16 Velocity2 time: 2.04399e+06 sum: 9.125921e+16 Velocity2 time: 2.04465e+06 sum: 9.124911e+16 Velocity2 time: 2.04532e+06 sum: 9.124349e+16 Velocity2 time: 2.04599e+06 sum: 9.124273e+16 Velocity2 time: 2.04665e+06 sum: 9.124715e+16 Velocity2 time: 2.04732e+06 sum: 9.125689e+16 Velocity2 time: 2.04799e+06 sum: 9.127198e+16 Velocity2 time: 2.04865e+06 sum: 9.129227e+16 Velocity2 time: 2.04932e+06 sum: 9.131749e+16 Velocity2 time: 2.04999e+06 sum: 9.134719e+16 Velocity2 time: 2.05066e+06 sum: 9.138081e+16 Velocity2 time: 2.05132e+06 sum: 9.141767e+16 Velocity2 time: 2.05199e+06 sum: 9.145697e+16 Velocity2 time: 2.05266e+06 sum: 9.149785e+16 Velocity2 time: 2.05332e+06 sum: 9.153937e+16 Velocity2 time: 2.05399e+06 sum: 9.158059e+16 Velocity2 time: 2.05466e+06 sum: 9.162056e+16 Velocity2 time: 2.05532e+06 sum: 9.165835e+16 Velocity2 time: 2.05599e+06 sum: 9.169310e+16 Velocity2 time: 2.05666e+06 sum: 9.172403e+16 Velocity2 time: 2.05733e+06 sum: 9.175046e+16 Velocity2 time: 2.05799e+06 sum: 9.177183e+16 Velocity2 time: 2.05866e+06 sum: 9.178772e+16 Velocity2 time: 2.05933e+06 sum: 9.179787e+16 Velocity2 time: 2.05999e+06 sum: 9.180214e+16 Velocity2 time: 2.06066e+06 sum: 9.180058e+16 Velocity2 time: 2.06133e+06 sum: 9.179334e+16 Velocity2 time: 2.06199e+06 sum: 9.178073e+16 Velocity2 time: 2.06266e+06 sum: 9.176317e+16 Velocity2 time: 2.06333e+06 sum: 9.174120e+16 Velocity2 time: 2.064e+06 sum: 9.171539e+16 Velocity2 time: 2.06466e+06 sum: 9.168643e+16 Velocity2 time: 2.06533e+06 sum: 9.165500e+16 Velocity2 time: 2.066e+06 sum: 9.162181e+16 Velocity2 time: 2.06666e+06 sum: 9.158758e+16 Velocity2 time: 2.06733e+06 sum: 9.155299e+16 Velocity2 time: 2.068e+06 sum: 9.151867e+16 Velocity2 time: 2.06866e+06 sum: 9.148520e+16 Velocity2 time: 2.06933e+06 sum: 9.145312e+16 Velocity2 time: 2.07e+06 sum: 9.142284e+16 Velocity2 time: 2.07067e+06 sum: 9.139475e+16 Velocity2 time: 2.07133e+06 sum: 9.136909e+16 Velocity2 time: 2.072e+06 sum: 9.134607e+16 Velocity2 time: 2.07267e+06 sum: 9.132579e+16 Velocity2 time: 2.07333e+06 sum: 9.130828e+16 gerris-snapshot-131206/test/rossby/river/eh-6.ref0000644000175100017510000104030212250371172016547 00000000000000P time: 0 first: 1.713e-13 second: 1.536e-13 infty: 1.067e-13 bias: -6.699e-11 P time: 684.36 first: 1.398e-03 second: 1.541e-03 infty: 1.110e-02 bias: -1.109e-10 P time: 1368.44 first: 2.755e-03 second: 3.028e-03 infty: 1.223e-02 bias: -6.041e-11 P time: 2052.5 first: 4.055e-03 second: 4.452e-03 infty: 1.333e-02 bias: -4.524e-11 P time: 2736.54 first: 5.269e-03 second: 5.778e-03 infty: 1.451e-02 bias: -8.448e-11 P time: 3420.47 first: 6.368e-03 second: 6.978e-03 infty: 1.578e-02 bias: -8.261e-11 P time: 4104.27 first: 7.333e-03 second: 8.029e-03 infty: 1.712e-02 bias: -5.413e-11 P time: 4787.96 first: 8.143e-03 second: 8.915e-03 infty: 1.849e-02 bias: -6.811e-11 P time: 5471.52 first: 8.784e-03 second: 9.626e-03 infty: 1.983e-02 bias: -1.163e-10 P time: 6154.95 first: 9.247e-03 second: 1.016e-02 infty: 2.110e-02 bias: -1.559e-10 P time: 6838.25 first: 9.531e-03 second: 1.051e-02 infty: 2.224e-02 bias: -6.410e-11 P time: 7521.43 first: 9.641e-03 second: 1.071e-02 infty: 2.321e-02 bias: -2.726e-11 P time: 8204.49 first: 9.591e-03 second: 1.075e-02 infty: 2.401e-02 bias: -9.714e-11 P time: 8887.44 first: 9.404e-03 second: 1.066e-02 infty: 2.460e-02 bias: -9.360e-11 P time: 9570.31 first: 9.112e-03 second: 1.047e-02 infty: 2.500e-02 bias: -9.753e-11 P time: 10253.1 first: 8.762e-03 second: 1.020e-02 infty: 2.522e-02 bias: -6.160e-11 P time: 10935.8 first: 8.416e-03 second: 9.886e-03 infty: 2.527e-02 bias: -5.300e-11 P time: 11618.5 first: 8.119e-03 second: 9.547e-03 infty: 2.517e-02 bias: -7.353e-11 P time: 12301.2 first: 7.848e-03 second: 9.210e-03 infty: 2.497e-02 bias: -6.856e-11 P time: 12983.8 first: 7.591e-03 second: 8.894e-03 infty: 2.468e-02 bias: -7.351e-11 P time: 13666.5 first: 7.358e-03 second: 8.615e-03 infty: 2.433e-02 bias: -7.467e-11 P time: 14349.2 first: 7.176e-03 second: 8.385e-03 infty: 2.395e-02 bias: -9.108e-11 P time: 15031.9 first: 7.078e-03 second: 8.213e-03 infty: 2.355e-02 bias: -8.448e-11 P time: 15714.7 first: 7.094e-03 second: 8.107e-03 infty: 2.314e-02 bias: -9.026e-11 P time: 16397.5 first: 7.227e-03 second: 8.072e-03 infty: 2.274e-02 bias: -1.011e-10 P time: 17080.4 first: 7.386e-03 second: 8.116e-03 infty: 2.235e-02 bias: -9.690e-11 P time: 17763.4 first: 7.536e-03 second: 8.240e-03 infty: 2.197e-02 bias: -1.012e-10 P time: 18446.4 first: 7.666e-03 second: 8.441e-03 infty: 2.161e-02 bias: -8.205e-11 P time: 19129.5 first: 7.837e-03 second: 8.710e-03 infty: 2.129e-02 bias: -1.067e-10 P time: 19812.6 first: 8.092e-03 second: 9.031e-03 infty: 2.099e-02 bias: -6.400e-11 P time: 20495.7 first: 8.325e-03 second: 9.381e-03 infty: 2.074e-02 bias: -7.937e-11 P time: 21178.9 first: 8.499e-03 second: 9.730e-03 infty: 2.053e-02 bias: -1.317e-10 P time: 21862.1 first: 8.599e-03 second: 1.005e-02 infty: 2.061e-02 bias: -1.045e-10 P time: 22545.2 first: 8.641e-03 second: 1.031e-02 infty: 2.155e-02 bias: -1.285e-10 P time: 23228.2 first: 8.721e-03 second: 1.047e-02 infty: 2.230e-02 bias: -8.152e-11 P time: 23911.1 first: 8.806e-03 second: 1.053e-02 infty: 2.276e-02 bias: -1.069e-10 P time: 24593.8 first: 8.822e-03 second: 1.046e-02 infty: 2.282e-02 bias: -7.440e-11 P time: 25276.2 first: 8.740e-03 second: 1.025e-02 infty: 2.238e-02 bias: -1.148e-10 P time: 25958.5 first: 8.560e-03 second: 9.918e-03 infty: 2.139e-02 bias: -6.592e-11 P time: 26640.6 first: 8.299e-03 second: 9.465e-03 infty: 2.085e-02 bias: -9.958e-11 P time: 27322.5 first: 7.973e-03 second: 8.928e-03 infty: 2.124e-02 bias: -3.999e-11 P time: 28004.1 first: 7.612e-03 second: 8.353e-03 infty: 2.170e-02 bias: -1.234e-10 P time: 28685.6 first: 7.249e-03 second: 7.806e-03 infty: 2.217e-02 bias: -9.961e-11 P time: 29366.9 first: 6.912e-03 second: 7.368e-03 infty: 2.258e-02 bias: -4.109e-11 P time: 30048 first: 6.634e-03 second: 7.125e-03 infty: 2.290e-02 bias: 4.938e-13 P time: 30728.9 first: 6.488e-03 second: 7.138e-03 infty: 2.310e-02 bias: -9.386e-11 P time: 31409.7 first: 6.700e-03 second: 7.421e-03 infty: 2.318e-02 bias: -9.480e-11 P time: 32090.3 first: 7.100e-03 second: 7.932e-03 infty: 2.312e-02 bias: -1.115e-11 P time: 32770.8 first: 7.542e-03 second: 8.596e-03 infty: 2.292e-02 bias: -1.302e-10 P time: 33451.1 first: 8.018e-03 second: 9.330e-03 infty: 2.259e-02 bias: -9.147e-11 P time: 34131.3 first: 8.493e-03 second: 1.006e-02 infty: 2.213e-02 bias: -8.133e-11 P time: 34811.4 first: 8.938e-03 second: 1.074e-02 infty: 2.158e-02 bias: -5.403e-11 P time: 35491.3 first: 9.395e-03 second: 1.132e-02 infty: 2.151e-02 bias: -3.210e-11 P time: 36171.1 first: 9.806e-03 second: 1.178e-02 infty: 2.234e-02 bias: -9.257e-11 P time: 36850.8 first: 1.015e-02 second: 1.210e-02 infty: 2.282e-02 bias: -8.697e-11 P time: 37530.2 first: 1.042e-02 second: 1.228e-02 infty: 2.290e-02 bias: -6.052e-11 P time: 38209.6 first: 1.061e-02 second: 1.232e-02 infty: 2.255e-02 bias: -1.366e-10 P time: 38888.7 first: 1.072e-02 second: 1.224e-02 infty: 2.182e-02 bias: -9.494e-11 P time: 39567.7 first: 1.076e-02 second: 1.205e-02 infty: 2.065e-02 bias: -2.883e-11 P time: 40246.5 first: 1.071e-02 second: 1.179e-02 infty: 1.906e-02 bias: -4.714e-11 P time: 40925.1 first: 1.058e-02 second: 1.148e-02 infty: 1.920e-02 bias: -5.224e-11 P time: 41603.5 first: 1.037e-02 second: 1.114e-02 infty: 1.976e-02 bias: -1.121e-10 P time: 42281.7 first: 1.009e-02 second: 1.081e-02 infty: 2.047e-02 bias: -1.135e-10 P time: 42959.7 first: 9.765e-03 second: 1.050e-02 infty: 2.131e-02 bias: -5.093e-11 P time: 43637.4 first: 9.421e-03 second: 1.023e-02 infty: 2.224e-02 bias: -8.033e-11 P time: 44314.9 first: 9.144e-03 second: 9.985e-03 infty: 2.318e-02 bias: -1.197e-10 P time: 44992.2 first: 8.877e-03 second: 9.776e-03 infty: 2.410e-02 bias: -9.323e-11 P time: 45669.3 first: 8.632e-03 second: 9.584e-03 infty: 2.496e-02 bias: -5.881e-11 P time: 46346.1 first: 8.447e-03 second: 9.398e-03 infty: 2.574e-02 bias: -5.707e-11 P time: 47022.8 first: 8.260e-03 second: 9.204e-03 infty: 2.641e-02 bias: -1.306e-10 P time: 47699.2 first: 8.039e-03 second: 8.994e-03 infty: 2.697e-02 bias: -5.067e-11 P time: 48375.4 first: 7.772e-03 second: 8.765e-03 infty: 2.738e-02 bias: -8.553e-11 P time: 49051.5 first: 7.469e-03 second: 8.519e-03 infty: 2.764e-02 bias: -6.115e-11 P time: 49727.3 first: 7.168e-03 second: 8.265e-03 infty: 2.774e-02 bias: -6.550e-11 P time: 50403 first: 6.858e-03 second: 8.013e-03 infty: 2.769e-02 bias: -1.493e-10 P time: 51078.6 first: 6.577e-03 second: 7.777e-03 infty: 2.749e-02 bias: -1.213e-10 P time: 51754 first: 6.401e-03 second: 7.570e-03 infty: 2.717e-02 bias: -6.132e-11 P time: 52429.3 first: 6.315e-03 second: 7.400e-03 infty: 2.673e-02 bias: -6.829e-11 P time: 53104.5 first: 6.306e-03 second: 7.274e-03 infty: 2.621e-02 bias: -1.292e-10 P time: 53779.6 first: 6.346e-03 second: 7.194e-03 infty: 2.563e-02 bias: -6.644e-11 P time: 54454.5 first: 6.442e-03 second: 7.163e-03 infty: 2.500e-02 bias: -5.344e-11 P time: 55129.4 first: 6.645e-03 second: 7.185e-03 infty: 2.434e-02 bias: -1.126e-10 P time: 55804.1 first: 6.969e-03 second: 7.270e-03 infty: 2.366e-02 bias: -6.881e-11 P time: 56478.7 first: 7.294e-03 second: 7.430e-03 infty: 2.298e-02 bias: -1.656e-10 P time: 57153.1 first: 7.627e-03 second: 7.687e-03 infty: 2.231e-02 bias: -1.052e-11 P time: 57827.4 first: 7.983e-03 second: 8.060e-03 infty: 2.165e-02 bias: -1.245e-10 P time: 58501.6 first: 8.396e-03 second: 8.566e-03 infty: 2.102e-02 bias: -1.270e-10 P time: 59175.6 first: 8.908e-03 second: 9.210e-03 infty: 2.044e-02 bias: 9.528e-12 P time: 59849.4 first: 9.550e-03 second: 9.987e-03 infty: 1.990e-02 bias: -1.274e-10 P time: 60523.1 first: 1.031e-02 second: 1.088e-02 infty: 1.944e-02 bias: -9.080e-11 P time: 61196.6 first: 1.115e-02 second: 1.186e-02 infty: 1.907e-02 bias: -1.251e-10 P time: 61869.9 first: 1.202e-02 second: 1.289e-02 infty: 1.898e-02 bias: -6.436e-11 P time: 62543 first: 1.289e-02 second: 1.394e-02 infty: 2.063e-02 bias: -5.465e-11 P time: 63216 first: 1.373e-02 second: 1.497e-02 infty: 2.205e-02 bias: -8.742e-11 P time: 63888.7 first: 1.453e-02 second: 1.594e-02 infty: 2.320e-02 bias: -8.411e-11 P time: 64561.3 first: 1.524e-02 second: 1.681e-02 infty: 2.406e-02 bias: -3.073e-11 P time: 65233.7 first: 1.585e-02 second: 1.756e-02 infty: 2.461e-02 bias: -5.974e-11 P time: 65905.8 first: 1.633e-02 second: 1.817e-02 infty: 2.493e-02 bias: -1.317e-10 P time: 66577.8 first: 1.668e-02 second: 1.860e-02 infty: 2.519e-02 bias: -1.243e-10 P time: 67249.6 first: 1.686e-02 second: 1.886e-02 infty: 2.567e-02 bias: -1.083e-10 P time: 67921.2 first: 1.689e-02 second: 1.893e-02 infty: 2.578e-02 bias: -8.048e-11 P time: 68592.6 first: 1.676e-02 second: 1.882e-02 infty: 2.549e-02 bias: -1.642e-10 P time: 69263.8 first: 1.648e-02 second: 1.853e-02 infty: 2.571e-02 bias: -5.455e-11 P time: 69934.7 first: 1.607e-02 second: 1.807e-02 infty: 2.684e-02 bias: -7.852e-11 P time: 70605.6 first: 1.557e-02 second: 1.748e-02 infty: 2.775e-02 bias: -1.203e-10 P time: 71276.2 first: 1.497e-02 second: 1.676e-02 infty: 2.837e-02 bias: -2.697e-11 P time: 71946.7 first: 1.431e-02 second: 1.595e-02 infty: 2.867e-02 bias: -8.367e-11 P time: 72617 first: 1.359e-02 second: 1.509e-02 infty: 2.867e-02 bias: -7.556e-11 P time: 73287.2 first: 1.285e-02 second: 1.419e-02 infty: 2.839e-02 bias: -8.604e-11 P time: 73957.3 first: 1.210e-02 second: 1.331e-02 infty: 2.790e-02 bias: -7.930e-11 P time: 74627.2 first: 1.137e-02 second: 1.247e-02 infty: 2.726e-02 bias: -6.328e-11 P time: 75297.1 first: 1.068e-02 second: 1.170e-02 infty: 2.651e-02 bias: -1.031e-10 P time: 75966.8 first: 1.006e-02 second: 1.104e-02 infty: 2.569e-02 bias: -4.022e-11 P time: 76636.4 first: 9.547e-03 second: 1.051e-02 infty: 2.485e-02 bias: -7.351e-11 P time: 77305.9 first: 9.213e-03 second: 1.011e-02 infty: 2.401e-02 bias: -6.434e-11 P time: 77975.3 first: 8.976e-03 second: 9.848e-03 infty: 2.322e-02 bias: -9.241e-11 P time: 78644.6 first: 8.823e-03 second: 9.717e-03 infty: 2.251e-02 bias: -6.914e-11 P time: 79313.7 first: 8.747e-03 second: 9.704e-03 infty: 2.191e-02 bias: -5.238e-11 P time: 79982.8 first: 8.754e-03 second: 9.789e-03 infty: 2.144e-02 bias: -1.708e-10 P time: 80651.7 first: 8.887e-03 second: 9.954e-03 infty: 2.111e-02 bias: -1.122e-10 P time: 81320.5 first: 9.113e-03 second: 1.018e-02 infty: 2.094e-02 bias: -2.516e-11 P time: 81989.1 first: 9.398e-03 second: 1.045e-02 infty: 2.091e-02 bias: -2.032e-11 P time: 82657.5 first: 9.693e-03 second: 1.074e-02 infty: 2.101e-02 bias: -7.905e-11 P time: 83325.8 first: 9.983e-03 second: 1.104e-02 infty: 2.122e-02 bias: -6.817e-11 P time: 83993.9 first: 1.025e-02 second: 1.134e-02 infty: 2.151e-02 bias: -1.409e-10 P time: 84661.9 first: 1.050e-02 second: 1.161e-02 infty: 2.185e-02 bias: -1.087e-10 P time: 85329.6 first: 1.072e-02 second: 1.186e-02 infty: 2.221e-02 bias: -9.836e-11 P time: 85997.2 first: 1.090e-02 second: 1.208e-02 infty: 2.256e-02 bias: -1.350e-10 P time: 86664.5 first: 1.105e-02 second: 1.227e-02 infty: 2.288e-02 bias: -1.909e-11 P time: 87331.6 first: 1.116e-02 second: 1.244e-02 infty: 2.314e-02 bias: -1.031e-10 P time: 87998.6 first: 1.124e-02 second: 1.260e-02 infty: 2.334e-02 bias: -1.084e-10 P time: 88665.3 first: 1.130e-02 second: 1.277e-02 infty: 2.346e-02 bias: -8.739e-11 P time: 89331.9 first: 1.140e-02 second: 1.297e-02 infty: 2.349e-02 bias: -7.885e-11 P time: 89998.3 first: 1.158e-02 second: 1.324e-02 infty: 2.362e-02 bias: -7.343e-11 P time: 90664.5 first: 1.189e-02 second: 1.360e-02 infty: 2.433e-02 bias: -6.082e-11 P time: 91330.5 first: 1.233e-02 second: 1.404e-02 infty: 2.498e-02 bias: -5.613e-11 P time: 91996.4 first: 1.291e-02 second: 1.459e-02 infty: 2.556e-02 bias: -5.640e-11 P time: 92662.2 first: 1.358e-02 second: 1.523e-02 infty: 2.614e-02 bias: -7.048e-11 P time: 93327.8 first: 1.430e-02 second: 1.594e-02 infty: 2.666e-02 bias: -8.258e-11 P time: 93993.3 first: 1.503e-02 second: 1.670e-02 infty: 2.721e-02 bias: -9.424e-11 P time: 94658.7 first: 1.576e-02 second: 1.747e-02 infty: 2.777e-02 bias: -9.790e-11 P time: 95324 first: 1.646e-02 second: 1.821e-02 infty: 2.833e-02 bias: -9.776e-11 P time: 95989.2 first: 1.710e-02 second: 1.891e-02 infty: 2.885e-02 bias: -6.537e-11 P time: 96654.3 first: 1.766e-02 second: 1.953e-02 infty: 2.930e-02 bias: -1.304e-10 P time: 97319.3 first: 1.812e-02 second: 2.004e-02 infty: 2.964e-02 bias: -5.428e-11 P time: 97984.2 first: 1.846e-02 second: 2.044e-02 infty: 2.986e-02 bias: -6.491e-11 P time: 98649 first: 1.869e-02 second: 2.072e-02 infty: 3.000e-02 bias: -3.194e-11 P time: 99313.8 first: 1.880e-02 second: 2.086e-02 infty: 3.008e-02 bias: -5.047e-11 P time: 99978.4 first: 1.882e-02 second: 2.089e-02 infty: 3.013e-02 bias: -3.917e-11 P time: 100643 first: 1.876e-02 second: 2.080e-02 infty: 3.018e-02 bias: -3.503e-11 P time: 101307 first: 1.862e-02 second: 2.062e-02 infty: 3.019e-02 bias: -8.299e-11 P time: 101972 first: 1.841e-02 second: 2.037e-02 infty: 3.021e-02 bias: -6.636e-11 P time: 102636 first: 1.818e-02 second: 2.008e-02 infty: 3.015e-02 bias: -1.502e-10 P time: 103300 first: 1.801e-02 second: 1.975e-02 infty: 3.006e-02 bias: -5.579e-11 P time: 103964 first: 1.792e-02 second: 1.942e-02 infty: 2.989e-02 bias: -9.107e-11 P time: 104628 first: 1.784e-02 second: 1.909e-02 infty: 2.960e-02 bias: -9.919e-11 P time: 105291 first: 1.773e-02 second: 1.878e-02 infty: 2.920e-02 bias: 2.654e-13 P time: 105955 first: 1.758e-02 second: 1.849e-02 infty: 2.870e-02 bias: -1.025e-10 P time: 106618 first: 1.738e-02 second: 1.822e-02 infty: 2.810e-02 bias: -1.115e-10 P time: 107281 first: 1.715e-02 second: 1.797e-02 infty: 2.742e-02 bias: -1.157e-10 P time: 107944 first: 1.688e-02 second: 1.773e-02 infty: 2.669e-02 bias: -4.538e-11 P time: 108607 first: 1.659e-02 second: 1.751e-02 infty: 2.595e-02 bias: -2.777e-11 P time: 109270 first: 1.629e-02 second: 1.729e-02 infty: 2.682e-02 bias: -1.261e-10 P time: 109933 first: 1.599e-02 second: 1.708e-02 infty: 2.762e-02 bias: -9.290e-11 P time: 110595 first: 1.572e-02 second: 1.689e-02 infty: 2.829e-02 bias: -6.686e-11 P time: 111257 first: 1.550e-02 second: 1.671e-02 infty: 2.878e-02 bias: -7.605e-11 P time: 111920 first: 1.533e-02 second: 1.658e-02 infty: 2.906e-02 bias: -5.732e-11 P time: 112582 first: 1.522e-02 second: 1.649e-02 infty: 2.910e-02 bias: -8.412e-11 P time: 113244 first: 1.518e-02 second: 1.647e-02 infty: 2.891e-02 bias: -3.527e-11 P time: 113906 first: 1.523e-02 second: 1.652e-02 infty: 2.848e-02 bias: -1.342e-10 P time: 114568 first: 1.538e-02 second: 1.665e-02 infty: 2.786e-02 bias: -1.005e-10 P time: 115230 first: 1.558e-02 second: 1.685e-02 infty: 2.708e-02 bias: -5.035e-11 P time: 115892 first: 1.582e-02 second: 1.713e-02 infty: 2.711e-02 bias: -8.890e-11 P time: 116554 first: 1.609e-02 second: 1.748e-02 infty: 2.822e-02 bias: -5.857e-11 P time: 117216 first: 1.638e-02 second: 1.787e-02 infty: 2.922e-02 bias: -1.000e-10 P time: 117877 first: 1.668e-02 second: 1.830e-02 infty: 3.010e-02 bias: -1.119e-10 P time: 118539 first: 1.699e-02 second: 1.875e-02 infty: 3.081e-02 bias: -5.304e-11 P time: 119201 first: 1.731e-02 second: 1.922e-02 infty: 3.134e-02 bias: -4.006e-12 P time: 119862 first: 1.765e-02 second: 1.970e-02 infty: 3.158e-02 bias: -3.631e-11 P time: 120524 first: 1.803e-02 second: 2.017e-02 infty: 3.157e-02 bias: -2.314e-11 P time: 121185 first: 1.844e-02 second: 2.065e-02 infty: 3.203e-02 bias: -1.252e-10 P time: 121847 first: 1.889e-02 second: 2.111e-02 infty: 3.295e-02 bias: -1.119e-10 P time: 122508 first: 1.935e-02 second: 2.156e-02 infty: 3.380e-02 bias: -1.139e-10 P time: 123170 first: 1.980e-02 second: 2.200e-02 infty: 3.460e-02 bias: 3.751e-14 P time: 123831 first: 2.022e-02 second: 2.240e-02 infty: 3.533e-02 bias: -1.079e-10 P time: 124492 first: 2.058e-02 second: 2.277e-02 infty: 3.600e-02 bias: -3.267e-11 P time: 125153 first: 2.087e-02 second: 2.308e-02 infty: 3.659e-02 bias: -9.318e-11 P time: 125814 first: 2.110e-02 second: 2.333e-02 infty: 3.718e-02 bias: -5.351e-11 P time: 126475 first: 2.124e-02 second: 2.350e-02 infty: 3.770e-02 bias: -7.699e-11 P time: 127135 first: 2.131e-02 second: 2.357e-02 infty: 3.810e-02 bias: -2.331e-12 P time: 127796 first: 2.129e-02 second: 2.355e-02 infty: 3.835e-02 bias: -8.750e-11 P time: 128457 first: 2.119e-02 second: 2.342e-02 infty: 3.846e-02 bias: -8.573e-11 P time: 129117 first: 2.100e-02 second: 2.319e-02 infty: 3.840e-02 bias: -3.771e-11 P time: 129777 first: 2.073e-02 second: 2.285e-02 infty: 3.816e-02 bias: -2.580e-11 P time: 130437 first: 2.039e-02 second: 2.243e-02 infty: 3.774e-02 bias: -4.982e-11 P time: 131097 first: 1.997e-02 second: 2.194e-02 infty: 3.714e-02 bias: -5.307e-11 P time: 131757 first: 1.950e-02 second: 2.141e-02 infty: 3.637e-02 bias: -1.802e-11 P time: 132417 first: 1.899e-02 second: 2.086e-02 infty: 3.543e-02 bias: -4.265e-11 P time: 133077 first: 1.846e-02 second: 2.033e-02 infty: 3.436e-02 bias: -5.573e-11 P time: 133737 first: 1.794e-02 second: 1.985e-02 infty: 3.317e-02 bias: -1.261e-10 P time: 134397 first: 1.746e-02 second: 1.946e-02 infty: 3.202e-02 bias: -1.153e-10 P time: 135056 first: 1.704e-02 second: 1.918e-02 infty: 3.092e-02 bias: -8.497e-11 P time: 135716 first: 1.675e-02 second: 1.903e-02 infty: 3.243e-02 bias: -8.025e-11 P time: 136375 first: 1.668e-02 second: 1.901e-02 infty: 3.406e-02 bias: -2.727e-11 P time: 137035 first: 1.684e-02 second: 1.912e-02 infty: 3.555e-02 bias: -2.945e-11 P time: 137694 first: 1.710e-02 second: 1.933e-02 infty: 3.686e-02 bias: -7.380e-11 P time: 138353 first: 1.742e-02 second: 1.963e-02 infty: 3.798e-02 bias: -1.246e-10 P time: 139013 first: 1.778e-02 second: 2.000e-02 infty: 3.894e-02 bias: -6.791e-11 P time: 139672 first: 1.817e-02 second: 2.040e-02 infty: 3.973e-02 bias: -1.181e-10 P time: 140331 first: 1.856e-02 second: 2.081e-02 infty: 4.032e-02 bias: -5.391e-11 P time: 140990 first: 1.894e-02 second: 2.121e-02 infty: 4.074e-02 bias: -4.326e-11 P time: 141649 first: 1.930e-02 second: 2.159e-02 infty: 4.096e-02 bias: -1.159e-10 P time: 142309 first: 1.964e-02 second: 2.194e-02 infty: 4.102e-02 bias: -1.215e-10 P time: 142968 first: 1.996e-02 second: 2.225e-02 infty: 4.091e-02 bias: -8.603e-11 P time: 143627 first: 2.027e-02 second: 2.253e-02 infty: 4.067e-02 bias: -9.475e-11 P time: 144286 first: 2.054e-02 second: 2.277e-02 infty: 4.032e-02 bias: -4.273e-11 P time: 144944 first: 2.078e-02 second: 2.298e-02 infty: 3.991e-02 bias: -7.252e-11 P time: 145603 first: 2.099e-02 second: 2.318e-02 infty: 3.947e-02 bias: -9.104e-11 P time: 146262 first: 2.117e-02 second: 2.335e-02 infty: 3.905e-02 bias: -9.075e-11 P time: 146921 first: 2.136e-02 second: 2.352e-02 infty: 3.866e-02 bias: -5.413e-11 P time: 147579 first: 2.154e-02 second: 2.368e-02 infty: 3.834e-02 bias: -3.733e-11 P time: 148238 first: 2.171e-02 second: 2.386e-02 infty: 3.813e-02 bias: -3.550e-11 P time: 148896 first: 2.188e-02 second: 2.405e-02 infty: 3.804e-02 bias: -1.340e-10 P time: 149555 first: 2.205e-02 second: 2.426e-02 infty: 3.811e-02 bias: 2.033e-11 P time: 150213 first: 2.222e-02 second: 2.451e-02 infty: 3.834e-02 bias: -1.080e-10 P time: 150872 first: 2.241e-02 second: 2.479e-02 infty: 3.875e-02 bias: -5.038e-11 P time: 151530 first: 2.264e-02 second: 2.511e-02 infty: 3.935e-02 bias: -7.580e-11 P time: 152189 first: 2.290e-02 second: 2.548e-02 infty: 4.017e-02 bias: -5.581e-11 P time: 152847 first: 2.320e-02 second: 2.588e-02 infty: 4.116e-02 bias: -7.466e-11 P time: 153505 first: 2.353e-02 second: 2.633e-02 infty: 4.231e-02 bias: -1.184e-10 P time: 154163 first: 2.389e-02 second: 2.680e-02 infty: 4.358e-02 bias: -8.058e-11 P time: 154822 first: 2.428e-02 second: 2.730e-02 infty: 4.493e-02 bias: -5.640e-11 P time: 155480 first: 2.471e-02 second: 2.779e-02 infty: 4.631e-02 bias: -1.257e-10 P time: 156138 first: 2.514e-02 second: 2.826e-02 infty: 4.767e-02 bias: -1.256e-10 P time: 156796 first: 2.554e-02 second: 2.869e-02 infty: 4.895e-02 bias: -1.077e-10 P time: 157454 first: 2.588e-02 second: 2.906e-02 infty: 5.012e-02 bias: -1.046e-10 P time: 158113 first: 2.615e-02 second: 2.934e-02 infty: 5.111e-02 bias: -6.606e-11 P time: 158771 first: 2.631e-02 second: 2.953e-02 infty: 5.190e-02 bias: -1.038e-10 P time: 159429 first: 2.638e-02 second: 2.961e-02 infty: 5.247e-02 bias: -6.193e-11 P time: 160088 first: 2.632e-02 second: 2.957e-02 infty: 5.281e-02 bias: -1.674e-11 P time: 160746 first: 2.614e-02 second: 2.941e-02 infty: 5.292e-02 bias: -7.529e-11 P time: 161404 first: 2.587e-02 second: 2.913e-02 infty: 5.280e-02 bias: -9.544e-11 P time: 162063 first: 2.550e-02 second: 2.875e-02 infty: 5.249e-02 bias: -1.660e-10 P time: 162721 first: 2.505e-02 second: 2.827e-02 infty: 5.201e-02 bias: -8.854e-11 P time: 163379 first: 2.456e-02 second: 2.772e-02 infty: 5.138e-02 bias: -9.006e-11 P time: 164038 first: 2.407e-02 second: 2.711e-02 infty: 5.063e-02 bias: -1.202e-10 P time: 164696 first: 2.356e-02 second: 2.648e-02 infty: 4.983e-02 bias: -8.751e-12 P time: 165355 first: 2.301e-02 second: 2.584e-02 infty: 4.899e-02 bias: -1.237e-10 P time: 166013 first: 2.244e-02 second: 2.522e-02 infty: 4.818e-02 bias: -7.725e-11 P time: 166671 first: 2.186e-02 second: 2.464e-02 infty: 4.744e-02 bias: -1.376e-10 P time: 167329 first: 2.130e-02 second: 2.412e-02 infty: 4.680e-02 bias: -2.964e-11 P time: 167987 first: 2.076e-02 second: 2.368e-02 infty: 4.633e-02 bias: -6.795e-11 P time: 168645 first: 2.029e-02 second: 2.332e-02 infty: 4.603e-02 bias: -1.757e-11 P time: 169303 first: 2.003e-02 second: 2.304e-02 infty: 4.596e-02 bias: -3.928e-11 P time: 169961 first: 1.994e-02 second: 2.286e-02 infty: 4.611e-02 bias: -4.556e-11 P time: 170619 first: 1.997e-02 second: 2.276e-02 infty: 4.650e-02 bias: -2.440e-11 P time: 171276 first: 2.007e-02 second: 2.275e-02 infty: 4.711e-02 bias: -9.294e-11 P time: 171934 first: 2.022e-02 second: 2.283e-02 infty: 4.795e-02 bias: -7.280e-11 P time: 172591 first: 2.041e-02 second: 2.299e-02 infty: 4.898e-02 bias: -4.840e-11 P time: 173249 first: 2.065e-02 second: 2.323e-02 infty: 5.019e-02 bias: -1.060e-10 P time: 173906 first: 2.092e-02 second: 2.356e-02 infty: 5.153e-02 bias: -6.819e-11 P time: 174564 first: 2.123e-02 second: 2.397e-02 infty: 5.300e-02 bias: -1.623e-10 P time: 175221 first: 2.158e-02 second: 2.446e-02 infty: 5.452e-02 bias: -3.054e-11 P time: 175878 first: 2.197e-02 second: 2.501e-02 infty: 5.604e-02 bias: -7.958e-11 P time: 176536 first: 2.238e-02 second: 2.562e-02 infty: 5.757e-02 bias: -9.462e-11 P time: 177193 first: 2.284e-02 second: 2.628e-02 infty: 5.905e-02 bias: -1.101e-10 P time: 177850 first: 2.333e-02 second: 2.697e-02 infty: 6.049e-02 bias: -8.683e-11 P time: 178508 first: 2.390e-02 second: 2.768e-02 infty: 6.184e-02 bias: -5.553e-11 P time: 179165 first: 2.452e-02 second: 2.839e-02 infty: 6.305e-02 bias: 1.481e-11 P time: 179823 first: 2.512e-02 second: 2.908e-02 infty: 6.412e-02 bias: -7.933e-11 P time: 180480 first: 2.570e-02 second: 2.975e-02 infty: 6.502e-02 bias: -1.978e-10 P time: 181138 first: 2.623e-02 second: 3.036e-02 infty: 6.574e-02 bias: -2.480e-11 P time: 181796 first: 2.672e-02 second: 3.092e-02 infty: 6.625e-02 bias: -7.397e-11 P time: 182453 first: 2.715e-02 second: 3.141e-02 infty: 6.656e-02 bias: -2.777e-11 P time: 183111 first: 2.754e-02 second: 3.182e-02 infty: 6.666e-02 bias: -8.335e-11 P time: 183769 first: 2.788e-02 second: 3.215e-02 infty: 6.655e-02 bias: -8.046e-11 P time: 184427 first: 2.818e-02 second: 3.239e-02 infty: 6.626e-02 bias: -8.979e-11 P time: 185085 first: 2.843e-02 second: 3.254e-02 infty: 6.584e-02 bias: -3.295e-11 P time: 185743 first: 2.862e-02 second: 3.261e-02 infty: 6.532e-02 bias: -1.026e-10 P time: 186401 first: 2.874e-02 second: 3.258e-02 infty: 6.466e-02 bias: -1.185e-10 P time: 187059 first: 2.876e-02 second: 3.248e-02 infty: 6.392e-02 bias: -7.215e-11 P time: 187717 first: 2.870e-02 second: 3.229e-02 infty: 6.313e-02 bias: -7.080e-11 P time: 188375 first: 2.854e-02 second: 3.202e-02 infty: 6.235e-02 bias: -9.967e-11 P time: 189033 first: 2.829e-02 second: 3.168e-02 infty: 6.162e-02 bias: -4.946e-11 P time: 189691 first: 2.795e-02 second: 3.129e-02 infty: 6.099e-02 bias: -4.739e-11 P time: 190349 first: 2.754e-02 second: 3.085e-02 infty: 6.050e-02 bias: -1.088e-10 P time: 191007 first: 2.706e-02 second: 3.037e-02 infty: 6.019e-02 bias: -1.606e-10 P time: 191665 first: 2.654e-02 second: 2.990e-02 infty: 6.010e-02 bias: -9.831e-11 P time: 192323 first: 2.601e-02 second: 2.943e-02 infty: 6.025e-02 bias: -1.535e-10 P time: 192980 first: 2.551e-02 second: 2.902e-02 infty: 6.065e-02 bias: -8.703e-12 P time: 193638 first: 2.505e-02 second: 2.867e-02 infty: 6.129e-02 bias: -1.032e-10 P time: 194296 first: 2.466e-02 second: 2.841e-02 infty: 6.216e-02 bias: -1.084e-10 P time: 194954 first: 2.438e-02 second: 2.828e-02 infty: 6.324e-02 bias: -3.159e-11 P time: 195612 first: 2.423e-02 second: 2.827e-02 infty: 6.449e-02 bias: -1.045e-10 P time: 196270 first: 2.427e-02 second: 2.840e-02 infty: 6.590e-02 bias: -8.612e-11 P time: 196929 first: 2.442e-02 second: 2.865e-02 infty: 6.740e-02 bias: -2.994e-11 P time: 197587 first: 2.467e-02 second: 2.902e-02 infty: 6.892e-02 bias: -1.168e-10 P time: 198245 first: 2.499e-02 second: 2.947e-02 infty: 7.041e-02 bias: -5.660e-11 P time: 198903 first: 2.534e-02 second: 2.998e-02 infty: 7.188e-02 bias: -6.106e-11 P time: 199561 first: 2.570e-02 second: 3.051e-02 infty: 7.323e-02 bias: -7.733e-11 P time: 200220 first: 2.606e-02 second: 3.103e-02 infty: 7.440e-02 bias: -6.710e-11 P time: 200878 first: 2.639e-02 second: 3.151e-02 infty: 7.534e-02 bias: -1.103e-10 P time: 201537 first: 2.669e-02 second: 3.193e-02 infty: 7.604e-02 bias: -6.037e-11 P time: 202195 first: 2.696e-02 second: 3.227e-02 infty: 7.646e-02 bias: -5.822e-11 P time: 202854 first: 2.721e-02 second: 3.252e-02 infty: 7.661e-02 bias: -1.319e-10 P time: 203513 first: 2.740e-02 second: 3.266e-02 infty: 7.649e-02 bias: -1.084e-10 P time: 204172 first: 2.752e-02 second: 3.271e-02 infty: 7.613e-02 bias: -3.222e-11 P time: 204831 first: 2.757e-02 second: 3.266e-02 infty: 7.557e-02 bias: -8.606e-11 P time: 205489 first: 2.757e-02 second: 3.253e-02 infty: 7.484e-02 bias: -5.056e-11 P time: 206148 first: 2.753e-02 second: 3.234e-02 infty: 7.400e-02 bias: -6.839e-11 P time: 206808 first: 2.745e-02 second: 3.211e-02 infty: 7.316e-02 bias: -6.846e-11 P time: 207467 first: 2.735e-02 second: 3.185e-02 infty: 7.238e-02 bias: -9.428e-11 P time: 208126 first: 2.726e-02 second: 3.160e-02 infty: 7.163e-02 bias: -6.481e-11 P time: 208785 first: 2.718e-02 second: 3.137e-02 infty: 7.096e-02 bias: -5.539e-11 P time: 209444 first: 2.713e-02 second: 3.117e-02 infty: 7.040e-02 bias: -5.862e-11 P time: 210103 first: 2.713e-02 second: 3.103e-02 infty: 6.996e-02 bias: -4.621e-11 P time: 210763 first: 2.717e-02 second: 3.097e-02 infty: 6.968e-02 bias: -9.359e-11 P time: 211422 first: 2.728e-02 second: 3.097e-02 infty: 6.956e-02 bias: -7.965e-11 P time: 212081 first: 2.746e-02 second: 3.106e-02 infty: 6.966e-02 bias: -5.984e-11 P time: 212741 first: 2.772e-02 second: 3.123e-02 infty: 6.993e-02 bias: -3.590e-11 P time: 213400 first: 2.803e-02 second: 3.148e-02 infty: 7.037e-02 bias: -6.685e-11 P time: 214059 first: 2.839e-02 second: 3.180e-02 infty: 7.094e-02 bias: -6.897e-11 P time: 214719 first: 2.878e-02 second: 3.217e-02 infty: 7.165e-02 bias: -9.951e-11 P time: 215379 first: 2.919e-02 second: 3.258e-02 infty: 7.247e-02 bias: -9.926e-11 P time: 216038 first: 2.959e-02 second: 3.301e-02 infty: 7.337e-02 bias: -2.997e-11 P time: 216698 first: 2.995e-02 second: 3.346e-02 infty: 7.434e-02 bias: -6.528e-11 P time: 217358 first: 3.028e-02 second: 3.390e-02 infty: 7.535e-02 bias: -1.160e-10 P time: 218018 first: 3.054e-02 second: 3.431e-02 infty: 7.638e-02 bias: -2.193e-11 P time: 218678 first: 3.073e-02 second: 3.468e-02 infty: 7.739e-02 bias: -4.954e-11 P time: 219338 first: 3.082e-02 second: 3.499e-02 infty: 7.838e-02 bias: -7.504e-11 P time: 219999 first: 3.082e-02 second: 3.523e-02 infty: 7.930e-02 bias: -9.013e-11 P time: 220659 first: 3.071e-02 second: 3.538e-02 infty: 8.014e-02 bias: -8.109e-11 P time: 221320 first: 3.049e-02 second: 3.545e-02 infty: 8.087e-02 bias: -1.693e-11 P time: 221980 first: 3.017e-02 second: 3.542e-02 infty: 8.144e-02 bias: -2.759e-11 P time: 222641 first: 2.978e-02 second: 3.530e-02 infty: 8.185e-02 bias: -9.207e-11 P time: 223302 first: 2.934e-02 second: 3.509e-02 infty: 8.207e-02 bias: -1.139e-10 P time: 223963 first: 2.890e-02 second: 3.479e-02 infty: 8.208e-02 bias: -6.011e-11 P time: 224624 first: 2.846e-02 second: 3.443e-02 infty: 8.189e-02 bias: -5.352e-11 P time: 225285 first: 2.803e-02 second: 3.401e-02 infty: 8.148e-02 bias: -4.397e-11 P time: 225946 first: 2.760e-02 second: 3.355e-02 infty: 8.088e-02 bias: -7.503e-11 P time: 226608 first: 2.716e-02 second: 3.308e-02 infty: 8.010e-02 bias: -1.120e-10 P time: 227269 first: 2.673e-02 second: 3.262e-02 infty: 7.920e-02 bias: -7.758e-11 P time: 227930 first: 2.635e-02 second: 3.218e-02 infty: 7.820e-02 bias: -1.308e-10 P time: 228592 first: 2.604e-02 second: 3.178e-02 infty: 7.716e-02 bias: -9.414e-11 P time: 229253 first: 2.589e-02 second: 3.144e-02 infty: 7.614e-02 bias: -6.314e-11 P time: 229915 first: 2.583e-02 second: 3.117e-02 infty: 7.518e-02 bias: -5.953e-11 P time: 230576 first: 2.584e-02 second: 3.097e-02 infty: 7.435e-02 bias: -8.855e-11 P time: 231237 first: 2.591e-02 second: 3.085e-02 infty: 7.367e-02 bias: -1.246e-10 P time: 231899 first: 2.603e-02 second: 3.081e-02 infty: 7.319e-02 bias: -9.667e-11 P time: 232560 first: 2.619e-02 second: 3.086e-02 infty: 7.293e-02 bias: -4.481e-11 P time: 233221 first: 2.640e-02 second: 3.097e-02 infty: 7.291e-02 bias: -3.170e-11 P time: 233882 first: 2.664e-02 second: 3.117e-02 infty: 7.314e-02 bias: -8.734e-11 P time: 234543 first: 2.692e-02 second: 3.143e-02 infty: 7.361e-02 bias: -1.535e-10 P time: 235204 first: 2.722e-02 second: 3.177e-02 infty: 7.433e-02 bias: -7.279e-11 P time: 235865 first: 2.755e-02 second: 3.216e-02 infty: 7.527e-02 bias: -6.078e-11 P time: 236526 first: 2.790e-02 second: 3.262e-02 infty: 7.641e-02 bias: -9.106e-11 P time: 237187 first: 2.826e-02 second: 3.312e-02 infty: 7.779e-02 bias: -4.994e-11 P time: 237847 first: 2.864e-02 second: 3.367e-02 infty: 7.930e-02 bias: -7.020e-11 P time: 238508 first: 2.904e-02 second: 3.424e-02 infty: 8.085e-02 bias: -1.018e-10 P time: 239169 first: 2.944e-02 second: 3.482e-02 infty: 8.239e-02 bias: -9.287e-11 P time: 239830 first: 2.984e-02 second: 3.540e-02 infty: 8.383e-02 bias: -5.344e-11 P time: 240491 first: 3.024e-02 second: 3.596e-02 infty: 8.513e-02 bias: -8.894e-11 P time: 241152 first: 3.062e-02 second: 3.647e-02 infty: 8.621e-02 bias: -6.202e-11 P time: 241813 first: 3.097e-02 second: 3.693e-02 infty: 8.713e-02 bias: -6.997e-11 P time: 242474 first: 3.129e-02 second: 3.731e-02 infty: 8.781e-02 bias: -4.549e-11 P time: 243135 first: 3.155e-02 second: 3.761e-02 infty: 8.818e-02 bias: -9.584e-11 P time: 243797 first: 3.176e-02 second: 3.781e-02 infty: 8.824e-02 bias: -9.909e-11 P time: 244458 first: 3.191e-02 second: 3.790e-02 infty: 8.802e-02 bias: -7.521e-11 P time: 245120 first: 3.199e-02 second: 3.790e-02 infty: 8.766e-02 bias: -1.015e-10 P time: 245782 first: 3.201e-02 second: 3.778e-02 infty: 8.706e-02 bias: -1.145e-11 P time: 246443 first: 3.195e-02 second: 3.757e-02 infty: 8.626e-02 bias: -7.423e-11 P time: 247105 first: 3.182e-02 second: 3.725e-02 infty: 8.531e-02 bias: -9.335e-11 P time: 247767 first: 3.161e-02 second: 3.686e-02 infty: 8.426e-02 bias: -6.333e-11 P time: 248429 first: 3.133e-02 second: 3.638e-02 infty: 8.313e-02 bias: -1.151e-10 P time: 249091 first: 3.099e-02 second: 3.585e-02 infty: 8.198e-02 bias: -4.117e-11 P time: 249753 first: 3.060e-02 second: 3.526e-02 infty: 8.082e-02 bias: -1.135e-10 P time: 250415 first: 3.016e-02 second: 3.465e-02 infty: 7.969e-02 bias: -7.478e-11 P time: 251077 first: 2.969e-02 second: 3.403e-02 infty: 7.861e-02 bias: -7.313e-11 P time: 251739 first: 2.921e-02 second: 3.341e-02 infty: 7.759e-02 bias: -8.124e-11 P time: 252400 first: 2.873e-02 second: 3.283e-02 infty: 7.666e-02 bias: -3.365e-11 P time: 253062 first: 2.827e-02 second: 3.229e-02 infty: 7.584e-02 bias: -1.104e-10 P time: 253724 first: 2.784e-02 second: 3.184e-02 infty: 7.515e-02 bias: -9.410e-11 P time: 254386 first: 2.748e-02 second: 3.147e-02 infty: 7.460e-02 bias: -1.121e-10 P time: 255048 first: 2.718e-02 second: 3.123e-02 infty: 7.422e-02 bias: -9.529e-11 P time: 255710 first: 2.698e-02 second: 3.111e-02 infty: 7.401e-02 bias: -6.367e-11 P time: 256371 first: 2.686e-02 second: 3.114e-02 infty: 7.398e-02 bias: -6.540e-11 P time: 257033 first: 2.685e-02 second: 3.132e-02 infty: 7.414e-02 bias: -1.187e-10 P time: 257695 first: 2.696e-02 second: 3.163e-02 infty: 7.447e-02 bias: -2.256e-11 P time: 258356 first: 2.719e-02 second: 3.208e-02 infty: 7.497e-02 bias: -4.801e-11 P time: 259018 first: 2.764e-02 second: 3.262e-02 infty: 7.566e-02 bias: -3.138e-11 P time: 259679 first: 2.826e-02 second: 3.324e-02 infty: 7.646e-02 bias: -7.270e-11 P time: 260341 first: 2.898e-02 second: 3.390e-02 infty: 7.732e-02 bias: -6.467e-11 P time: 261002 first: 2.972e-02 second: 3.456e-02 infty: 7.820e-02 bias: -9.731e-11 P time: 261663 first: 3.043e-02 second: 3.519e-02 infty: 7.905e-02 bias: -7.423e-11 P time: 262325 first: 3.107e-02 second: 3.575e-02 infty: 7.983e-02 bias: -4.550e-11 P time: 262986 first: 3.159e-02 second: 3.623e-02 infty: 8.049e-02 bias: -1.147e-10 P time: 263647 first: 3.198e-02 second: 3.659e-02 infty: 8.101e-02 bias: -1.174e-10 P time: 264309 first: 3.223e-02 second: 3.682e-02 infty: 8.133e-02 bias: -1.334e-10 P time: 264970 first: 3.234e-02 second: 3.692e-02 infty: 8.143e-02 bias: -2.098e-11 P time: 265632 first: 3.232e-02 second: 3.689e-02 infty: 8.130e-02 bias: -3.569e-11 P time: 266293 first: 3.219e-02 second: 3.674e-02 infty: 8.093e-02 bias: -5.657e-11 P time: 266954 first: 3.195e-02 second: 3.647e-02 infty: 8.033e-02 bias: -5.452e-11 P time: 267616 first: 3.165e-02 second: 3.612e-02 infty: 7.951e-02 bias: -5.683e-11 P time: 268277 first: 3.132e-02 second: 3.570e-02 infty: 7.851e-02 bias: -1.127e-10 P time: 268939 first: 3.097e-02 second: 3.525e-02 infty: 7.738e-02 bias: -8.374e-11 P time: 269600 first: 3.065e-02 second: 3.479e-02 infty: 7.618e-02 bias: -6.747e-11 P time: 270262 first: 3.036e-02 second: 3.435e-02 infty: 7.497e-02 bias: -3.381e-11 P time: 270923 first: 3.014e-02 second: 3.396e-02 infty: 7.382e-02 bias: -9.650e-11 P time: 271584 first: 2.999e-02 second: 3.364e-02 infty: 7.277e-02 bias: -9.184e-11 P time: 272246 first: 2.991e-02 second: 3.340e-02 infty: 7.196e-02 bias: -6.263e-11 P time: 272907 first: 2.990e-02 second: 3.326e-02 infty: 7.136e-02 bias: -4.434e-11 P time: 273568 first: 2.995e-02 second: 3.323e-02 infty: 7.098e-02 bias: -7.253e-11 P time: 274229 first: 3.006e-02 second: 3.329e-02 infty: 7.085e-02 bias: -5.988e-11 P time: 274890 first: 3.021e-02 second: 3.343e-02 infty: 7.096e-02 bias: -6.099e-11 P time: 275551 first: 3.039e-02 second: 3.366e-02 infty: 7.132e-02 bias: -3.044e-11 P time: 276212 first: 3.061e-02 second: 3.394e-02 infty: 7.191e-02 bias: -1.074e-10 P time: 276873 first: 3.083e-02 second: 3.427e-02 infty: 7.270e-02 bias: -1.109e-10 P time: 277534 first: 3.104e-02 second: 3.462e-02 infty: 7.373e-02 bias: -6.001e-11 P time: 278195 first: 3.124e-02 second: 3.498e-02 infty: 7.487e-02 bias: 3.517e-11 P time: 278856 first: 3.141e-02 second: 3.533e-02 infty: 7.605e-02 bias: -6.911e-11 P time: 279517 first: 3.153e-02 second: 3.566e-02 infty: 7.719e-02 bias: -1.082e-10 P time: 280178 first: 3.162e-02 second: 3.593e-02 infty: 7.821e-02 bias: -5.117e-11 P time: 280839 first: 3.165e-02 second: 3.615e-02 infty: 7.907e-02 bias: -7.902e-11 P time: 281500 first: 3.164e-02 second: 3.630e-02 infty: 7.969e-02 bias: -1.090e-10 P time: 282162 first: 3.158e-02 second: 3.637e-02 infty: 8.005e-02 bias: -3.201e-11 P time: 282823 first: 3.148e-02 second: 3.636e-02 infty: 8.012e-02 bias: -8.086e-11 P time: 283484 first: 3.134e-02 second: 3.626e-02 infty: 7.989e-02 bias: -2.644e-11 P time: 284146 first: 3.115e-02 second: 3.608e-02 infty: 7.939e-02 bias: -6.061e-11 P time: 284807 first: 3.092e-02 second: 3.582e-02 infty: 7.863e-02 bias: -8.611e-11 P time: 285469 first: 3.065e-02 second: 3.549e-02 infty: 7.764e-02 bias: -4.298e-11 P time: 286130 first: 3.033e-02 second: 3.511e-02 infty: 7.645e-02 bias: -1.059e-10 P time: 286792 first: 2.998e-02 second: 3.469e-02 infty: 7.510e-02 bias: -4.109e-11 P time: 287453 first: 2.962e-02 second: 3.425e-02 infty: 7.362e-02 bias: -6.334e-11 P time: 288115 first: 2.929e-02 second: 3.381e-02 infty: 7.207e-02 bias: -6.537e-11 P time: 288777 first: 2.901e-02 second: 3.340e-02 infty: 7.047e-02 bias: -8.449e-11 P time: 289439 first: 2.888e-02 second: 3.302e-02 infty: 6.881e-02 bias: -5.267e-11 P time: 290101 first: 2.889e-02 second: 3.270e-02 infty: 6.712e-02 bias: -1.282e-10 P time: 290762 first: 2.896e-02 second: 3.244e-02 infty: 6.544e-02 bias: -1.055e-10 P time: 291424 first: 2.907e-02 second: 3.226e-02 infty: 6.379e-02 bias: -1.122e-10 P time: 292086 first: 2.921e-02 second: 3.215e-02 infty: 6.225e-02 bias: -5.899e-11 P time: 292748 first: 2.937e-02 second: 3.211e-02 infty: 6.084e-02 bias: -9.256e-11 P time: 293409 first: 2.955e-02 second: 3.214e-02 infty: 5.959e-02 bias: -1.019e-10 P time: 294071 first: 2.976e-02 second: 3.224e-02 infty: 5.852e-02 bias: -1.509e-10 P time: 294733 first: 2.998e-02 second: 3.239e-02 infty: 5.766e-02 bias: -8.489e-11 P time: 295394 first: 3.021e-02 second: 3.260e-02 infty: 5.786e-02 bias: -6.036e-11 P time: 296056 first: 3.046e-02 second: 3.285e-02 infty: 5.838e-02 bias: -1.228e-10 P time: 296717 first: 3.073e-02 second: 3.315e-02 infty: 5.884e-02 bias: -5.054e-11 P time: 297379 first: 3.101e-02 second: 3.348e-02 infty: 5.922e-02 bias: -1.054e-10 P time: 298041 first: 3.130e-02 second: 3.386e-02 infty: 5.952e-02 bias: -2.630e-11 P time: 298702 first: 3.159e-02 second: 3.426e-02 infty: 5.970e-02 bias: -1.036e-10 P time: 299364 first: 3.189e-02 second: 3.469e-02 infty: 5.976e-02 bias: -6.158e-11 P time: 300026 first: 3.220e-02 second: 3.513e-02 infty: 6.003e-02 bias: -9.226e-11 P time: 300687 first: 3.249e-02 second: 3.558e-02 infty: 6.132e-02 bias: -6.108e-11 P time: 301349 first: 3.277e-02 second: 3.601e-02 infty: 6.270e-02 bias: -1.026e-10 P time: 302011 first: 3.304e-02 second: 3.641e-02 infty: 6.411e-02 bias: 1.404e-11 P time: 302673 first: 3.329e-02 second: 3.677e-02 infty: 6.549e-02 bias: -5.213e-11 P time: 303335 first: 3.348e-02 second: 3.706e-02 infty: 6.675e-02 bias: -6.380e-11 P time: 303998 first: 3.362e-02 second: 3.727e-02 infty: 6.785e-02 bias: -5.926e-11 P time: 304660 first: 3.370e-02 second: 3.739e-02 infty: 6.875e-02 bias: -6.489e-11 P time: 305323 first: 3.370e-02 second: 3.740e-02 infty: 6.934e-02 bias: -6.350e-11 P time: 305985 first: 3.364e-02 second: 3.731e-02 infty: 6.959e-02 bias: -6.518e-11 P time: 306648 first: 3.350e-02 second: 3.711e-02 infty: 6.946e-02 bias: -2.541e-11 P time: 307311 first: 3.330e-02 second: 3.680e-02 infty: 6.896e-02 bias: -1.218e-10 P time: 307974 first: 3.304e-02 second: 3.640e-02 infty: 6.811e-02 bias: -1.064e-10 P time: 308637 first: 3.272e-02 second: 3.592e-02 infty: 6.693e-02 bias: -6.314e-11 P time: 309300 first: 3.236e-02 second: 3.538e-02 infty: 6.546e-02 bias: -1.013e-10 P time: 309962 first: 3.197e-02 second: 3.481e-02 infty: 6.378e-02 bias: -6.444e-11 P time: 310625 first: 3.155e-02 second: 3.421e-02 infty: 6.193e-02 bias: -4.923e-11 P time: 311288 first: 3.114e-02 second: 3.363e-02 infty: 5.999e-02 bias: -9.311e-11 P time: 311950 first: 3.074e-02 second: 3.309e-02 infty: 5.890e-02 bias: -7.157e-11 P time: 312613 first: 3.037e-02 second: 3.261e-02 infty: 6.009e-02 bias: -5.847e-11 P time: 313275 first: 3.004e-02 second: 3.220e-02 infty: 6.139e-02 bias: -9.670e-11 P time: 313937 first: 2.976e-02 second: 3.189e-02 infty: 6.276e-02 bias: -4.907e-11 P time: 314599 first: 2.954e-02 second: 3.170e-02 infty: 6.419e-02 bias: -3.305e-11 P time: 315261 first: 2.939e-02 second: 3.162e-02 infty: 6.565e-02 bias: -4.883e-11 P time: 315923 first: 2.931e-02 second: 3.166e-02 infty: 6.713e-02 bias: -7.924e-11 P time: 316585 first: 2.930e-02 second: 3.182e-02 infty: 6.861e-02 bias: -5.801e-11 P time: 317246 first: 2.935e-02 second: 3.209e-02 infty: 7.007e-02 bias: -9.351e-11 P time: 317908 first: 2.948e-02 second: 3.247e-02 infty: 7.149e-02 bias: -1.259e-10 P time: 318569 first: 2.968e-02 second: 3.293e-02 infty: 7.288e-02 bias: -9.614e-11 P time: 319230 first: 2.995e-02 second: 3.346e-02 infty: 7.421e-02 bias: -5.165e-11 P time: 319892 first: 3.029e-02 second: 3.404e-02 infty: 7.547e-02 bias: -1.335e-10 P time: 320553 first: 3.072e-02 second: 3.464e-02 infty: 7.664e-02 bias: -7.175e-11 P time: 321213 first: 3.125e-02 second: 3.525e-02 infty: 7.772e-02 bias: -1.156e-10 P time: 321874 first: 3.182e-02 second: 3.583e-02 infty: 7.870e-02 bias: -1.196e-10 P time: 322535 first: 3.235e-02 second: 3.636e-02 infty: 7.957e-02 bias: -1.094e-10 P time: 323196 first: 3.281e-02 second: 3.684e-02 infty: 8.033e-02 bias: -6.048e-11 P time: 323856 first: 3.319e-02 second: 3.723e-02 infty: 8.098e-02 bias: -9.389e-11 P time: 324517 first: 3.349e-02 second: 3.753e-02 infty: 8.151e-02 bias: -1.024e-10 P time: 325177 first: 3.371e-02 second: 3.772e-02 infty: 8.193e-02 bias: -5.601e-11 P time: 325838 first: 3.382e-02 second: 3.781e-02 infty: 8.223e-02 bias: -1.050e-10 P time: 326498 first: 3.382e-02 second: 3.780e-02 infty: 8.243e-02 bias: -3.936e-11 P time: 327159 first: 3.373e-02 second: 3.768e-02 infty: 8.252e-02 bias: -6.290e-11 P time: 327819 first: 3.354e-02 second: 3.749e-02 infty: 8.252e-02 bias: -1.431e-10 P time: 328480 first: 3.330e-02 second: 3.724e-02 infty: 8.245e-02 bias: -6.526e-11 P time: 329140 first: 3.304e-02 second: 3.694e-02 infty: 8.233e-02 bias: -6.531e-11 P time: 329801 first: 3.278e-02 second: 3.663e-02 infty: 8.218e-02 bias: -4.873e-11 P time: 330461 first: 3.257e-02 second: 3.632e-02 infty: 8.204e-02 bias: -6.298e-11 P time: 331122 first: 3.243e-02 second: 3.604e-02 infty: 8.194e-02 bias: -8.011e-11 P time: 331782 first: 3.236e-02 second: 3.581e-02 infty: 8.189e-02 bias: -6.296e-11 P time: 332442 first: 3.233e-02 second: 3.564e-02 infty: 8.193e-02 bias: -5.719e-11 P time: 333103 first: 3.237e-02 second: 3.552e-02 infty: 8.209e-02 bias: -4.667e-11 P time: 333763 first: 3.245e-02 second: 3.548e-02 infty: 8.237e-02 bias: -3.522e-11 P time: 334423 first: 3.257e-02 second: 3.549e-02 infty: 8.278e-02 bias: -5.309e-11 P time: 335083 first: 3.273e-02 second: 3.556e-02 infty: 8.333e-02 bias: -8.678e-11 P time: 335743 first: 3.290e-02 second: 3.567e-02 infty: 8.402e-02 bias: -1.210e-10 P time: 336403 first: 3.309e-02 second: 3.581e-02 infty: 8.482e-02 bias: -6.419e-11 P time: 337063 first: 3.326e-02 second: 3.596e-02 infty: 8.571e-02 bias: -5.742e-11 P time: 337723 first: 3.342e-02 second: 3.613e-02 infty: 8.666e-02 bias: -1.745e-10 P time: 338382 first: 3.355e-02 second: 3.629e-02 infty: 8.765e-02 bias: -5.460e-11 P time: 339042 first: 3.364e-02 second: 3.644e-02 infty: 8.863e-02 bias: -2.522e-11 P time: 339702 first: 3.368e-02 second: 3.657e-02 infty: 8.959e-02 bias: -1.922e-11 P time: 340361 first: 3.367e-02 second: 3.669e-02 infty: 9.048e-02 bias: -4.225e-11 P time: 341021 first: 3.362e-02 second: 3.678e-02 infty: 9.130e-02 bias: -6.523e-11 P time: 341680 first: 3.352e-02 second: 3.684e-02 infty: 9.201e-02 bias: -6.927e-11 P time: 342340 first: 3.338e-02 second: 3.688e-02 infty: 9.263e-02 bias: -1.417e-10 P time: 342999 first: 3.322e-02 second: 3.688e-02 infty: 9.314e-02 bias: -6.915e-11 P time: 343659 first: 3.302e-02 second: 3.685e-02 infty: 9.356e-02 bias: -2.255e-11 P time: 344318 first: 3.281e-02 second: 3.679e-02 infty: 9.390e-02 bias: -8.303e-11 P time: 344977 first: 3.259e-02 second: 3.670e-02 infty: 9.419e-02 bias: -7.605e-11 P time: 345637 first: 3.236e-02 second: 3.659e-02 infty: 9.444e-02 bias: -9.286e-11 P time: 346296 first: 3.213e-02 second: 3.646e-02 infty: 9.468e-02 bias: -1.135e-10 P time: 346956 first: 3.192e-02 second: 3.632e-02 infty: 9.494e-02 bias: -4.911e-11 P time: 347615 first: 3.174e-02 second: 3.619e-02 infty: 9.524e-02 bias: -3.176e-11 P time: 348275 first: 3.161e-02 second: 3.607e-02 infty: 9.560e-02 bias: -7.625e-11 P time: 348934 first: 3.160e-02 second: 3.599e-02 infty: 9.605e-02 bias: -1.008e-10 P time: 349594 first: 3.166e-02 second: 3.596e-02 infty: 9.658e-02 bias: -2.120e-11 P time: 350253 first: 3.174e-02 second: 3.598e-02 infty: 9.721e-02 bias: -1.964e-11 P time: 350913 first: 3.184e-02 second: 3.606e-02 infty: 9.794e-02 bias: -4.625e-11 P time: 351572 first: 3.195e-02 second: 3.622e-02 infty: 9.877e-02 bias: 1.054e-11 P time: 352232 first: 3.208e-02 second: 3.644e-02 infty: 9.968e-02 bias: -1.033e-10 P time: 352891 first: 3.224e-02 second: 3.672e-02 infty: 1.007e-01 bias: -3.698e-11 P time: 353551 first: 3.242e-02 second: 3.705e-02 infty: 1.017e-01 bias: -4.510e-12 P time: 354210 first: 3.261e-02 second: 3.743e-02 infty: 1.028e-01 bias: -1.253e-10 P time: 354869 first: 3.281e-02 second: 3.782e-02 infty: 1.039e-01 bias: -5.863e-11 P time: 355528 first: 3.301e-02 second: 3.823e-02 infty: 1.049e-01 bias: -9.115e-11 P time: 356187 first: 3.321e-02 second: 3.863e-02 infty: 1.060e-01 bias: -6.675e-11 P time: 356846 first: 3.341e-02 second: 3.901e-02 infty: 1.070e-01 bias: -6.569e-11 P time: 357505 first: 3.360e-02 second: 3.938e-02 infty: 1.079e-01 bias: -7.181e-11 P time: 358164 first: 3.379e-02 second: 3.972e-02 infty: 1.087e-01 bias: -1.255e-11 P time: 358822 first: 3.397e-02 second: 4.002e-02 infty: 1.095e-01 bias: -6.369e-11 P time: 359481 first: 3.414e-02 second: 4.030e-02 infty: 1.102e-01 bias: -6.804e-11 P time: 360139 first: 3.431e-02 second: 4.055e-02 infty: 1.108e-01 bias: -2.580e-11 P time: 360798 first: 3.450e-02 second: 4.077e-02 infty: 1.114e-01 bias: -6.718e-11 P time: 361456 first: 3.469e-02 second: 4.097e-02 infty: 1.118e-01 bias: -1.151e-10 P time: 362115 first: 3.494e-02 second: 4.114e-02 infty: 1.123e-01 bias: -5.865e-11 P time: 362773 first: 3.523e-02 second: 4.129e-02 infty: 1.127e-01 bias: -1.318e-10 P time: 363431 first: 3.550e-02 second: 4.141e-02 infty: 1.130e-01 bias: -1.338e-10 P time: 364090 first: 3.575e-02 second: 4.149e-02 infty: 1.132e-01 bias: -5.099e-11 P time: 364748 first: 3.595e-02 second: 4.154e-02 infty: 1.134e-01 bias: -8.566e-11 P time: 365406 first: 3.609e-02 second: 4.155e-02 infty: 1.135e-01 bias: -1.433e-10 P time: 366065 first: 3.616e-02 second: 4.150e-02 infty: 1.136e-01 bias: -8.595e-11 P time: 366723 first: 3.616e-02 second: 4.141e-02 infty: 1.136e-01 bias: -3.742e-11 P time: 367382 first: 3.607e-02 second: 4.126e-02 infty: 1.136e-01 bias: -6.710e-11 P time: 368040 first: 3.591e-02 second: 4.107e-02 infty: 1.136e-01 bias: 3.980e-12 P time: 368699 first: 3.568e-02 second: 4.083e-02 infty: 1.135e-01 bias: -8.731e-11 P time: 369357 first: 3.538e-02 second: 4.057e-02 infty: 1.134e-01 bias: -3.563e-11 P time: 370016 first: 3.502e-02 second: 4.028e-02 infty: 1.133e-01 bias: -9.506e-11 P time: 370675 first: 3.463e-02 second: 3.999e-02 infty: 1.133e-01 bias: -2.481e-11 P time: 371333 first: 3.422e-02 second: 3.971e-02 infty: 1.134e-01 bias: -8.079e-11 P time: 371992 first: 3.387e-02 second: 3.947e-02 infty: 1.135e-01 bias: -7.323e-11 P time: 372650 first: 3.358e-02 second: 3.927e-02 infty: 1.138e-01 bias: -1.088e-10 P time: 373309 first: 3.331e-02 second: 3.912e-02 infty: 1.141e-01 bias: -4.244e-11 P time: 373968 first: 3.308e-02 second: 3.905e-02 infty: 1.146e-01 bias: -8.536e-11 P time: 374626 first: 3.289e-02 second: 3.905e-02 infty: 1.152e-01 bias: -3.145e-11 P time: 375285 first: 3.275e-02 second: 3.912e-02 infty: 1.160e-01 bias: -4.838e-11 P time: 375943 first: 3.269e-02 second: 3.928e-02 infty: 1.168e-01 bias: -7.732e-11 P time: 376602 first: 3.270e-02 second: 3.950e-02 infty: 1.177e-01 bias: -5.767e-11 P time: 377260 first: 3.279e-02 second: 3.979e-02 infty: 1.188e-01 bias: -7.062e-11 P time: 377918 first: 3.294e-02 second: 4.013e-02 infty: 1.198e-01 bias: -1.119e-10 P time: 378577 first: 3.317e-02 second: 4.051e-02 infty: 1.209e-01 bias: -4.904e-11 P time: 379235 first: 3.346e-02 second: 4.093e-02 infty: 1.219e-01 bias: -2.050e-11 P time: 379893 first: 3.381e-02 second: 4.137e-02 infty: 1.229e-01 bias: -7.291e-11 P time: 380551 first: 3.420e-02 second: 4.182e-02 infty: 1.238e-01 bias: -1.301e-10 P time: 381210 first: 3.467e-02 second: 4.226e-02 infty: 1.246e-01 bias: -4.499e-11 P time: 381868 first: 3.522e-02 second: 4.268e-02 infty: 1.253e-01 bias: -1.198e-10 P time: 382526 first: 3.576e-02 second: 4.307e-02 infty: 1.258e-01 bias: -7.096e-11 P time: 383184 first: 3.631e-02 second: 4.342e-02 infty: 1.262e-01 bias: -1.023e-10 P time: 383842 first: 3.680e-02 second: 4.372e-02 infty: 1.264e-01 bias: -3.591e-11 P time: 384501 first: 3.722e-02 second: 4.395e-02 infty: 1.265e-01 bias: -6.935e-11 P time: 385159 first: 3.754e-02 second: 4.411e-02 infty: 1.265e-01 bias: -8.549e-11 P time: 385817 first: 3.775e-02 second: 4.419e-02 infty: 1.264e-01 bias: -9.368e-11 P time: 386476 first: 3.786e-02 second: 4.420e-02 infty: 1.262e-01 bias: -1.033e-10 P time: 387134 first: 3.786e-02 second: 4.415e-02 infty: 1.260e-01 bias: -7.266e-11 P time: 387793 first: 3.777e-02 second: 4.403e-02 infty: 1.257e-01 bias: -6.672e-11 P time: 388451 first: 3.759e-02 second: 4.386e-02 infty: 1.254e-01 bias: -3.472e-11 P time: 389110 first: 3.735e-02 second: 4.367e-02 infty: 1.252e-01 bias: -5.247e-11 P time: 389769 first: 3.707e-02 second: 4.346e-02 infty: 1.251e-01 bias: -4.204e-11 P time: 390427 first: 3.678e-02 second: 4.326e-02 infty: 1.250e-01 bias: -5.013e-11 P time: 391086 first: 3.650e-02 second: 4.309e-02 infty: 1.249e-01 bias: -5.163e-11 P time: 391745 first: 3.632e-02 second: 4.297e-02 infty: 1.250e-01 bias: -1.150e-10 P time: 392404 first: 3.624e-02 second: 4.290e-02 infty: 1.252e-01 bias: -6.142e-11 P time: 393063 first: 3.624e-02 second: 4.290e-02 infty: 1.254e-01 bias: -7.863e-11 P time: 393722 first: 3.631e-02 second: 4.297e-02 infty: 1.257e-01 bias: -1.297e-10 P time: 394381 first: 3.645e-02 second: 4.310e-02 infty: 1.261e-01 bias: -1.085e-10 P time: 395040 first: 3.664e-02 second: 4.328e-02 infty: 1.266e-01 bias: -9.538e-11 P time: 395700 first: 3.687e-02 second: 4.349e-02 infty: 1.271e-01 bias: -8.081e-11 P time: 396359 first: 3.710e-02 second: 4.373e-02 infty: 1.276e-01 bias: -1.069e-10 P time: 397018 first: 3.731e-02 second: 4.396e-02 infty: 1.281e-01 bias: -6.128e-11 P time: 397677 first: 3.747e-02 second: 4.418e-02 infty: 1.286e-01 bias: -7.513e-11 P time: 398336 first: 3.758e-02 second: 4.437e-02 infty: 1.291e-01 bias: -6.608e-11 P time: 398996 first: 3.762e-02 second: 4.451e-02 infty: 1.296e-01 bias: -4.263e-11 P time: 399655 first: 3.759e-02 second: 4.461e-02 infty: 1.301e-01 bias: -9.784e-11 P time: 400314 first: 3.750e-02 second: 4.465e-02 infty: 1.305e-01 bias: -6.374e-11 P time: 400974 first: 3.736e-02 second: 4.465e-02 infty: 1.309e-01 bias: -6.704e-11 P time: 401633 first: 3.719e-02 second: 4.461e-02 infty: 1.313e-01 bias: -5.526e-11 P time: 402293 first: 3.702e-02 second: 4.453e-02 infty: 1.316e-01 bias: -1.015e-10 P time: 402952 first: 3.697e-02 second: 4.443e-02 infty: 1.318e-01 bias: -7.851e-11 P time: 403612 first: 3.700e-02 second: 4.431e-02 infty: 1.319e-01 bias: -6.314e-11 P time: 404272 first: 3.704e-02 second: 4.420e-02 infty: 1.319e-01 bias: -5.467e-11 P time: 404931 first: 3.709e-02 second: 4.410e-02 infty: 1.319e-01 bias: -1.025e-10 P time: 405591 first: 3.714e-02 second: 4.402e-02 infty: 1.317e-01 bias: -6.401e-11 P time: 406251 first: 3.720e-02 second: 4.397e-02 infty: 1.314e-01 bias: -4.416e-11 P time: 406911 first: 3.727e-02 second: 4.396e-02 infty: 1.311e-01 bias: -7.316e-11 P time: 407572 first: 3.737e-02 second: 4.400e-02 infty: 1.306e-01 bias: -7.139e-11 P time: 408232 first: 3.751e-02 second: 4.409e-02 infty: 1.302e-01 bias: -8.636e-11 P time: 408892 first: 3.771e-02 second: 4.424e-02 infty: 1.296e-01 bias: -9.205e-11 P time: 409553 first: 3.798e-02 second: 4.445e-02 infty: 1.291e-01 bias: -7.153e-11 P time: 410214 first: 3.833e-02 second: 4.473e-02 infty: 1.286e-01 bias: -1.975e-11 P time: 410874 first: 3.877e-02 second: 4.506e-02 infty: 1.282e-01 bias: -1.399e-10 P time: 411535 first: 3.926e-02 second: 4.545e-02 infty: 1.278e-01 bias: -7.210e-11 P time: 412196 first: 3.978e-02 second: 4.588e-02 infty: 1.276e-01 bias: -2.333e-11 P time: 412857 first: 4.031e-02 second: 4.635e-02 infty: 1.275e-01 bias: -8.766e-11 P time: 413518 first: 4.083e-02 second: 4.685e-02 infty: 1.275e-01 bias: -1.045e-10 P time: 414180 first: 4.133e-02 second: 4.735e-02 infty: 1.276e-01 bias: -1.188e-10 P time: 414841 first: 4.179e-02 second: 4.785e-02 infty: 1.280e-01 bias: -9.837e-11 P time: 415502 first: 4.220e-02 second: 4.832e-02 infty: 1.284e-01 bias: -3.706e-11 P time: 416163 first: 4.256e-02 second: 4.875e-02 infty: 1.290e-01 bias: -9.816e-11 P time: 416825 first: 4.285e-02 second: 4.912e-02 infty: 1.296e-01 bias: -8.553e-11 P time: 417486 first: 4.306e-02 second: 4.943e-02 infty: 1.304e-01 bias: -4.870e-11 P time: 418147 first: 4.319e-02 second: 4.967e-02 infty: 1.311e-01 bias: -5.707e-11 P time: 418809 first: 4.324e-02 second: 4.982e-02 infty: 1.319e-01 bias: -6.646e-11 P time: 419470 first: 4.321e-02 second: 4.989e-02 infty: 1.327e-01 bias: -1.163e-10 P time: 420132 first: 4.310e-02 second: 4.988e-02 infty: 1.334e-01 bias: -9.401e-11 P time: 420793 first: 4.294e-02 second: 4.979e-02 infty: 1.341e-01 bias: -5.544e-11 P time: 421455 first: 4.273e-02 second: 4.963e-02 infty: 1.346e-01 bias: -9.273e-11 P time: 422117 first: 4.248e-02 second: 4.941e-02 infty: 1.349e-01 bias: -9.691e-11 P time: 422778 first: 4.219e-02 second: 4.913e-02 infty: 1.350e-01 bias: -9.648e-11 P time: 423440 first: 4.188e-02 second: 4.880e-02 infty: 1.349e-01 bias: -9.803e-11 P time: 424102 first: 4.154e-02 second: 4.843e-02 infty: 1.347e-01 bias: -2.993e-11 P time: 424764 first: 4.118e-02 second: 4.802e-02 infty: 1.342e-01 bias: -4.982e-11 P time: 425427 first: 4.081e-02 second: 4.760e-02 infty: 1.336e-01 bias: -4.233e-11 P time: 426089 first: 4.043e-02 second: 4.716e-02 infty: 1.329e-01 bias: -4.507e-11 P time: 426752 first: 4.004e-02 second: 4.671e-02 infty: 1.321e-01 bias: -6.012e-11 P time: 427415 first: 3.965e-02 second: 4.626e-02 infty: 1.312e-01 bias: -8.959e-11 P time: 428078 first: 3.927e-02 second: 4.582e-02 infty: 1.302e-01 bias: -6.287e-11 P time: 428741 first: 3.891e-02 second: 4.540e-02 infty: 1.293e-01 bias: -9.567e-11 P time: 429404 first: 3.857e-02 second: 4.502e-02 infty: 1.284e-01 bias: -1.102e-10 P time: 430068 first: 3.827e-02 second: 4.468e-02 infty: 1.275e-01 bias: -6.309e-11 P time: 430732 first: 3.802e-02 second: 4.439e-02 infty: 1.267e-01 bias: -1.184e-10 P time: 431396 first: 3.786e-02 second: 4.418e-02 infty: 1.259e-01 bias: -3.923e-11 P time: 432060 first: 3.780e-02 second: 4.405e-02 infty: 1.252e-01 bias: -7.964e-11 P time: 432724 first: 3.781e-02 second: 4.401e-02 infty: 1.245e-01 bias: -1.109e-10 P time: 433389 first: 3.789e-02 second: 4.407e-02 infty: 1.239e-01 bias: -7.510e-11 P time: 434054 first: 3.804e-02 second: 4.423e-02 infty: 1.234e-01 bias: -5.102e-11 P time: 434719 first: 3.825e-02 second: 4.448e-02 infty: 1.230e-01 bias: -6.903e-11 P time: 435384 first: 3.852e-02 second: 4.483e-02 infty: 1.227e-01 bias: -4.498e-11 P time: 436049 first: 3.885e-02 second: 4.525e-02 infty: 1.224e-01 bias: -4.022e-11 P time: 436714 first: 3.922e-02 second: 4.573e-02 infty: 1.222e-01 bias: -6.787e-11 P time: 437380 first: 3.962e-02 second: 4.626e-02 infty: 1.221e-01 bias: -8.747e-11 P time: 438046 first: 4.005e-02 second: 4.681e-02 infty: 1.221e-01 bias: -6.300e-11 P time: 438711 first: 4.052e-02 second: 4.738e-02 infty: 1.221e-01 bias: -6.581e-11 P time: 439377 first: 4.101e-02 second: 4.794e-02 infty: 1.221e-01 bias: -1.354e-10 P time: 440043 first: 4.153e-02 second: 4.848e-02 infty: 1.222e-01 bias: -4.288e-11 P time: 440709 first: 4.208e-02 second: 4.899e-02 infty: 1.223e-01 bias: -9.518e-11 P time: 441375 first: 4.270e-02 second: 4.945e-02 infty: 1.225e-01 bias: -6.699e-11 P time: 442042 first: 4.334e-02 second: 4.987e-02 infty: 1.226e-01 bias: -7.423e-11 P time: 442708 first: 4.393e-02 second: 5.022e-02 infty: 1.226e-01 bias: -7.169e-11 P time: 443375 first: 4.445e-02 second: 5.051e-02 infty: 1.227e-01 bias: -7.062e-11 P time: 444041 first: 4.489e-02 second: 5.074e-02 infty: 1.226e-01 bias: -1.086e-10 P time: 444708 first: 4.523e-02 second: 5.090e-02 infty: 1.226e-01 bias: -7.040e-11 P time: 445375 first: 4.548e-02 second: 5.099e-02 infty: 1.224e-01 bias: -2.911e-11 P time: 446042 first: 4.563e-02 second: 5.102e-02 infty: 1.222e-01 bias: -1.050e-10 P time: 446709 first: 4.568e-02 second: 5.098e-02 infty: 1.219e-01 bias: -8.931e-11 P time: 447376 first: 4.563e-02 second: 5.089e-02 infty: 1.215e-01 bias: -5.136e-11 P time: 448044 first: 4.551e-02 second: 5.075e-02 infty: 1.211e-01 bias: -8.790e-11 P time: 448712 first: 4.532e-02 second: 5.057e-02 infty: 1.206e-01 bias: -1.074e-10 P time: 449379 first: 4.507e-02 second: 5.037e-02 infty: 1.200e-01 bias: -5.831e-11 P time: 450047 first: 4.479e-02 second: 5.016e-02 infty: 1.194e-01 bias: -8.737e-11 P time: 450716 first: 4.449e-02 second: 4.994e-02 infty: 1.188e-01 bias: -1.077e-10 P time: 451384 first: 4.418e-02 second: 4.974e-02 infty: 1.182e-01 bias: -8.313e-11 P time: 452052 first: 4.389e-02 second: 4.958e-02 infty: 1.176e-01 bias: -3.044e-11 P time: 452721 first: 4.363e-02 second: 4.945e-02 infty: 1.171e-01 bias: 1.273e-11 P time: 453390 first: 4.340e-02 second: 4.937e-02 infty: 1.166e-01 bias: -8.586e-11 P time: 454059 first: 4.321e-02 second: 4.934e-02 infty: 1.163e-01 bias: -6.280e-11 P time: 454728 first: 4.308e-02 second: 4.936e-02 infty: 1.160e-01 bias: -8.304e-11 P time: 455398 first: 4.302e-02 second: 4.941e-02 infty: 1.158e-01 bias: -1.145e-11 P time: 456067 first: 4.299e-02 second: 4.949e-02 infty: 1.157e-01 bias: -9.665e-11 P time: 456737 first: 4.298e-02 second: 4.959e-02 infty: 1.157e-01 bias: -5.061e-11 P time: 457406 first: 4.296e-02 second: 4.968e-02 infty: 1.157e-01 bias: -1.293e-10 P time: 458076 first: 4.292e-02 second: 4.976e-02 infty: 1.157e-01 bias: -5.831e-11 P time: 458746 first: 4.285e-02 second: 4.979e-02 infty: 1.158e-01 bias: -3.624e-11 P time: 459417 first: 4.276e-02 second: 4.978e-02 infty: 1.157e-01 bias: -4.791e-11 P time: 460087 first: 4.263e-02 second: 4.971e-02 infty: 1.156e-01 bias: -2.901e-11 P time: 460758 first: 4.247e-02 second: 4.958e-02 infty: 1.155e-01 bias: -8.047e-12 P time: 461428 first: 4.232e-02 second: 4.938e-02 infty: 1.152e-01 bias: -7.629e-11 P time: 462099 first: 4.217e-02 second: 4.912e-02 infty: 1.147e-01 bias: -4.567e-11 P time: 462770 first: 4.200e-02 second: 4.882e-02 infty: 1.141e-01 bias: -2.002e-10 P time: 463442 first: 4.180e-02 second: 4.847e-02 infty: 1.134e-01 bias: -8.099e-11 P time: 464113 first: 4.159e-02 second: 4.811e-02 infty: 1.125e-01 bias: -5.019e-11 P time: 464785 first: 4.136e-02 second: 4.775e-02 infty: 1.114e-01 bias: -1.181e-10 P time: 465457 first: 4.114e-02 second: 4.740e-02 infty: 1.102e-01 bias: -3.930e-11 P time: 466129 first: 4.094e-02 second: 4.710e-02 infty: 1.089e-01 bias: -8.171e-11 P time: 466801 first: 4.080e-02 second: 4.686e-02 infty: 1.075e-01 bias: -9.809e-11 P time: 467474 first: 4.074e-02 second: 4.669e-02 infty: 1.060e-01 bias: -4.784e-11 P time: 468147 first: 4.077e-02 second: 4.662e-02 infty: 1.045e-01 bias: -1.947e-11 P time: 468820 first: 4.090e-02 second: 4.665e-02 infty: 1.030e-01 bias: -6.878e-11 P time: 469493 first: 4.112e-02 second: 4.678e-02 infty: 1.015e-01 bias: -6.416e-11 P time: 470167 first: 4.141e-02 second: 4.702e-02 infty: 1.000e-01 bias: -9.778e-11 P time: 470841 first: 4.176e-02 second: 4.736e-02 infty: 9.866e-02 bias: -8.353e-11 P time: 471515 first: 4.215e-02 second: 4.780e-02 infty: 9.740e-02 bias: -5.628e-11 P time: 472189 first: 4.258e-02 second: 4.832e-02 infty: 9.626e-02 bias: -1.055e-10 P time: 472864 first: 4.303e-02 second: 4.890e-02 infty: 9.527e-02 bias: -4.413e-11 P time: 473539 first: 4.350e-02 second: 4.953e-02 infty: 9.443e-02 bias: -1.390e-10 P time: 474214 first: 4.404e-02 second: 5.019e-02 infty: 9.376e-02 bias: -8.567e-11 P time: 474889 first: 4.457e-02 second: 5.085e-02 infty: 9.325e-02 bias: -9.923e-11 P time: 475564 first: 4.506e-02 second: 5.149e-02 infty: 9.291e-02 bias: -4.533e-11 P time: 476240 first: 4.550e-02 second: 5.210e-02 infty: 9.272e-02 bias: -4.432e-11 P time: 476915 first: 4.586e-02 second: 5.264e-02 infty: 9.268e-02 bias: -1.065e-10 P time: 477591 first: 4.613e-02 second: 5.310e-02 infty: 9.277e-02 bias: -1.040e-10 P time: 478267 first: 4.631e-02 second: 5.346e-02 infty: 9.298e-02 bias: -1.799e-11 P time: 478944 first: 4.640e-02 second: 5.371e-02 infty: 9.327e-02 bias: -1.580e-10 P time: 479620 first: 4.639e-02 second: 5.385e-02 infty: 9.362e-02 bias: -3.850e-11 P time: 480296 first: 4.629e-02 second: 5.386e-02 infty: 9.400e-02 bias: -7.461e-11 P time: 480973 first: 4.610e-02 second: 5.375e-02 infty: 9.436e-02 bias: -9.459e-11 P time: 481650 first: 4.583e-02 second: 5.352e-02 infty: 9.469e-02 bias: -1.142e-10 P time: 482327 first: 4.549e-02 second: 5.318e-02 infty: 9.493e-02 bias: -6.171e-11 P time: 483004 first: 4.510e-02 second: 5.273e-02 infty: 9.505e-02 bias: -1.284e-10 P time: 483681 first: 4.470e-02 second: 5.220e-02 infty: 9.504e-02 bias: -7.249e-11 P time: 484358 first: 4.428e-02 second: 5.160e-02 infty: 9.486e-02 bias: -9.066e-11 P time: 485036 first: 4.382e-02 second: 5.095e-02 infty: 9.449e-02 bias: -6.938e-11 P time: 485713 first: 4.332e-02 second: 5.027e-02 infty: 9.392e-02 bias: -2.154e-11 P time: 486391 first: 4.279e-02 second: 4.957e-02 infty: 9.315e-02 bias: -8.468e-11 P time: 487070 first: 4.225e-02 second: 4.888e-02 infty: 9.220e-02 bias: -1.516e-10 P time: 487748 first: 4.170e-02 second: 4.821e-02 infty: 9.106e-02 bias: -3.163e-11 P time: 488427 first: 4.116e-02 second: 4.758e-02 infty: 8.976e-02 bias: -4.680e-11 P time: 489106 first: 4.064e-02 second: 4.702e-02 infty: 8.832e-02 bias: -3.541e-11 P time: 489785 first: 4.018e-02 second: 4.653e-02 infty: 8.678e-02 bias: -7.506e-11 P time: 490465 first: 3.978e-02 second: 4.615e-02 infty: 8.515e-02 bias: -9.220e-11 P time: 491145 first: 3.947e-02 second: 4.587e-02 infty: 8.349e-02 bias: -9.437e-11 P time: 491825 first: 3.928e-02 second: 4.572e-02 infty: 8.182e-02 bias: -6.088e-11 P time: 492505 first: 3.920e-02 second: 4.571e-02 infty: 8.019e-02 bias: -2.559e-11 P time: 493186 first: 3.926e-02 second: 4.584e-02 infty: 7.861e-02 bias: -1.006e-10 P time: 493867 first: 3.943e-02 second: 4.611e-02 infty: 7.724e-02 bias: -8.790e-11 P time: 494549 first: 3.973e-02 second: 4.652e-02 infty: 7.910e-02 bias: -7.042e-11 P time: 495230 first: 4.013e-02 second: 4.706e-02 infty: 8.109e-02 bias: -4.206e-11 P time: 495912 first: 4.063e-02 second: 4.770e-02 infty: 8.316e-02 bias: -6.640e-12 P time: 496594 first: 4.120e-02 second: 4.844e-02 infty: 8.522e-02 bias: -6.626e-11 P time: 497276 first: 4.183e-02 second: 4.923e-02 infty: 8.721e-02 bias: -1.739e-11 P time: 497959 first: 4.251e-02 second: 5.007e-02 infty: 8.907e-02 bias: -5.305e-11 P time: 498641 first: 4.323e-02 second: 5.091e-02 infty: 9.073e-02 bias: -6.606e-11 P time: 499324 first: 4.397e-02 second: 5.174e-02 infty: 9.216e-02 bias: -8.398e-11 P time: 500007 first: 4.471e-02 second: 5.252e-02 infty: 9.330e-02 bias: -5.596e-11 P time: 500691 first: 4.545e-02 second: 5.324e-02 infty: 9.415e-02 bias: -6.499e-11 P time: 501374 first: 4.616e-02 second: 5.387e-02 infty: 9.470e-02 bias: -8.389e-11 P time: 502058 first: 4.683e-02 second: 5.440e-02 infty: 9.495e-02 bias: -6.552e-11 P time: 502741 first: 4.743e-02 second: 5.483e-02 infty: 9.492e-02 bias: -9.370e-11 P time: 503425 first: 4.792e-02 second: 5.513e-02 infty: 9.464e-02 bias: -1.122e-10 P time: 504109 first: 4.828e-02 second: 5.531e-02 infty: 9.415e-02 bias: -8.560e-11 P time: 504793 first: 4.851e-02 second: 5.538e-02 infty: 9.350e-02 bias: -2.954e-11 P time: 505478 first: 4.861e-02 second: 5.533e-02 infty: 9.273e-02 bias: -1.215e-10 P time: 506162 first: 4.858e-02 second: 5.518e-02 infty: 9.192e-02 bias: -1.096e-10 P time: 506847 first: 4.844e-02 second: 5.493e-02 infty: 9.111e-02 bias: -5.304e-11 P time: 507532 first: 4.820e-02 second: 5.460e-02 infty: 9.031e-02 bias: -9.389e-11 P time: 508217 first: 4.788e-02 second: 5.422e-02 infty: 8.959e-02 bias: -7.671e-11 P time: 508903 first: 4.749e-02 second: 5.378e-02 infty: 8.898e-02 bias: -9.980e-11 P time: 509589 first: 4.706e-02 second: 5.332e-02 infty: 8.851e-02 bias: 9.530e-12 P time: 510275 first: 4.662e-02 second: 5.285e-02 infty: 8.819e-02 bias: -1.081e-10 P time: 510961 first: 4.617e-02 second: 5.239e-02 infty: 8.804e-02 bias: -7.618e-11 P time: 511647 first: 4.574e-02 second: 5.196e-02 infty: 8.807e-02 bias: -2.949e-11 P time: 512334 first: 4.534e-02 second: 5.157e-02 infty: 8.825e-02 bias: -1.064e-10 P time: 513020 first: 4.501e-02 second: 5.124e-02 infty: 8.858e-02 bias: -9.235e-11 P time: 513707 first: 4.477e-02 second: 5.097e-02 infty: 8.902e-02 bias: -7.016e-11 P time: 514394 first: 4.457e-02 second: 5.077e-02 infty: 8.957e-02 bias: -6.242e-12 P time: 515081 first: 4.441e-02 second: 5.065e-02 infty: 9.017e-02 bias: -1.016e-10 P time: 515768 first: 4.426e-02 second: 5.058e-02 infty: 9.081e-02 bias: -1.636e-10 P time: 516455 first: 4.413e-02 second: 5.058e-02 infty: 9.154e-02 bias: -6.938e-11 P time: 517143 first: 4.400e-02 second: 5.061e-02 infty: 9.229e-02 bias: -3.001e-11 P time: 517830 first: 4.388e-02 second: 5.067e-02 infty: 9.300e-02 bias: -8.373e-11 P time: 518518 first: 4.375e-02 second: 5.074e-02 infty: 9.363e-02 bias: -1.123e-10 P time: 519205 first: 4.361e-02 second: 5.080e-02 infty: 9.417e-02 bias: -1.167e-10 P time: 519893 first: 4.345e-02 second: 5.084e-02 infty: 9.459e-02 bias: -4.413e-11 P time: 520580 first: 4.328e-02 second: 5.085e-02 infty: 9.490e-02 bias: -2.925e-11 P time: 521268 first: 4.311e-02 second: 5.082e-02 infty: 9.507e-02 bias: -1.075e-10 P time: 521956 first: 4.296e-02 second: 5.075e-02 infty: 9.514e-02 bias: -2.238e-11 P time: 522644 first: 4.289e-02 second: 5.064e-02 infty: 9.515e-02 bias: 2.417e-11 P time: 523332 first: 4.285e-02 second: 5.051e-02 infty: 9.501e-02 bias: -1.707e-10 P time: 524020 first: 4.285e-02 second: 5.035e-02 infty: 9.475e-02 bias: -5.292e-11 P time: 524708 first: 4.288e-02 second: 5.020e-02 infty: 9.439e-02 bias: -2.374e-11 P time: 525396 first: 4.295e-02 second: 5.007e-02 infty: 9.395e-02 bias: -7.672e-11 P time: 526084 first: 4.308e-02 second: 4.997e-02 infty: 9.347e-02 bias: -7.538e-11 P time: 526772 first: 4.327e-02 second: 4.994e-02 infty: 9.297e-02 bias: -6.156e-11 P time: 527461 first: 4.354e-02 second: 4.998e-02 infty: 9.248e-02 bias: -3.161e-11 P time: 528149 first: 4.389e-02 second: 5.011e-02 infty: 9.205e-02 bias: -7.913e-11 P time: 528838 first: 4.433e-02 second: 5.034e-02 infty: 9.171e-02 bias: -7.588e-11 P time: 529527 first: 4.487e-02 second: 5.068e-02 infty: 9.165e-02 bias: -9.914e-11 P time: 530215 first: 4.548e-02 second: 5.112e-02 infty: 9.171e-02 bias: -9.789e-11 P time: 530904 first: 4.616e-02 second: 5.166e-02 infty: 9.193e-02 bias: -4.698e-12 P time: 531593 first: 4.689e-02 second: 5.228e-02 infty: 9.229e-02 bias: -1.049e-11 P time: 532282 first: 4.765e-02 second: 5.298e-02 infty: 9.280e-02 bias: -6.694e-11 P time: 532971 first: 4.842e-02 second: 5.372e-02 infty: 9.346e-02 bias: -4.213e-11 P time: 533660 first: 4.918e-02 second: 5.450e-02 infty: 9.424e-02 bias: -5.871e-11 P time: 534349 first: 4.993e-02 second: 5.529e-02 infty: 9.514e-02 bias: -2.929e-11 P time: 535038 first: 5.063e-02 second: 5.607e-02 infty: 9.611e-02 bias: -1.129e-10 P time: 535727 first: 5.128e-02 second: 5.681e-02 infty: 9.713e-02 bias: -1.008e-11 P time: 536415 first: 5.187e-02 second: 5.750e-02 infty: 9.815e-02 bias: -9.652e-11 P time: 537104 first: 5.239e-02 second: 5.812e-02 infty: 9.914e-02 bias: -6.822e-11 P time: 537793 first: 5.280e-02 second: 5.865e-02 infty: 1.000e-01 bias: -8.693e-11 P time: 538482 first: 5.310e-02 second: 5.908e-02 infty: 1.008e-01 bias: -8.339e-11 P time: 539170 first: 5.328e-02 second: 5.938e-02 infty: 1.014e-01 bias: 9.870e-12 P time: 539859 first: 5.335e-02 second: 5.956e-02 infty: 1.019e-01 bias: -5.073e-11 P time: 540547 first: 5.331e-02 second: 5.960e-02 infty: 1.021e-01 bias: -4.859e-11 P time: 541236 first: 5.316e-02 second: 5.950e-02 infty: 1.020e-01 bias: -1.127e-10 P time: 541924 first: 5.292e-02 second: 5.925e-02 infty: 1.017e-01 bias: -4.909e-11 P time: 542612 first: 5.257e-02 second: 5.887e-02 infty: 1.011e-01 bias: -1.229e-11 P time: 543300 first: 5.212e-02 second: 5.837e-02 infty: 1.003e-01 bias: -3.936e-12 P time: 543988 first: 5.160e-02 second: 5.774e-02 infty: 9.934e-02 bias: -8.206e-11 P time: 544676 first: 5.099e-02 second: 5.701e-02 infty: 9.818e-02 bias: -1.914e-11 P time: 545364 first: 5.034e-02 second: 5.620e-02 infty: 9.686e-02 bias: -9.423e-11 P time: 546052 first: 4.964e-02 second: 5.534e-02 infty: 9.545e-02 bias: -7.078e-11 P time: 546740 first: 4.892e-02 second: 5.444e-02 infty: 9.400e-02 bias: -9.954e-11 P time: 547427 first: 4.820e-02 second: 5.354e-02 infty: 9.258e-02 bias: -7.767e-11 P time: 548115 first: 4.750e-02 second: 5.267e-02 infty: 9.123e-02 bias: -1.205e-10 P time: 548803 first: 4.685e-02 second: 5.185e-02 infty: 9.007e-02 bias: -8.061e-11 P time: 549490 first: 4.625e-02 second: 5.112e-02 infty: 8.908e-02 bias: -3.509e-11 P time: 550178 first: 4.574e-02 second: 5.050e-02 infty: 8.829e-02 bias: 2.720e-11 P time: 550866 first: 4.531e-02 second: 5.002e-02 infty: 8.773e-02 bias: -2.338e-11 P time: 551553 first: 4.499e-02 second: 4.969e-02 infty: 8.742e-02 bias: -4.686e-12 P time: 552241 first: 4.479e-02 second: 4.953e-02 infty: 8.743e-02 bias: -1.112e-10 P time: 552928 first: 4.471e-02 second: 4.954e-02 infty: 8.773e-02 bias: -1.126e-10 P time: 553616 first: 4.475e-02 second: 4.973e-02 infty: 8.826e-02 bias: -9.495e-11 P time: 554303 first: 4.492e-02 second: 5.009e-02 infty: 8.901e-02 bias: -9.996e-11 P time: 554990 first: 4.521e-02 second: 5.060e-02 infty: 8.993e-02 bias: -5.093e-11 P time: 555677 first: 4.562e-02 second: 5.126e-02 infty: 9.097e-02 bias: -6.699e-12 P time: 556364 first: 4.615e-02 second: 5.204e-02 infty: 9.209e-02 bias: -1.071e-10 P time: 557051 first: 4.680e-02 second: 5.291e-02 infty: 9.323e-02 bias: -9.080e-11 P time: 557737 first: 4.754e-02 second: 5.385e-02 infty: 9.434e-02 bias: -1.221e-10 P time: 558424 first: 4.835e-02 second: 5.484e-02 infty: 9.538e-02 bias: -1.089e-10 P time: 559110 first: 4.923e-02 second: 5.584e-02 infty: 9.630e-02 bias: -1.399e-10 P time: 559796 first: 5.016e-02 second: 5.683e-02 infty: 9.708e-02 bias: -4.581e-11 P time: 560482 first: 5.112e-02 second: 5.778e-02 infty: 9.767e-02 bias: -6.085e-11 P time: 561168 first: 5.207e-02 second: 5.867e-02 infty: 9.807e-02 bias: -1.111e-10 P time: 561854 first: 5.298e-02 second: 5.948e-02 infty: 9.825e-02 bias: -1.154e-10 P time: 562539 first: 5.382e-02 second: 6.018e-02 infty: 9.822e-02 bias: -1.962e-11 P time: 563224 first: 5.457e-02 second: 6.078e-02 infty: 9.800e-02 bias: -4.009e-11 P time: 563909 first: 5.520e-02 second: 6.124e-02 infty: 9.762e-02 bias: -6.916e-11 P time: 564594 first: 5.571e-02 second: 6.158e-02 infty: 9.706e-02 bias: -6.837e-11 P time: 565279 first: 5.608e-02 second: 6.179e-02 infty: 9.634e-02 bias: -1.047e-10 P time: 565963 first: 5.632e-02 second: 6.186e-02 infty: 9.548e-02 bias: -1.044e-10 P time: 566648 first: 5.642e-02 second: 6.181e-02 infty: 9.449e-02 bias: -1.651e-10 P time: 567332 first: 5.639e-02 second: 6.165e-02 infty: 9.342e-02 bias: -1.086e-10 P time: 568016 first: 5.624e-02 second: 6.138e-02 infty: 9.228e-02 bias: -6.269e-11 P time: 568700 first: 5.599e-02 second: 6.103e-02 infty: 9.110e-02 bias: -1.435e-10 P time: 569383 first: 5.566e-02 second: 6.062e-02 infty: 8.992e-02 bias: -1.307e-10 P time: 570067 first: 5.524e-02 second: 6.015e-02 infty: 8.875e-02 bias: -9.314e-11 P time: 570751 first: 5.477e-02 second: 5.965e-02 infty: 8.764e-02 bias: -1.014e-10 P time: 571434 first: 5.426e-02 second: 5.914e-02 infty: 8.661e-02 bias: -9.593e-11 P time: 572117 first: 5.373e-02 second: 5.864e-02 infty: 8.569e-02 bias: -9.921e-11 P time: 572800 first: 5.320e-02 second: 5.817e-02 infty: 8.490e-02 bias: -4.356e-11 P time: 573483 first: 5.267e-02 second: 5.773e-02 infty: 8.425e-02 bias: -9.696e-11 P time: 574165 first: 5.217e-02 second: 5.735e-02 infty: 8.376e-02 bias: -4.803e-11 P time: 574848 first: 5.172e-02 second: 5.702e-02 infty: 8.399e-02 bias: -9.024e-11 P time: 575530 first: 5.131e-02 second: 5.675e-02 infty: 8.458e-02 bias: -1.522e-10 P time: 576212 first: 5.094e-02 second: 5.655e-02 infty: 8.521e-02 bias: -1.146e-10 P time: 576894 first: 5.062e-02 second: 5.642e-02 infty: 8.591e-02 bias: -1.088e-10 P time: 577575 first: 5.035e-02 second: 5.633e-02 infty: 8.664e-02 bias: -3.174e-11 P time: 578257 first: 5.015e-02 second: 5.630e-02 infty: 8.736e-02 bias: -9.135e-11 P time: 578938 first: 5.001e-02 second: 5.631e-02 infty: 8.805e-02 bias: -6.624e-11 P time: 579619 first: 4.992e-02 second: 5.634e-02 infty: 8.868e-02 bias: -3.703e-11 P time: 580300 first: 4.988e-02 second: 5.640e-02 infty: 8.923e-02 bias: -1.152e-10 P time: 580981 first: 4.989e-02 second: 5.646e-02 infty: 8.972e-02 bias: -6.570e-11 P time: 581661 first: 4.993e-02 second: 5.653e-02 infty: 9.015e-02 bias: -6.740e-11 P time: 582342 first: 5.001e-02 second: 5.659e-02 infty: 9.048e-02 bias: -4.901e-11 P time: 583022 first: 5.011e-02 second: 5.665e-02 infty: 9.075e-02 bias: -7.837e-11 P time: 583701 first: 5.024e-02 second: 5.671e-02 infty: 9.096e-02 bias: -1.069e-10 P time: 584381 first: 5.039e-02 second: 5.677e-02 infty: 9.114e-02 bias: -1.217e-10 P time: 585061 first: 5.056e-02 second: 5.684e-02 infty: 9.130e-02 bias: -1.096e-10 P time: 585740 first: 5.074e-02 second: 5.693e-02 infty: 9.148e-02 bias: -4.564e-11 P time: 586419 first: 5.095e-02 second: 5.706e-02 infty: 9.171e-02 bias: -6.058e-11 P time: 587098 first: 5.119e-02 second: 5.724e-02 infty: 9.199e-02 bias: -4.592e-11 P time: 587776 first: 5.149e-02 second: 5.748e-02 infty: 9.235e-02 bias: -1.222e-10 P time: 588455 first: 5.184e-02 second: 5.779e-02 infty: 9.282e-02 bias: -1.874e-10 P time: 589133 first: 5.227e-02 second: 5.818e-02 infty: 9.354e-02 bias: -1.028e-10 P time: 589812 first: 5.275e-02 second: 5.864e-02 infty: 9.436e-02 bias: -9.253e-12 P time: 590490 first: 5.329e-02 second: 5.918e-02 infty: 9.529e-02 bias: 3.552e-11 P time: 591168 first: 5.388e-02 second: 5.979e-02 infty: 9.630e-02 bias: -1.010e-10 P time: 591846 first: 5.449e-02 second: 6.045e-02 infty: 9.737e-02 bias: -5.571e-11 P time: 592523 first: 5.511e-02 second: 6.114e-02 infty: 9.849e-02 bias: -1.264e-10 P time: 593201 first: 5.574e-02 second: 6.186e-02 infty: 9.966e-02 bias: -9.368e-11 P time: 593879 first: 5.635e-02 second: 6.257e-02 infty: 1.008e-01 bias: -1.044e-10 P time: 594556 first: 5.693e-02 second: 6.325e-02 infty: 1.019e-01 bias: -9.556e-11 P time: 595233 first: 5.747e-02 second: 6.389e-02 infty: 1.029e-01 bias: -4.396e-11 P time: 595910 first: 5.797e-02 second: 6.446e-02 infty: 1.039e-01 bias: -6.473e-11 P time: 596587 first: 5.841e-02 second: 6.495e-02 infty: 1.047e-01 bias: -1.257e-10 P time: 597264 first: 5.875e-02 second: 6.534e-02 infty: 1.054e-01 bias: -5.446e-11 P time: 597941 first: 5.899e-02 second: 6.562e-02 infty: 1.059e-01 bias: -7.625e-11 P time: 598617 first: 5.910e-02 second: 6.579e-02 infty: 1.063e-01 bias: -4.872e-11 P time: 599294 first: 5.908e-02 second: 6.583e-02 infty: 1.066e-01 bias: -8.243e-11 P time: 599970 first: 5.893e-02 second: 6.575e-02 infty: 1.067e-01 bias: -6.328e-11 P time: 600646 first: 5.864e-02 second: 6.554e-02 infty: 1.068e-01 bias: -5.629e-11 P time: 601321 first: 5.824e-02 second: 6.521e-02 infty: 1.066e-01 bias: -9.106e-11 P time: 601997 first: 5.771e-02 second: 6.477e-02 infty: 1.064e-01 bias: -6.985e-11 P time: 602672 first: 5.710e-02 second: 6.422e-02 infty: 1.061e-01 bias: -9.503e-11 P time: 603347 first: 5.641e-02 second: 6.358e-02 infty: 1.057e-01 bias: -8.789e-11 P time: 604022 first: 5.565e-02 second: 6.285e-02 infty: 1.052e-01 bias: -1.044e-10 P time: 604697 first: 5.483e-02 second: 6.205e-02 infty: 1.047e-01 bias: -8.424e-11 P time: 605371 first: 5.396e-02 second: 6.121e-02 infty: 1.041e-01 bias: -8.964e-11 P time: 606045 first: 5.308e-02 second: 6.034e-02 infty: 1.034e-01 bias: -1.003e-10 P time: 606719 first: 5.221e-02 second: 5.946e-02 infty: 1.028e-01 bias: -8.207e-11 P time: 607393 first: 5.135e-02 second: 5.861e-02 infty: 1.021e-01 bias: -5.928e-11 P time: 608066 first: 5.054e-02 second: 5.779e-02 infty: 1.015e-01 bias: -1.873e-11 P time: 608740 first: 4.980e-02 second: 5.705e-02 infty: 1.009e-01 bias: 1.074e-11 P time: 609413 first: 4.913e-02 second: 5.640e-02 infty: 1.004e-01 bias: -1.324e-10 P time: 610085 first: 4.857e-02 second: 5.586e-02 infty: 1.000e-01 bias: -5.779e-11 P time: 610758 first: 4.813e-02 second: 5.546e-02 infty: 9.979e-02 bias: -2.965e-11 P time: 611430 first: 4.781e-02 second: 5.521e-02 infty: 9.971e-02 bias: -1.132e-10 P time: 612102 first: 4.763e-02 second: 5.511e-02 infty: 9.980e-02 bias: -4.529e-11 P time: 612774 first: 4.759e-02 second: 5.518e-02 infty: 1.001e-01 bias: -6.667e-11 P time: 613446 first: 4.769e-02 second: 5.540e-02 infty: 1.006e-01 bias: -9.518e-11 P time: 614118 first: 4.793e-02 second: 5.578e-02 infty: 1.013e-01 bias: -4.047e-11 P time: 614790 first: 4.829e-02 second: 5.630e-02 infty: 1.022e-01 bias: 5.051e-12 P time: 615461 first: 4.878e-02 second: 5.694e-02 infty: 1.033e-01 bias: -8.647e-11 P time: 616132 first: 4.939e-02 second: 5.769e-02 infty: 1.045e-01 bias: -8.925e-11 P time: 616803 first: 5.010e-02 second: 5.853e-02 infty: 1.057e-01 bias: -1.028e-10 P time: 617474 first: 5.089e-02 second: 5.943e-02 infty: 1.071e-01 bias: -2.875e-11 P time: 618145 first: 5.174e-02 second: 6.039e-02 infty: 1.084e-01 bias: -6.209e-11 P time: 618816 first: 5.264e-02 second: 6.136e-02 infty: 1.097e-01 bias: -5.879e-11 P time: 619486 first: 5.358e-02 second: 6.234e-02 infty: 1.110e-01 bias: -1.039e-10 P time: 620156 first: 5.455e-02 second: 6.330e-02 infty: 1.122e-01 bias: -7.149e-11 P time: 620827 first: 5.553e-02 second: 6.422e-02 infty: 1.132e-01 bias: -8.042e-11 P time: 621497 first: 5.650e-02 second: 6.509e-02 infty: 1.140e-01 bias: -2.562e-11 P time: 622166 first: 5.742e-02 second: 6.589e-02 infty: 1.147e-01 bias: -9.775e-11 P time: 622836 first: 5.828e-02 second: 6.660e-02 infty: 1.152e-01 bias: -6.001e-11 P time: 623505 first: 5.904e-02 second: 6.721e-02 infty: 1.156e-01 bias: -5.745e-11 P time: 624175 first: 5.968e-02 second: 6.771e-02 infty: 1.159e-01 bias: -4.612e-11 P time: 624844 first: 6.020e-02 second: 6.810e-02 infty: 1.160e-01 bias: -1.094e-10 P time: 625513 first: 6.059e-02 second: 6.836e-02 infty: 1.160e-01 bias: -1.477e-10 P time: 626181 first: 6.083e-02 second: 6.851e-02 infty: 1.159e-01 bias: -8.622e-11 P time: 626850 first: 6.094e-02 second: 6.853e-02 infty: 1.157e-01 bias: -9.207e-11 P time: 627518 first: 6.091e-02 second: 6.844e-02 infty: 1.154e-01 bias: -5.750e-11 P time: 628187 first: 6.075e-02 second: 6.826e-02 infty: 1.152e-01 bias: -1.132e-10 P time: 628855 first: 6.048e-02 second: 6.797e-02 infty: 1.149e-01 bias: -3.066e-11 P time: 629523 first: 6.011e-02 second: 6.761e-02 infty: 1.146e-01 bias: -1.743e-10 P time: 630191 first: 5.964e-02 second: 6.719e-02 infty: 1.144e-01 bias: -6.442e-11 P time: 630858 first: 5.911e-02 second: 6.672e-02 infty: 1.141e-01 bias: -9.280e-11 P time: 631526 first: 5.852e-02 second: 6.621e-02 infty: 1.138e-01 bias: -8.266e-11 P time: 632194 first: 5.788e-02 second: 6.568e-02 infty: 1.136e-01 bias: -3.368e-11 P time: 632861 first: 5.721e-02 second: 6.514e-02 infty: 1.133e-01 bias: -7.013e-11 P time: 633528 first: 5.653e-02 second: 6.460e-02 infty: 1.131e-01 bias: -1.226e-10 P time: 634196 first: 5.585e-02 second: 6.406e-02 infty: 1.128e-01 bias: -9.782e-11 P time: 634863 first: 5.517e-02 second: 6.354e-02 infty: 1.125e-01 bias: -6.740e-11 P time: 635530 first: 5.449e-02 second: 6.303e-02 infty: 1.122e-01 bias: -9.639e-11 P time: 636197 first: 5.383e-02 second: 6.255e-02 infty: 1.119e-01 bias: -5.258e-11 P time: 636863 first: 5.319e-02 second: 6.209e-02 infty: 1.117e-01 bias: -6.015e-11 P time: 637530 first: 5.259e-02 second: 6.166e-02 infty: 1.114e-01 bias: -9.785e-11 P time: 638196 first: 5.202e-02 second: 6.126e-02 infty: 1.112e-01 bias: -7.608e-11 P time: 638863 first: 5.151e-02 second: 6.088e-02 infty: 1.110e-01 bias: -1.101e-10 P time: 639529 first: 5.106e-02 second: 6.054e-02 infty: 1.108e-01 bias: -1.113e-11 P time: 640195 first: 5.071e-02 second: 6.024e-02 infty: 1.106e-01 bias: -2.261e-11 P time: 640861 first: 5.045e-02 second: 5.998e-02 infty: 1.104e-01 bias: -4.325e-11 P time: 641526 first: 5.026e-02 second: 5.976e-02 infty: 1.103e-01 bias: -5.719e-11 P time: 642192 first: 5.014e-02 second: 5.959e-02 infty: 1.102e-01 bias: -6.049e-11 P time: 642857 first: 5.009e-02 second: 5.948e-02 infty: 1.102e-01 bias: -1.083e-10 P time: 643522 first: 5.011e-02 second: 5.942e-02 infty: 1.102e-01 bias: -6.480e-11 P time: 644187 first: 5.021e-02 second: 5.944e-02 infty: 1.102e-01 bias: -7.336e-11 P time: 644852 first: 5.037e-02 second: 5.952e-02 infty: 1.102e-01 bias: -2.817e-11 P time: 645517 first: 5.063e-02 second: 5.967e-02 infty: 1.102e-01 bias: -1.091e-10 P time: 646181 first: 5.098e-02 second: 5.991e-02 infty: 1.102e-01 bias: -4.663e-12 P time: 646845 first: 5.142e-02 second: 6.023e-02 infty: 1.101e-01 bias: -9.223e-11 P time: 647510 first: 5.195e-02 second: 6.064e-02 infty: 1.100e-01 bias: -4.585e-11 P time: 648174 first: 5.258e-02 second: 6.114e-02 infty: 1.100e-01 bias: -4.357e-11 P time: 648837 first: 5.328e-02 second: 6.173e-02 infty: 1.099e-01 bias: -9.239e-11 P time: 649501 first: 5.405e-02 second: 6.239e-02 infty: 1.098e-01 bias: -1.493e-10 P time: 650165 first: 5.487e-02 second: 6.313e-02 infty: 1.100e-01 bias: -4.232e-11 P time: 650829 first: 5.574e-02 second: 6.393e-02 infty: 1.102e-01 bias: -1.085e-10 P time: 651492 first: 5.664e-02 second: 6.478e-02 infty: 1.104e-01 bias: -3.570e-11 P time: 652155 first: 5.756e-02 second: 6.565e-02 infty: 1.108e-01 bias: -9.196e-11 P time: 652819 first: 5.848e-02 second: 6.653e-02 infty: 1.112e-01 bias: 9.434e-12 P time: 653482 first: 5.939e-02 second: 6.739e-02 infty: 1.116e-01 bias: -5.505e-11 P time: 654145 first: 6.024e-02 second: 6.822e-02 infty: 1.121e-01 bias: -9.598e-11 P time: 654808 first: 6.100e-02 second: 6.898e-02 infty: 1.127e-01 bias: -8.305e-11 P time: 655471 first: 6.166e-02 second: 6.966e-02 infty: 1.134e-01 bias: -8.422e-11 P time: 656135 first: 6.219e-02 second: 7.023e-02 infty: 1.140e-01 bias: -9.464e-11 P time: 656798 first: 6.259e-02 second: 7.069e-02 infty: 1.146e-01 bias: -1.294e-10 P time: 657460 first: 6.284e-02 second: 7.102e-02 infty: 1.152e-01 bias: -1.038e-10 P time: 658123 first: 6.294e-02 second: 7.120e-02 infty: 1.157e-01 bias: -7.915e-11 P time: 658786 first: 6.290e-02 second: 7.124e-02 infty: 1.161e-01 bias: -8.342e-11 P time: 659449 first: 6.271e-02 second: 7.114e-02 infty: 1.163e-01 bias: -1.235e-10 P time: 660111 first: 6.239e-02 second: 7.089e-02 infty: 1.164e-01 bias: -7.273e-11 P time: 660774 first: 6.197e-02 second: 7.050e-02 infty: 1.163e-01 bias: -1.035e-10 P time: 661436 first: 6.148e-02 second: 6.999e-02 infty: 1.159e-01 bias: -2.178e-11 P time: 662099 first: 6.089e-02 second: 6.937e-02 infty: 1.154e-01 bias: -1.110e-10 P time: 662761 first: 6.024e-02 second: 6.865e-02 infty: 1.146e-01 bias: -8.162e-11 P time: 663423 first: 5.952e-02 second: 6.785e-02 infty: 1.137e-01 bias: -1.389e-10 P time: 664085 first: 5.877e-02 second: 6.700e-02 infty: 1.127e-01 bias: -7.873e-11 P time: 664747 first: 5.800e-02 second: 6.611e-02 infty: 1.116e-01 bias: -8.371e-11 P time: 665408 first: 5.723e-02 second: 6.521e-02 infty: 1.104e-01 bias: -5.260e-11 P time: 666070 first: 5.647e-02 second: 6.432e-02 infty: 1.091e-01 bias: -1.024e-10 P time: 666731 first: 5.576e-02 second: 6.346e-02 infty: 1.079e-01 bias: -4.102e-11 P time: 667392 first: 5.510e-02 second: 6.267e-02 infty: 1.068e-01 bias: -1.038e-10 P time: 668053 first: 5.452e-02 second: 6.196e-02 infty: 1.057e-01 bias: -7.028e-11 P time: 668714 first: 5.404e-02 second: 6.136e-02 infty: 1.047e-01 bias: -1.350e-10 P time: 669375 first: 5.366e-02 second: 6.089e-02 infty: 1.039e-01 bias: -1.031e-10 P time: 670036 first: 5.340e-02 second: 6.055e-02 infty: 1.032e-01 bias: -1.180e-10 P time: 670697 first: 5.325e-02 second: 6.036e-02 infty: 1.027e-01 bias: -3.871e-11 P time: 671357 first: 5.323e-02 second: 6.033e-02 infty: 1.023e-01 bias: -7.674e-12 P time: 672018 first: 5.333e-02 second: 6.045e-02 infty: 1.020e-01 bias: -8.205e-11 P time: 672678 first: 5.355e-02 second: 6.073e-02 infty: 1.019e-01 bias: -1.161e-10 P time: 673338 first: 5.387e-02 second: 6.114e-02 infty: 1.019e-01 bias: -8.708e-11 P time: 673999 first: 5.430e-02 second: 6.168e-02 infty: 1.021e-01 bias: 2.613e-12 P time: 674659 first: 5.482e-02 second: 6.232e-02 infty: 1.024e-01 bias: -1.052e-10 P time: 675319 first: 5.540e-02 second: 6.304e-02 infty: 1.028e-01 bias: -9.738e-11 P time: 675979 first: 5.606e-02 second: 6.383e-02 infty: 1.033e-01 bias: -1.603e-10 P time: 676639 first: 5.676e-02 second: 6.465e-02 infty: 1.038e-01 bias: -7.282e-11 P time: 677299 first: 5.751e-02 second: 6.550e-02 infty: 1.043e-01 bias: -5.107e-11 P time: 677959 first: 5.829e-02 second: 6.634e-02 infty: 1.047e-01 bias: -7.400e-11 P time: 678619 first: 5.910e-02 second: 6.717e-02 infty: 1.052e-01 bias: -4.040e-11 P time: 679279 first: 5.992e-02 second: 6.797e-02 infty: 1.056e-01 bias: -1.039e-10 P time: 679939 first: 6.075e-02 second: 6.873e-02 infty: 1.059e-01 bias: -1.448e-10 P time: 680599 first: 6.157e-02 second: 6.943e-02 infty: 1.062e-01 bias: -1.159e-10 P time: 681259 first: 6.237e-02 second: 7.007e-02 infty: 1.064e-01 bias: -6.403e-11 P time: 681919 first: 6.314e-02 second: 7.064e-02 infty: 1.065e-01 bias: -7.907e-11 P time: 682579 first: 6.385e-02 second: 7.114e-02 infty: 1.065e-01 bias: -1.117e-10 P time: 683239 first: 6.450e-02 second: 7.156e-02 infty: 1.065e-01 bias: -1.143e-10 P time: 683899 first: 6.506e-02 second: 7.190e-02 infty: 1.064e-01 bias: -7.025e-11 P time: 684559 first: 6.553e-02 second: 7.216e-02 infty: 1.062e-01 bias: -5.121e-11 P time: 685218 first: 6.590e-02 second: 7.233e-02 infty: 1.059e-01 bias: -6.326e-11 P time: 685878 first: 6.617e-02 second: 7.242e-02 infty: 1.055e-01 bias: -8.892e-11 P time: 686538 first: 6.633e-02 second: 7.243e-02 infty: 1.050e-01 bias: -8.975e-11 P time: 687197 first: 6.639e-02 second: 7.236e-02 infty: 1.044e-01 bias: -5.554e-11 P time: 687857 first: 6.634e-02 second: 7.221e-02 infty: 1.038e-01 bias: -1.249e-11 P time: 688516 first: 6.620e-02 second: 7.201e-02 infty: 1.031e-01 bias: -3.044e-11 P time: 689176 first: 6.597e-02 second: 7.174e-02 infty: 1.024e-01 bias: -3.462e-11 P time: 689835 first: 6.566e-02 second: 7.143e-02 infty: 1.016e-01 bias: -1.012e-10 P time: 690494 first: 6.529e-02 second: 7.109e-02 infty: 1.008e-01 bias: -1.010e-10 P time: 691153 first: 6.486e-02 second: 7.072e-02 infty: 9.998e-02 bias: -8.650e-11 P time: 691813 first: 6.438e-02 second: 7.034e-02 infty: 9.917e-02 bias: -7.757e-11 P time: 692472 first: 6.386e-02 second: 6.995e-02 infty: 9.847e-02 bias: -9.226e-11 P time: 693131 first: 6.331e-02 second: 6.957e-02 infty: 9.779e-02 bias: -1.277e-10 P time: 693790 first: 6.274e-02 second: 6.920e-02 infty: 9.711e-02 bias: -1.128e-10 P time: 694449 first: 6.217e-02 second: 6.883e-02 infty: 9.650e-02 bias: -8.001e-11 P time: 695108 first: 6.161e-02 second: 6.848e-02 infty: 9.599e-02 bias: 4.345e-12 P time: 695767 first: 6.108e-02 second: 6.814e-02 infty: 9.551e-02 bias: -9.591e-11 P time: 696426 first: 6.057e-02 second: 6.781e-02 infty: 9.508e-02 bias: -5.590e-11 P time: 697085 first: 6.008e-02 second: 6.749e-02 infty: 9.467e-02 bias: -1.356e-10 P time: 697744 first: 5.960e-02 second: 6.717e-02 infty: 9.435e-02 bias: -9.369e-11 P time: 698403 first: 5.916e-02 second: 6.685e-02 infty: 9.406e-02 bias: -6.920e-11 P time: 699062 first: 5.876e-02 second: 6.653e-02 infty: 9.376e-02 bias: -7.833e-11 P time: 699721 first: 5.840e-02 second: 6.621e-02 infty: 9.343e-02 bias: -8.352e-11 P time: 700379 first: 5.809e-02 second: 6.590e-02 infty: 9.308e-02 bias: -2.456e-11 P time: 701038 first: 5.783e-02 second: 6.561e-02 infty: 9.269e-02 bias: 1.395e-12 P time: 701697 first: 5.763e-02 second: 6.534e-02 infty: 9.225e-02 bias: -9.999e-11 P time: 702355 first: 5.749e-02 second: 6.511e-02 infty: 9.177e-02 bias: -8.298e-11 P time: 703014 first: 5.742e-02 second: 6.492e-02 infty: 9.124e-02 bias: -1.156e-10 P time: 703672 first: 5.745e-02 second: 6.481e-02 infty: 9.066e-02 bias: -6.500e-11 P time: 704330 first: 5.757e-02 second: 6.477e-02 infty: 9.007e-02 bias: -8.190e-11 P time: 704988 first: 5.779e-02 second: 6.482e-02 infty: 8.946e-02 bias: -1.061e-10 P time: 705646 first: 5.812e-02 second: 6.497e-02 infty: 8.936e-02 bias: -8.578e-11 P time: 706304 first: 5.854e-02 second: 6.523e-02 infty: 8.969e-02 bias: -8.615e-11 P time: 706962 first: 5.906e-02 second: 6.561e-02 infty: 9.025e-02 bias: -8.989e-11 P time: 707619 first: 5.968e-02 second: 6.611e-02 infty: 9.098e-02 bias: -9.868e-11 P time: 708277 first: 6.040e-02 second: 6.672e-02 infty: 9.185e-02 bias: -1.298e-10 P time: 708935 first: 6.119e-02 second: 6.744e-02 infty: 9.296e-02 bias: -1.085e-10 P time: 709592 first: 6.205e-02 second: 6.827e-02 infty: 9.421e-02 bias: -9.294e-11 P time: 710250 first: 6.296e-02 second: 6.918e-02 infty: 9.558e-02 bias: -9.493e-11 P time: 710907 first: 6.392e-02 second: 7.016e-02 infty: 9.706e-02 bias: -5.163e-11 P time: 711565 first: 6.491e-02 second: 7.119e-02 infty: 9.864e-02 bias: -1.249e-10 P time: 712222 first: 6.591e-02 second: 7.224e-02 infty: 1.003e-01 bias: -9.716e-11 P time: 712880 first: 6.690e-02 second: 7.330e-02 infty: 1.020e-01 bias: -1.285e-10 P time: 713537 first: 6.785e-02 second: 7.434e-02 infty: 1.038e-01 bias: -1.298e-10 P time: 714195 first: 6.875e-02 second: 7.532e-02 infty: 1.055e-01 bias: -9.990e-11 P time: 714852 first: 6.956e-02 second: 7.623e-02 infty: 1.073e-01 bias: -1.225e-10 P time: 715510 first: 7.027e-02 second: 7.704e-02 infty: 1.089e-01 bias: -4.728e-11 P time: 716168 first: 7.086e-02 second: 7.773e-02 infty: 1.105e-01 bias: -4.525e-11 P time: 716826 first: 7.132e-02 second: 7.827e-02 infty: 1.118e-01 bias: -5.803e-11 P time: 717484 first: 7.162e-02 second: 7.866e-02 infty: 1.130e-01 bias: -8.823e-11 P time: 718142 first: 7.177e-02 second: 7.888e-02 infty: 1.140e-01 bias: -1.311e-10 P time: 718800 first: 7.176e-02 second: 7.892e-02 infty: 1.147e-01 bias: -6.655e-11 P time: 719458 first: 7.158e-02 second: 7.878e-02 infty: 1.152e-01 bias: -9.444e-11 P time: 720116 first: 7.124e-02 second: 7.847e-02 infty: 1.153e-01 bias: -6.460e-11 P time: 720774 first: 7.075e-02 second: 7.799e-02 infty: 1.153e-01 bias: -3.321e-11 P time: 721432 first: 7.011e-02 second: 7.736e-02 infty: 1.150e-01 bias: -1.220e-10 P time: 722090 first: 6.935e-02 second: 7.658e-02 infty: 1.144e-01 bias: -7.256e-11 P time: 722749 first: 6.847e-02 second: 7.569e-02 infty: 1.137e-01 bias: -3.925e-11 P time: 723407 first: 6.750e-02 second: 7.470e-02 infty: 1.129e-01 bias: -6.749e-11 P time: 724065 first: 6.648e-02 second: 7.365e-02 infty: 1.119e-01 bias: -8.440e-11 P time: 724723 first: 6.541e-02 second: 7.255e-02 infty: 1.110e-01 bias: -1.152e-10 P time: 725381 first: 6.433e-02 second: 7.145e-02 infty: 1.101e-01 bias: -5.893e-11 P time: 726040 first: 6.326e-02 second: 7.036e-02 infty: 1.094e-01 bias: -1.054e-10 P time: 726698 first: 6.224e-02 second: 6.933e-02 infty: 1.088e-01 bias: -1.227e-10 P time: 727356 first: 6.128e-02 second: 6.838e-02 infty: 1.084e-01 bias: -5.805e-11 P time: 728014 first: 6.040e-02 second: 6.754e-02 infty: 1.082e-01 bias: -7.215e-11 P time: 728671 first: 5.963e-02 second: 6.684e-02 infty: 1.082e-01 bias: -6.408e-11 P time: 729329 first: 5.899e-02 second: 6.629e-02 infty: 1.085e-01 bias: -1.037e-10 P time: 729987 first: 5.848e-02 second: 6.590e-02 infty: 1.090e-01 bias: -3.462e-11 P time: 730645 first: 5.814e-02 second: 6.570e-02 infty: 1.099e-01 bias: -5.219e-11 P time: 731303 first: 5.796e-02 second: 6.568e-02 infty: 1.109e-01 bias: -1.337e-10 P time: 731960 first: 5.795e-02 second: 6.584e-02 infty: 1.122e-01 bias: -8.621e-11 P time: 732618 first: 5.811e-02 second: 6.618e-02 infty: 1.136e-01 bias: -8.984e-11 P time: 733276 first: 5.841e-02 second: 6.668e-02 infty: 1.151e-01 bias: -7.078e-11 P time: 733933 first: 5.884e-02 second: 6.731e-02 infty: 1.167e-01 bias: -6.263e-11 P time: 734591 first: 5.939e-02 second: 6.807e-02 infty: 1.184e-01 bias: -8.457e-11 P time: 735249 first: 6.004e-02 second: 6.891e-02 infty: 1.200e-01 bias: -3.273e-11 P time: 735906 first: 6.079e-02 second: 6.982e-02 infty: 1.215e-01 bias: -9.451e-11 P time: 736564 first: 6.159e-02 second: 7.077e-02 infty: 1.230e-01 bias: -1.279e-10 P time: 737222 first: 6.244e-02 second: 7.173e-02 infty: 1.243e-01 bias: -8.290e-11 P time: 737880 first: 6.332e-02 second: 7.268e-02 infty: 1.255e-01 bias: -6.944e-11 P time: 738538 first: 6.420e-02 second: 7.360e-02 infty: 1.265e-01 bias: -6.475e-11 P time: 739196 first: 6.508e-02 second: 7.447e-02 infty: 1.273e-01 bias: -1.597e-10 P time: 739854 first: 6.593e-02 second: 7.527e-02 infty: 1.280e-01 bias: -6.952e-11 P time: 740512 first: 6.674e-02 second: 7.599e-02 infty: 1.285e-01 bias: -8.247e-11 P time: 741170 first: 6.749e-02 second: 7.662e-02 infty: 1.289e-01 bias: -6.294e-11 P time: 741828 first: 6.817e-02 second: 7.716e-02 infty: 1.291e-01 bias: -9.546e-11 P time: 742486 first: 6.877e-02 second: 7.761e-02 infty: 1.293e-01 bias: -1.181e-10 P time: 743145 first: 6.927e-02 second: 7.797e-02 infty: 1.293e-01 bias: -4.430e-11 P time: 743803 first: 6.969e-02 second: 7.823e-02 infty: 1.293e-01 bias: -6.592e-11 P time: 744462 first: 7.000e-02 second: 7.840e-02 infty: 1.292e-01 bias: -8.108e-11 P time: 745120 first: 7.024e-02 second: 7.849e-02 infty: 1.290e-01 bias: -6.143e-11 P time: 745779 first: 7.039e-02 second: 7.850e-02 infty: 1.289e-01 bias: -7.240e-11 P time: 746437 first: 7.046e-02 second: 7.845e-02 infty: 1.288e-01 bias: -6.843e-11 P time: 747096 first: 7.044e-02 second: 7.833e-02 infty: 1.287e-01 bias: -6.763e-11 P time: 747754 first: 7.035e-02 second: 7.815e-02 infty: 1.286e-01 bias: -4.177e-11 P time: 748413 first: 7.018e-02 second: 7.794e-02 infty: 1.286e-01 bias: -7.900e-11 P time: 749072 first: 6.994e-02 second: 7.768e-02 infty: 1.287e-01 bias: -3.102e-11 P time: 749730 first: 6.964e-02 second: 7.740e-02 infty: 1.289e-01 bias: -6.056e-11 P time: 750389 first: 6.929e-02 second: 7.710e-02 infty: 1.291e-01 bias: -8.756e-11 P time: 751048 first: 6.889e-02 second: 7.679e-02 infty: 1.295e-01 bias: -1.028e-10 P time: 751706 first: 6.846e-02 second: 7.648e-02 infty: 1.299e-01 bias: -7.088e-11 P time: 752365 first: 6.799e-02 second: 7.617e-02 infty: 1.304e-01 bias: -1.200e-10 P time: 753024 first: 6.749e-02 second: 7.587e-02 infty: 1.310e-01 bias: -7.625e-11 P time: 753683 first: 6.698e-02 second: 7.559e-02 infty: 1.317e-01 bias: -1.432e-11 P time: 754341 first: 6.644e-02 second: 7.533e-02 infty: 1.324e-01 bias: -1.206e-10 P time: 755000 first: 6.591e-02 second: 7.509e-02 infty: 1.332e-01 bias: -7.125e-11 P time: 755659 first: 6.538e-02 second: 7.486e-02 infty: 1.339e-01 bias: -7.540e-11 P time: 756318 first: 6.486e-02 second: 7.465e-02 infty: 1.347e-01 bias: -4.572e-11 P time: 756978 first: 6.435e-02 second: 7.444e-02 infty: 1.353e-01 bias: -7.586e-11 P time: 757637 first: 6.385e-02 second: 7.423e-02 infty: 1.359e-01 bias: -2.955e-12 P time: 758296 first: 6.337e-02 second: 7.401e-02 infty: 1.364e-01 bias: -3.412e-12 P time: 758955 first: 6.293e-02 second: 7.378e-02 infty: 1.368e-01 bias: -3.991e-11 P time: 759615 first: 6.252e-02 second: 7.354e-02 infty: 1.370e-01 bias: -1.151e-10 P time: 760274 first: 6.214e-02 second: 7.328e-02 infty: 1.370e-01 bias: -1.098e-10 P time: 760934 first: 6.180e-02 second: 7.301e-02 infty: 1.369e-01 bias: -5.947e-11 P time: 761594 first: 6.150e-02 second: 7.273e-02 infty: 1.367e-01 bias: -6.771e-11 P time: 762253 first: 6.124e-02 second: 7.244e-02 infty: 1.362e-01 bias: -1.008e-10 P time: 762913 first: 6.103e-02 second: 7.217e-02 infty: 1.357e-01 bias: -2.514e-11 P time: 763573 first: 6.089e-02 second: 7.191e-02 infty: 1.350e-01 bias: -1.106e-10 P time: 764233 first: 6.082e-02 second: 7.170e-02 infty: 1.342e-01 bias: -1.163e-10 P time: 764893 first: 6.085e-02 second: 7.155e-02 infty: 1.334e-01 bias: -1.340e-10 P time: 765553 first: 6.099e-02 second: 7.146e-02 infty: 1.326e-01 bias: -1.046e-10 P time: 766213 first: 6.122e-02 second: 7.147e-02 infty: 1.319e-01 bias: -1.243e-10 P time: 766873 first: 6.157e-02 second: 7.157e-02 infty: 1.314e-01 bias: -1.123e-10 P time: 767533 first: 6.201e-02 second: 7.178e-02 infty: 1.309e-01 bias: -1.004e-10 P time: 768193 first: 6.254e-02 second: 7.211e-02 infty: 1.306e-01 bias: -1.940e-11 P time: 768853 first: 6.316e-02 second: 7.256e-02 infty: 1.306e-01 bias: -6.485e-11 P time: 769513 first: 6.385e-02 second: 7.311e-02 infty: 1.307e-01 bias: -7.121e-11 P time: 770173 first: 6.460e-02 second: 7.377e-02 infty: 1.310e-01 bias: -7.573e-11 P time: 770834 first: 6.541e-02 second: 7.452e-02 infty: 1.315e-01 bias: -7.929e-11 P time: 771494 first: 6.626e-02 second: 7.535e-02 infty: 1.323e-01 bias: -6.375e-11 P time: 772154 first: 6.713e-02 second: 7.623e-02 infty: 1.332e-01 bias: -1.127e-10 P time: 772815 first: 6.802e-02 second: 7.714e-02 infty: 1.343e-01 bias: -8.337e-11 P time: 773476 first: 6.889e-02 second: 7.806e-02 infty: 1.355e-01 bias: -7.546e-12 P time: 774136 first: 6.974e-02 second: 7.896e-02 infty: 1.367e-01 bias: -5.803e-11 P time: 774797 first: 7.052e-02 second: 7.981e-02 infty: 1.380e-01 bias: -1.011e-10 P time: 775458 first: 7.123e-02 second: 8.060e-02 infty: 1.392e-01 bias: -8.758e-11 P time: 776119 first: 7.185e-02 second: 8.130e-02 infty: 1.404e-01 bias: -6.934e-11 P time: 776780 first: 7.235e-02 second: 8.189e-02 infty: 1.414e-01 bias: -8.545e-11 P time: 777441 first: 7.272e-02 second: 8.234e-02 infty: 1.423e-01 bias: -9.501e-11 P time: 778103 first: 7.295e-02 second: 8.264e-02 infty: 1.430e-01 bias: -9.158e-11 P time: 778764 first: 7.303e-02 second: 8.278e-02 infty: 1.435e-01 bias: -3.065e-11 P time: 779425 first: 7.296e-02 second: 8.276e-02 infty: 1.438e-01 bias: -6.677e-11 P time: 780087 first: 7.273e-02 second: 8.256e-02 infty: 1.438e-01 bias: -4.081e-11 P time: 780748 first: 7.235e-02 second: 8.219e-02 infty: 1.435e-01 bias: -9.736e-11 P time: 781410 first: 7.182e-02 second: 8.166e-02 infty: 1.430e-01 bias: -1.073e-10 P time: 782071 first: 7.117e-02 second: 8.098e-02 infty: 1.423e-01 bias: -1.187e-10 P time: 782733 first: 7.039e-02 second: 8.016e-02 infty: 1.414e-01 bias: -1.217e-10 P time: 783394 first: 6.951e-02 second: 7.923e-02 infty: 1.403e-01 bias: -5.088e-11 P time: 784056 first: 6.855e-02 second: 7.821e-02 infty: 1.390e-01 bias: -8.800e-11 P time: 784718 first: 6.754e-02 second: 7.713e-02 infty: 1.377e-01 bias: -7.669e-11 P time: 785379 first: 6.650e-02 second: 7.602e-02 infty: 1.362e-01 bias: -4.158e-11 P time: 786041 first: 6.547e-02 second: 7.491e-02 infty: 1.347e-01 bias: -3.531e-12 P time: 786702 first: 6.446e-02 second: 7.383e-02 infty: 1.332e-01 bias: -3.905e-11 P time: 787364 first: 6.352e-02 second: 7.283e-02 infty: 1.317e-01 bias: -6.536e-11 P time: 788025 first: 6.266e-02 second: 7.192e-02 infty: 1.303e-01 bias: -1.371e-10 P time: 788687 first: 6.191e-02 second: 7.114e-02 infty: 1.291e-01 bias: -1.514e-10 P time: 789348 first: 6.130e-02 second: 7.050e-02 infty: 1.280e-01 bias: -1.049e-10 P time: 790009 first: 6.083e-02 second: 7.003e-02 infty: 1.272e-01 bias: -1.256e-10 P time: 790670 first: 6.052e-02 second: 6.973e-02 infty: 1.266e-01 bias: -6.365e-11 P time: 791331 first: 6.037e-02 second: 6.961e-02 infty: 1.261e-01 bias: -1.264e-10 P time: 791992 first: 6.038e-02 second: 6.967e-02 infty: 1.259e-01 bias: -6.556e-11 P time: 792653 first: 6.055e-02 second: 6.991e-02 infty: 1.259e-01 bias: -4.850e-11 P time: 793314 first: 6.087e-02 second: 7.031e-02 infty: 1.261e-01 bias: -1.590e-10 P time: 793974 first: 6.131e-02 second: 7.085e-02 infty: 1.265e-01 bias: -8.687e-11 P time: 794635 first: 6.188e-02 second: 7.152e-02 infty: 1.271e-01 bias: -4.679e-11 P time: 795296 first: 6.255e-02 second: 7.229e-02 infty: 1.279e-01 bias: -4.515e-11 P time: 795956 first: 6.329e-02 second: 7.314e-02 infty: 1.287e-01 bias: -7.741e-11 P time: 796617 first: 6.411e-02 second: 7.404e-02 infty: 1.297e-01 bias: -3.445e-11 P time: 797278 first: 6.497e-02 second: 7.496e-02 infty: 1.307e-01 bias: -6.178e-11 P time: 797938 first: 6.585e-02 second: 7.589e-02 infty: 1.317e-01 bias: -7.847e-11 P time: 798599 first: 6.675e-02 second: 7.679e-02 infty: 1.327e-01 bias: -9.090e-11 P time: 799260 first: 6.764e-02 second: 7.765e-02 infty: 1.336e-01 bias: -5.272e-11 P time: 799921 first: 6.850e-02 second: 7.845e-02 infty: 1.343e-01 bias: -1.131e-10 P time: 800582 first: 6.931e-02 second: 7.916e-02 infty: 1.349e-01 bias: -1.265e-10 P time: 801243 first: 7.006e-02 second: 7.979e-02 infty: 1.353e-01 bias: -1.084e-10 P time: 801904 first: 7.074e-02 second: 8.032e-02 infty: 1.355e-01 bias: -5.432e-11 P time: 802565 first: 7.134e-02 second: 8.075e-02 infty: 1.356e-01 bias: -6.985e-11 P time: 803226 first: 7.185e-02 second: 8.107e-02 infty: 1.354e-01 bias: -5.140e-11 P time: 803888 first: 7.227e-02 second: 8.128e-02 infty: 1.350e-01 bias: -8.721e-11 P time: 804549 first: 7.258e-02 second: 8.140e-02 infty: 1.345e-01 bias: 3.277e-11 P time: 805210 first: 7.280e-02 second: 8.142e-02 infty: 1.338e-01 bias: -6.354e-11 P time: 805871 first: 7.291e-02 second: 8.135e-02 infty: 1.329e-01 bias: -8.691e-11 P time: 806532 first: 7.294e-02 second: 8.120e-02 infty: 1.319e-01 bias: -1.648e-10 P time: 807194 first: 7.289e-02 second: 8.098e-02 infty: 1.309e-01 bias: -6.707e-11 P time: 807855 first: 7.276e-02 second: 8.071e-02 infty: 1.298e-01 bias: -5.585e-11 P time: 808516 first: 7.258e-02 second: 8.038e-02 infty: 1.288e-01 bias: -5.840e-11 P time: 809177 first: 7.233e-02 second: 8.002e-02 infty: 1.278e-01 bias: -6.384e-11 P time: 809838 first: 7.204e-02 second: 7.963e-02 infty: 1.269e-01 bias: -1.150e-10 P time: 810500 first: 7.171e-02 second: 7.922e-02 infty: 1.261e-01 bias: -7.198e-11 P time: 811161 first: 7.134e-02 second: 7.879e-02 infty: 1.253e-01 bias: -1.430e-10 P time: 811822 first: 7.093e-02 second: 7.837e-02 infty: 1.247e-01 bias: -4.533e-11 P time: 812483 first: 7.050e-02 second: 7.796e-02 infty: 1.242e-01 bias: -1.046e-10 P time: 813144 first: 7.005e-02 second: 7.755e-02 infty: 1.238e-01 bias: -1.236e-10 P time: 813805 first: 6.957e-02 second: 7.716e-02 infty: 1.235e-01 bias: -1.142e-10 P time: 814465 first: 6.908e-02 second: 7.680e-02 infty: 1.232e-01 bias: -9.454e-11 P time: 815126 first: 6.857e-02 second: 7.645e-02 infty: 1.230e-01 bias: -8.566e-11 P time: 815787 first: 6.805e-02 second: 7.613e-02 infty: 1.227e-01 bias: -3.399e-11 P time: 816448 first: 6.755e-02 second: 7.584e-02 infty: 1.225e-01 bias: -1.215e-10 P time: 817109 first: 6.707e-02 second: 7.556e-02 infty: 1.223e-01 bias: -8.799e-11 P time: 817770 first: 6.660e-02 second: 7.530e-02 infty: 1.220e-01 bias: -7.092e-11 P time: 818431 first: 6.617e-02 second: 7.506e-02 infty: 1.216e-01 bias: -2.850e-11 P time: 819092 first: 6.579e-02 second: 7.483e-02 infty: 1.212e-01 bias: -6.268e-11 P time: 819753 first: 6.547e-02 second: 7.460e-02 infty: 1.206e-01 bias: -8.801e-11 P time: 820413 first: 6.522e-02 second: 7.438e-02 infty: 1.199e-01 bias: -1.482e-10 P time: 821074 first: 6.506e-02 second: 7.417e-02 infty: 1.192e-01 bias: -1.596e-11 P time: 821736 first: 6.496e-02 second: 7.395e-02 infty: 1.183e-01 bias: -1.115e-10 P time: 822397 first: 6.492e-02 second: 7.375e-02 infty: 1.174e-01 bias: -1.040e-10 P time: 823058 first: 6.491e-02 second: 7.356e-02 infty: 1.163e-01 bias: -1.117e-10 P time: 823719 first: 6.494e-02 second: 7.340e-02 infty: 1.153e-01 bias: -1.110e-10 P time: 824380 first: 6.500e-02 second: 7.327e-02 infty: 1.142e-01 bias: -5.382e-11 P time: 825041 first: 6.511e-02 second: 7.320e-02 infty: 1.131e-01 bias: -8.766e-11 P time: 825702 first: 6.526e-02 second: 7.318e-02 infty: 1.121e-01 bias: -4.440e-11 P time: 826363 first: 6.549e-02 second: 7.324e-02 infty: 1.112e-01 bias: -5.416e-11 P time: 827024 first: 6.577e-02 second: 7.338e-02 infty: 1.104e-01 bias: -5.346e-11 P time: 827685 first: 6.614e-02 second: 7.361e-02 infty: 1.098e-01 bias: -1.142e-10 P time: 828346 first: 6.658e-02 second: 7.394e-02 infty: 1.092e-01 bias: -1.265e-10 P time: 829007 first: 6.710e-02 second: 7.437e-02 infty: 1.089e-01 bias: -1.387e-10 P time: 829668 first: 6.769e-02 second: 7.490e-02 infty: 1.088e-01 bias: -5.353e-11 P time: 830329 first: 6.834e-02 second: 7.550e-02 infty: 1.088e-01 bias: 6.099e-12 P time: 830990 first: 6.904e-02 second: 7.618e-02 infty: 1.089e-01 bias: -1.509e-10 P time: 831650 first: 6.978e-02 second: 7.692e-02 infty: 1.094e-01 bias: -5.994e-11 P time: 832311 first: 7.054e-02 second: 7.769e-02 infty: 1.100e-01 bias: -6.753e-11 P time: 832972 first: 7.130e-02 second: 7.849e-02 infty: 1.107e-01 bias: -9.372e-11 P time: 833633 first: 7.205e-02 second: 7.928e-02 infty: 1.116e-01 bias: -8.769e-11 P time: 834293 first: 7.276e-02 second: 8.004e-02 infty: 1.126e-01 bias: -6.947e-11 P time: 834954 first: 7.341e-02 second: 8.076e-02 infty: 1.136e-01 bias: -6.918e-11 P time: 835615 first: 7.399e-02 second: 8.141e-02 infty: 1.146e-01 bias: -1.878e-10 P time: 836276 first: 7.448e-02 second: 8.198e-02 infty: 1.156e-01 bias: -5.343e-11 P time: 836937 first: 7.486e-02 second: 8.245e-02 infty: 1.164e-01 bias: -2.345e-11 P time: 837598 first: 7.513e-02 second: 8.281e-02 infty: 1.171e-01 bias: -9.349e-11 P time: 838259 first: 7.527e-02 second: 8.304e-02 infty: 1.177e-01 bias: -1.371e-10 P time: 838920 first: 7.527e-02 second: 8.313e-02 infty: 1.181e-01 bias: -1.417e-10 P time: 839581 first: 7.514e-02 second: 8.309e-02 infty: 1.184e-01 bias: -8.367e-11 P time: 840243 first: 7.486e-02 second: 8.290e-02 infty: 1.185e-01 bias: -8.677e-11 P time: 840904 first: 7.445e-02 second: 8.257e-02 infty: 1.184e-01 bias: -1.166e-10 P time: 841566 first: 7.391e-02 second: 8.211e-02 infty: 1.181e-01 bias: -5.040e-11 P time: 842227 first: 7.326e-02 second: 8.152e-02 infty: 1.177e-01 bias: -9.204e-11 P time: 842889 first: 7.250e-02 second: 8.083e-02 infty: 1.172e-01 bias: -1.280e-10 P time: 843551 first: 7.166e-02 second: 8.004e-02 infty: 1.168e-01 bias: -7.748e-11 P time: 844213 first: 7.076e-02 second: 7.918e-02 infty: 1.162e-01 bias: -1.334e-10 P time: 844875 first: 6.983e-02 second: 7.828e-02 infty: 1.156e-01 bias: -8.232e-11 P time: 845537 first: 6.888e-02 second: 7.735e-02 infty: 1.152e-01 bias: -7.073e-11 P time: 846200 first: 6.795e-02 second: 7.644e-02 infty: 1.148e-01 bias: -1.007e-10 P time: 846862 first: 6.705e-02 second: 7.556e-02 infty: 1.146e-01 bias: -4.319e-11 P time: 847524 first: 6.622e-02 second: 7.475e-02 infty: 1.145e-01 bias: -8.406e-11 P time: 848187 first: 6.547e-02 second: 7.402e-02 infty: 1.144e-01 bias: -9.243e-11 P time: 848849 first: 6.482e-02 second: 7.341e-02 infty: 1.145e-01 bias: -9.957e-11 P time: 849512 first: 6.429e-02 second: 7.293e-02 infty: 1.148e-01 bias: -2.103e-11 P time: 850174 first: 6.388e-02 second: 7.258e-02 infty: 1.151e-01 bias: -8.436e-11 P time: 850836 first: 6.361e-02 second: 7.238e-02 infty: 1.156e-01 bias: -1.114e-10 P time: 851499 first: 6.348e-02 second: 7.233e-02 infty: 1.162e-01 bias: -6.162e-11 P time: 852161 first: 6.348e-02 second: 7.243e-02 infty: 1.170e-01 bias: -8.962e-11 P time: 852823 first: 6.361e-02 second: 7.265e-02 infty: 1.178e-01 bias: -1.011e-10 P time: 853486 first: 6.385e-02 second: 7.300e-02 infty: 1.186e-01 bias: -1.249e-11 P time: 854148 first: 6.419e-02 second: 7.346e-02 infty: 1.195e-01 bias: -1.051e-10 P time: 854810 first: 6.463e-02 second: 7.401e-02 infty: 1.204e-01 bias: -1.405e-10 P time: 855472 first: 6.515e-02 second: 7.463e-02 infty: 1.213e-01 bias: -1.218e-10 P time: 856135 first: 6.573e-02 second: 7.531e-02 infty: 1.223e-01 bias: -7.750e-11 P time: 856797 first: 6.638e-02 second: 7.602e-02 infty: 1.232e-01 bias: -8.356e-11 P time: 857459 first: 6.706e-02 second: 7.675e-02 infty: 1.242e-01 bias: -1.908e-12 P time: 858121 first: 6.777e-02 second: 7.749e-02 infty: 1.251e-01 bias: -9.086e-11 P time: 858783 first: 6.849e-02 second: 7.821e-02 infty: 1.260e-01 bias: -9.047e-11 P time: 859445 first: 6.921e-02 second: 7.891e-02 infty: 1.269e-01 bias: -7.728e-11 P time: 860106 first: 6.991e-02 second: 7.956e-02 infty: 1.276e-01 bias: -2.313e-11 P time: 860768 first: 7.059e-02 second: 8.017e-02 infty: 1.283e-01 bias: -5.924e-11 P time: 861430 first: 7.122e-02 second: 8.072e-02 infty: 1.288e-01 bias: -5.092e-11 P time: 862092 first: 7.180e-02 second: 8.120e-02 infty: 1.292e-01 bias: -8.664e-11 P time: 862753 first: 7.233e-02 second: 8.161e-02 infty: 1.295e-01 bias: -2.194e-11 P time: 863415 first: 7.279e-02 second: 8.194e-02 infty: 1.297e-01 bias: -1.982e-11 P time: 864077 first: 7.318e-02 second: 8.220e-02 infty: 1.298e-01 bias: -4.319e-11 P time: 864739 first: 7.349e-02 second: 8.238e-02 infty: 1.299e-01 bias: -6.038e-11 P time: 865401 first: 7.373e-02 second: 8.249e-02 infty: 1.299e-01 bias: -7.338e-11 P time: 866062 first: 7.388e-02 second: 8.254e-02 infty: 1.300e-01 bias: -1.523e-10 P time: 866724 first: 7.395e-02 second: 8.252e-02 infty: 1.301e-01 bias: -9.195e-11 P time: 867386 first: 7.394e-02 second: 8.244e-02 infty: 1.303e-01 bias: -8.807e-11 P time: 868048 first: 7.386e-02 second: 8.231e-02 infty: 1.306e-01 bias: 1.623e-11 P time: 868710 first: 7.371e-02 second: 8.215e-02 infty: 1.309e-01 bias: -1.446e-10 P time: 869371 first: 7.348e-02 second: 8.194e-02 infty: 1.313e-01 bias: -1.117e-10 P time: 870033 first: 7.318e-02 second: 8.171e-02 infty: 1.318e-01 bias: -3.168e-11 P time: 870695 first: 7.282e-02 second: 8.146e-02 infty: 1.327e-01 bias: -6.942e-11 P time: 871356 first: 7.241e-02 second: 8.119e-02 infty: 1.339e-01 bias: -4.697e-11 P time: 872018 first: 7.195e-02 second: 8.091e-02 infty: 1.352e-01 bias: -3.909e-11 P time: 872679 first: 7.144e-02 second: 8.062e-02 infty: 1.364e-01 bias: -8.877e-11 P time: 873341 first: 7.089e-02 second: 8.033e-02 infty: 1.377e-01 bias: -8.082e-11 P time: 874002 first: 7.032e-02 second: 8.003e-02 infty: 1.389e-01 bias: -8.908e-11 P time: 874664 first: 6.973e-02 second: 7.974e-02 infty: 1.400e-01 bias: -7.922e-11 P time: 875325 first: 6.913e-02 second: 7.946e-02 infty: 1.411e-01 bias: -4.699e-11 P time: 875986 first: 6.853e-02 second: 7.918e-02 infty: 1.420e-01 bias: -2.980e-11 P time: 876647 first: 6.795e-02 second: 7.892e-02 infty: 1.428e-01 bias: -7.249e-11 P time: 877308 first: 6.741e-02 second: 7.866e-02 infty: 1.435e-01 bias: -8.519e-11 P time: 877970 first: 6.691e-02 second: 7.843e-02 infty: 1.441e-01 bias: -5.996e-11 P time: 878631 first: 6.648e-02 second: 7.821e-02 infty: 1.445e-01 bias: -6.703e-11 P time: 879292 first: 6.614e-02 second: 7.801e-02 infty: 1.447e-01 bias: -3.835e-11 P time: 879953 first: 6.591e-02 second: 7.783e-02 infty: 1.449e-01 bias: -4.239e-11 P time: 880613 first: 6.577e-02 second: 7.767e-02 infty: 1.451e-01 bias: -1.267e-10 P time: 881274 first: 6.569e-02 second: 7.754e-02 infty: 1.451e-01 bias: -1.340e-10 P time: 881935 first: 6.569e-02 second: 7.744e-02 infty: 1.452e-01 bias: -9.835e-11 P time: 882596 first: 6.574e-02 second: 7.737e-02 infty: 1.453e-01 bias: -1.245e-10 P time: 883257 first: 6.583e-02 second: 7.734e-02 infty: 1.455e-01 bias: -3.716e-11 P time: 883918 first: 6.597e-02 second: 7.735e-02 infty: 1.458e-01 bias: -6.682e-12 P time: 884579 first: 6.614e-02 second: 7.742e-02 infty: 1.462e-01 bias: -1.069e-10 P time: 885239 first: 6.636e-02 second: 7.754e-02 infty: 1.468e-01 bias: 9.279e-13 P time: 885900 first: 6.662e-02 second: 7.773e-02 infty: 1.475e-01 bias: -1.463e-10 P time: 886561 first: 6.694e-02 second: 7.800e-02 infty: 1.483e-01 bias: -7.856e-11 P time: 887221 first: 6.731e-02 second: 7.834e-02 infty: 1.493e-01 bias: -6.819e-11 P time: 887882 first: 6.775e-02 second: 7.876e-02 infty: 1.505e-01 bias: 2.793e-12 P time: 888542 first: 6.826e-02 second: 7.927e-02 infty: 1.518e-01 bias: -3.511e-11 P time: 889203 first: 6.883e-02 second: 7.985e-02 infty: 1.532e-01 bias: -5.387e-11 P time: 889863 first: 6.946e-02 second: 8.050e-02 infty: 1.546e-01 bias: -8.662e-11 P time: 890524 first: 7.014e-02 second: 8.121e-02 infty: 1.562e-01 bias: -1.127e-10 P time: 891184 first: 7.086e-02 second: 8.197e-02 infty: 1.577e-01 bias: -2.950e-11 P time: 891844 first: 7.159e-02 second: 8.274e-02 infty: 1.593e-01 bias: -1.412e-10 P time: 892504 first: 7.233e-02 second: 8.353e-02 infty: 1.608e-01 bias: -8.810e-12 P time: 893164 first: 7.306e-02 second: 8.429e-02 infty: 1.623e-01 bias: -1.537e-10 P time: 893824 first: 7.374e-02 second: 8.503e-02 infty: 1.636e-01 bias: -9.036e-11 P time: 894484 first: 7.436e-02 second: 8.570e-02 infty: 1.649e-01 bias: -6.922e-11 P time: 895144 first: 7.491e-02 second: 8.630e-02 infty: 1.661e-01 bias: -7.506e-11 P time: 895804 first: 7.537e-02 second: 8.681e-02 infty: 1.671e-01 bias: -1.836e-10 P time: 896464 first: 7.573e-02 second: 8.721e-02 infty: 1.679e-01 bias: -2.569e-11 P time: 897124 first: 7.598e-02 second: 8.749e-02 infty: 1.687e-01 bias: -6.289e-11 P time: 897784 first: 7.612e-02 second: 8.766e-02 infty: 1.692e-01 bias: -7.868e-11 P time: 898443 first: 7.613e-02 second: 8.769e-02 infty: 1.696e-01 bias: -9.882e-11 P time: 899103 first: 7.602e-02 second: 8.759e-02 infty: 1.699e-01 bias: -3.450e-11 P time: 899763 first: 7.580e-02 second: 8.737e-02 infty: 1.700e-01 bias: -1.061e-10 P time: 900423 first: 7.547e-02 second: 8.704e-02 infty: 1.699e-01 bias: -8.987e-11 P time: 901083 first: 7.503e-02 second: 8.659e-02 infty: 1.698e-01 bias: -7.717e-11 P time: 901742 first: 7.450e-02 second: 8.605e-02 infty: 1.695e-01 bias: -1.818e-10 P time: 902402 first: 7.390e-02 second: 8.543e-02 infty: 1.691e-01 bias: -8.947e-11 P time: 903062 first: 7.323e-02 second: 8.474e-02 infty: 1.687e-01 bias: 5.043e-12 P time: 903722 first: 7.252e-02 second: 8.402e-02 infty: 1.682e-01 bias: -3.223e-11 P time: 904383 first: 7.180e-02 second: 8.328e-02 infty: 1.677e-01 bias: -1.289e-10 P time: 905043 first: 7.108e-02 second: 8.254e-02 infty: 1.672e-01 bias: -5.421e-11 P time: 905703 first: 7.039e-02 second: 8.184e-02 infty: 1.668e-01 bias: -1.596e-10 P time: 906363 first: 6.974e-02 second: 8.119e-02 infty: 1.664e-01 bias: -1.516e-11 P time: 907023 first: 6.917e-02 second: 8.062e-02 infty: 1.662e-01 bias: -5.236e-11 P time: 907684 first: 6.868e-02 second: 8.014e-02 infty: 1.661e-01 bias: -3.423e-11 P time: 908344 first: 6.831e-02 second: 7.978e-02 infty: 1.662e-01 bias: -7.110e-11 P time: 909004 first: 6.805e-02 second: 7.954e-02 infty: 1.665e-01 bias: -6.882e-11 P time: 909664 first: 6.791e-02 second: 7.943e-02 infty: 1.669e-01 bias: -2.595e-11 P time: 910325 first: 6.790e-02 second: 7.945e-02 infty: 1.676e-01 bias: -8.123e-11 P time: 910985 first: 6.801e-02 second: 7.960e-02 infty: 1.684e-01 bias: -6.477e-11 P time: 911645 first: 6.823e-02 second: 7.987e-02 infty: 1.693e-01 bias: -7.708e-11 P time: 912305 first: 6.856e-02 second: 8.025e-02 infty: 1.704e-01 bias: -9.579e-11 P time: 912965 first: 6.898e-02 second: 8.071e-02 infty: 1.716e-01 bias: -6.488e-11 P time: 913625 first: 6.947e-02 second: 8.125e-02 infty: 1.729e-01 bias: -8.104e-11 P time: 914285 first: 7.003e-02 second: 8.183e-02 infty: 1.741e-01 bias: -8.652e-11 P time: 914945 first: 7.063e-02 second: 8.245e-02 infty: 1.754e-01 bias: -3.426e-11 P time: 915605 first: 7.127e-02 second: 8.309e-02 infty: 1.767e-01 bias: -1.056e-10 P time: 916265 first: 7.193e-02 second: 8.373e-02 infty: 1.778e-01 bias: -9.989e-11 P time: 916924 first: 7.260e-02 second: 8.435e-02 infty: 1.789e-01 bias: -3.559e-11 P time: 917584 first: 7.327e-02 second: 8.495e-02 infty: 1.799e-01 bias: -1.340e-10 P time: 918244 first: 7.393e-02 second: 8.551e-02 infty: 1.807e-01 bias: -4.516e-11 P time: 918903 first: 7.457e-02 second: 8.604e-02 infty: 1.814e-01 bias: -9.595e-11 P time: 919563 first: 7.519e-02 second: 8.652e-02 infty: 1.819e-01 bias: -1.082e-10 P time: 920222 first: 7.578e-02 second: 8.695e-02 infty: 1.823e-01 bias: -8.887e-11 P time: 920882 first: 7.633e-02 second: 8.734e-02 infty: 1.826e-01 bias: -4.970e-11 P time: 921541 first: 7.685e-02 second: 8.769e-02 infty: 1.828e-01 bias: -6.835e-11 P time: 922201 first: 7.732e-02 second: 8.799e-02 infty: 1.829e-01 bias: -1.015e-10 P time: 922861 first: 7.776e-02 second: 8.825e-02 infty: 1.830e-01 bias: -6.827e-11 P time: 923520 first: 7.814e-02 second: 8.846e-02 infty: 1.830e-01 bias: -6.183e-11 P time: 924180 first: 7.849e-02 second: 8.864e-02 infty: 1.830e-01 bias: -1.107e-10 P time: 924839 first: 7.879e-02 second: 8.879e-02 infty: 1.830e-01 bias: -1.295e-10 P time: 925499 first: 7.906e-02 second: 8.891e-02 infty: 1.831e-01 bias: -1.150e-10 P time: 926159 first: 7.929e-02 second: 8.900e-02 infty: 1.831e-01 bias: -6.572e-11 P time: 926819 first: 7.948e-02 second: 8.907e-02 infty: 1.833e-01 bias: -1.374e-10 P time: 927479 first: 7.964e-02 second: 8.911e-02 infty: 1.834e-01 bias: -1.075e-10 P time: 928139 first: 7.977e-02 second: 8.915e-02 infty: 1.836e-01 bias: -6.111e-11 P time: 928799 first: 7.987e-02 second: 8.916e-02 infty: 1.838e-01 bias: -6.213e-11 P time: 929459 first: 7.994e-02 second: 8.917e-02 infty: 1.841e-01 bias: -6.092e-11 P time: 930119 first: 7.997e-02 second: 8.916e-02 infty: 1.843e-01 bias: -3.786e-11 P time: 930779 first: 7.997e-02 second: 8.915e-02 infty: 1.846e-01 bias: -9.607e-11 P time: 931439 first: 7.995e-02 second: 8.912e-02 infty: 1.849e-01 bias: -8.403e-11 P time: 932099 first: 7.989e-02 second: 8.908e-02 infty: 1.852e-01 bias: -1.030e-11 P time: 932759 first: 7.978e-02 second: 8.902e-02 infty: 1.854e-01 bias: -1.237e-10 P time: 933420 first: 7.963e-02 second: 8.895e-02 infty: 1.856e-01 bias: -1.415e-10 P time: 934080 first: 7.945e-02 second: 8.886e-02 infty: 1.858e-01 bias: -1.352e-10 P time: 934740 first: 7.923e-02 second: 8.875e-02 infty: 1.860e-01 bias: -1.325e-10 P time: 935400 first: 7.898e-02 second: 8.861e-02 infty: 1.861e-01 bias: -9.068e-11 P time: 936061 first: 7.871e-02 second: 8.845e-02 infty: 1.861e-01 bias: -1.058e-10 P time: 936721 first: 7.842e-02 second: 8.826e-02 infty: 1.861e-01 bias: -3.735e-11 P time: 937381 first: 7.811e-02 second: 8.805e-02 infty: 1.860e-01 bias: -1.925e-11 P time: 938042 first: 7.781e-02 second: 8.781e-02 infty: 1.858e-01 bias: -2.888e-11 P time: 938702 first: 7.752e-02 second: 8.756e-02 infty: 1.856e-01 bias: -5.680e-11 P time: 939362 first: 7.724e-02 second: 8.731e-02 infty: 1.853e-01 bias: -6.859e-11 P time: 940023 first: 7.699e-02 second: 8.704e-02 infty: 1.849e-01 bias: -5.095e-11 P time: 940683 first: 7.678e-02 second: 8.678e-02 infty: 1.845e-01 bias: -1.015e-10 P time: 941344 first: 7.661e-02 second: 8.654e-02 infty: 1.840e-01 bias: -1.169e-10 P time: 942004 first: 7.650e-02 second: 8.632e-02 infty: 1.834e-01 bias: -7.451e-11 P time: 942665 first: 7.644e-02 second: 8.612e-02 infty: 1.829e-01 bias: -1.468e-10 P time: 943325 first: 7.644e-02 second: 8.597e-02 infty: 1.823e-01 bias: -2.915e-11 P time: 943986 first: 7.649e-02 second: 8.587e-02 infty: 1.816e-01 bias: -5.855e-11 P time: 944647 first: 7.661e-02 second: 8.584e-02 infty: 1.811e-01 bias: -1.106e-10 P time: 945308 first: 7.677e-02 second: 8.586e-02 infty: 1.805e-01 bias: -5.482e-11 P time: 945969 first: 7.699e-02 second: 8.597e-02 infty: 1.800e-01 bias: -1.315e-10 P time: 946630 first: 7.728e-02 second: 8.616e-02 infty: 1.796e-01 bias: -1.009e-10 P time: 947291 first: 7.762e-02 second: 8.643e-02 infty: 1.793e-01 bias: -8.436e-11 P time: 947952 first: 7.803e-02 second: 8.679e-02 infty: 1.792e-01 bias: -3.226e-11 P time: 948613 first: 7.851e-02 second: 8.723e-02 infty: 1.791e-01 bias: -6.771e-11 P time: 949275 first: 7.905e-02 second: 8.776e-02 infty: 1.793e-01 bias: -1.192e-10 P time: 949936 first: 7.964e-02 second: 8.835e-02 infty: 1.796e-01 bias: -2.528e-11 P time: 950597 first: 8.027e-02 second: 8.901e-02 infty: 1.800e-01 bias: -6.181e-11 P time: 951259 first: 8.094e-02 second: 8.971e-02 infty: 1.806e-01 bias: -5.193e-11 P time: 951920 first: 8.162e-02 second: 9.043e-02 infty: 1.813e-01 bias: -6.496e-11 P time: 952582 first: 8.229e-02 second: 9.116e-02 infty: 1.821e-01 bias: -1.186e-10 P time: 953244 first: 8.295e-02 second: 9.188e-02 infty: 1.830e-01 bias: -1.523e-10 P time: 953905 first: 8.357e-02 second: 9.255e-02 infty: 1.839e-01 bias: -1.163e-10 P time: 954567 first: 8.413e-02 second: 9.318e-02 infty: 1.847e-01 bias: -4.179e-11 P time: 955229 first: 8.462e-02 second: 9.372e-02 infty: 1.855e-01 bias: -8.202e-11 P time: 955891 first: 8.503e-02 second: 9.417e-02 infty: 1.862e-01 bias: -6.256e-11 P time: 956553 first: 8.534e-02 second: 9.450e-02 infty: 1.868e-01 bias: -1.011e-10 P time: 957215 first: 8.555e-02 second: 9.472e-02 infty: 1.872e-01 bias: -7.410e-11 P time: 957877 first: 8.564e-02 second: 9.481e-02 infty: 1.874e-01 bias: -5.022e-11 P time: 958539 first: 8.562e-02 second: 9.477e-02 infty: 1.873e-01 bias: -4.599e-11 P time: 959201 first: 8.550e-02 second: 9.460e-02 infty: 1.870e-01 bias: -1.145e-10 P time: 959864 first: 8.526e-02 second: 9.430e-02 infty: 1.865e-01 bias: -5.592e-11 P time: 960526 first: 8.493e-02 second: 9.389e-02 infty: 1.857e-01 bias: -8.698e-11 P time: 961189 first: 8.451e-02 second: 9.339e-02 infty: 1.847e-01 bias: -1.237e-11 P time: 961852 first: 8.402e-02 second: 9.280e-02 infty: 1.835e-01 bias: -9.803e-11 P time: 962515 first: 8.347e-02 second: 9.215e-02 infty: 1.822e-01 bias: -7.955e-11 P time: 963178 first: 8.288e-02 second: 9.147e-02 infty: 1.807e-01 bias: -8.910e-11 P time: 963841 first: 8.228e-02 second: 9.077e-02 infty: 1.791e-01 bias: -6.245e-11 P time: 964505 first: 8.168e-02 second: 9.008e-02 infty: 1.775e-01 bias: -1.045e-10 P time: 965168 first: 8.109e-02 second: 8.942e-02 infty: 1.759e-01 bias: -1.028e-10 P time: 965832 first: 8.055e-02 second: 8.883e-02 infty: 1.743e-01 bias: -8.405e-11 P time: 966496 first: 8.007e-02 second: 8.832e-02 infty: 1.727e-01 bias: -3.075e-12 P time: 967160 first: 7.967e-02 second: 8.791e-02 infty: 1.713e-01 bias: -7.408e-11 P time: 967824 first: 7.935e-02 second: 8.762e-02 infty: 1.699e-01 bias: -8.910e-11 P time: 968489 first: 7.913e-02 second: 8.746e-02 infty: 1.687e-01 bias: -1.403e-10 P time: 969153 first: 7.902e-02 second: 8.743e-02 infty: 1.677e-01 bias: -7.182e-11 P time: 969818 first: 7.901e-02 second: 8.753e-02 infty: 1.668e-01 bias: -9.936e-11 P time: 970483 first: 7.910e-02 second: 8.776e-02 infty: 1.661e-01 bias: -5.881e-11 P time: 971148 first: 7.929e-02 second: 8.811e-02 infty: 1.655e-01 bias: -5.967e-11 P time: 971813 first: 7.957e-02 second: 8.857e-02 infty: 1.652e-01 bias: -1.677e-11 P time: 972478 first: 7.993e-02 second: 8.911e-02 infty: 1.650e-01 bias: -5.879e-11 P time: 973143 first: 8.036e-02 second: 8.971e-02 infty: 1.649e-01 bias: -1.197e-10 P time: 973808 first: 8.083e-02 second: 9.036e-02 infty: 1.650e-01 bias: -9.710e-11 P time: 974474 first: 8.134e-02 second: 9.102e-02 infty: 1.652e-01 bias: -9.770e-11 P time: 975139 first: 8.187e-02 second: 9.168e-02 infty: 1.655e-01 bias: -9.815e-11 P time: 975804 first: 8.240e-02 second: 9.231e-02 infty: 1.659e-01 bias: -7.341e-11 P time: 976470 first: 8.292e-02 second: 9.291e-02 infty: 1.663e-01 bias: -6.192e-11 P time: 977135 first: 8.343e-02 second: 9.344e-02 infty: 1.667e-01 bias: -1.331e-10 P time: 977801 first: 8.389e-02 second: 9.390e-02 infty: 1.671e-01 bias: -3.623e-11 P time: 978467 first: 8.432e-02 second: 9.429e-02 infty: 1.674e-01 bias: -1.181e-10 P time: 979132 first: 8.470e-02 second: 9.459e-02 infty: 1.677e-01 bias: -7.338e-11 P time: 979798 first: 8.503e-02 second: 9.481e-02 infty: 1.678e-01 bias: -1.224e-10 P time: 980464 first: 8.531e-02 second: 9.495e-02 infty: 1.678e-01 bias: -9.255e-11 P time: 981130 first: 8.553e-02 second: 9.501e-02 infty: 1.677e-01 bias: -4.417e-11 P time: 981796 first: 8.570e-02 second: 9.501e-02 infty: 1.673e-01 bias: -4.387e-11 P time: 982462 first: 8.581e-02 second: 9.495e-02 infty: 1.668e-01 bias: -1.001e-10 P time: 983129 first: 8.588e-02 second: 9.483e-02 infty: 1.662e-01 bias: -6.831e-11 P time: 983795 first: 8.590e-02 second: 9.468e-02 infty: 1.653e-01 bias: -4.255e-11 P time: 984462 first: 8.588e-02 second: 9.449e-02 infty: 1.644e-01 bias: -7.672e-11 P time: 985129 first: 8.583e-02 second: 9.429e-02 infty: 1.632e-01 bias: -8.641e-11 P time: 985796 first: 8.574e-02 second: 9.408e-02 infty: 1.620e-01 bias: -1.256e-10 P time: 986463 first: 8.562e-02 second: 9.387e-02 infty: 1.607e-01 bias: -8.261e-11 P time: 987131 first: 8.549e-02 second: 9.367e-02 infty: 1.593e-01 bias: -1.132e-10 P time: 987798 first: 8.534e-02 second: 9.348e-02 infty: 1.580e-01 bias: -1.086e-10 P time: 988466 first: 8.517e-02 second: 9.331e-02 infty: 1.566e-01 bias: -5.900e-11 P time: 989134 first: 8.499e-02 second: 9.317e-02 infty: 1.553e-01 bias: -8.934e-11 P time: 989802 first: 8.480e-02 second: 9.306e-02 infty: 1.540e-01 bias: -1.280e-10 P time: 990471 first: 8.460e-02 second: 9.298e-02 infty: 1.528e-01 bias: -8.064e-11 P time: 991140 first: 8.439e-02 second: 9.292e-02 infty: 1.516e-01 bias: -7.675e-11 P time: 991809 first: 8.418e-02 second: 9.289e-02 infty: 1.506e-01 bias: -1.103e-10 P time: 992478 first: 8.395e-02 second: 9.289e-02 infty: 1.496e-01 bias: -3.053e-11 P time: 993147 first: 8.372e-02 second: 9.290e-02 infty: 1.487e-01 bias: -1.088e-10 P time: 993816 first: 8.347e-02 second: 9.292e-02 infty: 1.479e-01 bias: -8.705e-11 P time: 994486 first: 8.321e-02 second: 9.295e-02 infty: 1.470e-01 bias: -1.175e-10 P time: 995156 first: 8.294e-02 second: 9.297e-02 infty: 1.462e-01 bias: -5.397e-11 P time: 995826 first: 8.266e-02 second: 9.298e-02 infty: 1.460e-01 bias: -7.686e-11 P time: 996496 first: 8.239e-02 second: 9.298e-02 infty: 1.465e-01 bias: -1.045e-10 P time: 997167 first: 8.211e-02 second: 9.294e-02 infty: 1.469e-01 bias: -7.735e-11 P time: 997837 first: 8.184e-02 second: 9.288e-02 infty: 1.472e-01 bias: -8.999e-11 P time: 998508 first: 8.159e-02 second: 9.278e-02 infty: 1.473e-01 bias: -6.915e-11 P time: 999179 first: 8.137e-02 second: 9.265e-02 infty: 1.473e-01 bias: -1.187e-10 P time: 999850 first: 8.117e-02 second: 9.250e-02 infty: 1.472e-01 bias: -1.704e-11 P time: 1.00052e+06 first: 8.102e-02 second: 9.231e-02 infty: 1.469e-01 bias: -4.717e-11 P time: 1.00119e+06 first: 8.090e-02 second: 9.211e-02 infty: 1.465e-01 bias: -7.655e-11 P time: 1.00186e+06 first: 8.081e-02 second: 9.190e-02 infty: 1.459e-01 bias: -4.900e-11 P time: 1.00254e+06 first: 8.076e-02 second: 9.170e-02 infty: 1.453e-01 bias: -7.121e-11 P time: 1.00321e+06 first: 8.073e-02 second: 9.151e-02 infty: 1.446e-01 bias: -1.315e-10 P time: 1.00388e+06 first: 8.072e-02 second: 9.135e-02 infty: 1.438e-01 bias: -1.309e-10 P time: 1.00455e+06 first: 8.075e-02 second: 9.123e-02 infty: 1.431e-01 bias: -4.703e-11 P time: 1.00522e+06 first: 8.081e-02 second: 9.116e-02 infty: 1.425e-01 bias: -1.183e-10 P time: 1.0059e+06 first: 8.091e-02 second: 9.115e-02 infty: 1.420e-01 bias: -8.198e-11 P time: 1.00657e+06 first: 8.105e-02 second: 9.122e-02 infty: 1.416e-01 bias: -3.573e-11 P time: 1.00724e+06 first: 8.123e-02 second: 9.137e-02 infty: 1.414e-01 bias: -4.879e-11 P time: 1.00791e+06 first: 8.146e-02 second: 9.159e-02 infty: 1.414e-01 bias: -1.178e-10 P time: 1.00859e+06 first: 8.175e-02 second: 9.190e-02 infty: 1.415e-01 bias: -8.734e-11 P time: 1.00926e+06 first: 8.210e-02 second: 9.229e-02 infty: 1.419e-01 bias: -1.432e-10 P time: 1.00993e+06 first: 8.251e-02 second: 9.275e-02 infty: 1.425e-01 bias: -8.465e-11 P time: 1.01061e+06 first: 8.296e-02 second: 9.328e-02 infty: 1.433e-01 bias: -6.189e-11 P time: 1.01128e+06 first: 8.346e-02 second: 9.385e-02 infty: 1.442e-01 bias: -7.599e-11 P time: 1.01196e+06 first: 8.400e-02 second: 9.446e-02 infty: 1.452e-01 bias: -1.018e-10 P time: 1.01263e+06 first: 8.455e-02 second: 9.509e-02 infty: 1.463e-01 bias: -1.385e-10 P time: 1.01331e+06 first: 8.510e-02 second: 9.572e-02 infty: 1.474e-01 bias: -2.254e-11 P time: 1.01398e+06 first: 8.564e-02 second: 9.631e-02 infty: 1.485e-01 bias: -2.976e-11 P time: 1.01465e+06 first: 8.615e-02 second: 9.687e-02 infty: 1.496e-01 bias: -4.301e-11 P time: 1.01533e+06 first: 8.660e-02 second: 9.735e-02 infty: 1.505e-01 bias: -1.415e-10 P time: 1.016e+06 first: 8.698e-02 second: 9.775e-02 infty: 1.512e-01 bias: -7.903e-11 P time: 1.01668e+06 first: 8.727e-02 second: 9.805e-02 infty: 1.518e-01 bias: -4.939e-11 P time: 1.01736e+06 first: 8.745e-02 second: 9.823e-02 infty: 1.522e-01 bias: -5.998e-11 P time: 1.01803e+06 first: 8.751e-02 second: 9.828e-02 infty: 1.523e-01 bias: -7.010e-11 P time: 1.01871e+06 first: 8.745e-02 second: 9.820e-02 infty: 1.522e-01 bias: -7.801e-11 P time: 1.01938e+06 first: 8.727e-02 second: 9.799e-02 infty: 1.518e-01 bias: -5.741e-11 P time: 1.02006e+06 first: 8.696e-02 second: 9.765e-02 infty: 1.513e-01 bias: -1.313e-10 P time: 1.02073e+06 first: 8.653e-02 second: 9.720e-02 infty: 1.505e-01 bias: -8.149e-11 P time: 1.02141e+06 first: 8.600e-02 second: 9.664e-02 infty: 1.495e-01 bias: -3.905e-11 P time: 1.02209e+06 first: 8.538e-02 second: 9.600e-02 infty: 1.484e-01 bias: -4.867e-11 P time: 1.02276e+06 first: 8.469e-02 second: 9.529e-02 infty: 1.472e-01 bias: -5.135e-11 P time: 1.02344e+06 first: 8.396e-02 second: 9.455e-02 infty: 1.459e-01 bias: -8.818e-11 P time: 1.02412e+06 first: 8.321e-02 second: 9.380e-02 infty: 1.446e-01 bias: -8.283e-11 P time: 1.0248e+06 first: 8.246e-02 second: 9.306e-02 infty: 1.433e-01 bias: -8.815e-11 P time: 1.02547e+06 first: 8.175e-02 second: 9.238e-02 infty: 1.424e-01 bias: -5.702e-11 P time: 1.02615e+06 first: 8.109e-02 second: 9.176e-02 infty: 1.421e-01 bias: -6.685e-11 P time: 1.02683e+06 first: 8.053e-02 second: 9.125e-02 infty: 1.420e-01 bias: -1.068e-10 P time: 1.02751e+06 first: 8.007e-02 second: 9.085e-02 infty: 1.420e-01 bias: -4.510e-11 P time: 1.02819e+06 first: 7.973e-02 second: 9.058e-02 infty: 1.422e-01 bias: -8.295e-11 P time: 1.02887e+06 first: 7.952e-02 second: 9.045e-02 infty: 1.426e-01 bias: -3.939e-11 P time: 1.02955e+06 first: 7.944e-02 second: 9.047e-02 infty: 1.432e-01 bias: -3.824e-11 P time: 1.03023e+06 first: 7.949e-02 second: 9.064e-02 infty: 1.439e-01 bias: -1.351e-10 P time: 1.03091e+06 first: 7.967e-02 second: 9.094e-02 infty: 1.448e-01 bias: -7.354e-11 P time: 1.03159e+06 first: 7.997e-02 second: 9.136e-02 infty: 1.458e-01 bias: -1.266e-10 P time: 1.03227e+06 first: 8.037e-02 second: 9.189e-02 infty: 1.469e-01 bias: -8.139e-11 P time: 1.03295e+06 first: 8.084e-02 second: 9.249e-02 infty: 1.481e-01 bias: -7.999e-11 P time: 1.03363e+06 first: 8.138e-02 second: 9.316e-02 infty: 1.493e-01 bias: -9.607e-11 P time: 1.03431e+06 first: 8.196e-02 second: 9.385e-02 infty: 1.506e-01 bias: -5.328e-11 P time: 1.03499e+06 first: 8.255e-02 second: 9.455e-02 infty: 1.518e-01 bias: -1.272e-10 P time: 1.03567e+06 first: 8.314e-02 second: 9.523e-02 infty: 1.529e-01 bias: -8.051e-11 P time: 1.03635e+06 first: 8.371e-02 second: 9.587e-02 infty: 1.538e-01 bias: -9.337e-11 P time: 1.03703e+06 first: 8.424e-02 second: 9.645e-02 infty: 1.546e-01 bias: -5.299e-11 P time: 1.03772e+06 first: 8.472e-02 second: 9.694e-02 infty: 1.552e-01 bias: -7.402e-11 P time: 1.0384e+06 first: 8.512e-02 second: 9.734e-02 infty: 1.557e-01 bias: -1.383e-10 P time: 1.03908e+06 first: 8.546e-02 second: 9.763e-02 infty: 1.559e-01 bias: -4.400e-11 P time: 1.03976e+06 first: 8.571e-02 second: 9.782e-02 infty: 1.559e-01 bias: -4.024e-11 P time: 1.04044e+06 first: 8.589e-02 second: 9.791e-02 infty: 1.558e-01 bias: -1.453e-10 P time: 1.04113e+06 first: 8.600e-02 second: 9.789e-02 infty: 1.555e-01 bias: 4.647e-11 P time: 1.04181e+06 first: 8.603e-02 second: 9.778e-02 infty: 1.551e-01 bias: -5.800e-11 P time: 1.04249e+06 first: 8.600e-02 second: 9.759e-02 infty: 1.547e-01 bias: -1.103e-10 P time: 1.04318e+06 first: 8.591e-02 second: 9.734e-02 infty: 1.541e-01 bias: -1.767e-11 P time: 1.04386e+06 first: 8.579e-02 second: 9.703e-02 infty: 1.536e-01 bias: -1.176e-10 P time: 1.04454e+06 first: 8.563e-02 second: 9.669e-02 infty: 1.531e-01 bias: -1.182e-10 P time: 1.04523e+06 first: 8.545e-02 second: 9.634e-02 infty: 1.526e-01 bias: -3.569e-11 P time: 1.04591e+06 first: 8.525e-02 second: 9.598e-02 infty: 1.521e-01 bias: -1.694e-10 P time: 1.0466e+06 first: 8.506e-02 second: 9.564e-02 infty: 1.518e-01 bias: -1.055e-10 P time: 1.04728e+06 first: 8.487e-02 second: 9.533e-02 infty: 1.516e-01 bias: -6.144e-11 P time: 1.04796e+06 first: 8.468e-02 second: 9.505e-02 infty: 1.515e-01 bias: -7.069e-11 P time: 1.04865e+06 first: 8.452e-02 second: 9.483e-02 infty: 1.515e-01 bias: -8.061e-11 P time: 1.04934e+06 first: 8.437e-02 second: 9.465e-02 infty: 1.516e-01 bias: -4.932e-11 P time: 1.05002e+06 first: 8.424e-02 second: 9.454e-02 infty: 1.518e-01 bias: -7.759e-12 P time: 1.05071e+06 first: 8.413e-02 second: 9.448e-02 infty: 1.521e-01 bias: -9.132e-11 P time: 1.05139e+06 first: 8.404e-02 second: 9.448e-02 infty: 1.525e-01 bias: -1.027e-10 P time: 1.05208e+06 first: 8.397e-02 second: 9.453e-02 infty: 1.529e-01 bias: -1.409e-10 P time: 1.05277e+06 first: 8.392e-02 second: 9.463e-02 infty: 1.533e-01 bias: -7.112e-11 P time: 1.05345e+06 first: 8.390e-02 second: 9.478e-02 infty: 1.537e-01 bias: -1.579e-10 P time: 1.05414e+06 first: 8.389e-02 second: 9.496e-02 infty: 1.541e-01 bias: -1.209e-10 P time: 1.05483e+06 first: 8.390e-02 second: 9.517e-02 infty: 1.545e-01 bias: -1.030e-10 P time: 1.05551e+06 first: 8.392e-02 second: 9.539e-02 infty: 1.549e-01 bias: -7.580e-11 P time: 1.0562e+06 first: 8.396e-02 second: 9.562e-02 infty: 1.552e-01 bias: -7.003e-11 P time: 1.05689e+06 first: 8.402e-02 second: 9.585e-02 infty: 1.556e-01 bias: -1.102e-10 P time: 1.05757e+06 first: 8.411e-02 second: 9.607e-02 infty: 1.558e-01 bias: -8.887e-11 P time: 1.05826e+06 first: 8.423e-02 second: 9.626e-02 infty: 1.560e-01 bias: -6.131e-11 P time: 1.05895e+06 first: 8.436e-02 second: 9.642e-02 infty: 1.560e-01 bias: -1.057e-10 P time: 1.05964e+06 first: 8.453e-02 second: 9.656e-02 infty: 1.560e-01 bias: -6.995e-11 P time: 1.06032e+06 first: 8.471e-02 second: 9.665e-02 infty: 1.558e-01 bias: -1.113e-10 P time: 1.06101e+06 first: 8.491e-02 second: 9.671e-02 infty: 1.557e-01 bias: -1.269e-10 P time: 1.0617e+06 first: 8.511e-02 second: 9.673e-02 infty: 1.554e-01 bias: -2.377e-11 P time: 1.06238e+06 first: 8.530e-02 second: 9.672e-02 infty: 1.551e-01 bias: -6.467e-11 P time: 1.06307e+06 first: 8.548e-02 second: 9.669e-02 infty: 1.547e-01 bias: -1.221e-10 P time: 1.06376e+06 first: 8.565e-02 second: 9.665e-02 infty: 1.542e-01 bias: -6.323e-11 P time: 1.06445e+06 first: 8.581e-02 second: 9.660e-02 infty: 1.537e-01 bias: -7.425e-11 P time: 1.06513e+06 first: 8.596e-02 second: 9.656e-02 infty: 1.532e-01 bias: -8.781e-11 P time: 1.06582e+06 first: 8.611e-02 second: 9.653e-02 infty: 1.527e-01 bias: -1.137e-10 P time: 1.06651e+06 first: 8.625e-02 second: 9.653e-02 infty: 1.523e-01 bias: -9.098e-11 P time: 1.0672e+06 first: 8.640e-02 second: 9.657e-02 infty: 1.520e-01 bias: -1.221e-10 P time: 1.06789e+06 first: 8.657e-02 second: 9.665e-02 infty: 1.518e-01 bias: -5.794e-11 P time: 1.06857e+06 first: 8.675e-02 second: 9.678e-02 infty: 1.517e-01 bias: -1.005e-11 P time: 1.06926e+06 first: 8.695e-02 second: 9.695e-02 infty: 1.518e-01 bias: -8.386e-11 P time: 1.06995e+06 first: 8.717e-02 second: 9.717e-02 infty: 1.521e-01 bias: -5.995e-11 P time: 1.07064e+06 first: 8.741e-02 second: 9.744e-02 infty: 1.525e-01 bias: -8.000e-11 P time: 1.07133e+06 first: 8.765e-02 second: 9.774e-02 infty: 1.530e-01 bias: -1.284e-10 P time: 1.07202e+06 first: 8.791e-02 second: 9.808e-02 infty: 1.537e-01 bias: -5.305e-11 P time: 1.0727e+06 first: 8.816e-02 second: 9.843e-02 infty: 1.544e-01 bias: -9.380e-11 P time: 1.07339e+06 first: 8.841e-02 second: 9.878e-02 infty: 1.552e-01 bias: -5.762e-11 P time: 1.07408e+06 first: 8.865e-02 second: 9.912e-02 infty: 1.560e-01 bias: -6.890e-11 P time: 1.07477e+06 first: 8.886e-02 second: 9.944e-02 infty: 1.568e-01 bias: -6.728e-11 P time: 1.07546e+06 first: 8.903e-02 second: 9.972e-02 infty: 1.575e-01 bias: -1.096e-10 P time: 1.07615e+06 first: 8.915e-02 second: 9.994e-02 infty: 1.581e-01 bias: -8.375e-11 P time: 1.07684e+06 first: 8.922e-02 second: 1.001e-01 infty: 1.585e-01 bias: -8.028e-11 P time: 1.07753e+06 first: 8.923e-02 second: 1.002e-01 infty: 1.587e-01 bias: -8.260e-11 P time: 1.07821e+06 first: 8.916e-02 second: 1.001e-01 infty: 1.587e-01 bias: -4.217e-11 P time: 1.0789e+06 first: 8.902e-02 second: 1.000e-01 infty: 1.585e-01 bias: -3.610e-11 P time: 1.07959e+06 first: 8.881e-02 second: 9.982e-02 infty: 1.580e-01 bias: -4.587e-11 P time: 1.08028e+06 first: 8.852e-02 second: 9.953e-02 infty: 1.574e-01 bias: -9.213e-11 P time: 1.08097e+06 first: 8.817e-02 second: 9.915e-02 infty: 1.565e-01 bias: 2.704e-12 P time: 1.08165e+06 first: 8.778e-02 second: 9.870e-02 infty: 1.555e-01 bias: -7.583e-11 P time: 1.08234e+06 first: 8.734e-02 second: 9.820e-02 infty: 1.544e-01 bias: -3.008e-11 P time: 1.08303e+06 first: 8.689e-02 second: 9.767e-02 infty: 1.532e-01 bias: -5.079e-11 P time: 1.08372e+06 first: 8.644e-02 second: 9.713e-02 infty: 1.519e-01 bias: -5.141e-11 P time: 1.08441e+06 first: 8.602e-02 second: 9.661e-02 infty: 1.507e-01 bias: -8.519e-11 P time: 1.08509e+06 first: 8.564e-02 second: 9.614e-02 infty: 1.496e-01 bias: -2.936e-11 P time: 1.08578e+06 first: 8.532e-02 second: 9.573e-02 infty: 1.485e-01 bias: -8.007e-11 P time: 1.08647e+06 first: 8.508e-02 second: 9.541e-02 infty: 1.477e-01 bias: -6.982e-12 P time: 1.08716e+06 first: 8.493e-02 second: 9.520e-02 infty: 1.470e-01 bias: -3.442e-11 P time: 1.08785e+06 first: 8.487e-02 second: 9.512e-02 infty: 1.464e-01 bias: -5.404e-11 P time: 1.08853e+06 first: 8.491e-02 second: 9.516e-02 infty: 1.460e-01 bias: -1.082e-10 P time: 1.08922e+06 first: 8.509e-02 second: 9.533e-02 infty: 1.457e-01 bias: -1.468e-10 P time: 1.08991e+06 first: 8.539e-02 second: 9.562e-02 infty: 1.456e-01 bias: -4.579e-11 P time: 1.0906e+06 first: 8.578e-02 second: 9.603e-02 infty: 1.455e-01 bias: -9.314e-11 P time: 1.09129e+06 first: 8.625e-02 second: 9.655e-02 infty: 1.456e-01 bias: -3.844e-11 P time: 1.09197e+06 first: 8.679e-02 second: 9.715e-02 infty: 1.458e-01 bias: -5.425e-11 P time: 1.09266e+06 first: 8.738e-02 second: 9.781e-02 infty: 1.461e-01 bias: -9.738e-11 P time: 1.09335e+06 first: 8.800e-02 second: 9.851e-02 infty: 1.464e-01 bias: -4.624e-11 P time: 1.09404e+06 first: 8.865e-02 second: 9.923e-02 infty: 1.469e-01 bias: -4.576e-11 P time: 1.09473e+06 first: 8.930e-02 second: 9.994e-02 infty: 1.473e-01 bias: -8.916e-11 P time: 1.09541e+06 first: 8.993e-02 second: 1.006e-01 infty: 1.476e-01 bias: -8.971e-11 P time: 1.0961e+06 first: 9.052e-02 second: 1.013e-01 infty: 1.480e-01 bias: -4.603e-11 P time: 1.09679e+06 first: 9.107e-02 second: 1.018e-01 infty: 1.482e-01 bias: -1.298e-10 P time: 1.09748e+06 first: 9.156e-02 second: 1.023e-01 infty: 1.484e-01 bias: -2.935e-11 P time: 1.09816e+06 first: 9.198e-02 second: 1.027e-01 infty: 1.485e-01 bias: -9.097e-11 P time: 1.09885e+06 first: 9.231e-02 second: 1.030e-01 infty: 1.485e-01 bias: -1.005e-10 P time: 1.09954e+06 first: 9.255e-02 second: 1.032e-01 infty: 1.484e-01 bias: -1.458e-10 P time: 1.10022e+06 first: 9.271e-02 second: 1.033e-01 infty: 1.485e-01 bias: -8.639e-11 P time: 1.10091e+06 first: 9.278e-02 second: 1.033e-01 infty: 1.486e-01 bias: -6.378e-11 P time: 1.1016e+06 first: 9.276e-02 second: 1.032e-01 infty: 1.486e-01 bias: -1.122e-10 P time: 1.10228e+06 first: 9.267e-02 second: 1.030e-01 infty: 1.483e-01 bias: -9.492e-11 P time: 1.10297e+06 first: 9.250e-02 second: 1.027e-01 infty: 1.479e-01 bias: -6.612e-11 P time: 1.10365e+06 first: 9.228e-02 second: 1.024e-01 infty: 1.474e-01 bias: -7.180e-11 P time: 1.10434e+06 first: 9.201e-02 second: 1.020e-01 infty: 1.468e-01 bias: -6.707e-11 P time: 1.10502e+06 first: 9.169e-02 second: 1.016e-01 infty: 1.462e-01 bias: -8.263e-11 P time: 1.10571e+06 first: 9.135e-02 second: 1.011e-01 infty: 1.457e-01 bias: -1.263e-10 P time: 1.10639e+06 first: 9.100e-02 second: 1.007e-01 infty: 1.453e-01 bias: -7.029e-11 P time: 1.10708e+06 first: 9.065e-02 second: 1.003e-01 infty: 1.449e-01 bias: -1.638e-11 P time: 1.10776e+06 first: 9.031e-02 second: 9.993e-02 infty: 1.447e-01 bias: -7.147e-11 P time: 1.10845e+06 first: 8.999e-02 second: 9.961e-02 infty: 1.446e-01 bias: -7.700e-11 P time: 1.10913e+06 first: 8.969e-02 second: 9.934e-02 infty: 1.447e-01 bias: -1.327e-10 P time: 1.10982e+06 first: 8.941e-02 second: 9.913e-02 infty: 1.450e-01 bias: -6.631e-11 P time: 1.1105e+06 first: 8.917e-02 second: 9.898e-02 infty: 1.455e-01 bias: -1.203e-10 P time: 1.11119e+06 first: 8.896e-02 second: 9.889e-02 infty: 1.461e-01 bias: -5.154e-11 P time: 1.11187e+06 first: 8.879e-02 second: 9.887e-02 infty: 1.468e-01 bias: -1.625e-10 P time: 1.11255e+06 first: 8.866e-02 second: 9.891e-02 infty: 1.477e-01 bias: -9.087e-11 P time: 1.11324e+06 first: 8.855e-02 second: 9.901e-02 infty: 1.487e-01 bias: -6.355e-11 P time: 1.11392e+06 first: 8.849e-02 second: 9.916e-02 infty: 1.498e-01 bias: -9.295e-11 P time: 1.1146e+06 first: 8.848e-02 second: 9.936e-02 infty: 1.509e-01 bias: -1.240e-10 P time: 1.11529e+06 first: 8.852e-02 second: 9.959e-02 infty: 1.520e-01 bias: -1.359e-11 P time: 1.11597e+06 first: 8.861e-02 second: 9.985e-02 infty: 1.531e-01 bias: -6.686e-11 P time: 1.11665e+06 first: 8.875e-02 second: 1.001e-01 infty: 1.541e-01 bias: -1.315e-10 P time: 1.11734e+06 first: 8.894e-02 second: 1.004e-01 infty: 1.550e-01 bias: -1.886e-11 P time: 1.11802e+06 first: 8.918e-02 second: 1.007e-01 infty: 1.558e-01 bias: -5.499e-11 P time: 1.1187e+06 first: 8.946e-02 second: 1.010e-01 infty: 1.564e-01 bias: -1.429e-10 P time: 1.11938e+06 first: 8.977e-02 second: 1.013e-01 infty: 1.570e-01 bias: -6.672e-11 P time: 1.12006e+06 first: 9.011e-02 second: 1.016e-01 infty: 1.574e-01 bias: -5.342e-11 P time: 1.12075e+06 first: 9.047e-02 second: 1.018e-01 infty: 1.577e-01 bias: -6.440e-11 P time: 1.12143e+06 first: 9.081e-02 second: 1.020e-01 infty: 1.579e-01 bias: -8.296e-11 P time: 1.12211e+06 first: 9.113e-02 second: 1.022e-01 infty: 1.580e-01 bias: -1.133e-10 P time: 1.12279e+06 first: 9.141e-02 second: 1.024e-01 infty: 1.580e-01 bias: -1.406e-11 P time: 1.12347e+06 first: 9.164e-02 second: 1.025e-01 infty: 1.580e-01 bias: -1.233e-10 P time: 1.12415e+06 first: 9.184e-02 second: 1.026e-01 infty: 1.580e-01 bias: -6.949e-11 P time: 1.12483e+06 first: 9.201e-02 second: 1.027e-01 infty: 1.580e-01 bias: -1.699e-10 P time: 1.12551e+06 first: 9.214e-02 second: 1.028e-01 infty: 1.579e-01 bias: -8.840e-11 P time: 1.1262e+06 first: 9.223e-02 second: 1.029e-01 infty: 1.579e-01 bias: -1.331e-10 P time: 1.12688e+06 first: 9.230e-02 second: 1.030e-01 infty: 1.581e-01 bias: -3.161e-11 P time: 1.12756e+06 first: 9.236e-02 second: 1.031e-01 infty: 1.583e-01 bias: -1.293e-10 P time: 1.12824e+06 first: 9.240e-02 second: 1.031e-01 infty: 1.586e-01 bias: -3.818e-11 P time: 1.12892e+06 first: 9.245e-02 second: 1.032e-01 infty: 1.589e-01 bias: -8.812e-11 P time: 1.1296e+06 first: 9.250e-02 second: 1.033e-01 infty: 1.592e-01 bias: -6.956e-11 P time: 1.13027e+06 first: 9.254e-02 second: 1.035e-01 infty: 1.596e-01 bias: -9.938e-11 P time: 1.13095e+06 first: 9.259e-02 second: 1.036e-01 infty: 1.600e-01 bias: -6.804e-11 P time: 1.13163e+06 first: 9.263e-02 second: 1.037e-01 infty: 1.604e-01 bias: -1.134e-10 P time: 1.13231e+06 first: 9.266e-02 second: 1.038e-01 infty: 1.609e-01 bias: -9.662e-11 P time: 1.13299e+06 first: 9.268e-02 second: 1.039e-01 infty: 1.614e-01 bias: -1.156e-10 P time: 1.13367e+06 first: 9.268e-02 second: 1.040e-01 infty: 1.619e-01 bias: -3.161e-11 P time: 1.13435e+06 first: 9.266e-02 second: 1.040e-01 infty: 1.624e-01 bias: -1.025e-10 P time: 1.13503e+06 first: 9.261e-02 second: 1.040e-01 infty: 1.629e-01 bias: -1.469e-10 P time: 1.13571e+06 first: 9.253e-02 second: 1.040e-01 infty: 1.634e-01 bias: -8.873e-11 P time: 1.13638e+06 first: 9.241e-02 second: 1.039e-01 infty: 1.639e-01 bias: -1.332e-10 P time: 1.13706e+06 first: 9.226e-02 second: 1.038e-01 infty: 1.643e-01 bias: -8.520e-11 P time: 1.13774e+06 first: 9.206e-02 second: 1.036e-01 infty: 1.646e-01 bias: -9.425e-11 P time: 1.13842e+06 first: 9.182e-02 second: 1.034e-01 infty: 1.649e-01 bias: -1.109e-10 P time: 1.13909e+06 first: 9.155e-02 second: 1.032e-01 infty: 1.651e-01 bias: -8.209e-11 P time: 1.13977e+06 first: 9.125e-02 second: 1.029e-01 infty: 1.651e-01 bias: -1.146e-10 P time: 1.14045e+06 first: 9.093e-02 second: 1.026e-01 infty: 1.651e-01 bias: -1.136e-10 P time: 1.14112e+06 first: 9.059e-02 second: 1.022e-01 infty: 1.650e-01 bias: -4.223e-11 P time: 1.1418e+06 first: 9.025e-02 second: 1.019e-01 infty: 1.648e-01 bias: -2.306e-11 P time: 1.14247e+06 first: 8.992e-02 second: 1.016e-01 infty: 1.645e-01 bias: -6.839e-11 P time: 1.14315e+06 first: 8.961e-02 second: 1.012e-01 infty: 1.642e-01 bias: -9.798e-11 P time: 1.14382e+06 first: 8.935e-02 second: 1.010e-01 infty: 1.638e-01 bias: -1.600e-11 P time: 1.1445e+06 first: 8.914e-02 second: 1.007e-01 infty: 1.634e-01 bias: -6.772e-11 P time: 1.14517e+06 first: 8.898e-02 second: 1.006e-01 infty: 1.630e-01 bias: -7.002e-11 P time: 1.14585e+06 first: 8.890e-02 second: 1.005e-01 infty: 1.628e-01 bias: -6.279e-11 P time: 1.14652e+06 first: 8.894e-02 second: 1.005e-01 infty: 1.628e-01 bias: -1.049e-10 P time: 1.14719e+06 first: 8.906e-02 second: 1.007e-01 infty: 1.628e-01 bias: 2.145e-11 P time: 1.14787e+06 first: 8.928e-02 second: 1.009e-01 infty: 1.630e-01 bias: -4.286e-11 P time: 1.14854e+06 first: 8.958e-02 second: 1.012e-01 infty: 1.633e-01 bias: -1.184e-10 P time: 1.14922e+06 first: 9.000e-02 second: 1.017e-01 infty: 1.637e-01 bias: -1.193e-10 P time: 1.14989e+06 first: 9.048e-02 second: 1.022e-01 infty: 1.643e-01 bias: -5.083e-11 P time: 1.15056e+06 first: 9.103e-02 second: 1.028e-01 infty: 1.649e-01 bias: -5.449e-11 P time: 1.15124e+06 first: 9.163e-02 second: 1.034e-01 infty: 1.657e-01 bias: -1.227e-10 P time: 1.15191e+06 first: 9.226e-02 second: 1.041e-01 infty: 1.665e-01 bias: -3.601e-11 P time: 1.15258e+06 first: 9.290e-02 second: 1.048e-01 infty: 1.674e-01 bias: -4.005e-12 P time: 1.15326e+06 first: 9.354e-02 second: 1.055e-01 infty: 1.683e-01 bias: -5.509e-12 P time: 1.15393e+06 first: 9.415e-02 second: 1.061e-01 infty: 1.693e-01 bias: -5.737e-11 P time: 1.1546e+06 first: 9.471e-02 second: 1.067e-01 infty: 1.702e-01 bias: -8.821e-11 P time: 1.15527e+06 first: 9.522e-02 second: 1.072e-01 infty: 1.710e-01 bias: -1.387e-10 P time: 1.15595e+06 first: 9.566e-02 second: 1.077e-01 infty: 1.717e-01 bias: -9.091e-11 P time: 1.15662e+06 first: 9.601e-02 second: 1.080e-01 infty: 1.723e-01 bias: -1.319e-10 P time: 1.15729e+06 first: 9.628e-02 second: 1.083e-01 infty: 1.728e-01 bias: -6.478e-11 P time: 1.15796e+06 first: 9.646e-02 second: 1.084e-01 infty: 1.730e-01 bias: -3.373e-11 P time: 1.15864e+06 first: 9.655e-02 second: 1.085e-01 infty: 1.731e-01 bias: -9.932e-11 P time: 1.15931e+06 first: 9.653e-02 second: 1.084e-01 infty: 1.730e-01 bias: -7.562e-11 P time: 1.15998e+06 first: 9.643e-02 second: 1.083e-01 infty: 1.727e-01 bias: -8.951e-11 P time: 1.16065e+06 first: 9.623e-02 second: 1.080e-01 infty: 1.723e-01 bias: -3.513e-11 P time: 1.16132e+06 first: 9.596e-02 second: 1.077e-01 infty: 1.718e-01 bias: -7.313e-11 P time: 1.16199e+06 first: 9.561e-02 second: 1.072e-01 infty: 1.711e-01 bias: -6.395e-11 P time: 1.16266e+06 first: 9.520e-02 second: 1.068e-01 infty: 1.704e-01 bias: -8.369e-11 P time: 1.16333e+06 first: 9.473e-02 second: 1.063e-01 infty: 1.696e-01 bias: -5.013e-11 P time: 1.164e+06 first: 9.423e-02 second: 1.057e-01 infty: 1.688e-01 bias: -4.213e-11 P time: 1.16467e+06 first: 9.371e-02 second: 1.052e-01 infty: 1.680e-01 bias: -2.207e-11 P time: 1.16534e+06 first: 9.318e-02 second: 1.046e-01 infty: 1.673e-01 bias: -1.097e-10 P time: 1.16601e+06 first: 9.266e-02 second: 1.041e-01 infty: 1.666e-01 bias: -8.010e-11 P time: 1.16668e+06 first: 9.216e-02 second: 1.036e-01 infty: 1.660e-01 bias: -9.315e-11 P time: 1.16735e+06 first: 9.170e-02 second: 1.032e-01 infty: 1.655e-01 bias: -4.205e-11 P time: 1.16802e+06 first: 9.128e-02 second: 1.029e-01 infty: 1.651e-01 bias: -8.394e-11 P time: 1.16869e+06 first: 9.091e-02 second: 1.026e-01 infty: 1.647e-01 bias: -1.412e-10 P time: 1.16936e+06 first: 9.059e-02 second: 1.024e-01 infty: 1.645e-01 bias: -8.164e-11 P time: 1.17002e+06 first: 9.033e-02 second: 1.022e-01 infty: 1.644e-01 bias: -4.426e-11 P time: 1.17069e+06 first: 9.013e-02 second: 1.021e-01 infty: 1.644e-01 bias: -1.097e-10 P time: 1.17136e+06 first: 8.999e-02 second: 1.021e-01 infty: 1.645e-01 bias: -1.048e-10 P time: 1.17203e+06 first: 8.993e-02 second: 1.022e-01 infty: 1.646e-01 bias: -1.031e-10 P time: 1.1727e+06 first: 8.992e-02 second: 1.024e-01 infty: 1.649e-01 bias: -1.388e-10 P time: 1.17336e+06 first: 8.997e-02 second: 1.025e-01 infty: 1.653e-01 bias: -8.502e-11 P time: 1.17403e+06 first: 9.007e-02 second: 1.028e-01 infty: 1.657e-01 bias: -6.001e-11 P time: 1.1747e+06 first: 9.023e-02 second: 1.030e-01 infty: 1.662e-01 bias: -2.420e-11 P time: 1.17537e+06 first: 9.043e-02 second: 1.033e-01 infty: 1.667e-01 bias: -1.174e-10 P time: 1.17603e+06 first: 9.072e-02 second: 1.037e-01 infty: 1.672e-01 bias: -3.287e-11 P time: 1.1767e+06 first: 9.106e-02 second: 1.040e-01 infty: 1.676e-01 bias: -1.209e-11 P time: 1.17737e+06 first: 9.145e-02 second: 1.044e-01 infty: 1.680e-01 bias: -6.395e-11 P time: 1.17803e+06 first: 9.190e-02 second: 1.048e-01 infty: 1.683e-01 bias: -1.272e-10 P time: 1.1787e+06 first: 9.241e-02 second: 1.051e-01 infty: 1.686e-01 bias: -1.554e-10 P time: 1.17937e+06 first: 9.295e-02 second: 1.055e-01 infty: 1.689e-01 bias: -2.242e-11 P time: 1.18003e+06 first: 9.352e-02 second: 1.059e-01 infty: 1.690e-01 bias: -7.010e-11 P time: 1.1807e+06 first: 9.410e-02 second: 1.062e-01 infty: 1.690e-01 bias: -8.629e-11 P time: 1.18136e+06 first: 9.468e-02 second: 1.066e-01 infty: 1.690e-01 bias: -5.700e-11 P time: 1.18203e+06 first: 9.524e-02 second: 1.069e-01 infty: 1.689e-01 bias: -3.759e-11 P time: 1.18269e+06 first: 9.577e-02 second: 1.073e-01 infty: 1.687e-01 bias: -9.867e-11 P time: 1.18336e+06 first: 9.626e-02 second: 1.076e-01 infty: 1.684e-01 bias: -3.271e-11 P time: 1.18402e+06 first: 9.670e-02 second: 1.079e-01 infty: 1.680e-01 bias: -6.045e-11 P time: 1.18469e+06 first: 9.709e-02 second: 1.081e-01 infty: 1.676e-01 bias: -2.617e-11 P time: 1.18535e+06 first: 9.743e-02 second: 1.084e-01 infty: 1.672e-01 bias: -6.793e-11 P time: 1.18602e+06 first: 9.772e-02 second: 1.086e-01 infty: 1.669e-01 bias: -4.633e-11 P time: 1.18668e+06 first: 9.795e-02 second: 1.088e-01 infty: 1.666e-01 bias: -1.231e-10 P time: 1.18735e+06 first: 9.815e-02 second: 1.090e-01 infty: 1.663e-01 bias: -5.432e-11 P time: 1.18801e+06 first: 9.832e-02 second: 1.092e-01 infty: 1.660e-01 bias: -5.071e-11 P time: 1.18868e+06 first: 9.843e-02 second: 1.093e-01 infty: 1.658e-01 bias: -2.473e-11 P time: 1.18934e+06 first: 9.850e-02 second: 1.095e-01 infty: 1.657e-01 bias: -5.081e-11 P time: 1.19e+06 first: 9.853e-02 second: 1.096e-01 infty: 1.656e-01 bias: -1.087e-10 P time: 1.19067e+06 first: 9.851e-02 second: 1.097e-01 infty: 1.656e-01 bias: -4.719e-11 P time: 1.19133e+06 first: 9.845e-02 second: 1.097e-01 infty: 1.657e-01 bias: -7.888e-11 P time: 1.192e+06 first: 9.835e-02 second: 1.097e-01 infty: 1.658e-01 bias: -7.884e-11 P time: 1.19266e+06 first: 9.821e-02 second: 1.097e-01 infty: 1.660e-01 bias: -9.603e-11 P time: 1.19332e+06 first: 9.804e-02 second: 1.096e-01 infty: 1.662e-01 bias: -1.110e-10 P time: 1.19399e+06 first: 9.782e-02 second: 1.095e-01 infty: 1.665e-01 bias: -1.217e-10 P time: 1.19465e+06 first: 9.758e-02 second: 1.093e-01 infty: 1.667e-01 bias: -7.424e-11 P time: 1.19531e+06 first: 9.729e-02 second: 1.091e-01 infty: 1.669e-01 bias: -4.010e-11 P time: 1.19598e+06 first: 9.698e-02 second: 1.088e-01 infty: 1.670e-01 bias: -7.541e-11 P time: 1.19664e+06 first: 9.664e-02 second: 1.085e-01 infty: 1.671e-01 bias: -7.168e-11 P time: 1.1973e+06 first: 9.627e-02 second: 1.081e-01 infty: 1.670e-01 bias: -9.868e-11 P time: 1.19797e+06 first: 9.588e-02 second: 1.077e-01 infty: 1.667e-01 bias: -1.033e-10 P time: 1.19863e+06 first: 9.547e-02 second: 1.072e-01 infty: 1.664e-01 bias: -9.817e-11 P time: 1.19929e+06 first: 9.506e-02 second: 1.067e-01 infty: 1.658e-01 bias: -1.393e-10 P time: 1.19996e+06 first: 9.464e-02 second: 1.062e-01 infty: 1.652e-01 bias: -1.191e-10 P time: 1.20062e+06 first: 9.423e-02 second: 1.057e-01 infty: 1.644e-01 bias: -1.158e-10 P time: 1.20128e+06 first: 9.385e-02 second: 1.053e-01 infty: 1.635e-01 bias: -6.152e-11 P time: 1.20194e+06 first: 9.349e-02 second: 1.048e-01 infty: 1.626e-01 bias: -4.818e-11 P time: 1.2026e+06 first: 9.319e-02 second: 1.044e-01 infty: 1.616e-01 bias: -1.101e-10 P time: 1.20327e+06 first: 9.294e-02 second: 1.041e-01 infty: 1.607e-01 bias: -2.695e-11 P time: 1.20393e+06 first: 9.276e-02 second: 1.039e-01 infty: 1.598e-01 bias: -4.873e-11 P time: 1.20459e+06 first: 9.267e-02 second: 1.038e-01 infty: 1.589e-01 bias: -1.153e-10 P time: 1.20525e+06 first: 9.267e-02 second: 1.037e-01 infty: 1.581e-01 bias: -8.540e-11 P time: 1.20591e+06 first: 9.278e-02 second: 1.038e-01 infty: 1.574e-01 bias: -8.912e-11 P time: 1.20657e+06 first: 9.302e-02 second: 1.041e-01 infty: 1.569e-01 bias: -8.715e-11 P time: 1.20723e+06 first: 9.336e-02 second: 1.044e-01 infty: 1.565e-01 bias: -7.757e-11 P time: 1.20789e+06 first: 9.381e-02 second: 1.049e-01 infty: 1.563e-01 bias: -9.753e-11 P time: 1.20855e+06 first: 9.436e-02 second: 1.055e-01 infty: 1.564e-01 bias: -1.288e-10 P time: 1.20922e+06 first: 9.501e-02 second: 1.062e-01 infty: 1.567e-01 bias: -9.924e-11 P time: 1.20988e+06 first: 9.572e-02 second: 1.070e-01 infty: 1.573e-01 bias: -3.336e-11 P time: 1.21054e+06 first: 9.651e-02 second: 1.078e-01 infty: 1.579e-01 bias: -9.198e-11 P time: 1.2112e+06 first: 9.733e-02 second: 1.087e-01 infty: 1.586e-01 bias: -4.041e-11 P time: 1.21186e+06 first: 9.816e-02 second: 1.096e-01 infty: 1.593e-01 bias: -8.023e-11 P time: 1.21252e+06 first: 9.898e-02 second: 1.105e-01 infty: 1.601e-01 bias: -7.511e-11 P time: 1.21318e+06 first: 9.977e-02 second: 1.113e-01 infty: 1.610e-01 bias: -6.998e-11 P time: 1.21384e+06 first: 1.005e-01 second: 1.121e-01 infty: 1.619e-01 bias: -6.955e-11 P time: 1.2145e+06 first: 1.012e-01 second: 1.128e-01 infty: 1.627e-01 bias: -1.071e-10 P time: 1.21516e+06 first: 1.018e-01 second: 1.134e-01 infty: 1.633e-01 bias: -9.063e-11 P time: 1.21582e+06 first: 1.023e-01 second: 1.139e-01 infty: 1.638e-01 bias: -5.354e-11 P time: 1.21648e+06 first: 1.027e-01 second: 1.143e-01 infty: 1.641e-01 bias: -1.203e-10 P time: 1.21714e+06 first: 1.030e-01 second: 1.145e-01 infty: 1.643e-01 bias: -1.341e-10 P time: 1.2178e+06 first: 1.032e-01 second: 1.146e-01 infty: 1.643e-01 bias: -6.769e-11 P time: 1.21846e+06 first: 1.032e-01 second: 1.146e-01 infty: 1.641e-01 bias: -1.108e-10 P time: 1.21912e+06 first: 1.032e-01 second: 1.144e-01 infty: 1.638e-01 bias: -1.313e-10 P time: 1.21978e+06 first: 1.030e-01 second: 1.141e-01 infty: 1.633e-01 bias: -9.455e-11 P time: 1.22044e+06 first: 1.027e-01 second: 1.137e-01 infty: 1.627e-01 bias: -1.285e-10 P time: 1.2211e+06 first: 1.023e-01 second: 1.132e-01 infty: 1.620e-01 bias: -4.113e-11 P time: 1.22176e+06 first: 1.018e-01 second: 1.126e-01 infty: 1.613e-01 bias: -6.138e-11 P time: 1.22242e+06 first: 1.013e-01 second: 1.120e-01 infty: 1.604e-01 bias: -2.087e-11 P time: 1.22308e+06 first: 1.007e-01 second: 1.113e-01 infty: 1.595e-01 bias: -3.949e-11 P time: 1.22374e+06 first: 1.001e-01 second: 1.106e-01 infty: 1.586e-01 bias: -5.161e-11 P time: 1.2244e+06 first: 9.941e-02 second: 1.100e-01 infty: 1.577e-01 bias: -1.180e-10 P time: 1.22506e+06 first: 9.877e-02 second: 1.093e-01 infty: 1.568e-01 bias: -6.766e-11 P time: 1.22572e+06 first: 9.815e-02 second: 1.087e-01 infty: 1.561e-01 bias: -5.306e-11 P time: 1.22638e+06 first: 9.758e-02 second: 1.082e-01 infty: 1.554e-01 bias: -6.851e-11 P time: 1.22704e+06 first: 9.706e-02 second: 1.077e-01 infty: 1.549e-01 bias: -6.221e-11 P time: 1.2277e+06 first: 9.660e-02 second: 1.074e-01 infty: 1.545e-01 bias: -9.042e-11 P time: 1.22836e+06 first: 9.622e-02 second: 1.071e-01 infty: 1.542e-01 bias: -2.200e-11 P time: 1.22901e+06 first: 9.593e-02 second: 1.069e-01 infty: 1.540e-01 bias: -9.798e-11 P time: 1.22967e+06 first: 9.572e-02 second: 1.069e-01 infty: 1.539e-01 bias: -9.447e-11 P time: 1.23033e+06 first: 9.560e-02 second: 1.069e-01 infty: 1.542e-01 bias: -7.142e-11 P time: 1.23099e+06 first: 9.557e-02 second: 1.070e-01 infty: 1.546e-01 bias: -1.088e-10 P time: 1.23165e+06 first: 9.562e-02 second: 1.073e-01 infty: 1.551e-01 bias: -7.469e-11 P time: 1.23231e+06 first: 9.574e-02 second: 1.075e-01 infty: 1.557e-01 bias: -8.977e-12 P time: 1.23296e+06 first: 9.592e-02 second: 1.079e-01 infty: 1.564e-01 bias: -1.353e-10 P time: 1.23362e+06 first: 9.616e-02 second: 1.083e-01 infty: 1.572e-01 bias: -1.471e-10 P time: 1.23428e+06 first: 9.645e-02 second: 1.087e-01 infty: 1.581e-01 bias: -7.873e-11 P time: 1.23494e+06 first: 9.679e-02 second: 1.092e-01 infty: 1.590e-01 bias: -4.664e-11 P time: 1.2356e+06 first: 9.716e-02 second: 1.096e-01 infty: 1.599e-01 bias: -5.340e-11 P time: 1.23626e+06 first: 9.757e-02 second: 1.101e-01 infty: 1.607e-01 bias: -1.134e-10 P time: 1.23691e+06 first: 9.802e-02 second: 1.106e-01 infty: 1.614e-01 bias: -1.029e-10 P time: 1.23757e+06 first: 9.851e-02 second: 1.110e-01 infty: 1.621e-01 bias: -1.624e-11 P time: 1.23823e+06 first: 9.902e-02 second: 1.115e-01 infty: 1.627e-01 bias: -8.439e-11 P time: 1.23889e+06 first: 9.956e-02 second: 1.119e-01 infty: 1.632e-01 bias: -7.989e-11 P time: 1.23954e+06 first: 1.001e-01 second: 1.123e-01 infty: 1.637e-01 bias: -6.256e-11 P time: 1.2402e+06 first: 1.006e-01 second: 1.127e-01 infty: 1.640e-01 bias: -9.871e-11 P time: 1.24086e+06 first: 1.012e-01 second: 1.130e-01 infty: 1.642e-01 bias: -7.637e-11 P time: 1.24152e+06 first: 1.017e-01 second: 1.133e-01 infty: 1.643e-01 bias: 2.641e-11 P time: 1.24218e+06 first: 1.022e-01 second: 1.137e-01 infty: 1.643e-01 bias: 8.683e-12 P time: 1.24283e+06 first: 1.026e-01 second: 1.139e-01 infty: 1.642e-01 bias: -1.139e-10 P time: 1.24349e+06 first: 1.030e-01 second: 1.142e-01 infty: 1.642e-01 bias: -4.664e-11 P time: 1.24415e+06 first: 1.034e-01 second: 1.145e-01 infty: 1.643e-01 bias: -5.320e-11 P time: 1.24481e+06 first: 1.037e-01 second: 1.147e-01 infty: 1.644e-01 bias: -5.890e-11 P time: 1.24546e+06 first: 1.039e-01 second: 1.149e-01 infty: 1.645e-01 bias: -9.728e-11 P time: 1.24612e+06 first: 1.041e-01 second: 1.151e-01 infty: 1.646e-01 bias: -5.923e-11 P time: 1.24678e+06 first: 1.042e-01 second: 1.153e-01 infty: 1.649e-01 bias: -7.466e-11 P time: 1.24744e+06 first: 1.043e-01 second: 1.154e-01 infty: 1.652e-01 bias: -5.705e-11 P time: 1.24809e+06 first: 1.044e-01 second: 1.156e-01 infty: 1.657e-01 bias: -9.099e-11 P time: 1.24875e+06 first: 1.043e-01 second: 1.157e-01 infty: 1.664e-01 bias: -9.273e-11 P time: 1.24941e+06 first: 1.043e-01 second: 1.158e-01 infty: 1.671e-01 bias: -8.582e-11 P time: 1.25007e+06 first: 1.042e-01 second: 1.158e-01 infty: 1.680e-01 bias: -1.167e-10 P time: 1.25072e+06 first: 1.040e-01 second: 1.158e-01 infty: 1.690e-01 bias: -5.966e-11 P time: 1.25138e+06 first: 1.038e-01 second: 1.158e-01 infty: 1.700e-01 bias: -8.014e-11 P time: 1.25204e+06 first: 1.036e-01 second: 1.158e-01 infty: 1.710e-01 bias: -7.354e-11 P time: 1.2527e+06 first: 1.033e-01 second: 1.156e-01 infty: 1.721e-01 bias: -9.695e-11 P time: 1.25335e+06 first: 1.029e-01 second: 1.155e-01 infty: 1.731e-01 bias: -1.314e-10 P time: 1.25401e+06 first: 1.026e-01 second: 1.153e-01 infty: 1.740e-01 bias: -4.740e-11 P time: 1.25467e+06 first: 1.021e-01 second: 1.150e-01 infty: 1.747e-01 bias: -1.133e-10 P time: 1.25533e+06 first: 1.016e-01 second: 1.147e-01 infty: 1.754e-01 bias: -7.421e-11 P time: 1.25598e+06 first: 1.011e-01 second: 1.143e-01 infty: 1.759e-01 bias: -1.130e-10 P time: 1.25664e+06 first: 1.006e-01 second: 1.139e-01 infty: 1.762e-01 bias: -4.766e-11 P time: 1.2573e+06 first: 1.000e-01 second: 1.134e-01 infty: 1.763e-01 bias: -8.725e-11 P time: 1.25796e+06 first: 9.940e-02 second: 1.129e-01 infty: 1.763e-01 bias: -1.802e-11 P time: 1.25861e+06 first: 9.882e-02 second: 1.123e-01 infty: 1.762e-01 bias: -1.135e-10 P time: 1.25927e+06 first: 9.825e-02 second: 1.117e-01 infty: 1.759e-01 bias: -1.108e-10 P time: 1.25993e+06 first: 9.769e-02 second: 1.112e-01 infty: 1.755e-01 bias: -6.179e-11 P time: 1.26059e+06 first: 9.717e-02 second: 1.106e-01 infty: 1.751e-01 bias: -9.450e-11 P time: 1.26124e+06 first: 9.669e-02 second: 1.101e-01 infty: 1.747e-01 bias: -5.613e-11 P time: 1.2619e+06 first: 9.627e-02 second: 1.096e-01 infty: 1.743e-01 bias: -3.208e-11 P time: 1.26256e+06 first: 9.591e-02 second: 1.092e-01 infty: 1.739e-01 bias: -8.594e-11 P time: 1.26322e+06 first: 9.565e-02 second: 1.088e-01 infty: 1.737e-01 bias: -7.623e-12 P time: 1.26387e+06 first: 9.548e-02 second: 1.086e-01 infty: 1.735e-01 bias: -1.299e-10 P time: 1.26453e+06 first: 9.541e-02 second: 1.085e-01 infty: 1.735e-01 bias: -1.398e-10 P time: 1.26519e+06 first: 9.545e-02 second: 1.085e-01 infty: 1.737e-01 bias: -1.147e-10 P time: 1.26584e+06 first: 9.562e-02 second: 1.087e-01 infty: 1.742e-01 bias: -1.184e-11 P time: 1.2665e+06 first: 9.591e-02 second: 1.090e-01 infty: 1.748e-01 bias: -8.126e-11 P time: 1.26716e+06 first: 9.633e-02 second: 1.095e-01 infty: 1.756e-01 bias: -9.184e-11 P time: 1.26782e+06 first: 9.686e-02 second: 1.100e-01 infty: 1.765e-01 bias: -8.555e-11 P time: 1.26847e+06 first: 9.752e-02 second: 1.107e-01 infty: 1.776e-01 bias: -8.221e-11 P time: 1.26913e+06 first: 9.826e-02 second: 1.115e-01 infty: 1.789e-01 bias: 5.426e-12 P time: 1.26979e+06 first: 9.908e-02 second: 1.124e-01 infty: 1.802e-01 bias: -3.187e-11 P time: 1.27044e+06 first: 9.997e-02 second: 1.134e-01 infty: 1.817e-01 bias: -9.659e-11 P time: 1.2711e+06 first: 1.009e-01 second: 1.144e-01 infty: 1.831e-01 bias: -2.973e-11 P time: 1.27176e+06 first: 1.018e-01 second: 1.155e-01 infty: 1.847e-01 bias: -1.167e-10 P time: 1.27241e+06 first: 1.027e-01 second: 1.165e-01 infty: 1.862e-01 bias: -8.471e-11 P time: 1.27307e+06 first: 1.035e-01 second: 1.175e-01 infty: 1.877e-01 bias: -1.028e-10 P time: 1.27373e+06 first: 1.043e-01 second: 1.184e-01 infty: 1.891e-01 bias: -1.156e-10 P time: 1.27439e+06 first: 1.051e-01 second: 1.192e-01 infty: 1.905e-01 bias: -5.473e-11 P time: 1.27504e+06 first: 1.057e-01 second: 1.199e-01 infty: 1.917e-01 bias: -1.112e-10 P time: 1.2757e+06 first: 1.062e-01 second: 1.205e-01 infty: 1.928e-01 bias: -7.117e-11 P time: 1.27636e+06 first: 1.066e-01 second: 1.210e-01 infty: 1.938e-01 bias: -2.649e-11 P time: 1.27702e+06 first: 1.069e-01 second: 1.212e-01 infty: 1.945e-01 bias: -1.290e-10 P time: 1.27767e+06 first: 1.070e-01 second: 1.214e-01 infty: 1.951e-01 bias: -9.939e-11 P time: 1.27833e+06 first: 1.070e-01 second: 1.214e-01 infty: 1.955e-01 bias: -3.501e-11 P time: 1.27899e+06 first: 1.069e-01 second: 1.212e-01 infty: 1.956e-01 bias: -7.581e-11 P time: 1.27965e+06 first: 1.066e-01 second: 1.209e-01 infty: 1.956e-01 bias: -1.099e-10 P time: 1.2803e+06 first: 1.062e-01 second: 1.204e-01 infty: 1.954e-01 bias: -8.811e-11 P time: 1.28096e+06 first: 1.057e-01 second: 1.198e-01 infty: 1.950e-01 bias: -7.042e-11 P time: 1.28162e+06 first: 1.051e-01 second: 1.191e-01 infty: 1.945e-01 bias: -8.224e-11 P time: 1.28228e+06 first: 1.044e-01 second: 1.183e-01 infty: 1.938e-01 bias: -8.538e-11 P time: 1.28294e+06 first: 1.036e-01 second: 1.175e-01 infty: 1.931e-01 bias: -6.792e-11 P time: 1.28359e+06 first: 1.028e-01 second: 1.166e-01 infty: 1.922e-01 bias: -5.262e-11 P time: 1.28425e+06 first: 1.019e-01 second: 1.157e-01 infty: 1.914e-01 bias: -8.125e-11 P time: 1.28491e+06 first: 1.010e-01 second: 1.148e-01 infty: 1.907e-01 bias: 1.678e-12 P time: 1.28557e+06 first: 1.002e-01 second: 1.140e-01 infty: 1.900e-01 bias: -7.023e-11 P time: 1.28623e+06 first: 9.934e-02 second: 1.132e-01 infty: 1.895e-01 bias: -1.060e-10 P time: 1.28688e+06 first: 9.857e-02 second: 1.125e-01 infty: 1.890e-01 bias: -8.644e-11 P time: 1.28754e+06 first: 9.786e-02 second: 1.118e-01 infty: 1.886e-01 bias: -6.716e-11 P time: 1.2882e+06 first: 9.724e-02 second: 1.113e-01 infty: 1.884e-01 bias: -7.437e-11 P time: 1.28886e+06 first: 9.674e-02 second: 1.109e-01 infty: 1.883e-01 bias: -3.085e-11 P time: 1.28952e+06 first: 9.635e-02 second: 1.107e-01 infty: 1.884e-01 bias: -1.139e-10 P time: 1.29018e+06 first: 9.604e-02 second: 1.105e-01 infty: 1.886e-01 bias: -4.155e-11 P time: 1.29083e+06 first: 9.583e-02 second: 1.105e-01 infty: 1.890e-01 bias: -9.121e-11 P time: 1.29149e+06 first: 9.571e-02 second: 1.106e-01 infty: 1.896e-01 bias: -1.064e-10 P time: 1.29215e+06 first: 9.569e-02 second: 1.107e-01 infty: 1.902e-01 bias: -6.625e-11 P time: 1.29281e+06 first: 9.575e-02 second: 1.110e-01 infty: 1.909e-01 bias: -1.316e-10 P time: 1.29347e+06 first: 9.589e-02 second: 1.114e-01 infty: 1.917e-01 bias: 2.114e-11 P time: 1.29413e+06 first: 9.612e-02 second: 1.118e-01 infty: 1.925e-01 bias: -1.709e-11 P time: 1.29479e+06 first: 9.643e-02 second: 1.123e-01 infty: 1.933e-01 bias: -1.163e-10 P time: 1.29544e+06 first: 9.681e-02 second: 1.128e-01 infty: 1.940e-01 bias: -7.283e-11 P time: 1.2961e+06 first: 9.725e-02 second: 1.133e-01 infty: 1.947e-01 bias: -7.506e-12 P time: 1.29676e+06 first: 9.776e-02 second: 1.138e-01 infty: 1.953e-01 bias: -8.950e-11 P time: 1.29742e+06 first: 9.832e-02 second: 1.144e-01 infty: 1.957e-01 bias: -9.968e-11 P time: 1.29808e+06 first: 9.895e-02 second: 1.149e-01 infty: 1.960e-01 bias: -6.434e-11 P time: 1.29874e+06 first: 9.962e-02 second: 1.154e-01 infty: 1.962e-01 bias: -9.990e-11 P time: 1.2994e+06 first: 1.003e-01 second: 1.159e-01 infty: 1.963e-01 bias: -3.726e-11 P time: 1.30006e+06 first: 1.010e-01 second: 1.164e-01 infty: 1.963e-01 bias: -1.028e-10 P time: 1.30072e+06 first: 1.017e-01 second: 1.168e-01 infty: 1.963e-01 bias: -1.274e-11 P time: 1.30138e+06 first: 1.023e-01 second: 1.172e-01 infty: 1.962e-01 bias: -7.277e-11 P time: 1.30204e+06 first: 1.029e-01 second: 1.175e-01 infty: 1.959e-01 bias: -1.100e-10 P time: 1.30269e+06 first: 1.034e-01 second: 1.178e-01 infty: 1.957e-01 bias: -7.256e-11 P time: 1.30335e+06 first: 1.039e-01 second: 1.181e-01 infty: 1.953e-01 bias: -3.973e-11 P time: 1.30401e+06 first: 1.043e-01 second: 1.184e-01 infty: 1.950e-01 bias: -8.321e-11 P time: 1.30467e+06 first: 1.046e-01 second: 1.186e-01 infty: 1.947e-01 bias: -9.210e-11 P time: 1.30533e+06 first: 1.049e-01 second: 1.188e-01 infty: 1.944e-01 bias: -5.099e-11 P time: 1.30599e+06 first: 1.051e-01 second: 1.189e-01 infty: 1.942e-01 bias: -1.381e-10 P time: 1.30665e+06 first: 1.053e-01 second: 1.190e-01 infty: 1.941e-01 bias: -6.604e-11 P time: 1.30731e+06 first: 1.054e-01 second: 1.191e-01 infty: 1.940e-01 bias: -2.141e-12 P time: 1.30797e+06 first: 1.055e-01 second: 1.192e-01 infty: 1.941e-01 bias: -8.194e-11 P time: 1.30863e+06 first: 1.055e-01 second: 1.192e-01 infty: 1.942e-01 bias: -9.715e-11 P time: 1.30929e+06 first: 1.054e-01 second: 1.192e-01 infty: 1.944e-01 bias: -9.602e-12 P time: 1.30995e+06 first: 1.053e-01 second: 1.192e-01 infty: 1.947e-01 bias: -1.021e-10 P time: 1.31061e+06 first: 1.052e-01 second: 1.191e-01 infty: 1.950e-01 bias: -1.237e-10 P time: 1.31127e+06 first: 1.049e-01 second: 1.189e-01 infty: 1.953e-01 bias: -6.997e-11 P time: 1.31194e+06 first: 1.046e-01 second: 1.188e-01 infty: 1.957e-01 bias: -6.271e-11 P time: 1.3126e+06 first: 1.042e-01 second: 1.185e-01 infty: 1.960e-01 bias: -4.286e-11 P time: 1.31326e+06 first: 1.038e-01 second: 1.183e-01 infty: 1.963e-01 bias: -7.959e-11 P time: 1.31392e+06 first: 1.034e-01 second: 1.180e-01 infty: 1.965e-01 bias: -9.018e-11 P time: 1.31458e+06 first: 1.028e-01 second: 1.176e-01 infty: 1.967e-01 bias: -8.552e-11 P time: 1.31524e+06 first: 1.023e-01 second: 1.172e-01 infty: 1.968e-01 bias: -2.563e-11 P time: 1.3159e+06 first: 1.017e-01 second: 1.167e-01 infty: 1.967e-01 bias: -6.514e-11 P time: 1.31656e+06 first: 1.011e-01 second: 1.162e-01 infty: 1.965e-01 bias: -9.953e-11 P time: 1.31722e+06 first: 1.004e-01 second: 1.157e-01 infty: 1.962e-01 bias: -8.148e-11 P time: 1.31788e+06 first: 9.979e-02 second: 1.151e-01 infty: 1.957e-01 bias: -1.102e-10 P time: 1.31854e+06 first: 9.917e-02 second: 1.145e-01 infty: 1.952e-01 bias: -4.487e-11 P time: 1.3192e+06 first: 9.859e-02 second: 1.139e-01 infty: 1.945e-01 bias: -7.637e-11 P time: 1.31986e+06 first: 9.806e-02 second: 1.133e-01 infty: 1.937e-01 bias: -1.048e-10 P time: 1.32052e+06 first: 9.756e-02 second: 1.127e-01 infty: 1.928e-01 bias: -1.001e-10 P time: 1.32118e+06 first: 9.712e-02 second: 1.122e-01 infty: 1.919e-01 bias: -6.060e-11 P time: 1.32184e+06 first: 9.674e-02 second: 1.117e-01 infty: 1.909e-01 bias: -9.002e-11 P time: 1.3225e+06 first: 9.644e-02 second: 1.112e-01 infty: 1.898e-01 bias: -3.292e-11 P time: 1.32317e+06 first: 9.622e-02 second: 1.109e-01 infty: 1.887e-01 bias: -8.582e-11 P time: 1.32383e+06 first: 9.611e-02 second: 1.106e-01 infty: 1.876e-01 bias: -7.500e-11 P time: 1.32449e+06 first: 9.611e-02 second: 1.105e-01 infty: 1.866e-01 bias: -8.802e-12 P time: 1.32515e+06 first: 9.624e-02 second: 1.105e-01 infty: 1.857e-01 bias: -1.019e-10 P time: 1.32581e+06 first: 9.649e-02 second: 1.106e-01 infty: 1.848e-01 bias: -1.196e-10 P time: 1.32647e+06 first: 9.688e-02 second: 1.108e-01 infty: 1.840e-01 bias: -3.849e-11 P time: 1.32713e+06 first: 9.740e-02 second: 1.112e-01 infty: 1.835e-01 bias: -9.407e-11 P time: 1.32779e+06 first: 9.804e-02 second: 1.118e-01 infty: 1.833e-01 bias: -1.813e-11 P time: 1.32845e+06 first: 9.878e-02 second: 1.124e-01 infty: 1.832e-01 bias: -7.808e-11 P time: 1.32911e+06 first: 9.962e-02 second: 1.132e-01 infty: 1.832e-01 bias: -5.289e-11 P time: 1.32977e+06 first: 1.005e-01 second: 1.140e-01 infty: 1.835e-01 bias: -1.734e-11 P time: 1.33043e+06 first: 1.015e-01 second: 1.149e-01 infty: 1.839e-01 bias: -4.955e-11 P time: 1.33109e+06 first: 1.025e-01 second: 1.159e-01 infty: 1.844e-01 bias: -6.949e-11 P time: 1.33175e+06 first: 1.036e-01 second: 1.168e-01 infty: 1.851e-01 bias: -1.364e-11 P time: 1.33241e+06 first: 1.045e-01 second: 1.178e-01 infty: 1.860e-01 bias: -5.747e-11 P time: 1.33307e+06 first: 1.055e-01 second: 1.187e-01 infty: 1.869e-01 bias: -6.462e-11 P time: 1.33373e+06 first: 1.064e-01 second: 1.196e-01 infty: 1.879e-01 bias: -9.785e-11 P time: 1.33439e+06 first: 1.071e-01 second: 1.203e-01 infty: 1.888e-01 bias: -9.354e-11 P time: 1.33505e+06 first: 1.078e-01 second: 1.210e-01 infty: 1.897e-01 bias: -4.356e-11 P time: 1.33571e+06 first: 1.083e-01 second: 1.215e-01 infty: 1.905e-01 bias: -6.155e-11 P time: 1.33637e+06 first: 1.087e-01 second: 1.220e-01 infty: 1.911e-01 bias: -3.760e-11 P time: 1.33703e+06 first: 1.090e-01 second: 1.222e-01 infty: 1.915e-01 bias: -4.712e-11 P time: 1.33769e+06 first: 1.091e-01 second: 1.223e-01 infty: 1.917e-01 bias: -5.759e-11 P time: 1.33835e+06 first: 1.090e-01 second: 1.223e-01 infty: 1.917e-01 bias: -1.308e-10 P time: 1.33902e+06 first: 1.088e-01 second: 1.221e-01 infty: 1.914e-01 bias: -5.857e-11 P time: 1.33968e+06 first: 1.085e-01 second: 1.217e-01 infty: 1.909e-01 bias: -6.310e-11 P time: 1.34034e+06 first: 1.080e-01 second: 1.212e-01 infty: 1.901e-01 bias: -9.083e-11 P time: 1.341e+06 first: 1.075e-01 second: 1.206e-01 infty: 1.891e-01 bias: -1.126e-10 P time: 1.34166e+06 first: 1.068e-01 second: 1.198e-01 infty: 1.879e-01 bias: -4.780e-11 P time: 1.34232e+06 first: 1.060e-01 second: 1.190e-01 infty: 1.865e-01 bias: -1.210e-10 P time: 1.34298e+06 first: 1.052e-01 second: 1.181e-01 infty: 1.850e-01 bias: -1.441e-10 P time: 1.34364e+06 first: 1.044e-01 second: 1.172e-01 infty: 1.835e-01 bias: -6.361e-11 P time: 1.34431e+06 first: 1.035e-01 second: 1.162e-01 infty: 1.818e-01 bias: -5.241e-11 P time: 1.34497e+06 first: 1.027e-01 second: 1.153e-01 infty: 1.801e-01 bias: -1.135e-10 P time: 1.34563e+06 first: 1.018e-01 second: 1.144e-01 infty: 1.784e-01 bias: -8.031e-11 P time: 1.34629e+06 first: 1.011e-01 second: 1.135e-01 infty: 1.768e-01 bias: -5.692e-11 P time: 1.34695e+06 first: 1.003e-01 second: 1.127e-01 infty: 1.753e-01 bias: -5.145e-11 P time: 1.34761e+06 first: 9.967e-02 second: 1.120e-01 infty: 1.738e-01 bias: -1.706e-10 P time: 1.34827e+06 first: 9.908e-02 second: 1.114e-01 infty: 1.726e-01 bias: -1.333e-10 P time: 1.34893e+06 first: 9.858e-02 second: 1.110e-01 infty: 1.715e-01 bias: -8.986e-11 P time: 1.34959e+06 first: 9.816e-02 second: 1.106e-01 infty: 1.705e-01 bias: -1.131e-10 P time: 1.35026e+06 first: 9.785e-02 second: 1.104e-01 infty: 1.699e-01 bias: -3.398e-11 P time: 1.35092e+06 first: 9.762e-02 second: 1.102e-01 infty: 1.694e-01 bias: -1.191e-10 P time: 1.35158e+06 first: 9.750e-02 second: 1.102e-01 infty: 1.691e-01 bias: -1.330e-10 P time: 1.35224e+06 first: 9.748e-02 second: 1.103e-01 infty: 1.689e-01 bias: -6.937e-11 P time: 1.3529e+06 first: 9.755e-02 second: 1.106e-01 infty: 1.689e-01 bias: -8.935e-11 P time: 1.35356e+06 first: 9.772e-02 second: 1.109e-01 infty: 1.690e-01 bias: -4.293e-11 P time: 1.35422e+06 first: 9.799e-02 second: 1.112e-01 infty: 1.691e-01 bias: -1.166e-10 P time: 1.35488e+06 first: 9.834e-02 second: 1.117e-01 infty: 1.693e-01 bias: -5.673e-11 P time: 1.35554e+06 first: 9.878e-02 second: 1.122e-01 infty: 1.696e-01 bias: -9.273e-11 P time: 1.3562e+06 first: 9.931e-02 second: 1.127e-01 infty: 1.699e-01 bias: -8.173e-11 P time: 1.35686e+06 first: 9.991e-02 second: 1.133e-01 infty: 1.703e-01 bias: -1.121e-10 P time: 1.35752e+06 first: 1.006e-01 second: 1.139e-01 infty: 1.707e-01 bias: -6.837e-11 P time: 1.35818e+06 first: 1.014e-01 second: 1.145e-01 infty: 1.710e-01 bias: -7.241e-11 P time: 1.35884e+06 first: 1.022e-01 second: 1.152e-01 infty: 1.713e-01 bias: -9.272e-11 P time: 1.3595e+06 first: 1.030e-01 second: 1.158e-01 infty: 1.715e-01 bias: -1.321e-10 P time: 1.36016e+06 first: 1.038e-01 second: 1.164e-01 infty: 1.717e-01 bias: -5.133e-11 P time: 1.36083e+06 first: 1.045e-01 second: 1.169e-01 infty: 1.718e-01 bias: -7.268e-11 P time: 1.36149e+06 first: 1.053e-01 second: 1.175e-01 infty: 1.719e-01 bias: -4.968e-11 P time: 1.36215e+06 first: 1.060e-01 second: 1.180e-01 infty: 1.720e-01 bias: -7.171e-11 P time: 1.36281e+06 first: 1.066e-01 second: 1.185e-01 infty: 1.720e-01 bias: -5.972e-11 P time: 1.36347e+06 first: 1.072e-01 second: 1.189e-01 infty: 1.719e-01 bias: -8.204e-11 P time: 1.36413e+06 first: 1.077e-01 second: 1.193e-01 infty: 1.717e-01 bias: -5.707e-11 P time: 1.36479e+06 first: 1.081e-01 second: 1.196e-01 infty: 1.716e-01 bias: -4.760e-11 P time: 1.36545e+06 first: 1.084e-01 second: 1.199e-01 infty: 1.715e-01 bias: -3.646e-11 P time: 1.36611e+06 first: 1.087e-01 second: 1.202e-01 infty: 1.713e-01 bias: -4.943e-11 P time: 1.36677e+06 first: 1.089e-01 second: 1.204e-01 infty: 1.710e-01 bias: -1.176e-10 P time: 1.36743e+06 first: 1.090e-01 second: 1.205e-01 infty: 1.708e-01 bias: -1.525e-12 P time: 1.36809e+06 first: 1.091e-01 second: 1.206e-01 infty: 1.706e-01 bias: -1.274e-10 P time: 1.36875e+06 first: 1.090e-01 second: 1.206e-01 infty: 1.704e-01 bias: -6.600e-11 P time: 1.36942e+06 first: 1.090e-01 second: 1.205e-01 infty: 1.702e-01 bias: -1.429e-10 P time: 1.37008e+06 first: 1.088e-01 second: 1.204e-01 infty: 1.700e-01 bias: -3.559e-11 P time: 1.37074e+06 first: 1.085e-01 second: 1.202e-01 infty: 1.699e-01 bias: -4.316e-11 P time: 1.3714e+06 first: 1.082e-01 second: 1.199e-01 infty: 1.699e-01 bias: -6.137e-11 P time: 1.37206e+06 first: 1.078e-01 second: 1.196e-01 infty: 1.698e-01 bias: -1.349e-10 P time: 1.37272e+06 first: 1.072e-01 second: 1.192e-01 infty: 1.697e-01 bias: -1.127e-10 P time: 1.37338e+06 first: 1.067e-01 second: 1.188e-01 infty: 1.695e-01 bias: -4.509e-11 P time: 1.37404e+06 first: 1.060e-01 second: 1.183e-01 infty: 1.694e-01 bias: -2.761e-11 P time: 1.3747e+06 first: 1.053e-01 second: 1.177e-01 infty: 1.693e-01 bias: -1.259e-10 P time: 1.37537e+06 first: 1.046e-01 second: 1.171e-01 infty: 1.691e-01 bias: -7.366e-11 P time: 1.37603e+06 first: 1.038e-01 second: 1.165e-01 infty: 1.689e-01 bias: -1.420e-10 P time: 1.37669e+06 first: 1.030e-01 second: 1.158e-01 infty: 1.687e-01 bias: -1.237e-10 P time: 1.37735e+06 first: 1.023e-01 second: 1.152e-01 infty: 1.684e-01 bias: -6.346e-11 P time: 1.37801e+06 first: 1.015e-01 second: 1.145e-01 infty: 1.680e-01 bias: -6.876e-11 P time: 1.37867e+06 first: 1.008e-01 second: 1.138e-01 infty: 1.677e-01 bias: -8.889e-11 P time: 1.37934e+06 first: 1.002e-01 second: 1.132e-01 infty: 1.673e-01 bias: -1.349e-10 P time: 1.38e+06 first: 9.960e-02 second: 1.126e-01 infty: 1.671e-01 bias: -6.601e-11 P time: 1.38066e+06 first: 9.909e-02 second: 1.120e-01 infty: 1.668e-01 bias: -1.008e-10 P time: 1.38132e+06 first: 9.865e-02 second: 1.115e-01 infty: 1.665e-01 bias: -6.561e-11 P time: 1.38199e+06 first: 9.831e-02 second: 1.111e-01 infty: 1.663e-01 bias: -3.532e-11 P time: 1.38265e+06 first: 9.807e-02 second: 1.108e-01 infty: 1.662e-01 bias: -8.652e-11 P time: 1.38331e+06 first: 9.793e-02 second: 1.106e-01 infty: 1.664e-01 bias: -3.487e-11 P time: 1.38397e+06 first: 9.792e-02 second: 1.106e-01 infty: 1.667e-01 bias: -1.098e-10 P time: 1.38464e+06 first: 9.803e-02 second: 1.107e-01 infty: 1.671e-01 bias: -1.525e-10 P time: 1.3853e+06 first: 9.826e-02 second: 1.109e-01 infty: 1.676e-01 bias: -9.129e-11 P time: 1.38596e+06 first: 9.863e-02 second: 1.112e-01 infty: 1.683e-01 bias: -1.362e-10 P time: 1.38662e+06 first: 9.913e-02 second: 1.117e-01 infty: 1.691e-01 bias: -9.058e-11 P time: 1.38729e+06 first: 9.973e-02 second: 1.123e-01 infty: 1.702e-01 bias: -1.633e-11 P time: 1.38795e+06 first: 1.004e-01 second: 1.131e-01 infty: 1.715e-01 bias: -1.229e-10 P time: 1.38861e+06 first: 1.013e-01 second: 1.139e-01 infty: 1.728e-01 bias: -1.103e-10 P time: 1.38927e+06 first: 1.022e-01 second: 1.148e-01 infty: 1.743e-01 bias: -9.708e-11 P time: 1.38994e+06 first: 1.031e-01 second: 1.158e-01 infty: 1.758e-01 bias: -4.694e-11 P time: 1.3906e+06 first: 1.041e-01 second: 1.168e-01 infty: 1.773e-01 bias: -8.932e-11 P time: 1.39126e+06 first: 1.051e-01 second: 1.178e-01 infty: 1.789e-01 bias: -9.808e-11 P time: 1.39192e+06 first: 1.060e-01 second: 1.188e-01 infty: 1.805e-01 bias: -6.791e-11 P time: 1.39259e+06 first: 1.069e-01 second: 1.198e-01 infty: 1.820e-01 bias: -1.188e-10 P time: 1.39325e+06 first: 1.078e-01 second: 1.207e-01 infty: 1.835e-01 bias: -5.520e-11 P time: 1.39391e+06 first: 1.085e-01 second: 1.215e-01 infty: 1.849e-01 bias: -1.140e-10 P time: 1.39457e+06 first: 1.092e-01 second: 1.222e-01 infty: 1.862e-01 bias: -1.715e-10 P time: 1.39523e+06 first: 1.098e-01 second: 1.228e-01 infty: 1.874e-01 bias: -8.963e-11 P time: 1.3959e+06 first: 1.102e-01 second: 1.232e-01 infty: 1.884e-01 bias: -1.032e-10 P time: 1.39656e+06 first: 1.105e-01 second: 1.236e-01 infty: 1.892e-01 bias: -1.116e-10 P time: 1.39722e+06 first: 1.107e-01 second: 1.238e-01 infty: 1.898e-01 bias: -1.057e-10 P time: 1.39788e+06 first: 1.107e-01 second: 1.238e-01 infty: 1.903e-01 bias: -1.112e-10 P time: 1.39854e+06 first: 1.107e-01 second: 1.237e-01 infty: 1.906e-01 bias: -7.558e-11 P time: 1.39921e+06 first: 1.105e-01 second: 1.235e-01 infty: 1.907e-01 bias: -9.272e-11 P time: 1.39987e+06 first: 1.102e-01 second: 1.231e-01 infty: 1.907e-01 bias: -6.823e-11 P time: 1.40053e+06 first: 1.098e-01 second: 1.226e-01 infty: 1.906e-01 bias: -1.206e-10 P time: 1.40119e+06 first: 1.092e-01 second: 1.220e-01 infty: 1.904e-01 bias: -1.401e-10 P time: 1.40186e+06 first: 1.086e-01 second: 1.214e-01 infty: 1.901e-01 bias: -7.780e-11 P time: 1.40252e+06 first: 1.079e-01 second: 1.206e-01 infty: 1.898e-01 bias: -1.086e-10 P time: 1.40318e+06 first: 1.071e-01 second: 1.199e-01 infty: 1.894e-01 bias: -1.363e-10 P time: 1.40384e+06 first: 1.063e-01 second: 1.191e-01 infty: 1.891e-01 bias: -7.483e-11 P time: 1.4045e+06 first: 1.055e-01 second: 1.183e-01 infty: 1.888e-01 bias: -6.263e-11 P time: 1.40517e+06 first: 1.046e-01 second: 1.175e-01 infty: 1.886e-01 bias: -1.200e-11 P time: 1.40583e+06 first: 1.038e-01 second: 1.168e-01 infty: 1.886e-01 bias: -1.014e-10 P time: 1.40649e+06 first: 1.030e-01 second: 1.161e-01 infty: 1.886e-01 bias: -9.119e-11 P time: 1.40715e+06 first: 1.022e-01 second: 1.155e-01 infty: 1.887e-01 bias: -7.797e-11 P time: 1.40781e+06 first: 1.016e-01 second: 1.150e-01 infty: 1.889e-01 bias: -4.667e-11 P time: 1.40847e+06 first: 1.010e-01 second: 1.146e-01 infty: 1.893e-01 bias: -7.301e-11 P time: 1.40914e+06 first: 1.005e-01 second: 1.143e-01 infty: 1.902e-01 bias: -1.010e-10 P time: 1.4098e+06 first: 1.001e-01 second: 1.141e-01 infty: 1.913e-01 bias: -8.556e-11 P time: 1.41046e+06 first: 9.974e-02 second: 1.140e-01 infty: 1.926e-01 bias: -6.592e-11 P time: 1.41112e+06 first: 9.953e-02 second: 1.140e-01 infty: 1.939e-01 bias: -8.072e-11 P time: 1.41178e+06 first: 9.942e-02 second: 1.141e-01 infty: 1.952e-01 bias: -1.211e-10 P time: 1.41244e+06 first: 9.941e-02 second: 1.143e-01 infty: 1.965e-01 bias: -1.723e-11 P time: 1.4131e+06 first: 9.950e-02 second: 1.145e-01 infty: 1.977e-01 bias: -2.861e-11 P time: 1.41377e+06 first: 9.969e-02 second: 1.148e-01 infty: 1.989e-01 bias: -1.146e-10 P time: 1.41443e+06 first: 9.998e-02 second: 1.152e-01 infty: 2.001e-01 bias: -4.892e-11 P time: 1.41509e+06 first: 1.004e-01 second: 1.156e-01 infty: 2.013e-01 bias: -9.384e-11 P time: 1.41575e+06 first: 1.008e-01 second: 1.160e-01 infty: 2.024e-01 bias: -8.130e-11 P time: 1.41641e+06 first: 1.014e-01 second: 1.165e-01 infty: 2.035e-01 bias: 1.851e-11 P time: 1.41707e+06 first: 1.020e-01 second: 1.170e-01 infty: 2.045e-01 bias: -8.293e-11 P time: 1.41773e+06 first: 1.026e-01 second: 1.176e-01 infty: 2.055e-01 bias: -7.222e-11 P time: 1.41839e+06 first: 1.034e-01 second: 1.181e-01 infty: 2.065e-01 bias: -1.014e-10 P time: 1.41905e+06 first: 1.041e-01 second: 1.187e-01 infty: 2.075e-01 bias: -4.415e-11 P time: 1.41971e+06 first: 1.049e-01 second: 1.193e-01 infty: 2.086e-01 bias: -1.904e-11 P time: 1.42037e+06 first: 1.056e-01 second: 1.199e-01 infty: 2.096e-01 bias: -1.560e-11 P time: 1.42103e+06 first: 1.064e-01 second: 1.205e-01 infty: 2.107e-01 bias: -6.108e-11 P time: 1.42169e+06 first: 1.071e-01 second: 1.211e-01 infty: 2.117e-01 bias: -1.040e-10 P time: 1.42235e+06 first: 1.078e-01 second: 1.217e-01 infty: 2.128e-01 bias: -7.897e-11 P time: 1.42301e+06 first: 1.084e-01 second: 1.222e-01 infty: 2.140e-01 bias: -5.292e-11 P time: 1.42368e+06 first: 1.090e-01 second: 1.228e-01 infty: 2.152e-01 bias: -1.261e-10 P time: 1.42434e+06 first: 1.095e-01 second: 1.233e-01 infty: 2.163e-01 bias: -1.414e-10 P time: 1.425e+06 first: 1.100e-01 second: 1.238e-01 infty: 2.175e-01 bias: -8.282e-11 P time: 1.42566e+06 first: 1.104e-01 second: 1.243e-01 infty: 2.187e-01 bias: -9.620e-11 P time: 1.42632e+06 first: 1.108e-01 second: 1.247e-01 infty: 2.199e-01 bias: -7.446e-11 P time: 1.42698e+06 first: 1.110e-01 second: 1.250e-01 infty: 2.210e-01 bias: -5.811e-11 P time: 1.42764e+06 first: 1.112e-01 second: 1.253e-01 infty: 2.221e-01 bias: -6.858e-11 P time: 1.4283e+06 first: 1.113e-01 second: 1.255e-01 infty: 2.231e-01 bias: -6.125e-11 P time: 1.42896e+06 first: 1.113e-01 second: 1.256e-01 infty: 2.241e-01 bias: -1.001e-10 P time: 1.42962e+06 first: 1.112e-01 second: 1.257e-01 infty: 2.249e-01 bias: -8.360e-11 P time: 1.43028e+06 first: 1.111e-01 second: 1.256e-01 infty: 2.257e-01 bias: -6.971e-11 P time: 1.43094e+06 first: 1.108e-01 second: 1.255e-01 infty: 2.264e-01 bias: -3.937e-11 P time: 1.4316e+06 first: 1.105e-01 second: 1.253e-01 infty: 2.269e-01 bias: -4.735e-11 P time: 1.43226e+06 first: 1.101e-01 second: 1.250e-01 infty: 2.274e-01 bias: -1.323e-10 P time: 1.43292e+06 first: 1.095e-01 second: 1.246e-01 infty: 2.278e-01 bias: 2.531e-12 P time: 1.43358e+06 first: 1.089e-01 second: 1.241e-01 infty: 2.282e-01 bias: -9.733e-11 P time: 1.43424e+06 first: 1.083e-01 second: 1.235e-01 infty: 2.284e-01 bias: -6.675e-11 P time: 1.4349e+06 first: 1.076e-01 second: 1.229e-01 infty: 2.285e-01 bias: -9.884e-11 P time: 1.43556e+06 first: 1.068e-01 second: 1.222e-01 infty: 2.286e-01 bias: -1.006e-10 P time: 1.43622e+06 first: 1.061e-01 second: 1.215e-01 infty: 2.286e-01 bias: -3.204e-11 P time: 1.43688e+06 first: 1.054e-01 second: 1.208e-01 infty: 2.285e-01 bias: -9.442e-11 P time: 1.43754e+06 first: 1.046e-01 second: 1.201e-01 infty: 2.284e-01 bias: -1.607e-10 P time: 1.4382e+06 first: 1.039e-01 second: 1.194e-01 infty: 2.283e-01 bias: -7.485e-11 P time: 1.43886e+06 first: 1.033e-01 second: 1.187e-01 infty: 2.281e-01 bias: -8.175e-11 P time: 1.43952e+06 first: 1.027e-01 second: 1.180e-01 infty: 2.279e-01 bias: -6.391e-11 P time: 1.44018e+06 first: 1.022e-01 second: 1.175e-01 infty: 2.277e-01 bias: -8.585e-11 P time: 1.44084e+06 first: 1.018e-01 second: 1.170e-01 infty: 2.276e-01 bias: 8.495e-12 P time: 1.4415e+06 first: 1.015e-01 second: 1.166e-01 infty: 2.276e-01 bias: -5.757e-12 P time: 1.44216e+06 first: 1.013e-01 second: 1.164e-01 infty: 2.276e-01 bias: -5.626e-11 P time: 1.44283e+06 first: 1.013e-01 second: 1.163e-01 infty: 2.278e-01 bias: -6.412e-11 P time: 1.44349e+06 first: 1.014e-01 second: 1.163e-01 infty: 2.281e-01 bias: -3.619e-11 P time: 1.44415e+06 first: 1.016e-01 second: 1.164e-01 infty: 2.285e-01 bias: -8.773e-11 P time: 1.44481e+06 first: 1.020e-01 second: 1.168e-01 infty: 2.292e-01 bias: -4.407e-11 P time: 1.44547e+06 first: 1.025e-01 second: 1.172e-01 infty: 2.300e-01 bias: -1.074e-10 P time: 1.44613e+06 first: 1.031e-01 second: 1.178e-01 infty: 2.310e-01 bias: -8.567e-11 P time: 1.44679e+06 first: 1.038e-01 second: 1.186e-01 infty: 2.321e-01 bias: -6.998e-11 P time: 1.44745e+06 first: 1.047e-01 second: 1.194e-01 infty: 2.334e-01 bias: -8.795e-11 P time: 1.44811e+06 first: 1.056e-01 second: 1.204e-01 infty: 2.349e-01 bias: -1.638e-10 P time: 1.44877e+06 first: 1.066e-01 second: 1.214e-01 infty: 2.365e-01 bias: -8.502e-11 P time: 1.44943e+06 first: 1.077e-01 second: 1.225e-01 infty: 2.381e-01 bias: -1.047e-10 P time: 1.45009e+06 first: 1.088e-01 second: 1.236e-01 infty: 2.398e-01 bias: -1.215e-10 P time: 1.45075e+06 first: 1.099e-01 second: 1.247e-01 infty: 2.415e-01 bias: -1.459e-11 P time: 1.45141e+06 first: 1.110e-01 second: 1.258e-01 infty: 2.432e-01 bias: -2.456e-11 P time: 1.45207e+06 first: 1.120e-01 second: 1.268e-01 infty: 2.448e-01 bias: -3.346e-11 P time: 1.45272e+06 first: 1.130e-01 second: 1.278e-01 infty: 2.463e-01 bias: -1.052e-10 P time: 1.45338e+06 first: 1.139e-01 second: 1.286e-01 infty: 2.476e-01 bias: -1.083e-10 P time: 1.45404e+06 first: 1.146e-01 second: 1.294e-01 infty: 2.488e-01 bias: -3.937e-11 P time: 1.4547e+06 first: 1.153e-01 second: 1.300e-01 infty: 2.497e-01 bias: -7.952e-11 P time: 1.45536e+06 first: 1.159e-01 second: 1.305e-01 infty: 2.504e-01 bias: -6.835e-11 P time: 1.45602e+06 first: 1.163e-01 second: 1.308e-01 infty: 2.509e-01 bias: -7.313e-11 P time: 1.45668e+06 first: 1.166e-01 second: 1.310e-01 infty: 2.512e-01 bias: -7.056e-11 P time: 1.45734e+06 first: 1.167e-01 second: 1.310e-01 infty: 2.512e-01 bias: -5.542e-11 P time: 1.458e+06 first: 1.167e-01 second: 1.309e-01 infty: 2.511e-01 bias: -7.178e-11 P time: 1.45866e+06 first: 1.166e-01 second: 1.307e-01 infty: 2.508e-01 bias: -7.767e-11 P time: 1.45932e+06 first: 1.164e-01 second: 1.303e-01 infty: 2.503e-01 bias: -5.187e-11 P time: 1.45998e+06 first: 1.160e-01 second: 1.298e-01 infty: 2.497e-01 bias: -6.463e-11 P time: 1.46064e+06 first: 1.155e-01 second: 1.292e-01 infty: 2.490e-01 bias: -1.188e-10 P time: 1.4613e+06 first: 1.149e-01 second: 1.286e-01 infty: 2.483e-01 bias: -4.658e-11 P time: 1.46196e+06 first: 1.143e-01 second: 1.279e-01 infty: 2.475e-01 bias: -7.011e-11 P time: 1.46262e+06 first: 1.136e-01 second: 1.271e-01 infty: 2.467e-01 bias: -1.206e-10 P time: 1.46328e+06 first: 1.129e-01 second: 1.263e-01 infty: 2.459e-01 bias: -1.111e-10 P time: 1.46394e+06 first: 1.121e-01 second: 1.256e-01 infty: 2.451e-01 bias: -9.831e-11 P time: 1.4646e+06 first: 1.114e-01 second: 1.248e-01 infty: 2.444e-01 bias: -1.082e-10 P time: 1.46526e+06 first: 1.106e-01 second: 1.241e-01 infty: 2.438e-01 bias: 1.882e-12 P time: 1.46592e+06 first: 1.100e-01 second: 1.235e-01 infty: 2.432e-01 bias: -1.097e-10 P time: 1.46658e+06 first: 1.093e-01 second: 1.229e-01 infty: 2.427e-01 bias: -1.449e-10 P time: 1.46724e+06 first: 1.087e-01 second: 1.225e-01 infty: 2.423e-01 bias: -7.595e-11 P time: 1.4679e+06 first: 1.082e-01 second: 1.221e-01 infty: 2.420e-01 bias: -9.983e-11 P time: 1.46856e+06 first: 1.078e-01 second: 1.218e-01 infty: 2.417e-01 bias: -6.016e-11 P time: 1.46922e+06 first: 1.074e-01 second: 1.216e-01 infty: 2.416e-01 bias: -5.961e-11 P time: 1.46988e+06 first: 1.071e-01 second: 1.216e-01 infty: 2.415e-01 bias: -1.084e-10 P time: 1.47054e+06 first: 1.070e-01 second: 1.216e-01 infty: 2.416e-01 bias: -5.234e-11 P time: 1.4712e+06 first: 1.069e-01 second: 1.217e-01 infty: 2.417e-01 bias: -1.123e-10 P time: 1.47186e+06 first: 1.068e-01 second: 1.218e-01 infty: 2.418e-01 bias: -7.268e-11 P time: 1.47252e+06 first: 1.069e-01 second: 1.220e-01 infty: 2.420e-01 bias: -4.101e-11 P time: 1.47318e+06 first: 1.071e-01 second: 1.223e-01 infty: 2.423e-01 bias: -9.772e-11 P time: 1.47384e+06 first: 1.073e-01 second: 1.226e-01 infty: 2.426e-01 bias: -1.186e-10 P time: 1.4745e+06 first: 1.076e-01 second: 1.230e-01 infty: 2.429e-01 bias: -1.011e-10 P time: 1.47516e+06 first: 1.080e-01 second: 1.233e-01 infty: 2.433e-01 bias: -1.201e-11 P time: 1.47582e+06 first: 1.085e-01 second: 1.237e-01 infty: 2.436e-01 bias: -3.535e-11 P time: 1.47648e+06 first: 1.090e-01 second: 1.242e-01 infty: 2.439e-01 bias: -1.777e-11 P time: 1.47714e+06 first: 1.096e-01 second: 1.246e-01 infty: 2.442e-01 bias: -8.128e-11 P time: 1.4778e+06 first: 1.102e-01 second: 1.250e-01 infty: 2.444e-01 bias: -7.508e-11 P time: 1.47847e+06 first: 1.109e-01 second: 1.255e-01 infty: 2.446e-01 bias: -8.057e-11 P time: 1.47913e+06 first: 1.116e-01 second: 1.259e-01 infty: 2.447e-01 bias: -1.135e-10 P time: 1.47979e+06 first: 1.124e-01 second: 1.264e-01 infty: 2.446e-01 bias: -3.743e-11 P time: 1.48045e+06 first: 1.131e-01 second: 1.269e-01 infty: 2.445e-01 bias: -1.531e-10 P time: 1.48111e+06 first: 1.139e-01 second: 1.274e-01 infty: 2.444e-01 bias: -1.086e-10 P time: 1.48177e+06 first: 1.146e-01 second: 1.279e-01 infty: 2.442e-01 bias: -1.345e-10 P time: 1.48243e+06 first: 1.154e-01 second: 1.284e-01 infty: 2.439e-01 bias: -6.905e-11 P time: 1.48309e+06 first: 1.161e-01 second: 1.290e-01 infty: 2.436e-01 bias: -7.723e-11 P time: 1.48375e+06 first: 1.168e-01 second: 1.295e-01 infty: 2.433e-01 bias: -9.670e-11 P time: 1.48441e+06 first: 1.174e-01 second: 1.300e-01 infty: 2.430e-01 bias: -1.131e-10 P time: 1.48508e+06 first: 1.180e-01 second: 1.305e-01 infty: 2.427e-01 bias: -6.775e-11 P time: 1.48574e+06 first: 1.186e-01 second: 1.310e-01 infty: 2.424e-01 bias: -1.008e-10 P time: 1.4864e+06 first: 1.190e-01 second: 1.314e-01 infty: 2.422e-01 bias: -1.292e-10 P time: 1.48706e+06 first: 1.194e-01 second: 1.318e-01 infty: 2.420e-01 bias: -2.944e-11 P time: 1.48772e+06 first: 1.197e-01 second: 1.322e-01 infty: 2.419e-01 bias: -1.593e-10 P time: 1.48838e+06 first: 1.199e-01 second: 1.324e-01 infty: 2.418e-01 bias: -1.389e-10 P time: 1.48904e+06 first: 1.200e-01 second: 1.327e-01 infty: 2.417e-01 bias: -7.331e-11 P time: 1.48971e+06 first: 1.200e-01 second: 1.328e-01 infty: 2.416e-01 bias: 2.727e-11 P time: 1.49037e+06 first: 1.199e-01 second: 1.328e-01 infty: 2.415e-01 bias: -8.762e-11 P time: 1.49103e+06 first: 1.197e-01 second: 1.328e-01 infty: 2.413e-01 bias: -9.270e-11 P time: 1.49169e+06 first: 1.194e-01 second: 1.327e-01 infty: 2.411e-01 bias: -1.193e-10 P time: 1.49236e+06 first: 1.190e-01 second: 1.324e-01 infty: 2.408e-01 bias: -1.103e-10 P time: 1.49302e+06 first: 1.186e-01 second: 1.321e-01 infty: 2.404e-01 bias: -7.342e-11 P time: 1.49368e+06 first: 1.180e-01 second: 1.317e-01 infty: 2.399e-01 bias: 6.578e-12 P time: 1.49434e+06 first: 1.174e-01 second: 1.311e-01 infty: 2.393e-01 bias: -2.516e-11 P time: 1.495e+06 first: 1.167e-01 second: 1.306e-01 infty: 2.385e-01 bias: -2.798e-11 P time: 1.49567e+06 first: 1.159e-01 second: 1.299e-01 infty: 2.375e-01 bias: -8.312e-11 P time: 1.49633e+06 first: 1.152e-01 second: 1.292e-01 infty: 2.364e-01 bias: -5.258e-11 P time: 1.49699e+06 first: 1.144e-01 second: 1.284e-01 infty: 2.352e-01 bias: -1.131e-10 P time: 1.49766e+06 first: 1.137e-01 second: 1.276e-01 infty: 2.338e-01 bias: -6.750e-11 P time: 1.49832e+06 first: 1.130e-01 second: 1.268e-01 infty: 2.323e-01 bias: -6.351e-11 P time: 1.49898e+06 first: 1.123e-01 second: 1.261e-01 infty: 2.308e-01 bias: -1.149e-10 P time: 1.49964e+06 first: 1.116e-01 second: 1.254e-01 infty: 2.293e-01 bias: -2.841e-11 P time: 1.50031e+06 first: 1.111e-01 second: 1.247e-01 infty: 2.277e-01 bias: -1.061e-10 P time: 1.50097e+06 first: 1.106e-01 second: 1.241e-01 infty: 2.261e-01 bias: -5.901e-11 P time: 1.50164e+06 first: 1.102e-01 second: 1.237e-01 infty: 2.246e-01 bias: -1.721e-10 P time: 1.5023e+06 first: 1.099e-01 second: 1.233e-01 infty: 2.231e-01 bias: -1.220e-10 P time: 1.50296e+06 first: 1.097e-01 second: 1.231e-01 infty: 2.217e-01 bias: -3.796e-11 P time: 1.50363e+06 first: 1.097e-01 second: 1.231e-01 infty: 2.204e-01 bias: -4.945e-11 P time: 1.50429e+06 first: 1.098e-01 second: 1.232e-01 infty: 2.192e-01 bias: -6.776e-11 P time: 1.50496e+06 first: 1.100e-01 second: 1.234e-01 infty: 2.182e-01 bias: -8.027e-11 P time: 1.50562e+06 first: 1.104e-01 second: 1.238e-01 infty: 2.172e-01 bias: -8.464e-11 P time: 1.50628e+06 first: 1.109e-01 second: 1.243e-01 infty: 2.164e-01 bias: -4.022e-11 P time: 1.50695e+06 first: 1.115e-01 second: 1.250e-01 infty: 2.157e-01 bias: -6.276e-11 P time: 1.50761e+06 first: 1.122e-01 second: 1.258e-01 infty: 2.152e-01 bias: -1.609e-11 P time: 1.50828e+06 first: 1.130e-01 second: 1.267e-01 infty: 2.148e-01 bias: -3.070e-11 P time: 1.50894e+06 first: 1.138e-01 second: 1.276e-01 infty: 2.145e-01 bias: -3.675e-11 P time: 1.50961e+06 first: 1.147e-01 second: 1.286e-01 infty: 2.143e-01 bias: -1.490e-10 P time: 1.51027e+06 first: 1.157e-01 second: 1.296e-01 infty: 2.142e-01 bias: -6.787e-11 P time: 1.51094e+06 first: 1.166e-01 second: 1.307e-01 infty: 2.142e-01 bias: -6.530e-11 P time: 1.5116e+06 first: 1.176e-01 second: 1.316e-01 infty: 2.143e-01 bias: -5.536e-11 P time: 1.51227e+06 first: 1.184e-01 second: 1.326e-01 infty: 2.144e-01 bias: -5.176e-11 P time: 1.51294e+06 first: 1.193e-01 second: 1.334e-01 infty: 2.145e-01 bias: -1.258e-10 P time: 1.5136e+06 first: 1.200e-01 second: 1.342e-01 infty: 2.145e-01 bias: -8.115e-11 P time: 1.51427e+06 first: 1.207e-01 second: 1.348e-01 infty: 2.145e-01 bias: -1.301e-10 P time: 1.51493e+06 first: 1.213e-01 second: 1.354e-01 infty: 2.144e-01 bias: -9.356e-11 P time: 1.5156e+06 first: 1.217e-01 second: 1.357e-01 infty: 2.141e-01 bias: -6.279e-11 P time: 1.51626e+06 first: 1.220e-01 second: 1.359e-01 infty: 2.137e-01 bias: -3.067e-11 P time: 1.51693e+06 first: 1.221e-01 second: 1.360e-01 infty: 2.131e-01 bias: -8.011e-11 P time: 1.5176e+06 first: 1.221e-01 second: 1.359e-01 infty: 2.123e-01 bias: -5.955e-11 P time: 1.51826e+06 first: 1.220e-01 second: 1.356e-01 infty: 2.113e-01 bias: -6.185e-11 P time: 1.51893e+06 first: 1.217e-01 second: 1.352e-01 infty: 2.100e-01 bias: -5.809e-11 P time: 1.5196e+06 first: 1.214e-01 second: 1.347e-01 infty: 2.085e-01 bias: -2.670e-11 P time: 1.52026e+06 first: 1.208e-01 second: 1.341e-01 infty: 2.068e-01 bias: -5.421e-11 P time: 1.52093e+06 first: 1.202e-01 second: 1.334e-01 infty: 2.049e-01 bias: -1.408e-10 P time: 1.5216e+06 first: 1.195e-01 second: 1.327e-01 infty: 2.029e-01 bias: -6.113e-11 P time: 1.52227e+06 first: 1.187e-01 second: 1.318e-01 infty: 2.007e-01 bias: -1.247e-10 P time: 1.52293e+06 first: 1.179e-01 second: 1.310e-01 infty: 1.984e-01 bias: -7.872e-12 P time: 1.5236e+06 first: 1.171e-01 second: 1.302e-01 infty: 1.960e-01 bias: -1.147e-10 P time: 1.52427e+06 first: 1.163e-01 second: 1.294e-01 infty: 1.936e-01 bias: -7.243e-11 P time: 1.52494e+06 first: 1.154e-01 second: 1.287e-01 infty: 1.920e-01 bias: -4.993e-12 P time: 1.52561e+06 first: 1.146e-01 second: 1.280e-01 infty: 1.913e-01 bias: -9.458e-11 P time: 1.52628e+06 first: 1.139e-01 second: 1.274e-01 infty: 1.907e-01 bias: -5.028e-11 P time: 1.52695e+06 first: 1.132e-01 second: 1.270e-01 infty: 1.903e-01 bias: -7.248e-11 P time: 1.52762e+06 first: 1.126e-01 second: 1.266e-01 infty: 1.900e-01 bias: -5.218e-11 P time: 1.52829e+06 first: 1.121e-01 second: 1.263e-01 infty: 1.899e-01 bias: -1.043e-10 P time: 1.52895e+06 first: 1.117e-01 second: 1.262e-01 infty: 1.900e-01 bias: -4.616e-11 P time: 1.52962e+06 first: 1.114e-01 second: 1.262e-01 infty: 1.909e-01 bias: -3.804e-11 P time: 1.53029e+06 first: 1.112e-01 second: 1.262e-01 infty: 1.919e-01 bias: -4.738e-11 P time: 1.53097e+06 first: 1.111e-01 second: 1.264e-01 infty: 1.930e-01 bias: -9.178e-11 P time: 1.53164e+06 first: 1.111e-01 second: 1.266e-01 infty: 1.941e-01 bias: -6.673e-11 P time: 1.53231e+06 first: 1.112e-01 second: 1.269e-01 infty: 1.952e-01 bias: -1.098e-10 P time: 1.53298e+06 first: 1.114e-01 second: 1.273e-01 infty: 1.962e-01 bias: -1.164e-10 P time: 1.53365e+06 first: 1.116e-01 second: 1.276e-01 infty: 1.972e-01 bias: -1.062e-11 P time: 1.53432e+06 first: 1.120e-01 second: 1.280e-01 infty: 1.981e-01 bias: -5.244e-11 P time: 1.53499e+06 first: 1.123e-01 second: 1.284e-01 infty: 1.988e-01 bias: -1.512e-10 P time: 1.53566e+06 first: 1.128e-01 second: 1.288e-01 infty: 1.995e-01 bias: -1.088e-10 P time: 1.53633e+06 first: 1.133e-01 second: 1.292e-01 infty: 2.001e-01 bias: -1.081e-10 P time: 1.537e+06 first: 1.138e-01 second: 1.296e-01 infty: 2.006e-01 bias: -9.556e-11 P time: 1.53767e+06 first: 1.144e-01 second: 1.300e-01 infty: 2.011e-01 bias: -1.674e-11 P time: 1.53835e+06 first: 1.150e-01 second: 1.304e-01 infty: 2.016e-01 bias: -4.280e-11 P time: 1.53902e+06 first: 1.156e-01 second: 1.307e-01 infty: 2.020e-01 bias: -6.742e-11 P time: 1.53969e+06 first: 1.162e-01 second: 1.311e-01 infty: 2.025e-01 bias: -7.339e-11 P time: 1.54036e+06 first: 1.168e-01 second: 1.315e-01 infty: 2.030e-01 bias: -4.905e-11 P time: 1.54103e+06 first: 1.174e-01 second: 1.318e-01 infty: 2.035e-01 bias: -4.730e-11 P time: 1.54171e+06 first: 1.179e-01 second: 1.322e-01 infty: 2.040e-01 bias: -5.905e-11 P time: 1.54238e+06 first: 1.185e-01 second: 1.325e-01 infty: 2.046e-01 bias: -9.628e-11 P time: 1.54305e+06 first: 1.190e-01 second: 1.329e-01 infty: 2.053e-01 bias: -6.637e-11 P time: 1.54372e+06 first: 1.195e-01 second: 1.333e-01 infty: 2.060e-01 bias: -6.937e-11 P time: 1.5444e+06 first: 1.200e-01 second: 1.336e-01 infty: 2.067e-01 bias: -7.457e-11 P time: 1.54507e+06 first: 1.204e-01 second: 1.340e-01 infty: 2.075e-01 bias: -9.381e-11 P time: 1.54575e+06 first: 1.207e-01 second: 1.343e-01 infty: 2.083e-01 bias: -1.427e-10 P time: 1.54642e+06 first: 1.210e-01 second: 1.346e-01 infty: 2.092e-01 bias: -9.954e-11 P time: 1.54709e+06 first: 1.213e-01 second: 1.349e-01 infty: 2.100e-01 bias: -2.797e-11 P time: 1.54777e+06 first: 1.214e-01 second: 1.351e-01 infty: 2.108e-01 bias: -1.210e-10 P time: 1.54844e+06 first: 1.215e-01 second: 1.353e-01 infty: 2.115e-01 bias: -8.391e-11 P time: 1.54912e+06 first: 1.215e-01 second: 1.354e-01 infty: 2.124e-01 bias: -8.333e-11 P time: 1.54979e+06 first: 1.213e-01 second: 1.355e-01 infty: 2.131e-01 bias: -9.660e-11 P time: 1.55047e+06 first: 1.211e-01 second: 1.354e-01 infty: 2.138e-01 bias: -2.192e-11 P time: 1.55114e+06 first: 1.208e-01 second: 1.353e-01 infty: 2.144e-01 bias: -9.490e-11 P time: 1.55182e+06 first: 1.204e-01 second: 1.351e-01 infty: 2.148e-01 bias: -1.074e-10 P time: 1.55249e+06 first: 1.199e-01 second: 1.349e-01 infty: 2.151e-01 bias: -1.311e-10 P time: 1.55317e+06 first: 1.194e-01 second: 1.345e-01 infty: 2.153e-01 bias: -6.361e-11 P time: 1.55385e+06 first: 1.187e-01 second: 1.340e-01 infty: 2.153e-01 bias: -7.666e-11 P time: 1.55452e+06 first: 1.180e-01 second: 1.335e-01 infty: 2.153e-01 bias: -7.486e-11 P time: 1.5552e+06 first: 1.173e-01 second: 1.329e-01 infty: 2.151e-01 bias: -6.737e-11 P time: 1.55588e+06 first: 1.165e-01 second: 1.323e-01 infty: 2.147e-01 bias: -9.057e-11 P time: 1.55655e+06 first: 1.157e-01 second: 1.316e-01 infty: 2.143e-01 bias: -1.262e-11 P time: 1.55723e+06 first: 1.149e-01 second: 1.308e-01 infty: 2.137e-01 bias: -8.095e-11 P time: 1.55791e+06 first: 1.141e-01 second: 1.301e-01 infty: 2.130e-01 bias: -5.732e-11 P time: 1.55858e+06 first: 1.134e-01 second: 1.293e-01 infty: 2.122e-01 bias: -6.540e-11 P time: 1.55926e+06 first: 1.127e-01 second: 1.286e-01 infty: 2.114e-01 bias: -9.164e-11 P time: 1.55994e+06 first: 1.121e-01 second: 1.280e-01 infty: 2.106e-01 bias: -6.693e-11 P time: 1.56062e+06 first: 1.116e-01 second: 1.274e-01 infty: 2.099e-01 bias: -4.035e-11 P time: 1.5613e+06 first: 1.111e-01 second: 1.269e-01 infty: 2.093e-01 bias: -9.202e-11 P time: 1.56197e+06 first: 1.108e-01 second: 1.265e-01 infty: 2.088e-01 bias: -4.552e-11 P time: 1.56265e+06 first: 1.106e-01 second: 1.262e-01 infty: 2.085e-01 bias: -6.536e-11 P time: 1.56333e+06 first: 1.106e-01 second: 1.261e-01 infty: 2.085e-01 bias: -6.810e-11 P time: 1.56401e+06 first: 1.107e-01 second: 1.261e-01 infty: 2.088e-01 bias: -4.353e-11 P time: 1.56469e+06 first: 1.109e-01 second: 1.262e-01 infty: 2.093e-01 bias: -1.064e-10 P time: 1.56537e+06 first: 1.113e-01 second: 1.265e-01 infty: 2.101e-01 bias: -1.383e-10 P time: 1.56605e+06 first: 1.118e-01 second: 1.270e-01 infty: 2.111e-01 bias: -2.343e-13 P time: 1.56673e+06 first: 1.124e-01 second: 1.276e-01 infty: 2.122e-01 bias: -7.225e-11 P time: 1.56741e+06 first: 1.131e-01 second: 1.283e-01 infty: 2.135e-01 bias: -1.279e-10 P time: 1.56809e+06 first: 1.140e-01 second: 1.292e-01 infty: 2.150e-01 bias: -1.335e-10 P time: 1.56877e+06 first: 1.149e-01 second: 1.301e-01 infty: 2.166e-01 bias: -1.344e-10 P time: 1.56946e+06 first: 1.158e-01 second: 1.310e-01 infty: 2.182e-01 bias: -7.427e-11 P time: 1.57014e+06 first: 1.168e-01 second: 1.320e-01 infty: 2.198e-01 bias: -3.034e-11 P time: 1.57082e+06 first: 1.178e-01 second: 1.331e-01 infty: 2.214e-01 bias: -6.617e-11 P time: 1.5715e+06 first: 1.187e-01 second: 1.340e-01 infty: 2.229e-01 bias: -8.081e-11 P time: 1.57218e+06 first: 1.196e-01 second: 1.350e-01 infty: 2.243e-01 bias: -1.478e-10 P time: 1.57287e+06 first: 1.205e-01 second: 1.359e-01 infty: 2.255e-01 bias: -7.924e-12 P time: 1.57355e+06 first: 1.213e-01 second: 1.366e-01 infty: 2.265e-01 bias: -5.847e-11 P time: 1.57423e+06 first: 1.220e-01 second: 1.373e-01 infty: 2.273e-01 bias: -1.002e-10 P time: 1.57491e+06 first: 1.226e-01 second: 1.378e-01 infty: 2.278e-01 bias: -4.208e-11 P time: 1.5756e+06 first: 1.230e-01 second: 1.382e-01 infty: 2.282e-01 bias: -7.772e-11 P time: 1.57628e+06 first: 1.234e-01 second: 1.385e-01 infty: 2.283e-01 bias: -6.977e-11 P time: 1.57696e+06 first: 1.236e-01 second: 1.386e-01 infty: 2.282e-01 bias: -9.543e-11 P time: 1.57765e+06 first: 1.236e-01 second: 1.385e-01 infty: 2.278e-01 bias: -6.451e-11 P time: 1.57833e+06 first: 1.235e-01 second: 1.383e-01 infty: 2.273e-01 bias: -9.784e-11 P time: 1.57902e+06 first: 1.233e-01 second: 1.380e-01 infty: 2.266e-01 bias: -8.999e-11 P time: 1.5797e+06 first: 1.230e-01 second: 1.375e-01 infty: 2.257e-01 bias: -1.517e-10 P time: 1.58038e+06 first: 1.226e-01 second: 1.370e-01 infty: 2.248e-01 bias: -3.285e-11 P time: 1.58107e+06 first: 1.221e-01 second: 1.363e-01 infty: 2.238e-01 bias: -4.522e-11 P time: 1.58175e+06 first: 1.215e-01 second: 1.356e-01 infty: 2.227e-01 bias: -6.875e-11 P time: 1.58244e+06 first: 1.208e-01 second: 1.349e-01 infty: 2.216e-01 bias: -9.600e-11 P time: 1.58312e+06 first: 1.201e-01 second: 1.341e-01 infty: 2.206e-01 bias: -1.142e-10 P time: 1.58381e+06 first: 1.194e-01 second: 1.334e-01 infty: 2.196e-01 bias: -5.858e-11 P time: 1.58449e+06 first: 1.187e-01 second: 1.327e-01 infty: 2.187e-01 bias: -4.376e-11 P time: 1.58518e+06 first: 1.180e-01 second: 1.320e-01 infty: 2.181e-01 bias: -1.149e-10 P time: 1.58587e+06 first: 1.173e-01 second: 1.315e-01 infty: 2.177e-01 bias: -1.134e-10 P time: 1.58655e+06 first: 1.167e-01 second: 1.310e-01 infty: 2.173e-01 bias: -5.722e-11 P time: 1.58724e+06 first: 1.161e-01 second: 1.306e-01 infty: 2.172e-01 bias: -8.003e-11 P time: 1.58793e+06 first: 1.157e-01 second: 1.303e-01 infty: 2.171e-01 bias: -1.148e-11 P time: 1.58861e+06 first: 1.153e-01 second: 1.301e-01 infty: 2.172e-01 bias: -7.797e-11 P time: 1.5893e+06 first: 1.150e-01 second: 1.300e-01 infty: 2.175e-01 bias: -1.527e-10 P time: 1.58999e+06 first: 1.147e-01 second: 1.300e-01 infty: 2.180e-01 bias: -8.738e-11 P time: 1.59067e+06 first: 1.146e-01 second: 1.301e-01 infty: 2.185e-01 bias: -1.227e-10 P time: 1.59136e+06 first: 1.146e-01 second: 1.303e-01 infty: 2.190e-01 bias: -4.032e-11 P time: 1.59205e+06 first: 1.146e-01 second: 1.305e-01 infty: 2.196e-01 bias: -9.901e-11 P time: 1.59274e+06 first: 1.148e-01 second: 1.308e-01 infty: 2.202e-01 bias: -1.204e-10 P time: 1.59342e+06 first: 1.150e-01 second: 1.312e-01 infty: 2.208e-01 bias: -5.058e-11 P time: 1.59411e+06 first: 1.153e-01 second: 1.316e-01 infty: 2.214e-01 bias: -4.122e-11 P time: 1.5948e+06 first: 1.157e-01 second: 1.320e-01 infty: 2.219e-01 bias: -7.889e-14 P time: 1.59549e+06 first: 1.161e-01 second: 1.323e-01 infty: 2.223e-01 bias: -3.551e-12 P time: 1.59617e+06 first: 1.166e-01 second: 1.327e-01 infty: 2.226e-01 bias: -3.307e-11 P time: 1.59686e+06 first: 1.172e-01 second: 1.331e-01 infty: 2.229e-01 bias: -2.830e-11 P time: 1.59755e+06 first: 1.177e-01 second: 1.335e-01 infty: 2.230e-01 bias: -1.020e-10 P time: 1.59824e+06 first: 1.183e-01 second: 1.338e-01 infty: 2.231e-01 bias: -6.369e-11 P time: 1.59892e+06 first: 1.189e-01 second: 1.342e-01 infty: 2.230e-01 bias: -1.124e-10 P time: 1.59961e+06 first: 1.195e-01 second: 1.345e-01 infty: 2.229e-01 bias: -4.778e-11 P time: 1.6003e+06 first: 1.200e-01 second: 1.348e-01 infty: 2.226e-01 bias: -6.056e-11 P time: 1.60099e+06 first: 1.206e-01 second: 1.352e-01 infty: 2.224e-01 bias: -7.413e-11 P time: 1.60168e+06 first: 1.211e-01 second: 1.355e-01 infty: 2.221e-01 bias: -4.832e-11 P time: 1.60237e+06 first: 1.216e-01 second: 1.358e-01 infty: 2.218e-01 bias: -1.574e-10 P time: 1.60305e+06 first: 1.221e-01 second: 1.361e-01 infty: 2.216e-01 bias: -3.838e-11 P time: 1.60374e+06 first: 1.226e-01 second: 1.364e-01 infty: 2.216e-01 bias: -5.373e-11 P time: 1.60443e+06 first: 1.230e-01 second: 1.367e-01 infty: 2.215e-01 bias: -6.683e-11 P time: 1.60512e+06 first: 1.234e-01 second: 1.370e-01 infty: 2.215e-01 bias: -1.183e-10 P time: 1.60581e+06 first: 1.237e-01 second: 1.373e-01 infty: 2.216e-01 bias: -1.152e-10 P time: 1.6065e+06 first: 1.239e-01 second: 1.376e-01 infty: 2.217e-01 bias: -1.432e-10 P time: 1.60719e+06 first: 1.242e-01 second: 1.379e-01 infty: 2.220e-01 bias: -1.257e-10 P time: 1.60787e+06 first: 1.243e-01 second: 1.381e-01 infty: 2.222e-01 bias: -1.323e-10 P time: 1.60856e+06 first: 1.244e-01 second: 1.382e-01 infty: 2.224e-01 bias: -8.795e-11 P time: 1.60925e+06 first: 1.244e-01 second: 1.384e-01 infty: 2.227e-01 bias: -7.058e-11 P time: 1.60994e+06 first: 1.243e-01 second: 1.384e-01 infty: 2.228e-01 bias: -1.738e-11 P time: 1.61063e+06 first: 1.241e-01 second: 1.384e-01 infty: 2.230e-01 bias: -7.936e-11 P time: 1.61132e+06 first: 1.239e-01 second: 1.384e-01 infty: 2.230e-01 bias: -8.392e-11 P time: 1.61201e+06 first: 1.236e-01 second: 1.382e-01 infty: 2.228e-01 bias: -1.204e-10 P time: 1.61269e+06 first: 1.232e-01 second: 1.380e-01 infty: 2.226e-01 bias: -6.755e-11 P time: 1.61338e+06 first: 1.227e-01 second: 1.377e-01 infty: 2.221e-01 bias: -1.388e-10 P time: 1.61407e+06 first: 1.222e-01 second: 1.374e-01 infty: 2.215e-01 bias: -1.039e-10 P time: 1.61476e+06 first: 1.217e-01 second: 1.369e-01 infty: 2.208e-01 bias: -7.037e-11 P time: 1.61545e+06 first: 1.212e-01 second: 1.365e-01 infty: 2.198e-01 bias: -2.721e-11 P time: 1.61613e+06 first: 1.206e-01 second: 1.360e-01 infty: 2.187e-01 bias: -1.015e-10 P time: 1.61682e+06 first: 1.201e-01 second: 1.355e-01 infty: 2.175e-01 bias: -5.896e-11 P time: 1.61751e+06 first: 1.195e-01 second: 1.349e-01 infty: 2.161e-01 bias: -4.407e-11 P time: 1.6182e+06 first: 1.190e-01 second: 1.344e-01 infty: 2.146e-01 bias: -1.011e-10 P time: 1.61889e+06 first: 1.186e-01 second: 1.339e-01 infty: 2.132e-01 bias: -5.971e-11 P time: 1.61957e+06 first: 1.182e-01 second: 1.334e-01 infty: 2.119e-01 bias: -7.304e-11 P time: 1.62026e+06 first: 1.178e-01 second: 1.330e-01 infty: 2.105e-01 bias: -5.471e-11 P time: 1.62095e+06 first: 1.176e-01 second: 1.327e-01 infty: 2.092e-01 bias: -1.172e-10 P time: 1.62164e+06 first: 1.175e-01 second: 1.324e-01 infty: 2.080e-01 bias: -1.038e-10 P time: 1.62232e+06 first: 1.174e-01 second: 1.323e-01 infty: 2.069e-01 bias: -9.963e-11 P time: 1.62301e+06 first: 1.175e-01 second: 1.322e-01 infty: 2.060e-01 bias: 2.727e-11 P time: 1.6237e+06 first: 1.176e-01 second: 1.323e-01 infty: 2.052e-01 bias: -1.511e-10 P time: 1.62439e+06 first: 1.179e-01 second: 1.325e-01 infty: 2.048e-01 bias: -9.256e-11 P time: 1.62508e+06 first: 1.182e-01 second: 1.328e-01 infty: 2.046e-01 bias: -6.144e-11 P time: 1.62576e+06 first: 1.187e-01 second: 1.332e-01 infty: 2.046e-01 bias: -8.012e-11 P time: 1.62645e+06 first: 1.192e-01 second: 1.337e-01 infty: 2.047e-01 bias: -1.027e-10 P time: 1.62714e+06 first: 1.199e-01 second: 1.344e-01 infty: 2.050e-01 bias: -7.058e-11 P time: 1.62783e+06 first: 1.205e-01 second: 1.351e-01 infty: 2.054e-01 bias: -9.980e-11 P time: 1.62851e+06 first: 1.213e-01 second: 1.358e-01 infty: 2.060e-01 bias: -8.184e-11 P time: 1.6292e+06 first: 1.220e-01 second: 1.366e-01 infty: 2.065e-01 bias: -3.249e-11 P time: 1.62989e+06 first: 1.228e-01 second: 1.374e-01 infty: 2.071e-01 bias: -1.033e-10 P time: 1.63057e+06 first: 1.236e-01 second: 1.382e-01 infty: 2.077e-01 bias: -2.463e-11 P time: 1.63126e+06 first: 1.244e-01 second: 1.390e-01 infty: 2.083e-01 bias: -3.337e-11 P time: 1.63195e+06 first: 1.251e-01 second: 1.397e-01 infty: 2.088e-01 bias: -1.992e-11 P time: 1.63263e+06 first: 1.258e-01 second: 1.404e-01 infty: 2.092e-01 bias: -5.223e-11 P time: 1.63332e+06 first: 1.263e-01 second: 1.410e-01 infty: 2.094e-01 bias: -8.953e-11 P time: 1.63401e+06 first: 1.269e-01 second: 1.415e-01 infty: 2.095e-01 bias: -7.618e-11 P time: 1.63469e+06 first: 1.273e-01 second: 1.419e-01 infty: 2.095e-01 bias: -7.428e-11 P time: 1.63538e+06 first: 1.276e-01 second: 1.422e-01 infty: 2.092e-01 bias: -1.226e-10 P time: 1.63606e+06 first: 1.278e-01 second: 1.423e-01 infty: 2.088e-01 bias: -7.159e-11 P time: 1.63675e+06 first: 1.278e-01 second: 1.423e-01 infty: 2.082e-01 bias: -8.985e-11 P time: 1.63743e+06 first: 1.278e-01 second: 1.422e-01 infty: 2.081e-01 bias: -1.081e-10 P time: 1.63812e+06 first: 1.277e-01 second: 1.420e-01 infty: 2.081e-01 bias: -5.299e-11 P time: 1.6388e+06 first: 1.274e-01 second: 1.417e-01 infty: 2.079e-01 bias: -1.006e-10 P time: 1.63949e+06 first: 1.270e-01 second: 1.413e-01 infty: 2.079e-01 bias: -6.961e-11 P time: 1.64017e+06 first: 1.266e-01 second: 1.408e-01 infty: 2.078e-01 bias: -2.881e-11 P time: 1.64086e+06 first: 1.260e-01 second: 1.402e-01 infty: 2.077e-01 bias: -3.883e-11 P time: 1.64154e+06 first: 1.254e-01 second: 1.396e-01 infty: 2.076e-01 bias: -1.310e-10 P time: 1.64222e+06 first: 1.248e-01 second: 1.390e-01 infty: 2.076e-01 bias: -1.132e-10 P time: 1.64291e+06 first: 1.241e-01 second: 1.383e-01 infty: 2.077e-01 bias: -5.167e-11 P time: 1.64359e+06 first: 1.234e-01 second: 1.377e-01 infty: 2.078e-01 bias: -4.857e-11 P time: 1.64427e+06 first: 1.228e-01 second: 1.372e-01 infty: 2.081e-01 bias: 7.636e-13 P time: 1.64496e+06 first: 1.221e-01 second: 1.366e-01 infty: 2.084e-01 bias: -6.062e-11 P time: 1.64564e+06 first: 1.215e-01 second: 1.362e-01 infty: 2.088e-01 bias: -1.051e-10 P time: 1.64632e+06 first: 1.210e-01 second: 1.358e-01 infty: 2.094e-01 bias: -9.937e-11 P time: 1.64701e+06 first: 1.206e-01 second: 1.356e-01 infty: 2.100e-01 bias: -1.259e-10 P time: 1.64769e+06 first: 1.202e-01 second: 1.354e-01 infty: 2.107e-01 bias: -1.024e-10 P time: 1.64837e+06 first: 1.199e-01 second: 1.353e-01 infty: 2.115e-01 bias: -3.747e-11 P time: 1.64905e+06 first: 1.197e-01 second: 1.353e-01 infty: 2.125e-01 bias: -5.360e-11 P time: 1.64974e+06 first: 1.196e-01 second: 1.354e-01 infty: 2.134e-01 bias: -9.501e-11 P time: 1.65042e+06 first: 1.195e-01 second: 1.355e-01 infty: 2.143e-01 bias: -9.093e-11 P time: 1.6511e+06 first: 1.196e-01 second: 1.358e-01 infty: 2.152e-01 bias: -9.132e-11 P time: 1.65178e+06 first: 1.197e-01 second: 1.360e-01 infty: 2.161e-01 bias: -7.469e-11 P time: 1.65246e+06 first: 1.199e-01 second: 1.363e-01 infty: 2.168e-01 bias: -6.977e-11 P time: 1.65314e+06 first: 1.201e-01 second: 1.366e-01 infty: 2.175e-01 bias: -8.328e-11 P time: 1.65382e+06 first: 1.205e-01 second: 1.370e-01 infty: 2.181e-01 bias: -9.039e-11 P time: 1.65451e+06 first: 1.208e-01 second: 1.373e-01 infty: 2.186e-01 bias: -1.332e-11 P time: 1.65519e+06 first: 1.213e-01 second: 1.377e-01 infty: 2.191e-01 bias: -5.257e-11 P time: 1.65587e+06 first: 1.217e-01 second: 1.380e-01 infty: 2.194e-01 bias: -6.776e-11 P time: 1.65655e+06 first: 1.221e-01 second: 1.383e-01 infty: 2.197e-01 bias: -8.474e-11 P time: 1.65723e+06 first: 1.226e-01 second: 1.386e-01 infty: 2.200e-01 bias: -7.784e-11 P time: 1.65791e+06 first: 1.230e-01 second: 1.389e-01 infty: 2.202e-01 bias: -8.021e-11 P time: 1.65859e+06 first: 1.235e-01 second: 1.391e-01 infty: 2.204e-01 bias: -4.875e-11 P time: 1.65927e+06 first: 1.239e-01 second: 1.394e-01 infty: 2.206e-01 bias: -5.214e-11 P time: 1.65995e+06 first: 1.244e-01 second: 1.396e-01 infty: 2.208e-01 bias: -1.883e-10 P time: 1.66062e+06 first: 1.248e-01 second: 1.399e-01 infty: 2.210e-01 bias: -4.407e-11 P time: 1.6613e+06 first: 1.252e-01 second: 1.401e-01 infty: 2.214e-01 bias: -1.056e-10 P time: 1.66198e+06 first: 1.256e-01 second: 1.404e-01 infty: 2.217e-01 bias: -1.260e-10 P time: 1.66266e+06 first: 1.259e-01 second: 1.406e-01 infty: 2.221e-01 bias: -6.054e-11 P time: 1.66334e+06 first: 1.263e-01 second: 1.408e-01 infty: 2.226e-01 bias: -1.161e-10 P time: 1.66402e+06 first: 1.266e-01 second: 1.411e-01 infty: 2.231e-01 bias: -9.951e-11 P time: 1.6647e+06 first: 1.269e-01 second: 1.414e-01 infty: 2.236e-01 bias: -2.772e-11 P time: 1.66537e+06 first: 1.272e-01 second: 1.416e-01 infty: 2.242e-01 bias: -1.051e-10 P time: 1.66605e+06 first: 1.274e-01 second: 1.418e-01 infty: 2.248e-01 bias: -8.382e-11 P time: 1.66673e+06 first: 1.276e-01 second: 1.421e-01 infty: 2.254e-01 bias: -8.359e-11 P time: 1.66741e+06 first: 1.278e-01 second: 1.422e-01 infty: 2.261e-01 bias: -7.129e-11 P time: 1.66808e+06 first: 1.278e-01 second: 1.424e-01 infty: 2.268e-01 bias: -1.121e-10 P time: 1.66876e+06 first: 1.278e-01 second: 1.425e-01 infty: 2.276e-01 bias: -5.271e-11 P time: 1.66944e+06 first: 1.278e-01 second: 1.426e-01 infty: 2.283e-01 bias: -9.470e-11 P time: 1.67011e+06 first: 1.276e-01 second: 1.426e-01 infty: 2.290e-01 bias: -1.268e-10 P time: 1.67079e+06 first: 1.274e-01 second: 1.425e-01 infty: 2.296e-01 bias: -6.591e-11 P time: 1.67147e+06 first: 1.271e-01 second: 1.424e-01 infty: 2.301e-01 bias: -3.879e-11 P time: 1.67214e+06 first: 1.267e-01 second: 1.422e-01 infty: 2.305e-01 bias: -5.697e-11 P time: 1.67282e+06 first: 1.263e-01 second: 1.420e-01 infty: 2.309e-01 bias: -9.469e-11 P time: 1.67349e+06 first: 1.258e-01 second: 1.417e-01 infty: 2.311e-01 bias: -1.288e-10 P time: 1.67417e+06 first: 1.253e-01 second: 1.413e-01 infty: 2.312e-01 bias: -9.890e-11 P time: 1.67484e+06 first: 1.247e-01 second: 1.409e-01 infty: 2.313e-01 bias: -9.372e-11 P time: 1.67552e+06 first: 1.242e-01 second: 1.404e-01 infty: 2.312e-01 bias: -1.294e-10 P time: 1.67619e+06 first: 1.236e-01 second: 1.400e-01 infty: 2.309e-01 bias: -6.448e-11 P time: 1.67687e+06 first: 1.231e-01 second: 1.395e-01 infty: 2.306e-01 bias: -1.071e-10 P time: 1.67754e+06 first: 1.226e-01 second: 1.390e-01 infty: 2.302e-01 bias: -9.044e-11 P time: 1.67822e+06 first: 1.221e-01 second: 1.385e-01 infty: 2.298e-01 bias: -1.469e-10 P time: 1.67889e+06 first: 1.217e-01 second: 1.381e-01 infty: 2.292e-01 bias: -4.623e-11 P time: 1.67956e+06 first: 1.214e-01 second: 1.377e-01 infty: 2.286e-01 bias: -1.163e-10 P time: 1.68024e+06 first: 1.211e-01 second: 1.374e-01 infty: 2.281e-01 bias: -1.303e-11 P time: 1.68091e+06 first: 1.210e-01 second: 1.371e-01 infty: 2.275e-01 bias: -1.310e-10 P time: 1.68158e+06 first: 1.209e-01 second: 1.369e-01 infty: 2.270e-01 bias: -6.866e-11 P time: 1.68226e+06 first: 1.209e-01 second: 1.369e-01 infty: 2.265e-01 bias: -8.778e-11 P time: 1.68293e+06 first: 1.210e-01 second: 1.369e-01 infty: 2.261e-01 bias: -7.180e-11 P time: 1.6836e+06 first: 1.211e-01 second: 1.370e-01 infty: 2.258e-01 bias: -4.919e-11 P time: 1.68428e+06 first: 1.213e-01 second: 1.372e-01 infty: 2.258e-01 bias: -1.272e-10 P time: 1.68495e+06 first: 1.217e-01 second: 1.375e-01 infty: 2.260e-01 bias: -7.277e-11 P time: 1.68562e+06 first: 1.221e-01 second: 1.379e-01 infty: 2.263e-01 bias: -5.101e-11 P time: 1.68629e+06 first: 1.225e-01 second: 1.383e-01 infty: 2.267e-01 bias: -1.007e-10 P time: 1.68696e+06 first: 1.230e-01 second: 1.389e-01 infty: 2.273e-01 bias: -2.884e-11 P time: 1.68764e+06 first: 1.235e-01 second: 1.394e-01 infty: 2.280e-01 bias: -6.417e-11 P time: 1.68831e+06 first: 1.241e-01 second: 1.401e-01 infty: 2.288e-01 bias: -2.911e-11 P time: 1.68898e+06 first: 1.246e-01 second: 1.407e-01 infty: 2.296e-01 bias: -4.427e-11 P time: 1.68965e+06 first: 1.252e-01 second: 1.413e-01 infty: 2.304e-01 bias: -6.545e-11 P time: 1.69032e+06 first: 1.257e-01 second: 1.419e-01 infty: 2.312e-01 bias: -5.803e-11 P time: 1.69099e+06 first: 1.262e-01 second: 1.425e-01 infty: 2.321e-01 bias: -8.701e-11 P time: 1.69166e+06 first: 1.267e-01 second: 1.430e-01 infty: 2.328e-01 bias: -6.652e-11 P time: 1.69234e+06 first: 1.271e-01 second: 1.435e-01 infty: 2.336e-01 bias: -7.543e-11 P time: 1.69301e+06 first: 1.274e-01 second: 1.438e-01 infty: 2.341e-01 bias: -6.419e-11 P time: 1.69368e+06 first: 1.277e-01 second: 1.441e-01 infty: 2.346e-01 bias: -9.790e-11 P time: 1.69435e+06 first: 1.279e-01 second: 1.443e-01 infty: 2.349e-01 bias: -1.018e-10 P time: 1.69502e+06 first: 1.280e-01 second: 1.444e-01 infty: 2.350e-01 bias: -6.285e-11 P time: 1.69569e+06 first: 1.281e-01 second: 1.444e-01 infty: 2.350e-01 bias: -7.143e-11 P time: 1.69636e+06 first: 1.280e-01 second: 1.443e-01 infty: 2.348e-01 bias: -6.009e-11 P time: 1.69702e+06 first: 1.279e-01 second: 1.441e-01 infty: 2.345e-01 bias: -7.038e-11 P time: 1.69769e+06 first: 1.277e-01 second: 1.438e-01 infty: 2.340e-01 bias: -5.099e-11 P time: 1.69836e+06 first: 1.274e-01 second: 1.434e-01 infty: 2.335e-01 bias: -4.085e-11 P time: 1.69903e+06 first: 1.271e-01 second: 1.430e-01 infty: 2.328e-01 bias: -3.424e-11 P time: 1.6997e+06 first: 1.267e-01 second: 1.425e-01 infty: 2.321e-01 bias: -5.614e-11 P time: 1.70037e+06 first: 1.263e-01 second: 1.420e-01 infty: 2.314e-01 bias: -9.750e-11 P time: 1.70104e+06 first: 1.258e-01 second: 1.415e-01 infty: 2.306e-01 bias: -5.696e-11 P time: 1.7017e+06 first: 1.254e-01 second: 1.410e-01 infty: 2.299e-01 bias: -7.631e-11 P time: 1.70237e+06 first: 1.249e-01 second: 1.405e-01 infty: 2.292e-01 bias: -8.964e-11 P time: 1.70304e+06 first: 1.244e-01 second: 1.401e-01 infty: 2.285e-01 bias: -6.692e-11 P time: 1.70371e+06 first: 1.240e-01 second: 1.397e-01 infty: 2.279e-01 bias: -9.611e-11 P time: 1.70437e+06 first: 1.236e-01 second: 1.393e-01 infty: 2.275e-01 bias: -7.617e-11 P time: 1.70504e+06 first: 1.233e-01 second: 1.391e-01 infty: 2.273e-01 bias: -4.850e-11 P time: 1.70571e+06 first: 1.230e-01 second: 1.389e-01 infty: 2.272e-01 bias: -1.671e-11 P time: 1.70637e+06 first: 1.228e-01 second: 1.388e-01 infty: 2.272e-01 bias: -1.070e-10 P time: 1.70704e+06 first: 1.226e-01 second: 1.388e-01 infty: 2.272e-01 bias: -7.999e-11 P time: 1.70771e+06 first: 1.226e-01 second: 1.389e-01 infty: 2.272e-01 bias: -7.374e-11 P time: 1.70837e+06 first: 1.226e-01 second: 1.390e-01 infty: 2.273e-01 bias: -7.712e-11 P time: 1.70904e+06 first: 1.226e-01 second: 1.393e-01 infty: 2.274e-01 bias: -7.436e-11 P time: 1.70971e+06 first: 1.228e-01 second: 1.395e-01 infty: 2.275e-01 bias: -1.181e-10 P time: 1.71037e+06 first: 1.229e-01 second: 1.398e-01 infty: 2.276e-01 bias: -1.245e-10 P time: 1.71104e+06 first: 1.232e-01 second: 1.402e-01 infty: 2.277e-01 bias: -1.087e-10 P time: 1.7117e+06 first: 1.235e-01 second: 1.405e-01 infty: 2.278e-01 bias: -1.197e-10 P time: 1.71237e+06 first: 1.238e-01 second: 1.409e-01 infty: 2.278e-01 bias: -7.878e-11 P time: 1.71303e+06 first: 1.242e-01 second: 1.413e-01 infty: 2.278e-01 bias: -6.590e-11 P time: 1.7137e+06 first: 1.246e-01 second: 1.416e-01 infty: 2.278e-01 bias: -8.964e-12 P time: 1.71436e+06 first: 1.249e-01 second: 1.419e-01 infty: 2.277e-01 bias: -5.778e-11 P time: 1.71503e+06 first: 1.253e-01 second: 1.421e-01 infty: 2.275e-01 bias: -6.199e-11 P time: 1.7157e+06 first: 1.257e-01 second: 1.424e-01 infty: 2.272e-01 bias: -7.601e-11 P time: 1.71636e+06 first: 1.260e-01 second: 1.425e-01 infty: 2.269e-01 bias: -9.404e-11 P time: 1.71702e+06 first: 1.264e-01 second: 1.427e-01 infty: 2.266e-01 bias: -6.670e-12 P time: 1.71769e+06 first: 1.267e-01 second: 1.428e-01 infty: 2.262e-01 bias: -7.205e-11 P time: 1.71835e+06 first: 1.269e-01 second: 1.429e-01 infty: 2.258e-01 bias: -1.689e-10 P time: 1.71902e+06 first: 1.271e-01 second: 1.429e-01 infty: 2.254e-01 bias: -6.517e-11 P time: 1.71968e+06 first: 1.273e-01 second: 1.430e-01 infty: 2.249e-01 bias: -1.034e-10 P time: 1.72035e+06 first: 1.275e-01 second: 1.430e-01 infty: 2.244e-01 bias: -1.052e-10 P time: 1.72101e+06 first: 1.277e-01 second: 1.430e-01 infty: 2.240e-01 bias: -1.103e-10 P time: 1.72167e+06 first: 1.278e-01 second: 1.430e-01 infty: 2.235e-01 bias: -1.250e-10 P time: 1.72234e+06 first: 1.279e-01 second: 1.431e-01 infty: 2.231e-01 bias: -8.441e-11 P time: 1.723e+06 first: 1.280e-01 second: 1.431e-01 infty: 2.227e-01 bias: -4.853e-11 P time: 1.72367e+06 first: 1.281e-01 second: 1.432e-01 infty: 2.224e-01 bias: -8.066e-12 P time: 1.72433e+06 first: 1.282e-01 second: 1.433e-01 infty: 2.222e-01 bias: -7.195e-11 P time: 1.72499e+06 first: 1.283e-01 second: 1.434e-01 infty: 2.220e-01 bias: -4.354e-11 P time: 1.72566e+06 first: 1.284e-01 second: 1.435e-01 infty: 2.219e-01 bias: -8.548e-11 P time: 1.72632e+06 first: 1.284e-01 second: 1.436e-01 infty: 2.218e-01 bias: -9.129e-11 P time: 1.72698e+06 first: 1.285e-01 second: 1.438e-01 infty: 2.219e-01 bias: -6.259e-11 P time: 1.72764e+06 first: 1.285e-01 second: 1.439e-01 infty: 2.219e-01 bias: -5.831e-11 P time: 1.72831e+06 first: 1.285e-01 second: 1.440e-01 infty: 2.220e-01 bias: -1.263e-10 P time: 1.72897e+06 first: 1.284e-01 second: 1.441e-01 infty: 2.220e-01 bias: -5.021e-11 P time: 1.72963e+06 first: 1.284e-01 second: 1.441e-01 infty: 2.221e-01 bias: -8.352e-11 P time: 1.73029e+06 first: 1.282e-01 second: 1.441e-01 infty: 2.221e-01 bias: -9.035e-11 P time: 1.73096e+06 first: 1.281e-01 second: 1.441e-01 infty: 2.220e-01 bias: -1.509e-11 P time: 1.73162e+06 first: 1.278e-01 second: 1.440e-01 infty: 2.219e-01 bias: -1.123e-10 P time: 1.73228e+06 first: 1.276e-01 second: 1.438e-01 infty: 2.218e-01 bias: -1.027e-10 P time: 1.73294e+06 first: 1.273e-01 second: 1.436e-01 infty: 2.215e-01 bias: -5.305e-11 P time: 1.73361e+06 first: 1.270e-01 second: 1.434e-01 infty: 2.211e-01 bias: -9.797e-11 P time: 1.73427e+06 first: 1.267e-01 second: 1.431e-01 infty: 2.206e-01 bias: -1.107e-10 P time: 1.73493e+06 first: 1.263e-01 second: 1.428e-01 infty: 2.198e-01 bias: -7.762e-11 P time: 1.73559e+06 first: 1.260e-01 second: 1.424e-01 infty: 2.190e-01 bias: -1.048e-10 P time: 1.73625e+06 first: 1.257e-01 second: 1.420e-01 infty: 2.180e-01 bias: -6.210e-11 P time: 1.73691e+06 first: 1.254e-01 second: 1.417e-01 infty: 2.169e-01 bias: -2.655e-11 P time: 1.73757e+06 first: 1.252e-01 second: 1.413e-01 infty: 2.158e-01 bias: -6.268e-11 P time: 1.73824e+06 first: 1.250e-01 second: 1.410e-01 infty: 2.145e-01 bias: -5.387e-11 P time: 1.7389e+06 first: 1.249e-01 second: 1.407e-01 infty: 2.132e-01 bias: -2.729e-11 P time: 1.73956e+06 first: 1.248e-01 second: 1.405e-01 infty: 2.119e-01 bias: -1.367e-11 P time: 1.74022e+06 first: 1.248e-01 second: 1.403e-01 infty: 2.107e-01 bias: -8.657e-11 P time: 1.74088e+06 first: 1.248e-01 second: 1.402e-01 infty: 2.095e-01 bias: -6.943e-11 P time: 1.74154e+06 first: 1.250e-01 second: 1.402e-01 infty: 2.084e-01 bias: -3.672e-11 P time: 1.7422e+06 first: 1.252e-01 second: 1.403e-01 infty: 2.073e-01 bias: -8.026e-11 P time: 1.74286e+06 first: 1.254e-01 second: 1.404e-01 infty: 2.067e-01 bias: -8.625e-11 P time: 1.74352e+06 first: 1.258e-01 second: 1.407e-01 infty: 2.062e-01 bias: -3.164e-11 P time: 1.74418e+06 first: 1.262e-01 second: 1.410e-01 infty: 2.058e-01 bias: 4.250e-11 P time: 1.74484e+06 first: 1.267e-01 second: 1.415e-01 infty: 2.056e-01 bias: 7.141e-12 P time: 1.7455e+06 first: 1.272e-01 second: 1.420e-01 infty: 2.056e-01 bias: -1.175e-10 P time: 1.74616e+06 first: 1.277e-01 second: 1.425e-01 infty: 2.057e-01 bias: -7.672e-11 P time: 1.74682e+06 first: 1.283e-01 second: 1.431e-01 infty: 2.059e-01 bias: -2.794e-11 P time: 1.74748e+06 first: 1.289e-01 second: 1.438e-01 infty: 2.061e-01 bias: -4.782e-11 P time: 1.74814e+06 first: 1.295e-01 second: 1.444e-01 infty: 2.065e-01 bias: -9.406e-11 P time: 1.7488e+06 first: 1.301e-01 second: 1.450e-01 infty: 2.070e-01 bias: -8.373e-11 P time: 1.74946e+06 first: 1.307e-01 second: 1.457e-01 infty: 2.076e-01 bias: -2.351e-11 P time: 1.75012e+06 first: 1.312e-01 second: 1.462e-01 infty: 2.082e-01 bias: -4.277e-11 P time: 1.75078e+06 first: 1.317e-01 second: 1.468e-01 infty: 2.088e-01 bias: -3.420e-11 P time: 1.75144e+06 first: 1.321e-01 second: 1.472e-01 infty: 2.093e-01 bias: -1.085e-10 P time: 1.7521e+06 first: 1.325e-01 second: 1.476e-01 infty: 2.098e-01 bias: -8.787e-11 P time: 1.75276e+06 first: 1.327e-01 second: 1.479e-01 infty: 2.101e-01 bias: -8.445e-11 P time: 1.75342e+06 first: 1.330e-01 second: 1.481e-01 infty: 2.102e-01 bias: -6.625e-11 P time: 1.75408e+06 first: 1.331e-01 second: 1.482e-01 infty: 2.102e-01 bias: -8.188e-11 P time: 1.75474e+06 first: 1.331e-01 second: 1.482e-01 infty: 2.101e-01 bias: -1.117e-10 P time: 1.75539e+06 first: 1.331e-01 second: 1.481e-01 infty: 2.098e-01 bias: -1.387e-10 P time: 1.75605e+06 first: 1.329e-01 second: 1.479e-01 infty: 2.093e-01 bias: -1.014e-10 P time: 1.75671e+06 first: 1.327e-01 second: 1.476e-01 infty: 2.087e-01 bias: -7.298e-11 P time: 1.75737e+06 first: 1.325e-01 second: 1.473e-01 infty: 2.080e-01 bias: -4.715e-11 P time: 1.75803e+06 first: 1.321e-01 second: 1.468e-01 infty: 2.073e-01 bias: -1.109e-10 P time: 1.75869e+06 first: 1.317e-01 second: 1.464e-01 infty: 2.066e-01 bias: -1.553e-10 P time: 1.75935e+06 first: 1.313e-01 second: 1.458e-01 infty: 2.059e-01 bias: -1.381e-10 P time: 1.76001e+06 first: 1.309e-01 second: 1.453e-01 infty: 2.052e-01 bias: -1.495e-10 P time: 1.76067e+06 first: 1.304e-01 second: 1.447e-01 infty: 2.045e-01 bias: -4.625e-11 P time: 1.76132e+06 first: 1.300e-01 second: 1.442e-01 infty: 2.040e-01 bias: -1.070e-10 P time: 1.76198e+06 first: 1.295e-01 second: 1.437e-01 infty: 2.035e-01 bias: -6.212e-11 P time: 1.76264e+06 first: 1.292e-01 second: 1.433e-01 infty: 2.032e-01 bias: -9.462e-11 P time: 1.7633e+06 first: 1.288e-01 second: 1.430e-01 infty: 2.031e-01 bias: -4.040e-11 P time: 1.76396e+06 first: 1.285e-01 second: 1.427e-01 infty: 2.031e-01 bias: -6.163e-11 P time: 1.76462e+06 first: 1.283e-01 second: 1.425e-01 infty: 2.035e-01 bias: -8.418e-11 P time: 1.76528e+06 first: 1.281e-01 second: 1.424e-01 infty: 2.041e-01 bias: -1.005e-11 P time: 1.76593e+06 first: 1.280e-01 second: 1.424e-01 infty: 2.049e-01 bias: -1.275e-10 P time: 1.76659e+06 first: 1.280e-01 second: 1.426e-01 infty: 2.059e-01 bias: -8.256e-11 P time: 1.76725e+06 first: 1.281e-01 second: 1.428e-01 infty: 2.069e-01 bias: -1.432e-10 P time: 1.76791e+06 first: 1.282e-01 second: 1.431e-01 infty: 2.081e-01 bias: -1.061e-10 P time: 1.76857e+06 first: 1.284e-01 second: 1.434e-01 infty: 2.092e-01 bias: -7.559e-11 P time: 1.76922e+06 first: 1.287e-01 second: 1.439e-01 infty: 2.105e-01 bias: -5.224e-12 P time: 1.76988e+06 first: 1.290e-01 second: 1.443e-01 infty: 2.119e-01 bias: -7.505e-11 P time: 1.77054e+06 first: 1.293e-01 second: 1.449e-01 infty: 2.132e-01 bias: -4.851e-12 P time: 1.7712e+06 first: 1.297e-01 second: 1.454e-01 infty: 2.144e-01 bias: -3.371e-11 P time: 1.77186e+06 first: 1.301e-01 second: 1.459e-01 infty: 2.155e-01 bias: -6.334e-11 P time: 1.77251e+06 first: 1.305e-01 second: 1.464e-01 infty: 2.164e-01 bias: -1.546e-11 P time: 1.77317e+06 first: 1.309e-01 second: 1.468e-01 infty: 2.172e-01 bias: -6.549e-11 P time: 1.77383e+06 first: 1.313e-01 second: 1.472e-01 infty: 2.178e-01 bias: -6.392e-11 P time: 1.77449e+06 first: 1.316e-01 second: 1.476e-01 infty: 2.182e-01 bias: -1.176e-11 P time: 1.77515e+06 first: 1.320e-01 second: 1.478e-01 infty: 2.184e-01 bias: -1.183e-11 P time: 1.7758e+06 first: 1.322e-01 second: 1.480e-01 infty: 2.186e-01 bias: -1.396e-10 P time: 1.77646e+06 first: 1.325e-01 second: 1.482e-01 infty: 2.185e-01 bias: -5.566e-11 P time: 1.77712e+06 first: 1.327e-01 second: 1.483e-01 infty: 2.184e-01 bias: -8.928e-11 P time: 1.77778e+06 first: 1.328e-01 second: 1.483e-01 infty: 2.181e-01 bias: -5.931e-11 P time: 1.77844e+06 first: 1.329e-01 second: 1.483e-01 infty: 2.177e-01 bias: -1.045e-10 P time: 1.77909e+06 first: 1.330e-01 second: 1.482e-01 infty: 2.174e-01 bias: -1.966e-11 P time: 1.77975e+06 first: 1.330e-01 second: 1.481e-01 infty: 2.170e-01 bias: -5.927e-11 P time: 1.78041e+06 first: 1.330e-01 second: 1.480e-01 infty: 2.165e-01 bias: -6.207e-11 P time: 1.78107e+06 first: 1.330e-01 second: 1.479e-01 infty: 2.162e-01 bias: -8.656e-11 P time: 1.78172e+06 first: 1.330e-01 second: 1.478e-01 infty: 2.159e-01 bias: -1.297e-10 P time: 1.78238e+06 first: 1.329e-01 second: 1.477e-01 infty: 2.157e-01 bias: -5.957e-11 P time: 1.78304e+06 first: 1.329e-01 second: 1.476e-01 infty: 2.156e-01 bias: -8.103e-11 P time: 1.7837e+06 first: 1.328e-01 second: 1.475e-01 infty: 2.155e-01 bias: -5.169e-11 P time: 1.78435e+06 first: 1.328e-01 second: 1.475e-01 infty: 2.155e-01 bias: -6.019e-11 P time: 1.78501e+06 first: 1.327e-01 second: 1.475e-01 infty: 2.156e-01 bias: -1.109e-10 P time: 1.78567e+06 first: 1.327e-01 second: 1.475e-01 infty: 2.158e-01 bias: -4.614e-11 P time: 1.78633e+06 first: 1.326e-01 second: 1.475e-01 infty: 2.160e-01 bias: -7.634e-11 P time: 1.78698e+06 first: 1.326e-01 second: 1.476e-01 infty: 2.163e-01 bias: -4.404e-11 P time: 1.78764e+06 first: 1.325e-01 second: 1.477e-01 infty: 2.166e-01 bias: -1.165e-10 P time: 1.7883e+06 first: 1.325e-01 second: 1.478e-01 infty: 2.170e-01 bias: -1.147e-10 P time: 1.78896e+06 first: 1.324e-01 second: 1.479e-01 infty: 2.174e-01 bias: -8.390e-11 P time: 1.78961e+06 first: 1.323e-01 second: 1.480e-01 infty: 2.178e-01 bias: -3.765e-11 P time: 1.79027e+06 first: 1.322e-01 second: 1.480e-01 infty: 2.182e-01 bias: -3.035e-11 P time: 1.79093e+06 first: 1.320e-01 second: 1.481e-01 infty: 2.186e-01 bias: -1.341e-10 P time: 1.79158e+06 first: 1.319e-01 second: 1.481e-01 infty: 2.189e-01 bias: -1.368e-10 P time: 1.79224e+06 first: 1.317e-01 second: 1.481e-01 infty: 2.191e-01 bias: -4.230e-11 P time: 1.7929e+06 first: 1.315e-01 second: 1.481e-01 infty: 2.192e-01 bias: -1.151e-10 P time: 1.79356e+06 first: 1.313e-01 second: 1.480e-01 infty: 2.194e-01 bias: -6.503e-11 P time: 1.79421e+06 first: 1.311e-01 second: 1.479e-01 infty: 2.194e-01 bias: -9.390e-11 P time: 1.79487e+06 first: 1.309e-01 second: 1.477e-01 infty: 2.193e-01 bias: -9.139e-11 P time: 1.79553e+06 first: 1.307e-01 second: 1.476e-01 infty: 2.192e-01 bias: -1.196e-10 P time: 1.79618e+06 first: 1.305e-01 second: 1.474e-01 infty: 2.189e-01 bias: -6.655e-11 P time: 1.79684e+06 first: 1.304e-01 second: 1.472e-01 infty: 2.186e-01 bias: -8.053e-11 P time: 1.7975e+06 first: 1.302e-01 second: 1.470e-01 infty: 2.182e-01 bias: -1.315e-10 P time: 1.79816e+06 first: 1.301e-01 second: 1.469e-01 infty: 2.178e-01 bias: -6.291e-11 P time: 1.79881e+06 first: 1.301e-01 second: 1.467e-01 infty: 2.179e-01 bias: -3.762e-11 P time: 1.79947e+06 first: 1.301e-01 second: 1.466e-01 infty: 2.181e-01 bias: -5.629e-11 P time: 1.80013e+06 first: 1.301e-01 second: 1.466e-01 infty: 2.183e-01 bias: -6.351e-12 P time: 1.80078e+06 first: 1.302e-01 second: 1.466e-01 infty: 2.186e-01 bias: -4.127e-12 P time: 1.80144e+06 first: 1.303e-01 second: 1.467e-01 infty: 2.190e-01 bias: -6.964e-11 P time: 1.8021e+06 first: 1.305e-01 second: 1.468e-01 infty: 2.194e-01 bias: -8.374e-11 P time: 1.80275e+06 first: 1.308e-01 second: 1.470e-01 infty: 2.200e-01 bias: -4.369e-12 P time: 1.80341e+06 first: 1.310e-01 second: 1.473e-01 infty: 2.207e-01 bias: -7.094e-11 P time: 1.80407e+06 first: 1.313e-01 second: 1.476e-01 infty: 2.216e-01 bias: -4.690e-11 P time: 1.80472e+06 first: 1.317e-01 second: 1.480e-01 infty: 2.225e-01 bias: -8.514e-11 P time: 1.80538e+06 first: 1.320e-01 second: 1.484e-01 infty: 2.235e-01 bias: -7.183e-11 P time: 1.80604e+06 first: 1.324e-01 second: 1.489e-01 infty: 2.247e-01 bias: -6.336e-11 P time: 1.80669e+06 first: 1.328e-01 second: 1.494e-01 infty: 2.259e-01 bias: -9.343e-11 P time: 1.80735e+06 first: 1.332e-01 second: 1.499e-01 infty: 2.273e-01 bias: -4.565e-11 P time: 1.80801e+06 first: 1.336e-01 second: 1.505e-01 infty: 2.287e-01 bias: 7.341e-12 P time: 1.80866e+06 first: 1.340e-01 second: 1.510e-01 infty: 2.300e-01 bias: -6.725e-11 P time: 1.80932e+06 first: 1.343e-01 second: 1.514e-01 infty: 2.313e-01 bias: -7.119e-11 P time: 1.80998e+06 first: 1.346e-01 second: 1.519e-01 infty: 2.326e-01 bias: -6.082e-11 P time: 1.81064e+06 first: 1.348e-01 second: 1.522e-01 infty: 2.337e-01 bias: -3.611e-11 P time: 1.81129e+06 first: 1.350e-01 second: 1.525e-01 infty: 2.347e-01 bias: -9.801e-11 P time: 1.81195e+06 first: 1.351e-01 second: 1.528e-01 infty: 2.356e-01 bias: -3.553e-11 P time: 1.81261e+06 first: 1.352e-01 second: 1.529e-01 infty: 2.364e-01 bias: -1.069e-10 P time: 1.81327e+06 first: 1.352e-01 second: 1.529e-01 infty: 2.370e-01 bias: -6.744e-11 P time: 1.81392e+06 first: 1.351e-01 second: 1.529e-01 infty: 2.375e-01 bias: -9.178e-11 P time: 1.81458e+06 first: 1.349e-01 second: 1.527e-01 infty: 2.378e-01 bias: -9.089e-11 P time: 1.81524e+06 first: 1.346e-01 second: 1.525e-01 infty: 2.379e-01 bias: -3.730e-11 P time: 1.8159e+06 first: 1.343e-01 second: 1.521e-01 infty: 2.379e-01 bias: -1.266e-10 P time: 1.81655e+06 first: 1.339e-01 second: 1.517e-01 infty: 2.377e-01 bias: -5.874e-11 P time: 1.81721e+06 first: 1.334e-01 second: 1.512e-01 infty: 2.375e-01 bias: -1.155e-10 P time: 1.81787e+06 first: 1.329e-01 second: 1.507e-01 infty: 2.371e-01 bias: -7.151e-11 P time: 1.81853e+06 first: 1.324e-01 second: 1.501e-01 infty: 2.367e-01 bias: -7.670e-11 P time: 1.81919e+06 first: 1.318e-01 second: 1.494e-01 infty: 2.362e-01 bias: -1.257e-10 P time: 1.81984e+06 first: 1.312e-01 second: 1.488e-01 infty: 2.357e-01 bias: -1.347e-10 P time: 1.8205e+06 first: 1.307e-01 second: 1.482e-01 infty: 2.352e-01 bias: -2.485e-11 P time: 1.82116e+06 first: 1.301e-01 second: 1.476e-01 infty: 2.347e-01 bias: -1.261e-10 P time: 1.82182e+06 first: 1.296e-01 second: 1.471e-01 infty: 2.342e-01 bias: -1.092e-10 P time: 1.82248e+06 first: 1.292e-01 second: 1.467e-01 infty: 2.339e-01 bias: -7.892e-11 P time: 1.82313e+06 first: 1.288e-01 second: 1.463e-01 infty: 2.336e-01 bias: -3.149e-11 P time: 1.82379e+06 first: 1.285e-01 second: 1.460e-01 infty: 2.334e-01 bias: -1.325e-10 P time: 1.82445e+06 first: 1.283e-01 second: 1.459e-01 infty: 2.334e-01 bias: -1.192e-10 P time: 1.82511e+06 first: 1.281e-01 second: 1.458e-01 infty: 2.336e-01 bias: -9.975e-11 P time: 1.82576e+06 first: 1.281e-01 second: 1.459e-01 infty: 2.339e-01 bias: -8.958e-11 P time: 1.82642e+06 first: 1.282e-01 second: 1.461e-01 infty: 2.344e-01 bias: -1.261e-10 P time: 1.82708e+06 first: 1.283e-01 second: 1.464e-01 infty: 2.350e-01 bias: -5.742e-11 P time: 1.82774e+06 first: 1.285e-01 second: 1.467e-01 infty: 2.359e-01 bias: -8.083e-11 P time: 1.8284e+06 first: 1.289e-01 second: 1.472e-01 infty: 2.370e-01 bias: -9.991e-11 P time: 1.82905e+06 first: 1.293e-01 second: 1.477e-01 infty: 2.381e-01 bias: -3.015e-11 P time: 1.82971e+06 first: 1.298e-01 second: 1.483e-01 infty: 2.393e-01 bias: -7.817e-11 P time: 1.83037e+06 first: 1.303e-01 second: 1.489e-01 infty: 2.405e-01 bias: -6.739e-11 P time: 1.83103e+06 first: 1.308e-01 second: 1.495e-01 infty: 2.417e-01 bias: -5.416e-11 P time: 1.83169e+06 first: 1.314e-01 second: 1.502e-01 infty: 2.428e-01 bias: -3.129e-11 P time: 1.83235e+06 first: 1.319e-01 second: 1.507e-01 infty: 2.438e-01 bias: -5.797e-11 P time: 1.833e+06 first: 1.325e-01 second: 1.513e-01 infty: 2.447e-01 bias: -1.228e-11 P time: 1.83366e+06 first: 1.330e-01 second: 1.518e-01 infty: 2.455e-01 bias: -1.188e-10 P time: 1.83432e+06 first: 1.335e-01 second: 1.522e-01 infty: 2.461e-01 bias: -1.713e-10 P time: 1.83498e+06 first: 1.340e-01 second: 1.526e-01 infty: 2.465e-01 bias: -5.139e-11 P time: 1.83564e+06 first: 1.344e-01 second: 1.529e-01 infty: 2.468e-01 bias: -8.475e-11 P time: 1.8363e+06 first: 1.347e-01 second: 1.530e-01 infty: 2.469e-01 bias: -3.594e-11 P time: 1.83696e+06 first: 1.349e-01 second: 1.531e-01 infty: 2.469e-01 bias: -3.022e-11 P time: 1.83761e+06 first: 1.350e-01 second: 1.532e-01 infty: 2.467e-01 bias: -4.433e-11 P time: 1.83827e+06 first: 1.351e-01 second: 1.531e-01 infty: 2.463e-01 bias: -3.628e-11 P time: 1.83893e+06 first: 1.351e-01 second: 1.530e-01 infty: 2.459e-01 bias: -8.426e-11 P time: 1.83959e+06 first: 1.351e-01 second: 1.528e-01 infty: 2.455e-01 bias: -7.482e-11 P time: 1.84025e+06 first: 1.349e-01 second: 1.525e-01 infty: 2.450e-01 bias: -1.187e-10 P time: 1.84091e+06 first: 1.348e-01 second: 1.523e-01 infty: 2.445e-01 bias: -1.333e-10 P time: 1.84157e+06 first: 1.346e-01 second: 1.520e-01 infty: 2.442e-01 bias: -3.789e-11 P time: 1.84223e+06 first: 1.343e-01 second: 1.517e-01 infty: 2.438e-01 bias: -1.641e-10 P time: 1.84289e+06 first: 1.341e-01 second: 1.514e-01 infty: 2.436e-01 bias: -7.197e-11 P time: 1.84355e+06 first: 1.338e-01 second: 1.511e-01 infty: 2.434e-01 bias: -5.357e-11 P time: 1.84421e+06 first: 1.336e-01 second: 1.508e-01 infty: 2.433e-01 bias: -4.140e-11 P time: 1.84487e+06 first: 1.333e-01 second: 1.506e-01 infty: 2.433e-01 bias: -8.580e-11 P time: 1.84553e+06 first: 1.331e-01 second: 1.503e-01 infty: 2.433e-01 bias: -9.096e-11 P time: 1.84619e+06 first: 1.328e-01 second: 1.501e-01 infty: 2.433e-01 bias: -5.911e-11 P time: 1.84685e+06 first: 1.326e-01 second: 1.500e-01 infty: 2.434e-01 bias: -1.155e-10 P time: 1.84751e+06 first: 1.324e-01 second: 1.498e-01 infty: 2.436e-01 bias: -1.566e-10 P time: 1.84817e+06 first: 1.321e-01 second: 1.497e-01 infty: 2.437e-01 bias: -6.318e-11 P time: 1.84883e+06 first: 1.319e-01 second: 1.496e-01 infty: 2.439e-01 bias: -7.014e-11 P time: 1.84949e+06 first: 1.317e-01 second: 1.495e-01 infty: 2.441e-01 bias: -1.163e-10 P time: 1.85015e+06 first: 1.316e-01 second: 1.494e-01 infty: 2.442e-01 bias: -5.009e-11 P time: 1.85081e+06 first: 1.314e-01 second: 1.493e-01 infty: 2.443e-01 bias: -1.097e-10 P time: 1.85147e+06 first: 1.312e-01 second: 1.492e-01 infty: 2.444e-01 bias: -1.950e-11 P time: 1.85213e+06 first: 1.310e-01 second: 1.491e-01 infty: 2.444e-01 bias: -4.192e-11 P time: 1.85279e+06 first: 1.308e-01 second: 1.490e-01 infty: 2.443e-01 bias: -1.079e-10 P time: 1.85345e+06 first: 1.307e-01 second: 1.489e-01 infty: 2.442e-01 bias: -8.381e-11 P time: 1.85411e+06 first: 1.306e-01 second: 1.488e-01 infty: 2.440e-01 bias: -1.226e-10 P time: 1.85477e+06 first: 1.304e-01 second: 1.487e-01 infty: 2.436e-01 bias: -9.418e-11 P time: 1.85543e+06 first: 1.304e-01 second: 1.486e-01 infty: 2.432e-01 bias: -6.874e-11 P time: 1.85609e+06 first: 1.303e-01 second: 1.485e-01 infty: 2.428e-01 bias: -1.126e-10 P time: 1.85675e+06 first: 1.303e-01 second: 1.484e-01 infty: 2.423e-01 bias: -1.642e-10 P time: 1.85741e+06 first: 1.304e-01 second: 1.483e-01 infty: 2.418e-01 bias: -9.889e-11 P time: 1.85807e+06 first: 1.305e-01 second: 1.482e-01 infty: 2.413e-01 bias: -9.868e-11 P time: 1.85874e+06 first: 1.306e-01 second: 1.482e-01 infty: 2.408e-01 bias: -1.310e-10 P time: 1.8594e+06 first: 1.308e-01 second: 1.482e-01 infty: 2.403e-01 bias: -6.104e-11 P time: 1.86006e+06 first: 1.310e-01 second: 1.483e-01 infty: 2.397e-01 bias: -7.296e-11 P time: 1.86072e+06 first: 1.313e-01 second: 1.484e-01 infty: 2.391e-01 bias: -1.148e-10 P time: 1.86138e+06 first: 1.316e-01 second: 1.485e-01 infty: 2.385e-01 bias: -5.112e-11 P time: 1.86204e+06 first: 1.319e-01 second: 1.487e-01 infty: 2.380e-01 bias: -5.064e-11 P time: 1.8627e+06 first: 1.323e-01 second: 1.490e-01 infty: 2.377e-01 bias: -6.083e-11 P time: 1.86336e+06 first: 1.327e-01 second: 1.493e-01 infty: 2.375e-01 bias: 4.958e-13 P time: 1.86402e+06 first: 1.332e-01 second: 1.496e-01 infty: 2.374e-01 bias: -7.228e-11 P time: 1.86468e+06 first: 1.337e-01 second: 1.500e-01 infty: 2.374e-01 bias: -1.347e-10 P time: 1.86534e+06 first: 1.341e-01 second: 1.504e-01 infty: 2.376e-01 bias: -7.414e-11 P time: 1.866e+06 first: 1.346e-01 second: 1.508e-01 infty: 2.378e-01 bias: -6.862e-11 P time: 1.86666e+06 first: 1.351e-01 second: 1.512e-01 infty: 2.381e-01 bias: -1.485e-10 P time: 1.86732e+06 first: 1.355e-01 second: 1.516e-01 infty: 2.384e-01 bias: -9.015e-11 P time: 1.86798e+06 first: 1.358e-01 second: 1.520e-01 infty: 2.389e-01 bias: -6.834e-11 P time: 1.86864e+06 first: 1.361e-01 second: 1.524e-01 infty: 2.393e-01 bias: -6.697e-12 P time: 1.8693e+06 first: 1.364e-01 second: 1.527e-01 infty: 2.398e-01 bias: -1.182e-10 P time: 1.86996e+06 first: 1.365e-01 second: 1.529e-01 infty: 2.403e-01 bias: -8.462e-11 P time: 1.87062e+06 first: 1.366e-01 second: 1.531e-01 infty: 2.408e-01 bias: -1.209e-10 P time: 1.87128e+06 first: 1.366e-01 second: 1.531e-01 infty: 2.411e-01 bias: -6.581e-11 P time: 1.87194e+06 first: 1.366e-01 second: 1.532e-01 infty: 2.414e-01 bias: -1.006e-10 P time: 1.87261e+06 first: 1.364e-01 second: 1.531e-01 infty: 2.415e-01 bias: -8.807e-11 P time: 1.87327e+06 first: 1.362e-01 second: 1.529e-01 infty: 2.415e-01 bias: -1.184e-10 P time: 1.87393e+06 first: 1.359e-01 second: 1.527e-01 infty: 2.413e-01 bias: -1.058e-11 P time: 1.87459e+06 first: 1.356e-01 second: 1.523e-01 infty: 2.410e-01 bias: -9.129e-11 P time: 1.87525e+06 first: 1.352e-01 second: 1.519e-01 infty: 2.405e-01 bias: -8.879e-11 P time: 1.87591e+06 first: 1.347e-01 second: 1.514e-01 infty: 2.398e-01 bias: -1.059e-10 P time: 1.87657e+06 first: 1.342e-01 second: 1.509e-01 infty: 2.389e-01 bias: -5.885e-11 P time: 1.87723e+06 first: 1.337e-01 second: 1.503e-01 infty: 2.378e-01 bias: -1.073e-10 P time: 1.87789e+06 first: 1.332e-01 second: 1.496e-01 infty: 2.367e-01 bias: -3.287e-11 P time: 1.87855e+06 first: 1.326e-01 second: 1.490e-01 infty: 2.354e-01 bias: -7.138e-11 P time: 1.87922e+06 first: 1.321e-01 second: 1.483e-01 infty: 2.341e-01 bias: -9.585e-11 P time: 1.87988e+06 first: 1.316e-01 second: 1.477e-01 infty: 2.328e-01 bias: -2.839e-11 P time: 1.88054e+06 first: 1.311e-01 second: 1.471e-01 infty: 2.315e-01 bias: -3.493e-11 P time: 1.8812e+06 first: 1.306e-01 second: 1.465e-01 infty: 2.302e-01 bias: -2.964e-11 P time: 1.88186e+06 first: 1.302e-01 second: 1.461e-01 infty: 2.290e-01 bias: -9.155e-11 P time: 1.88252e+06 first: 1.299e-01 second: 1.457e-01 infty: 2.279e-01 bias: -1.522e-11 P time: 1.88318e+06 first: 1.297e-01 second: 1.454e-01 infty: 2.269e-01 bias: -5.713e-11 P time: 1.88384e+06 first: 1.296e-01 second: 1.452e-01 infty: 2.263e-01 bias: -7.605e-11 P time: 1.8845e+06 first: 1.295e-01 second: 1.452e-01 infty: 2.259e-01 bias: -8.267e-11 P time: 1.88517e+06 first: 1.296e-01 second: 1.452e-01 infty: 2.256e-01 bias: -1.289e-10 P time: 1.88583e+06 first: 1.297e-01 second: 1.454e-01 infty: 2.255e-01 bias: -6.343e-11 P time: 1.88649e+06 first: 1.300e-01 second: 1.457e-01 infty: 2.255e-01 bias: -5.704e-11 P time: 1.88715e+06 first: 1.303e-01 second: 1.460e-01 infty: 2.257e-01 bias: -5.185e-11 P time: 1.88781e+06 first: 1.307e-01 second: 1.465e-01 infty: 2.260e-01 bias: -6.266e-11 P time: 1.88847e+06 first: 1.312e-01 second: 1.470e-01 infty: 2.266e-01 bias: -4.573e-11 P time: 1.88913e+06 first: 1.317e-01 second: 1.476e-01 infty: 2.272e-01 bias: -8.313e-11 P time: 1.88979e+06 first: 1.323e-01 second: 1.482e-01 infty: 2.279e-01 bias: -5.240e-11 P time: 1.89045e+06 first: 1.329e-01 second: 1.489e-01 infty: 2.285e-01 bias: -8.736e-11 P time: 1.89111e+06 first: 1.335e-01 second: 1.495e-01 infty: 2.291e-01 bias: -9.887e-11 P time: 1.89177e+06 first: 1.341e-01 second: 1.501e-01 infty: 2.297e-01 bias: -8.535e-11 P time: 1.89243e+06 first: 1.347e-01 second: 1.507e-01 infty: 2.301e-01 bias: -7.239e-11 P time: 1.89309e+06 first: 1.353e-01 second: 1.512e-01 infty: 2.306e-01 bias: -9.014e-11 P time: 1.89375e+06 first: 1.358e-01 second: 1.517e-01 infty: 2.310e-01 bias: -6.696e-11 P time: 1.89441e+06 first: 1.362e-01 second: 1.521e-01 infty: 2.313e-01 bias: -5.855e-11 P time: 1.89507e+06 first: 1.366e-01 second: 1.524e-01 infty: 2.314e-01 bias: -7.679e-11 P time: 1.89573e+06 first: 1.370e-01 second: 1.526e-01 infty: 2.314e-01 bias: -5.979e-11 P time: 1.89639e+06 first: 1.372e-01 second: 1.528e-01 infty: 2.312e-01 bias: -1.006e-10 P time: 1.89705e+06 first: 1.374e-01 second: 1.528e-01 infty: 2.310e-01 bias: -1.460e-10 P time: 1.89771e+06 first: 1.374e-01 second: 1.528e-01 infty: 2.306e-01 bias: -7.679e-11 P time: 1.89837e+06 first: 1.374e-01 second: 1.527e-01 infty: 2.301e-01 bias: -4.977e-11 P time: 1.89903e+06 first: 1.373e-01 second: 1.525e-01 infty: 2.296e-01 bias: -5.846e-11 P time: 1.89969e+06 first: 1.371e-01 second: 1.522e-01 infty: 2.290e-01 bias: -8.664e-11 P time: 1.90036e+06 first: 1.369e-01 second: 1.519e-01 infty: 2.285e-01 bias: -5.297e-11 P time: 1.90102e+06 first: 1.366e-01 second: 1.516e-01 infty: 2.280e-01 bias: -6.121e-11 P time: 1.90168e+06 first: 1.362e-01 second: 1.512e-01 infty: 2.274e-01 bias: -1.471e-10 P time: 1.90234e+06 first: 1.359e-01 second: 1.508e-01 infty: 2.269e-01 bias: -7.804e-11 P time: 1.903e+06 first: 1.355e-01 second: 1.504e-01 infty: 2.264e-01 bias: -6.146e-11 P time: 1.90366e+06 first: 1.350e-01 second: 1.500e-01 infty: 2.259e-01 bias: -1.031e-10 P time: 1.90432e+06 first: 1.346e-01 second: 1.496e-01 infty: 2.254e-01 bias: -4.586e-11 P time: 1.90498e+06 first: 1.342e-01 second: 1.492e-01 infty: 2.251e-01 bias: -5.720e-11 P time: 1.90564e+06 first: 1.338e-01 second: 1.488e-01 infty: 2.249e-01 bias: -5.049e-11 P time: 1.9063e+06 first: 1.334e-01 second: 1.485e-01 infty: 2.248e-01 bias: -5.713e-11 P time: 1.90696e+06 first: 1.329e-01 second: 1.482e-01 infty: 2.248e-01 bias: -1.012e-10 P time: 1.90762e+06 first: 1.325e-01 second: 1.479e-01 infty: 2.248e-01 bias: -9.731e-11 P time: 1.90829e+06 first: 1.322e-01 second: 1.477e-01 infty: 2.248e-01 bias: -7.213e-11 P time: 1.90895e+06 first: 1.318e-01 second: 1.474e-01 infty: 2.249e-01 bias: -9.772e-11 P time: 1.90961e+06 first: 1.314e-01 second: 1.472e-01 infty: 2.251e-01 bias: -8.428e-11 P time: 1.91027e+06 first: 1.311e-01 second: 1.471e-01 infty: 2.253e-01 bias: -9.013e-11 P time: 1.91093e+06 first: 1.308e-01 second: 1.469e-01 infty: 2.256e-01 bias: -4.829e-11 P time: 1.91159e+06 first: 1.305e-01 second: 1.468e-01 infty: 2.259e-01 bias: -8.901e-11 P time: 1.91225e+06 first: 1.303e-01 second: 1.466e-01 infty: 2.262e-01 bias: -1.104e-10 P time: 1.91291e+06 first: 1.301e-01 second: 1.465e-01 infty: 2.265e-01 bias: -6.866e-11 P time: 1.91357e+06 first: 1.300e-01 second: 1.464e-01 infty: 2.268e-01 bias: -1.211e-10 P time: 1.91424e+06 first: 1.299e-01 second: 1.464e-01 infty: 2.270e-01 bias: -1.569e-10 P time: 1.9149e+06 first: 1.299e-01 second: 1.463e-01 infty: 2.271e-01 bias: -4.715e-11 P time: 1.91556e+06 first: 1.299e-01 second: 1.463e-01 infty: 2.273e-01 bias: -6.359e-11 P time: 1.91622e+06 first: 1.300e-01 second: 1.463e-01 infty: 2.273e-01 bias: -9.104e-11 P time: 1.91688e+06 first: 1.301e-01 second: 1.464e-01 infty: 2.275e-01 bias: -7.639e-11 P time: 1.91754e+06 first: 1.303e-01 second: 1.465e-01 infty: 2.277e-01 bias: -8.907e-11 P time: 1.9182e+06 first: 1.306e-01 second: 1.467e-01 infty: 2.279e-01 bias: -7.363e-11 P time: 1.91887e+06 first: 1.309e-01 second: 1.469e-01 infty: 2.281e-01 bias: -4.793e-11 P time: 1.91953e+06 first: 1.312e-01 second: 1.472e-01 infty: 2.284e-01 bias: -3.747e-11 P time: 1.92019e+06 first: 1.316e-01 second: 1.475e-01 infty: 2.286e-01 bias: -2.352e-11 P time: 1.92085e+06 first: 1.320e-01 second: 1.479e-01 infty: 2.290e-01 bias: -7.892e-11 P time: 1.92151e+06 first: 1.324e-01 second: 1.483e-01 infty: 2.295e-01 bias: -8.490e-11 P time: 1.92218e+06 first: 1.329e-01 second: 1.487e-01 infty: 2.302e-01 bias: -9.261e-11 P time: 1.92284e+06 first: 1.334e-01 second: 1.492e-01 infty: 2.309e-01 bias: -1.314e-10 P time: 1.9235e+06 first: 1.339e-01 second: 1.498e-01 infty: 2.317e-01 bias: -1.324e-10 P time: 1.92416e+06 first: 1.344e-01 second: 1.503e-01 infty: 2.325e-01 bias: -9.315e-11 P time: 1.92482e+06 first: 1.348e-01 second: 1.509e-01 infty: 2.334e-01 bias: -8.390e-11 P time: 1.92548e+06 first: 1.353e-01 second: 1.514e-01 infty: 2.344e-01 bias: -1.494e-11 P time: 1.92615e+06 first: 1.357e-01 second: 1.520e-01 infty: 2.354e-01 bias: -7.021e-11 P time: 1.92681e+06 first: 1.361e-01 second: 1.524e-01 infty: 2.366e-01 bias: -5.714e-11 P time: 1.92747e+06 first: 1.364e-01 second: 1.529e-01 infty: 2.377e-01 bias: -1.088e-10 P time: 1.92813e+06 first: 1.367e-01 second: 1.532e-01 infty: 2.388e-01 bias: -2.543e-11 P time: 1.92879e+06 first: 1.369e-01 second: 1.535e-01 infty: 2.399e-01 bias: -4.261e-11 P time: 1.92946e+06 first: 1.370e-01 second: 1.538e-01 infty: 2.408e-01 bias: -1.125e-10 P time: 1.93012e+06 first: 1.371e-01 second: 1.539e-01 infty: 2.416e-01 bias: -8.265e-11 P time: 1.93078e+06 first: 1.370e-01 second: 1.539e-01 infty: 2.422e-01 bias: -8.613e-11 P time: 1.93144e+06 first: 1.369e-01 second: 1.538e-01 infty: 2.426e-01 bias: -1.187e-10 P time: 1.9321e+06 first: 1.367e-01 second: 1.536e-01 infty: 2.429e-01 bias: -4.215e-11 P time: 1.93277e+06 first: 1.364e-01 second: 1.533e-01 infty: 2.429e-01 bias: -1.215e-10 P time: 1.93343e+06 first: 1.360e-01 second: 1.530e-01 infty: 2.428e-01 bias: -4.430e-11 P time: 1.93409e+06 first: 1.356e-01 second: 1.525e-01 infty: 2.425e-01 bias: -7.165e-11 P time: 1.93475e+06 first: 1.350e-01 second: 1.519e-01 infty: 2.420e-01 bias: -1.302e-10 P time: 1.93542e+06 first: 1.345e-01 second: 1.513e-01 infty: 2.414e-01 bias: -9.846e-11 P time: 1.93608e+06 first: 1.338e-01 second: 1.507e-01 infty: 2.407e-01 bias: -1.160e-10 P time: 1.93674e+06 first: 1.332e-01 second: 1.500e-01 infty: 2.399e-01 bias: -2.659e-11 P time: 1.93741e+06 first: 1.325e-01 second: 1.493e-01 infty: 2.390e-01 bias: -4.974e-11 P time: 1.93807e+06 first: 1.318e-01 second: 1.485e-01 infty: 2.382e-01 bias: -2.114e-11 P time: 1.93873e+06 first: 1.311e-01 second: 1.479e-01 infty: 2.376e-01 bias: -6.105e-11 P time: 1.93939e+06 first: 1.304e-01 second: 1.472e-01 infty: 2.370e-01 bias: -5.801e-11 P time: 1.94006e+06 first: 1.298e-01 second: 1.466e-01 infty: 2.365e-01 bias: -4.405e-11 P time: 1.94072e+06 first: 1.292e-01 second: 1.461e-01 infty: 2.361e-01 bias: -1.187e-10 P time: 1.94138e+06 first: 1.287e-01 second: 1.457e-01 infty: 2.358e-01 bias: -8.328e-11 P time: 1.94204e+06 first: 1.283e-01 second: 1.454e-01 infty: 2.358e-01 bias: -1.291e-10 P time: 1.94271e+06 first: 1.280e-01 second: 1.452e-01 infty: 2.359e-01 bias: -8.350e-11 P time: 1.94337e+06 first: 1.278e-01 second: 1.451e-01 infty: 2.361e-01 bias: -8.125e-11 P time: 1.94403e+06 first: 1.277e-01 second: 1.452e-01 infty: 2.366e-01 bias: -1.063e-10 P time: 1.94469e+06 first: 1.278e-01 second: 1.454e-01 infty: 2.373e-01 bias: -1.154e-10 P time: 1.94536e+06 first: 1.279e-01 second: 1.457e-01 infty: 2.382e-01 bias: -3.326e-11 P time: 1.94602e+06 first: 1.282e-01 second: 1.461e-01 infty: 2.392e-01 bias: -5.710e-11 P time: 1.94668e+06 first: 1.286e-01 second: 1.466e-01 infty: 2.402e-01 bias: -9.157e-11 P time: 1.94734e+06 first: 1.291e-01 second: 1.472e-01 infty: 2.414e-01 bias: -9.123e-11 P time: 1.948e+06 first: 1.296e-01 second: 1.479e-01 infty: 2.425e-01 bias: -5.187e-11 P time: 1.94867e+06 first: 1.303e-01 second: 1.486e-01 infty: 2.437e-01 bias: -3.098e-11 P time: 1.94933e+06 first: 1.310e-01 second: 1.494e-01 infty: 2.448e-01 bias: -5.707e-11 P time: 1.94999e+06 first: 1.317e-01 second: 1.502e-01 infty: 2.459e-01 bias: -1.043e-10 P time: 1.95065e+06 first: 1.324e-01 second: 1.509e-01 infty: 2.470e-01 bias: -1.346e-10 P time: 1.95131e+06 first: 1.331e-01 second: 1.517e-01 infty: 2.482e-01 bias: -9.481e-11 P time: 1.95198e+06 first: 1.338e-01 second: 1.524e-01 infty: 2.496e-01 bias: -9.789e-11 P time: 1.95264e+06 first: 1.345e-01 second: 1.530e-01 infty: 2.509e-01 bias: -7.186e-11 P time: 1.9533e+06 first: 1.351e-01 second: 1.536e-01 infty: 2.519e-01 bias: -7.338e-11 P time: 1.95396e+06 first: 1.357e-01 second: 1.541e-01 infty: 2.529e-01 bias: -1.616e-10 P time: 1.95462e+06 first: 1.362e-01 second: 1.545e-01 infty: 2.537e-01 bias: -1.029e-10 P time: 1.95528e+06 first: 1.366e-01 second: 1.548e-01 infty: 2.543e-01 bias: -1.007e-10 P time: 1.95594e+06 first: 1.369e-01 second: 1.550e-01 infty: 2.548e-01 bias: -9.321e-11 P time: 1.95661e+06 first: 1.371e-01 second: 1.551e-01 infty: 2.552e-01 bias: -1.437e-10 P time: 1.95727e+06 first: 1.372e-01 second: 1.552e-01 infty: 2.555e-01 bias: -9.961e-11 P time: 1.95793e+06 first: 1.372e-01 second: 1.551e-01 infty: 2.558e-01 bias: -9.406e-11 P time: 1.95859e+06 first: 1.371e-01 second: 1.550e-01 infty: 2.560e-01 bias: -8.464e-11 P time: 1.95925e+06 first: 1.370e-01 second: 1.548e-01 infty: 2.561e-01 bias: -9.716e-11 P time: 1.95991e+06 first: 1.368e-01 second: 1.546e-01 infty: 2.563e-01 bias: -1.865e-12 P time: 1.96057e+06 first: 1.366e-01 second: 1.543e-01 infty: 2.564e-01 bias: -1.067e-10 P time: 1.96124e+06 first: 1.363e-01 second: 1.540e-01 infty: 2.566e-01 bias: -5.330e-11 P time: 1.9619e+06 first: 1.359e-01 second: 1.536e-01 infty: 2.568e-01 bias: -1.295e-10 P time: 1.96256e+06 first: 1.355e-01 second: 1.533e-01 infty: 2.570e-01 bias: -9.015e-11 P time: 1.96322e+06 first: 1.352e-01 second: 1.529e-01 infty: 2.573e-01 bias: -6.380e-11 P time: 1.96388e+06 first: 1.348e-01 second: 1.526e-01 infty: 2.577e-01 bias: -1.108e-10 P time: 1.96454e+06 first: 1.344e-01 second: 1.522e-01 infty: 2.581e-01 bias: -6.007e-12 P time: 1.96521e+06 first: 1.340e-01 second: 1.519e-01 infty: 2.585e-01 bias: -3.524e-11 P time: 1.96587e+06 first: 1.336e-01 second: 1.517e-01 infty: 2.591e-01 bias: -1.264e-10 P time: 1.96653e+06 first: 1.333e-01 second: 1.514e-01 infty: 2.597e-01 bias: -3.208e-11 P time: 1.96719e+06 first: 1.329e-01 second: 1.512e-01 infty: 2.604e-01 bias: -6.010e-11 P time: 1.96785e+06 first: 1.326e-01 second: 1.510e-01 infty: 2.611e-01 bias: -1.235e-10 P time: 1.96851e+06 first: 1.323e-01 second: 1.508e-01 infty: 2.618e-01 bias: -5.341e-11 P time: 1.96917e+06 first: 1.320e-01 second: 1.506e-01 infty: 2.626e-01 bias: -7.942e-11 P time: 1.96984e+06 first: 1.318e-01 second: 1.505e-01 infty: 2.633e-01 bias: -4.626e-11 P time: 1.9705e+06 first: 1.316e-01 second: 1.504e-01 infty: 2.641e-01 bias: -6.172e-11 P time: 1.97116e+06 first: 1.314e-01 second: 1.503e-01 infty: 2.648e-01 bias: -4.055e-11 P time: 1.97182e+06 first: 1.312e-01 second: 1.502e-01 infty: 2.654e-01 bias: -1.440e-10 P time: 1.97248e+06 first: 1.311e-01 second: 1.501e-01 infty: 2.660e-01 bias: -6.428e-11 P time: 1.97314e+06 first: 1.310e-01 second: 1.500e-01 infty: 2.665e-01 bias: -1.199e-10 P time: 1.9738e+06 first: 1.310e-01 second: 1.500e-01 infty: 2.670e-01 bias: -9.882e-11 P time: 1.97446e+06 first: 1.310e-01 second: 1.500e-01 infty: 2.674e-01 bias: -3.822e-11 P time: 1.97512e+06 first: 1.312e-01 second: 1.500e-01 infty: 2.677e-01 bias: -1.673e-11 P time: 1.97579e+06 first: 1.313e-01 second: 1.501e-01 infty: 2.679e-01 bias: -2.828e-11 P time: 1.97645e+06 first: 1.316e-01 second: 1.502e-01 infty: 2.681e-01 bias: -7.323e-11 P time: 1.97711e+06 first: 1.319e-01 second: 1.504e-01 infty: 2.683e-01 bias: -5.280e-11 P time: 1.97777e+06 first: 1.323e-01 second: 1.506e-01 infty: 2.685e-01 bias: -3.548e-11 P time: 1.97843e+06 first: 1.327e-01 second: 1.509e-01 infty: 2.687e-01 bias: 1.494e-13 P time: 1.97909e+06 first: 1.332e-01 second: 1.513e-01 infty: 2.689e-01 bias: -1.017e-10 P time: 1.97975e+06 first: 1.338e-01 second: 1.517e-01 infty: 2.692e-01 bias: -3.679e-11 P time: 1.98041e+06 first: 1.344e-01 second: 1.522e-01 infty: 2.695e-01 bias: -2.917e-11 P time: 1.98107e+06 first: 1.350e-01 second: 1.528e-01 infty: 2.699e-01 bias: -1.609e-10 P time: 1.98173e+06 first: 1.357e-01 second: 1.534e-01 infty: 2.703e-01 bias: -8.969e-11 P time: 1.98239e+06 first: 1.364e-01 second: 1.540e-01 infty: 2.708e-01 bias: -4.298e-11 P time: 1.98306e+06 first: 1.371e-01 second: 1.547e-01 infty: 2.715e-01 bias: -7.041e-11 P time: 1.98372e+06 first: 1.378e-01 second: 1.554e-01 infty: 2.722e-01 bias: -1.058e-10 P time: 1.98438e+06 first: 1.385e-01 second: 1.560e-01 infty: 2.729e-01 bias: -1.178e-10 P time: 1.98504e+06 first: 1.392e-01 second: 1.567e-01 infty: 2.738e-01 bias: -1.203e-10 P time: 1.9857e+06 first: 1.398e-01 second: 1.573e-01 infty: 2.746e-01 bias: -3.996e-11 P time: 1.98636e+06 first: 1.403e-01 second: 1.579e-01 infty: 2.755e-01 bias: -1.209e-10 P time: 1.98702e+06 first: 1.408e-01 second: 1.584e-01 infty: 2.763e-01 bias: -5.604e-11 P time: 1.98768e+06 first: 1.412e-01 second: 1.589e-01 infty: 2.772e-01 bias: -5.711e-12 P time: 1.98834e+06 first: 1.415e-01 second: 1.593e-01 infty: 2.779e-01 bias: -6.855e-11 P time: 1.989e+06 first: 1.417e-01 second: 1.595e-01 infty: 2.786e-01 bias: -8.028e-11 P time: 1.98966e+06 first: 1.418e-01 second: 1.597e-01 infty: 2.791e-01 bias: -6.210e-11 P time: 1.99033e+06 first: 1.418e-01 second: 1.597e-01 infty: 2.795e-01 bias: -6.987e-11 P time: 1.99099e+06 first: 1.417e-01 second: 1.596e-01 infty: 2.797e-01 bias: -5.845e-11 P time: 1.99165e+06 first: 1.415e-01 second: 1.594e-01 infty: 2.798e-01 bias: -1.045e-10 P time: 1.99231e+06 first: 1.412e-01 second: 1.591e-01 infty: 2.798e-01 bias: -7.928e-11 P time: 1.99297e+06 first: 1.407e-01 second: 1.587e-01 infty: 2.795e-01 bias: 5.083e-12 P time: 1.99363e+06 first: 1.403e-01 second: 1.581e-01 infty: 2.791e-01 bias: -6.641e-11 P time: 1.99429e+06 first: 1.397e-01 second: 1.575e-01 infty: 2.786e-01 bias: -2.301e-11 P time: 1.99495e+06 first: 1.391e-01 second: 1.568e-01 infty: 2.779e-01 bias: -9.150e-11 P time: 1.99561e+06 first: 1.384e-01 second: 1.561e-01 infty: 2.770e-01 bias: -9.762e-11 P time: 1.99627e+06 first: 1.377e-01 second: 1.553e-01 infty: 2.761e-01 bias: -8.171e-11 P time: 1.99693e+06 first: 1.370e-01 second: 1.545e-01 infty: 2.751e-01 bias: -1.623e-10 P time: 1.9976e+06 first: 1.363e-01 second: 1.537e-01 infty: 2.740e-01 bias: -7.149e-11 P time: 1.99826e+06 first: 1.356e-01 second: 1.529e-01 infty: 2.729e-01 bias: -5.025e-13 P time: 1.99892e+06 first: 1.349e-01 second: 1.522e-01 infty: 2.718e-01 bias: -7.670e-11 P time: 1.99958e+06 first: 1.344e-01 second: 1.516e-01 infty: 2.707e-01 bias: -6.282e-11 P time: 2.00024e+06 first: 1.339e-01 second: 1.511e-01 infty: 2.697e-01 bias: -5.440e-11 P time: 2.0009e+06 first: 1.335e-01 second: 1.506e-01 infty: 2.688e-01 bias: -7.805e-11 P time: 2.00156e+06 first: 1.332e-01 second: 1.503e-01 infty: 2.680e-01 bias: -6.043e-11 P time: 2.00223e+06 first: 1.330e-01 second: 1.501e-01 infty: 2.673e-01 bias: -5.460e-11 P time: 2.00289e+06 first: 1.330e-01 second: 1.501e-01 infty: 2.667e-01 bias: -9.551e-11 P time: 2.00355e+06 first: 1.331e-01 second: 1.502e-01 infty: 2.664e-01 bias: -5.876e-11 P time: 2.00421e+06 first: 1.333e-01 second: 1.504e-01 infty: 2.661e-01 bias: -8.027e-11 P time: 2.00487e+06 first: 1.337e-01 second: 1.508e-01 infty: 2.661e-01 bias: -9.029e-11 P time: 2.00553e+06 first: 1.341e-01 second: 1.514e-01 infty: 2.662e-01 bias: -3.816e-11 P time: 2.00619e+06 first: 1.347e-01 second: 1.520e-01 infty: 2.664e-01 bias: -6.613e-11 P time: 2.00686e+06 first: 1.354e-01 second: 1.527e-01 infty: 2.667e-01 bias: -6.171e-12 P time: 2.00752e+06 first: 1.362e-01 second: 1.535e-01 infty: 2.672e-01 bias: -1.297e-10 P time: 2.00818e+06 first: 1.370e-01 second: 1.544e-01 infty: 2.677e-01 bias: -4.495e-11 P time: 2.00884e+06 first: 1.379e-01 second: 1.553e-01 infty: 2.683e-01 bias: -1.170e-10 P time: 2.0095e+06 first: 1.389e-01 second: 1.563e-01 infty: 2.690e-01 bias: -1.278e-10 P time: 2.01016e+06 first: 1.398e-01 second: 1.572e-01 infty: 2.696e-01 bias: -5.865e-11 P time: 2.01082e+06 first: 1.408e-01 second: 1.581e-01 infty: 2.702e-01 bias: -2.802e-11 P time: 2.01149e+06 first: 1.417e-01 second: 1.589e-01 infty: 2.706e-01 bias: -9.164e-11 P time: 2.01215e+06 first: 1.425e-01 second: 1.597e-01 infty: 2.710e-01 bias: -3.976e-11 P time: 2.01281e+06 first: 1.433e-01 second: 1.604e-01 infty: 2.713e-01 bias: -8.186e-11 P time: 2.01347e+06 first: 1.441e-01 second: 1.610e-01 infty: 2.714e-01 bias: -1.063e-10 P time: 2.01413e+06 first: 1.447e-01 second: 1.615e-01 infty: 2.713e-01 bias: -6.252e-11 P time: 2.01479e+06 first: 1.453e-01 second: 1.618e-01 infty: 2.710e-01 bias: -1.054e-10 P time: 2.01545e+06 first: 1.457e-01 second: 1.621e-01 infty: 2.705e-01 bias: -1.051e-10 P time: 2.01612e+06 first: 1.461e-01 second: 1.623e-01 infty: 2.698e-01 bias: -8.831e-11 P time: 2.01678e+06 first: 1.463e-01 second: 1.624e-01 infty: 2.690e-01 bias: -4.884e-12 P time: 2.01744e+06 first: 1.465e-01 second: 1.623e-01 infty: 2.680e-01 bias: -1.186e-10 P time: 2.0181e+06 first: 1.465e-01 second: 1.622e-01 infty: 2.669e-01 bias: -9.570e-11 P time: 2.01876e+06 first: 1.464e-01 second: 1.620e-01 infty: 2.657e-01 bias: -7.936e-11 P time: 2.01943e+06 first: 1.462e-01 second: 1.617e-01 infty: 2.644e-01 bias: -1.007e-10 P time: 2.02009e+06 first: 1.460e-01 second: 1.613e-01 infty: 2.631e-01 bias: -1.328e-10 P time: 2.02075e+06 first: 1.456e-01 second: 1.609e-01 infty: 2.617e-01 bias: -1.157e-10 P time: 2.02141e+06 first: 1.452e-01 second: 1.605e-01 infty: 2.604e-01 bias: -9.538e-11 P time: 2.02208e+06 first: 1.448e-01 second: 1.601e-01 infty: 2.591e-01 bias: -1.174e-10 P time: 2.02274e+06 first: 1.443e-01 second: 1.596e-01 infty: 2.579e-01 bias: -9.215e-11 P time: 2.0234e+06 first: 1.438e-01 second: 1.591e-01 infty: 2.567e-01 bias: -4.020e-11 P time: 2.02406e+06 first: 1.433e-01 second: 1.587e-01 infty: 2.556e-01 bias: -4.518e-11 P time: 2.02473e+06 first: 1.427e-01 second: 1.583e-01 infty: 2.546e-01 bias: -6.460e-11 P time: 2.02539e+06 first: 1.422e-01 second: 1.579e-01 infty: 2.536e-01 bias: -8.502e-11 P time: 2.02605e+06 first: 1.417e-01 second: 1.575e-01 infty: 2.528e-01 bias: -5.304e-11 P time: 2.02672e+06 first: 1.411e-01 second: 1.572e-01 infty: 2.520e-01 bias: -8.717e-11 P time: 2.02738e+06 first: 1.407e-01 second: 1.568e-01 infty: 2.513e-01 bias: -6.483e-11 P time: 2.02804e+06 first: 1.402e-01 second: 1.566e-01 infty: 2.506e-01 bias: -6.360e-11 P time: 2.02871e+06 first: 1.398e-01 second: 1.563e-01 infty: 2.500e-01 bias: -8.004e-11 P time: 2.02937e+06 first: 1.394e-01 second: 1.561e-01 infty: 2.493e-01 bias: -8.254e-11 P time: 2.03003e+06 first: 1.390e-01 second: 1.559e-01 infty: 2.486e-01 bias: -6.684e-11 P time: 2.0307e+06 first: 1.387e-01 second: 1.557e-01 infty: 2.479e-01 bias: -1.050e-10 P time: 2.03136e+06 first: 1.384e-01 second: 1.556e-01 infty: 2.472e-01 bias: -4.600e-11 P time: 2.03202e+06 first: 1.382e-01 second: 1.555e-01 infty: 2.463e-01 bias: -4.027e-11 P time: 2.03269e+06 first: 1.381e-01 second: 1.554e-01 infty: 2.454e-01 bias: -4.648e-11 P time: 2.03335e+06 first: 1.380e-01 second: 1.553e-01 infty: 2.444e-01 bias: -7.117e-11 P time: 2.03402e+06 first: 1.380e-01 second: 1.552e-01 infty: 2.433e-01 bias: -1.045e-10 P time: 2.03468e+06 first: 1.380e-01 second: 1.552e-01 infty: 2.422e-01 bias: -4.399e-11 P time: 2.03534e+06 first: 1.381e-01 second: 1.553e-01 infty: 2.409e-01 bias: -5.805e-11 P time: 2.03601e+06 first: 1.383e-01 second: 1.553e-01 infty: 2.396e-01 bias: -7.322e-11 P time: 2.03667e+06 first: 1.386e-01 second: 1.555e-01 infty: 2.381e-01 bias: -5.882e-11 P time: 2.03734e+06 first: 1.389e-01 second: 1.557e-01 infty: 2.366e-01 bias: -1.233e-10 P time: 2.038e+06 first: 1.393e-01 second: 1.559e-01 infty: 2.351e-01 bias: -3.207e-11 P time: 2.03867e+06 first: 1.398e-01 second: 1.562e-01 infty: 2.335e-01 bias: -6.557e-11 P time: 2.03933e+06 first: 1.403e-01 second: 1.566e-01 infty: 2.319e-01 bias: -1.018e-10 P time: 2.04e+06 first: 1.409e-01 second: 1.571e-01 infty: 2.303e-01 bias: -6.129e-11 P time: 2.04066e+06 first: 1.415e-01 second: 1.576e-01 infty: 2.287e-01 bias: -7.980e-11 P time: 2.04133e+06 first: 1.422e-01 second: 1.582e-01 infty: 2.281e-01 bias: -1.140e-10 P time: 2.04199e+06 first: 1.429e-01 second: 1.588e-01 infty: 2.285e-01 bias: 6.340e-12 P time: 2.04266e+06 first: 1.435e-01 second: 1.595e-01 infty: 2.289e-01 bias: -1.304e-10 P time: 2.04332e+06 first: 1.442e-01 second: 1.602e-01 infty: 2.296e-01 bias: -7.664e-11 P time: 2.04399e+06 first: 1.449e-01 second: 1.609e-01 infty: 2.304e-01 bias: -1.110e-10 P time: 2.04465e+06 first: 1.456e-01 second: 1.615e-01 infty: 2.313e-01 bias: -7.360e-11 P time: 2.04532e+06 first: 1.462e-01 second: 1.622e-01 infty: 2.322e-01 bias: -6.823e-11 P time: 2.04599e+06 first: 1.467e-01 second: 1.628e-01 infty: 2.331e-01 bias: -6.382e-11 P time: 2.04665e+06 first: 1.472e-01 second: 1.634e-01 infty: 2.341e-01 bias: -8.431e-11 P time: 2.04732e+06 first: 1.476e-01 second: 1.639e-01 infty: 2.350e-01 bias: -1.103e-10 P time: 2.04799e+06 first: 1.479e-01 second: 1.643e-01 infty: 2.359e-01 bias: -7.532e-11 P time: 2.04865e+06 first: 1.481e-01 second: 1.646e-01 infty: 2.367e-01 bias: -1.653e-10 P time: 2.04932e+06 first: 1.482e-01 second: 1.648e-01 infty: 2.374e-01 bias: -1.192e-10 P time: 2.04999e+06 first: 1.482e-01 second: 1.648e-01 infty: 2.380e-01 bias: -1.437e-10 P time: 2.05066e+06 first: 1.481e-01 second: 1.648e-01 infty: 2.385e-01 bias: -7.978e-11 P time: 2.05132e+06 first: 1.478e-01 second: 1.646e-01 infty: 2.389e-01 bias: -6.936e-11 P time: 2.05199e+06 first: 1.475e-01 second: 1.643e-01 infty: 2.391e-01 bias: -6.985e-11 P time: 2.05266e+06 first: 1.470e-01 second: 1.639e-01 infty: 2.391e-01 bias: -1.460e-10 P time: 2.05332e+06 first: 1.465e-01 second: 1.633e-01 infty: 2.390e-01 bias: -3.235e-11 P time: 2.05399e+06 first: 1.458e-01 second: 1.627e-01 infty: 2.388e-01 bias: -8.460e-11 P time: 2.05466e+06 first: 1.451e-01 second: 1.619e-01 infty: 2.383e-01 bias: -7.640e-11 P time: 2.05532e+06 first: 1.443e-01 second: 1.611e-01 infty: 2.378e-01 bias: -7.156e-11 P time: 2.05599e+06 first: 1.434e-01 second: 1.603e-01 infty: 2.372e-01 bias: -7.471e-11 P time: 2.05666e+06 first: 1.425e-01 second: 1.594e-01 infty: 2.365e-01 bias: -7.411e-11 P time: 2.05733e+06 first: 1.416e-01 second: 1.585e-01 infty: 2.357e-01 bias: -5.984e-11 P time: 2.05799e+06 first: 1.408e-01 second: 1.577e-01 infty: 2.349e-01 bias: -3.939e-11 P time: 2.05866e+06 first: 1.399e-01 second: 1.568e-01 infty: 2.341e-01 bias: -1.337e-10 P time: 2.05933e+06 first: 1.391e-01 second: 1.561e-01 infty: 2.334e-01 bias: -8.182e-11 P time: 2.05999e+06 first: 1.384e-01 second: 1.554e-01 infty: 2.327e-01 bias: -7.213e-11 P time: 2.06066e+06 first: 1.378e-01 second: 1.549e-01 infty: 2.321e-01 bias: -8.390e-11 P time: 2.06133e+06 first: 1.373e-01 second: 1.544e-01 infty: 2.318e-01 bias: -5.157e-11 P time: 2.06199e+06 first: 1.369e-01 second: 1.541e-01 infty: 2.316e-01 bias: -3.075e-11 P time: 2.06266e+06 first: 1.367e-01 second: 1.540e-01 infty: 2.316e-01 bias: -6.064e-11 P time: 2.06333e+06 first: 1.366e-01 second: 1.539e-01 infty: 2.317e-01 bias: -3.668e-11 P time: 2.064e+06 first: 1.366e-01 second: 1.541e-01 infty: 2.320e-01 bias: -4.164e-11 P time: 2.06466e+06 first: 1.367e-01 second: 1.544e-01 infty: 2.325e-01 bias: -6.754e-11 P time: 2.06533e+06 first: 1.370e-01 second: 1.548e-01 infty: 2.331e-01 bias: -6.063e-11 P time: 2.066e+06 first: 1.375e-01 second: 1.554e-01 infty: 2.338e-01 bias: -1.002e-10 P time: 2.06666e+06 first: 1.380e-01 second: 1.560e-01 infty: 2.346e-01 bias: -6.527e-11 P time: 2.06733e+06 first: 1.387e-01 second: 1.568e-01 infty: 2.355e-01 bias: -9.049e-11 P time: 2.068e+06 first: 1.394e-01 second: 1.576e-01 infty: 2.365e-01 bias: -1.398e-11 P time: 2.06866e+06 first: 1.402e-01 second: 1.585e-01 infty: 2.375e-01 bias: -6.140e-11 P time: 2.06933e+06 first: 1.410e-01 second: 1.594e-01 infty: 2.387e-01 bias: -7.452e-11 P time: 2.07e+06 first: 1.419e-01 second: 1.602e-01 infty: 2.398e-01 bias: -6.331e-11 P time: 2.07067e+06 first: 1.427e-01 second: 1.611e-01 infty: 2.408e-01 bias: -1.024e-10 P time: 2.07133e+06 first: 1.436e-01 second: 1.619e-01 infty: 2.420e-01 bias: -1.309e-10 P time: 2.072e+06 first: 1.444e-01 second: 1.627e-01 infty: 2.432e-01 bias: -5.506e-11 P time: 2.07267e+06 first: 1.451e-01 second: 1.634e-01 infty: 2.442e-01 bias: -8.328e-11 P time: 2.07333e+06 first: 1.458e-01 second: 1.640e-01 infty: 2.450e-01 bias: -9.543e-11 gerris-snapshot-131206/test/rossby/river/ehp.gfv0000644000175100017510000000070512250371172016574 00000000000000# GfsView 2D View { tx = -1.47931 ty = -1.02043 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.0946 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } EH { amin = 0 min = 0 amax = 0 max = 100 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 9 } gerris-snapshot-131206/test/rossby/river/href.gfv0000644000175100017510000000071012250371172016740 00000000000000# GfsView 2D View { tx = -1.42722 ty = -1.00301 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.0257 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } H0+p0(x*DTR,y*DTR,0)/G { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } gerris-snapshot-131206/test/rossby/river/river.gfs0000644000175100017510000001152512250371172017146 00000000000000# Title: Rossby--Haurwitz wave with Saint-Venant # # Description: # # Same test case but using the Saint-Venant solver. # # \begin{figure}[htbp] # \caption{\label{height}Detail of height field after one complete revolution # (24 days). Numerical solution in red and reference solution in # green. (a) C16, (b) C32, (c) C64.} # \begin{center} # \begin{tabular}{cc} # (a) \includegraphics[width=0.45\hsize]{h-4.eps} & # (b) \includegraphics[width=0.45\hsize]{h-5.eps} \\ # \multicolumn{2}{c}{(c) \includegraphics[width=0.45\hsize]{h-6.eps}} # \end{tabular} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Detail of relative error field after one # complete revolution (24 days). Red is positive and green # negative. 10 metres contour interval. (a) C16, (b) C32, (c) C64.} # \begin{center} # \begin{tabular}{cc} # (a) \includegraphics[width=0.45\hsize]{ehpm-4.eps} & # (b) \includegraphics[width=0.45\hsize]{ehpm-5.eps} \\ # \multicolumn{2}{c}{(c) \includegraphics[width=0.45\hsize]{ehpm-6.eps}} # \end{tabular} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error-t}Evolution of maximum relative error on height with time.} # \begin{center} # \includegraphics[width=0.8\hsize]{eh.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Convergence of final errors with spatial resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{order.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{kinetic}Evolution of kinetic energy with time.} # \begin{center} # \includegraphics[width=0.8\hsize]{ec.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../rossby.sh river.gfs # Version: 120812 # Required files: ehp.gfv ehm.gfv h.gfv href.gfv ec-6 eh-4.ref eh-5.ref eh-6.ref # Running time: 10 minutes # Generated files: ehpm-4.eps ehpm-5.eps ehpm-6.eps h-4.eps h-5.eps h-6.eps ec.eps eh.eps order.eps # 6 12 GfsRiver GfsBox GfsGEdge {} { Global { #define AR 6.37122e6 #define N 4. #define Umax 50. #define M (Umax/(N*AR)) #define K M #define Omega 7.292e-5 #define DTR (M_PI/180.) #define H0 8e3 #define G 9.81 // Williamson 1992, eq. (137) static double u0 (double lambda, double phi) { double cosphi = cos (phi), sinphi = sin (phi); return AR*M*cosphi + AR*K*pow (cosphi, N - 1)* cos (N*lambda)*(N*sinphi*sinphi - cosphi*cosphi); } // Williamson 1992, eq. (138) static double v0 (double lambda, double phi) { double cosphi = cos (phi), sinphi = sin (phi); return - AR*K*N*pow (cosphi, N - 1)*sinphi*sin (N*lambda); } // Williamson 1992, eq. (139) static double vorticity0 (double lambda, double phi) { return 2.*M*sin(phi) - K*sin(phi)*pow (cos (phi), N)*(N*N + 3.*N + 2.)*cos (N*lambda); } // Williamson 1992, eqs. (140-143) static double p0 (double lambda, double phi, double t) { double nu = (N*(3. + N)*M - 2.*Omega)/((1. + N)*(2. + N)); lambda -= nu*t; double cosphi = cos (phi); double Aphi = M/2.*(2.*Omega + M)*cosphi*cosphi + K*K/4.*pow (cosphi, 2.*N)* ((N + 1.)*cosphi*cosphi + 2.*N*N - N - 2. - 2.*N*N*pow(cosphi, -2.)); double Bphi = 2.*(Omega + M)*K/((N + 1.)*(N + 2.))*pow(cosphi, N)* (N*N + 2.*N + 2. - (N + 1.)*(N + 1.)*cosphi*cosphi); double Cphi = K*K/4.*pow(cosphi,2.*N)*((N + 1.)*cosphi*cosphi - (N + 2.)); return AR*AR*(Aphi + Bphi*cos (N*lambda) + Cphi*cos (2.*N*lambda)); } } PhysicalParams { L = 2.*M_PI*AR/4. g = G } MetricCubed M LEVEL SourceCoriolis 2.*Omega*sin(y*DTR) Init {} { P = H0 + p0(x*DTR,y*DTR,t)/G (U,V) = (u0(x*DTR,y*DTR)*P, v0(x*DTR,y*DTR)*P) } Refine LEVEL AdvectionParams { gradient = gfs_center_gradient # gradient = none } # ~24 days Time { end = 2073534 dtmax = 1e3 } # OutputTime { istep = 10 } stderr OutputScalarNorm { istep = 10 } v-LEVEL { v = V } OutputScalarSum { istep = 10 } ec-LEVEL { v = Velocity2 } # OutputScalarSum { istep = 10 } zeta-LEVEL { v = Vorticity } OutputScalarSum { istep = 10 } p-LEVEL { v = P } OutputErrorNorm { istep = 10 } eh-LEVEL { v = P } { s = p0(x*DTR,y*DTR,t)/G v = EH unbiased = 1 relative = 1 } OutputSimulation { start = end } end-LEVEL.gfs # OutputSimulation { istep = 10 } stdout # OutputPPM { istep = 10 } eh.ppm { v = EH } # OutputPPM { istep = 10 } p.ppm { v = P } GModule gfsview OutputView { start = end } ehp-LEVEL.gnu { format = Gnuplot } ehp.gfv OutputView { start = end } ehm-LEVEL.gnu { format = Gnuplot } ehm.gfv OutputView { start = end } h-LEVEL.gnu { format = Gnuplot } h.gfv OutputView { start = end } href-LEVEL.gnu { format = Gnuplot } href.gfv } GfsBox {} GfsBox {} GfsBox {} GfsBox {} GfsBox {} GfsBox {} 1 2 right 2 3 top 3 4 right 4 5 top 5 6 right 6 1 top 1 3 top left 3 5 top left 5 1 top left 2 6 bottom right 4 2 bottom right 6 4 bottom right gerris-snapshot-131206/test/rossby/river/h.gfv0000644000175100017510000000066312250371172016252 00000000000000# GfsView 2D View { tx = -1.42722 ty = -1.00301 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.0257 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 1 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } gerris-snapshot-131206/test/Makefile.deps0000644000175100017510000010572512250371662015252 00000000000000## File generated automatically by depend.py: do not modify by hand DOCS = \ poisson/poisson.gfs.html\ poisson/dirichlet/dirichlet.gfs.html\ poisson/circle/circle.gfs.html\ circle/circle.gfs.html\ circle/refined/refined.gfs.html\ circle/thin/thin.gfs.html\ circle/star/star.gfs.html\ dumbell/dumbell.gfs.html\ advection/advection.gfs.html\ shear/shear.gfs.html\ shear/curvature/curvature.gfs.html\ shear/concentration/concentration.gfs.html\ rotate/rotate.gfs.html\ diffusion/diffusion.gfs.html\ diffusion/concentration/concentration.gfs.html\ conservation/conservation.gfs.html\ reynolds/reynolds.gfs.html\ reynolds/box/box.gfs.html\ reynolds/skew/skew.gfs.html\ reynolds/stream/stream.gfs.html\ reynolds/skewbox/skewbox.gfs.html\ periodic/periodic.gfs.html\ merging/merging.gfs.html\ source/source.gfs.html\ axi/axi.gfs.html\ axi/viscous/viscous.gfs.html\ axiadvection/axiadvection.gfs.html\ axiadvection/solid/solid.gfs.html\ swirl/swirl.gfs.html\ lid/lid.gfs.html\ lid/stretch/stretch.gfs.html\ lid/explicit/explicit.gfs.html\ lid/metric/metric.gfs.html\ poiseuille/poiseuille.gfs.html\ poiseuille/bagnold/bagnold.gfs.html\ poiseuille/metric/metric.gfs.html\ poiseuille/river/river.gfs.html\ couette/couette.gfs.html\ kinetic/kinetic.gfs.html\ hydrostatic/hydrostatic.gfs.html\ hydrostatic/quadratic/quadratic.gfs.html\ coriolis/coriolis.gfs.html\ lake/lake.gfs.html\ lake/stratified/stratified.gfs.html\ lake/river/river.gfs.html\ boundaries/boundaries.gfs.html\ channel/channel.gfs.html\ plate/plate.gfs.html\ hexagon/hexagon.gfs.html\ strouhal/strouhal.gfs.html\ spurious/spurious.gfs.html\ spurious/axi/axi.gfs.html\ capwave/capwave.gfs.html\ capwave/gravity/gravity.gfs.html\ capwave/air-water/air-water.gfs.html\ capwave/density/density.gfs.html\ oscillation/oscillation.gfs.html\ height/height.gfs.html\ plateau/plateau.gfs.html\ plateau/plateau.mpg\ sessile/sessile.gfs.html\ geo/geo.gfs.html\ geo/beta/beta.gfs.html\ geo/river/river.gfs.html\ nonlinear/nonlinear.gfs.html\ waves/waves.gfs.html\ waves/adaptive/adaptive.gfs.html\ nz/nz.gfs.html\ parabola/parabola.gfs.html\ parabola/solid/solid.gfs.html\ shock/shock.gfs.html\ shock/layered/layered.gfs.html\ shore/shore.gfs.html\ still/still.gfs.html\ still/bipolar/bipolar.gfs.html\ terrain/terrain.gfs.html\ lonlat/lonlat.gfs.html\ lonlat/cubed/cubed.gfs.html\ lonlat/coriolis/coriolis.gfs.html\ cosine/cosine.gfs.html\ harmonic/harmonic.gfs.html\ harmonic/lonlat/lonlat.gfs.html\ gaussian/gaussian.gfs.html\ gaussian/lonlat/lonlat.gfs.html\ annulus/annulus.gfs.html\ wannier/wannier.gfs.html\ wannier/bipolar/bipolar.gfs.html\ wannier/stretch/stretch.gfs.html\ rossby/rossby.gfs.html\ rossby/ocean/ocean.gfs.html\ rossby/river/river.gfs.html\ injectionaxi/injectionaxi.gfs.html\ planar/planar.gfs.html\ planar/solid/solid.gfs.html\ bump/bump.gfs.html\ cylinder/cylinder.gfs.html\ cylinder/planar/planar.gfs.html\ electro/electro.gfs.html\ debye/debye.gfs.html\ groundwater/groundwater.gfs.html\ groundwater/piecewise/piecewise.gfs.html\ poisson/poisson.gfs\ poisson/poisson.sh\ poisson/res-7.ref\ poisson/error.ref\ poisson/order.ref\ poisson/dirichlet/dirichlet.gfs\ poisson/dirichlet/res-7.ref\ poisson/dirichlet/error.ref\ poisson/dirichlet/order.ref\ poisson/circle/circle.gfs\ poisson/circle/res-7.ref\ poisson/circle/error.ref\ poisson/circle/order.ref\ circle/circle.gfs\ circle/circle.sh\ circle/res-7.ref\ circle/error.ref\ circle/order.ref\ circle/solution.gfv\ circle/refined/refined.gfs\ circle/refined/res-7.ref\ circle/refined/error.ref\ circle/refined/order.ref\ circle/refined/solution.gfv\ circle/thin/thin.gfs\ circle/thin/res-7.ref\ circle/thin/error.ref\ circle/thin/order.ref\ circle/thin/solution.gfv\ circle/star/star.gfs\ circle/star/res-7.ref\ circle/star/error.ref\ circle/star/order.ref\ circle/star/solution.gfv\ dumbell/dumbell.gfs\ dumbell/dumbell.sh\ advection/advection.gfs\ advection/advection.sh\ advection/error.ref\ advection/order.ref\ shear/shear.gfs\ shear/shear.sh\ shear/norms.ref\ shear/curvature/curvature.gfs\ shear/curvature/../shear.sh\ shear/curvature/norms.ref\ shear/curvature/curvature.gfv\ shear/concentration/concentration.gfs\ shear/concentration/concentration.sh\ shear/concentration/convergence.ref\ shear/concentration/convergence1.ref\ shear/concentration/convergence2.ref\ shear/concentration/t1.gfv\ shear/concentration/t2.gfv\ rotate/rotate.gfs\ rotate/rotate.gfv\ rotate/cells.gfv\ rotate/error.ref\ rotate/n1-0.gnu\ rotate/n1-1.gnu\ rotate/n1-2.gnu\ rotate/n1-5.gnu\ rotate/error.n1\ diffusion/diffusion.gfs\ diffusion/diffusion.sh\ diffusion/concentration/concentration.gfs\ diffusion/concentration/concentration.sh\ conservation/conservation.gfs\ reynolds/reynolds.gfs\ reynolds/reynolds.sh\ reynolds/div5.ref\ reynolds/div6.ref\ reynolds/div7.ref\ reynolds/reynolds.ref\ reynolds/box/box.gfs\ reynolds/box/../reynolds.sh\ reynolds/box/div5.ref\ reynolds/box/div6.ref\ reynolds/box/div7.ref\ reynolds/box/reynolds.ref\ reynolds/skew/skew.gfs\ reynolds/skew/skew.sh\ reynolds/skew/div5.ref\ reynolds/skew/div6.ref\ reynolds/skew/div7.ref\ reynolds/skew/reynolds.ref\ reynolds/stream/stream.gfs\ reynolds/stream/div5.ref\ reynolds/stream/div6.ref\ reynolds/stream/div7.ref\ reynolds/stream/reynolds.ref\ reynolds/skewbox/skewbox.gfs\ reynolds/skewbox/skew.sh\ reynolds/skewbox/error.ref\ periodic/periodic.gfs\ periodic/periodic.sh\ periodic/r0.ref\ periodic/r1.ref\ periodic/r2.ref\ merging/merging.gfs\ merging/merging.sh\ merging/levels.gfv\ merging/vorticity.gfv\ merging/sim.err.ref\ merging/simc.err.ref\ source/source.gfs\ source/source.sh\ source/source.gfv\ source/error.gfv\ source/error.ref\ axi/axi.gfs\ axi/axi.sh\ axi/error.ref\ axi/order.ref\ axi/isolines.gfv\ axi/viscous/viscous.gfs\ axi/viscous/viscous.sh\ axi/viscous/cp-12-200\ axi/viscous/fadlun\ axi/viscous/fadlun-cp-100\ axi/viscous/fadlun-cp-200\ axi/viscous/Re-12\ axi/viscous/zhang\ axi/viscous/blanco-1995\ axi/viscous/masliyah-1970\ axi/viscous/isolines.gfv\ axi/viscous/fornberg\ axiadvection/axiadvection.gfs\ axiadvection/axi.sh\ axiadvection/vectors.gfv\ axiadvection/vof.gfv\ axiadvection/solid/solid.gfs\ axiadvection/solid/axi.sh\ swirl/swirl.gfs\ swirl/analytical\ lid/lid.gfs\ lid/lid.sh\ lid/xprofile\ lid/yprofile\ lid/xprof.ghia\ lid/yprof.ghia\ lid/stretch/stretch.gfs\ lid/stretch/xprofile\ lid/stretch/yprofile\ lid/stretch/xprof.ghia\ lid/stretch/yprof.ghia\ lid/explicit/explicit.gfs\ lid/explicit/lid.sh\ lid/metric/metric.gfs\ lid/metric/isolines.gfv\ lid/metric/xprofile\ lid/metric/yprofile\ lid/metric/xprof.ghia\ lid/metric/yprof.ghia\ poiseuille/poiseuille.gfs\ poiseuille/poiseuille.sh\ poiseuille/error.ref\ poiseuille/bagnold/bagnold.gfs\ poiseuille/bagnold/error.ref\ poiseuille/metric/metric.gfs\ poiseuille/metric/error.ref\ poiseuille/river/river.gfs\ poiseuille/river/river.sh\ poiseuille/river/error.ref\ couette/couette.gfs\ couette/couette.sh\ couette/profile\ couette/prof-0.ref\ couette/prof-1.ref\ couette/prof-2.ref\ couette/prof-3.ref\ kinetic/kinetic.gfs\ kinetic/kinetic.gfs\ hydrostatic/hydrostatic.gfs\ hydrostatic/quadratic/quadratic.gfs\ hydrostatic/quadratic/quadratic.gfs\ coriolis/coriolis.gfs\ coriolis/coriolis.sh\ lake/lake.gfs\ lake/lake.gfv\ lake/stratified/stratified.gfs\ lake/stratified/stratified.sh\ lake/stratified/error.ref\ lake/stratified/field.awk\ lake/stratified/thermo.awk\ lake/river/river.gfs\ lake/river/river.sh\ lake/river/error.ref\ boundaries/boundaries.gfs\ boundaries/boundaries.sh\ boundaries/orderU.ref\ boundaries/orderfU.ref\ boundaries/orderV.ref\ boundaries/orderfV.ref\ channel/channel.gfs\ channel/channel.sh\ channel/orderU.ref\ channel/orderfU.ref\ channel/orderV.ref\ channel/orderfV.ref\ plate/plate.gfs\ plate/plate.sh\ hexagon/hexagon.gfs\ hexagon/hexagon.sh\ hexagon/hexagon.gts\ hexagon/hexagon.gfv\ strouhal/strouhal.gfs\ strouhal/strouhal.sh\ strouhal/strouhal.gfv\ strouhal/strouhal.ref\ strouhal/moving.ref\ strouhal/static.ref\ spurious/spurious.gfs\ spurious/spurious.sh\ spurious/convergence.ref\ spurious/kconvergence.ref\ spurious/axi/axi.gfs\ spurious/axi/convergence.ref\ spurious/axi/kconvergence.ref\ capwave/capwave.gfs\ capwave/capwave.sh\ capwave/convergence.ref\ capwave/prosperetti\ capwave/markers.tex\ capwave/surfer.tex\ capwave/prost.tex\ capwave/clsvof.tex\ capwave/gravity/gravity.gfs\ capwave/gravity/convergence.ref\ capwave/gravity/prosperetti\ capwave/air-water/air-water.gfs\ capwave/air-water/convergence.ref\ capwave/air-water/prosperetti\ capwave/density/density.gfs\ capwave/density/convergence.ref\ capwave/density/prosperetti\ oscillation/oscillation.gfs\ oscillation/oscillation.sh\ oscillation/fit.ref\ height/height.gfs\ height/height.sh\ height/height1.gfs\ height/height2.gfs\ height/height3.gfs\ height/height4.gfs\ height/height5.gfs\ plateau/plateau.gfs\ plateau/plateau.gfv\ plateau/zoom.gfv\ sessile/sessile.gfs\ sessile/sessile.sh\ sessile/error-6.ref\ geo/geo.gfs\ geo/geo.sh\ geo/geo.gfv\ geo/e.ref\ geo/beta/beta.gfs\ geo/beta/beta.sh\ geo/beta/c\ geo/beta/dlw\ geo/beta/lls\ geo/beta/pzm\ geo/beta/llw\ geo/beta/energy.ref\ geo/beta/energy-nonlinear.ref\ geo/river/river.gfs\ geo/river/geo.sh\ geo/river/geo.gfv\ geo/river/e.ref\ nonlinear/nonlinear.gfs\ nonlinear/nonlinear.sh\ nonlinear/river.gfs\ nonlinear/ocean.gfs\ nonlinear/error.gfv\ nonlinear/error-ocean.gfv\ nonlinear/error-1.ref\ nonlinear/error-ocean-1.ref\ nonlinear/error-river-1.ref\ waves/waves.gfs\ waves/waves.sh\ waves/solution.gfv\ waves/correlation.ref\ waves/adaptive/adaptive.gfs\ waves/adaptive/solution.gfv\ waves/adaptive/correlation.ref\ nz/nz.gfs\ nz/nz.gfs\ nz/bath.gts\ parabola/parabola.gfs\ parabola/parabola.sh\ parabola/error.ref\ parabola/solid/solid.gfs\ parabola/solid/error.ref\ shock/shock.gfs\ shock/shock.sh\ shock/error.ref\ shock/layered/layered.gfs\ shock/layered/layered.sh\ shock/layered/uprof.awk\ shock/layered/field.awk\ shock/layered/prof.ref\ shore/shore.gfs\ shore/shore.sh\ shore/init.cgd\ shore/t160.csv\ shore/t175.csv\ shore/t220.csv\ shore/convergence.ref\ still/still.gfs\ still/still.gfv\ still/bipolar/bipolar.gfs\ still/bipolar/p.gfv\ still/bipolar/mesh.gfv\ terrain/terrain.gfs\ terrain/terrain.sh\ terrain/error-t.ref\ terrain/error-h.ref\ lonlat/lonlat.gfs\ lonlat/isolines.gfv\ lonlat/cubed/cubed.gfs\ lonlat/cubed/isolines.gfv\ lonlat/coriolis/coriolis.gfs\ lonlat/coriolis/isolines.gfv\ cosine/cosine.gfs\ cosine/cosine.sh\ cosine/isolines.gfv\ cosine/reference.gfv\ cosine/zero.gfv\ cosine/error-45.ref\ cosine/error-90.ref\ cosine/rossmanith45\ cosine/rossmanith90\ harmonic/harmonic.gfs\ harmonic/harmonic.sh\ harmonic/gerris.gfv\ harmonic/res-7.ref\ harmonic/error.ref\ harmonic/order.ref\ harmonic/lonlat/lonlat.gfs\ harmonic/lonlat/gerris.gfv\ harmonic/lonlat/res-7.ref\ harmonic/lonlat/error.ref\ harmonic/lonlat/order.ref\ gaussian/gaussian.gfs\ gaussian/gaussian.sh\ gaussian/prof.ref\ gaussian/lonlat/lonlat.gfs\ gaussian/lonlat/prof.ref\ annulus/annulus.gfs\ annulus/annulus.sh\ annulus/error.ref\ wannier/wannier.gfs\ wannier/wannier.c\ wannier/wannier.sh\ wannier/error.ref\ wannier/streamlines.gfv\ wannier/bipolar/bipolar.gfs\ wannier/bipolar/bipolar.sh\ wannier/bipolar/error.ref\ wannier/bipolar/mesh.gfv\ wannier/stretch/stretch.gfs\ wannier/stretch/error.ref\ wannier/stretch/streamlines.gfv\ rossby/rossby.gfs\ rossby/rossby.sh\ rossby/ehp.gfv\ rossby/ehm.gfv\ rossby/h.gfv\ rossby/href.gfv\ rossby/ec-6\ rossby/eh-4.ref\ rossby/eh-5.ref\ rossby/eh-6.ref\ rossby/ocean/ocean.gfs\ rossby/ocean/ehp.gfv\ rossby/ocean/ehm.gfv\ rossby/ocean/h.gfv\ rossby/ocean/href.gfv\ rossby/ocean/ec-6\ rossby/ocean/eh-4.ref\ rossby/ocean/eh-5.ref\ rossby/ocean/eh-6.ref\ rossby/river/river.gfs\ rossby/river/ehp.gfv\ rossby/river/ehm.gfv\ rossby/river/h.gfv\ rossby/river/href.gfv\ rossby/river/ec-6\ rossby/river/eh-4.ref\ rossby/river/eh-5.ref\ rossby/river/eh-6.ref\ injectionaxi/injectionaxi.gfs\ injectionaxi/injectionaxi.gfs\ planar/planar.gfs\ planar/solid/solid.gfs\ bump/bump.gfs\ bump/bump.sh\ bump/norms-explicit.ref\ bump/norms-implicit.ref\ cylinder/cylinder.gfs\ cylinder/cylinder.sh\ cylinder/norms.ref\ cylinder/planar/planar.gfs\ cylinder/planar/norms.ref\ electro/electro.gfs\ electro/electro.sh\ electro/figure.gfv\ electro/convergence.ref\ debye/debye.gfs\ debye/debye.sh\ debye/points\ debye/analytical\ groundwater/groundwater.gfs\ groundwater/groundwater.sh\ groundwater/groundwater.gfv\ groundwater/p.ref\ groundwater/U.ref\ groundwater/piecewise/piecewise.gfs\ groundwater/piecewise/piecewise.gfv\ groundwater/piecewise/p.ref\ groundwater/piecewise/U.ref TESTS = \ poisson.sh\ circle.sh\ dumbell.sh\ advection.sh\ shear.sh\ rotate.sh\ diffusion.sh\ conservation.sh\ reynolds.sh\ periodic.sh\ merging.sh\ source.sh\ axi.sh\ axiadvection.sh\ swirl.sh\ lid.sh\ poiseuille.sh\ couette.sh\ kinetic.sh\ hydrostatic.sh\ coriolis.sh\ lake.sh\ boundaries.sh\ channel.sh\ plate.sh\ hexagon.sh\ strouhal.sh\ spurious.sh\ capwave.sh\ oscillation.sh\ height.sh\ plateau.sh\ sessile.sh\ geo.sh\ nonlinear.sh\ waves.sh\ nz.sh\ parabola.sh\ shock.sh\ shore.sh\ still.sh\ terrain.sh\ lonlat.sh\ cosine.sh\ harmonic.sh\ gaussian.sh\ annulus.sh\ wannier.sh\ rossby.sh\ injectionaxi.sh\ planar.sh\ bump.sh\ cylinder.sh\ electro.sh\ debye.sh\ groundwater.sh\ summary.sh EXTRA_DIST += $(TESTS)\ poisson/poisson.gfs\ poisson/poisson.sh\ poisson/res-7.ref\ poisson/error.ref\ poisson/order.ref\ poisson/dirichlet/dirichlet.gfs\ poisson/dirichlet/res-7.ref\ poisson/dirichlet/error.ref\ poisson/dirichlet/order.ref\ poisson/circle/circle.gfs\ poisson/circle/res-7.ref\ poisson/circle/error.ref\ poisson/circle/order.ref\ circle/circle.gfs\ circle/circle.sh\ circle/res-7.ref\ circle/error.ref\ circle/order.ref\ circle/solution.gfv\ circle/refined/refined.gfs\ circle/refined/res-7.ref\ circle/refined/error.ref\ circle/refined/order.ref\ circle/refined/solution.gfv\ circle/thin/thin.gfs\ circle/thin/res-7.ref\ circle/thin/error.ref\ circle/thin/order.ref\ circle/thin/solution.gfv\ circle/star/star.gfs\ circle/star/res-7.ref\ circle/star/error.ref\ circle/star/order.ref\ circle/star/solution.gfv\ dumbell/dumbell.gfs\ dumbell/dumbell.sh\ advection/advection.gfs\ advection/advection.sh\ advection/error.ref\ advection/order.ref\ shear/shear.gfs\ shear/shear.sh\ shear/norms.ref\ shear/curvature/curvature.gfs\ shear/curvature/../shear.sh\ shear/curvature/norms.ref\ shear/curvature/curvature.gfv\ shear/concentration/concentration.gfs\ shear/concentration/concentration.sh\ shear/concentration/convergence.ref\ shear/concentration/convergence1.ref\ shear/concentration/convergence2.ref\ shear/concentration/t1.gfv\ shear/concentration/t2.gfv\ rotate/rotate.gfs\ rotate/rotate.gfv\ rotate/cells.gfv\ rotate/error.ref\ rotate/n1-0.gnu\ rotate/n1-1.gnu\ rotate/n1-2.gnu\ rotate/n1-5.gnu\ rotate/error.n1\ diffusion/diffusion.gfs\ diffusion/diffusion.sh\ diffusion/concentration/concentration.gfs\ diffusion/concentration/concentration.sh\ conservation/conservation.gfs\ reynolds/reynolds.gfs\ reynolds/reynolds.sh\ reynolds/div5.ref\ reynolds/div6.ref\ reynolds/div7.ref\ reynolds/reynolds.ref\ reynolds/box/box.gfs\ reynolds/box/../reynolds.sh\ reynolds/box/div5.ref\ reynolds/box/div6.ref\ reynolds/box/div7.ref\ reynolds/box/reynolds.ref\ reynolds/skew/skew.gfs\ reynolds/skew/skew.sh\ reynolds/skew/div5.ref\ reynolds/skew/div6.ref\ reynolds/skew/div7.ref\ reynolds/skew/reynolds.ref\ reynolds/stream/stream.gfs\ reynolds/stream/div5.ref\ reynolds/stream/div6.ref\ reynolds/stream/div7.ref\ reynolds/stream/reynolds.ref\ reynolds/skewbox/skewbox.gfs\ reynolds/skewbox/skew.sh\ reynolds/skewbox/error.ref\ periodic/periodic.gfs\ periodic/periodic.sh\ periodic/r0.ref\ periodic/r1.ref\ periodic/r2.ref\ merging/merging.gfs\ merging/merging.sh\ merging/levels.gfv\ merging/vorticity.gfv\ merging/sim.err.ref\ merging/simc.err.ref\ source/source.gfs\ source/source.sh\ source/source.gfv\ source/error.gfv\ source/error.ref\ axi/axi.gfs\ axi/axi.sh\ axi/error.ref\ axi/order.ref\ axi/isolines.gfv\ axi/viscous/viscous.gfs\ axi/viscous/viscous.sh\ axi/viscous/cp-12-200\ axi/viscous/fadlun\ axi/viscous/fadlun-cp-100\ axi/viscous/fadlun-cp-200\ axi/viscous/Re-12\ axi/viscous/zhang\ axi/viscous/blanco-1995\ axi/viscous/masliyah-1970\ axi/viscous/isolines.gfv\ axi/viscous/fornberg\ axiadvection/axiadvection.gfs\ axiadvection/axi.sh\ axiadvection/vectors.gfv\ axiadvection/vof.gfv\ axiadvection/solid/solid.gfs\ axiadvection/solid/axi.sh\ swirl/swirl.gfs\ swirl/analytical\ lid/lid.gfs\ lid/lid.sh\ lid/xprofile\ lid/yprofile\ lid/xprof.ghia\ lid/yprof.ghia\ lid/stretch/stretch.gfs\ lid/stretch/xprofile\ lid/stretch/yprofile\ lid/stretch/xprof.ghia\ lid/stretch/yprof.ghia\ lid/explicit/explicit.gfs\ lid/explicit/lid.sh\ lid/metric/metric.gfs\ lid/metric/isolines.gfv\ lid/metric/xprofile\ lid/metric/yprofile\ lid/metric/xprof.ghia\ lid/metric/yprof.ghia\ poiseuille/poiseuille.gfs\ poiseuille/poiseuille.sh\ poiseuille/error.ref\ poiseuille/bagnold/bagnold.gfs\ poiseuille/bagnold/error.ref\ poiseuille/metric/metric.gfs\ poiseuille/metric/error.ref\ poiseuille/river/river.gfs\ poiseuille/river/river.sh\ poiseuille/river/error.ref\ couette/couette.gfs\ couette/couette.sh\ couette/profile\ couette/prof-0.ref\ couette/prof-1.ref\ couette/prof-2.ref\ couette/prof-3.ref\ kinetic/kinetic.gfs\ kinetic/kinetic.gfs\ hydrostatic/hydrostatic.gfs\ hydrostatic/quadratic/quadratic.gfs\ hydrostatic/quadratic/quadratic.gfs\ coriolis/coriolis.gfs\ coriolis/coriolis.sh\ lake/lake.gfs\ lake/lake.gfv\ lake/stratified/stratified.gfs\ lake/stratified/stratified.sh\ lake/stratified/error.ref\ lake/stratified/field.awk\ lake/stratified/thermo.awk\ lake/river/river.gfs\ lake/river/river.sh\ lake/river/error.ref\ boundaries/boundaries.gfs\ boundaries/boundaries.sh\ boundaries/orderU.ref\ boundaries/orderfU.ref\ boundaries/orderV.ref\ boundaries/orderfV.ref\ channel/channel.gfs\ channel/channel.sh\ channel/orderU.ref\ channel/orderfU.ref\ channel/orderV.ref\ channel/orderfV.ref\ plate/plate.gfs\ plate/plate.sh\ hexagon/hexagon.gfs\ hexagon/hexagon.sh\ hexagon/hexagon.gts\ hexagon/hexagon.gfv\ strouhal/strouhal.gfs\ strouhal/strouhal.sh\ strouhal/strouhal.gfv\ strouhal/strouhal.ref\ strouhal/moving.ref\ strouhal/static.ref\ spurious/spurious.gfs\ spurious/spurious.sh\ spurious/convergence.ref\ spurious/kconvergence.ref\ spurious/axi/axi.gfs\ spurious/axi/convergence.ref\ spurious/axi/kconvergence.ref\ capwave/capwave.gfs\ capwave/capwave.sh\ capwave/convergence.ref\ capwave/prosperetti\ capwave/markers.tex\ capwave/surfer.tex\ capwave/prost.tex\ capwave/clsvof.tex\ capwave/gravity/gravity.gfs\ capwave/gravity/convergence.ref\ capwave/gravity/prosperetti\ capwave/air-water/air-water.gfs\ capwave/air-water/convergence.ref\ capwave/air-water/prosperetti\ capwave/density/density.gfs\ capwave/density/convergence.ref\ capwave/density/prosperetti\ oscillation/oscillation.gfs\ oscillation/oscillation.sh\ oscillation/fit.ref\ height/height.gfs\ height/height.sh\ height/height1.gfs\ height/height2.gfs\ height/height3.gfs\ height/height4.gfs\ height/height5.gfs\ plateau/plateau.gfs\ plateau/plateau.gfv\ plateau/zoom.gfv\ sessile/sessile.gfs\ sessile/sessile.sh\ sessile/error-6.ref\ geo/geo.gfs\ geo/geo.sh\ geo/geo.gfv\ geo/e.ref\ geo/beta/beta.gfs\ geo/beta/beta.sh\ geo/beta/c\ geo/beta/dlw\ geo/beta/lls\ geo/beta/pzm\ geo/beta/llw\ geo/beta/energy.ref\ geo/beta/energy-nonlinear.ref\ geo/river/river.gfs\ geo/river/geo.sh\ geo/river/geo.gfv\ geo/river/e.ref\ nonlinear/nonlinear.gfs\ nonlinear/nonlinear.sh\ nonlinear/river.gfs\ nonlinear/ocean.gfs\ nonlinear/error.gfv\ nonlinear/error-ocean.gfv\ nonlinear/error-1.ref\ nonlinear/error-ocean-1.ref\ nonlinear/error-river-1.ref\ waves/waves.gfs\ waves/waves.sh\ waves/solution.gfv\ waves/correlation.ref\ waves/adaptive/adaptive.gfs\ waves/adaptive/solution.gfv\ waves/adaptive/correlation.ref\ nz/nz.gfs\ nz/nz.gfs\ nz/bath.gts\ parabola/parabola.gfs\ parabola/parabola.sh\ parabola/error.ref\ parabola/solid/solid.gfs\ parabola/solid/error.ref\ shock/shock.gfs\ shock/shock.sh\ shock/error.ref\ shock/layered/layered.gfs\ shock/layered/layered.sh\ shock/layered/uprof.awk\ shock/layered/field.awk\ shock/layered/prof.ref\ shore/shore.gfs\ shore/shore.sh\ shore/init.cgd\ shore/t160.csv\ shore/t175.csv\ shore/t220.csv\ shore/convergence.ref\ still/still.gfs\ still/still.gfv\ still/bipolar/bipolar.gfs\ still/bipolar/p.gfv\ still/bipolar/mesh.gfv\ terrain/terrain.gfs\ terrain/terrain.sh\ terrain/error-t.ref\ terrain/error-h.ref\ lonlat/lonlat.gfs\ lonlat/isolines.gfv\ lonlat/cubed/cubed.gfs\ lonlat/cubed/isolines.gfv\ lonlat/coriolis/coriolis.gfs\ lonlat/coriolis/isolines.gfv\ cosine/cosine.gfs\ cosine/cosine.sh\ cosine/isolines.gfv\ cosine/reference.gfv\ cosine/zero.gfv\ cosine/error-45.ref\ cosine/error-90.ref\ cosine/rossmanith45\ cosine/rossmanith90\ harmonic/harmonic.gfs\ harmonic/harmonic.sh\ harmonic/gerris.gfv\ harmonic/res-7.ref\ harmonic/error.ref\ harmonic/order.ref\ harmonic/lonlat/lonlat.gfs\ harmonic/lonlat/gerris.gfv\ harmonic/lonlat/res-7.ref\ harmonic/lonlat/error.ref\ harmonic/lonlat/order.ref\ gaussian/gaussian.gfs\ gaussian/gaussian.sh\ gaussian/prof.ref\ gaussian/lonlat/lonlat.gfs\ gaussian/lonlat/prof.ref\ annulus/annulus.gfs\ annulus/annulus.sh\ annulus/error.ref\ wannier/wannier.gfs\ wannier/wannier.c\ wannier/wannier.sh\ wannier/error.ref\ wannier/streamlines.gfv\ wannier/bipolar/bipolar.gfs\ wannier/bipolar/bipolar.sh\ wannier/bipolar/error.ref\ wannier/bipolar/mesh.gfv\ wannier/stretch/stretch.gfs\ wannier/stretch/error.ref\ wannier/stretch/streamlines.gfv\ rossby/rossby.gfs\ rossby/rossby.sh\ rossby/ehp.gfv\ rossby/ehm.gfv\ rossby/h.gfv\ rossby/href.gfv\ rossby/ec-6\ rossby/eh-4.ref\ rossby/eh-5.ref\ rossby/eh-6.ref\ rossby/ocean/ocean.gfs\ rossby/ocean/ehp.gfv\ rossby/ocean/ehm.gfv\ rossby/ocean/h.gfv\ rossby/ocean/href.gfv\ rossby/ocean/ec-6\ rossby/ocean/eh-4.ref\ rossby/ocean/eh-5.ref\ rossby/ocean/eh-6.ref\ rossby/river/river.gfs\ rossby/river/ehp.gfv\ rossby/river/ehm.gfv\ rossby/river/h.gfv\ rossby/river/href.gfv\ rossby/river/ec-6\ rossby/river/eh-4.ref\ rossby/river/eh-5.ref\ rossby/river/eh-6.ref\ injectionaxi/injectionaxi.gfs\ injectionaxi/injectionaxi.gfs\ planar/planar.gfs\ planar/solid/solid.gfs\ bump/bump.gfs\ bump/bump.sh\ bump/norms-explicit.ref\ bump/norms-implicit.ref\ cylinder/cylinder.gfs\ cylinder/cylinder.sh\ cylinder/norms.ref\ cylinder/planar/planar.gfs\ cylinder/planar/norms.ref\ electro/electro.gfs\ electro/electro.sh\ electro/figure.gfv\ electro/convergence.ref\ debye/debye.gfs\ debye/debye.sh\ debye/points\ debye/analytical\ groundwater/groundwater.gfs\ groundwater/groundwater.sh\ groundwater/groundwater.gfv\ groundwater/p.ref\ groundwater/U.ref\ groundwater/piecewise/piecewise.gfs\ groundwater/piecewise/piecewise.gfv\ groundwater/piecewise/p.ref\ groundwater/piecewise/U.ref TESTS_ENVIRONMENT = TESTS=" poisson circle dumbell advection shear rotate diffusion conservation reynolds periodic merging source axi axiadvection swirl lid poiseuille couette kinetic hydrostatic coriolis lake boundaries channel plate hexagon strouhal spurious capwave oscillation height plateau sessile geo nonlinear waves nz parabola shock shore still terrain lonlat cosine harmonic gaussian annulus wannier rossby injectionaxi planar bump cylinder electro debye groundwater" TEST_EXTENSIONS = .sh summary.log:\ poisson.log\ circle.log\ dumbell.log\ advection.log\ shear.log\ rotate.log\ diffusion.log\ conservation.log\ reynolds.log\ periodic.log\ merging.log\ source.log\ axi.log\ axiadvection.log\ swirl.log\ lid.log\ poiseuille.log\ couette.log\ kinetic.log\ hydrostatic.log\ coriolis.log\ lake.log\ boundaries.log\ channel.log\ plate.log\ hexagon.log\ strouhal.log\ spurious.log\ capwave.log\ oscillation.log\ height.log\ plateau.log\ sessile.log\ geo.log\ nonlinear.log\ waves.log\ nz.log\ parabola.log\ shock.log\ shore.log\ still.log\ terrain.log\ lonlat.log\ cosine.log\ harmonic.log\ gaussian.log\ annulus.log\ wannier.log\ rossby.log\ injectionaxi.log\ planar.log\ bump.log\ cylinder.log\ electro.log\ debye.log\ groundwater.log tests.tex: \ poisson/poisson.gfs\ poisson/residual.eps\ poisson/rate.eps\ poisson/error.eps\ poisson/order.eps\ poisson/dirichlet/dirichlet.gfs\ poisson/dirichlet/residual.eps\ poisson/dirichlet/rate.eps\ poisson/dirichlet/error.eps\ poisson/dirichlet/order.eps\ poisson/circle/circle.gfs\ poisson/circle/residual.eps\ poisson/circle/rate.eps\ poisson/circle/error.eps\ poisson/circle/order.eps\ circle/circle.gfs\ circle/residual.eps\ circle/rate.eps\ circle/error.eps\ circle/order.eps\ circle/solution.eps\ circle/refined/refined.gfs\ circle/refined/residual.eps\ circle/refined/rate.eps\ circle/refined/error.eps\ circle/refined/order.eps\ circle/refined/solution.eps\ circle/thin/thin.gfs\ circle/thin/residual.eps\ circle/thin/rate.eps\ circle/thin/error.eps\ circle/thin/order.eps\ circle/thin/solution.eps\ circle/star/star.gfs\ circle/star/residual.eps\ circle/star/rate.eps\ circle/star/error.eps\ circle/star/order.eps\ circle/star/solution.eps\ dumbell/dumbell.gfs\ advection/advection.gfs\ advection/error.eps\ advection/order.eps\ shear/shear.gfs\ shear/t-0.eps\ shear/t-2.5.eps\ shear/t-5.eps\ shear/dt-5.eps\ shear/norms\ shear/norms.tex\ shear/curvature/curvature.gfs\ shear/curvature/t-2.5.eps\ shear/curvature/dt-5.eps\ shear/curvature/norms\ shear/curvature/norms.tex\ shear/concentration/concentration.gfs\ shear/concentration/convergence.eps\ shear/concentration/t1-end.eps\ shear/concentration/t1-half.eps\ shear/concentration/t2-end.eps\ shear/concentration/t2-half.eps\ rotate/rotate.gfs\ rotate/error.eps\ rotate/rotate-0.eps\ rotate/rotate-1.eps\ rotate/rotate-2.eps\ rotate/rotate-5.eps\ diffusion/diffusion.gfs\ diffusion/profile.eps\ diffusion/concentration/concentration.gfs\ diffusion/concentration/profile.eps\ conservation/conservation.gfs\ reynolds/reynolds.gfs\ reynolds/divmax.eps\ reynolds/reynolds.eps\ reynolds/divL2.eps\ reynolds/kinetic.eps\ reynolds/accuracy.eps\ reynolds/box/box.gfs\ reynolds/box/divmax.eps\ reynolds/box/reynolds.eps\ reynolds/box/divL2.eps\ reynolds/box/kinetic.eps\ reynolds/box/accuracy.eps\ reynolds/skew/skew.gfs\ reynolds/skew/divmax.eps\ reynolds/skew/divL2.eps\ reynolds/skew/kinetic.eps\ reynolds/skew/accuracy.eps\ reynolds/stream/stream.gfs\ reynolds/stream/divmax.eps\ reynolds/stream/reynolds.eps\ reynolds/stream/divL2.eps\ reynolds/stream/kinetic.eps\ reynolds/stream/accuracy.eps\ reynolds/skewbox/skewbox.gfs\ reynolds/skewbox/kinetic.eps\ reynolds/skewbox/accuracy.eps\ periodic/periodic.gfs\ periodic/minion1.tex\ merging/merging.gfs\ merging/convergence.tex\ merging/tv_0_05.eps\ merging/tm_0_05.eps\ merging/tv_0_15.eps\ merging/tm_0_15.eps\ merging/tv_0_25.eps\ merging/tm_0_25.eps\ source/source.gfs\ source/velfield.eps\ source/error.eps\ source/localerror.eps\ axi/axi.gfs\ axi/error.eps\ axi/order.eps\ axi/isolines.eps\ axi/viscous/viscous.gfs\ axi/viscous/length.eps\ axi/viscous/Cp.eps\ axi/viscous/isolines.eps\ axiadvection/axiadvection.gfs\ axiadvection/vof.eps\ axiadvection/solid/solid.gfs\ swirl/swirl.gfs\ swirl/profiles.eps\ lid/lid.gfs\ lid/xprof\ lid/yprof\ lid/xprof.eps\ lid/yprof.eps\ lid/velocity.eps\ lid/stretch/stretch.gfs\ lid/stretch/xprof.eps\ lid/stretch/yprof.eps\ lid/stretch/velocity.eps\ lid/explicit/explicit.gfs\ lid/explicit/xprof\ lid/explicit/yprof\ lid/explicit/xprof.eps\ lid/explicit/yprof.eps\ lid/explicit/velocity.eps\ lid/metric/metric.gfs\ lid/metric/xprof.eps\ lid/metric/yprof.eps\ lid/metric/velocity.eps\ poiseuille/poiseuille.gfs\ poiseuille/convergence.eps\ poiseuille/bagnold/bagnold.gfs\ poiseuille/bagnold/convergence.eps\ poiseuille/metric/metric.gfs\ poiseuille/metric/convergence.eps\ poiseuille/river/river.gfs\ poiseuille/river/convergence.eps\ couette/couette.gfs\ couette/prof.eps\ kinetic/kinetic.gfs\ kinetic/k.eps\ hydrostatic/hydrostatic.gfs\ hydrostatic/quadratic/quadratic.gfs\ coriolis/coriolis.gfs\ coriolis/velocity.eps\ coriolis/error.dat\ lake/lake.gfs\ lake/lake.eps\ lake/stratified/stratified.gfs\ lake/stratified/uprof.eps\ lake/stratified/error.eps\ lake/stratified/drho.eps\ lake/stratified/free.eps\ lake/stratified/thermo.eps\ lake/river/river.gfs\ lake/river/uprof.eps\ lake/river/error.eps\ boundaries/boundaries.gfs\ boundaries/convergence.tex\ channel/channel.gfs\ channel/convergence.tex\ plate/plate.gfs\ hexagon/hexagon.gfs\ hexagon/error.eps\ hexagon/end-2.eps\ strouhal/strouhal.gfs\ strouhal/strouhal.eps\ strouhal/vort.eps\ strouhal/forces.eps\ spurious/spurious.gfs\ spurious/laplace.eps\ spurious/curvature.eps\ spurious/convergence.eps\ spurious/kconvergence.eps\ spurious/axi/axi.gfs\ spurious/axi/laplace.eps\ spurious/axi/curvature.eps\ spurious/axi/convergence.eps\ spurious/axi/kconvergence.eps\ capwave/capwave.gfs\ capwave/convergence.tex\ capwave/amplitude.eps\ capwave/convergence.eps\ capwave/markers.tex\ capwave/surfer.tex\ capwave/prost.tex\ capwave/clsvof.tex\ capwave/gravity/gravity.gfs\ capwave/gravity/convergence.tex\ capwave/gravity/amplitude.eps\ capwave/air-water/air-water.gfs\ capwave/air-water/convergence.tex\ capwave/air-water/amplitude.eps\ capwave/density/density.gfs\ capwave/density/convergence.tex\ capwave/density/amplitude.eps\ oscillation/oscillation.gfs\ oscillation/frequency.eps\ oscillation/k.eps\ oscillation/laplace.eps\ height/height.gfs\ plateau/plateau.gfs\ plateau/plateau-0.2.eps\ plateau/plateau-0.6.eps\ plateau/plateau-t0.eps\ plateau/plateau-0.8.eps\ plateau/u.eps\ plateau/y.eps\ plateau/plateau.mpg\ plateau/zoom-t0.eps\ sessile/sessile.gfs\ sessile/rk.eps\ sessile/convergence.eps\ geo/geo.gfs\ geo/geo_error.eps\ geo/error-100.eps\ geo/error-200.eps\ geo/error-300.eps\ geo/error-400.eps\ geo/error-1500.eps\ geo/beta/beta.gfs\ geo/beta/energy.eps\ geo/river/river.gfs\ geo/river/geo_error.eps\ geo/river/error-100.eps\ geo/river/error-200.eps\ geo/river/error-300.eps\ geo/river/error-400.eps\ geo/river/error-1500.eps\ nonlinear/nonlinear.gfs\ nonlinear/end-0.eps\ nonlinear/end-ocean-0.eps\ nonlinear/end-river-0.eps\ nonlinear/end-1.eps\ nonlinear/end-ocean-1.eps\ nonlinear/end-river-1.eps\ nonlinear/error-0.eps\ nonlinear/error-1.eps\ waves/waves.gfs\ waves/correlation\ waves/correlation.tex\ waves/solution.eps\ waves/adaptive/adaptive.gfs\ waves/adaptive/correlation\ waves/adaptive/correlation.tex\ waves/adaptive/solution.eps\ nz/nz.gfs\ nz/p.eps\ nz/k.eps\ parabola/parabola.gfs\ parabola/elevation.eps\ parabola/u0.eps\ parabola/convergence.eps\ parabola/convergence-u.eps\ parabola/solid/solid.gfs\ parabola/solid/u0.eps\ parabola/solid/convergence.eps\ parabola/solid/convergence-u.eps\ shock/shock.gfs\ shock/error.eps\ shock/h-8.eps\ shock/layered/layered.gfs\ shock/layered/prof.eps\ shock/layered/u.eps\ shock/layered/uprof-10.eps\ shock/layered/uprof-15.eps\ shock/layered/uprof-20.eps\ shore/shore.gfs\ shore/profile.eps\ shore/order.eps\ still/still.gfs\ still/still.eps\ still/bipolar/bipolar.gfs\ still/bipolar/still.eps\ terrain/terrain.gfs\ terrain/error-t.eps\ terrain/error-h.eps\ lonlat/lonlat.gfs\ lonlat/isolines-0.3.eps\ lonlat/isolines-0.6.eps\ lonlat/isolines-0.9.eps\ lonlat/p-0.3.eps\ lonlat/p-0.6.eps\ lonlat/p-0.9.eps\ lonlat/cubed/cubed.gfs\ lonlat/cubed/isolines-0.3.eps\ lonlat/cubed/isolines-0.6.eps\ lonlat/cubed/isolines-0.9.eps\ lonlat/cubed/isolines-1.2.eps\ lonlat/cubed/isolines-1.5.eps\ lonlat/cubed/p-0.3.eps\ lonlat/cubed/p-0.6.eps\ lonlat/cubed/p-0.9.eps\ lonlat/cubed/p-1.2.eps\ lonlat/cubed/p-1.5.eps\ lonlat/coriolis/coriolis.gfs\ lonlat/coriolis/isolines-0.4.eps\ lonlat/coriolis/isolines-0.8.eps\ lonlat/coriolis/isolines-1.2.eps\ cosine/cosine.gfs\ cosine/isolines-4-45.eps\ cosine/isolines-5-90.eps\ cosine/isolines-7-45.eps\ cosine/order-90.eps\ cosine/isolines-4-90.eps\ cosine/isolines-6-45.eps\ cosine/isolines-7-90.eps\ cosine/isolines-5-45.eps\ cosine/isolines-6-90.eps\ cosine/order-45.eps\ cosine/error-90.eps\ cosine/error-45.eps\ harmonic/harmonic.gfs\ harmonic/gerris.eps\ harmonic/residual.eps\ harmonic/rate.eps\ harmonic/error.eps\ harmonic/order.eps\ harmonic/lonlat/lonlat.gfs\ harmonic/lonlat/gerris.eps\ harmonic/lonlat/residual.eps\ harmonic/lonlat/rate.eps\ harmonic/lonlat/error.eps\ harmonic/lonlat/order.eps\ gaussian/gaussian.gfs\ gaussian/profile.eps\ gaussian/lonlat/lonlat.gfs\ gaussian/lonlat/profile.eps\ annulus/annulus.gfs\ annulus/convergence.eps\ annulus/profile.eps\ wannier/wannier.gfs\ wannier/convergence.eps\ wannier/streamlines.eps\ wannier/bipolar/bipolar.gfs\ wannier/bipolar/convergence.eps\ wannier/bipolar/mesh.eps\ wannier/stretch/stretch.gfs\ wannier/stretch/convergence.eps\ rossby/rossby.gfs\ rossby/ehpm-4.eps\ rossby/ehpm-5.eps\ rossby/ehpm-6.eps\ rossby/h-4.eps\ rossby/h-5.eps\ rossby/h-6.eps\ rossby/ec.eps\ rossby/eh.eps\ rossby/order.eps\ rossby/ocean/ocean.gfs\ rossby/ocean/ehpm-4.eps\ rossby/ocean/ehpm-5.eps\ rossby/ocean/ehpm-6.eps\ rossby/ocean/h-4.eps\ rossby/ocean/h-5.eps\ rossby/ocean/h-6.eps\ rossby/ocean/ec.eps\ rossby/ocean/eh.eps\ rossby/ocean/order.eps\ rossby/river/river.gfs\ rossby/river/ehpm-4.eps\ rossby/river/ehpm-5.eps\ rossby/river/ehpm-6.eps\ rossby/river/h-4.eps\ rossby/river/h-5.eps\ rossby/river/h-6.eps\ rossby/river/ec.eps\ rossby/river/eh.eps\ rossby/river/order.eps\ injectionaxi/injectionaxi.gfs\ injectionaxi/profile.eps\ planar/planar.gfs\ planar/solid/solid.gfs\ bump/bump.gfs\ bump/profile.eps\ bump/figure.eps\ bump/error.eps\ cylinder/cylinder.gfs\ cylinder/charge.eps\ cylinder/efield.eps\ cylinder/error.eps\ cylinder/planar/planar.gfs\ cylinder/planar/charge.eps\ cylinder/planar/efield.eps\ cylinder/planar/error.eps\ electro/electro.gfs\ electro/profile.eps\ electro/figure.eps\ debye/debye.gfs\ debye/profile.eps\ groundwater/groundwater.gfs\ groundwater/solution.eps\ groundwater/convergence.eps\ groundwater/piecewise/piecewise.gfs\ groundwater/piecewise/convergence.eps\ groundwater/piecewise/solution.eps TESTDIRS = poisson circle dumbell advection shear rotate diffusion conservation reynolds periodic merging source axi axiadvection swirl lid poiseuille couette kinetic hydrostatic coriolis lake boundaries channel plate hexagon strouhal spurious capwave oscillation height plateau sessile geo nonlinear waves nz parabola shock shore still terrain lonlat cosine harmonic gaussian annulus wannier rossby injectionaxi planar bump cylinder electro debye groundwater gerris-snapshot-131206/test/lake/0000755000175100017510000000000012250371673013644 500000000000000gerris-snapshot-131206/test/lake/stratified/0000755000175100017510000000000012250371673016002 500000000000000gerris-snapshot-131206/test/lake/stratified/stratified.gfs0000644000175100017510000001161212250371171020553 00000000000000# Title: Wind-driven stratified lake # # Description: # # We now consider the case of a stratified lake. To model the stable # thermal stratification often observed in lakes, we assume a vertical # density profile of the form # \[ \rho (z) = \rho_0 - H_{{\rm eaviside}} (z - H + # H_{{\rm thermocline}}) \Delta \rho . \] # If $\Delta \rho / \rho_0$ is small compared to one, we can use a # Boussinesq approximation and this results in an additional source # term $- g' H_{{\rm eaviside}} (z - H + H_{{\rm thermocline}})$ for # the vertical component of velocity, with $g'$ the reduced gravity # \[ g' = \frac{\Delta \rho}{\rho_0} g. \] # Through dimensional arguments one can find that the equilibrium # slope $\alpha_t$ of the thermocline should verify the relation \[ g' # \alpha_t \propto \nu \tau, \] for vanishing $\alpha_t$. # # We then need to consider two additional independent dimensionless # parameters # \begin{itemize} # \item $b = 1 - H_{{\rm thermocline}} / H$, set to $3 / 4$ in what follows, # \item and the thermocline slope # \[ \alpha_t = \frac{\nu \tau}{g' H} \] # \end{itemize} # If we assume parallel flow, an analytical solution can be sought for # the horizontal velocity profile in a vertical cross-section, of the # form # \begin{eqnarray*} # u (z) = A_1 z^2 + B_1 z + C_1 & & {\rm for} z > b,\\ # u (z) = A_2 z^2 + B_2 z + C_2 & & {\rm for} z \leq b # \end{eqnarray*} # Using boundary and volume conservation conditions one easily finds # (for $b = 3 / 4$) # \begin{eqnarray*} # u (z) = \frac{30 z^2 - 47 z + 18}{13} & & {\rm for} z > 3 / 4,\\ # u (z) = \frac{- 2 z^2 + z}{13} & & {\rm for} z \leq 3 / 4. # \end{eqnarray*} # This can be used to refine the estimates of the thermocline and surface # slopes. Assuming hydrostatic balance, the horizontal pressure gradient is # given by # \begin{eqnarray*} # \partial_x p = g \alpha' & & {\rm for} z > 3 / 4 + \alpha_t' x,\\ # \partial_x p = g \alpha' + g' \alpha_t' & & {\rm for} z \leq 3 / 4 + # \alpha_t' x. # \end{eqnarray*} # Balancing the horizontal pressure gradients and viscous stress then gives # \begin{eqnarray*} # \alpha' & = & \frac{60}{13} \alpha\\ # \alpha_t' & = & - \frac{64}{13} \alpha_t # \end{eqnarray*} # # The (pseudo) steady-state density perturbation is illustrated in # Figure \ref{drho} and the corresponding free-surface and thermocline # slopes in Figure \ref{thermo}. # # Figure \ref{uprof} illustrates the velocity profile at the center of the # lake and Figure \ref{error} the rate of convergence with an # increasing number of layers. # # \begin{figure}[htbp] # \caption{\label{drho}Density perturbation $\Delta\rho$ for 64 # layers. Numerical diffusion is most noticeable in the upwelling on # the left-hand-side.} # \begin{center} # \includegraphics[width=0.8\hsize]{drho.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{uprof}Numerical and analytical velocity profiles at # the center of the lake.} # \begin{center} # \includegraphics[width=0.8\hsize]{uprof.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Convergence of the error between the numerical # and analytical solution with the number of layers.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{thermo}Profiles of (a) the free surface and (b) # the thermocline compared with the analytical solutions.} # \begin{center} # \begin{tabular}{cc} # \includegraphics[width=0.5\hsize]{free.eps} & # \includegraphics[width=0.5\hsize]{thermo.eps} \\ # (a) & (b) # \end{tabular} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh stratified.sh # Version: 121116 # Running time: 70 seconds # Required files: stratified.sh error.ref field.awk thermo.awk # Generated files: uprof.eps error.eps drho.eps free.eps thermo.eps # # slope of the free surface Define ALPHA 1e-4 # slope of the thermoclime Define ALPHAT 1e-3 1 0 GfsRiver GfsBox GfsGEdge {} { Layers NL Refine LEVEL InitMask {} (y < RATIO*(0.5 - 1./pow(2,LEVEL))) VariableTracer DRHO PhysicalParams { L = RATIO g = 1./(ALPHA*RE) alpha = 1./(1. + DRHO) } Init {} { P = 1 DRHO = (z > 0.75 ? 0 : ALPHA/ALPHAT)*P/NL } Time { end = 100 } OutputSimulation { start = end } end-NL.txt { format = text } OutputSimulation { start = end } { awk '{ nl = NL; if ($1 == "#") { for (i = 2; i <= NF; i++) { split($i,a,":") if (a[2] == "U0") start = a[1]; } } else if ($1 == RATIO/2**(LEVEL + 1)) { dz = $4/nl; for (i = 0; i < nl; i++) { z = dz*(0.5+i) print $1,$2,z,$(start+i)/dz } } }' > uprof-NL } { format = text } } { # vertical viscosity nu = 1./RE # Neumann condition at the surface dut = 1. } GfsBox { right = Boundary left = Boundary } gerris-snapshot-131206/test/lake/stratified/error.ref0000644000175100017510000000006512250371171017543 000000000000008 0.00720645 16 0.0029571 32 0.0008559 64 0.00051502 gerris-snapshot-131206/test/lake/stratified/thermo.awk0000644000175100017510000000032012250371171017710 00000000000000# computes isoline at DRHO = 0.05 { while (NF == 3) { x = $1; z = $2; r = $3; if (r1 > 0.05 && r < 0.05) zo = z1 + (r1 - 0.05)*(z - z1)/(r1 - r); z1 = z; r1 = r; getline } print x,zo } gerris-snapshot-131206/test/lake/stratified/stratified.sh0000644000175100017510000000473112250371171020412 00000000000000ratio=10 if test x$donotrun != xtrue; then for nl in 8 16 32 64; do if gerris2D -DRATIO=$ratio -DNL=$nl -DRE=100 -DLEVEL=5 stratified.gfs; then : else exit 1 fi done fi for nl in 8 16 32 64; do awk -v nl=$nl '{ z = $3 u = (z > 3./4. ? (30.*z*z - 47.*z + 18.)/13. : (-2.*z*z + z)/13.) e = $4 - u if (e < 0.) e = -e; if (e > emax) emax = e; } END { print nl,emax }' < uprof-$nl awk -f field.awk -v name="DRHO" end-$nl.txt | awk -f thermo.awk > thermo-$nl.txt done > error awk -f field.awk -v name="DRHO" end-64.txt > rho-64.txt if gnuplot < 3./4. ? (30.*z*z - 47.*z + 18.)/13. : (-2.*z*z + z)/13.) plot [0:1] uprof(x) t 'analytical', \ 'uprof-8' u 3:4 t '8 layers', \ 'uprof-16' u 3:4 t '16 layers', \ 'uprof-32' u 3:4 t '32 layers', \ 'uprof-64' u 3:4 t '64 layers' set output 'free.eps' set key top left set xlabel 'x' set ylabel 'z' plot 60./13.*1e-4*x+1 t 'analytical', \ 'end-8.txt' u 1:4 t '8 layers', \ 'end-16.txt' u 1:4 t '16 layers', \ 'end-32.txt' u 1:4 t '32 layers', \ 'end-64.txt' u 1:4 t '64 layers' set output 'thermo.eps' set key top right plot -64./13.*1e-3*x+0.75 t 'analytical', \ 'thermo-8.txt' t '8 layers', \ 'thermo-16.txt' t '16 layers', \ 'thermo-32.txt' t '32 layers', \ 'thermo-64.txt' t '64 layers' set output 'error.eps' fm(x)=am+bm*x fit fm(x) 'error' u (log(\$1)):(log(\$2)) via am,bm set key spacing 1.5 top right ftitle(a,b) = sprintf("%.2g/x^{%4.2f}", exp(a), -b) set xlabel 'Spatial resolution' set ylabel 'Maximum error' set logscale set xtics 4,2,128 plot [4:128]'error' u 1:2 t '' w lp ps 2, exp(fm(log(x))) t ftitle(am,bm) set term postscript eps color enhanced solid lw 1 16 set output 'drho.eps' reset set pm3d set pm3d map interpolate 4,4 set xlabel 'x' set ylabel 'z' unset key # jet colormap set palette defined ( 0 0 0 0.5647, 0.125 0 0.05882 1, 0.25 0 0.5647 1,\ 0.375 0.05882 1 0.9333, 0.5 0.5647 1 0.4392, 0.625 1 0.9333 0, 0.75 1 0.4392 0,\ 0.875 0.9333 0 0, 1 0.498 0 0 ) splot [-5:5][0:1.01]'rho-64.txt' u 1:2:3 EOF else exit 1 fi if python < 1e-6: print (Curve('error',1,2) - Curve('error.ref',1,2)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/lake/stratified/field.awk0000644000175100017510000000106512250371171017504 00000000000000# one argument: name = variable name { if ($1 == "#") { for (i = 2; i <= NF; i++) { if (match($i,"(.*):([a-zA-Z]+)([0-9]+)",a) && a[2] == name) { layer[a[3]] = int(a[1]); if (int(a[3]) > nl) nl = int(a[3]); } else if (match($i,"(.*):([a-zA-Z]+)",a) && a[2] == "Zb") zb = int(a[1]); } nl++ } else { dz = $4/nl; dz1 = dz > 0. ? 1./dz : 0. print $1,$zb,$layer[0]*dz1 for (i = 0; i < nl; i++) { z = dz*(0.5+i) print $1,$zb+z,$layer[i]*dz1 } print $1,$zb+dz*nl,$layer[nl - 1]*dz1 print "" } } gerris-snapshot-131206/test/lake/lake.gfs0000644000175100017510000000267612250371171015205 00000000000000# Title: Wind-driven lake # # Description: # # A simple test of a wind-driven lake with a 1/10 mesh stretching # ratio. Due to the anisotropy of stretching, the hypre module needs # to be used to solve the Poisson and diffusion problems # efficiently. Further, with Neumann boundary conditions everywhere # for the pressure, the resulting linear system is rank-deficient and # needs to be "fixed" to avoid drift problems in HYPRE. # # \begin{figure}[htbp] # \caption{\label{vectors}Norm of the velocity and vectors for the # stationary regime. The vertical scale is stretched by a factor of # ten.} # \begin{center} # \includegraphics[width=0.6\hsize]{lake.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: gerris2D lake.gfs # Version: 110325 # Required files: lake.gfv # Running time: 2 minutes # Generated files: lake.eps # 1 0 GfsSimulation GfsBox GfsGEdge {} { GModule hypre MetricStretch {} { sy = 0.1 } Time { end = 5 dtmax = 0.1 } SourceViscosity 1./400. Refine 6 OutputTime { istep = 1 } stderr OutputProjectionStats { istep = 1 } stderr OutputDiffusionStats { istep = 1 } stderr OutputScalarStats { istep = 1 } p { v = P } GModule gfsview OutputView { start = end } lake.eps { format = EPS } lake.gfv OutputSimulation { start = end } end.gfs } GfsBox { top = Boundary { BcNeumann U 1. } right = Boundary left = Boundary bottom = Boundary { BcDirichlet U 0 } } gerris-snapshot-131206/test/lake/lake.gfv0000644000175100017510000000111612250371171015174 00000000000000# GfsView 2D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 26.5041 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Velocity { amin = 1 amax = 1 cmap = Jet } Vectors { r = 0 g = 0 b = 0 shading = Constant maxlevel = 5 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } U V { scale = 0.784 use_scalar = 0 } gerris-snapshot-131206/test/lake/river/0000755000175100017510000000000012250371673014773 500000000000000gerris-snapshot-131206/test/lake/river/river.sh0000644000175100017510000000255012250371171016371 00000000000000ratio=1 if test x$donotrun != xtrue; then for nl in 4 8 16 32; do if gerris2D -DRATIO=$ratio -DNL=$nl -DRE=1 -DLEVEL=5 river.gfs; then : else exit 1 fi done fi for nl in 4 8 16 32; do awk -v nl=$nl '{ z = $3 u = z/4.*(3.*z-2.) e = $4 - u if (e < 0.) e = -e; if (e > emax) emax = e; } END { print nl,emax }' < uprof-$ratio-1-$nl done > error if gnuplot < 1e-6: print (Curve('error',1,2) - Curve('error.ref',1,2)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/lake/river/error.ref0000644000175100017510000000006512250371171016534 000000000000004 0.0109024 8 0.00274853 16 0.000641459 32 0.0001718 gerris-snapshot-131206/test/lake/river/river.gfs0000644000175100017510000000373012250371171016537 00000000000000# Title: Multi-layer Saint-Venant solver # # Description: # # A similar test but using the multi-layer hydrostatic Saint-Venant # solver. # # Figure \ref{uprof} illustrates the velocity profile at the center of # the lake and Figure \ref{error} the rate of convergence with an # increasing number of layers. # # \begin{figure}[htbp] # \caption{\label{uprof}Numerical and analytical velocity profiles at # the center of the lake.} # \begin{center} # \includegraphics[width=0.8\hsize]{uprof.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Convergence of the error between the numerical # and analytical solution with the number of layers.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh river.sh # Version: 120717 # Running time: 15 seconds # Required files: river.sh error.ref # Generated files: uprof.eps error.eps # 1 0 GfsRiver GfsBox GfsGEdge {} { Layers NL PhysicalParams { L = RATIO g = 100./RE } Refine LEVEL InitMask {} (y < RATIO*(0.5 - 1./pow(2,LEVEL))) Init {} { P = 1 } Time { end = 1000 } EventStop { step = 1 } U0 1e-9 # OutputTime { step = 1 } stderr # OutputSimulation { start = end } end-RATIO-RE.txt { format = text } # OutputSimulation { start = end } end-RATIO-RE.gfs OutputSimulation { start = end } { awk '{ nl = NL; if ($1 == "#") { for (i = 2; i <= NF; i++) { split($i,a,":") if (a[2] == "U0") start = a[1]; } } else if ($1 == RATIO/2**(LEVEL + 1)) { dz = $4/nl; for (i = 0; i < nl; i++) { z = dz*(0.5+i) print $1,$2,z,$(start+i)/dz } } }' > uprof-RATIO-RE-NL } { format = text } } { # vertical viscosity nu = 1./RE # Neumann condition at the surface dut = 1. } GfsBox { right = Boundary left = Boundary } gerris-snapshot-131206/test/planar.sh0000755000175100017510000000003112250371662014454 00000000000000python -u test.py planar gerris-snapshot-131206/test/planar/0000755000175100017510000000000012250371674014206 500000000000000gerris-snapshot-131206/test/planar/solid/0000755000175100017510000000000012250371674015320 500000000000000gerris-snapshot-131206/test/planar/solid/solid.gfs0000644000175100017510000000370112250371171017044 00000000000000# Title: Balance with solid boundaries # # Description: # # Same case but using embedded solid boundaries. # # Author: Jose M. L\'opez-Herrera S\'anchez and St\'ephane Popinet # Command: gerris2D solid.gfs # Version: 101020 # Required files: GModule electrohydro 1 0 GfsElectroHydro GfsBox GfsGEdge {} { VariableTracerVOF T InitFraction T (-y) Refine 5 Solid (-y + 0.3) Solid ( y + 0.2) SurfaceBc Phi Dirichlet (y > 0) Time { iend = 1 dtmax = 1 } ProjectionParams { tolerance = 1e-7 } ApproxProjectionParams { tolerance = 1e-7 } SourceElectric OutputTime { istep = 1 } stderr OutputSimulation { start = end } result.txt { format = text } OutputScalarStats { start = end } p { v = P } OutputScalarStats { start = end } ey { v = Ey } OutputScalarNorm { start = end } v { v = V } EventScript { start = end } { if awk '{ deltap = ($11 - $5) - 3./(1.1*1.1) if (deltap < 0.) deltap = - deltap; if (deltap > 4e-4) { print "deltap:", deltap > "/dev/stderr"; exit (1); } }' < p && awk '{ deltap = ($11 - $5) - 2./1.1 if (deltap < 0.) deltap = - deltap; if (deltap > 3e-4) { print "deltaey:", deltap > "/dev/stderr"; exit (1); } }' < ey && awk '{ if ($9 > 10.) { print "vmax:", $9 > "/dev/stderr"; exit (1); } }' < v; then exit 0; else exit $GFS_STOP; fi } } { # Electric parameters perm = 1./(T/3.+(1-T)) ElectricProjectionParams { tolerance = 1e-7 } } GfsBox { left = Boundary right = Boundary top = Boundary { BcDirichlet Phi 1 BcDirichlet P 0 } bottom = Boundary { BcDirichlet Phi 0. } } gerris-snapshot-131206/test/planar/planar.gfs0000644000175100017510000000367312250371171016105 00000000000000# Title: Dielectric-dieletric planar balance # # Description: # # Checks that electrohydrodynamic balance is accurately computed for a # planar interface. # # Author: Jose M. L\'opez-Herrera S\'anchez and St\'ephane Popinet # Command: gerris2D planar.gfs # Version: 101020 # Required files: GModule electrohydro 1 0 GfsElectroHydro GfsBox GfsGEdge {} { VariableTracerVOF T InitFraction T (-y) Init {} { Phi = (y < 0. ? (y/2.+1/4.) : 3.*y/2.+1./4.) } Refine 5 Time { iend = 1 dtmax = 1 } ProjectionParams { tolerance = 1e-7 } ApproxProjectionParams { tolerance = 1e-7 } SourceElectric OutputTime { istep = 1 } stderr OutputSimulation { start = end } result.txt { format = text } OutputScalarStats { start = end } p { v = P } OutputScalarStats { start = end } ey { v = Ey } OutputScalarNorm { start = end } v { v = V } EventScript { start = end } { if awk '{ deltap = ($11 - $5) - 0.75 if (deltap < 0.) deltap = - deltap; if (deltap > 5e-8) { print "deltap:", deltap > "/dev/stderr"; exit (1); } }' < p && awk '{ deltap = ($11 - $5) - 1. if (deltap < 0.) deltap = - deltap; if (deltap > 0.) { print "deltaey:", deltap > "/dev/stderr"; exit (1); } }' < ey && awk '{ if ($9 > 3.) { print "vmax:", $9 > "/dev/stderr"; exit (1); } }' < v; then exit 0; else exit $GFS_STOP; fi } } { # Electric parameters perm = 1./(T/3.+(1-T)) ElectricProjectionParams { tolerance = 1e-7 } } GfsBox { top = Boundary { BcDirichlet Phi 1 BcDirichlet P 0 } bottom = Boundary { BcDirichlet Phi 0. } } gerris-snapshot-131206/test/poiseuille.sh0000755000175100017510000000003512250371662015355 00000000000000python -u test.py poiseuille gerris-snapshot-131206/test/annulus.sh0000755000175100017510000000003212250371662014665 00000000000000python -u test.py annulus gerris-snapshot-131206/test/waves.sh0000755000175100017510000000003012250371662014323 00000000000000python -u test.py waves gerris-snapshot-131206/test/gfs2tex0000644000175100017510000000101112250371171014137 00000000000000#!/usr/bin/python import sys import os import os.path import glob sys.path.append("../doc/examples") import gfs2tex if not os.access("tests",os.F_OK): os.mkdir("tests") for start in sys.argv[1:]: for root, dirs, files in os.walk(start,topdown=True): if not ".xvpics" in root: example = gfs2tex.Example(root) if not os.access("tests/" + example.path,os.F_OK): os.symlink("../" + example.path, "tests/" + example.path) example.write(style="tests.css") gerris-snapshot-131206/test/annulus/0000755000175100017510000000000012250371674014416 500000000000000gerris-snapshot-131206/test/annulus/annulus.gfs0000644000175100017510000000457312250371171016525 00000000000000# Title: Creeping Couette flow between cylinders # # Description: # # A polar coordinate system is used to solve the flow between two # concentric cylinders. The inner cylinder is rotating and the outer # cylinder is fixed. The tangential velocity profile is illustrated in # Figure \ref{prof}, together with the profile of a diffusive tracer # with matching boundary conditions. The tracer profile involves a # $\log r$ dependency whereas the velocity profile is polynomial in # $r$. The difference is due to the metric terms appearing when # diffusing vector quantities. # # Figure \ref{convergence} illustrates the convergence toward the # analytical solution with spatial resolution. # # \begin{figure}[htbp] # \caption{\label{prof}Tangential velocity and tracer concentration as # functions of radial position} # \begin{center} # \includegraphics[width=\hsize]{profile.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{convergence}Convergence of the error norms with # spatial resolution.} # \begin{center} # \includegraphics[width=\hsize]{convergence.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh annulus.sh annulus.gfs # Version: 111107 # Required files: annulus.sh error.ref # Running time: 30 seconds # Generated files: convergence.eps profile.eps # 1 1 GfsSimulation GfsBox GfsGEdge {} { # the polar coordinates. rx and ry vary between [-0.5:0.5] # the radius varies between [0.25:0.5] Metric M { x = (rx/4. + 0.375)*cos(ry) y = (rx/4. + 0.375)*sin(ry) } VariableTracer T { scheme = none } SourceDiffusion T 1 Time { dtmax = 1e-2 } Refine LEVEL ApproxProjectionParams { tolerance = 1e-6 } AdvectionParams { scheme = none } SourceViscosity 1 EventStop { step = 1e-2 } V 1e-5 DV OutputScalarNorm { istep = 1 } dv { v = DV } OutputErrorNorm { start = end } { awk '{print LEVEL,$5,$7,$9}' } { v = V } { s = { double r = rx/4. + 0.375; // the analytical solution for the tangential velocity return r*((0.5/r)*(0.5/r) - 1.)/((0.5/0.25)*(0.5/0.25) - 1.); } v = E } OutputSimulation { start = end } end-LEVEL.gfs Init { start = end } { Rx = rx } OutputSimulation { start = end } end-LEVEL.txt { format = text } } GfsBox { left = Boundary { BcDirichlet V 0.25 BcDirichlet T 0.25 } right = Boundary { BcDirichlet V 0. BcDirichlet T 0 } } 1 1 top gerris-snapshot-131206/test/annulus/error.ref0000644000175100017510000000020012250371171016145 000000000000003 5.036e-04 5.780e-04 1.125e-03 4 1.279e-04 1.469e-04 3.033e-04 5 3.321e-05 3.785e-05 7.869e-05 6 9.482e-06 1.055e-05 2.006e-05 gerris-snapshot-131206/test/annulus/annulus.sh0000644000175100017510000000255212250371171016353 00000000000000levels="3 4 5 6" if test x$donotrun != xtrue; then rm -f error for level in $levels; do if gerris2D -DLEVEL=$level $1 >> error; then : else exit 1 fi done fi if gnuplot < 1e-6: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/strouhal/0000755000175100017510000000000012250371673014571 500000000000000gerris-snapshot-131206/test/strouhal/moving.ref0000644000175100017510000000030112250371172016472 00000000000000#Re St(high resolution) St(low resolution) 200 0.207 0.197 250 0.214 0.207 300 0.219 0.214 350 0.224 0.221 400 0.226 x 450 0.229 0.230 500 0.232 0.234gerris-snapshot-131206/test/strouhal/strouhal.sh0000644000175100017510000000257012250371172016704 00000000000000if test x$donotrun != xtrue; then shapes ellipse > cylinder.gts if gerris2D strouhal.gfs > strouhal.res; then : else exit 1 fi fi if echo "Save stdout { width = 800 height = 200 }" | \ gfsview-batch2D end.gfs strouhal.gfv | \ convert -colors 256 ppm:- vort.eps; then : else exit 1 fi if cat < 0.01 : exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/strouhal/strouhal.gfs0000644000175100017510000000444012250371172017047 00000000000000# Title: B\'enard--von K\'arm\'an vortex street behind a cylinder translating in a fluid at rest # # Description: # # An example of 2D viscous flow around a simple solid boundary. A solid # cylinder is impulsively started at the right of a channel bounded by # solid walls with a slip boundary condition. # # Adaptive refinement is used based on the vorticity. # # After an initial growth phase, a classical B\'enard--von K\'arman # vortex street is formed. # # \begin{figure}[htbp] # \caption{\label{vorticity} Vorticity field.} # \begin{center} # \includegraphics[width=\hsize]{vort.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{Forces} Evolution of the drag and lift coefficients # for a Reynolds number of 400.} # \begin{center} # \includegraphics[width=0.8\hsize]{forces.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{Strouhal} Strouhal number versus Reynolds # number. Comparison between static (reference) and moving problem.} # \begin{center} # \includegraphics[width=0.8\hsize]{strouhal.eps} # \end{center} # \end{figure} # # Author: S\'ebastien Delaux # Command: sh strouhal.sh # Version: 090512 # Required files: strouhal.sh strouhal.gfv strouhal.ref moving.ref static.ref # Generated files: strouhal.eps vort.eps forces.eps # 1 0 GfsSimulationMoving GfsBox GfsGEdge {} { Time { end = 0.8 } Refine { if (fabs(y) < 0.02 && x > 0.38 && x < 0.42) return 11; if (fabs(y) < 0.35 && x > 0.3 && x < 0.5) return 8; return 5; } SolidMoving { istep = 1 } cylinder.gts { tx = 0.4 scale = 0.025 } { level = 11 } # Set the boundary condition on the solid object. # The velocity is imposed SurfaceBc U Dirichlet -1. # Adapt the mesh using the vorticity criterion at every timestep AdaptVorticity { istep = 1 } { maxlevel = (x > 0.5 - t ? 9 : 10) cmax = 1e-2 } SourceViscosity 3.125e-5 OutputSimulation { start = end } end.gfs OutputSolidForce { istep = 1 } forces.dat EventScript { start = end } { cat <&1 | awk '{if ($1 == "400") print $0;}' f(x)= a*cos(b*(x+c)) a = 0.00525 b = 110.49 c = 0.611 fit [0.5:] f(x) 'forces.dat' u 1:6 via a,b,c print "400 ", b/(2*pi)*0.0125 EOF } } GfsBox { right = BoundaryOutflow } gerris-snapshot-131206/test/strouhal/strouhal.ref0000644000175100017510000000001312250371172017034 00000000000000400 0.228 gerris-snapshot-131206/test/strouhal/strouhal.gfv0000644000175100017510000000062712250371172017055 00000000000000# GfsView 2D View { tx = 0.297313 ty = 0.00131029 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 1.73964 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Linear { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Vorticity { amin = 0 min = -300 amax = 0 max = 300 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } gerris-snapshot-131206/test/strouhal/static.ref0000644000175100017510000000027512250371172016474 00000000000000#Re St(high resolution) St(low resolution) 200 0.209 0.195 250 0.216 0.205 300 0.221 0.212 350 0.224 0.218 400 0.228 0.223 450 0.231 0.227 500 0.233 0.231gerris-snapshot-131206/test/electro.sh0000755000175100017510000000003212250371662014635 00000000000000python -u test.py electro gerris-snapshot-131206/test/oscillation/0000755000175100017510000000000012250371673015250 500000000000000gerris-snapshot-131206/test/oscillation/fit.ref0000644000175100017510000000036612250371171016446 000000000000005 0.000276595182282654 1.11960906407876 152.8007090142 0.2 6 0.000280266038036201 0.859136331029788 153.984082564985 0.2 7 0.000291289116579224 0.188677707390986 154.591134336735 0.2 8 0.000291718821611221 0.0590312376540213 154.785123946933 0.2 gerris-snapshot-131206/test/oscillation/oscillation.gfs0000644000175100017510000000747012250371171020212 00000000000000# Title: Shape oscillation of an inviscid droplet # # Description: # # A two-dimensional elliptical droplet (density ratio 1/1000) is # released in a large domain. Under the effect of surface-tension the # shape of the droplet oscillates around its (circular) equilibrium # shape. The fluids inside and outside the droplet are inviscid so # ideally no damping of the oscillations should occur. As illustrated # on Figure \ref{kinetic} some damping occurs in the simulation due to # numerical dissipation. # # This simulation is also a stringent test case of the accuracy of the # surface tension representation as no explicit viscosity can damp # eventual parasitic currents. # # \begin{figure}[htbp] # \caption{\label{kinetic}Evolution of the kinetic energy as a function # of time for the spatial resolutions indicated in the legend. The # black lines are fitted decreasing exponential functions.} # \begin{center} # \includegraphics[width=0.9\hsize]{k.eps} # \end{center} # \end{figure} # # The initial shape of the droplet is given by: # $$r(\theta) = r_0 + \alpha\cos(n\theta)$$ # The oscillation frequency is then \cite{torres00}: # $$\omega_n^2={(n^3-n)\sigma\over (\rho_d+\rho_e)r_0^3}$$ # # A comparison between the theoretical and numerical values of the # frequency is given in Figure \ref{frequency}. # # \begin{figure}[htbp] # \caption{\label{frequency}Relative error in the oscillation # frequency as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{frequency.eps} # \end{center} # \end{figure} # # The amount of numerical damping can be estimated by computing an # equivalent viscosity. With viscosity, kinetic energy is expected to # decrease as: # $$\exp(-C\nu/D^2t)$$ # where $C$ is a constant, $\nu$ the viscosity and $D$ the droplet # diameter. Using curve fitting the damping coefficient $b=C\nu/D^2$ # can be estimated (black curves on Figure \ref{kinetic}). An # equivalent Laplace number can then be computed as: # $$La={\sigma D\over \rho\nu^2}={\sigma C^2 \over \rho b^2 D^3}$$ # The equivalent Laplace number depends on spatial resolution as # illustrated in Figure \ref{laplace}. # # \begin{figure}[htbp] # \caption{\label{laplace}Equivalent Laplace number estimated from the # numerical damping of kinetic energy.} # \begin{center} # \includegraphics[width=0.8\hsize]{laplace.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh oscillation.sh # Version: 1.2.0 # Required files: oscillation.sh fit.ref # Running time: 3 minutes # Generated files: frequency.eps k.eps laplace.eps # Define EPSILON 0.05 Define VAR(T,min,max) (min + CLAMP(T,0,1)*(max - min)) Define RHO(T) VAR(T, 1., 1e-3) Define RADIUS(x,y) (DIAMETER/2.*(1. + EPSILON*cos (2.*atan2 (y, x)))) 1 0 GfsSimulation GfsBox GfsGEdge {} { Time { end = 1 } Refine LEVEL VariableTracerVOFHeight T VariableFiltered T1 T 1 InitFraction T ({ x += 0.5; y += 0.5; return x*x + y*y - RADIUS(x,y)*RADIUS(x,y); }) PhysicalParams { alpha = 1./RHO(T1) } VariableCurvature K T SourceTension T 1. K AdaptFunction { istep = 1 } { cmax = 0.01 maxlevel = LEVEL } (T > 0 && T < 1 ? 1. : fabs (Vorticity)*dL) OutputScalarSum { istep = 1 } k-LEVEL { v = RHO(T1)*Velocity2 } EventScript { start = end } { cat <&1 | awk '{if ($1 == "result:") print LEVEL,$2,$3,$4,$5;}' k(t)=a*exp(-b*t)*(1.-cos(c*t)) a = 3e-4 b = 1.5 D = DIAMETER n = 2. sigma = 1. rhol = 1. rhog = 1./1000. r0 = D/2. omega0 = sqrt((n**3-n)*sigma/((rhol+rhog)*r0**3)) c = 2.*omega0 fit k(x) 'k-LEVEL' u 3:5 via a,b,c print "result: ", a, b, c, D EOF rm -f fit.log } } GfsBox { left = Boundary bottom = Boundary } gerris-snapshot-131206/test/oscillation/oscillation.sh0000644000175100017510000000455212250371171020043 00000000000000levels="5 6 7 8" rm -f error laplace # try several small perturbations of the interface position # the results are quite sensitive to interface configurations # for i in 4 3 2 1 0; do for i in 0; do diameter=`awk -v i=$i 'BEGIN { print 0.2 - i/512.}'` rm -f fit if test x$donotrun != xtrue; then for level in $levels; do if gerris2D -D LEVEL=$level -D DIAMETER=$diameter oscillation.gfs >> fit; then : else exit 1 fi done fi if awk -v D=$diameter 'BEGIN { n = 2. sigma = 1. rhol = 1. rhog = 1./1000. r0 = D/2. omega0 = sqrt((n**3-n)*sigma/((rhol+rhog)*r0**3)) empirical_constant = 30. }{ print D*2.**$1, $4/2./omega0-1., D >> "error" print D*2.**$1, (1./($3**2.*D**3.))*empirical_constant**2, D >> "laplace" }' < fit; then : else exit 1 fi done rm -f fit-* if awk '{ level = $1; a = $2; b = $3; c = $4; for (t = 0; t <= 1.; t += 0.005) print t, 2.*a*exp(-b*t) >> "fit-" level; }' < fit ; then : else exit 1 fi if cat < 1e-2 or\ (Curve('fit',1,4) - Curve('fit.ref',1,4)).max() > 1e-2: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/nonlinear/0000755000175100017510000000000012250371673014715 500000000000000gerris-snapshot-131206/test/nonlinear/error-river-1.ref0000644000175100017510000017266612250371171017762 00000000000000P time: 0 first: 6.193e-16 second: 1.229e-15 infty: 2.299e-15 bias: -2.580e-17 P time: 0.00701262 first: 6.079e-05 second: 1.058e-04 infty: 5.352e-04 bias: 2.773e-15 P time: 0.0140252 first: 1.179e-04 second: 1.931e-04 infty: 8.818e-04 bias: -1.780e-15 P time: 0.0210379 first: 1.700e-04 second: 2.670e-04 infty: 1.081e-03 bias: -2.004e-15 P time: 0.0280505 first: 2.176e-04 second: 3.278e-04 infty: 1.184e-03 bias: 3.768e-15 P time: 0.0350631 first: 2.602e-04 second: 3.764e-04 infty: 1.234e-03 bias: 2.549e-15 P time: 0.0420757 first: 2.971e-04 second: 4.149e-04 infty: 1.260e-03 bias: 2.772e-15 P time: 0.0490884 first: 3.282e-04 second: 4.461e-04 infty: 1.278e-03 bias: -5.800e-18 P time: 0.056101 first: 3.543e-04 second: 4.726e-04 infty: 1.294e-03 bias: -1.338e-15 P time: 0.0631136 first: 3.771e-04 second: 4.968e-04 infty: 1.433e-03 bias: 2.215e-15 P time: 0.0701262 first: 3.977e-04 second: 5.206e-04 infty: 1.580e-03 bias: -2.449e-15 P time: 0.0771388 first: 4.175e-04 second: 5.458e-04 infty: 1.718e-03 bias: 3.991e-15 P time: 0.0841515 first: 4.385e-04 second: 5.737e-04 infty: 1.785e-03 bias: -2.265e-16 P time: 0.0911641 first: 4.617e-04 second: 6.052e-04 infty: 1.945e-03 bias: 1.992e-15 P time: 0.0981767 first: 4.914e-04 second: 6.405e-04 infty: 2.038e-03 bias: -4.003e-15 P time: 0.105189 first: 5.270e-04 second: 6.794e-04 infty: 2.091e-03 bias: 1.327e-15 P time: 0.112202 first: 5.669e-04 second: 7.208e-04 infty: 2.157e-03 bias: -2.226e-15 P time: 0.119215 first: 6.084e-04 second: 7.635e-04 infty: 2.194e-03 bias: -8.939e-16 P time: 0.126227 first: 6.488e-04 second: 8.058e-04 infty: 2.219e-03 bias: -1.783e-15 P time: 0.13324 first: 6.855e-04 second: 8.463e-04 infty: 2.241e-03 bias: -2.226e-15 P time: 0.140252 first: 7.173e-04 second: 8.832e-04 infty: 2.209e-03 bias: -2.226e-15 P time: 0.147265 first: 7.441e-04 second: 9.151e-04 infty: 2.175e-03 bias: -1.560e-15 P time: 0.154278 first: 7.656e-04 second: 9.403e-04 infty: 2.287e-03 bias: -3.114e-15 P time: 0.16129 first: 7.811e-04 second: 9.574e-04 infty: 2.331e-03 bias: 8.825e-16 P time: 0.168303 first: 7.897e-04 second: 9.651e-04 infty: 2.321e-03 bias: 9.945e-16 P time: 0.175316 first: 7.915e-04 second: 9.633e-04 infty: 2.273e-03 bias: -2.278e-16 P time: 0.182328 first: 7.865e-04 second: 9.524e-04 infty: 2.142e-03 bias: -4.514e-16 P time: 0.189341 first: 7.758e-04 second: 9.338e-04 infty: 2.121e-03 bias: -1.561e-15 P time: 0.196353 first: 7.597e-04 second: 9.097e-04 infty: 2.183e-03 bias: -2.448e-15 P time: 0.203366 first: 7.386e-04 second: 8.823e-04 infty: 2.238e-03 bias: 1.103e-15 P time: 0.210379 first: 7.140e-04 second: 8.535e-04 infty: 2.288e-03 bias: 3.546e-15 P time: 0.217391 first: 6.870e-04 second: 8.248e-04 infty: 2.330e-03 bias: -1.338e-15 P time: 0.224404 first: 6.596e-04 second: 7.972e-04 infty: 2.366e-03 bias: 8.808e-16 P time: 0.231417 first: 6.353e-04 second: 7.715e-04 infty: 2.396e-03 bias: 7.718e-16 P time: 0.238429 first: 6.173e-04 second: 7.485e-04 infty: 2.420e-03 bias: -2.269e-16 P time: 0.245442 first: 6.032e-04 second: 7.290e-04 infty: 2.438e-03 bias: -4.489e-16 P time: 0.252454 first: 5.906e-04 second: 7.137e-04 infty: 2.447e-03 bias: -6.705e-16 P time: 0.259467 first: 5.786e-04 second: 7.030e-04 infty: 2.445e-03 bias: 2.105e-15 P time: 0.26648 first: 5.707e-04 second: 6.967e-04 infty: 2.429e-03 bias: 1.106e-15 P time: 0.273492 first: 5.661e-04 second: 6.944e-04 infty: 2.397e-03 bias: -2.003e-15 P time: 0.280505 first: 5.628e-04 second: 6.951e-04 infty: 2.347e-03 bias: -6.711e-16 P time: 0.287518 first: 5.605e-04 second: 6.978e-04 infty: 2.279e-03 bias: -1.783e-15 P time: 0.29453 first: 5.584e-04 second: 7.016e-04 infty: 2.196e-03 bias: 1.050e-16 P time: 0.301543 first: 5.581e-04 second: 7.060e-04 infty: 2.105e-03 bias: 2.163e-16 P time: 0.308555 first: 5.604e-04 second: 7.108e-04 infty: 2.038e-03 bias: 5.101e-15 P time: 0.315568 first: 5.654e-04 second: 7.162e-04 infty: 2.019e-03 bias: -6.719e-16 P time: 0.322581 first: 5.741e-04 second: 7.228e-04 infty: 1.999e-03 bias: 8.833e-16 P time: 0.329593 first: 5.849e-04 second: 7.316e-04 infty: 1.969e-03 bias: 2.104e-15 P time: 0.336606 first: 5.986e-04 second: 7.432e-04 infty: 1.974e-03 bias: -2.254e-16 P time: 0.343619 first: 6.141e-04 second: 7.586e-04 infty: 2.011e-03 bias: -8.934e-16 P time: 0.350631 first: 6.309e-04 second: 7.780e-04 infty: 2.078e-03 bias: -1.337e-15 P time: 0.357644 first: 6.490e-04 second: 8.013e-04 infty: 2.197e-03 bias: 1.105e-15 P time: 0.364656 first: 6.694e-04 second: 8.279e-04 infty: 2.319e-03 bias: 3.326e-15 P time: 0.371669 first: 6.936e-04 second: 8.565e-04 infty: 2.445e-03 bias: -4.255e-18 P time: 0.378682 first: 7.199e-04 second: 8.856e-04 infty: 2.545e-03 bias: -1.338e-15 P time: 0.385694 first: 7.451e-04 second: 9.134e-04 infty: 2.615e-03 bias: 3.297e-16 P time: 0.392707 first: 7.690e-04 second: 9.386e-04 infty: 2.652e-03 bias: 9.967e-16 P time: 0.399719 first: 7.891e-04 second: 9.598e-04 infty: 2.656e-03 bias: 1.330e-15 P time: 0.406732 first: 8.053e-04 second: 9.763e-04 infty: 2.658e-03 bias: -2.444e-15 P time: 0.413745 first: 8.167e-04 second: 9.876e-04 infty: 2.648e-03 bias: 3.329e-15 P time: 0.420757 first: 8.227e-04 second: 9.935e-04 infty: 2.620e-03 bias: -1.777e-15 P time: 0.42777 first: 8.231e-04 second: 9.941e-04 infty: 2.603e-03 bias: 1.126e-16 P time: 0.434783 first: 8.177e-04 second: 9.894e-04 infty: 2.562e-03 bias: 2.555e-15 P time: 0.441795 first: 8.078e-04 second: 9.799e-04 infty: 2.496e-03 bias: -3.108e-15 P time: 0.448808 first: 7.938e-04 second: 9.659e-04 infty: 2.431e-03 bias: 4.107e-15 P time: 0.45582 first: 7.766e-04 second: 9.481e-04 infty: 2.352e-03 bias: -2.445e-15 P time: 0.462833 first: 7.580e-04 second: 9.275e-04 infty: 2.264e-03 bias: -3.778e-15 P time: 0.469846 first: 7.390e-04 second: 9.051e-04 infty: 2.202e-03 bias: 4.426e-16 P time: 0.476858 first: 7.209e-04 second: 8.822e-04 infty: 2.190e-03 bias: 1.884e-15 P time: 0.483871 first: 7.032e-04 second: 8.600e-04 infty: 2.214e-03 bias: 1.441e-15 P time: 0.490884 first: 6.853e-04 second: 8.397e-04 infty: 2.248e-03 bias: 5.880e-15 P time: 0.497896 first: 6.714e-04 second: 8.224e-04 infty: 2.284e-03 bias: 1.076e-16 P time: 0.504909 first: 6.604e-04 second: 8.087e-04 infty: 2.320e-03 bias: 4.397e-16 P time: 0.511921 first: 6.522e-04 second: 7.990e-04 infty: 2.355e-03 bias: -3.559e-15 P time: 0.518934 first: 6.470e-04 second: 7.931e-04 infty: 2.388e-03 bias: 2.152e-16 P time: 0.525947 first: 6.448e-04 second: 7.910e-04 infty: 2.430e-03 bias: -4.517e-16 P time: 0.532959 first: 6.441e-04 second: 7.922e-04 infty: 2.470e-03 bias: 2.102e-15 P time: 0.539972 first: 6.453e-04 second: 7.962e-04 infty: 2.501e-03 bias: -1.118e-15 P time: 0.546985 first: 6.497e-04 second: 8.026e-04 infty: 2.523e-03 bias: -3.780e-15 P time: 0.553997 first: 6.561e-04 second: 8.109e-04 infty: 2.542e-03 bias: -1.338e-15 P time: 0.56101 first: 6.648e-04 second: 8.209e-04 infty: 2.567e-03 bias: 1.327e-15 P time: 0.568022 first: 6.740e-04 second: 8.324e-04 infty: 2.593e-03 bias: 3.283e-16 P time: 0.575035 first: 6.828e-04 second: 8.451e-04 infty: 2.621e-03 bias: -2.890e-15 P time: 0.582048 first: 6.904e-04 second: 8.591e-04 infty: 2.651e-03 bias: 2.995e-15 P time: 0.58906 first: 6.966e-04 second: 8.743e-04 infty: 2.684e-03 bias: 9.994e-16 P time: 0.596073 first: 7.026e-04 second: 8.907e-04 infty: 2.718e-03 bias: 1.554e-15 P time: 0.603086 first: 7.129e-04 second: 9.082e-04 infty: 2.753e-03 bias: 2.773e-15 P time: 0.610098 first: 7.270e-04 second: 9.267e-04 infty: 2.788e-03 bias: -2.890e-15 P time: 0.617111 first: 7.440e-04 second: 9.462e-04 infty: 2.823e-03 bias: 1.217e-15 P time: 0.624123 first: 7.633e-04 second: 9.662e-04 infty: 2.871e-03 bias: 2.660e-15 P time: 0.631136 first: 7.837e-04 second: 9.865e-04 infty: 2.916e-03 bias: -8.932e-16 P time: 0.638149 first: 8.036e-04 second: 1.006e-03 infty: 2.956e-03 bias: -2.249e-16 P time: 0.645161 first: 8.223e-04 second: 1.026e-03 infty: 2.990e-03 bias: -1.382e-18 P time: 0.652174 first: 8.400e-04 second: 1.043e-03 infty: 3.017e-03 bias: 3.553e-15 P time: 0.659187 first: 8.551e-04 second: 1.059e-03 infty: 3.036e-03 bias: 8.889e-16 P time: 0.666199 first: 8.690e-04 second: 1.072e-03 infty: 3.048e-03 bias: -2.216e-16 P time: 0.673212 first: 8.824e-04 second: 1.081e-03 infty: 3.053e-03 bias: -1.555e-15 P time: 0.680224 first: 8.940e-04 second: 1.087e-03 infty: 3.052e-03 bias: -4.466e-16 P time: 0.687237 first: 9.029e-04 second: 1.089e-03 infty: 3.046e-03 bias: 1.440e-15 P time: 0.69425 first: 9.082e-04 second: 1.087e-03 infty: 3.036e-03 bias: -8.905e-16 P time: 0.701262 first: 9.105e-04 second: 1.081e-03 infty: 3.023e-03 bias: 2.440e-15 P time: 0.708275 first: 9.109e-04 second: 1.072e-03 infty: 3.008e-03 bias: -1.780e-15 P time: 0.715288 first: 9.082e-04 second: 1.061e-03 infty: 2.990e-03 bias: 4.413e-16 P time: 0.7223 first: 9.016e-04 second: 1.048e-03 infty: 2.972e-03 bias: 2.107e-15 P time: 0.729313 first: 8.909e-04 second: 1.033e-03 infty: 2.952e-03 bias: -1.113e-15 P time: 0.736325 first: 8.766e-04 second: 1.017e-03 infty: 2.932e-03 bias: 2.442e-15 P time: 0.743338 first: 8.594e-04 second: 1.000e-03 infty: 2.911e-03 bias: 1.554e-15 P time: 0.750351 first: 8.396e-04 second: 9.841e-04 infty: 2.890e-03 bias: 6.666e-16 P time: 0.757363 first: 8.176e-04 second: 9.680e-04 infty: 2.869e-03 bias: 4.108e-15 P time: 0.764376 first: 7.964e-04 second: 9.523e-04 infty: 2.848e-03 bias: -1.333e-15 P time: 0.771388 first: 7.755e-04 second: 9.372e-04 infty: 2.955e-03 bias: -2.886e-15 P time: 0.778401 first: 7.563e-04 second: 9.227e-04 infty: 3.059e-03 bias: -6.642e-16 P time: 0.785414 first: 7.416e-04 second: 9.089e-04 infty: 3.160e-03 bias: 2.112e-15 P time: 0.792426 first: 7.295e-04 second: 8.959e-04 infty: 3.256e-03 bias: 5.773e-18 P time: 0.799439 first: 7.201e-04 second: 8.838e-04 infty: 3.347e-03 bias: -2.169e-16 P time: 0.806452 first: 7.125e-04 second: 8.727e-04 infty: 3.431e-03 bias: 1.891e-15 P time: 0.813464 first: 7.046e-04 second: 8.627e-04 infty: 3.509e-03 bias: 4.635e-18 P time: 0.820477 first: 6.959e-04 second: 8.542e-04 infty: 3.579e-03 bias: -1.992e-15 P time: 0.827489 first: 6.874e-04 second: 8.476e-04 infty: 3.641e-03 bias: 1.339e-15 P time: 0.834502 first: 6.793e-04 second: 8.432e-04 infty: 3.694e-03 bias: 2.226e-15 P time: 0.841515 first: 6.714e-04 second: 8.415e-04 infty: 3.737e-03 bias: -2.173e-16 P time: 0.848527 first: 6.646e-04 second: 8.430e-04 infty: 3.771e-03 bias: -2.216e-15 P time: 0.85554 first: 6.627e-04 second: 8.482e-04 infty: 3.795e-03 bias: -1.328e-15 P time: 0.862553 first: 6.674e-04 second: 8.574e-04 infty: 3.808e-03 bias: -8.869e-16 P time: 0.869565 first: 6.789e-04 second: 8.708e-04 infty: 3.810e-03 bias: -1.774e-15 P time: 0.876578 first: 6.950e-04 second: 8.881e-04 infty: 3.802e-03 bias: 6.690e-16 P time: 0.88359 first: 7.137e-04 second: 9.092e-04 infty: 3.784e-03 bias: -3.106e-15 P time: 0.890603 first: 7.341e-04 second: 9.333e-04 infty: 3.756e-03 bias: -2.663e-15 P time: 0.897616 first: 7.567e-04 second: 9.597e-04 infty: 3.718e-03 bias: -8.877e-16 P time: 0.904628 first: 7.810e-04 second: 9.874e-04 infty: 3.672e-03 bias: 5.550e-16 P time: 0.911641 first: 8.056e-04 second: 1.015e-03 infty: 3.620e-03 bias: 3.331e-16 P time: 0.918654 first: 8.285e-04 second: 1.043e-03 infty: 3.562e-03 bias: -8.902e-16 P time: 0.925666 first: 8.497e-04 second: 1.069e-03 infty: 3.500e-03 bias: -8.911e-16 P time: 0.932679 first: 8.680e-04 second: 1.093e-03 infty: 3.437e-03 bias: 2.662e-15 P time: 0.939691 first: 8.842e-04 second: 1.116e-03 infty: 3.373e-03 bias: 2.176e-16 P time: 0.946704 first: 8.973e-04 second: 1.135e-03 infty: 3.440e-03 bias: 1.106e-15 P time: 0.953717 first: 9.080e-04 second: 1.153e-03 infty: 3.514e-03 bias: 2.772e-15 P time: 0.960729 first: 9.165e-04 second: 1.168e-03 infty: 3.578e-03 bias: 1.218e-15 P time: 0.967742 first: 9.243e-04 second: 1.181e-03 infty: 3.630e-03 bias: 1.328e-15 P time: 0.974755 first: 9.334e-04 second: 1.192e-03 infty: 3.676e-03 bias: -1.561e-15 P time: 0.981767 first: 9.465e-04 second: 1.202e-03 infty: 3.714e-03 bias: -4.495e-16 P time: 0.98878 first: 9.609e-04 second: 1.211e-03 infty: 3.741e-03 bias: 7.713e-16 P time: 0.995792 first: 9.744e-04 second: 1.220e-03 infty: 3.759e-03 bias: 2.158e-16 P time: 1.00281 first: 9.873e-04 second: 1.228e-03 infty: 3.768e-03 bias: -2.272e-16 P time: 1.00982 first: 9.988e-04 second: 1.237e-03 infty: 3.770e-03 bias: -2.668e-15 P time: 1.01683 first: 1.009e-03 second: 1.246e-03 infty: 3.766e-03 bias: 2.993e-15 P time: 1.02384 first: 1.020e-03 second: 1.255e-03 infty: 3.760e-03 bias: -8.933e-16 P time: 1.03086 first: 1.030e-03 second: 1.265e-03 infty: 3.752e-03 bias: -5.367e-18 P time: 1.03787 first: 1.040e-03 second: 1.275e-03 infty: 3.746e-03 bias: -1.338e-15 P time: 1.04488 first: 1.049e-03 second: 1.285e-03 infty: 3.742e-03 bias: -2.005e-15 P time: 1.05189 first: 1.057e-03 second: 1.295e-03 infty: 3.742e-03 bias: 4.369e-16 P time: 1.05891 first: 1.062e-03 second: 1.304e-03 infty: 3.748e-03 bias: 2.659e-15 P time: 1.06592 first: 1.066e-03 second: 1.312e-03 infty: 3.760e-03 bias: 7.723e-16 P time: 1.07293 first: 1.069e-03 second: 1.319e-03 infty: 3.779e-03 bias: 1.103e-15 P time: 1.07994 first: 1.071e-03 second: 1.325e-03 infty: 3.805e-03 bias: 8.816e-16 P time: 1.08696 first: 1.072e-03 second: 1.331e-03 infty: 3.836e-03 bias: -1.560e-15 P time: 1.09397 first: 1.072e-03 second: 1.335e-03 infty: 3.874e-03 bias: 7.733e-16 P time: 1.10098 first: 1.073e-03 second: 1.340e-03 infty: 3.916e-03 bias: 1.330e-15 P time: 1.10799 first: 1.074e-03 second: 1.344e-03 infty: 3.961e-03 bias: 1.083e-16 P time: 1.11501 first: 1.075e-03 second: 1.348e-03 infty: 4.007e-03 bias: -8.916e-16 P time: 1.12202 first: 1.078e-03 second: 1.353e-03 infty: 4.054e-03 bias: -6.714e-16 P time: 1.12903 first: 1.080e-03 second: 1.359e-03 infty: 4.100e-03 bias: -2.447e-15 P time: 1.13604 first: 1.081e-03 second: 1.365e-03 infty: 4.144e-03 bias: -2.225e-15 P time: 1.14306 first: 1.083e-03 second: 1.370e-03 infty: 4.184e-03 bias: 6.598e-16 P time: 1.15007 first: 1.087e-03 second: 1.376e-03 infty: 4.220e-03 bias: -7.020e-18 P time: 1.15708 first: 1.092e-03 second: 1.381e-03 infty: 4.251e-03 bias: 1.105e-15 P time: 1.1641 first: 1.095e-03 second: 1.385e-03 infty: 4.276e-03 bias: -2.226e-15 P time: 1.17111 first: 1.098e-03 second: 1.388e-03 infty: 4.296e-03 bias: -4.502e-16 P time: 1.17812 first: 1.097e-03 second: 1.388e-03 infty: 4.310e-03 bias: -1.560e-15 P time: 1.18513 first: 1.094e-03 second: 1.386e-03 infty: 4.319e-03 bias: 3.437e-15 P time: 1.19215 first: 1.087e-03 second: 1.382e-03 infty: 4.321e-03 bias: -2.448e-15 P time: 1.19916 first: 1.077e-03 second: 1.375e-03 infty: 4.318e-03 bias: -2.672e-15 P time: 1.20617 first: 1.064e-03 second: 1.365e-03 infty: 4.309e-03 bias: 1.769e-15 P time: 1.21318 first: 1.048e-03 second: 1.352e-03 infty: 4.294e-03 bias: -2.672e-15 P time: 1.2202 first: 1.030e-03 second: 1.337e-03 infty: 4.273e-03 bias: -2.007e-15 P time: 1.22721 first: 1.011e-03 second: 1.319e-03 infty: 4.245e-03 bias: 2.878e-15 P time: 1.23422 first: 9.923e-04 second: 1.299e-03 infty: 4.211e-03 bias: 5.457e-16 P time: 1.24123 first: 9.750e-04 second: 1.278e-03 infty: 4.169e-03 bias: -2.008e-15 P time: 1.24825 first: 9.573e-04 second: 1.256e-03 infty: 4.119e-03 bias: 1.098e-15 P time: 1.25526 first: 9.392e-04 second: 1.234e-03 infty: 4.063e-03 bias: 1.542e-15 P time: 1.26227 first: 9.239e-04 second: 1.212e-03 infty: 4.000e-03 bias: -4.571e-16 P time: 1.26928 first: 9.141e-04 second: 1.191e-03 infty: 3.976e-03 bias: -2.234e-15 P time: 1.2763 first: 9.061e-04 second: 1.172e-03 infty: 4.064e-03 bias: -1.320e-17 P time: 1.28331 first: 8.981e-04 second: 1.154e-03 infty: 4.162e-03 bias: 3.189e-16 P time: 1.29032 first: 8.899e-04 second: 1.140e-03 infty: 4.269e-03 bias: -2.013e-15 P time: 1.29734 first: 8.826e-04 second: 1.128e-03 infty: 4.385e-03 bias: 8.742e-16 P time: 1.30435 first: 8.766e-04 second: 1.119e-03 infty: 4.511e-03 bias: 1.096e-15 P time: 1.31136 first: 8.707e-04 second: 1.114e-03 infty: 4.644e-03 bias: -2.901e-15 P time: 1.31837 first: 8.659e-04 second: 1.112e-03 infty: 4.782e-03 bias: 1.318e-15 P time: 1.32539 first: 8.629e-04 second: 1.114e-03 infty: 4.925e-03 bias: -2.377e-16 P time: 1.3324 first: 8.617e-04 second: 1.119e-03 infty: 5.067e-03 bias: 9.841e-16 P time: 1.33941 first: 8.638e-04 second: 1.128e-03 infty: 5.208e-03 bias: 2.204e-15 P time: 1.34642 first: 8.703e-04 second: 1.140e-03 infty: 5.342e-03 bias: -2.013e-15 P time: 1.35344 first: 8.813e-04 second: 1.155e-03 infty: 5.466e-03 bias: -9.017e-16 P time: 1.36045 first: 8.974e-04 second: 1.173e-03 infty: 5.576e-03 bias: -4.555e-16 P time: 1.36746 first: 9.217e-04 second: 1.194e-03 infty: 5.670e-03 bias: -2.327e-16 P time: 1.37447 first: 9.503e-04 second: 1.216e-03 infty: 5.744e-03 bias: -3.342e-15 P time: 1.38149 first: 9.802e-04 second: 1.241e-03 infty: 5.795e-03 bias: 3.433e-15 P time: 1.3885 first: 1.010e-03 second: 1.266e-03 infty: 5.823e-03 bias: -2.005e-15 P time: 1.39551 first: 1.038e-03 second: 1.292e-03 infty: 5.827e-03 bias: -2.272e-16 P time: 1.40252 first: 1.064e-03 second: 1.318e-03 infty: 5.806e-03 bias: 8.829e-16 P time: 1.40954 first: 1.089e-03 second: 1.344e-03 infty: 5.763e-03 bias: 7.712e-16 P time: 1.41655 first: 1.111e-03 second: 1.369e-03 infty: 5.698e-03 bias: -1.336e-15 P time: 1.42356 first: 1.132e-03 second: 1.391e-03 infty: 5.615e-03 bias: 1.438e-15 P time: 1.43058 first: 1.150e-03 second: 1.412e-03 infty: 5.517e-03 bias: -3.361e-18 P time: 1.43759 first: 1.166e-03 second: 1.429e-03 infty: 5.407e-03 bias: 4.404e-16 P time: 1.4446 first: 1.178e-03 second: 1.444e-03 infty: 5.289e-03 bias: 2.659e-15 P time: 1.45161 first: 1.186e-03 second: 1.455e-03 infty: 5.167e-03 bias: 7.714e-16 P time: 1.45863 first: 1.190e-03 second: 1.462e-03 infty: 5.042e-03 bias: 2.213e-15 P time: 1.46564 first: 1.190e-03 second: 1.466e-03 infty: 4.920e-03 bias: 2.324e-15 P time: 1.47265 first: 1.185e-03 second: 1.466e-03 infty: 4.800e-03 bias: -1.115e-15 P time: 1.47966 first: 1.177e-03 second: 1.464e-03 infty: 4.687e-03 bias: -4.508e-16 P time: 1.48668 first: 1.164e-03 second: 1.458e-03 infty: 4.580e-03 bias: 3.878e-15 P time: 1.49369 first: 1.149e-03 second: 1.451e-03 infty: 4.480e-03 bias: -2.005e-15 P time: 1.5007 first: 1.136e-03 second: 1.442e-03 infty: 4.389e-03 bias: -2.448e-15 P time: 1.50771 first: 1.125e-03 second: 1.433e-03 infty: 4.327e-03 bias: 1.055e-16 P time: 1.51473 first: 1.115e-03 second: 1.424e-03 infty: 4.335e-03 bias: 1.992e-15 P time: 1.52174 first: 1.107e-03 second: 1.416e-03 infty: 4.344e-03 bias: -3.115e-15 P time: 1.52875 first: 1.103e-03 second: 1.410e-03 infty: 4.357e-03 bias: -1.115e-15 P time: 1.53576 first: 1.105e-03 second: 1.406e-03 infty: 4.371e-03 bias: 2.548e-15 P time: 1.54278 first: 1.109e-03 second: 1.405e-03 infty: 4.387e-03 bias: -1.338e-15 P time: 1.54979 first: 1.113e-03 second: 1.406e-03 infty: 4.405e-03 bias: 1.881e-15 P time: 1.5568 first: 1.119e-03 second: 1.411e-03 infty: 4.423e-03 bias: 1.550e-15 P time: 1.56381 first: 1.124e-03 second: 1.418e-03 infty: 4.440e-03 bias: -6.730e-16 P time: 1.57083 first: 1.129e-03 second: 1.427e-03 infty: 4.458e-03 bias: 8.816e-16 P time: 1.57784 first: 1.134e-03 second: 1.439e-03 infty: 4.475e-03 bias: 2.547e-15 P time: 1.58485 first: 1.139e-03 second: 1.452e-03 infty: 4.493e-03 bias: 2.324e-15 P time: 1.59187 first: 1.144e-03 second: 1.467e-03 infty: 4.510e-03 bias: 2.657e-15 P time: 1.59888 first: 1.150e-03 second: 1.484e-03 infty: 4.529e-03 bias: 1.437e-15 P time: 1.60589 first: 1.157e-03 second: 1.502e-03 infty: 4.550e-03 bias: -1.341e-15 P time: 1.6129 first: 1.166e-03 second: 1.522e-03 infty: 4.574e-03 bias: 2.115e-16 P time: 1.61992 first: 1.180e-03 second: 1.543e-03 infty: 4.624e-03 bias: 3.653e-15 P time: 1.62693 first: 1.198e-03 second: 1.566e-03 infty: 4.757e-03 bias: -3.341e-15 P time: 1.63394 first: 1.219e-03 second: 1.590e-03 infty: 4.895e-03 bias: -3.786e-15 P time: 1.64095 first: 1.241e-03 second: 1.615e-03 infty: 5.036e-03 bias: 2.431e-15 P time: 1.64797 first: 1.263e-03 second: 1.641e-03 infty: 5.176e-03 bias: -1.345e-15 P time: 1.65498 first: 1.285e-03 second: 1.667e-03 infty: 5.312e-03 bias: -2.332e-16 P time: 1.66199 first: 1.309e-03 second: 1.692e-03 infty: 5.440e-03 bias: 1.100e-15 P time: 1.669 first: 1.331e-03 second: 1.717e-03 infty: 5.556e-03 bias: 7.661e-16 P time: 1.67602 first: 1.351e-03 second: 1.739e-03 infty: 5.658e-03 bias: 2.121e-16 P time: 1.68303 first: 1.369e-03 second: 1.759e-03 infty: 5.741e-03 bias: -3.118e-15 P time: 1.69004 first: 1.382e-03 second: 1.775e-03 infty: 5.803e-03 bias: -8.050e-18 P time: 1.69705 first: 1.391e-03 second: 1.787e-03 infty: 5.843e-03 bias: -1.784e-15 P time: 1.70407 first: 1.396e-03 second: 1.794e-03 infty: 5.858e-03 bias: -1.339e-15 P time: 1.71108 first: 1.396e-03 second: 1.796e-03 infty: 5.849e-03 bias: 2.546e-15 P time: 1.71809 first: 1.391e-03 second: 1.792e-03 infty: 5.816e-03 bias: 1.991e-15 P time: 1.72511 first: 1.382e-03 second: 1.783e-03 infty: 5.760e-03 bias: 9.894e-16 P time: 1.73212 first: 1.368e-03 second: 1.769e-03 infty: 5.684e-03 bias: 2.127e-16 P time: 1.73913 first: 1.350e-03 second: 1.750e-03 infty: 5.591e-03 bias: -2.674e-15 P time: 1.74614 first: 1.330e-03 second: 1.727e-03 infty: 5.485e-03 bias: -1.117e-15 P time: 1.75316 first: 1.307e-03 second: 1.701e-03 infty: 5.371e-03 bias: -7.318e-18 P time: 1.76017 first: 1.284e-03 second: 1.674e-03 infty: 5.253e-03 bias: 9.914e-16 P time: 1.76718 first: 1.262e-03 second: 1.646e-03 infty: 5.137e-03 bias: -4.228e-15 P time: 1.77419 first: 1.241e-03 second: 1.619e-03 infty: 5.029e-03 bias: -1.784e-15 P time: 1.78121 first: 1.221e-03 second: 1.593e-03 infty: 4.932e-03 bias: -7.129e-18 P time: 1.78822 first: 1.202e-03 second: 1.571e-03 infty: 4.852e-03 bias: -6.741e-16 P time: 1.79523 first: 1.186e-03 second: 1.553e-03 infty: 4.790e-03 bias: 7.723e-16 P time: 1.80224 first: 1.174e-03 second: 1.538e-03 infty: 4.752e-03 bias: 3.104e-15 P time: 1.80926 first: 1.167e-03 second: 1.528e-03 infty: 4.736e-03 bias: 2.437e-15 P time: 1.81627 first: 1.163e-03 second: 1.523e-03 infty: 4.745e-03 bias: -2.224e-15 P time: 1.82328 first: 1.161e-03 second: 1.521e-03 infty: 4.778e-03 bias: 1.661e-15 P time: 1.83029 first: 1.161e-03 second: 1.524e-03 infty: 4.834e-03 bias: -4.475e-16 P time: 1.83731 first: 1.163e-03 second: 1.530e-03 infty: 4.910e-03 bias: -1.114e-15 P time: 1.84432 first: 1.166e-03 second: 1.539e-03 infty: 5.004e-03 bias: -2.668e-15 P time: 1.85133 first: 1.172e-03 second: 1.550e-03 infty: 5.113e-03 bias: -4.716e-18 P time: 1.85835 first: 1.180e-03 second: 1.565e-03 infty: 5.235e-03 bias: -1.112e-15 P time: 1.86536 first: 1.190e-03 second: 1.581e-03 infty: 5.365e-03 bias: 1.108e-15 P time: 1.87237 first: 1.204e-03 second: 1.599e-03 infty: 5.501e-03 bias: -2.792e-18 P time: 1.87938 first: 1.219e-03 second: 1.619e-03 infty: 5.640e-03 bias: 1.884e-15 P time: 1.8864 first: 1.235e-03 second: 1.641e-03 infty: 5.780e-03 bias: -2.263e-16 P time: 1.89341 first: 1.252e-03 second: 1.664e-03 infty: 5.917e-03 bias: 5.522e-16 P time: 1.90042 first: 1.272e-03 second: 1.688e-03 infty: 6.051e-03 bias: 2.329e-15 P time: 1.90743 first: 1.294e-03 second: 1.713e-03 infty: 6.179e-03 bias: 8.882e-16 P time: 1.91445 first: 1.319e-03 second: 1.737e-03 infty: 6.301e-03 bias: -1.111e-15 P time: 1.92146 first: 1.342e-03 second: 1.760e-03 infty: 6.414e-03 bias: -3.108e-15 P time: 1.92847 first: 1.364e-03 second: 1.781e-03 infty: 6.519e-03 bias: -4.427e-16 P time: 1.93548 first: 1.383e-03 second: 1.800e-03 infty: 6.614e-03 bias: -3.550e-15 P time: 1.9425 first: 1.400e-03 second: 1.815e-03 infty: 6.699e-03 bias: -1.772e-15 P time: 1.94951 first: 1.413e-03 second: 1.826e-03 infty: 6.774e-03 bias: -3.107e-15 P time: 1.95652 first: 1.422e-03 second: 1.832e-03 infty: 6.838e-03 bias: 2.224e-15 P time: 1.96353 first: 1.426e-03 second: 1.833e-03 infty: 6.892e-03 bias: -2.187e-16 P time: 1.97055 first: 1.424e-03 second: 1.828e-03 infty: 6.934e-03 bias: 1.335e-15 P time: 1.97756 first: 1.418e-03 second: 1.818e-03 infty: 6.966e-03 bias: -1.107e-15 P time: 1.98457 first: 1.407e-03 second: 1.803e-03 infty: 6.987e-03 bias: 2.001e-15 P time: 1.99158 first: 1.390e-03 second: 1.783e-03 infty: 6.998e-03 bias: -1.996e-15 P time: 1.9986 first: 1.369e-03 second: 1.759e-03 infty: 6.999e-03 bias: 3.556e-15 P time: 2.00561 first: 1.344e-03 second: 1.731e-03 infty: 6.991e-03 bias: -6.620e-16 P time: 2.01262 first: 1.317e-03 second: 1.702e-03 infty: 6.976e-03 bias: 1.115e-15 P time: 2.01964 first: 1.289e-03 second: 1.672e-03 infty: 6.953e-03 bias: 2.271e-16 P time: 2.02665 first: 1.261e-03 second: 1.642e-03 infty: 6.925e-03 bias: 8.940e-16 P time: 2.03366 first: 1.236e-03 second: 1.614e-03 infty: 6.892e-03 bias: 7.821e-16 P time: 2.04067 first: 1.217e-03 second: 1.589e-03 infty: 6.856e-03 bias: -8.834e-16 P time: 2.04769 first: 1.200e-03 second: 1.567e-03 infty: 6.820e-03 bias: 4.556e-15 P time: 2.0547 first: 1.187e-03 second: 1.549e-03 infty: 6.784e-03 bias: -1.771e-15 P time: 2.06171 first: 1.179e-03 second: 1.537e-03 infty: 6.750e-03 bias: -2.881e-15 P time: 2.06872 first: 1.180e-03 second: 1.530e-03 infty: 6.721e-03 bias: 1.114e-15 P time: 2.07574 first: 1.188e-03 second: 1.528e-03 infty: 6.698e-03 bias: -1.108e-15 P time: 2.08275 first: 1.200e-03 second: 1.531e-03 infty: 6.684e-03 bias: -1.332e-15 P time: 2.08976 first: 1.214e-03 second: 1.539e-03 infty: 6.678e-03 bias: -3.775e-15 P time: 2.09677 first: 1.231e-03 second: 1.551e-03 infty: 6.684e-03 bias: -1.110e-15 P time: 2.10379 first: 1.248e-03 second: 1.567e-03 infty: 6.700e-03 bias: 1.122e-16 P time: 2.1108 first: 1.266e-03 second: 1.586e-03 infty: 6.729e-03 bias: 1.110e-15 P time: 2.11781 first: 1.284e-03 second: 1.607e-03 infty: 6.768e-03 bias: 3.551e-15 P time: 2.12482 first: 1.301e-03 second: 1.631e-03 infty: 6.819e-03 bias: 2.218e-15 P time: 2.13184 first: 1.319e-03 second: 1.657e-03 infty: 6.879e-03 bias: 6.653e-16 P time: 2.13885 first: 1.336e-03 second: 1.685e-03 infty: 6.947e-03 bias: -1.555e-15 P time: 2.14586 first: 1.353e-03 second: 1.713e-03 infty: 7.020e-03 bias: -4.664e-15 P time: 2.15288 first: 1.371e-03 second: 1.743e-03 infty: 7.096e-03 bias: -1.999e-15 P time: 2.15989 first: 1.388e-03 second: 1.774e-03 infty: 7.172e-03 bias: 1.223e-15 P time: 2.1669 first: 1.406e-03 second: 1.804e-03 infty: 7.244e-03 bias: 7.802e-16 P time: 2.17391 first: 1.425e-03 second: 1.835e-03 infty: 7.309e-03 bias: 5.605e-16 P time: 2.18093 first: 1.445e-03 second: 1.865e-03 infty: 7.365e-03 bias: -1.992e-15 P time: 2.18794 first: 1.466e-03 second: 1.893e-03 infty: 7.408e-03 bias: -1.548e-15 P time: 2.19495 first: 1.487e-03 second: 1.920e-03 infty: 7.436e-03 bias: -3.324e-15 P time: 2.20196 first: 1.508e-03 second: 1.944e-03 infty: 7.447e-03 bias: -6.601e-16 P time: 2.20898 first: 1.527e-03 second: 1.965e-03 infty: 7.441e-03 bias: -1.772e-15 P time: 2.21599 first: 1.544e-03 second: 1.983e-03 infty: 7.417e-03 bias: 2.001e-15 P time: 2.223 first: 1.556e-03 second: 1.997e-03 infty: 7.375e-03 bias: -6.639e-16 P time: 2.23001 first: 1.565e-03 second: 2.007e-03 infty: 7.315e-03 bias: 1.556e-15 P time: 2.23703 first: 1.570e-03 second: 2.014e-03 infty: 7.241e-03 bias: 7.784e-16 P time: 2.24404 first: 1.571e-03 second: 2.016e-03 infty: 7.154e-03 bias: -1.554e-15 P time: 2.25105 first: 1.568e-03 second: 2.015e-03 infty: 7.056e-03 bias: -2.221e-16 P time: 2.25806 first: 1.561e-03 second: 2.012e-03 infty: 6.951e-03 bias: -2.217e-16 P time: 2.26508 first: 1.551e-03 second: 2.006e-03 infty: 6.841e-03 bias: 1.778e-15 P time: 2.27209 first: 1.537e-03 second: 1.999e-03 infty: 6.731e-03 bias: 7.785e-16 P time: 2.2791 first: 1.523e-03 second: 1.992e-03 infty: 6.622e-03 bias: 4.108e-15 P time: 2.28612 first: 1.508e-03 second: 1.984e-03 infty: 6.518e-03 bias: 2.109e-15 P time: 2.29313 first: 1.496e-03 second: 1.977e-03 infty: 6.423e-03 bias: 1.997e-15 P time: 2.30014 first: 1.488e-03 second: 1.972e-03 infty: 6.337e-03 bias: -1.778e-15 P time: 2.30715 first: 1.482e-03 second: 1.969e-03 infty: 6.263e-03 bias: -3.555e-15 P time: 2.31417 first: 1.477e-03 second: 1.969e-03 infty: 6.203e-03 bias: 1.083e-16 P time: 2.32118 first: 1.477e-03 second: 1.971e-03 infty: 6.158e-03 bias: 1.441e-15 P time: 2.32819 first: 1.487e-03 second: 1.975e-03 infty: 6.128e-03 bias: 3.307e-16 P time: 2.3352 first: 1.501e-03 second: 1.981e-03 infty: 6.114e-03 bias: 9.982e-16 P time: 2.34222 first: 1.516e-03 second: 1.990e-03 infty: 6.116e-03 bias: -3.332e-15 P time: 2.34923 first: 1.531e-03 second: 2.000e-03 infty: 6.135e-03 bias: -1.333e-15 P time: 2.35624 first: 1.545e-03 second: 2.011e-03 infty: 6.168e-03 bias: 2.553e-15 P time: 2.36325 first: 1.556e-03 second: 2.023e-03 infty: 6.216e-03 bias: -8.891e-16 P time: 2.37027 first: 1.566e-03 second: 2.035e-03 infty: 6.277e-03 bias: 6.642e-16 P time: 2.37728 first: 1.574e-03 second: 2.047e-03 infty: 6.351e-03 bias: 2.553e-15 P time: 2.38429 first: 1.579e-03 second: 2.059e-03 infty: 6.435e-03 bias: -8.888e-16 P time: 2.3913 first: 1.581e-03 second: 2.071e-03 infty: 6.529e-03 bias: -2.000e-15 P time: 2.39832 first: 1.581e-03 second: 2.083e-03 infty: 6.629e-03 bias: -4.432e-16 P time: 2.40533 first: 1.579e-03 second: 2.095e-03 infty: 6.735e-03 bias: -2.206e-16 P time: 2.41234 first: 1.575e-03 second: 2.107e-03 infty: 6.843e-03 bias: 1.334e-15 P time: 2.41935 first: 1.570e-03 second: 2.118e-03 infty: 6.951e-03 bias: 1.667e-15 P time: 2.42637 first: 1.567e-03 second: 2.129e-03 infty: 7.058e-03 bias: -1.331e-15 P time: 2.43338 first: 1.577e-03 second: 2.140e-03 infty: 7.160e-03 bias: 2.666e-15 P time: 2.44039 first: 1.593e-03 second: 2.149e-03 infty: 7.256e-03 bias: 6.681e-16 P time: 2.44741 first: 1.609e-03 second: 2.158e-03 infty: 7.344e-03 bias: 4.442e-15 P time: 2.45442 first: 1.624e-03 second: 2.165e-03 infty: 7.422e-03 bias: 1.444e-15 P time: 2.46143 first: 1.637e-03 second: 2.171e-03 infty: 7.489e-03 bias: -1.552e-15 P time: 2.46844 first: 1.648e-03 second: 2.174e-03 infty: 7.545e-03 bias: 2.002e-15 P time: 2.47546 first: 1.655e-03 second: 2.174e-03 infty: 7.588e-03 bias: 1.559e-15 P time: 2.48247 first: 1.658e-03 second: 2.172e-03 infty: 7.619e-03 bias: 2.004e-15 P time: 2.48948 first: 1.657e-03 second: 2.166e-03 infty: 7.639e-03 bias: 2.447e-15 P time: 2.49649 first: 1.652e-03 second: 2.157e-03 infty: 7.649e-03 bias: -3.103e-15 P time: 2.50351 first: 1.642e-03 second: 2.146e-03 infty: 7.652e-03 bias: 1.558e-15 P time: 2.51052 first: 1.629e-03 second: 2.132e-03 infty: 7.647e-03 bias: 4.778e-15 P time: 2.51753 first: 1.615e-03 second: 2.115e-03 infty: 7.639e-03 bias: 1.780e-15 P time: 2.52454 first: 1.598e-03 second: 2.097e-03 infty: 7.629e-03 bias: 3.849e-18 P time: 2.53156 first: 1.578e-03 second: 2.078e-03 infty: 7.619e-03 bias: 3.221e-15 P time: 2.53857 first: 1.556e-03 second: 2.059e-03 infty: 7.613e-03 bias: -4.220e-15 P time: 2.54558 first: 1.534e-03 second: 2.039e-03 infty: 7.611e-03 bias: 5.523e-16 P time: 2.55259 first: 1.516e-03 second: 2.021e-03 infty: 7.615e-03 bias: -1.114e-15 P time: 2.55961 first: 1.504e-03 second: 2.004e-03 infty: 7.627e-03 bias: 1.327e-15 P time: 2.56662 first: 1.498e-03 second: 1.990e-03 infty: 7.648e-03 bias: -1.339e-15 P time: 2.57363 first: 1.495e-03 second: 1.978e-03 infty: 7.678e-03 bias: 1.325e-15 P time: 2.58065 first: 1.494e-03 second: 1.968e-03 infty: 7.717e-03 bias: -4.525e-16 P time: 2.58766 first: 1.495e-03 second: 1.962e-03 infty: 7.765e-03 bias: 4.101e-15 P time: 2.59467 first: 1.496e-03 second: 1.958e-03 infty: 7.820e-03 bias: -2.448e-15 P time: 2.60168 first: 1.497e-03 second: 1.957e-03 infty: 7.881e-03 bias: 3.437e-15 P time: 2.6087 first: 1.498e-03 second: 1.958e-03 infty: 7.948e-03 bias: -4.478e-16 P time: 2.61571 first: 1.500e-03 second: 1.961e-03 infty: 8.018e-03 bias: 3.992e-15 P time: 2.62272 first: 1.503e-03 second: 1.967e-03 infty: 8.089e-03 bias: 3.991e-15 P time: 2.62973 first: 1.508e-03 second: 1.974e-03 infty: 8.160e-03 bias: 1.994e-15 P time: 2.63675 first: 1.512e-03 second: 1.983e-03 infty: 8.230e-03 bias: -2.669e-15 P time: 2.64376 first: 1.516e-03 second: 1.994e-03 infty: 8.296e-03 bias: -1.781e-15 P time: 2.65077 first: 1.521e-03 second: 2.006e-03 infty: 8.358e-03 bias: -1.781e-15 P time: 2.65778 first: 1.526e-03 second: 2.021e-03 infty: 8.414e-03 bias: 1.880e-15 P time: 2.6648 first: 1.532e-03 second: 2.036e-03 infty: 8.464e-03 bias: 1.437e-15 P time: 2.67181 first: 1.542e-03 second: 2.054e-03 infty: 8.506e-03 bias: -4.519e-16 P time: 2.67882 first: 1.558e-03 second: 2.072e-03 infty: 8.541e-03 bias: 8.807e-16 P time: 2.68583 first: 1.575e-03 second: 2.092e-03 infty: 8.569e-03 bias: 1.769e-15 P time: 2.69285 first: 1.593e-03 second: 2.113e-03 infty: 8.589e-03 bias: 1.770e-15 P time: 2.69986 first: 1.612e-03 second: 2.133e-03 infty: 8.602e-03 bias: 4.379e-16 P time: 2.70687 first: 1.632e-03 second: 2.154e-03 infty: 8.609e-03 bias: 3.273e-16 P time: 2.71388 first: 1.652e-03 second: 2.174e-03 infty: 8.610e-03 bias: 6.604e-16 P time: 2.7209 first: 1.673e-03 second: 2.193e-03 infty: 8.606e-03 bias: 2.213e-15 P time: 2.72791 first: 1.695e-03 second: 2.210e-03 infty: 8.597e-03 bias: 9.919e-16 P time: 2.73492 first: 1.716e-03 second: 2.225e-03 infty: 8.585e-03 bias: -4.671e-15 P time: 2.74194 first: 1.735e-03 second: 2.237e-03 infty: 8.570e-03 bias: -3.116e-15 P time: 2.74895 first: 1.752e-03 second: 2.247e-03 infty: 8.553e-03 bias: -4.534e-16 P time: 2.75596 first: 1.765e-03 second: 2.254e-03 infty: 8.535e-03 bias: 5.476e-16 P time: 2.76297 first: 1.775e-03 second: 2.258e-03 infty: 8.517e-03 bias: 3.101e-15 P time: 2.76999 first: 1.782e-03 second: 2.260e-03 infty: 8.500e-03 bias: 1.437e-15 P time: 2.777 first: 1.785e-03 second: 2.259e-03 infty: 8.484e-03 bias: 8.796e-16 P time: 2.78401 first: 1.785e-03 second: 2.256e-03 infty: 8.471e-03 bias: -3.784e-15 P time: 2.79102 first: 1.781e-03 second: 2.252e-03 infty: 8.461e-03 bias: 3.099e-15 P time: 2.79804 first: 1.776e-03 second: 2.246e-03 infty: 8.454e-03 bias: 2.100e-15 P time: 2.80505 first: 1.770e-03 second: 2.240e-03 infty: 8.452e-03 bias: -2.453e-15 P time: 2.81206 first: 1.763e-03 second: 2.233e-03 infty: 8.455e-03 bias: 6.565e-16 P time: 2.81907 first: 1.757e-03 second: 2.226e-03 infty: 8.464e-03 bias: 1.323e-15 P time: 2.82609 first: 1.752e-03 second: 2.221e-03 infty: 8.477e-03 bias: -1.120e-15 P time: 2.8331 first: 1.747e-03 second: 2.216e-03 infty: 8.496e-03 bias: -2.321e-16 P time: 2.84011 first: 1.741e-03 second: 2.212e-03 infty: 8.519e-03 bias: -4.537e-16 P time: 2.84712 first: 1.735e-03 second: 2.209e-03 infty: 8.548e-03 bias: 4.320e-15 P time: 2.85414 first: 1.729e-03 second: 2.208e-03 infty: 8.580e-03 bias: 1.656e-15 P time: 2.86115 first: 1.723e-03 second: 2.209e-03 infty: 8.616e-03 bias: 4.100e-15 P time: 2.86816 first: 1.718e-03 second: 2.211e-03 infty: 8.654e-03 bias: 2.544e-15 P time: 2.87518 first: 1.715e-03 second: 2.214e-03 infty: 8.694e-03 bias: -1.341e-15 P time: 2.88219 first: 1.715e-03 second: 2.218e-03 infty: 8.734e-03 bias: -8.982e-16 P time: 2.8892 first: 1.717e-03 second: 2.224e-03 infty: 8.774e-03 bias: 1.213e-15 P time: 2.89621 first: 1.719e-03 second: 2.231e-03 infty: 8.813e-03 bias: -8.957e-16 P time: 2.90323 first: 1.721e-03 second: 2.239e-03 infty: 8.850e-03 bias: -1.342e-15 P time: 2.91024 first: 1.722e-03 second: 2.247e-03 infty: 8.885e-03 bias: -1.057e-17 P time: 2.91725 first: 1.723e-03 second: 2.257e-03 infty: 8.918e-03 bias: -4.552e-16 P time: 2.92426 first: 1.724e-03 second: 2.267e-03 infty: 8.947e-03 bias: -2.231e-15 P time: 2.93128 first: 1.725e-03 second: 2.279e-03 infty: 8.973e-03 bias: -4.008e-15 P time: 2.93829 first: 1.727e-03 second: 2.291e-03 infty: 8.997e-03 bias: 1.099e-15 P time: 2.9453 first: 1.731e-03 second: 2.303e-03 infty: 9.018e-03 bias: 1.101e-15 P time: 2.95231 first: 1.735e-03 second: 2.317e-03 infty: 9.036e-03 bias: 4.347e-16 P time: 2.95933 first: 1.740e-03 second: 2.330e-03 infty: 9.051e-03 bias: 1.434e-15 P time: 2.96634 first: 1.748e-03 second: 2.344e-03 infty: 9.065e-03 bias: -4.539e-16 P time: 2.97335 first: 1.757e-03 second: 2.359e-03 infty: 9.076e-03 bias: 7.683e-16 P time: 2.98036 first: 1.767e-03 second: 2.373e-03 infty: 9.084e-03 bias: -2.317e-16 P time: 2.98738 first: 1.778e-03 second: 2.386e-03 infty: 9.090e-03 bias: -4.530e-16 P time: 2.99439 first: 1.789e-03 second: 2.399e-03 infty: 9.093e-03 bias: 3.544e-15 P time: 3.0014 first: 1.800e-03 second: 2.411e-03 infty: 9.092e-03 bias: 1.547e-15 P time: 3.00842 first: 1.809e-03 second: 2.422e-03 infty: 9.087e-03 bias: -3.119e-15 P time: 3.01543 first: 1.817e-03 second: 2.432e-03 infty: 9.078e-03 bias: 2.118e-16 P time: 3.02244 first: 1.823e-03 second: 2.440e-03 infty: 9.063e-03 bias: -8.995e-16 P time: 3.02945 first: 1.827e-03 second: 2.446e-03 infty: 9.041e-03 bias: -3.564e-15 P time: 3.03647 first: 1.830e-03 second: 2.450e-03 infty: 9.014e-03 bias: -6.785e-16 P time: 3.04348 first: 1.830e-03 second: 2.453e-03 infty: 8.980e-03 bias: 2.097e-15 P time: 3.05049 first: 1.828e-03 second: 2.453e-03 infty: 8.939e-03 bias: -2.360e-16 P time: 3.0575 first: 1.825e-03 second: 2.453e-03 infty: 8.892e-03 bias: -1.790e-15 P time: 3.06452 first: 1.821e-03 second: 2.451e-03 infty: 8.840e-03 bias: -6.774e-16 P time: 3.07153 first: 1.815e-03 second: 2.448e-03 infty: 8.783e-03 bias: 6.534e-16 P time: 3.07854 first: 1.808e-03 second: 2.444e-03 infty: 8.723e-03 bias: 3.192e-16 P time: 3.08555 first: 1.801e-03 second: 2.440e-03 infty: 8.661e-03 bias: -1.515e-17 P time: 3.09257 first: 1.793e-03 second: 2.437e-03 infty: 8.599e-03 bias: 6.508e-16 P time: 3.09958 first: 1.784e-03 second: 2.433e-03 infty: 8.540e-03 bias: 4.647e-15 P time: 3.10659 first: 1.775e-03 second: 2.431e-03 infty: 8.483e-03 bias: -1.570e-15 P time: 3.1136 first: 1.766e-03 second: 2.429e-03 infty: 8.433e-03 bias: -4.608e-16 P time: 3.12062 first: 1.757e-03 second: 2.429e-03 infty: 8.389e-03 bias: -2.369e-16 P time: 3.12763 first: 1.748e-03 second: 2.430e-03 infty: 8.353e-03 bias: 6.521e-16 P time: 3.13464 first: 1.740e-03 second: 2.432e-03 infty: 8.327e-03 bias: 2.094e-15 P time: 3.14165 first: 1.733e-03 second: 2.436e-03 infty: 8.311e-03 bias: 3.205e-15 P time: 3.14867 first: 1.727e-03 second: 2.441e-03 infty: 8.306e-03 bias: 3.208e-15 P time: 3.15568 first: 1.723e-03 second: 2.447e-03 infty: 8.311e-03 bias: 2.540e-15 P time: 3.16269 first: 1.720e-03 second: 2.454e-03 infty: 8.326e-03 bias: -3.121e-15 P time: 3.16971 first: 1.721e-03 second: 2.462e-03 infty: 8.350e-03 bias: 1.207e-15 P time: 3.17672 first: 1.727e-03 second: 2.471e-03 infty: 8.384e-03 bias: -1.346e-15 P time: 3.18373 first: 1.737e-03 second: 2.482e-03 infty: 8.424e-03 bias: 3.984e-15 P time: 3.19074 first: 1.750e-03 second: 2.493e-03 infty: 8.472e-03 bias: 2.097e-15 P time: 3.19776 first: 1.766e-03 second: 2.505e-03 infty: 8.524e-03 bias: 2.762e-15 P time: 3.20477 first: 1.785e-03 second: 2.518e-03 infty: 8.581e-03 bias: -4.587e-16 P time: 3.21178 first: 1.806e-03 second: 2.531e-03 infty: 8.641e-03 bias: -2.235e-15 P time: 3.21879 first: 1.831e-03 second: 2.546e-03 infty: 8.704e-03 bias: -6.817e-16 P time: 3.22581 first: 1.857e-03 second: 2.560e-03 infty: 8.769e-03 bias: 3.194e-16 P time: 3.23282 first: 1.883e-03 second: 2.575e-03 infty: 8.835e-03 bias: 4.204e-15 P time: 3.23983 first: 1.909e-03 second: 2.589e-03 infty: 8.903e-03 bias: 7.625e-16 P time: 3.24684 first: 1.932e-03 second: 2.603e-03 infty: 8.971e-03 bias: 1.429e-15 P time: 3.25386 first: 1.954e-03 second: 2.615e-03 infty: 9.042e-03 bias: -1.124e-15 P time: 3.26087 first: 1.974e-03 second: 2.626e-03 infty: 9.113e-03 bias: 9.839e-16 P time: 3.26788 first: 1.992e-03 second: 2.634e-03 infty: 9.186e-03 bias: -1.349e-15 P time: 3.27489 first: 2.006e-03 second: 2.640e-03 infty: 9.260e-03 bias: 7.590e-16 P time: 3.28191 first: 2.017e-03 second: 2.644e-03 infty: 9.335e-03 bias: -1.572e-15 P time: 3.28892 first: 2.025e-03 second: 2.644e-03 infty: 9.412e-03 bias: 7.602e-16 P time: 3.29593 first: 2.030e-03 second: 2.641e-03 infty: 9.489e-03 bias: 3.151e-16 P time: 3.30295 first: 2.032e-03 second: 2.636e-03 infty: 9.567e-03 bias: -1.924e-17 P time: 3.30996 first: 2.034e-03 second: 2.628e-03 infty: 9.645e-03 bias: 9.813e-16 P time: 3.31697 first: 2.035e-03 second: 2.617e-03 infty: 9.722e-03 bias: -2.017e-15 P time: 3.32398 first: 2.034e-03 second: 2.605e-03 infty: 9.798e-03 bias: 2.315e-15 P time: 3.331 first: 2.031e-03 second: 2.591e-03 infty: 9.871e-03 bias: -2.394e-16 P time: 3.33801 first: 2.028e-03 second: 2.576e-03 infty: 9.942e-03 bias: 9.267e-17 P time: 3.34502 first: 2.024e-03 second: 2.561e-03 infty: 1.001e-02 bias: -2.461e-15 P time: 3.35203 first: 2.019e-03 second: 2.546e-03 infty: 1.007e-02 bias: 4.260e-16 P time: 3.35905 first: 2.013e-03 second: 2.532e-03 infty: 1.013e-02 bias: 1.204e-15 P time: 3.36606 first: 2.006e-03 second: 2.518e-03 infty: 1.019e-02 bias: -2.902e-15 P time: 3.37307 first: 1.999e-03 second: 2.506e-03 infty: 1.024e-02 bias: -1.127e-15 P time: 3.38008 first: 1.992e-03 second: 2.495e-03 infty: 1.029e-02 bias: 2.978e-15 P time: 3.3871 first: 1.984e-03 second: 2.486e-03 infty: 1.033e-02 bias: -1.352e-15 P time: 3.39411 first: 1.977e-03 second: 2.478e-03 infty: 1.037e-02 bias: 2.017e-16 P time: 3.40112 first: 1.969e-03 second: 2.471e-03 infty: 1.041e-02 bias: 4.642e-15 P time: 3.40813 first: 1.961e-03 second: 2.467e-03 infty: 1.044e-02 bias: -1.574e-15 P time: 3.41515 first: 1.954e-03 second: 2.464e-03 infty: 1.047e-02 bias: -3.130e-15 P time: 3.42216 first: 1.947e-03 second: 2.463e-03 infty: 1.050e-02 bias: -2.122e-17 P time: 3.42917 first: 1.940e-03 second: 2.465e-03 infty: 1.052e-02 bias: -1.575e-15 P time: 3.43619 first: 1.935e-03 second: 2.468e-03 infty: 1.054e-02 bias: 8.699e-16 P time: 3.4432 first: 1.930e-03 second: 2.474e-03 infty: 1.056e-02 bias: 1.093e-15 P time: 3.45021 first: 1.927e-03 second: 2.483e-03 infty: 1.058e-02 bias: -1.572e-15 P time: 3.45722 first: 1.925e-03 second: 2.494e-03 infty: 1.059e-02 bias: -2.432e-16 P time: 3.46424 first: 1.924e-03 second: 2.508e-03 infty: 1.060e-02 bias: -2.166e-17 P time: 3.47125 first: 1.925e-03 second: 2.524e-03 infty: 1.060e-02 bias: 9.768e-16 P time: 3.47826 first: 1.928e-03 second: 2.543e-03 infty: 1.059e-02 bias: -9.100e-16 P time: 3.48527 first: 1.936e-03 second: 2.563e-03 infty: 1.058e-02 bias: 8.834e-17 P time: 3.49229 first: 1.949e-03 second: 2.585e-03 infty: 1.056e-02 bias: 1.753e-15 P time: 3.4993 first: 1.964e-03 second: 2.608e-03 infty: 1.054e-02 bias: 2.086e-15 P time: 3.50631 first: 1.981e-03 second: 2.631e-03 infty: 1.050e-02 bias: 3.084e-15 P time: 3.51332 first: 1.997e-03 second: 2.653e-03 infty: 1.046e-02 bias: -1.134e-15 P time: 3.52034 first: 2.012e-03 second: 2.675e-03 infty: 1.042e-02 bias: 3.195e-15 P time: 3.52735 first: 2.025e-03 second: 2.694e-03 infty: 1.036e-02 bias: -1.801e-15 P time: 3.53436 first: 2.036e-03 second: 2.713e-03 infty: 1.030e-02 bias: -4.687e-16 P time: 3.54137 first: 2.044e-03 second: 2.728e-03 infty: 1.024e-02 bias: 8.755e-17 P time: 3.54839 first: 2.049e-03 second: 2.742e-03 infty: 1.017e-02 bias: 3.105e-16 P time: 3.5554 first: 2.051e-03 second: 2.754e-03 infty: 1.010e-02 bias: -1.801e-15 P time: 3.56241 first: 2.052e-03 second: 2.763e-03 infty: 1.003e-02 bias: -2.912e-15 P time: 3.56942 first: 2.051e-03 second: 2.771e-03 infty: 9.959e-03 bias: 5.300e-16 P time: 3.57644 first: 2.050e-03 second: 2.777e-03 infty: 9.889e-03 bias: 4.177e-16 P time: 3.58345 first: 2.047e-03 second: 2.782e-03 infty: 9.823e-03 bias: 3.053e-16 P time: 3.59046 first: 2.044e-03 second: 2.786e-03 infty: 9.759e-03 bias: 3.635e-15 P time: 3.59748 first: 2.040e-03 second: 2.790e-03 infty: 9.700e-03 bias: 1.746e-15 P time: 3.60449 first: 2.035e-03 second: 2.793e-03 infty: 9.645e-03 bias: -2.917e-15 P time: 3.6115 first: 2.031e-03 second: 2.797e-03 infty: 9.594e-03 bias: 6.355e-16 P time: 3.61851 first: 2.027e-03 second: 2.800e-03 infty: 9.549e-03 bias: -9.185e-16 P time: 3.62553 first: 2.023e-03 second: 2.804e-03 infty: 9.509e-03 bias: 1.634e-15 P time: 3.63254 first: 2.023e-03 second: 2.807e-03 infty: 9.473e-03 bias: -3.363e-15 P time: 3.63955 first: 2.023e-03 second: 2.811e-03 infty: 9.443e-03 bias: -4.774e-16 P time: 3.64656 first: 2.025e-03 second: 2.814e-03 infty: 9.417e-03 bias: 1.743e-15 P time: 3.65358 first: 2.027e-03 second: 2.817e-03 infty: 9.396e-03 bias: 9.676e-16 P time: 3.66059 first: 2.031e-03 second: 2.820e-03 infty: 9.380e-03 bias: -4.776e-16 P time: 3.6676 first: 2.036e-03 second: 2.822e-03 infty: 9.368e-03 bias: 7.421e-16 P time: 3.67461 first: 2.043e-03 second: 2.824e-03 infty: 9.362e-03 bias: 2.981e-16 P time: 3.68163 first: 2.051e-03 second: 2.825e-03 infty: 9.362e-03 bias: 3.519e-15 P time: 3.68864 first: 2.059e-03 second: 2.827e-03 infty: 9.368e-03 bias: -1.143e-15 P time: 3.69565 first: 2.068e-03 second: 2.828e-03 infty: 9.381e-03 bias: 4.100e-16 P time: 3.70266 first: 2.076e-03 second: 2.829e-03 infty: 9.402e-03 bias: -7.017e-16 P time: 3.70968 first: 2.084e-03 second: 2.831e-03 infty: 9.431e-03 bias: -1.367e-15 P time: 3.71669 first: 2.091e-03 second: 2.833e-03 infty: 9.469e-03 bias: -4.781e-16 P time: 3.7237 first: 2.097e-03 second: 2.836e-03 infty: 9.517e-03 bias: 1.078e-15 P time: 3.73072 first: 2.103e-03 second: 2.839e-03 infty: 9.575e-03 bias: -2.921e-15 P time: 3.73773 first: 2.108e-03 second: 2.844e-03 infty: 9.644e-03 bias: 2.076e-15 P time: 3.74474 first: 2.112e-03 second: 2.848e-03 infty: 9.723e-03 bias: 7.825e-17 P time: 3.75175 first: 2.115e-03 second: 2.853e-03 infty: 9.812e-03 bias: -1.143e-15 P time: 3.75877 first: 2.118e-03 second: 2.859e-03 infty: 9.910e-03 bias: 1.889e-16 P time: 3.76578 first: 2.120e-03 second: 2.864e-03 infty: 1.002e-02 bias: -4.788e-16 P time: 3.77279 first: 2.122e-03 second: 2.868e-03 infty: 1.013e-02 bias: 4.105e-16 P time: 3.7798 first: 2.123e-03 second: 2.872e-03 infty: 1.025e-02 bias: -7.010e-16 P time: 3.78682 first: 2.123e-03 second: 2.875e-03 infty: 1.037e-02 bias: 2.741e-15 P time: 3.79383 first: 2.123e-03 second: 2.878e-03 infty: 1.050e-02 bias: -2.032e-15 P time: 3.80084 first: 2.121e-03 second: 2.879e-03 infty: 1.062e-02 bias: -1.142e-15 P time: 3.80785 first: 2.119e-03 second: 2.879e-03 infty: 1.075e-02 bias: 1.413e-15 P time: 3.81487 first: 2.116e-03 second: 2.878e-03 infty: 1.086e-02 bias: 5.228e-16 P time: 3.82188 first: 2.113e-03 second: 2.877e-03 infty: 1.098e-02 bias: 2.965e-15 P time: 3.82889 first: 2.110e-03 second: 2.875e-03 infty: 1.108e-02 bias: 2.409e-15 P time: 3.8359 first: 2.109e-03 second: 2.873e-03 infty: 1.118e-02 bias: 1.632e-15 P time: 3.84292 first: 2.111e-03 second: 2.870e-03 infty: 1.127e-02 bias: -2.549e-16 P time: 3.84993 first: 2.115e-03 second: 2.868e-03 infty: 1.134e-02 bias: -1.144e-15 P time: 3.85694 first: 2.119e-03 second: 2.866e-03 infty: 1.141e-02 bias: -4.795e-16 P time: 3.86396 first: 2.123e-03 second: 2.864e-03 infty: 1.146e-02 bias: -3.365e-15 P time: 3.87097 first: 2.129e-03 second: 2.863e-03 infty: 1.151e-02 bias: -1.590e-15 P time: 3.87798 first: 2.135e-03 second: 2.863e-03 infty: 1.154e-02 bias: 1.406e-15 P time: 3.88499 first: 2.143e-03 second: 2.862e-03 infty: 1.156e-02 bias: -2.258e-15 P time: 3.89201 first: 2.152e-03 second: 2.863e-03 infty: 1.157e-02 bias: 6.280e-16 P time: 3.89902 first: 2.163e-03 second: 2.864e-03 infty: 1.157e-02 bias: 1.960e-15 P time: 3.90603 first: 2.173e-03 second: 2.865e-03 infty: 1.156e-02 bias: -1.591e-15 P time: 3.91304 first: 2.182e-03 second: 2.866e-03 infty: 1.154e-02 bias: -7.033e-16 P time: 3.92006 first: 2.190e-03 second: 2.868e-03 infty: 1.152e-02 bias: 7.391e-16 P time: 3.92707 first: 2.198e-03 second: 2.870e-03 infty: 1.149e-02 bias: -2.481e-15 P time: 3.93408 first: 2.204e-03 second: 2.873e-03 infty: 1.145e-02 bias: 1.830e-16 P time: 3.94109 first: 2.210e-03 second: 2.876e-03 infty: 1.141e-02 bias: 1.071e-15 P time: 3.94811 first: 2.215e-03 second: 2.880e-03 infty: 1.135e-02 bias: 9.602e-16 P time: 3.95512 first: 2.221e-03 second: 2.885e-03 infty: 1.130e-02 bias: 2.071e-15 P time: 3.96213 first: 2.227e-03 second: 2.891e-03 infty: 1.124e-02 bias: -3.369e-15 P time: 3.96914 first: 2.233e-03 second: 2.898e-03 infty: 1.118e-02 bias: 1.293e-15 P time: 3.97616 first: 2.240e-03 second: 2.907e-03 infty: 1.111e-02 bias: -4.846e-16 P time: 3.98317 first: 2.247e-03 second: 2.917e-03 infty: 1.104e-02 bias: 9.587e-16 P time: 3.99018 first: 2.256e-03 second: 2.929e-03 infty: 1.097e-02 bias: 1.180e-15 P time: 3.99719 first: 2.265e-03 second: 2.942e-03 infty: 1.089e-02 bias: -1.153e-15 P time: 4.00421 first: 2.275e-03 second: 2.956e-03 infty: 1.082e-02 bias: 1.402e-15 P time: 4.01122 first: 2.286e-03 second: 2.972e-03 infty: 1.075e-02 bias: 2.898e-16 P time: 4.01823 first: 2.297e-03 second: 2.988e-03 infty: 1.069e-02 bias: 1.290e-15 P time: 4.02525 first: 2.308e-03 second: 3.005e-03 infty: 1.063e-02 bias: -1.597e-15 P time: 4.03226 first: 2.320e-03 second: 3.022e-03 infty: 1.057e-02 bias: 1.775e-16 P time: 4.03927 first: 2.331e-03 second: 3.039e-03 infty: 1.053e-02 bias: -7.090e-16 P time: 4.04628 first: 2.342e-03 second: 3.055e-03 infty: 1.049e-02 bias: -2.265e-15 P time: 4.0533 first: 2.352e-03 second: 3.071e-03 infty: 1.047e-02 bias: -4.900e-16 P time: 4.06031 first: 2.362e-03 second: 3.086e-03 infty: 1.045e-02 bias: -3.599e-15 P time: 4.06732 first: 2.372e-03 second: 3.100e-03 infty: 1.045e-02 bias: -7.142e-16 P time: 4.07433 first: 2.380e-03 second: 3.113e-03 infty: 1.046e-02 bias: 1.616e-15 P time: 4.08135 first: 2.386e-03 second: 3.125e-03 infty: 1.047e-02 bias: 3.616e-15 P time: 4.08836 first: 2.392e-03 second: 3.135e-03 infty: 1.051e-02 bias: -1.379e-15 P time: 4.09537 first: 2.397e-03 second: 3.145e-03 infty: 1.055e-02 bias: -3.599e-15 P time: 4.10238 first: 2.401e-03 second: 3.153e-03 infty: 1.060e-02 bias: -3.376e-15 P time: 4.1094 first: 2.406e-03 second: 3.160e-03 infty: 1.065e-02 bias: -4.043e-15 P time: 4.11641 first: 2.410e-03 second: 3.166e-03 infty: 1.071e-02 bias: -2.266e-15 P time: 4.12342 first: 2.414e-03 second: 3.170e-03 infty: 1.078e-02 bias: 1.619e-15 P time: 4.13043 first: 2.416e-03 second: 3.174e-03 infty: 1.085e-02 bias: 2.175e-15 P time: 4.13745 first: 2.417e-03 second: 3.176e-03 infty: 1.092e-02 bias: 1.067e-15 P time: 4.14446 first: 2.416e-03 second: 3.177e-03 infty: 1.099e-02 bias: -1.375e-15 P time: 4.15147 first: 2.414e-03 second: 3.176e-03 infty: 1.106e-02 bias: 5.122e-16 P time: 4.15849 first: 2.410e-03 second: 3.174e-03 infty: 1.112e-02 bias: 4.018e-16 P time: 4.1655 first: 2.404e-03 second: 3.170e-03 infty: 1.118e-02 bias: -1.374e-15 P time: 4.17251 first: 2.395e-03 second: 3.165e-03 infty: 1.123e-02 bias: 2.291e-15 P time: 4.17952 first: 2.385e-03 second: 3.158e-03 infty: 1.127e-02 bias: -2.636e-16 P time: 4.18654 first: 2.373e-03 second: 3.150e-03 infty: 1.131e-02 bias: 1.822e-16 P time: 4.19355 first: 2.359e-03 second: 3.140e-03 infty: 1.134e-02 bias: 1.829e-16 P time: 4.20056 first: 2.344e-03 second: 3.130e-03 infty: 1.137e-02 bias: 6.290e-15 P time: 4.20757 first: 2.327e-03 second: 3.118e-03 infty: 1.139e-02 bias: 3.626e-15 P time: 4.21459 first: 2.310e-03 second: 3.106e-03 infty: 1.140e-02 bias: -1.369e-15 P time: 4.2216 first: 2.293e-03 second: 3.095e-03 infty: 1.141e-02 bias: 7.687e-17 P time: 4.22861 first: 2.278e-03 second: 3.083e-03 infty: 1.141e-02 bias: 2.185e-15 P time: 4.23562 first: 2.266e-03 second: 3.072e-03 infty: 1.142e-02 bias: 2.852e-15 P time: 4.24264 first: 2.256e-03 second: 3.062e-03 infty: 1.142e-02 bias: 1.295e-15 P time: 4.24965 first: 2.248e-03 second: 3.054e-03 infty: 1.142e-02 bias: 1.962e-15 P time: 4.25666 first: 2.244e-03 second: 3.047e-03 infty: 1.143e-02 bias: 2.072e-15 P time: 4.26367 first: 2.243e-03 second: 3.042e-03 infty: 1.143e-02 bias: -1.371e-15 P time: 4.27069 first: 2.245e-03 second: 3.038e-03 infty: 1.144e-02 bias: 9.607e-16 P time: 4.2777 first: 2.249e-03 second: 3.036e-03 infty: 1.146e-02 bias: -3.369e-15 P time: 4.28471 first: 2.254e-03 second: 3.035e-03 infty: 1.148e-02 bias: -9.276e-16 P time: 4.29173 first: 2.260e-03 second: 3.036e-03 infty: 1.151e-02 bias: -1.593e-15 P time: 4.29874 first: 2.266e-03 second: 3.038e-03 infty: 1.154e-02 bias: -3.900e-17 P time: 4.30575 first: 2.271e-03 second: 3.041e-03 infty: 1.158e-02 bias: 1.624e-15 P time: 4.31276 first: 2.276e-03 second: 3.045e-03 infty: 1.163e-02 bias: -2.261e-15 P time: 4.31978 first: 2.281e-03 second: 3.050e-03 infty: 1.168e-02 bias: 1.829e-16 P time: 4.32679 first: 2.285e-03 second: 3.056e-03 infty: 1.174e-02 bias: -7.055e-16 P time: 4.3338 first: 2.288e-03 second: 3.063e-03 infty: 1.180e-02 bias: 1.404e-15 P time: 4.34081 first: 2.292e-03 second: 3.071e-03 infty: 1.187e-02 bias: -9.281e-16 P time: 4.34783 first: 2.295e-03 second: 3.081e-03 infty: 1.193e-02 bias: -9.287e-16 P time: 4.35484 first: 2.298e-03 second: 3.091e-03 infty: 1.200e-02 bias: -4.845e-16 P time: 4.36185 first: 2.302e-03 second: 3.102e-03 infty: 1.207e-02 bias: 2.400e-15 P time: 4.36886 first: 2.306e-03 second: 3.115e-03 infty: 1.214e-02 bias: -1.154e-15 P time: 4.37588 first: 2.311e-03 second: 3.129e-03 infty: 1.220e-02 bias: 5.062e-15 P time: 4.38289 first: 2.318e-03 second: 3.144e-03 infty: 1.225e-02 bias: 2.883e-16 P time: 4.3899 first: 2.327e-03 second: 3.160e-03 infty: 1.230e-02 bias: -3.152e-15 P time: 4.39691 first: 2.338e-03 second: 3.177e-03 infty: 1.234e-02 bias: 5.101e-16 P time: 4.40393 first: 2.351e-03 second: 3.194e-03 infty: 1.236e-02 bias: 1.397e-15 P time: 4.41094 first: 2.363e-03 second: 3.212e-03 infty: 1.238e-02 bias: -7.114e-16 P time: 4.41795 first: 2.376e-03 second: 3.229e-03 infty: 1.238e-02 bias: -4.889e-16 P time: 4.42496 first: 2.387e-03 second: 3.246e-03 infty: 1.236e-02 bias: -1.157e-15 P time: 4.43198 first: 2.398e-03 second: 3.262e-03 infty: 1.233e-02 bias: -7.126e-16 P time: 4.43899 first: 2.407e-03 second: 3.278e-03 infty: 1.229e-02 bias: 2.396e-15 P time: 4.446 first: 2.417e-03 second: 3.293e-03 infty: 1.223e-02 bias: 2.286e-15 P time: 4.45302 first: 2.425e-03 second: 3.306e-03 infty: 1.216e-02 bias: 1.510e-15 P time: 4.46003 first: 2.433e-03 second: 3.319e-03 infty: 1.208e-02 bias: 1.065e-15 P time: 4.46704 first: 2.442e-03 second: 3.331e-03 infty: 1.198e-02 bias: 3.730e-15 P time: 4.47405 first: 2.450e-03 second: 3.342e-03 infty: 1.188e-02 bias: -3.599e-15 P time: 4.48107 first: 2.460e-03 second: 3.352e-03 infty: 1.177e-02 bias: -1.157e-15 P time: 4.48808 first: 2.471e-03 second: 3.362e-03 infty: 1.165e-02 bias: 1.396e-15 P time: 4.49509 first: 2.483e-03 second: 3.372e-03 infty: 1.153e-02 bias: -4.045e-15 P time: 4.5021 first: 2.496e-03 second: 3.382e-03 infty: 1.141e-02 bias: 5.063e-16 P time: 4.50912 first: 2.509e-03 second: 3.392e-03 infty: 1.129e-02 bias: 9.510e-16 P time: 4.51613 first: 2.522e-03 second: 3.403e-03 infty: 1.118e-02 bias: 2.616e-15 P time: 4.52314 first: 2.535e-03 second: 3.413e-03 infty: 1.107e-02 bias: 1.745e-16 P time: 4.53015 first: 2.548e-03 second: 3.423e-03 infty: 1.097e-02 bias: 8.409e-16 P time: 4.53717 first: 2.562e-03 second: 3.432e-03 infty: 1.088e-02 bias: -1.603e-15 P time: 4.54418 first: 2.577e-03 second: 3.442e-03 infty: 1.080e-02 bias: -9.365e-16 P time: 4.55119 first: 2.591e-03 second: 3.450e-03 infty: 1.074e-02 bias: -2.715e-15 P time: 4.5582 first: 2.604e-03 second: 3.458e-03 infty: 1.069e-02 bias: -1.162e-15 P time: 4.56522 first: 2.615e-03 second: 3.465e-03 infty: 1.066e-02 bias: 2.725e-15 P time: 4.57223 first: 2.624e-03 second: 3.472e-03 infty: 1.064e-02 bias: 2.390e-15 P time: 4.57924 first: 2.632e-03 second: 3.477e-03 infty: 1.065e-02 bias: 2.946e-15 P time: 4.58626 first: 2.639e-03 second: 3.481e-03 infty: 1.067e-02 bias: 1.059e-15 P time: 4.59327 first: 2.646e-03 second: 3.484e-03 infty: 1.070e-02 bias: -2.724e-16 P time: 4.60028 first: 2.652e-03 second: 3.486e-03 infty: 1.075e-02 bias: 1.726e-15 P time: 4.60729 first: 2.656e-03 second: 3.488e-03 infty: 1.082e-02 bias: -2.714e-16 P time: 4.61431 first: 2.660e-03 second: 3.489e-03 infty: 1.091e-02 bias: -9.362e-16 P time: 4.62132 first: 2.662e-03 second: 3.489e-03 infty: 1.101e-02 bias: -2.712e-15 P time: 4.62833 first: 2.663e-03 second: 3.489e-03 infty: 1.112e-02 bias: -3.824e-15 P time: 4.63534 first: 2.665e-03 second: 3.488e-03 infty: 1.124e-02 bias: 6.172e-16 P time: 4.64236 first: 2.666e-03 second: 3.487e-03 infty: 1.138e-02 bias: 1.061e-15 P time: 4.64937 first: 2.668e-03 second: 3.485e-03 infty: 1.152e-02 bias: -2.723e-16 P time: 4.65638 first: 2.669e-03 second: 3.484e-03 infty: 1.167e-02 bias: 2.831e-16 P time: 4.66339 first: 2.668e-03 second: 3.481e-03 infty: 1.182e-02 bias: 2.836e-16 P time: 4.67041 first: 2.666e-03 second: 3.478e-03 infty: 1.198e-02 bias: -1.381e-15 P time: 4.67742 first: 2.663e-03 second: 3.475e-03 infty: 1.214e-02 bias: 3.965e-16 P time: 4.68443 first: 2.657e-03 second: 3.470e-03 infty: 1.230e-02 bias: -9.346e-16 P time: 4.69144 first: 2.649e-03 second: 3.466e-03 infty: 1.245e-02 bias: 1.731e-15 P time: 4.69846 first: 2.639e-03 second: 3.460e-03 infty: 1.260e-02 bias: -4.367e-17 P time: 4.70547 first: 2.628e-03 second: 3.453e-03 infty: 1.275e-02 bias: 2.399e-15 P time: 4.71248 first: 2.615e-03 second: 3.446e-03 infty: 1.289e-02 bias: 3.997e-16 P time: 4.7195 first: 2.602e-03 second: 3.439e-03 infty: 1.302e-02 bias: -1.822e-15 P time: 4.72651 first: 2.589e-03 second: 3.431e-03 infty: 1.314e-02 bias: -1.598e-15 P time: 4.73352 first: 2.577e-03 second: 3.423e-03 infty: 1.324e-02 bias: -1.820e-15 P time: 4.74053 first: 2.564e-03 second: 3.415e-03 infty: 1.334e-02 bias: -2.712e-15 P time: 4.74755 first: 2.553e-03 second: 3.407e-03 infty: 1.342e-02 bias: 3.172e-15 P time: 4.75456 first: 2.542e-03 second: 3.399e-03 infty: 1.349e-02 bias: -4.911e-16 P time: 4.76157 first: 2.533e-03 second: 3.392e-03 infty: 1.355e-02 bias: -4.904e-16 P time: 4.76858 first: 2.525e-03 second: 3.385e-03 infty: 1.359e-02 bias: -1.158e-15 P time: 4.7756 first: 2.518e-03 second: 3.379e-03 infty: 1.362e-02 bias: -7.134e-16 P time: 4.78261 first: 2.511e-03 second: 3.374e-03 infty: 1.363e-02 bias: -7.127e-16 P time: 4.78962 first: 2.505e-03 second: 3.369e-03 infty: 1.363e-02 bias: 7.299e-16 P time: 4.79663 first: 2.501e-03 second: 3.365e-03 infty: 1.362e-02 bias: 1.396e-15 P time: 4.80365 first: 2.498e-03 second: 3.362e-03 infty: 1.359e-02 bias: -4.910e-16 P time: 4.81066 first: 2.496e-03 second: 3.360e-03 infty: 1.356e-02 bias: 1.619e-15 P time: 4.81767 first: 2.494e-03 second: 3.359e-03 infty: 1.351e-02 bias: -2.690e-16 P time: 4.82468 first: 2.493e-03 second: 3.358e-03 infty: 1.346e-02 bias: -1.600e-15 P time: 4.8317 first: 2.492e-03 second: 3.359e-03 infty: 1.340e-02 bias: 8.440e-16 P time: 4.83871 first: 2.492e-03 second: 3.360e-03 infty: 1.333e-02 bias: -9.317e-16 P time: 4.84572 first: 2.493e-03 second: 3.362e-03 infty: 1.325e-02 bias: -2.265e-15 P time: 4.85273 first: 2.495e-03 second: 3.366e-03 infty: 1.318e-02 bias: -2.044e-15 P time: 4.85975 first: 2.498e-03 second: 3.370e-03 infty: 1.310e-02 bias: 6.402e-17 P time: 4.86676 first: 2.502e-03 second: 3.376e-03 infty: 1.303e-02 bias: -1.379e-15 P time: 4.87377 first: 2.508e-03 second: 3.383e-03 infty: 1.295e-02 bias: -1.378e-15 P time: 4.88079 first: 2.515e-03 second: 3.392e-03 infty: 1.288e-02 bias: -3.155e-15 P time: 4.8878 first: 2.522e-03 second: 3.401e-03 infty: 1.282e-02 bias: -1.157e-15 P time: 4.89481 first: 2.531e-03 second: 3.413e-03 infty: 1.276e-02 bias: -7.132e-16 P time: 4.90182 first: 2.541e-03 second: 3.425e-03 infty: 1.271e-02 bias: -4.900e-16 P time: 4.90884 first: 2.552e-03 second: 3.439e-03 infty: 1.267e-02 bias: 2.175e-15 P time: 4.91585 first: 2.563e-03 second: 3.454e-03 infty: 1.263e-02 bias: -1.377e-15 P time: 4.92286 first: 2.576e-03 second: 3.470e-03 infty: 1.260e-02 bias: 1.066e-15 P time: 4.92987 first: 2.588e-03 second: 3.487e-03 infty: 1.258e-02 bias: -3.596e-15 P time: 4.93689 first: 2.602e-03 second: 3.504e-03 infty: 1.257e-02 bias: -2.647e-16 P time: 4.9439 first: 2.616e-03 second: 3.521e-03 infty: 1.256e-02 bias: 1.784e-16 P time: 4.95091 first: 2.630e-03 second: 3.538e-03 infty: 1.256e-02 bias: 2.621e-15 P time: 4.95792 first: 2.644e-03 second: 3.555e-03 infty: 1.257e-02 bias: 1.514e-15 P time: 4.96494 first: 2.657e-03 second: 3.572e-03 infty: 1.258e-02 bias: -3.371e-15 P time: 4.97195 first: 2.670e-03 second: 3.588e-03 infty: 1.259e-02 bias: 7.370e-16 P time: 4.97896 first: 2.682e-03 second: 3.603e-03 infty: 1.260e-02 bias: -2.927e-15 P time: 4.98597 first: 2.692e-03 second: 3.617e-03 infty: 1.261e-02 bias: -1.593e-15 P time: 4.99299 first: 2.701e-03 second: 3.631e-03 infty: 1.262e-02 bias: -2.481e-15 P time: 5 first: 2.708e-03 second: 3.643e-03 infty: 1.263e-02 bias: -1.593e-15 gerris-snapshot-131206/test/nonlinear/error-ocean-1.ref0000644000175100017510000013025512250371171017704 00000000000000P/G time: 0 first: 0.000e+00 second: 0.000e+00 infty: 0.000e+00 bias: 0.000e+00 P/G time: 0.01 first: 1.501e-04 second: 2.903e-04 infty: 1.648e-03 bias: 9.418e-21 P/G time: 0.02 first: 2.924e-04 second: 5.227e-04 infty: 2.769e-03 bias: 3.488e-20 P/G time: 0.02998 first: 4.210e-04 second: 6.897e-04 infty: 3.215e-03 bias: 6.232e-20 P/G time: 0.0399599 first: 5.320e-04 second: 8.131e-04 infty: 3.075e-03 bias: 3.037e-20 P/G time: 0.0499399 first: 6.308e-04 second: 9.167e-04 infty: 2.594e-03 bias: 1.208e-19 P/G time: 0.0599198 first: 7.162e-04 second: 1.007e-03 infty: 2.538e-03 bias: 1.107e-20 P/G time: 0.0698998 first: 7.928e-04 second: 1.077e-03 infty: 2.581e-03 bias: 7.174e-20 P/G time: 0.0798798 first: 8.607e-04 second: 1.125e-03 infty: 2.637e-03 bias: -2.237e-19 P/G time: 0.0898597 first: 9.152e-04 second: 1.156e-03 infty: 2.712e-03 bias: -6.416e-20 P/G time: 0.0998397 first: 9.563e-04 second: 1.181e-03 infty: 2.682e-03 bias: 1.297e-19 P/G time: 0.10982 first: 9.876e-04 second: 1.204e-03 infty: 2.557e-03 bias: -1.143e-19 P/G time: 0.1198 first: 1.012e-03 second: 1.230e-03 infty: 2.864e-03 bias: -2.013e-19 P/G time: 0.12978 first: 1.034e-03 second: 1.262e-03 infty: 3.186e-03 bias: -1.143e-19 P/G time: 0.13976 first: 1.068e-03 second: 1.305e-03 infty: 3.424e-03 bias: 1.256e-19 P/G time: 0.149739 first: 1.110e-03 second: 1.357e-03 infty: 3.525e-03 bias: 1.915e-19 P/G time: 0.159719 first: 1.157e-03 second: 1.416e-03 infty: 3.580e-03 bias: 1.734e-19 P/G time: 0.169699 first: 1.208e-03 second: 1.475e-03 infty: 3.492e-03 bias: -1.553e-19 P/G time: 0.179679 first: 1.256e-03 second: 1.527e-03 infty: 3.472e-03 bias: -7.234e-20 P/G time: 0.189659 first: 1.290e-03 second: 1.564e-03 infty: 3.618e-03 bias: -1.091e-19 P/G time: 0.199639 first: 1.308e-03 second: 1.582e-03 infty: 3.654e-03 bias: 1.457e-19 P/G time: 0.209619 first: 1.308e-03 second: 1.577e-03 infty: 3.604e-03 bias: -1.483e-19 P/G time: 0.219599 first: 1.286e-03 second: 1.550e-03 infty: 3.508e-03 bias: -1.332e-19 P/G time: 0.229579 first: 1.247e-03 second: 1.505e-03 infty: 3.589e-03 bias: -7.517e-20 P/G time: 0.239559 first: 1.194e-03 second: 1.452e-03 infty: 3.726e-03 bias: 1.988e-19 P/G time: 0.249539 first: 1.131e-03 second: 1.401e-03 infty: 3.852e-03 bias: 1.245e-19 P/G time: 0.259519 first: 1.081e-03 second: 1.360e-03 infty: 3.949e-03 bias: 1.053e-19 P/G time: 0.269499 first: 1.070e-03 second: 1.336e-03 infty: 3.975e-03 bias: -7.442e-20 P/G time: 0.279479 first: 1.064e-03 second: 1.325e-03 infty: 3.895e-03 bias: 7.400e-20 P/G time: 0.289459 first: 1.055e-03 second: 1.324e-03 infty: 3.742e-03 bias: -7.286e-20 P/G time: 0.299439 first: 1.055e-03 second: 1.329e-03 infty: 3.612e-03 bias: -3.393e-21 P/G time: 0.309419 first: 1.058e-03 second: 1.339e-03 infty: 3.479e-03 bias: 7.321e-20 P/G time: 0.319399 first: 1.064e-03 second: 1.351e-03 infty: 3.372e-03 bias: -4.692e-20 P/G time: 0.329379 first: 1.066e-03 second: 1.363e-03 infty: 3.847e-03 bias: -7.035e-20 P/G time: 0.339359 first: 1.057e-03 second: 1.368e-03 infty: 4.172e-03 bias: 9.896e-20 P/G time: 0.349339 first: 1.041e-03 second: 1.361e-03 infty: 4.278e-03 bias: -8.141e-20 P/G time: 0.359319 first: 1.025e-03 second: 1.342e-03 infty: 4.179e-03 bias: -2.071e-19 P/G time: 0.369299 first: 1.011e-03 second: 1.314e-03 infty: 4.075e-03 bias: 1.127e-19 P/G time: 0.379279 first: 1.003e-03 second: 1.284e-03 infty: 3.956e-03 bias: 2.188e-19 P/G time: 0.389259 first: 1.001e-03 second: 1.259e-03 infty: 3.712e-03 bias: 1.314e-19 P/G time: 0.399238 first: 1.008e-03 second: 1.246e-03 infty: 3.291e-03 bias: 2.047e-19 P/G time: 0.409218 first: 1.024e-03 second: 1.247e-03 infty: 3.230e-03 bias: -2.036e-19 P/G time: 0.419198 first: 1.056e-03 second: 1.263e-03 infty: 3.443e-03 bias: 8.407e-20 P/G time: 0.429178 first: 1.094e-03 second: 1.289e-03 infty: 3.564e-03 bias: -1.721e-19 P/G time: 0.439158 first: 1.127e-03 second: 1.318e-03 infty: 3.639e-03 bias: 9.322e-20 P/G time: 0.449138 first: 1.149e-03 second: 1.344e-03 infty: 3.619e-03 bias: -1.939e-19 P/G time: 0.459118 first: 1.159e-03 second: 1.359e-03 infty: 3.413e-03 bias: -2.142e-19 P/G time: 0.469098 first: 1.154e-03 second: 1.358e-03 infty: 3.047e-03 bias: 2.946e-20 P/G time: 0.479078 first: 1.139e-03 second: 1.341e-03 infty: 2.834e-03 bias: 7.183e-20 P/G time: 0.489058 first: 1.113e-03 second: 1.307e-03 infty: 2.725e-03 bias: 6.672e-20 P/G time: 0.499038 first: 1.075e-03 second: 1.260e-03 infty: 2.831e-03 bias: -2.313e-20 P/G time: 0.509018 first: 1.032e-03 second: 1.205e-03 infty: 2.956e-03 bias: -2.738e-19 P/G time: 0.518998 first: 9.881e-04 second: 1.145e-03 infty: 2.944e-03 bias: 2.212e-19 P/G time: 0.528978 first: 9.436e-04 second: 1.086e-03 infty: 2.768e-03 bias: 1.814e-19 P/G time: 0.538958 first: 8.921e-04 second: 1.036e-03 infty: 2.762e-03 bias: -9.063e-20 P/G time: 0.548938 first: 8.433e-04 second: 1.003e-03 infty: 2.710e-03 bias: 7.083e-20 P/G time: 0.558918 first: 8.192e-04 second: 9.932e-04 infty: 2.537e-03 bias: 8.786e-20 P/G time: 0.568898 first: 8.116e-04 second: 1.009e-03 infty: 2.467e-03 bias: -5.966e-21 P/G time: 0.578878 first: 8.275e-04 second: 1.044e-03 infty: 2.551e-03 bias: 1.095e-19 P/G time: 0.588858 first: 8.680e-04 second: 1.090e-03 infty: 2.908e-03 bias: 1.638e-19 P/G time: 0.598838 first: 9.133e-04 second: 1.137e-03 infty: 3.113e-03 bias: 1.062e-19 P/G time: 0.608818 first: 9.585e-04 second: 1.179e-03 infty: 3.131e-03 bias: -6.102e-20 P/G time: 0.618798 first: 9.971e-04 second: 1.212e-03 infty: 2.988e-03 bias: -1.394e-19 P/G time: 0.628778 first: 1.032e-03 second: 1.237e-03 infty: 2.839e-03 bias: 1.452e-19 P/G time: 0.638758 first: 1.058e-03 second: 1.256e-03 infty: 2.866e-03 bias: 4.406e-20 P/G time: 0.648737 first: 1.077e-03 second: 1.273e-03 infty: 2.901e-03 bias: -1.689e-20 P/G time: 0.658717 first: 1.109e-03 second: 1.290e-03 infty: 2.998e-03 bias: -3.815e-20 P/G time: 0.668697 first: 1.142e-03 second: 1.309e-03 infty: 2.994e-03 bias: 9.049e-20 P/G time: 0.678677 first: 1.171e-03 second: 1.331e-03 infty: 2.869e-03 bias: -2.823e-20 P/G time: 0.688657 first: 1.191e-03 second: 1.356e-03 infty: 2.895e-03 bias: 2.468e-20 P/G time: 0.698637 first: 1.203e-03 second: 1.384e-03 infty: 3.467e-03 bias: 4.789e-20 P/G time: 0.708617 first: 1.210e-03 second: 1.412e-03 infty: 3.860e-03 bias: 8.470e-22 P/G time: 0.718597 first: 1.214e-03 second: 1.436e-03 infty: 4.081e-03 bias: -6.050e-20 P/G time: 0.728577 first: 1.213e-03 second: 1.452e-03 infty: 4.168e-03 bias: -1.296e-20 P/G time: 0.738557 first: 1.209e-03 second: 1.456e-03 infty: 4.077e-03 bias: 1.286e-19 P/G time: 0.748537 first: 1.203e-03 second: 1.447e-03 infty: 3.923e-03 bias: -1.188e-19 P/G time: 0.758517 first: 1.193e-03 second: 1.422e-03 infty: 3.673e-03 bias: 9.867e-20 P/G time: 0.768497 first: 1.179e-03 second: 1.383e-03 infty: 3.381e-03 bias: 1.691e-19 P/G time: 0.778477 first: 1.158e-03 second: 1.334e-03 infty: 3.082e-03 bias: 1.499e-19 P/G time: 0.788457 first: 1.130e-03 second: 1.280e-03 infty: 2.819e-03 bias: 1.402e-19 P/G time: 0.798437 first: 1.092e-03 second: 1.227e-03 infty: 2.714e-03 bias: 1.051e-19 P/G time: 0.808417 first: 1.050e-03 second: 1.183e-03 infty: 2.790e-03 bias: -1.789e-19 P/G time: 0.818397 first: 1.010e-03 second: 1.151e-03 infty: 2.957e-03 bias: -1.754e-19 P/G time: 0.828377 first: 9.727e-04 second: 1.131e-03 infty: 3.069e-03 bias: 7.581e-20 P/G time: 0.838357 first: 9.430e-04 second: 1.119e-03 infty: 3.140e-03 bias: -8.116e-20 P/G time: 0.848337 first: 9.397e-04 second: 1.110e-03 infty: 3.082e-03 bias: -1.370e-19 P/G time: 0.858317 first: 9.417e-04 second: 1.097e-03 infty: 2.864e-03 bias: 4.996e-22 P/G time: 0.868297 first: 9.379e-04 second: 1.075e-03 infty: 2.480e-03 bias: 1.892e-19 P/G time: 0.878277 first: 9.190e-04 second: 1.042e-03 infty: 2.014e-03 bias: 1.471e-20 P/G time: 0.888257 first: 8.792e-04 second: 9.976e-04 infty: 1.893e-03 bias: -9.151e-20 P/G time: 0.898236 first: 8.222e-04 second: 9.441e-04 infty: 1.928e-03 bias: -6.520e-20 P/G time: 0.908216 first: 7.572e-04 second: 8.854e-04 infty: 1.957e-03 bias: -6.646e-20 P/G time: 0.918196 first: 7.059e-04 second: 8.274e-04 infty: 1.910e-03 bias: 3.284e-20 P/G time: 0.928176 first: 6.619e-04 second: 7.784e-04 infty: 1.775e-03 bias: -3.658e-20 P/G time: 0.938156 first: 6.292e-04 second: 7.482e-04 infty: 2.002e-03 bias: -6.091e-20 P/G time: 0.948136 first: 6.176e-04 second: 7.457e-04 infty: 2.291e-03 bias: -5.597e-20 P/G time: 0.958116 first: 6.389e-04 second: 7.740e-04 infty: 2.432e-03 bias: -7.170e-21 P/G time: 0.968096 first: 6.944e-04 second: 8.285e-04 infty: 2.447e-03 bias: -6.757e-20 P/G time: 0.978076 first: 7.706e-04 second: 8.982e-04 infty: 2.401e-03 bias: 3.392e-20 P/G time: 0.988056 first: 8.497e-04 second: 9.711e-04 infty: 2.373e-03 bias: 1.161e-19 P/G time: 0.998036 first: 9.144e-04 second: 1.037e-03 infty: 2.413e-03 bias: -9.562e-20 P/G time: 1.00802 first: 9.634e-04 second: 1.091e-03 infty: 2.402e-03 bias: -1.172e-19 P/G time: 1.018 first: 9.940e-04 second: 1.130e-03 infty: 2.305e-03 bias: -5.954e-20 P/G time: 1.02798 first: 1.016e-03 second: 1.159e-03 infty: 2.263e-03 bias: -1.080e-21 P/G time: 1.03796 first: 1.038e-03 second: 1.184e-03 infty: 2.461e-03 bias: 6.137e-20 P/G time: 1.04794 first: 1.063e-03 second: 1.211e-03 infty: 2.635e-03 bias: 1.105e-19 P/G time: 1.05792 first: 1.098e-03 second: 1.248e-03 infty: 2.766e-03 bias: 8.070e-20 P/G time: 1.0679 first: 1.135e-03 second: 1.296e-03 infty: 2.847e-03 bias: 2.032e-19 P/G time: 1.07788 first: 1.173e-03 second: 1.355e-03 infty: 2.920e-03 bias: -7.080e-20 P/G time: 1.08786 first: 1.210e-03 second: 1.421e-03 infty: 3.008e-03 bias: 3.164e-20 P/G time: 1.09784 first: 1.249e-03 second: 1.486e-03 infty: 3.553e-03 bias: -1.484e-19 P/G time: 1.10782 first: 1.286e-03 second: 1.545e-03 infty: 3.903e-03 bias: 7.393e-20 P/G time: 1.1178 first: 1.317e-03 second: 1.591e-03 infty: 4.033e-03 bias: -1.968e-19 P/G time: 1.12778 first: 1.339e-03 second: 1.621e-03 infty: 3.943e-03 bias: 3.691e-20 P/G time: 1.13776 first: 1.351e-03 second: 1.633e-03 infty: 3.653e-03 bias: -6.745e-20 P/G time: 1.14774 first: 1.350e-03 second: 1.627e-03 infty: 3.688e-03 bias: -3.628e-20 P/G time: 1.15772 first: 1.334e-03 second: 1.602e-03 infty: 3.737e-03 bias: 1.190e-19 P/G time: 1.1677 first: 1.304e-03 second: 1.562e-03 infty: 3.708e-03 bias: -1.874e-19 P/G time: 1.17768 first: 1.262e-03 second: 1.511e-03 infty: 3.612e-03 bias: -2.721e-20 P/G time: 1.18766 first: 1.220e-03 second: 1.455e-03 infty: 3.488e-03 bias: 7.854e-20 P/G time: 1.19764 first: 1.180e-03 second: 1.402e-03 infty: 3.360e-03 bias: 1.042e-19 P/G time: 1.20762 first: 1.142e-03 second: 1.358e-03 infty: 3.262e-03 bias: -6.067e-20 P/G time: 1.2176 first: 1.121e-03 second: 1.330e-03 infty: 3.219e-03 bias: -1.483e-19 P/G time: 1.22758 first: 1.120e-03 second: 1.316e-03 infty: 3.154e-03 bias: 1.662e-19 P/G time: 1.23756 first: 1.119e-03 second: 1.312e-03 infty: 3.089e-03 bias: 1.272e-19 P/G time: 1.24754 first: 1.113e-03 second: 1.309e-03 infty: 3.002e-03 bias: 6.226e-20 P/G time: 1.25752 first: 1.100e-03 second: 1.298e-03 infty: 2.899e-03 bias: 5.667e-20 P/G time: 1.26749 first: 1.076e-03 second: 1.273e-03 infty: 2.967e-03 bias: 5.530e-20 P/G time: 1.27747 first: 1.041e-03 second: 1.232e-03 infty: 2.965e-03 bias: -6.728e-20 P/G time: 1.28745 first: 1.003e-03 second: 1.177e-03 infty: 2.827e-03 bias: 8.388e-20 P/G time: 1.29743 first: 9.624e-04 second: 1.114e-03 infty: 2.530e-03 bias: 1.609e-20 P/G time: 1.30741 first: 9.111e-04 second: 1.049e-03 infty: 2.242e-03 bias: 5.042e-20 P/G time: 1.31739 first: 8.620e-04 second: 9.908e-04 infty: 2.030e-03 bias: 1.053e-20 P/G time: 1.32737 first: 8.190e-04 second: 9.474e-04 infty: 1.859e-03 bias: -3.177e-20 P/G time: 1.33735 first: 7.926e-04 second: 9.240e-04 infty: 2.064e-03 bias: 6.469e-20 P/G time: 1.34733 first: 7.860e-04 second: 9.221e-04 infty: 2.328e-03 bias: 1.142e-19 P/G time: 1.35731 first: 7.888e-04 second: 9.391e-04 infty: 2.472e-03 bias: -8.665e-20 P/G time: 1.36729 first: 8.066e-04 second: 9.695e-04 infty: 2.486e-03 bias: 2.794e-20 P/G time: 1.37727 first: 8.382e-04 second: 1.006e-03 infty: 2.377e-03 bias: -1.429e-19 P/G time: 1.38725 first: 8.831e-04 second: 1.043e-03 infty: 2.616e-03 bias: -5.281e-20 P/G time: 1.39723 first: 9.170e-04 second: 1.072e-03 infty: 2.736e-03 bias: 1.760e-19 P/G time: 1.40721 first: 9.318e-04 second: 1.091e-03 infty: 2.736e-03 bias: -7.036e-20 P/G time: 1.41719 first: 9.260e-04 second: 1.096e-03 infty: 2.656e-03 bias: -1.218e-19 P/G time: 1.42717 first: 9.038e-04 second: 1.088e-03 infty: 2.852e-03 bias: -7.419e-20 P/G time: 1.43715 first: 8.749e-04 second: 1.071e-03 infty: 3.176e-03 bias: 1.043e-19 P/G time: 1.44713 first: 8.577e-04 second: 1.051e-03 infty: 3.365e-03 bias: -7.707e-20 P/G time: 1.45711 first: 8.506e-04 second: 1.037e-03 infty: 3.431e-03 bias: -6.604e-21 P/G time: 1.46709 first: 8.446e-04 second: 1.036e-03 infty: 3.406e-03 bias: -4.616e-20 P/G time: 1.47707 first: 8.462e-04 second: 1.053e-03 infty: 3.472e-03 bias: -2.334e-19 P/G time: 1.48705 first: 8.566e-04 second: 1.084e-03 infty: 3.644e-03 bias: 1.406e-19 P/G time: 1.49703 first: 8.784e-04 second: 1.122e-03 infty: 3.719e-03 bias: -1.826e-21 P/G time: 1.50701 first: 9.168e-04 second: 1.162e-03 infty: 3.618e-03 bias: -1.898e-19 P/G time: 1.51699 first: 9.676e-04 second: 1.197e-03 infty: 3.354e-03 bias: 2.026e-20 P/G time: 1.52697 first: 1.013e-03 second: 1.221e-03 infty: 3.158e-03 bias: 5.929e-21 P/G time: 1.53695 first: 1.043e-03 second: 1.232e-03 infty: 3.005e-03 bias: 3.851e-21 P/G time: 1.54693 first: 1.055e-03 second: 1.229e-03 infty: 2.740e-03 bias: -7.924e-20 P/G time: 1.55691 first: 1.049e-03 second: 1.211e-03 infty: 2.525e-03 bias: 8.912e-20 P/G time: 1.56689 first: 1.024e-03 second: 1.181e-03 infty: 2.528e-03 bias: -7.883e-20 P/G time: 1.57687 first: 9.830e-04 second: 1.143e-03 infty: 2.546e-03 bias: -2.191e-19 P/G time: 1.58685 first: 9.454e-04 second: 1.104e-03 infty: 2.607e-03 bias: 1.506e-19 P/G time: 1.59683 first: 9.018e-04 second: 1.072e-03 infty: 2.702e-03 bias: 9.814e-20 P/G time: 1.60681 first: 8.585e-04 second: 1.055e-03 infty: 2.793e-03 bias: -5.893e-20 P/G time: 1.61679 first: 8.520e-04 second: 1.059e-03 infty: 2.886e-03 bias: -9.284e-21 P/G time: 1.62677 first: 8.756e-04 second: 1.083e-03 infty: 2.941e-03 bias: 2.306e-20 P/G time: 1.63675 first: 9.202e-04 second: 1.124e-03 infty: 2.995e-03 bias: 2.069e-20 P/G time: 1.64673 first: 9.749e-04 second: 1.173e-03 infty: 3.087e-03 bias: 9.524e-20 P/G time: 1.65671 first: 1.026e-03 second: 1.223e-03 infty: 3.138e-03 bias: 1.698e-19 P/G time: 1.66669 first: 1.063e-03 second: 1.266e-03 infty: 3.147e-03 bias: -6.766e-20 P/G time: 1.67667 first: 1.089e-03 second: 1.299e-03 infty: 3.108e-03 bias: -1.685e-19 P/G time: 1.68665 first: 1.108e-03 second: 1.321e-03 infty: 3.050e-03 bias: 8.038e-20 P/G time: 1.69663 first: 1.125e-03 second: 1.332e-03 infty: 3.000e-03 bias: 1.211e-19 P/G time: 1.70661 first: 1.143e-03 second: 1.337e-03 infty: 2.935e-03 bias: 2.377e-20 P/G time: 1.71659 first: 1.154e-03 second: 1.340e-03 infty: 2.869e-03 bias: -1.940e-19 P/G time: 1.72657 first: 1.161e-03 second: 1.346e-03 infty: 2.769e-03 bias: 1.759e-19 P/G time: 1.73655 first: 1.169e-03 second: 1.358e-03 infty: 2.672e-03 bias: -1.100e-19 P/G time: 1.74653 first: 1.192e-03 second: 1.379e-03 infty: 2.594e-03 bias: 1.308e-19 P/G time: 1.75651 first: 1.222e-03 second: 1.408e-03 infty: 2.715e-03 bias: -1.538e-19 P/G time: 1.76649 first: 1.252e-03 second: 1.443e-03 infty: 2.948e-03 bias: 2.387e-19 P/G time: 1.77647 first: 1.276e-03 second: 1.479e-03 infty: 3.336e-03 bias: -2.122e-19 P/G time: 1.78645 first: 1.288e-03 second: 1.509e-03 infty: 3.669e-03 bias: 8.489e-20 P/G time: 1.79643 first: 1.288e-03 second: 1.526e-03 infty: 3.896e-03 bias: 1.291e-19 P/G time: 1.80641 first: 1.272e-03 second: 1.525e-03 infty: 3.975e-03 bias: -3.129e-20 P/G time: 1.81639 first: 1.236e-03 second: 1.501e-03 infty: 3.910e-03 bias: 1.142e-19 P/G time: 1.82637 first: 1.181e-03 second: 1.454e-03 infty: 3.741e-03 bias: -1.502e-19 P/G time: 1.83635 first: 1.115e-03 second: 1.386e-03 infty: 3.898e-03 bias: -8.169e-20 P/G time: 1.84633 first: 1.039e-03 second: 1.303e-03 infty: 3.937e-03 bias: -1.066e-19 P/G time: 1.85631 first: 9.605e-04 second: 1.214e-03 infty: 3.841e-03 bias: -1.117e-19 P/G time: 1.86629 first: 8.898e-04 second: 1.130e-03 infty: 3.607e-03 bias: 5.700e-20 P/G time: 1.87627 first: 8.365e-04 second: 1.062e-03 infty: 3.246e-03 bias: 1.102e-19 P/G time: 1.88625 first: 8.044e-04 second: 1.018e-03 infty: 2.778e-03 bias: 1.472e-20 P/G time: 1.89623 first: 7.886e-04 second: 1.001e-03 infty: 2.576e-03 bias: -1.259e-19 P/G time: 1.90621 first: 7.979e-04 second: 1.009e-03 infty: 2.479e-03 bias: -8.840e-20 P/G time: 1.91619 first: 8.281e-04 second: 1.034e-03 infty: 2.418e-03 bias: -5.991e-20 P/G time: 1.92617 first: 8.601e-04 second: 1.064e-03 infty: 2.476e-03 bias: 1.020e-19 P/G time: 1.93615 first: 8.899e-04 second: 1.091e-03 infty: 2.512e-03 bias: -1.055e-19 P/G time: 1.94613 first: 9.161e-04 second: 1.106e-03 infty: 2.532e-03 bias: 1.241e-19 P/G time: 1.95611 first: 9.260e-04 second: 1.103e-03 infty: 2.503e-03 bias: 5.366e-20 P/G time: 1.96609 first: 9.161e-04 second: 1.082e-03 infty: 2.420e-03 bias: 1.437e-19 P/G time: 1.97607 first: 8.920e-04 second: 1.044e-03 infty: 2.300e-03 bias: 2.585e-20 P/G time: 1.98605 first: 8.542e-04 second: 9.979e-04 infty: 2.552e-03 bias: -1.547e-19 P/G time: 1.99603 first: 8.111e-04 second: 9.543e-04 infty: 2.773e-03 bias: 6.492e-20 P/G time: 2.00601 first: 7.819e-04 second: 9.275e-04 infty: 2.901e-03 bias: -1.124e-19 P/G time: 2.01599 first: 7.817e-04 second: 9.282e-04 infty: 2.937e-03 bias: -1.039e-19 P/G time: 2.02597 first: 8.188e-04 second: 9.586e-04 infty: 2.890e-03 bias: -7.925e-20 P/G time: 2.03595 first: 8.794e-04 second: 1.011e-03 infty: 2.770e-03 bias: -1.545e-20 P/G time: 2.04593 first: 9.359e-04 second: 1.070e-03 infty: 2.590e-03 bias: 2.550e-20 P/G time: 2.05591 first: 9.789e-04 second: 1.124e-03 infty: 2.366e-03 bias: 6.147e-20 P/G time: 2.06589 first: 1.002e-03 second: 1.160e-03 infty: 2.323e-03 bias: -2.090e-20 P/G time: 2.07587 first: 1.006e-03 second: 1.173e-03 infty: 2.394e-03 bias: 3.798e-20 P/G time: 2.08585 first: 9.878e-04 second: 1.160e-03 infty: 2.465e-03 bias: 7.597e-21 P/G time: 2.09583 first: 9.548e-04 second: 1.125e-03 infty: 2.484e-03 bias: 3.517e-20 P/G time: 2.10581 first: 9.119e-04 second: 1.072e-03 infty: 2.423e-03 bias: 7.002e-20 P/G time: 2.11579 first: 8.644e-04 second: 1.011e-03 infty: 2.278e-03 bias: 2.345e-20 P/G time: 2.12577 first: 8.246e-04 second: 9.504e-04 infty: 2.047e-03 bias: -7.433e-20 P/G time: 2.13575 first: 7.933e-04 second: 9.053e-04 infty: 1.951e-03 bias: -4.319e-20 P/G time: 2.14573 first: 7.785e-04 second: 8.875e-04 infty: 2.096e-03 bias: -1.306e-19 P/G time: 2.15571 first: 7.821e-04 second: 9.045e-04 infty: 2.213e-03 bias: 1.272e-19 P/G time: 2.16569 first: 8.136e-04 second: 9.542e-04 infty: 2.323e-03 bias: 1.363e-19 P/G time: 2.17567 first: 8.956e-04 second: 1.026e-03 infty: 2.383e-03 bias: 7.361e-20 P/G time: 2.18565 first: 9.855e-04 second: 1.107e-03 infty: 2.440e-03 bias: 1.001e-20 P/G time: 2.19563 first: 1.061e-03 second: 1.181e-03 infty: 2.466e-03 bias: 1.374e-19 P/G time: 2.20561 first: 1.115e-03 second: 1.239e-03 infty: 2.472e-03 bias: 5.396e-20 P/G time: 2.21559 first: 1.147e-03 second: 1.273e-03 infty: 2.415e-03 bias: -2.143e-20 P/G time: 2.22557 first: 1.156e-03 second: 1.280e-03 infty: 2.535e-03 bias: -6.745e-20 P/G time: 2.23555 first: 1.141e-03 second: 1.261e-03 infty: 2.627e-03 bias: -5.718e-20 P/G time: 2.24553 first: 1.106e-03 second: 1.222e-03 infty: 2.555e-03 bias: -2.601e-20 P/G time: 2.25551 first: 1.058e-03 second: 1.172e-03 infty: 2.347e-03 bias: -1.755e-19 P/G time: 2.26549 first: 1.006e-03 second: 1.123e-03 infty: 2.171e-03 bias: -1.803e-20 P/G time: 2.27547 first: 9.654e-04 second: 1.087e-03 infty: 2.013e-03 bias: 7.254e-20 P/G time: 2.28545 first: 9.510e-04 second: 1.073e-03 infty: 1.999e-03 bias: 8.748e-20 P/G time: 2.29543 first: 9.606e-04 second: 1.084e-03 infty: 2.053e-03 bias: -1.059e-19 P/G time: 2.30541 first: 9.807e-04 second: 1.118e-03 infty: 2.099e-03 bias: 1.146e-19 P/G time: 2.31539 first: 1.010e-03 second: 1.166e-03 infty: 2.191e-03 bias: -1.356e-19 P/G time: 2.32537 first: 1.046e-03 second: 1.219e-03 infty: 2.397e-03 bias: -7.350e-20 P/G time: 2.33535 first: 1.079e-03 second: 1.269e-03 infty: 2.666e-03 bias: -2.082e-19 P/G time: 2.34533 first: 1.103e-03 second: 1.308e-03 infty: 2.981e-03 bias: 1.300e-19 P/G time: 2.35531 first: 1.114e-03 second: 1.332e-03 infty: 3.267e-03 bias: 9.814e-20 P/G time: 2.36529 first: 1.110e-03 second: 1.339e-03 infty: 3.483e-03 bias: 1.532e-19 P/G time: 2.37527 first: 1.090e-03 second: 1.331e-03 infty: 3.612e-03 bias: -1.114e-19 P/G time: 2.38525 first: 1.057e-03 second: 1.312e-03 infty: 3.683e-03 bias: 1.808e-19 P/G time: 2.39523 first: 1.020e-03 second: 1.289e-03 infty: 3.697e-03 bias: 8.840e-20 P/G time: 2.40521 first: 9.967e-04 second: 1.272e-03 infty: 3.643e-03 bias: -6.838e-20 P/G time: 2.41519 first: 1.005e-03 second: 1.269e-03 infty: 3.611e-03 bias: -6.634e-20 P/G time: 2.42517 first: 1.016e-03 second: 1.284e-03 infty: 3.580e-03 bias: -1.165e-19 P/G time: 2.43515 first: 1.029e-03 second: 1.315e-03 infty: 3.620e-03 bias: -4.489e-20 P/G time: 2.44513 first: 1.054e-03 second: 1.359e-03 infty: 3.660e-03 bias: -1.116e-19 P/G time: 2.45511 first: 1.086e-03 second: 1.405e-03 infty: 3.733e-03 bias: 1.279e-19 P/G time: 2.46509 first: 1.122e-03 second: 1.445e-03 infty: 3.828e-03 bias: 7.033e-20 P/G time: 2.47507 first: 1.148e-03 second: 1.471e-03 infty: 3.974e-03 bias: 1.897e-19 P/G time: 2.48505 first: 1.156e-03 second: 1.478e-03 infty: 4.133e-03 bias: 1.710e-19 P/G time: 2.49503 first: 1.144e-03 second: 1.463e-03 infty: 4.214e-03 bias: -1.984e-19 P/G time: 2.50501 first: 1.111e-03 second: 1.428e-03 infty: 4.161e-03 bias: 1.940e-19 P/G time: 2.51499 first: 1.060e-03 second: 1.376e-03 infty: 3.973e-03 bias: 1.184e-19 P/G time: 2.52497 first: 9.959e-04 second: 1.313e-03 infty: 3.716e-03 bias: -1.436e-19 P/G time: 2.53495 first: 9.292e-04 second: 1.247e-03 infty: 3.497e-03 bias: -2.378e-19 P/G time: 2.54493 first: 8.748e-04 second: 1.185e-03 infty: 3.370e-03 bias: -7.878e-20 P/G time: 2.55491 first: 8.512e-04 second: 1.137e-03 infty: 3.277e-03 bias: 9.046e-20 P/G time: 2.56489 first: 8.475e-04 second: 1.109e-03 infty: 3.228e-03 bias: -1.618e-19 P/G time: 2.57487 first: 8.602e-04 second: 1.101e-03 infty: 3.145e-03 bias: -1.528e-19 P/G time: 2.58485 first: 8.846e-04 second: 1.111e-03 infty: 3.062e-03 bias: 3.894e-20 P/G time: 2.59483 first: 9.159e-04 second: 1.131e-03 infty: 2.925e-03 bias: 2.119e-19 P/G time: 2.60481 first: 9.402e-04 second: 1.151e-03 infty: 2.783e-03 bias: -7.730e-20 P/G time: 2.61479 first: 9.522e-04 second: 1.164e-03 infty: 2.967e-03 bias: 1.416e-19 P/G time: 2.62477 first: 9.531e-04 second: 1.163e-03 infty: 3.087e-03 bias: 1.236e-19 P/G time: 2.63475 first: 9.452e-04 second: 1.147e-03 infty: 3.076e-03 bias: 1.381e-19 P/G time: 2.64473 first: 9.247e-04 second: 1.115e-03 infty: 2.967e-03 bias: 8.391e-20 P/G time: 2.65471 first: 8.938e-04 second: 1.073e-03 infty: 2.811e-03 bias: -4.904e-20 P/G time: 2.66469 first: 8.599e-04 second: 1.028e-03 infty: 2.625e-03 bias: -9.741e-21 P/G time: 2.67467 first: 8.309e-04 second: 9.878e-04 infty: 2.403e-03 bias: -3.010e-20 P/G time: 2.68465 first: 8.188e-04 second: 9.624e-04 infty: 2.265e-03 bias: -2.190e-20 P/G time: 2.69463 first: 8.273e-04 second: 9.583e-04 infty: 2.365e-03 bias: -7.136e-20 P/G time: 2.70461 first: 8.487e-04 second: 9.768e-04 infty: 2.402e-03 bias: -3.723e-20 P/G time: 2.71459 first: 8.762e-04 second: 1.014e-03 infty: 2.405e-03 bias: -2.126e-20 P/G time: 2.72457 first: 9.084e-04 second: 1.061e-03 infty: 2.488e-03 bias: 1.118e-19 P/G time: 2.73455 first: 9.498e-04 second: 1.108e-03 infty: 2.658e-03 bias: -9.230e-20 P/G time: 2.74453 first: 9.908e-04 second: 1.149e-03 infty: 2.786e-03 bias: -6.893e-20 P/G time: 2.75451 first: 1.024e-03 second: 1.176e-03 infty: 2.863e-03 bias: 1.637e-20 P/G time: 2.76449 first: 1.043e-03 second: 1.188e-03 infty: 2.845e-03 bias: -6.245e-20 P/G time: 2.77447 first: 1.047e-03 second: 1.187e-03 infty: 2.740e-03 bias: 8.547e-20 P/G time: 2.78445 first: 1.038e-03 second: 1.175e-03 infty: 2.551e-03 bias: -2.703e-20 P/G time: 2.79443 first: 1.023e-03 second: 1.160e-03 infty: 2.338e-03 bias: -3.857e-20 P/G time: 2.80441 first: 1.017e-03 second: 1.149e-03 infty: 2.103e-03 bias: 8.571e-20 P/G time: 2.81439 first: 1.029e-03 second: 1.149e-03 infty: 2.061e-03 bias: 1.246e-19 P/G time: 2.82437 first: 1.065e-03 second: 1.162e-03 infty: 2.150e-03 bias: 1.113e-19 P/G time: 2.83435 first: 1.105e-03 second: 1.189e-03 infty: 2.231e-03 bias: 6.266e-20 P/G time: 2.84433 first: 1.145e-03 second: 1.225e-03 infty: 2.287e-03 bias: 1.464e-19 P/G time: 2.85431 first: 1.173e-03 second: 1.261e-03 infty: 2.310e-03 bias: 8.121e-20 P/G time: 2.86429 first: 1.187e-03 second: 1.290e-03 infty: 2.495e-03 bias: 1.554e-19 P/G time: 2.87427 first: 1.182e-03 second: 1.304e-03 infty: 2.799e-03 bias: 7.697e-20 P/G time: 2.88425 first: 1.161e-03 second: 1.299e-03 infty: 3.008e-03 bias: -3.992e-20 P/G time: 2.89423 first: 1.123e-03 second: 1.273e-03 infty: 3.123e-03 bias: -3.758e-20 P/G time: 2.90421 first: 1.073e-03 second: 1.226e-03 infty: 3.145e-03 bias: 2.003e-20 P/G time: 2.91419 first: 1.011e-03 second: 1.161e-03 infty: 3.051e-03 bias: 1.669e-19 P/G time: 2.92417 first: 9.396e-04 second: 1.085e-03 infty: 2.838e-03 bias: -3.759e-21 P/G time: 2.93415 first: 8.651e-04 second: 1.005e-03 infty: 2.502e-03 bias: -1.048e-19 P/G time: 2.94413 first: 7.944e-04 second: 9.311e-04 infty: 2.049e-03 bias: 1.246e-19 P/G time: 2.95411 first: 7.403e-04 second: 8.733e-04 infty: 1.825e-03 bias: -6.606e-20 P/G time: 2.96409 first: 7.144e-04 second: 8.394e-04 infty: 1.819e-03 bias: -1.034e-19 P/G time: 2.97407 first: 7.088e-04 second: 8.320e-04 infty: 1.815e-03 bias: -2.383e-20 P/G time: 2.98405 first: 7.248e-04 second: 8.468e-04 infty: 1.776e-03 bias: -1.203e-20 P/G time: 2.99403 first: 7.480e-04 second: 8.752e-04 infty: 1.768e-03 bias: 1.975e-20 P/G time: 3.00401 first: 7.676e-04 second: 9.073e-04 infty: 1.942e-03 bias: -2.718e-20 P/G time: 3.01399 first: 7.784e-04 second: 9.354e-04 infty: 2.388e-03 bias: 2.837e-20 P/G time: 3.02397 first: 7.835e-04 second: 9.553e-04 infty: 2.727e-03 bias: -7.479e-20 P/G time: 3.03395 first: 7.913e-04 second: 9.665e-04 infty: 2.919e-03 bias: -3.814e-20 P/G time: 3.04393 first: 7.959e-04 second: 9.719e-04 infty: 2.978e-03 bias: -1.232e-20 P/G time: 3.05391 first: 8.038e-04 second: 9.771e-04 infty: 2.907e-03 bias: 4.925e-20 P/G time: 3.06389 first: 8.239e-04 second: 9.886e-04 infty: 2.722e-03 bias: 2.685e-20 P/G time: 3.07387 first: 8.529e-04 second: 1.011e-03 infty: 2.462e-03 bias: 6.755e-20 P/G time: 3.08385 first: 8.887e-04 second: 1.047e-03 infty: 2.342e-03 bias: -9.718e-20 P/G time: 3.09383 first: 9.334e-04 second: 1.094e-03 infty: 2.446e-03 bias: 2.240e-19 P/G time: 3.10381 first: 9.783e-04 second: 1.147e-03 infty: 2.499e-03 bias: 2.009e-20 P/G time: 3.11379 first: 1.019e-03 second: 1.200e-03 infty: 2.722e-03 bias: 2.115e-19 P/G time: 3.12377 first: 1.051e-03 second: 1.248e-03 infty: 2.982e-03 bias: 9.913e-21 P/G time: 3.13375 first: 1.069e-03 second: 1.286e-03 infty: 3.141e-03 bias: -2.934e-20 P/G time: 3.14373 first: 1.078e-03 second: 1.315e-03 infty: 3.325e-03 bias: 1.540e-19 P/G time: 3.15371 first: 1.083e-03 second: 1.334e-03 infty: 3.494e-03 bias: -4.399e-20 P/G time: 3.16369 first: 1.095e-03 second: 1.345e-03 infty: 3.536e-03 bias: -1.322e-20 P/G time: 3.17367 first: 1.113e-03 second: 1.350e-03 infty: 3.474e-03 bias: 1.790e-19 P/G time: 3.18365 first: 1.127e-03 second: 1.351e-03 infty: 3.385e-03 bias: -2.971e-19 P/G time: 3.19363 first: 1.137e-03 second: 1.351e-03 infty: 3.242e-03 bias: 1.642e-19 P/G time: 3.20361 first: 1.143e-03 second: 1.351e-03 infty: 3.022e-03 bias: 8.199e-20 P/G time: 3.21359 first: 1.149e-03 second: 1.353e-03 infty: 2.928e-03 bias: 2.117e-19 P/G time: 3.22357 first: 1.158e-03 second: 1.359e-03 infty: 3.040e-03 bias: -3.149e-19 P/G time: 3.23355 first: 1.165e-03 second: 1.367e-03 infty: 3.158e-03 bias: 1.972e-19 P/G time: 3.24353 first: 1.166e-03 second: 1.375e-03 infty: 3.267e-03 bias: 1.411e-19 P/G time: 3.25351 first: 1.159e-03 second: 1.382e-03 infty: 3.384e-03 bias: 1.456e-19 P/G time: 3.26349 first: 1.144e-03 second: 1.384e-03 infty: 3.500e-03 bias: -2.787e-19 P/G time: 3.27347 first: 1.121e-03 second: 1.379e-03 infty: 3.589e-03 bias: 2.653e-19 P/G time: 3.28345 first: 1.091e-03 second: 1.366e-03 infty: 3.648e-03 bias: -1.004e-19 P/G time: 3.29343 first: 1.062e-03 second: 1.345e-03 infty: 3.672e-03 bias: -2.032e-19 P/G time: 3.30341 first: 1.036e-03 second: 1.319e-03 infty: 3.673e-03 bias: 9.227e-20 P/G time: 3.31339 first: 1.008e-03 second: 1.291e-03 infty: 3.648e-03 bias: -9.031e-20 P/G time: 3.32337 first: 9.854e-04 second: 1.265e-03 infty: 3.588e-03 bias: -1.152e-19 P/G time: 3.33335 first: 9.722e-04 second: 1.243e-03 infty: 3.500e-03 bias: 8.887e-20 P/G time: 3.34333 first: 9.666e-04 second: 1.227e-03 infty: 3.398e-03 bias: -5.062e-21 P/G time: 3.35331 first: 9.664e-04 second: 1.216e-03 infty: 3.261e-03 bias: -1.938e-20 P/G time: 3.36329 first: 9.751e-04 second: 1.208e-03 infty: 3.091e-03 bias: -6.770e-21 P/G time: 3.37327 first: 9.868e-04 second: 1.201e-03 infty: 2.895e-03 bias: 1.098e-20 P/G time: 3.38325 first: 9.969e-04 second: 1.195e-03 infty: 2.690e-03 bias: -1.345e-19 P/G time: 3.39323 first: 1.008e-03 second: 1.188e-03 infty: 2.468e-03 bias: -1.995e-19 P/G time: 3.40321 first: 1.020e-03 second: 1.181e-03 infty: 2.286e-03 bias: -2.183e-20 P/G time: 3.41319 first: 1.024e-03 second: 1.172e-03 infty: 2.223e-03 bias: 7.920e-20 P/G time: 3.42317 first: 1.018e-03 second: 1.162e-03 infty: 2.171e-03 bias: 1.900e-19 P/G time: 3.43315 first: 1.005e-03 second: 1.150e-03 infty: 2.306e-03 bias: -1.915e-19 P/G time: 3.44313 first: 9.902e-04 second: 1.134e-03 infty: 2.390e-03 bias: 2.110e-19 P/G time: 3.45311 first: 9.760e-04 second: 1.117e-03 infty: 2.427e-03 bias: 5.557e-20 P/G time: 3.46309 first: 9.642e-04 second: 1.099e-03 infty: 2.438e-03 bias: -2.866e-19 P/G time: 3.47307 first: 9.561e-04 second: 1.082e-03 infty: 2.420e-03 bias: -1.951e-19 P/G time: 3.48305 first: 9.471e-04 second: 1.069e-03 infty: 2.351e-03 bias: -1.768e-19 P/G time: 3.49303 first: 9.372e-04 second: 1.062e-03 infty: 2.229e-03 bias: -2.933e-19 P/G time: 3.50301 first: 9.258e-04 second: 1.059e-03 infty: 2.059e-03 bias: 1.861e-20 P/G time: 3.51299 first: 9.112e-04 second: 1.060e-03 infty: 2.225e-03 bias: 1.189e-19 P/G time: 3.52297 first: 8.981e-04 second: 1.062e-03 infty: 2.431e-03 bias: -2.161e-19 P/G time: 3.53295 first: 8.984e-04 second: 1.062e-03 infty: 2.529e-03 bias: -8.838e-20 P/G time: 3.54293 first: 9.068e-04 second: 1.059e-03 infty: 2.515e-03 bias: -1.267e-21 P/G time: 3.55291 first: 9.125e-04 second: 1.050e-03 infty: 2.392e-03 bias: 2.486e-19 P/G time: 3.56289 first: 9.114e-04 second: 1.035e-03 infty: 2.241e-03 bias: 2.137e-19 P/G time: 3.57287 first: 9.005e-04 second: 1.015e-03 infty: 2.203e-03 bias: 1.872e-19 P/G time: 3.58285 first: 8.840e-04 second: 9.915e-04 infty: 2.131e-03 bias: 1.311e-19 P/G time: 3.59283 first: 8.601e-04 second: 9.659e-04 infty: 2.034e-03 bias: -7.170e-20 P/G time: 3.60281 first: 8.309e-04 second: 9.414e-04 infty: 2.114e-03 bias: 1.534e-19 P/G time: 3.61279 first: 7.993e-04 second: 9.223e-04 infty: 2.125e-03 bias: -9.845e-20 P/G time: 3.62277 first: 7.713e-04 second: 9.130e-04 infty: 2.112e-03 bias: 7.131e-20 P/G time: 3.63275 first: 7.649e-04 second: 9.173e-04 infty: 2.223e-03 bias: -4.330e-20 P/G time: 3.64273 first: 7.772e-04 second: 9.369e-04 infty: 2.299e-03 bias: -6.937e-20 P/G time: 3.65271 first: 8.095e-04 second: 9.701e-04 infty: 2.313e-03 bias: 4.272e-20 P/G time: 3.66269 first: 8.602e-04 second: 1.013e-03 infty: 2.261e-03 bias: 2.658e-20 P/G time: 3.67267 first: 9.124e-04 second: 1.059e-03 infty: 2.145e-03 bias: 3.932e-20 P/G time: 3.68265 first: 9.616e-04 second: 1.104e-03 infty: 2.202e-03 bias: -4.368e-20 P/G time: 3.69263 first: 1.002e-03 second: 1.145e-03 infty: 2.265e-03 bias: -4.235e-22 P/G time: 3.70261 first: 1.031e-03 second: 1.178e-03 infty: 2.362e-03 bias: -2.043e-20 P/G time: 3.71259 first: 1.050e-03 second: 1.205e-03 infty: 2.483e-03 bias: 5.677e-21 P/G time: 3.72257 first: 1.065e-03 second: 1.227e-03 infty: 2.588e-03 bias: 1.052e-19 P/G time: 3.73255 first: 1.076e-03 second: 1.248e-03 infty: 2.679e-03 bias: -4.015e-21 P/G time: 3.74253 first: 1.090e-03 second: 1.271e-03 infty: 2.823e-03 bias: -4.231e-20 P/G time: 3.75251 first: 1.109e-03 second: 1.297e-03 infty: 2.994e-03 bias: -1.318e-19 P/G time: 3.76248 first: 1.137e-03 second: 1.330e-03 infty: 3.156e-03 bias: -5.275e-20 P/G time: 3.77246 first: 1.177e-03 second: 1.368e-03 infty: 3.270e-03 bias: -1.873e-19 P/G time: 3.78244 first: 1.224e-03 second: 1.408e-03 infty: 3.335e-03 bias: -2.054e-19 P/G time: 3.79242 first: 1.269e-03 second: 1.447e-03 infty: 3.353e-03 bias: -1.929e-19 P/G time: 3.8024 first: 1.304e-03 second: 1.480e-03 infty: 3.390e-03 bias: 1.571e-19 P/G time: 3.81238 first: 1.324e-03 second: 1.502e-03 infty: 3.433e-03 bias: 1.375e-19 P/G time: 3.82236 first: 1.327e-03 second: 1.509e-03 infty: 3.459e-03 bias: 1.658e-19 P/G time: 3.83234 first: 1.313e-03 second: 1.497e-03 infty: 3.454e-03 bias: 1.845e-19 P/G time: 3.84232 first: 1.282e-03 second: 1.467e-03 infty: 3.421e-03 bias: 1.691e-19 P/G time: 3.8523 first: 1.232e-03 second: 1.419e-03 infty: 3.370e-03 bias: 5.887e-20 P/G time: 3.86228 first: 1.169e-03 second: 1.358e-03 infty: 3.312e-03 bias: 8.347e-20 P/G time: 3.87226 first: 1.095e-03 second: 1.288e-03 infty: 3.216e-03 bias: 2.260e-20 P/G time: 3.88224 first: 1.014e-03 second: 1.215e-03 infty: 3.092e-03 bias: -5.907e-20 P/G time: 3.89222 first: 9.418e-04 second: 1.146e-03 infty: 2.902e-03 bias: -2.123e-19 P/G time: 3.9022 first: 8.913e-04 second: 1.086e-03 infty: 2.649e-03 bias: 1.955e-19 P/G time: 3.91218 first: 8.627e-04 second: 1.038e-03 infty: 2.365e-03 bias: 7.705e-20 P/G time: 3.92216 first: 8.469e-04 second: 1.003e-03 infty: 2.517e-03 bias: -1.590e-19 P/G time: 3.93214 first: 8.347e-04 second: 9.766e-04 infty: 2.622e-03 bias: -7.350e-20 P/G time: 3.94212 first: 8.179e-04 second: 9.540e-04 infty: 2.623e-03 bias: 6.568e-20 P/G time: 3.9521 first: 7.924e-04 second: 9.292e-04 infty: 2.516e-03 bias: -2.330e-20 P/G time: 3.96208 first: 7.547e-04 second: 8.973e-04 infty: 2.309e-03 bias: 2.758e-20 P/G time: 3.97206 first: 7.064e-04 second: 8.552e-04 infty: 2.011e-03 bias: 3.166e-20 P/G time: 3.98204 first: 6.573e-04 second: 8.038e-04 infty: 1.805e-03 bias: -7.649e-20 P/G time: 3.99202 first: 6.178e-04 second: 7.480e-04 infty: 1.665e-03 bias: -1.048e-19 P/G time: 4.002 first: 5.829e-04 second: 6.982e-04 infty: 1.529e-03 bias: -5.780e-20 P/G time: 4.01198 first: 5.464e-04 second: 6.689e-04 infty: 1.467e-03 bias: 5.049e-20 P/G time: 4.02196 first: 5.307e-04 second: 6.734e-04 infty: 1.809e-03 bias: -9.934e-20 P/G time: 4.03194 first: 5.602e-04 second: 7.161e-04 infty: 2.099e-03 bias: 1.525e-19 P/G time: 4.04192 first: 6.182e-04 second: 7.890e-04 infty: 2.336e-03 bias: -1.221e-19 P/G time: 4.0519 first: 6.928e-04 second: 8.775e-04 infty: 2.559e-03 bias: 1.613e-19 P/G time: 4.06188 first: 7.700e-04 second: 9.671e-04 infty: 2.729e-03 bias: -2.210e-20 P/G time: 4.07186 first: 8.424e-04 second: 1.047e-03 infty: 2.865e-03 bias: -2.401e-19 P/G time: 4.08184 first: 9.056e-04 second: 1.110e-03 infty: 2.923e-03 bias: -6.463e-20 P/G time: 4.09182 first: 9.564e-04 second: 1.153e-03 infty: 2.900e-03 bias: 6.042e-21 P/G time: 4.1018 first: 9.964e-04 second: 1.178e-03 infty: 2.793e-03 bias: 5.009e-20 P/G time: 4.11178 first: 1.028e-03 second: 1.189e-03 infty: 2.627e-03 bias: 2.609e-20 P/G time: 4.12176 first: 1.050e-03 second: 1.193e-03 infty: 2.467e-03 bias: 1.847e-19 P/G time: 4.13174 first: 1.068e-03 second: 1.197e-03 infty: 2.255e-03 bias: -2.143e-19 P/G time: 4.14172 first: 1.086e-03 second: 1.210e-03 infty: 2.111e-03 bias: -2.126e-19 P/G time: 4.1517 first: 1.112e-03 second: 1.236e-03 infty: 2.257e-03 bias: 1.184e-19 P/G time: 4.16168 first: 1.137e-03 second: 1.278e-03 infty: 2.452e-03 bias: 1.460e-19 P/G time: 4.17166 first: 1.164e-03 second: 1.332e-03 infty: 2.714e-03 bias: -2.552e-19 P/G time: 4.18164 first: 1.202e-03 second: 1.391e-03 infty: 2.930e-03 bias: 3.251e-20 P/G time: 4.19162 first: 1.251e-03 second: 1.450e-03 infty: 3.116e-03 bias: 1.469e-19 P/G time: 4.2016 first: 1.299e-03 second: 1.499e-03 infty: 3.284e-03 bias: -8.428e-20 P/G time: 4.21158 first: 1.332e-03 second: 1.532e-03 infty: 3.407e-03 bias: -2.360e-19 P/G time: 4.22156 first: 1.344e-03 second: 1.545e-03 infty: 3.481e-03 bias: 1.860e-19 P/G time: 4.23154 first: 1.330e-03 second: 1.535e-03 infty: 3.503e-03 bias: -8.564e-20 P/G time: 4.24152 first: 1.292e-03 second: 1.504e-03 infty: 3.473e-03 bias: -1.690e-19 P/G time: 4.2515 first: 1.231e-03 second: 1.455e-03 infty: 3.392e-03 bias: -1.957e-19 P/G time: 4.26148 first: 1.155e-03 second: 1.395e-03 infty: 3.265e-03 bias: 1.175e-19 P/G time: 4.27146 first: 1.084e-03 second: 1.331e-03 infty: 3.095e-03 bias: 6.035e-20 P/G time: 4.28144 first: 1.033e-03 second: 1.273e-03 infty: 2.995e-03 bias: -7.013e-20 P/G time: 4.29142 first: 1.009e-03 second: 1.227e-03 infty: 2.911e-03 bias: 8.509e-20 P/G time: 4.3014 first: 9.961e-04 second: 1.197e-03 infty: 2.771e-03 bias: -2.496e-20 P/G time: 4.31138 first: 9.877e-04 second: 1.181e-03 infty: 2.588e-03 bias: -1.322e-19 P/G time: 4.32136 first: 9.879e-04 second: 1.174e-03 infty: 2.349e-03 bias: 5.530e-20 P/G time: 4.33134 first: 9.928e-04 second: 1.169e-03 infty: 2.263e-03 bias: 8.398e-21 P/G time: 4.34132 first: 9.889e-04 second: 1.158e-03 infty: 2.339e-03 bias: -8.236e-20 P/G time: 4.3513 first: 9.714e-04 second: 1.136e-03 infty: 2.333e-03 bias: 4.804e-20 P/G time: 4.36128 first: 9.399e-04 second: 1.101e-03 infty: 2.318e-03 bias: -1.231e-19 P/G time: 4.37126 first: 8.956e-04 second: 1.054e-03 infty: 2.241e-03 bias: 1.877e-19 P/G time: 4.38124 first: 8.551e-04 second: 9.999e-04 infty: 2.068e-03 bias: 1.540e-20 P/G time: 4.39122 first: 8.147e-04 second: 9.463e-04 infty: 1.922e-03 bias: 1.162e-19 P/G time: 4.4012 first: 7.779e-04 second: 9.037e-04 infty: 1.873e-03 bias: -2.025e-19 P/G time: 4.41118 first: 7.599e-04 second: 8.822e-04 infty: 1.809e-03 bias: 4.204e-20 P/G time: 4.42116 first: 7.665e-04 second: 8.884e-04 infty: 1.846e-03 bias: 9.415e-21 P/G time: 4.43114 first: 7.830e-04 second: 9.218e-04 infty: 2.182e-03 bias: -2.218e-19 P/G time: 4.44112 first: 8.149e-04 second: 9.752e-04 infty: 2.480e-03 bias: -6.844e-20 P/G time: 4.4511 first: 8.602e-04 second: 1.037e-03 infty: 2.728e-03 bias: 2.541e-21 P/G time: 4.46108 first: 9.054e-04 second: 1.097e-03 infty: 2.931e-03 bias: 1.748e-20 P/G time: 4.47106 first: 9.389e-04 second: 1.144e-03 infty: 3.086e-03 bias: 1.272e-19 P/G time: 4.48104 first: 9.563e-04 second: 1.171e-03 infty: 3.191e-03 bias: 1.043e-19 P/G time: 4.49102 first: 9.525e-04 second: 1.175e-03 infty: 3.240e-03 bias: -1.219e-19 P/G time: 4.501 first: 9.265e-04 second: 1.155e-03 infty: 3.231e-03 bias: 1.540e-19 P/G time: 4.51098 first: 8.805e-04 second: 1.111e-03 infty: 3.160e-03 bias: -1.350e-19 P/G time: 4.52096 first: 8.240e-04 second: 1.052e-03 infty: 3.025e-03 bias: -9.551e-20 P/G time: 4.53094 first: 7.780e-04 second: 9.842e-04 infty: 2.821e-03 bias: 1.169e-19 P/G time: 4.54092 first: 7.528e-04 second: 9.207e-04 infty: 2.545e-03 bias: 2.429e-19 P/G time: 4.5509 first: 7.458e-04 second: 8.747e-04 infty: 2.212e-03 bias: 1.280e-19 P/G time: 4.56088 first: 7.476e-04 second: 8.576e-04 infty: 1.823e-03 bias: 1.905e-19 P/G time: 4.57086 first: 7.555e-04 second: 8.740e-04 infty: 1.762e-03 bias: 1.169e-20 P/G time: 4.58084 first: 7.719e-04 second: 9.194e-04 infty: 1.936e-03 bias: -1.298e-19 P/G time: 4.59082 first: 7.953e-04 second: 9.832e-04 infty: 2.249e-03 bias: -6.641e-20 P/G time: 4.6008 first: 8.358e-04 second: 1.053e-03 infty: 2.483e-03 bias: 3.667e-20 P/G time: 4.61078 first: 8.927e-04 second: 1.120e-03 infty: 2.622e-03 bias: 1.216e-19 P/G time: 4.62076 first: 9.443e-04 second: 1.177e-03 infty: 2.661e-03 bias: -9.083e-20 P/G time: 4.63074 first: 9.820e-04 second: 1.221e-03 infty: 2.601e-03 bias: -6.448e-20 P/G time: 4.64072 first: 1.005e-03 second: 1.252e-03 infty: 2.561e-03 bias: -8.024e-20 P/G time: 4.6507 first: 1.019e-03 second: 1.272e-03 infty: 2.731e-03 bias: 1.086e-19 P/G time: 4.66068 first: 1.025e-03 second: 1.286e-03 infty: 2.884e-03 bias: 1.535e-19 P/G time: 4.67066 first: 1.036e-03 second: 1.300e-03 infty: 3.038e-03 bias: 6.624e-20 P/G time: 4.68064 first: 1.059e-03 second: 1.319e-03 infty: 3.187e-03 bias: -2.141e-19 P/G time: 4.69062 first: 1.085e-03 second: 1.346e-03 infty: 3.432e-03 bias: -1.997e-19 P/G time: 4.7006 first: 1.124e-03 second: 1.383e-03 infty: 3.756e-03 bias: -2.086e-20 P/G time: 4.71058 first: 1.164e-03 second: 1.427e-03 infty: 4.067e-03 bias: -3.594e-20 P/G time: 4.72056 first: 1.207e-03 second: 1.474e-03 infty: 4.366e-03 bias: 8.550e-20 P/G time: 4.73054 first: 1.245e-03 second: 1.517e-03 infty: 4.611e-03 bias: -1.497e-19 P/G time: 4.74052 first: 1.273e-03 second: 1.549e-03 infty: 4.780e-03 bias: 7.008e-20 P/G time: 4.7505 first: 1.286e-03 second: 1.564e-03 infty: 4.874e-03 bias: -9.233e-20 P/G time: 4.76048 first: 1.284e-03 second: 1.559e-03 infty: 4.869e-03 bias: -1.343e-19 P/G time: 4.77046 first: 1.264e-03 second: 1.531e-03 infty: 4.756e-03 bias: 1.471e-19 P/G time: 4.78044 first: 1.228e-03 second: 1.480e-03 infty: 4.531e-03 bias: -1.634e-19 P/G time: 4.79042 first: 1.178e-03 second: 1.411e-03 infty: 4.195e-03 bias: -2.635e-19 P/G time: 4.8004 first: 1.122e-03 second: 1.328e-03 infty: 3.755e-03 bias: 1.969e-19 P/G time: 4.81038 first: 1.060e-03 second: 1.240e-03 infty: 3.231e-03 bias: 2.264e-20 P/G time: 4.82036 first: 9.934e-04 second: 1.156e-03 infty: 2.651e-03 bias: -7.289e-20 P/G time: 4.83034 first: 9.402e-04 second: 1.085e-03 infty: 2.299e-03 bias: -5.776e-20 P/G time: 4.84032 first: 9.080e-04 second: 1.035e-03 infty: 2.432e-03 bias: -1.404e-19 P/G time: 4.8503 first: 8.813e-04 second: 1.007e-03 infty: 2.489e-03 bias: 1.079e-19 P/G time: 4.86028 first: 8.613e-04 second: 9.969e-04 infty: 2.465e-03 bias: 1.353e-19 P/G time: 4.87026 first: 8.495e-04 second: 9.958e-04 infty: 2.356e-03 bias: -5.045e-20 P/G time: 4.88024 first: 8.392e-04 second: 9.934e-04 infty: 2.446e-03 bias: 2.687e-20 P/G time: 4.89022 first: 8.206e-04 second: 9.802e-04 infty: 2.580e-03 bias: -8.646e-20 P/G time: 4.9002 first: 7.887e-04 second: 9.498e-04 infty: 2.643e-03 bias: -9.401e-20 P/G time: 4.91018 first: 7.415e-04 second: 8.988e-04 infty: 2.597e-03 bias: 7.351e-20 P/G time: 4.92016 first: 6.797e-04 second: 8.281e-04 infty: 2.527e-03 bias: 4.435e-20 P/G time: 4.93014 first: 6.050e-04 second: 7.429e-04 infty: 2.435e-03 bias: 2.942e-20 P/G time: 4.94012 first: 5.288e-04 second: 6.541e-04 infty: 2.230e-03 bias: 1.127e-20 P/G time: 4.9501 first: 4.754e-04 second: 5.797e-04 infty: 1.932e-03 bias: 2.858e-20 P/G time: 4.96008 first: 4.629e-04 second: 5.426e-04 infty: 1.565e-03 bias: -1.551e-20 P/G time: 4.97006 first: 4.905e-04 second: 5.592e-04 infty: 1.365e-03 bias: 2.520e-20 P/G time: 4.98004 first: 5.441e-04 second: 6.241e-04 infty: 1.429e-03 bias: -3.176e-21 P/G time: 4.99002 first: 6.026e-04 second: 7.161e-04 infty: 1.731e-03 bias: -5.770e-20 P/G time: 5 first: 6.671e-04 second: 8.137e-04 infty: 2.360e-03 bias: -3.740e-20 gerris-snapshot-131206/test/nonlinear/ocean.gfs0000644000175100017510000000254712250371171016424 000000000000001 0 GfsOcean GfsBox GfsGEdge {} { Time { end = 5 dtmax = 1e-2 } Global { #include @link -lgsl -lgslcblas #define G 1. #define H0 1. #define FROUDE 0.1 double vtheta (double r) { return FROUDE*(r < 0.4)*(1. + cos((r - 0.2)/0.2*M_PI))/2.; } double h0p (double r, void * p) { double vt = vtheta(r); return vt*(2.*OMEGA + vt/r)/G; } double h0 (double r) { gsl_integration_workspace * w = gsl_integration_workspace_alloc (1000); double result, error; gsl_function F; F.function = &h0p; gsl_integration_qags (&F, 0, r, 0, 1e-7, 1000, w, &result, &error); gsl_integration_workspace_free (w); return result; } } PhysicalParams { L = 1 g = G } SourceCoriolis 2.*OMEGA Solid (z + H0) Init {} { P = h0(sqrt (x*x + y*y))*G U = - vtheta(sqrt (x*x + y*y))*y/sqrt (x*x + y*y) V = vtheta(sqrt (x*x + y*y))*x/sqrt (x*x + y*y) } ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } Refine 6 OutputScalarSum { istep = 1 } energy-ocean-OMEGA { v = H0*(U*U + V*V) } OutputErrorNorm { istep = 1 } error-ocean-OMEGA { v = P/G } { s = h0(sqrt (x*x + y*y)) v = E unbiased = 1 relative = 1 } OutputSimulation { start = end } end-ocean-OMEGA.gfs } GfsBox { front = Boundary } gerris-snapshot-131206/test/nonlinear/nonlinear.sh0000644000175100017510000000263112250371171017151 00000000000000#!/bin/bash # exit on errors set -e if test x$donotrun != xtrue; then for omega in 0 1; do gerris2D -DOMEGA=$omega nonlinear.gfs gerris2D -DOMEGA=$omega river.gfs gerris3D -DOMEGA=$omega ocean.gfs done fi for omega in 0 1; do gnuplot < 1e-7 or\ (Curve('error-river-1',3,9) - Curve('error-river-1.ref',3,9)).max() > 1e-7 or\ (Curve('error-ocean-1',3,9) - Curve('error-ocean-1.ref',3,9)).max() > 1e-7: print (Curve('error-1',3,9) - Curve('error-1.ref',3,9)).max() print (Curve('error-river-1',3,9) - Curve('error-river-1.ref',3,9)).max() print (Curve('error-ocean-1',3,9) - Curve('error-ocean-1.ref',3,9)).max() exit(1) EOF gerris-snapshot-131206/test/nonlinear/error-ocean.gfv0000644000175100017510000000061612250371171017551 00000000000000# GfsView 3D View { tx = -0.0311583 ty = 0.0113253 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 21.5364 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } E { amin = 1 amax = 1 show = 1 cmap = Jet } gerris-snapshot-131206/test/nonlinear/error-1.ref0000644000175100017510000012630112250371171016616 00000000000000P time: 0 first: 2.215e-01 second: 2.901e-01 infty: 8.627e-01 bias: -7.416e-17 P time: 0.01 first: 3.075e-04 second: 4.252e-04 infty: 1.233e-03 bias: 1.129e-16 P time: 0.02 first: 5.408e-04 second: 8.037e-04 infty: 2.280e-03 bias: -4.617e-17 P time: 0.02998 first: 5.492e-04 second: 8.176e-04 infty: 2.331e-03 bias: 2.442e-17 P time: 0.0399599 first: 5.461e-04 second: 8.138e-04 infty: 2.320e-03 bias: -8.896e-17 P time: 0.0499399 first: 5.449e-04 second: 8.122e-04 infty: 2.315e-03 bias: 7.410e-18 P time: 0.0599198 first: 5.438e-04 second: 8.108e-04 infty: 2.311e-03 bias: -2.862e-17 P time: 0.0698998 first: 5.429e-04 second: 8.093e-04 infty: 2.306e-03 bias: -6.080e-17 P time: 0.0798798 first: 5.421e-04 second: 8.079e-04 infty: 2.302e-03 bias: -1.613e-16 P time: 0.0898597 first: 5.413e-04 second: 8.065e-04 infty: 2.297e-03 bias: 3.516e-17 P time: 0.0998397 first: 5.404e-04 second: 8.051e-04 infty: 2.293e-03 bias: 7.986e-17 P time: 0.10982 first: 5.396e-04 second: 8.037e-04 infty: 2.288e-03 bias: -1.652e-17 P time: 0.1198 first: 5.388e-04 second: 8.023e-04 infty: 2.283e-03 bias: 1.548e-16 P time: 0.12978 first: 5.379e-04 second: 8.010e-04 infty: 2.278e-03 bias: -9.442e-17 P time: 0.13976 first: 5.371e-04 second: 7.996e-04 infty: 2.274e-03 bias: 1.246e-17 P time: 0.149739 first: 5.363e-04 second: 7.982e-04 infty: 2.269e-03 bias: 1.125e-16 P time: 0.159719 first: 5.354e-04 second: 7.969e-04 infty: 2.264e-03 bias: -3.451e-17 P time: 0.169699 first: 5.346e-04 second: 7.955e-04 infty: 2.260e-03 bias: 9.435e-17 P time: 0.179679 first: 5.338e-04 second: 7.941e-04 infty: 2.255e-03 bias: -7.239e-17 P time: 0.189659 first: 5.330e-04 second: 7.928e-04 infty: 2.251e-03 bias: 2.743e-17 P time: 0.199639 first: 5.322e-04 second: 7.914e-04 infty: 2.246e-03 bias: -5.800e-17 P time: 0.209619 first: 5.313e-04 second: 7.901e-04 infty: 2.242e-03 bias: 8.636e-18 P time: 0.219599 first: 5.305e-04 second: 7.887e-04 infty: 2.238e-03 bias: 1.120e-16 P time: 0.229579 first: 5.297e-04 second: 7.874e-04 infty: 2.233e-03 bias: -6.228e-17 P time: 0.239559 first: 5.289e-04 second: 7.860e-04 infty: 2.229e-03 bias: 1.045e-16 P time: 0.249539 first: 5.281e-04 second: 7.847e-04 infty: 2.225e-03 bias: -8.351e-17 P time: 0.259519 first: 5.273e-04 second: 7.833e-04 infty: 2.221e-03 bias: 4.948e-17 P time: 0.269499 first: 5.264e-04 second: 7.820e-04 infty: 2.217e-03 bias: -1.709e-17 P time: 0.279479 first: 5.256e-04 second: 7.806e-04 infty: 2.213e-03 bias: -4.093e-17 P time: 0.289459 first: 5.248e-04 second: 7.793e-04 infty: 2.209e-03 bias: -6.237e-17 P time: 0.299439 first: 5.240e-04 second: 7.779e-04 infty: 2.205e-03 bias: 1.302e-16 P time: 0.309419 first: 5.232e-04 second: 7.766e-04 infty: 2.201e-03 bias: 3.667e-17 P time: 0.319399 first: 5.224e-04 second: 7.752e-04 infty: 2.197e-03 bias: 2.900e-17 P time: 0.329379 first: 5.216e-04 second: 7.739e-04 infty: 2.193e-03 bias: 3.699e-17 P time: 0.339359 first: 5.208e-04 second: 7.726e-04 infty: 2.189e-03 bias: 3.427e-17 P time: 0.349339 first: 5.199e-04 second: 7.712e-04 infty: 2.185e-03 bias: -4.415e-17 P time: 0.359319 first: 5.191e-04 second: 7.699e-04 infty: 2.181e-03 bias: -5.190e-17 P time: 0.369299 first: 5.183e-04 second: 7.685e-04 infty: 2.177e-03 bias: -1.179e-16 P time: 0.379279 first: 5.175e-04 second: 7.672e-04 infty: 2.174e-03 bias: -1.124e-16 P time: 0.389259 first: 5.167e-04 second: 7.659e-04 infty: 2.170e-03 bias: 1.020e-17 P time: 0.399238 first: 5.159e-04 second: 7.645e-04 infty: 2.166e-03 bias: -6.871e-18 P time: 0.409218 first: 5.151e-04 second: 7.632e-04 infty: 2.162e-03 bias: -8.945e-18 P time: 0.419198 first: 5.143e-04 second: 7.619e-04 infty: 2.159e-03 bias: -9.893e-17 P time: 0.429178 first: 5.135e-04 second: 7.606e-04 infty: 2.155e-03 bias: 1.320e-16 P time: 0.439158 first: 5.127e-04 second: 7.592e-04 infty: 2.151e-03 bias: 6.017e-17 P time: 0.449138 first: 5.119e-04 second: 7.579e-04 infty: 2.148e-03 bias: -5.701e-17 P time: 0.459118 first: 5.111e-04 second: 7.566e-04 infty: 2.144e-03 bias: 9.893e-17 P time: 0.469098 first: 5.103e-04 second: 7.553e-04 infty: 2.140e-03 bias: -8.306e-17 P time: 0.479078 first: 5.095e-04 second: 7.539e-04 infty: 2.137e-03 bias: -3.970e-17 P time: 0.489058 first: 5.087e-04 second: 7.526e-04 infty: 2.133e-03 bias: -7.310e-17 P time: 0.499038 first: 5.079e-04 second: 7.513e-04 infty: 2.129e-03 bias: -4.637e-17 P time: 0.509018 first: 5.071e-04 second: 7.500e-04 infty: 2.126e-03 bias: 2.853e-17 P time: 0.518998 first: 5.063e-04 second: 7.487e-04 infty: 2.122e-03 bias: 9.876e-19 P time: 0.528978 first: 5.055e-04 second: 7.473e-04 infty: 2.119e-03 bias: -9.046e-19 P time: 0.538958 first: 5.047e-04 second: 7.460e-04 infty: 2.116e-03 bias: 1.844e-17 P time: 0.548938 first: 5.040e-04 second: 7.447e-04 infty: 2.113e-03 bias: -1.894e-17 P time: 0.558918 first: 5.032e-04 second: 7.434e-04 infty: 2.110e-03 bias: -2.596e-17 P time: 0.568898 first: 5.024e-04 second: 7.421e-04 infty: 2.107e-03 bias: -5.461e-17 P time: 0.578878 first: 5.016e-04 second: 7.408e-04 infty: 2.104e-03 bias: 7.414e-17 P time: 0.588858 first: 5.008e-04 second: 7.395e-04 infty: 2.101e-03 bias: 2.353e-18 P time: 0.598838 first: 5.000e-04 second: 7.382e-04 infty: 2.098e-03 bias: -4.071e-17 P time: 0.608818 first: 4.992e-04 second: 7.369e-04 infty: 2.095e-03 bias: -8.068e-17 P time: 0.618798 first: 4.984e-04 second: 7.356e-04 infty: 2.092e-03 bias: -8.469e-17 P time: 0.628778 first: 4.977e-04 second: 7.343e-04 infty: 2.089e-03 bias: 4.523e-17 P time: 0.638758 first: 4.969e-04 second: 7.330e-04 infty: 2.086e-03 bias: 5.472e-17 P time: 0.648737 first: 4.961e-04 second: 7.317e-04 infty: 2.083e-03 bias: -4.717e-17 P time: 0.658717 first: 4.953e-04 second: 7.304e-04 infty: 2.081e-03 bias: -3.909e-17 P time: 0.668697 first: 4.945e-04 second: 7.291e-04 infty: 2.078e-03 bias: 7.010e-17 P time: 0.678677 first: 4.937e-04 second: 7.278e-04 infty: 2.075e-03 bias: 2.373e-17 P time: 0.688657 first: 4.930e-04 second: 7.265e-04 infty: 2.072e-03 bias: 4.587e-17 P time: 0.698637 first: 4.922e-04 second: 7.252e-04 infty: 2.069e-03 bias: 6.492e-18 P time: 0.708617 first: 4.914e-04 second: 7.239e-04 infty: 2.066e-03 bias: 2.328e-17 P time: 0.718597 first: 4.906e-04 second: 7.226e-04 infty: 2.063e-03 bias: 8.911e-18 P time: 0.728577 first: 4.898e-04 second: 7.214e-04 infty: 2.061e-03 bias: -3.313e-17 P time: 0.738557 first: 4.891e-04 second: 7.201e-04 infty: 2.058e-03 bias: -7.055e-17 P time: 0.748537 first: 4.883e-04 second: 7.188e-04 infty: 2.055e-03 bias: -1.022e-16 P time: 0.758517 first: 4.875e-04 second: 7.175e-04 infty: 2.052e-03 bias: -5.671e-17 P time: 0.768497 first: 4.867e-04 second: 7.162e-04 infty: 2.049e-03 bias: 1.134e-16 P time: 0.778477 first: 4.860e-04 second: 7.149e-04 infty: 2.047e-03 bias: 4.487e-17 P time: 0.788457 first: 4.852e-04 second: 7.137e-04 infty: 2.044e-03 bias: -2.366e-17 P time: 0.798437 first: 4.844e-04 second: 7.124e-04 infty: 2.041e-03 bias: -2.886e-17 P time: 0.808417 first: 4.836e-04 second: 7.111e-04 infty: 2.038e-03 bias: -1.034e-17 P time: 0.818397 first: 4.829e-04 second: 7.098e-04 infty: 2.035e-03 bias: 6.867e-17 P time: 0.828377 first: 4.821e-04 second: 7.086e-04 infty: 2.033e-03 bias: -8.036e-17 P time: 0.838357 first: 4.813e-04 second: 7.073e-04 infty: 2.030e-03 bias: -2.917e-17 P time: 0.848337 first: 4.806e-04 second: 7.060e-04 infty: 2.027e-03 bias: 5.045e-17 P time: 0.858317 first: 4.798e-04 second: 7.048e-04 infty: 2.024e-03 bias: -2.693e-17 P time: 0.868297 first: 4.790e-04 second: 7.035e-04 infty: 2.021e-03 bias: -8.512e-17 P time: 0.878277 first: 4.783e-04 second: 7.022e-04 infty: 2.018e-03 bias: -9.118e-17 P time: 0.888257 first: 4.775e-04 second: 7.010e-04 infty: 2.016e-03 bias: -2.955e-17 P time: 0.898236 first: 4.767e-04 second: 6.997e-04 infty: 2.013e-03 bias: 3.093e-17 P time: 0.908216 first: 4.760e-04 second: 6.984e-04 infty: 2.010e-03 bias: -5.369e-17 P time: 0.918196 first: 4.752e-04 second: 6.972e-04 infty: 2.007e-03 bias: 4.021e-17 P time: 0.928176 first: 4.745e-04 second: 6.959e-04 infty: 2.004e-03 bias: -9.510e-17 P time: 0.938156 first: 4.737e-04 second: 6.947e-04 infty: 2.001e-03 bias: -7.589e-17 P time: 0.948136 first: 4.729e-04 second: 6.934e-04 infty: 1.999e-03 bias: -9.529e-18 P time: 0.958116 first: 4.722e-04 second: 6.921e-04 infty: 1.996e-03 bias: -2.001e-17 P time: 0.968096 first: 4.714e-04 second: 6.909e-04 infty: 1.993e-03 bias: 1.120e-16 P time: 0.978076 first: 4.707e-04 second: 6.896e-04 infty: 1.990e-03 bias: -8.521e-17 P time: 0.988056 first: 4.699e-04 second: 6.884e-04 infty: 1.987e-03 bias: 8.440e-17 P time: 0.998036 first: 4.692e-04 second: 6.871e-04 infty: 1.984e-03 bias: 1.182e-16 P time: 1.00802 first: 4.684e-04 second: 6.859e-04 infty: 1.981e-03 bias: 1.334e-16 P time: 1.018 first: 4.677e-04 second: 6.846e-04 infty: 1.978e-03 bias: 6.118e-17 P time: 1.02798 first: 4.669e-04 second: 6.834e-04 infty: 1.976e-03 bias: -2.722e-17 P time: 1.03796 first: 4.662e-04 second: 6.821e-04 infty: 1.973e-03 bias: -9.046e-17 P time: 1.04794 first: 4.654e-04 second: 6.809e-04 infty: 1.970e-03 bias: -4.462e-17 P time: 1.05792 first: 4.647e-04 second: 6.797e-04 infty: 1.967e-03 bias: -1.640e-17 P time: 1.0679 first: 4.640e-04 second: 6.784e-04 infty: 1.964e-03 bias: -1.315e-17 P time: 1.07788 first: 4.632e-04 second: 6.772e-04 infty: 1.961e-03 bias: 8.443e-18 P time: 1.08786 first: 4.625e-04 second: 6.759e-04 infty: 1.958e-03 bias: 2.790e-17 P time: 1.09784 first: 4.617e-04 second: 6.747e-04 infty: 1.955e-03 bias: -2.949e-17 P time: 1.10782 first: 4.610e-04 second: 6.735e-04 infty: 1.952e-03 bias: -1.075e-16 P time: 1.1178 first: 4.603e-04 second: 6.722e-04 infty: 1.949e-03 bias: 1.145e-16 P time: 1.12778 first: 4.596e-04 second: 6.710e-04 infty: 1.946e-03 bias: -1.360e-16 P time: 1.13776 first: 4.588e-04 second: 6.698e-04 infty: 1.943e-03 bias: 9.722e-17 P time: 1.14774 first: 4.581e-04 second: 6.685e-04 infty: 1.939e-03 bias: -1.134e-16 P time: 1.15772 first: 4.574e-04 second: 6.673e-04 infty: 1.936e-03 bias: -3.961e-17 P time: 1.1677 first: 4.567e-04 second: 6.661e-04 infty: 1.933e-03 bias: 1.891e-17 P time: 1.17768 first: 4.559e-04 second: 6.648e-04 infty: 1.930e-03 bias: 2.201e-17 P time: 1.18766 first: 4.552e-04 second: 6.636e-04 infty: 1.927e-03 bias: 3.151e-17 P time: 1.19764 first: 4.545e-04 second: 6.624e-04 infty: 1.924e-03 bias: -4.039e-17 P time: 1.20762 first: 4.538e-04 second: 6.612e-04 infty: 1.921e-03 bias: -8.747e-17 P time: 1.2176 first: 4.531e-04 second: 6.599e-04 infty: 1.917e-03 bias: -7.984e-17 P time: 1.22758 first: 4.523e-04 second: 6.587e-04 infty: 1.914e-03 bias: -5.073e-17 P time: 1.23756 first: 4.516e-04 second: 6.575e-04 infty: 1.911e-03 bias: -2.298e-17 P time: 1.24754 first: 4.509e-04 second: 6.563e-04 infty: 1.908e-03 bias: -7.998e-17 P time: 1.25752 first: 4.502e-04 second: 6.550e-04 infty: 1.905e-03 bias: -1.430e-16 P time: 1.26749 first: 4.495e-04 second: 6.538e-04 infty: 1.901e-03 bias: -4.289e-17 P time: 1.27747 first: 4.488e-04 second: 6.526e-04 infty: 1.898e-03 bias: -5.435e-18 P time: 1.28745 first: 4.481e-04 second: 6.514e-04 infty: 1.895e-03 bias: 4.901e-17 P time: 1.29743 first: 4.474e-04 second: 6.502e-04 infty: 1.891e-03 bias: 2.048e-17 P time: 1.30741 first: 4.466e-04 second: 6.490e-04 infty: 1.888e-03 bias: 8.526e-18 P time: 1.31739 first: 4.459e-04 second: 6.477e-04 infty: 1.885e-03 bias: 9.220e-17 P time: 1.32737 first: 4.452e-04 second: 6.465e-04 infty: 1.881e-03 bias: 9.632e-17 P time: 1.33735 first: 4.445e-04 second: 6.453e-04 infty: 1.878e-03 bias: 6.629e-17 P time: 1.34733 first: 4.438e-04 second: 6.441e-04 infty: 1.876e-03 bias: 1.294e-16 P time: 1.35731 first: 4.431e-04 second: 6.429e-04 infty: 1.873e-03 bias: -2.222e-17 P time: 1.36729 first: 4.424e-04 second: 6.417e-04 infty: 1.870e-03 bias: 1.845e-17 P time: 1.37727 first: 4.417e-04 second: 6.405e-04 infty: 1.867e-03 bias: 3.508e-17 P time: 1.38725 first: 4.410e-04 second: 6.393e-04 infty: 1.864e-03 bias: 4.132e-17 P time: 1.39723 first: 4.403e-04 second: 6.381e-04 infty: 1.861e-03 bias: -1.095e-16 P time: 1.40721 first: 4.396e-04 second: 6.369e-04 infty: 1.858e-03 bias: -1.682e-16 P time: 1.41719 first: 4.389e-04 second: 6.357e-04 infty: 1.856e-03 bias: -1.040e-16 P time: 1.42717 first: 4.382e-04 second: 6.345e-04 infty: 1.853e-03 bias: -1.088e-17 P time: 1.43715 first: 4.375e-04 second: 6.333e-04 infty: 1.850e-03 bias: -3.730e-17 P time: 1.44713 first: 4.368e-04 second: 6.321e-04 infty: 1.847e-03 bias: 4.908e-17 P time: 1.45711 first: 4.361e-04 second: 6.309e-04 infty: 1.844e-03 bias: 7.279e-17 P time: 1.46709 first: 4.354e-04 second: 6.297e-04 infty: 1.841e-03 bias: 2.574e-17 P time: 1.47707 first: 4.347e-04 second: 6.285e-04 infty: 1.838e-03 bias: -7.797e-17 P time: 1.48705 first: 4.340e-04 second: 6.273e-04 infty: 1.835e-03 bias: -3.300e-17 P time: 1.49703 first: 4.333e-04 second: 6.261e-04 infty: 1.832e-03 bias: -9.032e-17 P time: 1.50701 first: 4.326e-04 second: 6.249e-04 infty: 1.829e-03 bias: 4.527e-17 P time: 1.51699 first: 4.319e-04 second: 6.237e-04 infty: 1.826e-03 bias: -3.036e-18 P time: 1.52697 first: 4.312e-04 second: 6.225e-04 infty: 1.823e-03 bias: -6.171e-17 P time: 1.53695 first: 4.305e-04 second: 6.213e-04 infty: 1.820e-03 bias: -2.797e-17 P time: 1.54693 first: 4.299e-04 second: 6.201e-04 infty: 1.817e-03 bias: -8.197e-17 P time: 1.55691 first: 4.292e-04 second: 6.189e-04 infty: 1.814e-03 bias: -4.847e-17 P time: 1.56689 first: 4.285e-04 second: 6.177e-04 infty: 1.811e-03 bias: -1.817e-17 P time: 1.57687 first: 4.278e-04 second: 6.165e-04 infty: 1.808e-03 bias: -1.106e-16 P time: 1.58685 first: 4.271e-04 second: 6.153e-04 infty: 1.805e-03 bias: 1.721e-17 P time: 1.59683 first: 4.264e-04 second: 6.141e-04 infty: 1.802e-03 bias: -3.006e-17 P time: 1.60681 first: 4.257e-04 second: 6.130e-04 infty: 1.798e-03 bias: 1.085e-16 P time: 1.61679 first: 4.250e-04 second: 6.118e-04 infty: 1.795e-03 bias: 4.775e-17 P time: 1.62677 first: 4.244e-04 second: 6.106e-04 infty: 1.792e-03 bias: -1.725e-17 P time: 1.63675 first: 4.237e-04 second: 6.094e-04 infty: 1.789e-03 bias: 1.945e-16 P time: 1.64673 first: 4.230e-04 second: 6.082e-04 infty: 1.786e-03 bias: 8.494e-17 P time: 1.65671 first: 4.223e-04 second: 6.070e-04 infty: 1.782e-03 bias: -1.216e-16 P time: 1.66669 first: 4.216e-04 second: 6.058e-04 infty: 1.779e-03 bias: -2.937e-17 P time: 1.67667 first: 4.210e-04 second: 6.047e-04 infty: 1.776e-03 bias: -7.996e-18 P time: 1.68665 first: 4.203e-04 second: 6.035e-04 infty: 1.773e-03 bias: -6.063e-17 P time: 1.69663 first: 4.196e-04 second: 6.023e-04 infty: 1.769e-03 bias: 6.922e-17 P time: 1.70661 first: 4.189e-04 second: 6.011e-04 infty: 1.766e-03 bias: 9.217e-17 P time: 1.71659 first: 4.183e-04 second: 5.999e-04 infty: 1.763e-03 bias: 2.578e-17 P time: 1.72657 first: 4.176e-04 second: 5.987e-04 infty: 1.759e-03 bias: -3.564e-17 P time: 1.73655 first: 4.169e-04 second: 5.976e-04 infty: 1.756e-03 bias: 1.538e-16 P time: 1.74653 first: 4.162e-04 second: 5.964e-04 infty: 1.753e-03 bias: -9.670e-17 P time: 1.75651 first: 4.156e-04 second: 5.952e-04 infty: 1.749e-03 bias: -4.978e-17 P time: 1.76649 first: 4.149e-04 second: 5.940e-04 infty: 1.746e-03 bias: 1.775e-17 P time: 1.77647 first: 4.142e-04 second: 5.929e-04 infty: 1.742e-03 bias: -9.368e-18 P time: 1.78645 first: 4.136e-04 second: 5.917e-04 infty: 1.739e-03 bias: -8.914e-17 P time: 1.79643 first: 4.129e-04 second: 5.905e-04 infty: 1.735e-03 bias: -9.073e-18 P time: 1.80641 first: 4.122e-04 second: 5.893e-04 infty: 1.732e-03 bias: 6.258e-17 P time: 1.81639 first: 4.116e-04 second: 5.881e-04 infty: 1.728e-03 bias: 3.616e-17 P time: 1.82637 first: 4.109e-04 second: 5.870e-04 infty: 1.725e-03 bias: -4.095e-18 P time: 1.83635 first: 4.102e-04 second: 5.858e-04 infty: 1.721e-03 bias: 2.834e-17 P time: 1.84633 first: 4.095e-04 second: 5.846e-04 infty: 1.718e-03 bias: 4.783e-17 P time: 1.85631 first: 4.089e-04 second: 5.835e-04 infty: 1.714e-03 bias: -1.200e-17 P time: 1.86629 first: 4.082e-04 second: 5.823e-04 infty: 1.710e-03 bias: -4.478e-17 P time: 1.87627 first: 4.076e-04 second: 5.811e-04 infty: 1.707e-03 bias: -2.970e-17 P time: 1.88625 first: 4.069e-04 second: 5.799e-04 infty: 1.703e-03 bias: 1.091e-16 P time: 1.89623 first: 4.062e-04 second: 5.788e-04 infty: 1.699e-03 bias: 6.155e-17 P time: 1.90621 first: 4.056e-04 second: 5.776e-04 infty: 1.696e-03 bias: -3.687e-17 P time: 1.91619 first: 4.049e-04 second: 5.764e-04 infty: 1.692e-03 bias: -2.017e-17 P time: 1.92617 first: 4.042e-04 second: 5.753e-04 infty: 1.688e-03 bias: -1.249e-16 P time: 1.93615 first: 4.036e-04 second: 5.741e-04 infty: 1.684e-03 bias: 5.673e-17 P time: 1.94613 first: 4.029e-04 second: 5.729e-04 infty: 1.681e-03 bias: -2.943e-17 P time: 1.95611 first: 4.023e-04 second: 5.718e-04 infty: 1.677e-03 bias: 7.938e-17 P time: 1.96609 first: 4.016e-04 second: 5.706e-04 infty: 1.673e-03 bias: -8.424e-17 P time: 1.97607 first: 4.010e-04 second: 5.694e-04 infty: 1.669e-03 bias: -9.830e-17 P time: 1.98605 first: 4.003e-04 second: 5.683e-04 infty: 1.665e-03 bias: -7.478e-17 P time: 1.99603 first: 3.996e-04 second: 5.671e-04 infty: 1.661e-03 bias: -2.117e-17 P time: 2.00601 first: 3.990e-04 second: 5.659e-04 infty: 1.657e-03 bias: -1.969e-17 P time: 2.01599 first: 3.983e-04 second: 5.647e-04 infty: 1.653e-03 bias: 3.577e-17 P time: 2.02597 first: 3.977e-04 second: 5.636e-04 infty: 1.650e-03 bias: 6.825e-17 P time: 2.03595 first: 3.970e-04 second: 5.624e-04 infty: 1.645e-03 bias: 5.285e-18 P time: 2.04593 first: 3.964e-04 second: 5.613e-04 infty: 1.642e-03 bias: -1.493e-17 P time: 2.05591 first: 3.957e-04 second: 5.601e-04 infty: 1.637e-03 bias: -2.885e-18 P time: 2.06589 first: 3.951e-04 second: 5.590e-04 infty: 1.633e-03 bias: -8.840e-17 P time: 2.07587 first: 3.944e-04 second: 5.578e-04 infty: 1.629e-03 bias: -1.424e-16 P time: 2.08585 first: 3.937e-04 second: 5.567e-04 infty: 1.625e-03 bias: 1.174e-17 P time: 2.09583 first: 3.931e-04 second: 5.555e-04 infty: 1.621e-03 bias: -1.858e-17 P time: 2.10581 first: 3.924e-04 second: 5.543e-04 infty: 1.617e-03 bias: 1.035e-16 P time: 2.11579 first: 3.918e-04 second: 5.532e-04 infty: 1.613e-03 bias: -6.694e-17 P time: 2.12577 first: 3.911e-04 second: 5.520e-04 infty: 1.609e-03 bias: -9.516e-17 P time: 2.13575 first: 3.905e-04 second: 5.509e-04 infty: 1.605e-03 bias: -2.536e-17 P time: 2.14573 first: 3.898e-04 second: 5.497e-04 infty: 1.600e-03 bias: 6.433e-17 P time: 2.15571 first: 3.892e-04 second: 5.486e-04 infty: 1.596e-03 bias: 9.207e-17 P time: 2.16569 first: 3.885e-04 second: 5.474e-04 infty: 1.592e-03 bias: -7.862e-17 P time: 2.17567 first: 3.879e-04 second: 5.463e-04 infty: 1.588e-03 bias: -6.724e-17 P time: 2.18565 first: 3.872e-04 second: 5.451e-04 infty: 1.584e-03 bias: 7.998e-17 P time: 2.19563 first: 3.866e-04 second: 5.440e-04 infty: 1.579e-03 bias: 6.455e-17 P time: 2.20561 first: 3.859e-04 second: 5.428e-04 infty: 1.575e-03 bias: 1.348e-16 P time: 2.21559 first: 3.853e-04 second: 5.417e-04 infty: 1.571e-03 bias: 5.124e-17 P time: 2.22557 first: 3.846e-04 second: 5.405e-04 infty: 1.566e-03 bias: 1.545e-16 P time: 2.23555 first: 3.840e-04 second: 5.394e-04 infty: 1.562e-03 bias: 1.053e-16 P time: 2.24553 first: 3.834e-04 second: 5.382e-04 infty: 1.558e-03 bias: 4.086e-17 P time: 2.25551 first: 3.827e-04 second: 5.371e-04 infty: 1.553e-03 bias: 3.731e-17 P time: 2.26549 first: 3.821e-04 second: 5.359e-04 infty: 1.549e-03 bias: -3.946e-17 P time: 2.27547 first: 3.814e-04 second: 5.348e-04 infty: 1.544e-03 bias: 6.437e-17 P time: 2.28545 first: 3.808e-04 second: 5.336e-04 infty: 1.540e-03 bias: 1.230e-16 P time: 2.29543 first: 3.802e-04 second: 5.325e-04 infty: 1.536e-03 bias: -1.017e-16 P time: 2.30541 first: 3.795e-04 second: 5.313e-04 infty: 1.531e-03 bias: -2.474e-17 P time: 2.31539 first: 3.789e-04 second: 5.302e-04 infty: 1.527e-03 bias: -9.109e-18 P time: 2.32537 first: 3.782e-04 second: 5.290e-04 infty: 1.522e-03 bias: 7.328e-17 P time: 2.33535 first: 3.776e-04 second: 5.279e-04 infty: 1.518e-03 bias: 4.881e-17 P time: 2.34533 first: 3.769e-04 second: 5.268e-04 infty: 1.513e-03 bias: 5.452e-17 P time: 2.35531 first: 3.763e-04 second: 5.256e-04 infty: 1.509e-03 bias: 3.014e-17 P time: 2.36529 first: 3.757e-04 second: 5.245e-04 infty: 1.504e-03 bias: 5.639e-17 P time: 2.37527 first: 3.750e-04 second: 5.233e-04 infty: 1.499e-03 bias: -8.470e-20 P time: 2.38525 first: 3.744e-04 second: 5.222e-04 infty: 1.495e-03 bias: -1.362e-17 P time: 2.39523 first: 3.737e-04 second: 5.211e-04 infty: 1.490e-03 bias: 6.951e-17 P time: 2.40521 first: 3.731e-04 second: 5.199e-04 infty: 1.486e-03 bias: 7.259e-17 P time: 2.41519 first: 3.725e-04 second: 5.188e-04 infty: 1.481e-03 bias: 5.690e-17 P time: 2.42517 first: 3.718e-04 second: 5.177e-04 infty: 1.476e-03 bias: 6.127e-17 P time: 2.43515 first: 3.712e-04 second: 5.165e-04 infty: 1.472e-03 bias: -4.008e-17 P time: 2.44513 first: 3.705e-04 second: 5.154e-04 infty: 1.467e-03 bias: 9.213e-17 P time: 2.45511 first: 3.699e-04 second: 5.143e-04 infty: 1.463e-03 bias: 4.339e-17 P time: 2.46509 first: 3.693e-04 second: 5.131e-04 infty: 1.458e-03 bias: 9.983e-17 P time: 2.47507 first: 3.686e-04 second: 5.120e-04 infty: 1.453e-03 bias: -1.023e-16 P time: 2.48505 first: 3.680e-04 second: 5.109e-04 infty: 1.449e-03 bias: -8.427e-17 P time: 2.49503 first: 3.674e-04 second: 5.097e-04 infty: 1.444e-03 bias: 1.580e-16 P time: 2.50501 first: 3.667e-04 second: 5.086e-04 infty: 1.439e-03 bias: 4.771e-17 P time: 2.51499 first: 3.661e-04 second: 5.075e-04 infty: 1.436e-03 bias: -1.091e-16 P time: 2.52497 first: 3.655e-04 second: 5.064e-04 infty: 1.432e-03 bias: 6.498e-17 P time: 2.53495 first: 3.648e-04 second: 5.052e-04 infty: 1.428e-03 bias: -2.221e-17 P time: 2.54493 first: 3.642e-04 second: 5.041e-04 infty: 1.424e-03 bias: 4.218e-18 P time: 2.55491 first: 3.636e-04 second: 5.030e-04 infty: 1.420e-03 bias: 2.384e-17 P time: 2.56489 first: 3.629e-04 second: 5.019e-04 infty: 1.416e-03 bias: -1.301e-16 P time: 2.57487 first: 3.623e-04 second: 5.008e-04 infty: 1.412e-03 bias: 8.301e-18 P time: 2.58485 first: 3.616e-04 second: 4.996e-04 infty: 1.408e-03 bias: 6.077e-17 P time: 2.59483 first: 3.610e-04 second: 4.985e-04 infty: 1.404e-03 bias: -7.263e-17 P time: 2.60481 first: 3.604e-04 second: 4.974e-04 infty: 1.400e-03 bias: -6.011e-18 P time: 2.61479 first: 3.597e-04 second: 4.963e-04 infty: 1.396e-03 bias: 6.340e-17 P time: 2.62477 first: 3.591e-04 second: 4.952e-04 infty: 1.392e-03 bias: 5.218e-17 P time: 2.63475 first: 3.585e-04 second: 4.941e-04 infty: 1.388e-03 bias: -7.727e-18 P time: 2.64473 first: 3.578e-04 second: 4.929e-04 infty: 1.384e-03 bias: -1.656e-17 P time: 2.65471 first: 3.572e-04 second: 4.918e-04 infty: 1.380e-03 bias: 1.363e-16 P time: 2.66469 first: 3.566e-04 second: 4.907e-04 infty: 1.376e-03 bias: 9.420e-17 P time: 2.67467 first: 3.559e-04 second: 4.896e-04 infty: 1.372e-03 bias: -1.575e-16 P time: 2.68465 first: 3.553e-04 second: 4.885e-04 infty: 1.368e-03 bias: -3.141e-17 P time: 2.69463 first: 3.547e-04 second: 4.874e-04 infty: 1.364e-03 bias: -1.077e-16 P time: 2.70461 first: 3.540e-04 second: 4.863e-04 infty: 1.360e-03 bias: -1.998e-17 P time: 2.71459 first: 3.534e-04 second: 4.852e-04 infty: 1.355e-03 bias: 7.297e-17 P time: 2.72457 first: 3.528e-04 second: 4.841e-04 infty: 1.351e-03 bias: 9.292e-17 P time: 2.73455 first: 3.521e-04 second: 4.830e-04 infty: 1.347e-03 bias: -3.882e-17 P time: 2.74453 first: 3.515e-04 second: 4.819e-04 infty: 1.343e-03 bias: -4.958e-17 P time: 2.75451 first: 3.509e-04 second: 4.808e-04 infty: 1.339e-03 bias: 1.835e-16 P time: 2.76449 first: 3.502e-04 second: 4.797e-04 infty: 1.335e-03 bias: 2.696e-17 P time: 2.77447 first: 3.496e-04 second: 4.786e-04 infty: 1.331e-03 bias: 6.585e-17 P time: 2.78445 first: 3.490e-04 second: 4.775e-04 infty: 1.327e-03 bias: -7.782e-17 P time: 2.79443 first: 3.484e-04 second: 4.764e-04 infty: 1.322e-03 bias: 1.256e-16 P time: 2.80441 first: 3.477e-04 second: 4.753e-04 infty: 1.318e-03 bias: -6.045e-17 P time: 2.81439 first: 3.471e-04 second: 4.742e-04 infty: 1.314e-03 bias: 2.794e-17 P time: 2.82437 first: 3.465e-04 second: 4.732e-04 infty: 1.310e-03 bias: 3.540e-17 P time: 2.83435 first: 3.458e-04 second: 4.721e-04 infty: 1.306e-03 bias: -4.504e-17 P time: 2.84433 first: 3.452e-04 second: 4.710e-04 infty: 1.302e-03 bias: -1.099e-17 P time: 2.85431 first: 3.446e-04 second: 4.699e-04 infty: 1.297e-03 bias: -1.738e-17 P time: 2.86429 first: 3.440e-04 second: 4.688e-04 infty: 1.293e-03 bias: 2.068e-17 P time: 2.87427 first: 3.433e-04 second: 4.678e-04 infty: 1.289e-03 bias: -3.307e-17 P time: 2.88425 first: 3.427e-04 second: 4.667e-04 infty: 1.285e-03 bias: 1.630e-18 P time: 2.89423 first: 3.421e-04 second: 4.656e-04 infty: 1.281e-03 bias: -1.916e-17 P time: 2.90421 first: 3.415e-04 second: 4.645e-04 infty: 1.277e-03 bias: 4.734e-17 P time: 2.91419 first: 3.408e-04 second: 4.635e-04 infty: 1.272e-03 bias: -1.001e-16 P time: 2.92417 first: 3.402e-04 second: 4.624e-04 infty: 1.268e-03 bias: 6.012e-17 P time: 2.93415 first: 3.396e-04 second: 4.613e-04 infty: 1.264e-03 bias: -1.547e-18 P time: 2.94413 first: 3.390e-04 second: 4.603e-04 infty: 1.260e-03 bias: 1.021e-16 P time: 2.95411 first: 3.384e-04 second: 4.592e-04 infty: 1.256e-03 bias: 4.361e-17 P time: 2.96409 first: 3.377e-04 second: 4.581e-04 infty: 1.253e-03 bias: 5.395e-17 P time: 2.97407 first: 3.371e-04 second: 4.571e-04 infty: 1.249e-03 bias: -7.013e-17 P time: 2.98405 first: 3.365e-04 second: 4.560e-04 infty: 1.246e-03 bias: 1.339e-16 P time: 2.99403 first: 3.359e-04 second: 4.550e-04 infty: 1.242e-03 bias: 5.850e-17 P time: 3.00401 first: 3.353e-04 second: 4.539e-04 infty: 1.238e-03 bias: 2.689e-17 P time: 3.01399 first: 3.346e-04 second: 4.529e-04 infty: 1.235e-03 bias: 2.744e-17 P time: 3.02397 first: 3.340e-04 second: 4.518e-04 infty: 1.231e-03 bias: -9.316e-17 P time: 3.03395 first: 3.334e-04 second: 4.508e-04 infty: 1.228e-03 bias: 1.688e-17 P time: 3.04393 first: 3.328e-04 second: 4.497e-04 infty: 1.224e-03 bias: -8.960e-17 P time: 3.05391 first: 3.322e-04 second: 4.487e-04 infty: 1.221e-03 bias: -5.082e-19 P time: 3.06389 first: 3.316e-04 second: 4.476e-04 infty: 1.217e-03 bias: -2.750e-17 P time: 3.07387 first: 3.310e-04 second: 4.466e-04 infty: 1.214e-03 bias: -8.113e-18 P time: 3.08385 first: 3.304e-04 second: 4.456e-04 infty: 1.210e-03 bias: -9.018e-17 P time: 3.09383 first: 3.297e-04 second: 4.445e-04 infty: 1.207e-03 bias: 2.967e-17 P time: 3.10381 first: 3.291e-04 second: 4.435e-04 infty: 1.203e-03 bias: -2.538e-18 P time: 3.11379 first: 3.285e-04 second: 4.425e-04 infty: 1.200e-03 bias: 6.779e-17 P time: 3.12377 first: 3.279e-04 second: 4.414e-04 infty: 1.196e-03 bias: 2.812e-18 P time: 3.13375 first: 3.273e-04 second: 4.404e-04 infty: 1.193e-03 bias: -8.055e-18 P time: 3.14373 first: 3.267e-04 second: 4.394e-04 infty: 1.189e-03 bias: -6.451e-17 P time: 3.15371 first: 3.261e-04 second: 4.384e-04 infty: 1.186e-03 bias: -9.329e-18 P time: 3.16369 first: 3.254e-04 second: 4.373e-04 infty: 1.182e-03 bias: 7.190e-17 P time: 3.17367 first: 3.248e-04 second: 4.363e-04 infty: 1.179e-03 bias: -4.769e-17 P time: 3.18365 first: 3.242e-04 second: 4.353e-04 infty: 1.176e-03 bias: -1.186e-16 P time: 3.19363 first: 3.236e-04 second: 4.343e-04 infty: 1.172e-03 bias: 5.838e-17 P time: 3.20361 first: 3.230e-04 second: 4.333e-04 infty: 1.169e-03 bias: -6.587e-17 P time: 3.21359 first: 3.224e-04 second: 4.323e-04 infty: 1.165e-03 bias: -7.005e-17 P time: 3.22357 first: 3.218e-04 second: 4.313e-04 infty: 1.162e-03 bias: -5.710e-17 P time: 3.23355 first: 3.212e-04 second: 4.303e-04 infty: 1.158e-03 bias: 9.970e-17 P time: 3.24353 first: 3.206e-04 second: 4.293e-04 infty: 1.155e-03 bias: 6.915e-17 P time: 3.25351 first: 3.199e-04 second: 4.283e-04 infty: 1.152e-03 bias: 4.801e-17 P time: 3.26349 first: 3.193e-04 second: 4.273e-04 infty: 1.148e-03 bias: 1.061e-16 P time: 3.27347 first: 3.187e-04 second: 4.263e-04 infty: 1.145e-03 bias: -3.735e-17 P time: 3.28345 first: 3.181e-04 second: 4.253e-04 infty: 1.142e-03 bias: -1.108e-16 P time: 3.29343 first: 3.175e-04 second: 4.244e-04 infty: 1.138e-03 bias: -9.914e-17 P time: 3.30341 first: 3.169e-04 second: 4.234e-04 infty: 1.135e-03 bias: 8.007e-17 P time: 3.31339 first: 3.163e-04 second: 4.224e-04 infty: 1.132e-03 bias: 2.970e-17 P time: 3.32337 first: 3.157e-04 second: 4.214e-04 infty: 1.128e-03 bias: -2.914e-17 P time: 3.33335 first: 3.150e-04 second: 4.205e-04 infty: 1.125e-03 bias: 1.027e-17 P time: 3.34333 first: 3.144e-04 second: 4.195e-04 infty: 1.122e-03 bias: 1.008e-17 P time: 3.35331 first: 3.138e-04 second: 4.185e-04 infty: 1.118e-03 bias: 3.934e-17 P time: 3.36329 first: 3.132e-04 second: 4.176e-04 infty: 1.115e-03 bias: 9.316e-17 P time: 3.37327 first: 3.126e-04 second: 4.166e-04 infty: 1.112e-03 bias: -1.611e-17 P time: 3.38325 first: 3.120e-04 second: 4.156e-04 infty: 1.109e-03 bias: 1.190e-17 P time: 3.39323 first: 3.114e-04 second: 4.147e-04 infty: 1.105e-03 bias: -5.875e-17 P time: 3.40321 first: 3.108e-04 second: 4.137e-04 infty: 1.102e-03 bias: 1.606e-17 P time: 3.41319 first: 3.101e-04 second: 4.128e-04 infty: 1.099e-03 bias: 7.745e-17 P time: 3.42317 first: 3.095e-04 second: 4.119e-04 infty: 1.096e-03 bias: 6.939e-17 P time: 3.43315 first: 3.089e-04 second: 4.109e-04 infty: 1.092e-03 bias: 5.551e-17 P time: 3.44313 first: 3.083e-04 second: 4.100e-04 infty: 1.089e-03 bias: 1.956e-16 P time: 3.45311 first: 3.077e-04 second: 4.090e-04 infty: 1.086e-03 bias: -1.510e-17 P time: 3.46309 first: 3.071e-04 second: 4.081e-04 infty: 1.083e-03 bias: -2.428e-17 P time: 3.47307 first: 3.065e-04 second: 4.072e-04 infty: 1.080e-03 bias: 4.559e-18 P time: 3.48305 first: 3.059e-04 second: 4.063e-04 infty: 1.077e-03 bias: -4.111e-17 P time: 3.49303 first: 3.053e-04 second: 4.053e-04 infty: 1.073e-03 bias: 6.665e-17 P time: 3.50301 first: 3.047e-04 second: 4.044e-04 infty: 1.070e-03 bias: -1.019e-16 P time: 3.51299 first: 3.041e-04 second: 4.035e-04 infty: 1.067e-03 bias: -5.908e-17 P time: 3.52297 first: 3.035e-04 second: 4.026e-04 infty: 1.064e-03 bias: 1.622e-16 P time: 3.53295 first: 3.029e-04 second: 4.017e-04 infty: 1.061e-03 bias: -9.679e-17 P time: 3.54293 first: 3.023e-04 second: 4.008e-04 infty: 1.058e-03 bias: -7.713e-17 P time: 3.55291 first: 3.016e-04 second: 3.999e-04 infty: 1.055e-03 bias: 6.969e-17 P time: 3.56289 first: 3.010e-04 second: 3.990e-04 infty: 1.052e-03 bias: 2.321e-17 P time: 3.57287 first: 3.004e-04 second: 3.981e-04 infty: 1.049e-03 bias: 2.349e-17 P time: 3.58285 first: 2.998e-04 second: 3.972e-04 infty: 1.046e-03 bias: -3.241e-17 P time: 3.59283 first: 2.992e-04 second: 3.963e-04 infty: 1.043e-03 bias: 1.163e-16 P time: 3.60281 first: 2.986e-04 second: 3.954e-04 infty: 1.040e-03 bias: 9.854e-17 P time: 3.61279 first: 2.981e-04 second: 3.945e-04 infty: 1.036e-03 bias: 4.105e-17 P time: 3.62277 first: 2.975e-04 second: 3.937e-04 infty: 1.033e-03 bias: -1.241e-16 P time: 3.63275 first: 2.969e-04 second: 3.928e-04 infty: 1.030e-03 bias: -5.773e-17 P time: 3.64273 first: 2.963e-04 second: 3.919e-04 infty: 1.027e-03 bias: 1.431e-16 P time: 3.65271 first: 2.957e-04 second: 3.911e-04 infty: 1.024e-03 bias: 1.666e-16 P time: 3.66269 first: 2.951e-04 second: 3.902e-04 infty: 1.021e-03 bias: 1.426e-17 P time: 3.67267 first: 2.945e-04 second: 3.893e-04 infty: 1.019e-03 bias: 7.035e-17 P time: 3.68265 first: 2.939e-04 second: 3.885e-04 infty: 1.016e-03 bias: -4.381e-17 P time: 3.69263 first: 2.933e-04 second: 3.876e-04 infty: 1.013e-03 bias: 3.247e-17 P time: 3.70261 first: 2.927e-04 second: 3.868e-04 infty: 1.010e-03 bias: -1.044e-16 P time: 3.71259 first: 2.921e-04 second: 3.859e-04 infty: 1.007e-03 bias: -1.840e-16 P time: 3.72257 first: 2.916e-04 second: 3.851e-04 infty: 1.004e-03 bias: 8.283e-17 P time: 3.73255 first: 2.910e-04 second: 3.843e-04 infty: 1.002e-03 bias: 1.278e-16 P time: 3.74253 first: 2.904e-04 second: 3.834e-04 infty: 9.994e-04 bias: 8.995e-17 P time: 3.75251 first: 2.898e-04 second: 3.826e-04 infty: 9.970e-04 bias: 6.488e-17 P time: 3.76248 first: 2.892e-04 second: 3.818e-04 infty: 9.945e-04 bias: -4.469e-17 P time: 3.77246 first: 2.886e-04 second: 3.810e-04 infty: 9.921e-04 bias: -6.066e-17 P time: 3.78244 first: 2.881e-04 second: 3.801e-04 infty: 9.897e-04 bias: 3.233e-17 P time: 3.79242 first: 2.875e-04 second: 3.793e-04 infty: 9.872e-04 bias: 1.235e-16 P time: 3.8024 first: 2.869e-04 second: 3.785e-04 infty: 9.848e-04 bias: 1.812e-17 P time: 3.81238 first: 2.863e-04 second: 3.777e-04 infty: 9.823e-04 bias: -1.101e-17 P time: 3.82236 first: 2.858e-04 second: 3.769e-04 infty: 9.799e-04 bias: -6.946e-20 P time: 3.83234 first: 2.852e-04 second: 3.761e-04 infty: 9.775e-04 bias: 2.631e-17 P time: 3.84232 first: 2.846e-04 second: 3.753e-04 infty: 9.751e-04 bias: -2.497e-17 P time: 3.8523 first: 2.840e-04 second: 3.745e-04 infty: 9.726e-04 bias: 3.792e-17 P time: 3.86228 first: 2.835e-04 second: 3.738e-04 infty: 9.702e-04 bias: 9.010e-17 P time: 3.87226 first: 2.829e-04 second: 3.730e-04 infty: 9.678e-04 bias: -4.484e-17 P time: 3.88224 first: 2.824e-04 second: 3.722e-04 infty: 9.654e-04 bias: 9.436e-19 P time: 3.89222 first: 2.818e-04 second: 3.714e-04 infty: 9.630e-04 bias: -3.379e-17 P time: 3.9022 first: 2.812e-04 second: 3.707e-04 infty: 9.606e-04 bias: 6.967e-17 P time: 3.91218 first: 2.807e-04 second: 3.699e-04 infty: 9.582e-04 bias: 4.387e-17 P time: 3.92216 first: 2.801e-04 second: 3.691e-04 infty: 9.558e-04 bias: -1.061e-17 P time: 3.93214 first: 2.796e-04 second: 3.684e-04 infty: 9.534e-04 bias: 3.964e-17 P time: 3.94212 first: 2.790e-04 second: 3.676e-04 infty: 9.510e-04 bias: -3.695e-17 P time: 3.9521 first: 2.785e-04 second: 3.669e-04 infty: 9.486e-04 bias: -2.024e-17 P time: 3.96208 first: 2.779e-04 second: 3.661e-04 infty: 9.462e-04 bias: -1.987e-17 P time: 3.97206 first: 2.774e-04 second: 3.654e-04 infty: 9.438e-04 bias: 7.063e-17 P time: 3.98204 first: 2.769e-04 second: 3.647e-04 infty: 9.414e-04 bias: 5.791e-17 P time: 3.99202 first: 2.763e-04 second: 3.639e-04 infty: 9.390e-04 bias: -2.113e-17 P time: 4.002 first: 2.758e-04 second: 3.632e-04 infty: 9.366e-04 bias: 8.766e-17 P time: 4.01198 first: 2.752e-04 second: 3.625e-04 infty: 9.342e-04 bias: 4.194e-17 P time: 4.02196 first: 2.747e-04 second: 3.618e-04 infty: 9.318e-04 bias: -7.910e-17 P time: 4.03194 first: 2.742e-04 second: 3.611e-04 infty: 9.294e-04 bias: 6.927e-17 P time: 4.04192 first: 2.737e-04 second: 3.603e-04 infty: 9.270e-04 bias: 2.249e-17 P time: 4.0519 first: 2.731e-04 second: 3.596e-04 infty: 9.246e-04 bias: 9.621e-18 P time: 4.06188 first: 2.726e-04 second: 3.589e-04 infty: 9.222e-04 bias: -1.662e-18 P time: 4.07186 first: 2.721e-04 second: 3.582e-04 infty: 9.198e-04 bias: -5.930e-17 P time: 4.08184 first: 2.716e-04 second: 3.576e-04 infty: 9.174e-04 bias: -2.961e-18 P time: 4.09182 first: 2.711e-04 second: 3.569e-04 infty: 9.150e-04 bias: 2.643e-19 P time: 4.1018 first: 2.706e-04 second: 3.562e-04 infty: 9.126e-04 bias: 7.583e-17 P time: 4.11178 first: 2.701e-04 second: 3.555e-04 infty: 9.102e-04 bias: -4.772e-17 P time: 4.12176 first: 2.696e-04 second: 3.548e-04 infty: 9.078e-04 bias: 8.760e-18 P time: 4.13174 first: 2.691e-04 second: 3.542e-04 infty: 9.054e-04 bias: -2.409e-17 P time: 4.14172 first: 2.687e-04 second: 3.535e-04 infty: 9.030e-04 bias: 5.582e-17 P time: 4.1517 first: 2.682e-04 second: 3.528e-04 infty: 9.006e-04 bias: -1.638e-17 P time: 4.16168 first: 2.677e-04 second: 3.522e-04 infty: 8.986e-04 bias: -9.982e-17 P time: 4.17166 first: 2.673e-04 second: 3.515e-04 infty: 8.983e-04 bias: -1.808e-18 P time: 4.18164 first: 2.668e-04 second: 3.509e-04 infty: 8.980e-04 bias: 7.134e-17 P time: 4.19162 first: 2.663e-04 second: 3.502e-04 infty: 8.977e-04 bias: -2.151e-16 P time: 4.2016 first: 2.659e-04 second: 3.496e-04 infty: 8.974e-04 bias: -7.181e-18 P time: 4.21158 first: 2.654e-04 second: 3.490e-04 infty: 8.971e-04 bias: 8.716e-18 P time: 4.22156 first: 2.650e-04 second: 3.483e-04 infty: 8.968e-04 bias: 1.453e-17 P time: 4.23154 first: 2.646e-04 second: 3.477e-04 infty: 8.964e-04 bias: 1.042e-16 P time: 4.24152 first: 2.641e-04 second: 3.471e-04 infty: 8.961e-04 bias: 5.023e-17 P time: 4.2515 first: 2.637e-04 second: 3.465e-04 infty: 8.958e-04 bias: -7.793e-17 P time: 4.26148 first: 2.633e-04 second: 3.459e-04 infty: 8.955e-04 bias: 6.364e-17 P time: 4.27146 first: 2.629e-04 second: 3.453e-04 infty: 8.952e-04 bias: 6.599e-17 P time: 4.28144 first: 2.625e-04 second: 3.447e-04 infty: 8.948e-04 bias: 1.719e-17 P time: 4.29142 first: 2.621e-04 second: 3.441e-04 infty: 8.944e-04 bias: -4.442e-17 P time: 4.3014 first: 2.617e-04 second: 3.435e-04 infty: 8.941e-04 bias: 1.873e-16 P time: 4.31138 first: 2.613e-04 second: 3.429e-04 infty: 8.938e-04 bias: 4.636e-17 P time: 4.32136 first: 2.609e-04 second: 3.423e-04 infty: 8.934e-04 bias: 1.209e-16 P time: 4.33134 first: 2.605e-04 second: 3.417e-04 infty: 8.930e-04 bias: 9.280e-17 P time: 4.34132 first: 2.602e-04 second: 3.411e-04 infty: 8.927e-04 bias: -8.328e-17 P time: 4.3513 first: 2.598e-04 second: 3.406e-04 infty: 8.923e-04 bias: 3.301e-17 P time: 4.36128 first: 2.594e-04 second: 3.400e-04 infty: 8.919e-04 bias: -2.723e-17 P time: 4.37126 first: 2.591e-04 second: 3.394e-04 infty: 8.915e-04 bias: 7.221e-17 P time: 4.38124 first: 2.587e-04 second: 3.389e-04 infty: 8.912e-04 bias: -9.695e-17 P time: 4.39122 first: 2.583e-04 second: 3.383e-04 infty: 8.908e-04 bias: -3.569e-17 P time: 4.4012 first: 2.580e-04 second: 3.378e-04 infty: 8.904e-04 bias: 4.861e-17 P time: 4.41118 first: 2.577e-04 second: 3.372e-04 infty: 8.900e-04 bias: -6.185e-17 P time: 4.42116 first: 2.573e-04 second: 3.367e-04 infty: 8.895e-04 bias: -1.303e-16 P time: 4.43114 first: 2.570e-04 second: 3.362e-04 infty: 8.891e-04 bias: 3.927e-17 P time: 4.44112 first: 2.567e-04 second: 3.356e-04 infty: 8.887e-04 bias: 1.472e-17 P time: 4.4511 first: 2.564e-04 second: 3.351e-04 infty: 8.883e-04 bias: 1.799e-16 P time: 4.46108 first: 2.561e-04 second: 3.346e-04 infty: 8.878e-04 bias: -7.903e-17 P time: 4.47106 first: 2.558e-04 second: 3.341e-04 infty: 8.874e-04 bias: 9.546e-17 P time: 4.48104 first: 2.555e-04 second: 3.336e-04 infty: 8.870e-04 bias: -2.213e-17 P time: 4.49102 first: 2.552e-04 second: 3.331e-04 infty: 8.865e-04 bias: -2.717e-17 P time: 4.501 first: 2.549e-04 second: 3.326e-04 infty: 8.861e-04 bias: -6.102e-17 P time: 4.51098 first: 2.546e-04 second: 3.321e-04 infty: 8.856e-04 bias: 7.541e-17 P time: 4.52096 first: 2.543e-04 second: 3.316e-04 infty: 8.851e-04 bias: -4.428e-17 P time: 4.53094 first: 2.541e-04 second: 3.311e-04 infty: 8.847e-04 bias: 9.137e-17 P time: 4.54092 first: 2.538e-04 second: 3.306e-04 infty: 8.844e-04 bias: -3.053e-17 P time: 4.5509 first: 2.535e-04 second: 3.301e-04 infty: 8.841e-04 bias: 3.157e-17 P time: 4.56088 first: 2.532e-04 second: 3.296e-04 infty: 8.838e-04 bias: 2.324e-17 P time: 4.57086 first: 2.530e-04 second: 3.292e-04 infty: 8.835e-04 bias: 1.012e-16 P time: 4.58084 first: 2.527e-04 second: 3.287e-04 infty: 8.832e-04 bias: 3.059e-17 P time: 4.59082 first: 2.524e-04 second: 3.283e-04 infty: 8.830e-04 bias: -6.582e-17 P time: 4.6008 first: 2.522e-04 second: 3.278e-04 infty: 8.826e-04 bias: 1.707e-17 P time: 4.61078 first: 2.519e-04 second: 3.273e-04 infty: 8.823e-04 bias: 3.547e-17 P time: 4.62076 first: 2.517e-04 second: 3.269e-04 infty: 8.820e-04 bias: -1.259e-18 P time: 4.63074 first: 2.514e-04 second: 3.265e-04 infty: 8.817e-04 bias: 6.094e-17 P time: 4.64072 first: 2.512e-04 second: 3.260e-04 infty: 8.814e-04 bias: -1.124e-16 P time: 4.6507 first: 2.510e-04 second: 3.256e-04 infty: 8.811e-04 bias: -5.305e-17 P time: 4.66068 first: 2.507e-04 second: 3.252e-04 infty: 8.807e-04 bias: -2.234e-17 P time: 4.67066 first: 2.505e-04 second: 3.247e-04 infty: 8.804e-04 bias: -1.287e-16 P time: 4.68064 first: 2.503e-04 second: 3.243e-04 infty: 8.801e-04 bias: -4.654e-17 P time: 4.69062 first: 2.501e-04 second: 3.239e-04 infty: 8.797e-04 bias: 2.588e-17 P time: 4.7006 first: 2.499e-04 second: 3.235e-04 infty: 8.793e-04 bias: 6.962e-17 P time: 4.71058 first: 2.497e-04 second: 3.231e-04 infty: 8.790e-04 bias: 5.641e-17 P time: 4.72056 first: 2.495e-04 second: 3.227e-04 infty: 8.786e-04 bias: -1.487e-16 P time: 4.73054 first: 2.493e-04 second: 3.223e-04 infty: 8.783e-04 bias: -1.402e-17 P time: 4.74052 first: 2.491e-04 second: 3.219e-04 infty: 8.779e-04 bias: 5.446e-17 P time: 4.7505 first: 2.489e-04 second: 3.215e-04 infty: 8.775e-04 bias: -5.443e-17 P time: 4.76048 first: 2.488e-04 second: 3.211e-04 infty: 8.771e-04 bias: -5.452e-17 P time: 4.77046 first: 2.486e-04 second: 3.208e-04 infty: 8.767e-04 bias: -5.258e-17 P time: 4.78044 first: 2.484e-04 second: 3.204e-04 infty: 8.763e-04 bias: 2.571e-17 P time: 4.79042 first: 2.483e-04 second: 3.200e-04 infty: 8.759e-04 bias: 6.611e-17 P time: 4.8004 first: 2.481e-04 second: 3.197e-04 infty: 8.755e-04 bias: -3.111e-17 P time: 4.81038 first: 2.480e-04 second: 3.193e-04 infty: 8.751e-04 bias: 6.730e-17 P time: 4.82036 first: 2.478e-04 second: 3.190e-04 infty: 8.746e-04 bias: -9.165e-19 P time: 4.83034 first: 2.477e-04 second: 3.186e-04 infty: 8.742e-04 bias: 4.300e-17 P time: 4.84032 first: 2.475e-04 second: 3.183e-04 infty: 8.738e-04 bias: 7.686e-17 P time: 4.8503 first: 2.474e-04 second: 3.179e-04 infty: 8.734e-04 bias: 1.490e-17 P time: 4.86028 first: 2.472e-04 second: 3.176e-04 infty: 8.729e-04 bias: -1.394e-17 P time: 4.87026 first: 2.471e-04 second: 3.173e-04 infty: 8.724e-04 bias: -5.994e-17 P time: 4.88024 first: 2.470e-04 second: 3.169e-04 infty: 8.720e-04 bias: 5.169e-17 P time: 4.89022 first: 2.468e-04 second: 3.166e-04 infty: 8.715e-04 bias: -7.767e-17 P time: 4.9002 first: 2.467e-04 second: 3.163e-04 infty: 8.710e-04 bias: 7.203e-18 P time: 4.91018 first: 2.466e-04 second: 3.160e-04 infty: 8.706e-04 bias: -7.081e-19 P time: 4.92016 first: 2.465e-04 second: 3.157e-04 infty: 8.701e-04 bias: -9.991e-17 P time: 4.93014 first: 2.463e-04 second: 3.154e-04 infty: 8.696e-04 bias: -2.775e-17 P time: 4.94012 first: 2.462e-04 second: 3.151e-04 infty: 8.691e-04 bias: -6.197e-17 P time: 4.9501 first: 2.461e-04 second: 3.148e-04 infty: 8.686e-04 bias: 4.890e-17 P time: 4.96008 first: 2.460e-04 second: 3.145e-04 infty: 8.681e-04 bias: -3.386e-17 P time: 4.97006 first: 2.459e-04 second: 3.142e-04 infty: 8.676e-04 bias: 1.296e-16 P time: 4.98004 first: 2.458e-04 second: 3.139e-04 infty: 8.671e-04 bias: 8.145e-17 P time: 4.99002 first: 2.457e-04 second: 3.137e-04 infty: 8.665e-04 bias: -1.264e-16 P time: 5 first: 2.457e-04 second: 3.134e-04 infty: 8.660e-04 bias: -8.539e-17 gerris-snapshot-131206/test/nonlinear/error.gfv0000644000175100017510000000061712250371171016467 00000000000000# GfsView 2D View { tx = -0.0901092 ty = 0.00843738 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 27.8942 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } E { amin = 1 amax = 1 show = 1 cmap = Jet } gerris-snapshot-131206/test/nonlinear/nonlinear.gfs0000644000175100017510000000702712250371171017322 00000000000000# Title: Non-linear geostrophic adjustment # # Description: # # For a circular vortex defined by a tangential velocity # $u_\theta(r)$, the radial height/pressure profile is a solution of # $$h'_0(r)={u_\theta\over g}\left(2\Omega + {u_\theta\over r}\right)$$ # with $\Omega$ the angular velocity. For this test case we take # $$u_\theta(r)=(r < 0.4)\epsilon(1+\cos(\pi(r-0.2)/0.2))/2$$ # # The control parameters are the Froude number $U/\sqrt{gH}$ and the # Rossby number $Ro=U/\Omega L$. We set the Froude number to 0.1 and # consider Rossby numbers 0.1 and $\infty$ (no rotation). In the case # without rotation the errors reflect only the accuracy of the # momentum advection terms. With rotation, the errors also depend on # the accuracy of the discretisation of the geostrophic balance. # # Figure \ref{error} illustrate the evolution of the errors on free # surface height/pressure for the different solvers, with and without # rotation. # # \begin{figure}[htbp] # \caption{\label{error}Evolution of the maximum relative error on # free-surface height. (a) $Ro=\infty$, (b) $Ro=0.1$.} # \begin{center} # \begin{tabular}{cc} # \includegraphics[width=0.45\hsize]{error-0.eps} & # \includegraphics[width=0.45\hsize]{error-1.eps} \\ # (a) & (b) # \end{tabular} # \end{center} # \end{figure} # # Figure \ref{error-distribution} display the error distributions at $t=5$. # # \begin{figure}[htbp] # \caption{\label{error-distribution}Error distribution at $t=5$. Top # row: $Ro=\infty$, bottom row: $Ro=0.1$.} # \begin{center} # \begin{tabular}{ccc} # incompressible & linearised free-surface & Saint-Venant \\ # \includegraphics[width=0.33\hsize]{end-0.eps} & # \includegraphics[width=0.33\hsize]{end-ocean-0.eps} & # \includegraphics[width=0.33\hsize]{end-river-0.eps} \\ # \includegraphics[width=0.33\hsize]{end-1.eps} & # \includegraphics[width=0.33\hsize]{end-ocean-1.eps} & # \includegraphics[width=0.33\hsize]{end-river-1.eps} # \end{tabular} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh nonlinear.sh # Version: 120814 # Required files: nonlinear.sh river.gfs ocean.gfs error.gfv error-ocean.gfv error-1.ref error-ocean-1.ref error-river-1.ref # Running time: 5 minutes # Generated files: end-0.eps end-ocean-0.eps end-river-0.eps end-1.eps end-ocean-1.eps end-river-1.eps error-0.eps error-1.eps # 1 0 GfsSimulation GfsBox GfsGEdge {} { Time { end = 5 dtmax = 1e-2 } PhysicalParams { L = 1 } Global { #include @link -lgsl -lgslcblas #define G 1. #define FROUDE 0.1 double vtheta (double r) { return FROUDE*(r < 0.4)*(1. + cos((r - 0.2)/0.2*M_PI))/2.; } double h0p (double r, void * p) { double vt = vtheta(r); return vt*(2.*OMEGA + vt/r)/G; } double h0 (double r) { gsl_integration_workspace * w = gsl_integration_workspace_alloc (1000); double result, error; gsl_function F; F.function = &h0p; gsl_integration_qags (&F, 0, r, 0, 1e-7, 1000, w, &result, &error); gsl_integration_workspace_free (w); return result; } } SourceCoriolis 2.*OMEGA Init {} { U = - vtheta(sqrt (x*x + y*y))*y/sqrt (x*x + y*y) V = vtheta(sqrt (x*x + y*y))*x/sqrt (x*x + y*y) } ApproxProjectionParams { tolerance = 1e-9 } ProjectionParams { tolerance = 1e-9 } Refine 6 OutputScalarSum { istep = 1 } energy-OMEGA { v = Velocity2 } OutputErrorNorm { istep = 1 } error-OMEGA { v = P } { s = h0(sqrt (x*x + y*y)) v = E unbiased = 1 relative = 1 } OutputSimulation { start = end } end-OMEGA.gfs } GfsBox {} gerris-snapshot-131206/test/nonlinear/river.gfs0000644000175100017510000000263312250371171016462 000000000000001 0 GfsRiver GfsBox GfsGEdge {} { Time { end = 5 dtmax = 1e-2 } Global { #include @link -lgsl -lgslcblas #define G 1. #define H0 1. #define FROUDE 0.1 double vtheta (double r) { return FROUDE*(r < 0.4)*(1. + cos((r - 0.2)/0.2*M_PI))/2.; } double h0p (double r, void * p) { double vt = vtheta(r); return vt*(2.*OMEGA + vt/r)/G; } double h0 (double r) { gsl_integration_workspace * w = gsl_integration_workspace_alloc (1000); double result, error; gsl_function F; F.function = &h0p; gsl_integration_qags (&F, 0, r, 0, 1e-7, 1000, w, &result, &error); gsl_integration_workspace_free (w); return result; } } PhysicalParams { L = 1 g = G } AdvectionParams { gradient = gfs_center_gradient } SourceCoriolis 2.*OMEGA Init {} { P = (H0 + h0(sqrt (x*x + y*y))) U = - vtheta(sqrt (x*x + y*y))*y/sqrt (x*x + y*y)*P V = vtheta(sqrt (x*x + y*y))*x/sqrt (x*x + y*y)*P } Refine 6 OutputScalarSum { istep = 1 } energy-river-OMEGA { v = (P*Velocity2 + G*(H - H0)*(H - H0))/2. } OutputErrorNorm { istep = 1 } error-river-OMEGA { v = P } { s = h0(sqrt (x*x + y*y)) v = E unbiased = 1 relative = 1 } OutputSimulation { start = end } end-river-OMEGA.gfs } GfsBox { top = Boundary bottom = Boundary right = Boundary left = Boundary } gerris-snapshot-131206/test/harmonic/0000755000175100017510000000000012250371674014531 500000000000000gerris-snapshot-131206/test/harmonic/order.ref0000644000175100017510000000016012250371171016247 000000000000004 2.02773 2.02815 1.97344 5 2.00157 2.0049 1.9799 6 2 2 1.99384 7 1.999 1.99882 1.9978 8 1.9991 1.99906 1.96751 gerris-snapshot-131206/test/harmonic/error.ref0000644000175100017510000000030012250371171016261 000000000000003 7.511e-03 9.626e-03 2.099e-02 4 1.842e-03 2.360e-03 5.345e-03 5 4.600e-04 5.880e-04 1.355e-03 6 1.150e-04 1.470e-04 3.402e-04 7 2.877e-05 3.678e-05 8.518e-05 8 7.197e-06 9.201e-06 2.178e-05 gerris-snapshot-131206/test/harmonic/gerris.gfv0000644000175100017510000000117712250371171016446 00000000000000# GfsView 2D View { tx = -1.46721 ty = -1.00442 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 18.2081 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 0 min = -0.429967 amax = 0 max = 0.429967 cmap = Jet } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 11 } gerris-snapshot-131206/test/harmonic/harmonic.sh0000644000175100017510000000573312250371171016605 00000000000000if test x$donotrun != xtrue; then rm -f error for solver in gerris; do rm -f time proj if test x$solver = xhypre; then gmodule=GModule else gmodule="# GModule" fi for cycle in 0 1 2 3 4 5 6 7 8 9 10 ; do if ( sed "s/GModule/$gmodule/" < $1 | \ gerris2D -DLEVEL=8 -DCYCLE=$cycle -DSOLVER=$solver - ) ; then : else exit 1 fi done join time proj | awk '{ if (NR == 1) {print $0; old = $3} else {print $1,$2,$3,old/$3; old=$3}}' > res-7 rm -f error order proj time runtime status for level in 3 4 5 6 7 8; do if ( sed "s/GModule/$gmodule/" < $1 | \ gerris2D -DLEVEL=$level -DCYCLE=10 -DSOLVER=$solver - ) ; then : else exit 1 fi done if awk 'BEGIN { n = 0 } { l[n] = $1; n1[n] = $2; n2[n] = $3; ni[n++] = $4; } END { for (i = 1; i < n; i++) print l[i] " " log(n1[i-1]/n1[i])/log(2.) " " log(n2[i-1]/n2[i])/log(2.) " " log(ni[i-1]/ni[i])/log(2.); }' < error > order-$solver; then : else exit 1 fi mv res-7 res-7-$solver mv error error-$solver done fi if echo "Save gerris.eps { format = EPS }" | gfsview-batch2D end-gerris-8.gfs gerris.gfv; then : else exit 1 fi if gnuplot < 1e-8 or\ (Curve('error-gerris',1,4) - Curve('error.ref',1,4)).max() > 1e-6: print (Curve('res-7-gerris',1,3) - Curve('res-7.ref',1,3)).max() print (Curve('error-gerris',1,4) - Curve('error.ref',1,4)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/harmonic/lonlat/0000755000175100017510000000000012250371674016022 500000000000000gerris-snapshot-131206/test/harmonic/lonlat/order.ref0000644000175100017510000000020712250371171017542 000000000000004 2.24049 2.10122 1.73508 5 2.0532 2.02593 1.89221 6 1.97413 1.98143 1.68334 7 1.53281 1.43012 -0.28515 8 0.501011 0.293378 -0.0331144 gerris-snapshot-131206/test/harmonic/lonlat/error.ref0000644000175100017510000000030012250371171017552 000000000000003 2.428e-02 2.698e-02 4.068e-02 4 5.138e-03 6.288e-03 1.222e-02 5 1.238e-03 1.544e-03 3.292e-03 6 3.151e-04 3.910e-04 1.025e-03 7 1.089e-04 1.451e-04 1.249e-03 8 7.695e-05 1.184e-04 1.278e-03 gerris-snapshot-131206/test/harmonic/lonlat/gerris.gfv0000644000175100017510000000120012250371171017722 00000000000000# GfsView 2D View { tx = 0.503132 ty = 0.0196764 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.0945 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 0 min = -0.429967 amax = 0 max = 0.429967 cmap = Jet } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 11 } gerris-snapshot-131206/test/harmonic/lonlat/lonlat.gfs0000644000175100017510000000674212250371171017735 00000000000000# Title: Spherical harmonics with longitude-latitude coordinates # # Description: # # Same test case but using longitude-latitude spherical coordinates. # # \begin{figure}[htbp] # \caption{\label{harmonic}Solution to the Poisson problem with a # pure spherical harmonic solution, as represented on the # longitude-latitude coordinate system.} # \begin{center} # \includegraphics[width=0.7\hsize]{gerris.eps} # \end{center} # \end{figure} # # Figure \ref{residual} illustrates the evolution of the maximum # residual as a function of CPU time. Figure \ref{rate} # illustrates the average residual reduction factor (per V-cycle). The # evolution of the norms of the error of the final solution as a # function of resolution is illustrated on Figure \ref{error}. The # corresponding order of convergence is given on Figure \ref{order}. # # While initial convergence is satisfactory, the pole singularities # quickly dominate the error. The convergence rate of the multigrid # solver is also low, due to the large scale ratio induced by the # metric. Better solutions at high-resolution can be obtained by # increasing the number of iterations of the multigrid solver, but at # a large computational cost. # # \begin{figure}[htbp] # \caption{\label{residual}Evolution of the residual.} # \begin{center} # \includegraphics[width=0.8\hsize]{residual.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{rate}Average reduction factor.} # \begin{center} # \includegraphics[width=0.8\hsize]{rate.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Evolution of the error as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Corresponding convergence order.} # \begin{center} # \includegraphics[width=0.8\hsize]{order.eps} # \end{center} # \end{figure} # # Author: S\'ebastien Delaux # Command: sh ../harmonic.sh lonlat.gfs # Version: 110208 # Required files: gerris.gfv res-7.ref error.ref order.ref # Generated files: gerris.eps residual.eps rate.eps error.eps order.eps # 2 2 GfsPoisson GfsBox GfsGEdge {} { Time { iend = 1 } PhysicalParams { L = M_PI } MetricLonLat M 1. Refine LEVEL GModule hypre ApproxProjectionParams { tolerance = 1e-30 nitermin = CYCLE nitermax = CYCLE } Global { #include @link -lgsl -lgslcblas double fact (double n) { if (n <= 1) return 1.; else return n*fact(n - 1.); } double legendre (int l, int m, double x) { if (m < 0) return pow(-1.,fabs(m))*fact(l-fabs(m))/fact(l+fabs(m))* gsl_sf_legendre_Plm (l, fabs(m), x); else return gsl_sf_legendre_Plm (l, m, x); } double spherical_harmonic_re (int l, int m, double X, double Y) { return sqrt((2*l+1)/(4*M_PI)*fact(l-m)/fact(l+m))* legendre (l, m, sin(Y/180*M_PI))*cos(m*X/180*M_PI); } } Init { } { Div = -4*(4+1)*spherical_harmonic_re (4, 2, x, y) Sol = spherical_harmonic_re (4, 2, x, y) } OutputTime { istep = 1 } { awk '{if ($2 == 1) print CYCLE, $8;}' >> time } OutputProjectionStats { start = end } { awk '{if ($1 == "residual.infty:") print CYCLE, $3, $4;}' >> proj } OutputErrorNorm { start = end } { awk '{print LEVEL, $5, $7, $9}' >> error } { v = P } { s = Sol v = E unbiased = 1 } OutputSimulation { start = end } end-SOLVER-LEVEL.gfs } GfsBox {} GfsBox {} 1 2 right 2 1 right gerris-snapshot-131206/test/harmonic/lonlat/res-7.ref0000644000175100017510000000052312250371171017365 000000000000000 0.58000000 8.601e+00 0 1 0.85000000 5.881e+03 0.00146251 2 1.12000000 1.302e+03 4.5169 3 1.36000000 1.128e+02 11.5426 4 1.59000000 2.116e+02 0.533081 5 1.84000000 1.174e+02 1.80239 6 2.11000000 1.111e+02 1.05671 7 2.35000000 8.205e+01 1.35405 8 2.67000000 7.214e+01 1.13737 9 2.81000000 6.010e+01 1.20033 10 3.14000000 5.245e+01 1.14585 gerris-snapshot-131206/test/harmonic/harmonic.gfs0000644000175100017510000001140312250371171016741 00000000000000# Title: Poisson problem with a pure spherical harmonics solution # # Description: # # The spherical harmonics are by definition a family of functions # which satisfy the Laplace equation on the sphere # # $$ # \nabla^2 f = \frac{1}{r^2} \frac{\partial}{\partial r} \left( r^2 # \frac{\partial f}{\partial r} \right) + \frac{1}{r^2 \sin \theta} # \frac{\partial}{\partial \theta} \left( \sin \theta \frac{\partial # f}{\partial \theta} \right) + \frac{1}{r^2 \sin^2 \theta} \frac{\partial^2 # f}{\partial \varphi^2} = 0. # $$ # # If we look for solutions of the form $f (r, \theta, \varphi) = R (r) # Y (\theta, \varphi)$, then two differential equations result. If we # consider only the equation for the angles, we get # # $$ # \frac{1}{Y} \frac{1}{\sin \theta} \frac{\partial}{\partial \theta} \left( # \sin \theta \frac{\partial Y}{\partial \theta} \right) + \frac{1}{Y} # \frac{1}{\sin^2 \theta} \frac{\partial^2 Y}{\partial \varphi^2} = - \lambda # $$ # # were $\lambda$ is a constant. This equation has a whole range of # solutions noted $Y^m_l (\theta, \varphi)$ so that # # $$ # \nabla Y_l^m (\theta, \varphi) = - l (l + 1) Y_l^m (\theta, \varphi) . # $$ # # The $Y_l^m$ can be expressed as functions of the Legendre polynomials as # # $$ # Y_l^m (\theta, \varphi) = \sqrt{\frac{2 l + 1}{4 \pi} \frac{(l - m) !}{(l + # m) !}} P_l^m (\cos \theta) \cos (m \varphi) # $$ # # where $P_l^m$ is the associated Legendre polynomial. # # For this test we used $l = 4 $ and $m = 2$. # # \begin{figure}[htbp] # \caption{\label{harmonic}Solution to the Poisson problem with a # pure spherical harmonic solution, as represented on the # "developed cubed sphere".} # \begin{center} # \includegraphics[width=0.7\hsize]{gerris.eps} # \end{center} # \end{figure} # # Figure \ref{residual} illustrates the evolution of the maximum # residual as a function of CPU time. Figure \ref{rate} # illustrates the average residual reduction factor (per V-cycle). The # evolution of the norms of the error of the final solution as a # function of resolution is illustrated on Figure \ref{error}. The # corresponding order of convergence is given on Figure \ref{order}. # # \begin{figure}[htbp] # \caption{\label{residual}Evolution of the residual.} # \begin{center} # \includegraphics[width=0.8\hsize]{residual.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{rate}Average reduction factor.} # \begin{center} # \includegraphics[width=0.8\hsize]{rate.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Evolution of the error as a function of resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{order}Corresponding convergence order.} # \begin{center} # \includegraphics[width=0.8\hsize]{order.eps} # \end{center} # \end{figure} # # Author: S\'ebastien Delaux # Command: sh harmonic.sh harmonic.gfs # Version: 110208 # Required files: harmonic.sh gerris.gfv res-7.ref error.ref order.ref # Generated files: gerris.eps residual.eps rate.eps error.eps order.eps # 6 12 GfsPoisson GfsBox GfsGEdge {} { Time { iend = 1 } PhysicalParams { L = 2.*M_PI/4. } MetricCubed M LEVEL # Use alternative implementation # MetricCubed1 M # MapFunction { # x = atan2 (X, Z)*180./M_PI # y = asin (CLAMP(Y,-1.,1.))*180./M_PI # } Refine LEVEL GModule hypre ApproxProjectionParams { tolerance = 1e-30 nitermin = CYCLE nitermax = CYCLE } Global { #include @link -lgsl -lgslcblas double fact (double n) { if (n <= 1) return 1.; else return n*fact(n - 1.); } double legendre (int l, int m, double x) { if (m < 0) return pow(-1.,fabs(m))*fact(l-fabs(m))/fact(l+fabs(m))* gsl_sf_legendre_Plm (l, fabs(m), x); else return gsl_sf_legendre_Plm (l, m, x); } double spherical_harmonic_re (int l, int m, double X, double Y) { return sqrt((2*l+1)/(4*M_PI)*fact(l-m)/fact(l+m))* legendre (l, m, sin(Y/180*M_PI))*cos(m*X/180*M_PI); } } Init { } { Div = -4*(4+1)*spherical_harmonic_re (4, 2, x, y) Sol = spherical_harmonic_re (4, 2, x, y) } OutputTime { istep = 1 } { awk '{if ($2 == 1) print CYCLE, $8;}' >> time } OutputProjectionStats { start = end } { awk '{if ($1 == "residual.infty:") print CYCLE, $3, $4;}' >> proj } OutputErrorNorm { start = end } { awk '{print LEVEL, $5, $7, $9}' >> error } { v = P } { s = Sol v = E unbiased = 1 } OutputSimulation { start = end } end-SOLVER-LEVEL.gfs } GfsBox {} GfsBox {} GfsBox {} GfsBox {} GfsBox {} GfsBox {} 1 2 right 2 3 top 3 4 right 4 5 top 5 6 right 6 1 top 1 3 top left 3 5 top left 5 1 top left 2 6 bottom right 4 2 bottom right 6 4 bottom right gerris-snapshot-131206/test/harmonic/res-7.ref0000644000175100017510000000052712250371171016100 000000000000000 6.31000000 8.601e+00 0 1 7.24000000 1.461e+01 0.588706 2 8.05000000 6.215e-01 23.5076 3 8.69000000 1.531e-01 4.05944 4 9.47000000 6.228e-03 24.5825 5 11.31000000 6.476e-04 9.61705 6 11.12000000 4.544e-05 14.2518 7 11.83000000 5.436e-06 8.35909 8 12.65000000 3.028e-07 17.9524 9 13.66000000 1.888e-08 16.0381 10 14.11000000 8.626e-10 21.8873 gerris-snapshot-131206/test/shock/0000755000175100017510000000000012250371673014037 500000000000000gerris-snapshot-131206/test/shock/error.ref0000644000175100017510000000020012250371172015570 000000000000005 1.591e-02 2.349e-02 5.497e-02 6 1.800e-03 4.747e-03 2.862e-02 7 7.876e-04 3.208e-03 3.175e-02 8 1.503e-04 1.307e-03 2.081e-02 gerris-snapshot-131206/test/shock/layered/0000755000175100017510000000000012250371673015464 500000000000000gerris-snapshot-131206/test/shock/layered/uprof.awk0000644000175100017510000000036512250371172017241 00000000000000{ if ($1 == "#") { for (i = 2; i <= NF; i++) { split($i,a,":") if (a[2] == "U0") start = a[1]; } } else { dz = $5/nl; for (i = 0; i < nl; i++) { z = dz*(0.5+i) print z,$(start+i)/dz } } } gerris-snapshot-131206/test/shock/layered/layered.sh0000644000175100017510000000335612250371172017366 00000000000000if test x$donotrun != xtrue; then for l in 1 2 5 15; do if gerris2D -DLEVEL=8 -DNL=$l layered.gfs; then : else exit 1 fi done fi if gnuplot < 1e-3: print (Curve('prof-8-15',1,2) - Curve('prof.ref',1,2)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/shock/layered/prof.ref0000644000175100017510000001032012250371172017036 000000000000000.0410156 0.86863 0.123047 0.868303 0.205078 0.868049 0.287109 0.867814 0.369141 0.86758 0.451172 0.867344 0.533203 0.867105 0.615234 0.866866 0.697266 0.866628 0.779297 0.86639 0.861328 0.866153 0.943359 0.865916 1.02539 0.86568 1.10742 0.865444 1.18945 0.865209 1.27148 0.864975 1.35352 0.864741 1.43555 0.864509 1.51758 0.864277 1.59961 0.864046 1.68164 0.863815 1.76367 0.863585 1.8457 0.863356 1.92773 0.863127 2.00977 0.862898 2.0918 0.86267 2.17383 0.862442 2.25586 0.862214 2.33789 0.861986 2.41992 0.861758 2.50195 0.861531 2.58398 0.861303 2.66602 0.861076 2.74805 0.860849 2.83008 0.860623 2.91211 0.860397 2.99414 0.860171 3.07617 0.859946 3.1582 0.859722 3.24023 0.859498 3.32227 0.859275 3.4043 0.859053 3.48633 0.858831 3.56836 0.85861 3.65039 0.858389 3.73242 0.858168 3.81445 0.857948 3.89648 0.857728 3.97852 0.857508 4.06055 0.857289 4.14258 0.857069 4.22461 0.85685 4.30664 0.85663 4.38867 0.85641 4.4707 0.85619 4.55273 0.85597 4.63477 0.855751 4.7168 0.855531 4.79883 0.855312 4.88086 0.855094 4.96289 0.854876 5.04492 0.854658 5.12695 0.854442 5.20898 0.854226 5.29102 0.85401 5.37305 0.853795 5.45508 0.85358 5.53711 0.853366 5.61914 0.853152 5.70117 0.852939 5.7832 0.852725 5.86523 0.852512 5.94727 0.852298 6.0293 0.852085 6.11133 0.851872 6.19336 0.851658 6.27539 0.851444 6.35742 0.85123 6.43945 0.851016 6.52148 0.850803 6.60352 0.850589 6.68555 0.850376 6.76758 0.850163 6.84961 0.849953 6.93164 0.849766 7.01367 0.849518 7.0957 0.849908 7.17773 0.84842 7.25977 0.845354 7.3418 0.842665 7.42383 0.839998 7.50586 0.837237 7.58789 0.834376 7.66992 0.831414 7.75195 0.828348 7.83398 0.825176 7.91602 0.821894 7.99805 0.818501 8.08008 0.814993 8.16211 0.811369 8.24414 0.807627 8.32617 0.803765 8.4082 0.799781 8.49023 0.795673 8.57227 0.791439 8.6543 0.787074 8.73633 0.782578 8.81836 0.777942 8.90039 0.773169 8.98242 0.768236 9.06445 0.763166 9.14648 0.757912 9.22852 0.752605 9.31055 0.747031 9.39258 0.741478 9.47461 0.735549 9.55664 0.729673 9.63867 0.72341 9.7207 0.717225 9.80273 0.710614 9.88477 0.70411 9.9668 0.697148 10.0488 0.690331 10.1309 0.682996 10.2129 0.675795 10.2949 0.667764 10.377 0.659467 10.459 0.651377 10.541 0.644059 10.623 0.635953 10.7051 0.627187 10.7871 0.617952 10.8691 0.609458 10.9512 0.600333 11.0332 0.590549 11.1152 0.581257 11.1973 0.571199 11.2793 0.561445 11.3613 0.550965 11.4434 0.540745 11.5254 0.529837 11.6074 0.519144 11.6895 0.507799 11.7715 0.496628 11.8535 0.484837 11.9355 0.473181 12.0176 0.460934 12.0996 0.448787 12.1816 0.436075 12.2637 0.423431 12.3457 0.410244 12.4277 0.397098 12.5098 0.383428 12.5918 0.369773 12.6738 0.354451 12.7559 0.345438 12.8379 0.440966 12.9199 0.562917 13.002 0.582425 13.084 0.58648 13.166 0.589487 13.248 0.59229 13.3301 0.594712 13.4121 0.596835 13.4941 0.598712 13.5762 0.600405 13.6582 0.601933 13.7402 0.603324 13.8223 0.604597 13.9043 0.605766 13.9863 0.606841 14.0684 0.60784 14.1504 0.608764 14.2324 0.609621 14.3145 0.610417 14.3965 0.611157 14.4785 0.611846 14.5605 0.612488 14.6426 0.613085 14.7246 0.613642 14.8066 0.61416 14.8887 0.614642 14.9707 0.61509 15.0527 0.615507 15.1348 0.615893 15.2168 0.616251 15.2988 0.616581 15.3809 0.616885 15.4629 0.617163 15.5449 0.617417 15.627 0.617647 15.709 0.617855 15.791 0.61804 15.873 0.618205 15.9551 0.618347 16.0371 0.61847 16.1191 0.618572 16.2012 0.618654 16.2832 0.618717 16.3652 0.618762 16.4473 0.618789 16.5293 0.618799 16.6113 0.618789 16.6934 0.618762 16.7754 0.618716 16.8574 0.618654 16.9395 0.618576 17.0215 0.618483 17.1035 0.618375 17.1855 0.618253 17.2676 0.618116 17.3496 0.617966 17.4316 0.617803 17.5137 0.617626 17.5957 0.617437 17.6777 0.617235 17.7598 0.617021 17.8418 0.616795 17.9238 0.616557 18.0059 0.616307 18.0879 0.616047 18.1699 0.615775 18.252 0.615492 18.334 0.615199 18.416 0.614895 18.498 0.61458 18.5801 0.614255 18.6621 0.61392 18.7441 0.613574 18.8262 0.613218 18.9082 0.612852 18.9902 0.612477 19.0723 0.612091 19.1543 0.611696 19.2363 0.611292 19.3184 0.610878 19.4004 0.610454 19.4824 0.61002 19.5645 0.609577 19.6465 0.609124 19.7285 0.608662 19.8105 0.60819 19.8926 0.607709 19.9746 0.607218 20.0566 0.606718 20.1387 0.606208 20.2207 0.605689 20.3027 0.60516 20.3848 0.604622 20.4668 0.604073 20.5488 0.603516 20.6309 0.602947 20.7129 0.602371 20.7949 0.601796 20.877 0.601237 20.959 0.600694 gerris-snapshot-131206/test/shock/layered/layered.gfs0000644000175100017510000000705612250371172017534 00000000000000# Title: Transcritical flow with multiple layers # # Description: # # This is meant to replicate the multilayer test case of # \cite{audusse2008,audusse2011}. The vertical viscosity is set to # $\nu=0.01$ m$^2$/s and the Navier condition at the bottom is given # by the Strickler relation # $$k(h,{\bf U})={g\over S^2h^{1/3}}||{\bf U}||$$ # with $S=25$ m$^{1/3}$/s, the Strickler coefficient, $h$ the # water depth and ${\bf U}$ the depth-averaged velocity. # # The stationary solutions are summarised in the figures below. They # can be compared to Figure 9 of \cite{audusse2011} and Figure 8 of # \cite{audusse2008}. They agree more or less although our Strickler # coefficient is lower (i.e. we need a larger explicit friction to # match \cite{audusse2008,audusse2011}). # # \begin{figure}[htbp] # \caption{Free surface and topograghy.} # \begin{center} # \includegraphics[width=0.8\hsize]{prof.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{Horizontal velocity field (15 layers).} # \begin{center} # \includegraphics[width=0.8\hsize]{u.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{Velocity profiles at (a) $x=10$, (b) $x=15$, (c) $x=20$.} # \begin{center} # \begin{tabular}{cc} # (a) \includegraphics[width=0.5\hsize]{uprof-10.eps} & # (b) \includegraphics[width=0.5\hsize]{uprof-15.eps} \\ # \multicolumn{2}{c}{(c) \includegraphics[width=0.5\hsize]{uprof-20.eps}} # \end{tabular} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh layered.sh # Version: 120717 # Running time: 2 minutes # Required files: layered.sh uprof.awk field.awk prof.ref # Generated files: prof.eps u.eps uprof-10.eps uprof-15.eps uprof-20.eps # 1 0 GfsRiver GfsBox GfsGEdge { x = 0.5 } { Global { #define LENGTH 21. #define WIDTH 5.75 #define HEIGHT 0.2 #define Q 1. #define HE 0.6 #define G 9.81 } Layers NL PhysicalParams { L = LENGTH g = G } Refine LEVEL InitMask {} (y < LENGTH*(0.5 - 1./pow(2,LEVEL))) Init {} { Zb = MAX(0., HEIGHT*(1. - 1./(WIDTH/2.)/(WIDTH/2.)*(x - 10.)*(x - 10.))) P = 0.6 - Zb } AdvectionParams { # Sweby seems to oscillate in this case # gradient = gfs_center_sweby_gradient } # Stop when stationary solution is reached EventStop { step = 1 } H 1e-3 Time { end = 1000 } # uncomment this for on-the-fly animation # OutputSimulation { step = 0.1 } { # gfsplot " # set term wxt noraise # set xlabel 'x' # set ylabel 'z' # set xrange [0:21] # set xtics 0,2,20 # set key bottom right # plot '-' u (x):(Zb) t 'topography' w l, \ # '-' u (x):(H) w p t 'free surface' # " # } { format = text } OutputLocation { start = end } { awk -v nl=NL -f uprof.awk > uprof-10-LEVEL-NL } 10. 10.49 0 OutputLocation { start = end } { awk -v nl=NL -f uprof.awk > uprof-15-LEVEL-NL } 15. 10.49 0 OutputLocation { start = end } { awk -v nl=NL -f uprof.awk > uprof-20-LEVEL-NL } 20. 10.49 0 OutputSimulation { start = end } { awk '{ if ($1 != "#") print $1,$8; }' > prof-LEVEL-NL } { format = text } OutputSimulation { start = end } end-LEVEL-NL { format = text } } { # vertical viscosity nu = 0.01 # Gauckler-Manning-Strickler bottom friction, G = 9.81 m/s^2, # Strickler coefficient S = 25 m^(1/3)/s. k = (G/(25.*25.*pow(P,1./3.)))*Velocity } GfsBox { right = Boundary { # set water depth at outlet BcDirichlet P HE BcNeumann U 0 } left = Boundary { # set flow rate at inlet, evenly distributed over all layers BcDirichlet U Q/NL } } gerris-snapshot-131206/test/shock/layered/field.awk0000644000175100017510000000106512250371172017167 00000000000000# one argument: name = variable name { if ($1 == "#") { for (i = 2; i <= NF; i++) { if (match($i,"(.*):([a-zA-Z]+)([0-9]+)",a) && a[2] == name) { layer[a[3]] = int(a[1]); if (int(a[3]) > nl) nl = int(a[3]); } else if (match($i,"(.*):([a-zA-Z]+)",a) && a[2] == "Zb") zb = int(a[1]); } nl++ } else { dz = $4/nl; dz1 = dz > 0. ? 1./dz : 0. print $1,$zb,$layer[0]*dz1 for (i = 0; i < nl; i++) { z = dz*(0.5+i) print $1,$zb+z,$layer[i]*dz1 } print $1,$zb+dz*nl,$layer[nl - 1]*dz1 print "" } } gerris-snapshot-131206/test/shock/shock.gfs0000644000175100017510000000433312250371172015564 00000000000000# Title: Transcritical flow over a bump # # Description: # # This is a classical test case for shallow-water solvers. Water # flowing over a bump goes from subcritical through supercritical over # the bump and back to subcritical. Figure \ref{h-8} illustrates the # stationary solution with a shock. Figure \ref{error} gives the # convergence with resolution. The analytical solution was obtained # thanks to the SWASHES library \cite{delestre2012}. # # \begin{figure}[htbp] # \caption{\label{h-8}Numerical and analytical solutions for # transcritical flow over a bump.} # \begin{center} # \includegraphics[width=0.8\hsize]{h-8.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{error}Convergence of the error between the numerical # and analytical solution with the spatial resolution.} # \begin{center} # \includegraphics[width=0.8\hsize]{error.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh shock.sh # Version: 120717 # Running time: 30 seconds # Required files: shock.sh error.ref # Generated files: error.eps h-8.eps # 1 0 GfsRiver GfsBox GfsGEdge { x = 0.5 } { PhysicalParams { L = 25 g = 9.81 } Refine LEVEL InitMask {} (y < 25.*(0.5 - 1./pow(2,LEVEL))) Init {} { Zb = MAX(0., 0.2 - 0.05*(x - 10.)*(x - 10.)) P = 0.33 - Zb } AdvectionParams { # Sweby seems to work better than minmod for this test case gradient = gfs_center_sweby_gradient } EventStop { step = 1 } H 1e-5 Time { end = 1000 } # OutputTime { istep = 1 } stderr OutputSimulation { start = end } { gfsplot " set term postscript eps color solid lw 2 16 set output 'h-LEVEL.eps' set xlabel 'x' set ylabel 'z' plot [5:15]'swashes' u 1:4 t 'topography' w l, \ 'swashes' u 1:6 t 'free surface (analytical)' w l, \ '-' u (x):(H) w p t 'free surface (numerical)' " } { format = text } OutputErrorNorm { start = end } { awk '{ print LEVEL,$5,$7,$9 }' } { v = H } { s = href.cgd v = EH } OutputSimulation { start = end } end-LEVEL.txt { format = text } } GfsBox { right = Boundary { BcDirichlet P 0.33 BcNeumann U 0 } left = Boundary { BcDirichlet U 0.18 } } gerris-snapshot-131206/test/shock/shock.sh0000644000175100017510000000257112250371172015421 00000000000000if test x$donotrun != xtrue; then # generate CGD file from SWASHES file ( echo "1 x" echo "1000" awk '{ if (substr($1,1,1) != "#") printf ("%f ", $1); }' < swashes echo "" awk '{ if (substr($1,1,1) != "#") print $6; }' < swashes ) > href.cgd for level in 5 6 7 8; do if gerris2D -DLEVEL=$level shock.gfs; then : else exit 1 fi done > error fi if gnuplot < 1e-5: print (Curve('error',1,3) - Curve('error.ref',1,3)).max() exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/spurious/0000755000175100017510000000000012250371673014621 500000000000000gerris-snapshot-131206/test/spurious/spurious.sh0000644000175100017510000000455012250371172016764 00000000000000if test x$donotrun != xtrue; then for La in 120 1200 12000; do tmax=`echo $La | awk '{print 0.8*0.8/sqrt(0.8/$1)}'` if sed "s/end = TMAX/iend = 1/g" < $1 | gerris2D -DLEVEL=5 -DLAPLACE=$La -DDT=0 - |\ sed "s/iend = 1/end = $tmax/" | gerris2D - > /dev/null; then : else exit 1 fi done La=12000 for level in 3 4 6 7; do tmax=`echo $La | awk '{print 0.8*0.8/sqrt(0.8/$1)}'` if sed "s/end = TMAX/iend = 1/g" < $1 | gerris2D -DLEVEL=$level -DLAPLACE=$La -DDT=1e-9 - |\ sed "s/iend = 1/end = $tmax/" | gerris2D - > sim-$level; then : else exit 1 fi done fi rm -f convergence kconvergence La=12000 for level in 3 4 5 6 7; do if awk -v level=$level < E-$La-$level '{ max2 = $3 maxi = $4 }END{print 0.8*2**level, max2, maxi}' >> convergence; then : else exit 1 fi if awk -v level=$level < EK-$La-$level '{ max2 = $3 maxi = $4 }END{print 0.8*2**level, max2/2.5, maxi/2.5}' >> kconvergence; then : else exit 1 fi done if cat < tolerance) exit (1);}'; then : else exit 1 fi done if cat < 1e-6: exit(1) if (Curve('kconvergence',1,3) - Curve('kconvergence.ref',1,3)).max() > 1e-6: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/spurious/axi/0000755000175100017510000000000012250371673015402 500000000000000gerris-snapshot-131206/test/spurious/axi/axi.gfs0000644000175100017510000000556512250371172016611 00000000000000# Title: Axisymmetric spherical droplet in equilibrium # # Description: # # The same test case but using the axisymmetric solver. The results # are comparable. # # \begin{figure}[htbp] # \caption{\label{laplace}Evolution of the amplitude of the capillary currents # $\max(|{\bf u}|)(D/\sigma)^{1/2}$ as a function of # non-dimensional time $\tau=t\mu/D^2$ for the range of Laplace # numbers indicated in the legend.} # \begin{center} # \includegraphics[width=0.8\hsize]{laplace.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{curvature}Evolution of the standard deviation of the # value of the curvature along the interface as a function of # non-dimensional time $\tau=t\mu/D^2$ for the range of Laplace # numbers indicated in the legend.} # \begin{center} # \includegraphics[width=0.8\hsize]{curvature.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{convergence}Convergence of the error on the equilibrium shape of the # droplet with resolution. The diameter is given in number of grid # points.} # \begin{center} # \includegraphics[width=0.8\hsize]{convergence.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{kconvergence}Convergence of the relative error on the # equilibrium curvature value with resolution. The diameter is given # in number of grid points.} # \begin{center} # \includegraphics[width=0.8\hsize]{kconvergence.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh ../spurious.sh axi.gfs 5e-8 # Version: 1.3.1 # Required files: convergence.ref kconvergence.ref # Generated files: laplace.eps curvature.eps convergence.eps kconvergence.eps # Define CIRCLE (ellipse (-0.5,0.,0.4,0.4)) Define MU sqrt(0.8/LAPLACE) 1 0 GfsAxi GfsBox GfsGEdge {} { Time { end = TMAX } Refine LEVEL RefineSurface {return 10;} CIRCLE ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } AdvectionParams { scheme = none } VariableTracerVOFHeight T VariableCurvature K T SourceTension T 1 K SourceViscosity MU InitFraction T CIRCLE Init {} { Tref = T } AdaptGradient { istep = 1 } { cmax = 1e-6 maxlevel = LEVEL } T EventStop { istep = 10 } T DT OutputSimulation { start = end } stdout { depth = LEVEL } OutputScalarNorm { istep = 1 } { awk '{ print MU*$3/(0.8*0.8), $9*sqrt(0.8); fflush (stdout); }' > La-LAPLACE-LEVEL } { v = Velocity } OutputScalarNorm { istep = 1 } { awk '{ print MU*$3/(0.8*0.8), $5, $7, $9; fflush (stdout); }' > E-LAPLACE-LEVEL } { v = (Tref - T) } OutputScalarStats { istep = 1 } { awk '{ print MU*$3/(0.8*0.8), $5, $7, $9, $11; fflush (stdout); }' > K-LAPLACE-LEVEL } { v = (K - 2.50771) } OutputScalarNorm { istep = 1 } { awk '{ print MU*$3/(0.8*0.8), $5, $7, $9; fflush (stdout); }' > EK-LAPLACE-LEVEL } { v = (T > 0 && T < 1 ? (K - 5.)/2. : 0) } } GfsBox { bottom = Boundary left = Boundary } gerris-snapshot-131206/test/spurious/axi/kconvergence.ref0000644000175100017510000000017412250371172020465 000000000000006.4 0.006192 0.025168 12.8 0.0008784 0.005992 25.6 0.00026312 0.0023436 51.2 3.276e-05 0.0004092 102.4 6.372e-06 0.00011224 gerris-snapshot-131206/test/spurious/axi/convergence.ref0000644000175100017510000000017512250371172020313 000000000000006.4 5.731e-03 4.121e-02 12.8 2.312e-03 2.395e-02 25.6 1.125e-03 1.841e-02 51.2 3.300e-04 7.489e-03 102.4 1.077e-04 3.827e-03 gerris-snapshot-131206/test/spurious/kconvergence.ref0000644000175100017510000000017112250371172017701 000000000000006.4 0.011688 0.035344 12.8 0.003142 0.01298 25.6 0.0004904 0.0030212 51.2 8.06e-05 0.0007224 102.4 1.4432e-05 0.00018268 gerris-snapshot-131206/test/spurious/convergence.ref0000644000175100017510000000017512250371172017532 000000000000006.4 3.606e-03 2.525e-02 12.8 3.782e-04 4.292e-03 25.6 9.129e-05 1.271e-03 51.2 2.339e-05 4.613e-04 102.4 8.407e-06 2.073e-04 gerris-snapshot-131206/test/spurious/spurious.gfs0000644000175100017510000001002512250371172017123 00000000000000# Title: Circular droplet in equilibrium # # Description: # # A circular droplet of diameter $D=0.8$ is initialised centered on # the top-left corner of the unit box. Surface tension is imposed on # the interface. The exact solution is given by Laplace's law: uniform # zero velocity and a pressure jump accross the interface exactly # balancing the surface tension force. # # The initial condition -- while close to the exact solution -- does # not guarantee the exact balance between the numerical # discretisations of surface tension and pressure gradient. However, # these small initial perturbations generate small capillary waves # which are progressively (on a timescale of order $D^2/\mu$) damped # by viscosity so that the exact (to round-off error) balance is # eventually obtained. # # The convergence is obtained for a wide range of Laplace numbers # $La=\sigma\rho D/\mu^2$, as illustrated on Figure \ref{laplace}. # Correspondingly, convergence of the curvature to a constant value is # also obtained at all Laplace numbers as illustrated on Figure # \ref{curvature}. # # Figure \ref{convergence} illustrates the convergence of the error on # the droplet shape as a function of resolution for a Laplace number # of 12000. Both the shape error and the relative error on the # equilibrium curvature value illustrated on Figure # \ref{kconvergence} show close to second-order convergence. # # \begin{figure}[htbp] # \caption{\label{laplace}Evolution of the amplitude of the capillary currents # $\max(|{\bf u}|)(D/\sigma)^{1/2}$ as a function of # non-dimensional time $\tau=t\mu/D^2$ for the range of Laplace # numbers indicated in the legend.} # \begin{center} # \includegraphics[width=0.8\hsize]{laplace.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{curvature}Evolution of the standard deviation of the # value of the curvature along the interface as a function of # non-dimensional time $\tau=t\mu/D^2$ for the range of Laplace # numbers indicated in the legend.} # \begin{center} # \includegraphics[width=0.8\hsize]{curvature.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{convergence}Convergence of the error on the equilibrium shape of the # droplet with resolution. The diameter is given in number of grid # points.} # \begin{center} # \includegraphics[width=0.8\hsize]{convergence.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{kconvergence}Convergence of the relative error on the # equilibrium curvature value with resolution. The diameter is given # in number of grid points.} # \begin{center} # \includegraphics[width=0.8\hsize]{kconvergence.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh spurious.sh spurious.gfs 4e-10 # Version: 1.1.2 # Required files: spurious.sh convergence.ref kconvergence.ref # Generated files: laplace.eps curvature.eps convergence.eps kconvergence.eps # Define CIRCLE (ellipse (-0.5,0.5,0.4,0.4)) Define MU sqrt(0.8/LAPLACE) 1 0 GfsSimulation GfsBox GfsGEdge {} { Time { end = TMAX } Refine LEVEL RefineSurface {return 10;} CIRCLE ApproxProjectionParams { tolerance = 1e-6 } ProjectionParams { tolerance = 1e-6 } AdvectionParams { scheme = none } VariableTracerVOFHeight T VariableCurvature K T SourceTension T 1 K SourceViscosity MU InitFraction T CIRCLE Init {} { Tref = T } AdaptGradient { istep = 1 } { cmax = 1e-6 maxlevel = LEVEL } T EventStop { istep = 10 } T DT OutputSimulation { start = end } stdout { depth = LEVEL } OutputScalarNorm { istep = 1 } { awk '{ print MU*$3/(0.8*0.8), $9*sqrt(0.8) }' > La-LAPLACE-LEVEL } { v = Velocity } OutputScalarNorm { istep = 1 } { awk '{ print MU*$3/(0.8*0.8), $5, $7, $9 }' > E-LAPLACE-LEVEL } { v = (Tref - T) } OutputScalarStats { istep = 1 } { awk '{ print MU*$3/(0.8*0.8), $5, $7, $9, $11 }' > K-LAPLACE-LEVEL } { v = (K - 2.50771) } OutputScalarNorm { istep = 1 } { awk '{ print MU*$3/(0.8*0.8), $5, $7, $9 }' > EK-LAPLACE-LEVEL } { v = (T > 0 && T < 1 ? K - 2.5 : 0) } } GfsBox { top = Boundary left = Boundary } gerris-snapshot-131206/test/still/0000755000175100017510000000000012250371673014057 500000000000000gerris-snapshot-131206/test/still/bipolar/0000755000175100017510000000000012250371673015507 500000000000000gerris-snapshot-131206/test/still/bipolar/p.gfv0000644000175100017510000000105112250371172016361 00000000000000# GfsView 2D View { tx = -0.467154 ty = -3.05588 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 31.831 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Solid { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } gerris-snapshot-131206/test/still/bipolar/mesh.gfv0000644000175100017510000000071312250371172017062 00000000000000# GfsView 2D View { tx = -0.467154 ty = -3.05588 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 31.831 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Solid { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } Cells { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } gerris-snapshot-131206/test/still/bipolar/bipolar.gfs0000644000175100017510000000517412250371172017561 00000000000000# Title: Lake-at-rest balance in an inclined domain with bipolar metric # # Description: # # Checks that the lake-at-rest equilibrium can be recovered on a # domain with a bipolar metric. The water depth at $t=200$ is # illustrated in Figure \ref{depth}. # # \begin{figure}[htbp] # \caption{\label{depth}Water depth at $t=200$. Bipolar mesh (black) # and isolines of water depth (red).} # \begin{center} # \includegraphics[width=\hsize]{still.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: gerris2D bipolar.gfs # Version: 120314 # Required files: p.gfv mesh.gfv # Running time: 2 minutes # Generated files: still.eps 8 8 GfsRiver GfsBox GfsGEdge { x = 0.5 y = 0.5 } { PhysicalParams { g = 9.81 } # Bipolar coordinates. see http://en.wikipedia.org/wiki/Bipolar_coordinates Metric M { x = 10.*sinh(rx/2. + 1.)/(cosh(rx/2. + 1.) - cos (M_PI*ry/4.)) y = 10.*sin(M_PI*ry/4.)/(cosh(rx/2. + 1.) - cos (M_PI*ry/4.)) } Refine 4 Init {} { Zb = x/10. P = 12.1/(100. - 4.*M_PI) } Time { end = 200 } # OutputSimulation { istep = 10 } stdout SourceCoriolis 0 1.0e-01 OutputScalarNorm { start = end } u { v = U } OutputErrorNorm { start = end } ep { v = P } { s = MAX(0, 1.26 - x/10.) unbiased = 1 relative = 1 } GModule gfsview OutputScalarSum { start = 0 } vol { v = Zb } OutputView { start = end } p.gnu { format = Gnuplot } p.gfv OutputView { start = end } mesh.gnu { format = Gnuplot } mesh.gfv EventScript { start = end } { status=0 if gnuplot < 8e-7) { print "u: " $9 > "/dev/stderr"; exit (1); }}' < u ; then : else status=$GFS_STOP; fi if awk '{if ($9 > 3e-4) { print "ep: " $9 > "/dev/stderr"; exit (1); }}' < ep ; then : else status=$GFS_STOP; fi exit $status } } GfsBox { left = Boundary right = Boundary } GfsBox { left = Boundary right = Boundary } GfsBox { left = Boundary right = Boundary } GfsBox { left = Boundary right = Boundary } GfsBox { left = Boundary right = Boundary } GfsBox { left = Boundary right = Boundary } GfsBox { left = Boundary right = Boundary } GfsBox { left = Boundary right = Boundary } 1 2 top 2 3 top 3 4 top 4 5 top 5 6 top 6 7 top 7 8 top 8 1 top gerris-snapshot-131206/test/still/still.gfv0000644000175100017510000000201412250371172015621 00000000000000# GfsView 2D View { tx = -0.455511 ty = 0.00065737 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.0323 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Solid { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } Vectors { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } U V { scale = 0.846 use_scalar = 0 } Linear { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 10 } gerris-snapshot-131206/test/still/still.gfs0000644000175100017510000000316612250371172015627 00000000000000# Title: Lake-at-rest balance in an inclined domain with cut cells # # Description: # # Checks that the lake-at-rest equilibrium can be recovered on a # domain with cut-cell solid boundaries. See \cite{an2012} section 3.1 # for details. The water depth at $t=200$ is illustrated in Figure # \ref{depth}. # # \begin{figure}[htbp] # \caption{\label{depth}Water depth at $t=200$.} # \begin{center} # \includegraphics[width=0.6\hsize]{still.eps} # \end{center} # \end{figure} # # Author: Hyunuk An, Soonyoung Yu and St\'ephane Popinet # Command: gerris2D still.gfs # Version: 120314 # Required files: still.gfv # Running time: 2 minutes # Generated files: still.eps 1 0 GfsRiver GfsBox GfsGEdge { x = 0.5 } { PhysicalParams { L = 10 g = 9.81 } Refine 5 RefineSolid 7 Solid (sphere(5.,0.,0.,2.0)) Init {} { Zb = x/10. P = 12.1/(100. - 4.*M_PI) } Time { end = 200 } # OutputSimulation { istep = 10 } stdout SourceCoriolis 0 1.0e-01 OutputScalarNorm { start = end } u { v = U } OutputErrorNorm { start = end } ep { v = P } { s = MAX(0, 0.5 - x/10.) unbiased = 1 relative = 1 } GModule gfsview OutputView { start = end } still.eps { format = EPS } still.gfv EventScript { start = end } { status=0 if awk '{if ($9 > 1e-5) { print "u: " $9 > "/dev/stderr"; exit (1); }}' < u ; then : else status=$GFS_STOP; fi if awk '{if ($9 > 4e-3) { print "ep: " $9 > "/dev/stderr"; exit (1); }}' < ep ; then : else status=$GFS_STOP; fi exit $status } } GfsBox { left = Boundary right = Boundary top = Boundary bottom = Boundary } gerris-snapshot-131206/test/couette/0000755000175100017510000000000012250371673014400 500000000000000gerris-snapshot-131206/test/couette/prof-0.ref0000644000175100017510000000045012250371171016111 000000000000000.2625 0.228374 0.275 0.211074 0.2875 0.193769 0.3 0.177503 0.3125 0.162164 0.325 0.147884 0.3375 0.13429 0.35 0.121324 0.3625 0.108931 0.375 0.097061 0.3875 0.0858052 0.4 0.0749568 0.4125 0.0644852 0.425 0.0543619 0.4375 0.0445603 0.45 0.035141 0.4625 0.0259768 0.475 0.017052 0.4875 0.00940313 gerris-snapshot-131206/test/couette/couette.sh0000644000175100017510000000275312250371171016324 00000000000000if test x$donotrun != xtrue; then for model in 0 1 2 3; do if sed "s/MODEL/$model/g" < $1 | gerris2D -; then : else exit 1 fi done fi if cat < Rl ? 0. : r*sqrt(2.)*0.12*0.12/(4.*0.0672*0.0672)*(3./4.+(Rl/r)**4/4.-(Rl/r)**2+log(Rl/r))) bingham(r,Rl)=(r > Rl ? 0. : r*sqrt(2.)*10./4.*((Rl/r)**2-2.*log(Rl/r)-1.)) plot [0.25:0.5][0:0.25]powerlaw(x,1.) t "Newtonian", 'prof-0' w p ps 2 pt 9 t "",\ powerlaw(x,0.5) t "Power law", 'prof-1' w p ps 2 pt 9 t "",\ hb(x,0.4637) t "Herschel-Bulkley", 'prof-2' w p ps 2 pt 9 t "",\ bingham(x,0.34924) t "Bingham", 'prof-3' w p ps 2 pt 9 t "" EOF else exit 1 fi if cat < 3.6e-4 or \ (Curve('prof-1',1,2) - Curve('prof-1.ref',1,2)).norm2() > 6.3e-4 or \ (Curve('prof-2',1,2) - Curve('prof-2.ref',1,2)).norm2() > 21e-4 or \ (Curve('prof-3',1,2) - Curve('prof-3.ref',1,2)).norm2() > 22e-4: exit(1) EOF else exit 1 fi gerris-snapshot-131206/test/couette/prof-3.ref0000644000175100017510000000051112250371171016112 000000000000000.2625 0.177734 0.275 0.129386 0.2875 0.0852325 0.3 0.0498059 0.3125 0.0243925 0.325 0.0112533 0.3375 0.00441371 0.35 0.00150978 0.3625 0.000664511 0.375 0.000487827 0.3875 0.000428553 0.4 0.000378624 0.4125 0.000331367 0.425 0.000283671 0.4375 0.000235993 0.45 0.000188843 0.4625 0.000142289 0.475 9.64123e-05 0.4875 5.6789e-05 gerris-snapshot-131206/test/couette/prof-1.ref0000644000175100017510000000045712250371171016121 000000000000000.2625 0.210866 0.275 0.183792 0.2875 0.158062 0.3 0.135508 0.3125 0.116131 0.325 0.100148 0.3375 0.0861675 0.35 0.0739109 0.3625 0.0631336 0.375 0.0536236 0.3875 0.0454754 0.4 0.0381569 0.4125 0.0315675 0.425 0.0256176 0.4375 0.0202283 0.45 0.0154642 0.4625 0.0110954 0.475 0.00707182 0.4875 0.0037639 gerris-snapshot-131206/test/couette/profile0000644000175100017510000000030412250371171015671 000000000000000.2625 0 0 0.275 0 0 0.2875 0 0 0.30 0 0 0.3125 0 0 0.325 0 0 0.3375 0 0 0.35 0 0 0.3625 0 0 0.375 0 0 0.3875 0 0 0.40 0 0 0.4125 0 0 0.425 0 0 0.4375 0 0 0.45 0 0 0.4625 0 0 0.475 0 0 0.4875 0 0 gerris-snapshot-131206/test/couette/prof-2.ref0000644000175100017510000000047612250371171016123 000000000000000.2625 0.184616 0.275 0.144868 0.2875 0.108955 0.3 0.0796569 0.3125 0.0569322 0.325 0.0409685 0.3375 0.0287308 0.35 0.0195365 0.3625 0.01279 0.375 0.00798333 0.3875 0.00500264 0.4 0.00295887 0.4125 0.00163182 0.425 0.000829206 0.4375 0.000386639 0.45 0.000196303 0.4625 9.1544e-05 0.475 3.73828e-05 0.4875 1.07438e-05 gerris-snapshot-131206/test/couette/couette.gfs0000644000175100017510000000552612250371171016472 00000000000000# Title: Creeping Couette flow of Generalised Newtonian fluids # # Description: # # Following \cite{vola2004}, we solve for the 2D creeping flow between # two coaxial cylinders. The inner cylinder rotates at a constant # speed. The outer cylinder is fixed. The viscosity is a function of # the second principal invariant of the shear strain rate tensor: # $$|D|=\sqrt{\sum_{i,j}D_{ij}D_{ij}}$$ # where $D_{ij}=(\partial_iu_j+\partial_ju_i)/2$. # # We use a general Herschel-Bulkley formulation of the form: # $$\mu(|D|)={\tau_y\over 2|D|}+\mu|D|^{N-1},$$ where $\tau_y$ is the # yield stress. The solutions obtained for the stationary tangential # velocity profiles for Newtonian, Power law ($N=0.5$), # Herschel-Bulkley ($\mu=0.0672$, $\tau_y=0.12$, $N=0.5$) and Bingham # ($\mu=1$, $\tau_y=10$, $N=1$) fluids are illustrated on Figure # \ref{prof}, together with the analytical solutions given by # \cite{bird87}. # # The Bingham fluid case is a particularly severe test of the # diffusion solver, as the outer part of the fluid ring ($r>0.35$) # behaves likes a rigid body attached to the outer boundary. # # \begin{figure}[htbp] # \caption{\label{prof}Tangential velocity as a function of radial position for # various Generalised Newtonian fluids.} # \begin{center} # \includegraphics[width=\hsize]{prof.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh couette.sh couette.gfs # Version: 1.0.0 # Required files: couette.sh profile prof-0.ref prof-1.ref prof-2.ref prof-3.ref # Running time: 32 minutes # Generated files: prof.eps # 1 0 GfsSimulation GfsBox GfsGEdge {} { Time { iend = 100 dtmax = 1e-2 } Refine 6 Solid (ellipse (0,0,0.25,0.25)) { flip = 1 scale = 1.9999 } Solid (ellipse (0,0,0.25,0.25)) ApproxProjectionParams { tolerance = 1e-6 } AdvectionParams { scheme = none } SourceViscosity {} { double mu, ty, N, mumax = 1000.; double m; switch (MODEL) { case 0: /* Newtonian */ mu = 1.; ty = 0.; N = 1.; break; case 1: /* Power-law (shear-thinning) */ mu = 0.08; ty = 0.; N = 0.5; break; case 2: /* Herschel-Bulkley */ mu = 0.0672; ty = 0.12; N = 0.5; break; case 3: /* Bingham */ mu = 1.; ty = 10.; N = 1.; break; } if (D2 > 0.) m = ty/(2.*D2) + mu*exp ((N - 1.)*log (D2)); else { if (ty > 0. || N < 1.) m = mumax; else m = N == 1. ? mu : 0.; } return MIN (m, mumax); } { # Crank-Nicholson does not converge for these cases, we need backward Euler # (beta = 0.5 -> Crank-Nicholson, beta = 1 -> backward Euler) beta = 1 } SurfaceBc U Dirichlet (x*x + y*y > 0.140625 ? 0. : - ay) SurfaceBc V Dirichlet (x*x + y*y > 0.140625 ? 0. : ax) EventStop { istep = 1 } U 1e-4 DU OutputScalarNorm { istep = 1 } du-MODEL { v = DU } OutputLocation { start = end } { awk '{if ($1 != "#") print $2,$8;}' > prof-MODEL } profile } GfsBox {} gerris-snapshot-131206/test/shock.sh0000755000175100017510000000003012250371662014305 00000000000000python -u test.py shock gerris-snapshot-131206/tools/0000755000175100017510000000000012250371672013110 500000000000000gerris-snapshot-131206/tools/ppm2mpeg0000644000175100017510000000077212250371172014503 00000000000000#!/bin/bash if test -z "`which ffmpeg`"; then echo "ppm2mpeg: error: could not find 'ffmpeg'" > /dev/stderr exit 1 fi command="ffmpeg -f image2pipe -vcodec ppm -i - -vcodec mpeg1video -b 1800K -f mpeg1video" while test $# -gt 0; do command="$command $1" shift done if test -d "$TMPDIR" ; then log=`mktemp $TMPDIR/ppm2mpeg.XXXXXX` else log=`mktemp /tmp/ppm2mpeg.XXXXXX` fi if $command - 2> $log; then : else cat $log > /dev/stderr rm -f $log exit 1 fi rm -f $log exit 0 gerris-snapshot-131206/tools/bat2gts0000644000175100017510000000622212250371172014316 00000000000000#!/bin/sh # reference longitude (degrees) rlong=174 # reference latitude (degrees) rlat=-41 # width of the domain (kilometers) width=500 # coastline reference depth (m) coast=0.1 # verbose output verbose="" # angle of rotation angle=0 # relative error relative=0.05 # reference depth H=5000 usage() { cat <&2 fi command="bat2gts $*" while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --long=*) rlong=$optarg ;; --lat=*) rlat=$optarg ;; --width=*) width=$optarg ;; --depth=*) H=$optarg ;; --coast=*) coast=$optarg ;; --angle=*) angle=$optarg; ;; --rel=*) relative=$optarg ;; --verbose) verbose="-v" ;; --help) usage 0 1>&2 ;; *) usage 0 1>&2 ;; esac shift done proj=-Ja$rlong/$rlat/1:`echo $width | awk '{print $1*1e5}'`c area=-R`echo $rlong $rlat $width | awk '{ Pi = 3.14159265359 dlon = 0.71*$3/(6378.*cos ($2*Pi/180))*180./Pi dlat = 0.71*$3/6378.*180./Pi print $1 - dlon "/" $1 + dlon "/" $2 - dlat "/" $2 + dlat }'` cat < -0.71 && $2 < 0.71 && $2 > -0.71) print $1 " " $2 " " (coast - $3)/H; } ' | sort | uniq | happrox -f $verbose -r `awk -v H=$H 'BEGIN{print 1./H}'` -c $relative |\ transform --rz $angle | transform --revert --tz 0.5 cat < lolat2xy gmtset D_FORMAT = %.12lf mapproject -Dc -C $proj $area | awk ' BEGIN { angle = $angle * 3.14159265359/180.; cosa = cos (angle); sina = sin (angle); } { if (NF >= 2) { printf ("%f %f", cosa*\$1 - sina*\$2, sina*\$1 + cosa*\$2); for (i = 3; i <= NF; i++) printf (" %s", \$i); printf ("\n"); } else print \$0; }' EOF chmod +x lolat2xy cat < xy2lolat gmtset D_FORMAT = %.12lf awk ' BEGIN { angle = - $angle * 3.14159265359/180.; cosa = cos (angle); sina = sin (angle); } { if (NF >= 2) { printf ("%f %f", cosa*\$1 - sina*\$2, sina*\$1 + cosa*\$2); for (i = 3; i <= NF; i++) printf (" %s", \$i); printf ("\n"); } else print \$0; }' | mapproject -Dc -I -C $proj $area EOF chmod +x xy2lolat gerris-snapshot-131206/tools/shapes.c0000644000175100017510000004074012250371172014457 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include "config.h" #ifdef HAVE_GETOPT_H # include #endif /* HAVE_GETOPT_H */ #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #ifndef M_PI # define M_PI 3.14159265359 #endif static GtsSurface * triangulate (GSList * vertices, GSList * constraints) { GtsVertex * v1, * v2, * v3; GtsSurface * s; GSList * i; v1 = gts_vertex_new (gts_vertex_class (), -1e10, -1e10, 0.); v2 = gts_vertex_new (gts_vertex_class (), 1e10, -1e10, 0.); v3 = gts_vertex_new (gts_vertex_class (), 0., 1e10, 0.); s = gts_surface_new (gts_surface_class (), gts_face_class (), gts_edge_class (), gts_vertex_class ()); gts_surface_add_face (s, gts_face_new (gts_face_class (), gts_edge_new (gts_edge_class (), v1, v2), gts_edge_new (gts_edge_class (), v2, v3), gts_edge_new (gts_edge_class (), v3, v1))); i = vertices; while (i) { if (gts_delaunay_add_vertex (s, i->data, NULL) != NULL) { gts_object_destroy (GTS_OBJECT (s)); return NULL; } i = i->next; } i = constraints; while (i) { if (gts_delaunay_add_constraint (s, i->data) != NULL) { gts_object_destroy (GTS_OBJECT (s)); return NULL; } i = i->next; } gts_delaunay_remove_hull (s); return s; } static GSList * contour (GSList * i, GtsSurface * s, gdouble z, gboolean closed) { GSList * edges = NULL; GtsVertex * vold = NULL, * vin = NULL; if (i == NULL || i->next == NULL) return NULL; while (i) { GtsPoint * p = i->data; GtsVertex * v; v = gts_vertex_new (s->vertex_class, p->x, p->y, z); if (vold) edges = g_slist_prepend (edges, gts_edge_new (GTS_EDGE_CLASS (gts_constraint_class ()), v, vold)); else vin = v; vold = v; i = i->next; } if (closed) edges = g_slist_prepend (edges, gts_edge_new (GTS_EDGE_CLASS (gts_constraint_class ()), vin, vold)); return edges; } static void surface_add_shape (GtsSurface * s, GSList * shape, gdouble z1, gdouble z2, guint nz, gboolean closed, gboolean ends) { gdouble z, dz = (z2 - z1)/nz; guint i; GSList * bottom = NULL, * e1 = NULL, * e2 = NULL; for (i = 0, z = z1; i <= nz; i++, z += dz) { if (e1 == NULL) bottom = e1 = contour (shape, s, z, closed); else { GSList * i, * j; GtsEdge * eold = NULL, * ein = NULL; e2 = contour (shape, s, z, closed); i = e1; j = e2; while (i && j) { GtsEdge * e; GtsEdge * ee = gts_edge_new (gts_edge_class (), GTS_SEGMENT (i->data)->v2, GTS_SEGMENT (j->data)->v1); if (!closed || i->next != NULL) e = gts_edge_new (gts_edge_class (), GTS_SEGMENT (i->data)->v2, GTS_SEGMENT (j->data)->v2); else e = ein; if (eold == NULL) eold = ein = gts_edge_new (gts_edge_class (), GTS_SEGMENT (i->data)->v1, GTS_SEGMENT (j->data)->v1); gts_surface_add_face (s, gts_face_new (s->face_class, i->data, eold, ee)); gts_surface_add_face (s, gts_face_new (s->face_class, e, ee, j->data)); eold = e; i = i->next; j = j->next; } if (e1 != bottom) g_slist_free (e1); e1 = e2; } } if (ends) { GSList * vertices1 = gts_vertices_from_segments (bottom); GSList * vertices2 = gts_vertices_from_segments (e1); GtsSurface * s1 = triangulate (vertices1, bottom); GtsSurface * s2 = triangulate (vertices2, e1); if (s1 == NULL || s2 == NULL) { GSList * i = shape; while (i) { fprintf (stderr, "%g %g\n", GTS_POINT (i->data)->x, GTS_POINT (i->data)->y); i = i->next; } fprintf (stderr, "\n"); if (s1) gts_object_destroy (GTS_OBJECT (s1)); if (s2) gts_object_destroy (GTS_OBJECT (s2)); } else { gts_surface_foreach_face (s2, (GtsFunc) gts_triangle_revert, NULL); gts_surface_merge (s, s1); gts_surface_merge (s, s2); gts_object_destroy (GTS_OBJECT (s1)); gts_object_destroy (GTS_OBJECT (s2)); } g_slist_free (vertices1); g_slist_free (vertices2); } g_slist_free (bottom); g_slist_free (e1); } static void surface_add_ellipse_shape (GtsSurface * s, gdouble x, gdouble y, gdouble radius, gdouble theta, gdouble thetamax, gdouble e, gdouble z1, gdouble z2, guint np, gboolean closed) { GSList * shape = NULL; guint i, npm = np; g_return_if_fail (s != NULL); g_return_if_fail (np >= 3); if (thetamax < 2.*M_PI) npm = np + 1; for (i = 0; i < npm; i++) { gdouble theta1 = theta + i*thetamax/(gdouble) np; shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), x + radius*e*cos (theta1), y + radius/e*sin (theta1), 0.)); } surface_add_shape (s, shape, z1, z2, 10, TRUE, closed); g_slist_free (shape); } static void surface_add_star_shape (GtsSurface * s, gdouble dr, gdouble z1, gdouble z2, guint np, gboolean closed) { GSList * shape = NULL; guint i; g_return_if_fail (s != NULL); g_return_if_fail (np >= 3); for (i = 0; i < np; i++) { gdouble theta = .001 + 2.*i*M_PI/np; gdouble radius = 0.45 - dr + dr*cos (6.*theta); shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), radius*cos (theta), radius*sin (theta), 0.)); } surface_add_shape (s, shape, z1, z2, 10, TRUE, closed); g_slist_free (shape); } static gdouble shape_func_bottom (gdouble x) { gdouble y1 = 0.2/4.; gdouble y2 = 1e-6/4.; if (x <= -0.25) return y1; if (x < 0.25) return y2 + 0.5*(y1 - y2)*(1. + cos (2.*M_PI*(x + 0.25))); return y2; } static void surface_add_channel_shape (GtsSurface * s, gdouble z1, gdouble z2, guint np, gboolean closed) { GSList * shape = NULL; gint i; g_return_if_fail (s != NULL); for (i = np - 1; i >= 0; i--) { gdouble x = - 0.501 + 1.002*(gdouble) i/(gdouble) (np - 1); gdouble y = shape_func_bottom (x) - 0.125; shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), x, y, 0.)); } for (i = 0; i < np; i++) { gdouble x = - 0.501 + 1.002*(gdouble) i/(gdouble) (np - 1); gdouble y = 0.25 - shape_func_bottom (x) - 0.125; shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), x, y, 0.)); } shape = g_slist_reverse (shape); surface_add_shape (s, shape, z1, z2, 10, TRUE, closed); g_slist_free (shape); } static void surface_add_rectangular_channel_shape (GtsSurface * s, gdouble z1, gdouble z2, gboolean closed) { GSList * shape = NULL; g_return_if_fail (s != NULL); shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), -0.5001, -0.125001, 0.)); shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), -0.5001, 0.125001, 0.)); shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), 0.5001, 0.125001, 0.)); shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), 0.5001, -0.125001, 0.)); surface_add_shape (s, shape, z1, z2, 10, TRUE, closed); g_slist_free (shape); } static void surface_add_witch_shape (GtsSurface * s, gdouble xo, gdouble h, gdouble lh, gdouble z1, gdouble z2, guint np) { GSList * shape = NULL; guint i; g_return_if_fail (s != NULL); g_return_if_fail (np >= 2); g_return_if_fail (lh > 0.); shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), -0.5001, -0.5002, 0.)); for (i = 0; i < np; i++) { gdouble x = -0.5001 + 1.0002*i/(gdouble) (np - 1); shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), x, h/(1. + (x - xo)*(x - xo)/(lh*lh)) - 0.5001, 0.)); } shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), 0.5001, -0.5002, 0.)); shape = g_slist_reverse (shape); surface_add_shape (s, shape, z1, z2, 10, TRUE, TRUE); g_slist_free (shape); } static void surface_add_rayleigh_taylor_shape (GtsSurface * s, gdouble yo, gdouble a, gdouble z1, gdouble z2, guint np) { GSList * shape = NULL; guint i; g_return_if_fail (s != NULL); g_return_if_fail (np >= 2); shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), -0.5001, -10., 0.)); for (i = 0; i < np; i++) { gdouble x = -0.5001 + 1.0002*i/(gdouble) (np - 1); shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), x, yo + a*cos (i*2.*M_PI/(np - 1)), 0.)); } shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), 0.5001, -10., 0.)); shape = g_slist_reverse (shape); surface_add_shape (s, shape, z1, z2, 10, TRUE, TRUE); g_slist_free (shape); } static gboolean surface_add_file_shape (GtsSurface * s, gdouble z1, gdouble z2, gboolean zextrude, FILE * fp) { gdouble xs = G_MAXDOUBLE, ys = G_MAXDOUBLE, x, y; GSList * shape = NULL; guint length; GtsSurface * s1, * self = NULL; if (zextrude && fscanf (fp, "%lf %lf", &z1, &z2) != 2) return FALSE; while (fscanf (fp, "%lf %lf", &x, &y) == 2) { if (x != xs || y != ys) shape = g_slist_prepend (shape, gts_point_new (gts_point_class (), x, y, 0)); if (xs == G_MAXDOUBLE) { xs = x; ys = y; } } fgetc (fp); length = g_slist_length (shape); if (length > 0 && length < 3) { g_slist_free (shape); return FALSE; } s1 = gts_surface_new (gts_surface_class (), s->face_class, s->edge_class, s->vertex_class); surface_add_shape (s1, shape, z1, z2, zextrude ? 1 : 10, TRUE, TRUE); if (!gts_surface_is_orientable (s1) || !gts_surface_is_closed (s1) || (self = gts_surface_is_self_intersecting (s1))) { GSList * i = shape; while (i) { fprintf (stderr, "%g %g\n", GTS_POINT (i->data)->x, GTS_POINT (i->data)->y); i = i->next; } fprintf (stderr, "\n"); if (self) gts_object_destroy (GTS_OBJECT (self)); } else gts_surface_merge (s, s1); gts_object_destroy (GTS_OBJECT (s1)); g_slist_free (shape); return TRUE; } int main (int argc, char * argv[]) { GtsSurface * s; guint number = 100; int c = 0; gchar * shape = NULL; gboolean verbose = FALSE; gdouble dr = 0.15; gdouble ratio = 1.; gboolean closed = TRUE; gboolean zextrude = FALSE; FILE * sfp = NULL; while (c != EOF) { #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { {"zextrude", no_argument, NULL, 'z'}, {"number", required_argument, NULL, 'n'}, {"open", no_argument, NULL, 'o'}, {"dr", required_argument, NULL, 'd'}, {"ratio", required_argument, NULL, 'r'}, {"help", no_argument, NULL, 'h'}, {"verbose", no_argument, NULL, 'v'}, { NULL } }; int option_index = 0; switch ((c = getopt_long (argc, argv, "hvn:d:r:oz", long_options, &option_index))) { #else /* not HAVE_GETOPT_LONG */ switch ((c = getopt (argc, argv, "hvn:d:r:oz"))) { #endif /* not HAVE_GETOPT_LONG */ case 'z': /* zextrude */ zextrude = TRUE; break; case 'o': /* open */ closed = FALSE; break; case 'n': /* number */ number = atoi (optarg); break; case 'd': /* dr */ dr = atof (optarg); break; case 'r' :/* ratio */ ratio = atof (optarg); break; case 'v': /* verbose */ verbose = TRUE; break; case 'h': /* help */ fprintf (stderr, "Usage: shapes [OPTIONS] SHAPE\n" "Generates various shapes. SHAPE can be one of:\n" " ellipse, star, 4ellipses, square, almgren, channel, half-cylinder,\n" " rayleigh-taylor, FILE\n" "\n" " -z --zextrude shape file contains z coordinate\n" " -n N --number=N set number of points for polar surfaces (default is 100)\n" " -o --open generate open surfaces\n" " -d R --dr=R set inner radius for star to R (default is 0.15)\n" " -r R --ratio=R ratio x/y of the ellipse (default is 1)\n" " -v --verbose display surface statistics\n" " -h --help display this help and exit\n" "\n" "Reports bugs to %s\n", GTS_MAINTAINER); return 0; /* success */ break; case '?': /* wrong options */ fprintf (stderr, "Try `shapes --help' for more information.\n"); return 1; /* failure */ } } if (optind >= argc) { /* missing SHAPE */ fprintf (stderr, "shapes: missing SHAPE\n" "Try `shapes --help' for more information.\n"); return 1; /* failure */ } shape = argv[optind++]; s = gts_surface_new (gts_surface_class (), gts_face_class (), gts_edge_class (), gts_vertex_class ()); if (!strcmp (shape, "ellipse")) surface_add_ellipse_shape (s, 0., 0., 0.25, 0.001, 2.*M_PI, sqrt (1./ratio), - 1., 1., number, closed); else if (!strcmp (shape, "star")) surface_add_star_shape (s, dr, - 1., 1., number, closed); else if (!strcmp (shape, "4ellipses")) { surface_add_ellipse_shape (s, 0.25, 0.25, 5./32./sqrt (2.), 0.001, 2.*M_PI, sqrt (2.), - 1., 1., number, closed); surface_add_ellipse_shape (s, -0.25, 0.25, 5./32./sqrt (2.), 0.001, 2.*M_PI, sqrt (2.), - 1., 1., number, closed); surface_add_ellipse_shape (s, 0.25, -0.25, 5./32./sqrt (2.), 0.001, 2.*M_PI, sqrt (2.), - 1., 1., number, closed); surface_add_ellipse_shape (s, -0.25, -0.25, 5./32./sqrt (2.), 0.001, 2.*M_PI, sqrt (2.), - 1., 1., number, closed); } else if (!strcmp (shape, "square")) surface_add_ellipse_shape (s, 0., 0., 0.25*sqrt(2.), M_PI/4., 2.*M_PI, 1., - 1., 1., 4, closed); else if (!strcmp (shape, "almgren")) { surface_add_ellipse_shape (s, 0.25, 0.25, 0.1, 0.001, 2.*M_PI, 1., -1., 1., number, closed); surface_add_ellipse_shape (s, -0.25, 0.125, sqrt (0.15*0.1), 0.001, 2.*M_PI, 0.15/sqrt (0.15*0.1), -1., 1., number, closed); surface_add_ellipse_shape (s, 0., -0.25, sqrt (0.2*0.1), 0.001, 2.*M_PI, 0.2/sqrt (0.2*0.1), -1., 1., number, closed); } else if (!strcmp (shape, "channel")) surface_add_channel_shape (s, -1., 1., number, closed); else if (!strcmp (shape, "half-cylinder")) { // surface_add_rectangular_channel_shape (s, -1., 1., closed); surface_add_ellipse_shape (s, -0.375001, 0., 0.03125001, M_PI/2., M_PI, 1., -1., 1., number, closed); } else if (!strcmp (shape, "witch")) surface_add_witch_shape (s, -0.25, 0.05, 0.05, -1., 1., number); else if (!strcmp (shape, "rayleigh-taylor")) surface_add_rayleigh_taylor_shape (s, 0., 0.025, -1., 1., number); else if (!strcmp (shape, "annulus")) { surface_add_ellipse_shape (s, 0., 0., 0.5, 0.001, 2.*M_PI, 1., - 2., 2., number, closed); gts_surface_foreach_face (s, (GtsFunc) gts_triangle_revert, NULL); surface_add_ellipse_shape (s, 0., 0., 0.25, 0.001, 2.*M_PI, 1., - 1., 1., number, closed); } else if ((!strcmp (shape, "-") && (sfp = stdin)) || (sfp = fopen (shape, "rt")) != NULL) { while (!feof (sfp)) if (!surface_add_file_shape (s, -1., 1., zextrude, sfp)) { fprintf (stderr, "shapes: file `%s' is not a valid shape\n" "Try `shapes --help' for more information.\n", shape); return 1; /* failure */ } fclose (sfp); } else { fprintf (stderr, "shapes: unknown shape `%s'\n" "Try `shapes --help' for more information.\n", shape); return 1; /* failure */ } if (verbose) gts_surface_print_stats (s, stderr); gts_surface_write (s, stdout); return 0; } gerris-snapshot-131206/tools/Makefile.in0000644000175100017510000010656212250371210015073 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = gfs2oogl2D$(EXEEXT) gfs2oogl3D$(EXEEXT) \ streamanime$(EXEEXT) ppmcombine$(EXEEXT) gfscompare2D$(EXEEXT) \ gfscompare3D$(EXEEXT) gfscombine2D$(EXEEXT) \ gfscombine3D$(EXEEXT) gfsjoin2D$(EXEEXT) gfsjoin3D$(EXEEXT) \ shapes$(EXEEXT) subdir = tools DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_gfs2oogl2D_OBJECTS = gfs2oogl2D-gfs2oogl.$(OBJEXT) gfs2oogl2D_OBJECTS = $(am_gfs2oogl2D_OBJECTS) am__DEPENDENCIES_1 = gfs2oogl2D_DEPENDENCIES = $(am__DEPENDENCIES_1) gfs2oogl2D_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(gfs2oogl2D_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_gfs2oogl3D_OBJECTS = gfs2oogl.$(OBJEXT) gfs2oogl3D_OBJECTS = $(am_gfs2oogl3D_OBJECTS) gfs2oogl3D_DEPENDENCIES = $(am__DEPENDENCIES_1) am_gfscombine2D_OBJECTS = gfscombine2D-gfscombine.$(OBJEXT) gfscombine2D_OBJECTS = $(am_gfscombine2D_OBJECTS) gfscombine2D_DEPENDENCIES = $(am__DEPENDENCIES_1) gfscombine2D_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(gfscombine2D_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_gfscombine3D_OBJECTS = gfscombine.$(OBJEXT) gfscombine3D_OBJECTS = $(am_gfscombine3D_OBJECTS) gfscombine3D_DEPENDENCIES = $(am__DEPENDENCIES_1) am_gfscompare2D_OBJECTS = gfscompare2D-gfscompare.$(OBJEXT) gfscompare2D_OBJECTS = $(am_gfscompare2D_OBJECTS) gfscompare2D_DEPENDENCIES = $(am__DEPENDENCIES_1) gfscompare2D_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(gfscompare2D_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_gfscompare3D_OBJECTS = gfscompare.$(OBJEXT) gfscompare3D_OBJECTS = $(am_gfscompare3D_OBJECTS) gfscompare3D_DEPENDENCIES = $(am__DEPENDENCIES_1) am_gfsjoin2D_OBJECTS = gfsjoin2D-gfsjoin2.$(OBJEXT) gfsjoin2D_OBJECTS = $(am_gfsjoin2D_OBJECTS) gfsjoin2D_DEPENDENCIES = $(am__DEPENDENCIES_1) gfsjoin2D_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(gfsjoin2D_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_gfsjoin3D_OBJECTS = gfsjoin2.$(OBJEXT) gfsjoin3D_OBJECTS = $(am_gfsjoin3D_OBJECTS) gfsjoin3D_DEPENDENCIES = $(am__DEPENDENCIES_1) ppmcombine_SOURCES = ppmcombine.c ppmcombine_OBJECTS = ppmcombine-ppmcombine.$(OBJEXT) ppmcombine_DEPENDENCIES = $(am__DEPENDENCIES_1) ppmcombine_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(ppmcombine_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ shapes_SOURCES = shapes.c shapes_OBJECTS = shapes.$(OBJEXT) shapes_DEPENDENCIES = $(am__DEPENDENCIES_1) streamanime_SOURCES = streamanime.c streamanime_OBJECTS = streamanime.$(OBJEXT) streamanime_DEPENDENCIES = $(am__DEPENDENCIES_1) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } SCRIPTS = $(bin_SCRIPTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(gfs2oogl2D_SOURCES) $(gfs2oogl3D_SOURCES) \ $(gfscombine2D_SOURCES) $(gfscombine3D_SOURCES) \ $(gfscompare2D_SOURCES) $(gfscompare3D_SOURCES) \ $(gfsjoin2D_SOURCES) $(gfsjoin3D_SOURCES) ppmcombine.c \ shapes.c streamanime.c DIST_SOURCES = $(gfs2oogl2D_SOURCES) $(gfs2oogl3D_SOURCES) \ $(gfscombine2D_SOURCES) $(gfscombine3D_SOURCES) \ $(gfscompare2D_SOURCES) $(gfscompare3D_SOURCES) \ $(gfsjoin2D_SOURCES) $(gfsjoin3D_SOURCES) ppmcombine.c \ shapes.c streamanime.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ INCLUDES = -I$(top_srcdir)/src -I$(includedir) -DG_LOG_DOMAIN=\"Gfs-tools\"\ $(GTS_CFLAGS) bin_SCRIPTS = \ darcs2dist \ bat2gts \ ppm2mpeg \ ppm2theora \ ppm2video \ gfs2gfs \ gfsjoin \ gfsplot EXTRA_DIST = $(bin_SCRIPTS) gfs2oogl2D_SOURCES = gfs2oogl.c gfs2oogl3D_SOURCES = gfs2oogl.c gfscompare2D_SOURCES = gfscompare.c gfscompare3D_SOURCES = gfscompare.c gfscombine2D_SOURCES = gfscombine.c gfscombine3D_SOURCES = gfscombine.c gfsjoin2D_SOURCES = gfsjoin2.c gfsjoin3D_SOURCES = gfsjoin2.c gfs2oogl2D_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 gfs2oogl2D_LDADD = $(GFS2D_LIBS) gfs2oogl3D_LDADD = $(GFS3D_LIBS) gfscompare2D_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 gfscompare2D_LDADD = $(GFS2D_LIBS) gfscompare3D_LDADD = $(GFS3D_LIBS) gfscombine2D_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 gfscombine2D_LDADD = $(GFS2D_LIBS) gfscombine3D_LDADD = $(GFS3D_LIBS) gfsjoin2D_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 gfsjoin2D_LDADD = $(GFS2D_LIBS) gfsjoin3D_LDADD = $(GFS3D_LIBS) ppmcombine_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 ppmcombine_LDADD = $(GFS2D_LIBS) streamanime_LDADD = $(GFS3D_LIBS) shapes_LDADD = $(GTS_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list gfs2oogl2D$(EXEEXT): $(gfs2oogl2D_OBJECTS) $(gfs2oogl2D_DEPENDENCIES) $(EXTRA_gfs2oogl2D_DEPENDENCIES) @rm -f gfs2oogl2D$(EXEEXT) $(gfs2oogl2D_LINK) $(gfs2oogl2D_OBJECTS) $(gfs2oogl2D_LDADD) $(LIBS) gfs2oogl3D$(EXEEXT): $(gfs2oogl3D_OBJECTS) $(gfs2oogl3D_DEPENDENCIES) $(EXTRA_gfs2oogl3D_DEPENDENCIES) @rm -f gfs2oogl3D$(EXEEXT) $(LINK) $(gfs2oogl3D_OBJECTS) $(gfs2oogl3D_LDADD) $(LIBS) gfscombine2D$(EXEEXT): $(gfscombine2D_OBJECTS) $(gfscombine2D_DEPENDENCIES) $(EXTRA_gfscombine2D_DEPENDENCIES) @rm -f gfscombine2D$(EXEEXT) $(gfscombine2D_LINK) $(gfscombine2D_OBJECTS) $(gfscombine2D_LDADD) $(LIBS) gfscombine3D$(EXEEXT): $(gfscombine3D_OBJECTS) $(gfscombine3D_DEPENDENCIES) $(EXTRA_gfscombine3D_DEPENDENCIES) @rm -f gfscombine3D$(EXEEXT) $(LINK) $(gfscombine3D_OBJECTS) $(gfscombine3D_LDADD) $(LIBS) gfscompare2D$(EXEEXT): $(gfscompare2D_OBJECTS) $(gfscompare2D_DEPENDENCIES) $(EXTRA_gfscompare2D_DEPENDENCIES) @rm -f gfscompare2D$(EXEEXT) $(gfscompare2D_LINK) $(gfscompare2D_OBJECTS) $(gfscompare2D_LDADD) $(LIBS) gfscompare3D$(EXEEXT): $(gfscompare3D_OBJECTS) $(gfscompare3D_DEPENDENCIES) $(EXTRA_gfscompare3D_DEPENDENCIES) @rm -f gfscompare3D$(EXEEXT) $(LINK) $(gfscompare3D_OBJECTS) $(gfscompare3D_LDADD) $(LIBS) gfsjoin2D$(EXEEXT): $(gfsjoin2D_OBJECTS) $(gfsjoin2D_DEPENDENCIES) $(EXTRA_gfsjoin2D_DEPENDENCIES) @rm -f gfsjoin2D$(EXEEXT) $(gfsjoin2D_LINK) $(gfsjoin2D_OBJECTS) $(gfsjoin2D_LDADD) $(LIBS) gfsjoin3D$(EXEEXT): $(gfsjoin3D_OBJECTS) $(gfsjoin3D_DEPENDENCIES) $(EXTRA_gfsjoin3D_DEPENDENCIES) @rm -f gfsjoin3D$(EXEEXT) $(LINK) $(gfsjoin3D_OBJECTS) $(gfsjoin3D_LDADD) $(LIBS) ppmcombine$(EXEEXT): $(ppmcombine_OBJECTS) $(ppmcombine_DEPENDENCIES) $(EXTRA_ppmcombine_DEPENDENCIES) @rm -f ppmcombine$(EXEEXT) $(ppmcombine_LINK) $(ppmcombine_OBJECTS) $(ppmcombine_LDADD) $(LIBS) shapes$(EXEEXT): $(shapes_OBJECTS) $(shapes_DEPENDENCIES) $(EXTRA_shapes_DEPENDENCIES) @rm -f shapes$(EXEEXT) $(LINK) $(shapes_OBJECTS) $(shapes_LDADD) $(LIBS) streamanime$(EXEEXT): $(streamanime_OBJECTS) $(streamanime_DEPENDENCIES) $(EXTRA_streamanime_DEPENDENCIES) @rm -f streamanime$(EXEEXT) $(LINK) $(streamanime_OBJECTS) $(streamanime_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfs2oogl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfs2oogl2D-gfs2oogl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfscombine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfscombine2D-gfscombine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfscompare.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfscompare2D-gfscompare.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfsjoin2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfsjoin2D-gfsjoin2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppmcombine-ppmcombine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shapes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/streamanime.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< gfs2oogl2D-gfs2oogl.o: gfs2oogl.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfs2oogl2D_CFLAGS) $(CFLAGS) -MT gfs2oogl2D-gfs2oogl.o -MD -MP -MF $(DEPDIR)/gfs2oogl2D-gfs2oogl.Tpo -c -o gfs2oogl2D-gfs2oogl.o `test -f 'gfs2oogl.c' || echo '$(srcdir)/'`gfs2oogl.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/gfs2oogl2D-gfs2oogl.Tpo $(DEPDIR)/gfs2oogl2D-gfs2oogl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gfs2oogl.c' object='gfs2oogl2D-gfs2oogl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfs2oogl2D_CFLAGS) $(CFLAGS) -c -o gfs2oogl2D-gfs2oogl.o `test -f 'gfs2oogl.c' || echo '$(srcdir)/'`gfs2oogl.c gfs2oogl2D-gfs2oogl.obj: gfs2oogl.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfs2oogl2D_CFLAGS) $(CFLAGS) -MT gfs2oogl2D-gfs2oogl.obj -MD -MP -MF $(DEPDIR)/gfs2oogl2D-gfs2oogl.Tpo -c -o gfs2oogl2D-gfs2oogl.obj `if test -f 'gfs2oogl.c'; then $(CYGPATH_W) 'gfs2oogl.c'; else $(CYGPATH_W) '$(srcdir)/gfs2oogl.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/gfs2oogl2D-gfs2oogl.Tpo $(DEPDIR)/gfs2oogl2D-gfs2oogl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gfs2oogl.c' object='gfs2oogl2D-gfs2oogl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfs2oogl2D_CFLAGS) $(CFLAGS) -c -o gfs2oogl2D-gfs2oogl.obj `if test -f 'gfs2oogl.c'; then $(CYGPATH_W) 'gfs2oogl.c'; else $(CYGPATH_W) '$(srcdir)/gfs2oogl.c'; fi` gfscombine2D-gfscombine.o: gfscombine.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfscombine2D_CFLAGS) $(CFLAGS) -MT gfscombine2D-gfscombine.o -MD -MP -MF $(DEPDIR)/gfscombine2D-gfscombine.Tpo -c -o gfscombine2D-gfscombine.o `test -f 'gfscombine.c' || echo '$(srcdir)/'`gfscombine.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/gfscombine2D-gfscombine.Tpo $(DEPDIR)/gfscombine2D-gfscombine.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gfscombine.c' object='gfscombine2D-gfscombine.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfscombine2D_CFLAGS) $(CFLAGS) -c -o gfscombine2D-gfscombine.o `test -f 'gfscombine.c' || echo '$(srcdir)/'`gfscombine.c gfscombine2D-gfscombine.obj: gfscombine.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfscombine2D_CFLAGS) $(CFLAGS) -MT gfscombine2D-gfscombine.obj -MD -MP -MF $(DEPDIR)/gfscombine2D-gfscombine.Tpo -c -o gfscombine2D-gfscombine.obj `if test -f 'gfscombine.c'; then $(CYGPATH_W) 'gfscombine.c'; else $(CYGPATH_W) '$(srcdir)/gfscombine.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/gfscombine2D-gfscombine.Tpo $(DEPDIR)/gfscombine2D-gfscombine.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gfscombine.c' object='gfscombine2D-gfscombine.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfscombine2D_CFLAGS) $(CFLAGS) -c -o gfscombine2D-gfscombine.obj `if test -f 'gfscombine.c'; then $(CYGPATH_W) 'gfscombine.c'; else $(CYGPATH_W) '$(srcdir)/gfscombine.c'; fi` gfscompare2D-gfscompare.o: gfscompare.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfscompare2D_CFLAGS) $(CFLAGS) -MT gfscompare2D-gfscompare.o -MD -MP -MF $(DEPDIR)/gfscompare2D-gfscompare.Tpo -c -o gfscompare2D-gfscompare.o `test -f 'gfscompare.c' || echo '$(srcdir)/'`gfscompare.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/gfscompare2D-gfscompare.Tpo $(DEPDIR)/gfscompare2D-gfscompare.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gfscompare.c' object='gfscompare2D-gfscompare.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfscompare2D_CFLAGS) $(CFLAGS) -c -o gfscompare2D-gfscompare.o `test -f 'gfscompare.c' || echo '$(srcdir)/'`gfscompare.c gfscompare2D-gfscompare.obj: gfscompare.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfscompare2D_CFLAGS) $(CFLAGS) -MT gfscompare2D-gfscompare.obj -MD -MP -MF $(DEPDIR)/gfscompare2D-gfscompare.Tpo -c -o gfscompare2D-gfscompare.obj `if test -f 'gfscompare.c'; then $(CYGPATH_W) 'gfscompare.c'; else $(CYGPATH_W) '$(srcdir)/gfscompare.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/gfscompare2D-gfscompare.Tpo $(DEPDIR)/gfscompare2D-gfscompare.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gfscompare.c' object='gfscompare2D-gfscompare.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfscompare2D_CFLAGS) $(CFLAGS) -c -o gfscompare2D-gfscompare.obj `if test -f 'gfscompare.c'; then $(CYGPATH_W) 'gfscompare.c'; else $(CYGPATH_W) '$(srcdir)/gfscompare.c'; fi` gfsjoin2D-gfsjoin2.o: gfsjoin2.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfsjoin2D_CFLAGS) $(CFLAGS) -MT gfsjoin2D-gfsjoin2.o -MD -MP -MF $(DEPDIR)/gfsjoin2D-gfsjoin2.Tpo -c -o gfsjoin2D-gfsjoin2.o `test -f 'gfsjoin2.c' || echo '$(srcdir)/'`gfsjoin2.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/gfsjoin2D-gfsjoin2.Tpo $(DEPDIR)/gfsjoin2D-gfsjoin2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gfsjoin2.c' object='gfsjoin2D-gfsjoin2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfsjoin2D_CFLAGS) $(CFLAGS) -c -o gfsjoin2D-gfsjoin2.o `test -f 'gfsjoin2.c' || echo '$(srcdir)/'`gfsjoin2.c gfsjoin2D-gfsjoin2.obj: gfsjoin2.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfsjoin2D_CFLAGS) $(CFLAGS) -MT gfsjoin2D-gfsjoin2.obj -MD -MP -MF $(DEPDIR)/gfsjoin2D-gfsjoin2.Tpo -c -o gfsjoin2D-gfsjoin2.obj `if test -f 'gfsjoin2.c'; then $(CYGPATH_W) 'gfsjoin2.c'; else $(CYGPATH_W) '$(srcdir)/gfsjoin2.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/gfsjoin2D-gfsjoin2.Tpo $(DEPDIR)/gfsjoin2D-gfsjoin2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gfsjoin2.c' object='gfsjoin2D-gfsjoin2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gfsjoin2D_CFLAGS) $(CFLAGS) -c -o gfsjoin2D-gfsjoin2.obj `if test -f 'gfsjoin2.c'; then $(CYGPATH_W) 'gfsjoin2.c'; else $(CYGPATH_W) '$(srcdir)/gfsjoin2.c'; fi` ppmcombine-ppmcombine.o: ppmcombine.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ppmcombine_CFLAGS) $(CFLAGS) -MT ppmcombine-ppmcombine.o -MD -MP -MF $(DEPDIR)/ppmcombine-ppmcombine.Tpo -c -o ppmcombine-ppmcombine.o `test -f 'ppmcombine.c' || echo '$(srcdir)/'`ppmcombine.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ppmcombine-ppmcombine.Tpo $(DEPDIR)/ppmcombine-ppmcombine.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ppmcombine.c' object='ppmcombine-ppmcombine.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ppmcombine_CFLAGS) $(CFLAGS) -c -o ppmcombine-ppmcombine.o `test -f 'ppmcombine.c' || echo '$(srcdir)/'`ppmcombine.c ppmcombine-ppmcombine.obj: ppmcombine.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ppmcombine_CFLAGS) $(CFLAGS) -MT ppmcombine-ppmcombine.obj -MD -MP -MF $(DEPDIR)/ppmcombine-ppmcombine.Tpo -c -o ppmcombine-ppmcombine.obj `if test -f 'ppmcombine.c'; then $(CYGPATH_W) 'ppmcombine.c'; else $(CYGPATH_W) '$(srcdir)/ppmcombine.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ppmcombine-ppmcombine.Tpo $(DEPDIR)/ppmcombine-ppmcombine.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ppmcombine.c' object='ppmcombine-ppmcombine.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ppmcombine_CFLAGS) $(CFLAGS) -c -o ppmcombine-ppmcombine.obj `if test -f 'ppmcombine.c'; then $(CYGPATH_W) 'ppmcombine.c'; else $(CYGPATH_W) '$(srcdir)/ppmcombine.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(SCRIPTS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-binSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-binSCRIPTS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-binSCRIPTS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/tools/ppmcombine.c0000644000175100017510000000515312250371172015324 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include "config.h" #ifdef HAVE_GETOPT_H # include #endif /* HAVE_GETOPT_H */ #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #include "graphic.h" int main (int argc, char * argv[]) { int c = 0; gboolean verbose = FALSE; /* parse options using getopt */ while (c != EOF) { #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { {"help", no_argument, NULL, 'h'}, {"verbose", no_argument, NULL, 'v'}, { NULL } }; int option_index = 0; switch ((c = getopt_long (argc, argv, "hv", long_options, &option_index))) { #else /* not HAVE_GETOPT_LONG */ switch ((c = getopt (argc, argv, "hv"))) { #endif /* not HAVE_GETOPT_LONG */ case 'v': /* verbose */ verbose = TRUE; break; case 'h': /* help */ fprintf (stderr, "Usage: ppmcombine [OPTION] FILE1 FILE2...\n" "Combines several PPM files produced by a parallel run of Gerris.\n" "\n" " -v --verbose display statistics and other info\n" " -h --help display this help and exit\n" "\n" "Reports bugs to %s\n", FTT_MAINTAINER); return 0; /* success */ break; case '?': /* wrong options */ fprintf (stderr, "Try `ppmcombine --help' for more information.\n"); return 1; /* failure */ } } if (optind >= argc) { fprintf (stderr, "ppmcombine: missing FILE1\n" "Try `ppmcombine --help' for more information.\n"); return 1; /* failure */ } #if FTT_2D c = gfs_combine_ppm (&argv[optind], argc - optind, stdout); if (c >= 0) { fprintf (stderr, "ppmcombine: format error in file `%s'\n", argv[optind + c]); return 1; /* failure */ } #endif /* 2D only */ return 0; } gerris-snapshot-131206/tools/ppm2theora0000644000175100017510000000077112250371172015034 00000000000000#!/bin/bash if test -z "`which ffmpeg`"; then echo "ppm2theora: error: could not find 'ffmpeg'" > /dev/stderr exit 1 fi command="ffmpeg -f image2pipe -vcodec ppm -i - -vcodec libtheora -vb 2048k -f ogg" while test $# -gt 0; do command="$command $1" shift done if test -d "$TMPDIR" ; then log=`mktemp $TMPDIR/ppm2theora.XXXXXX` else log=`mktemp /tmp/ppm2theora.XXXXXX` fi if $command - 2> $log; then : else cat $log > /dev/stderr rm -f $log exit 1 fi rm -f $log exit 0 gerris-snapshot-131206/tools/gfs2gfs0000644000175100017510000000104712250371172014311 00000000000000#!/bin/sh usage() { cat < NEWFILE Converts old Gerris simulation files to the current format. Options: [--help] display this message and exits EOF exit $1 } while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --help) usage 0 1>&2 ;; *) usage 0 1>&2 ;; esac shift done sed 's/^ *GtsSurface/GfsSolid {}/g' | \ sed 's/GtsSurfaceFile/GfsSolid/g' | \ sed 's/surface =/solid =/g' gerris-snapshot-131206/tools/gfscompare.c0000644000175100017510000005244312250371172015325 00000000000000#include #include #include #include "config.h" #ifdef HAVE_GETOPT_H # include #endif /* HAVE_GETOPT_H */ #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #include "graphic.h" #include "solid.h" #include "init.h" #include "simulation.h" #if FTT_2D /* GfsVertex: Header */ typedef struct _GfsVertex GfsVertex; struct _GfsVertex { /*< private >*/ GtsVertex parent; /*< public >*/ FttCell * cell; }; #define GFS_VERTEX(obj) GTS_OBJECT_CAST (obj,\ GfsVertex,\ gfs_vertex_class ()) #define IS_GFS_VERTEX(obj) (gts_object_is_from_class (obj,\ gfs_vertex_class ())) static GtsVertexClass * gfs_vertex_class (void); /* GfsVertex: Object */ GtsVertexClass * gfs_vertex_class (void) { static GtsVertexClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_vertex_info = { "GfsVertex", sizeof (GfsVertex), sizeof (GtsVertexClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_vertex_class ()), &gfs_vertex_info); } return klass; } static void add_vertex (GSList * merged, GtsSurface * s) { FttVector cm = {0., 0., 0.}; gdouble ta = 0.; GtsVertex * v; GSList * i = merged; while (i) { FttVector p; FttCell * cell = i->data; gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.; gfs_cell_cm (i->data, &p); cm.x += a*p.x; cm.y += a*p.y; cm.z += a*p.z; ta += a; i = i->next; } v = gts_vertex_new (s->vertex_class, cm.x/ta, cm.y/ta, cm.z/ta); g_assert (gts_delaunay_add_vertex (s, v, NULL) == NULL); GFS_VERTEX (v)->cell = merged->data; } static GtsSurface * surface_from_domain (GfsDomain * domain) { GtsSurface * s = gts_surface_new (gts_surface_class (), gts_face_class (), gts_edge_class (), GTS_VERTEX_CLASS (gfs_vertex_class ())); GtsVertex * v1 = gts_vertex_new (s->vertex_class, -100., -100., 0.); GtsVertex * v2 = gts_vertex_new (s->vertex_class, 100., -100., 0.); GtsVertex * v3 = gts_vertex_new (s->vertex_class, 0., 100., 0.); GtsEdge * e1 = gts_edge_new (s->edge_class, v1, v2); GtsEdge * e2 = gts_edge_new (s->edge_class, v2, v3); GtsEdge * e3 = gts_edge_new (s->edge_class, v3, v1); gts_surface_add_face (s, gts_face_new (s->face_class, e1, e2, e3)); gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) add_vertex, s); gts_allow_floating_vertices = TRUE; gts_object_destroy (GTS_OBJECT (v1)); gts_object_destroy (GTS_OBJECT (v2)); gts_object_destroy (GTS_OBJECT (v3)); gts_allow_floating_vertices = FALSE; return s; } static void difference_triangulated (GfsVertex * v, gpointer * data) { GtsSurface * s = data[0]; GfsVariable * var1 = data[1]; GfsVariable * var2 = data[2]; GfsVariable * e = data[3]; GtsFace * f = gts_point_locate (GTS_POINT (v), s, NULL); if (f != NULL && gts_triangle_quality (GTS_TRIANGLE (f)) > 0.8) { GtsVertex * v1, * v2, * v3; gdouble x, x1, x2, y, y1, y2, a, b, det; gdouble fv3, fv1, fv2; gts_triangle_vertices (GTS_TRIANGLE (f), &v1, &v2, &v3); x = GTS_POINT (v)->x - GTS_POINT (v1)->x; y = GTS_POINT (v)->y - GTS_POINT (v1)->y; x1 = GTS_POINT (v2)->x - GTS_POINT (v1)->x; y1 = GTS_POINT (v2)->y - GTS_POINT (v1)->y; x2 = GTS_POINT (v3)->x - GTS_POINT (v1)->x; y2 = GTS_POINT (v3)->y - GTS_POINT (v1)->y; det = x1*y2 - x2*y1; g_assert (det != 0.); a = (x*y2 - y*x2)/det; b = (y*x1 - x*y1)/det; fv1 = GFS_VALUE (GFS_VERTEX (v1)->cell, var2); fv2 = GFS_VALUE (GFS_VERTEX (v2)->cell, var2); fv3 = GFS_VALUE (GFS_VERTEX (v3)->cell, var2); GTS_POINT (v)->z = GFS_VALUE (v->cell, e) = GFS_VALUE (v->cell, var1) - (fv1 + a*(fv2 - fv1) + b*(fv3 - fv1)); } } #endif /* FTT_2D */ static gboolean is_mixed (FttCell * cell, guint level) { if (GFS_IS_MIXED (cell)) return TRUE; if (!FTT_CELL_IS_ROOT (cell) && ftt_cell_level (cell) > level) return is_mixed (ftt_cell_parent (cell), level); return FALSE; } static void inject (FttCell * cell, GfsVariable * e) { if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren child; guint i; ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { GFS_VALUE (child.c[i], e) = GFS_VALUE (cell, e); inject (child.c[i], e); } } } static gboolean difference_tree (FttCell * cell, GfsDomain * ref, GfsVariable * v1, GfsVariable * v2, GfsVariable * e, gdouble period) { guint level = ftt_cell_level (cell); FttVector pos; FttCell * locate; gboolean added = FALSE; ftt_cell_pos (cell, &pos); pos.x += period; locate = gfs_domain_locate (ref, pos, level, NULL); if (locate == NULL) { pos.x -= 2.*period; locate = gfs_domain_locate (ref, pos, level, NULL); } if (locate == NULL) { fprintf (stderr, "gfscompare: the files are not comparable\n"); exit (1); } if (ftt_cell_level (locate) != level) return FALSE; if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren child; guint i; ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i] && difference_tree (child.c[i], ref, v1, v2, e, period)) added = TRUE; } if (!added) { if (GFS_HAS_DATA (cell, v1) && GFS_HAS_DATA (locate, v2)) GFS_VALUE (cell, e) = (GFS_VALUE (cell, v1) - GFS_VALUE (locate, v2)); else if (!GFS_HAS_DATA (cell, v1) && GFS_HAS_DATA (locate, v2)) GFS_VALUE (cell, e) = GFS_VALUE (locate, v2); else if (GFS_HAS_DATA (cell, v1) && !GFS_HAS_DATA (locate, v2)) GFS_VALUE (cell, e) = GFS_VALUE (cell, v1); else GFS_VALUE (cell, e) = GFS_NODATA; inject (cell, e); } return TRUE; } static void difference_box (GfsBox * box, gpointer * data) { gdouble * period = data[4]; difference_tree (box->root, data[0], data[1], data[2], data[3], *period); } static void difference_constant (FttCell * cell, gpointer * data) { gint full = *((gint *) data[0]); gdouble * sum = data[1]; gboolean * centered = data[3]; gboolean * weighted = data[4]; gdouble * weight = data[5]; GfsVariable * e = data[6]; gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.; if ((full == -2 || (full == -1 && !GFS_IS_MIXED (cell)) || (full >= 0 && !is_mixed (cell, full))) && (!(*centered) || a >= 0.5)) { gdouble w = *weighted ? ftt_cell_volume (cell)*a : 1.; *sum += w*GFS_VALUE (cell, e); *weight += w; } } static void difference (FttCell * cell, gpointer * data) { gint full = *((gint *) data[0]); GfsNorm * norm = data[1]; gboolean * histogram = data[2]; gboolean * centered = data[3]; gboolean * weighted = data[4]; gdouble * constant = data[5]; gboolean * mixed = data[6]; GfsVariable * e = data[7]; gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.; if ((!(*mixed) || a < 1.) && (full == -2 || (full == -1 && !GFS_IS_MIXED (cell)) || (full >= 0 && !is_mixed (cell, full))) && (!(*centered) || a >= 0.5)) { gfs_norm_add (norm, GFS_VALUE (cell, e) - *constant, *weighted ? ftt_cell_volume (cell)*a : 1.); if (*histogram) printf ("%g %g\n", GFS_VALUE (cell, e), a); } else GFS_VALUE (cell, e) = 0.; } static void compute_gradient (FttCell * cell, gpointer * data) { GfsVariable * v = data[0]; FttComponent * c = data[1]; GfsVariable * g = data[2]; GFS_VALUE (cell, g) = gfs_center_gradient (cell, *c, v->i)/ftt_cell_size (cell); } static void compute_log (FttCell * cell, GfsVariable * e) { GFS_VALUE (cell, e) = log10 (fabs (GFS_VALUE (cell, e)) + 1e-10); } static void compute_absolute (FttCell * cell, GfsVariable * e) { GFS_VALUE (cell, e) = fabs (GFS_VALUE (cell, e)); } static void difference_centered (FttCell * cell, gpointer * data) { GfsDomain * ref = data[0]; GfsVariable * v1 = data[1]; GfsVariable * v2 = data[2]; GfsVariable * e = data[3]; FttVector p; FttCell * locate; gfs_cell_cm (cell, &p); locate = gfs_domain_locate (ref, p, -1, NULL); if (locate == NULL || ftt_cell_level (locate) < ftt_cell_level (cell)) { fprintf (stderr, "gfscompare: the files are not comparable\n"); exit (1); } GFS_VALUE (cell, e) = GFS_VALUE (cell, v1) - gfs_interpolate (locate, p, v2); } int main (int argc, char * argv[]) { GtsFile * fp; FILE * f; int c = 0; gchar * name; GfsVariable * var1, * var2, * e; GfsSimulation * s1, * s2; gboolean verbose = FALSE; gint full = -2; gboolean no_check = FALSE; gboolean output = FALSE; gboolean squares = FALSE; gboolean take_log = FALSE; gchar * fname1, * fname2; gdouble period = 0.; FttComponent gradient = FTT_DIMENSION; GfsNorm norm; gpointer data[8]; gboolean refined_error = FALSE; gboolean histogram = FALSE; gboolean centered = FALSE; gboolean weighted = TRUE; gdouble constant = 0.; gboolean absolute = FALSE; #if FTT_2D gboolean gnuplot = FALSE; gboolean triangulate = FALSE; #endif /* FTT_2D */ gdouble min = G_MAXDOUBLE, max = - G_MAXDOUBLE; gboolean mixed = FALSE; gfs_init (&argc, &argv); /* parse options using getopt */ while (c != EOF) { #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { #if FTT_2D {"gnuplot", no_argument, NULL, 'G'}, {"triangulate", no_argument, NULL, 't'}, #endif /* FTT_2D */ {"mixed", no_argument, NULL, 'x'}, {"min", required_argument, NULL, 'm'}, {"max", required_argument, NULL, 'M'}, {"period", required_argument, NULL, 'p'}, {"histogram", no_argument, NULL, 'H'}, {"refined", no_argument, NULL, 'r'}, {"log", no_argument, NULL, 'l'}, {"abs", no_argument, NULL, 'a'}, {"full", required_argument, NULL, 'f'}, {"gradient", required_argument, NULL, 'g'}, {"output", no_argument, NULL, 'o'}, {"squares", no_argument, NULL, 'S'}, {"nocheck", no_argument, NULL, 'n'}, {"help", no_argument, NULL, 'h'}, {"verbose", no_argument, NULL, 'v'}, {"centered", no_argument, NULL, 'c'}, {"not-weighted", no_argument, NULL, 'w'}, {"constant", no_argument, NULL, 'C'}, { NULL } }; int option_index = 0; switch ((c = getopt_long (argc, argv, "hvnog:f:lSrHp:cwCeaGm:M:xt", long_options, &option_index))) { #else /* not HAVE_GETOPT_LONG */ switch ((c = getopt (argc, argv, "hvnog:f:lSrHp:cwCeaGm:M:xt"))) { #endif /* not HAVE_GETOPT_LONG */ #if FTT_2D case 'G': /* gnuplot */ gnuplot = TRUE; break; case 't': /* triangulate */ triangulate = TRUE; break; #endif /* FTT_2D */ case 'x': /* mixed */ mixed = TRUE; break; case 'm': /* min */ min = atof (optarg); break; case 'M': /* max */ max = atof (optarg); break; case 'a': /* abs */ absolute = TRUE; break; case 'C': /* constant */ constant = TRUE; break; case 'w': /* not-weighted */ weighted = FALSE; break; case 'c': /* centered */ centered = TRUE; break; case 'p': /* period */ period = atof (optarg); break; case 'H': /* histogram */ histogram = TRUE; break; case 'r': /* refined */ refined_error = TRUE; break; case 'l': /* log */ take_log = TRUE; break; case 'f': /* full */ full = atoi (optarg); break; case 'g': /* gradient */ gradient = atoi (optarg); if (gradient >= FTT_DIMENSION) { fprintf (stderr, "gfscompare: invalid argument for option `gradient'.\n" "Try `gfscompare --help' for more information.\n"); return 1; /* failure */ } break; case 'S': /* squares */ squares = TRUE; break; case 'o': /* output */ output = TRUE; break; case 'n': /* nocheck */ no_check = TRUE; break; case 'v': /* verbose */ verbose = TRUE; break; case 'h': /* help */ fprintf (stderr, "Usage: gfscompare [OPTION] FILE1 FILE2 VAR\n" "Computes the difference between the solutions in FILE1 and FILE2\n" "for variable VAR.\n" "\n" " -x --mixed compute error only in mixed cells\n" " -m V --min=V set minimum of color scale to V (used with -S)\n" " -M V --max=V set maximum of color scale to V\n" " -a --abs output the absolute value of the error field\n" " -C --constant apply a constant shift to one of the field, minimizing\n" " the error between the two fields (useful for pressure)\n" " -w --not-weighted do not use area-weighted norm estimation\n" " -c --centered use error estimation for cell-centered variables\n" " -p P --period=P shifts FILE1 by P along the x axis\n" " -H --histogram output (error,volume) pairs for each cell used\n" " to compute the error norms\n" " -o --output output a GTS representation of the error field\n" " -S --squares output an OOGL representation of the error field\n" #if FTT_2D " -G --gnuplot output a gnuplot representation of the error field\n" " -t --triangulate use center of mass triangulation\n" #endif /* FTT_2D */ " -l --log output the log10 of the absolute value of the error field\n" " -f L --full=L compare only leaf cells descendants of a cell full at level L\n" " or all full leaf cells if L = -1\n" " -r --refined display error norm on the finest grid\n" " -n --nocheck do not check solid fractions\n" " -g C --gradient=C use the C component of the gradient of VAR\n" " -v --verbose display difference statistics and other info\n" " -h --help display this help and exit\n" "\n" "Reports bugs to %s\n", FTT_MAINTAINER); return 0; /* success */ break; case '?': /* wrong options */ fprintf (stderr, "Try `gfscompare --help' for more information.\n"); return 1; /* failure */ } } if (optind >= argc) { /* missing FILE1 */ fprintf (stderr, "gfscompare: missing FILE1\n" "Try `gfscompare --help' for more information.\n"); return 1; /* failure */ } fname1 = argv[optind++]; if (optind >= argc) { /* missing FILE2 */ fprintf (stderr, "gfscompare: missing FILE2\n" "Try `gfscompare --help' for more information.\n"); return 1; /* failure */ } fname2 = argv[optind++]; if (optind >= argc) { /* missing VAR */ fprintf (stderr, "gfscompare: missing VAR\n" "Try `gfscompare --help' for more information.\n"); return 1; /* failure */ } name = argv[optind++]; f = fopen (fname1, "rt"); if (f == NULL) { fprintf (stderr, "gfscompare: cannot open file `%s'\n", fname1); return 1; } fp = gts_file_new (f); if (!(s1 = gfs_simulation_read (fp))) { fprintf (stderr, "gfscompare: file `%s' is not a valid simulation file\n" "%s:%d:%d: %s\n", fname1, fname1, fp->line, fp->pos, fp->error); return 1; } gts_file_destroy (fp); fclose (f); gfs_simulation_init (s1); f = fopen (fname2, "rt"); if (f == NULL) { fprintf (stderr, "gfscompare: cannot open file `%s'\n", fname2); return 1; } fp = gts_file_new (f); if (!(s2 = gfs_simulation_read (fp))) { fprintf (stderr, "gfscompare: file `%s' is not a valid simulation file\n" "%s:%d:%d: %s\n", fname2, fname2, fp->line, fp->pos, fp->error); return 1; } gts_file_destroy (fp); fclose (f); gfs_simulation_init (s2); var1 = gfs_variable_from_name (GFS_DOMAIN (s1)->variables, name); if (var1 == NULL) { fprintf (stderr, "gfscompare: unknown variable `%s' for `%s'\n" "Try `gfscompare --help' for more information.\n", name, fname1); return 1; /* failure */ } var2 = gfs_variable_from_name (GFS_DOMAIN (s2)->variables, name); if (var2 == NULL) { fprintf (stderr, "gfscompare: unknown variable `%s' for `%s'\n" "Try `gfscompare --help' for more information.\n", name, fname2); return 1; /* failure */ } if (verbose) { GtsRange s; norm = gfs_domain_norm_variable (GFS_DOMAIN (s1), var1, NULL, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); s = gfs_domain_stats_variable (GFS_DOMAIN (s1), var1, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); gdouble f = pow (s1->physical_params.L, var1->units); fprintf (stderr, "%s:\n" " first: %g second: %g infty: %g w: %g\n" " min: %g avg: %g | %g max: %g\n", fname1, norm.first*f, norm.second*f, norm.infty*f, norm.w, s.min*f, s.mean*f, s.stddev*f, s.max*f); norm = gfs_domain_norm_variable (GFS_DOMAIN (s2), var2, NULL, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); s = gfs_domain_stats_variable (GFS_DOMAIN (s2), var2, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); fprintf (stderr, "%s:\n" " first: %g second: %g infty: %g w: %g\n" " min: %g avg: %g | %g max: %g\n", fname2, norm.first*f, norm.second*f, norm.infty*f, norm.w, s.min*f, s.mean*f, s.stddev*f, s.max*f); } if (gradient < FTT_DIMENSION) { gpointer data[3]; GfsVariable * g1 = gfs_temporary_variable (GFS_DOMAIN (s1)); GfsVariable * g2 = gfs_temporary_variable (GFS_DOMAIN (s2)); data[0] = var1; data[1] = &gradient; data[2] = g1; gfs_domain_cell_traverse (GFS_DOMAIN (s1), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_gradient, data); data[0] = var2; data[2] = g2; gfs_domain_cell_traverse (GFS_DOMAIN (s2), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_gradient, data); var1 = g1; var2 = g2; } data[0] = s2; data[1] = var1; data[2] = var2; data[3] = e = gfs_temporary_variable (GFS_DOMAIN (s1)); if (centered) gfs_domain_cell_traverse (GFS_DOMAIN (s1), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) difference_centered, data); #if FTT_2D else if (triangulate) { GtsSurface * ss1, * ss2; gpointer data[4]; gfs_clock_start (GFS_DOMAIN (s1)->timer); gfs_clock_start (GFS_DOMAIN (s2)->timer); gfs_simulation_refine (s1); gfs_simulation_refine (s2); gfs_set_merged (GFS_DOMAIN (s1)); gfs_set_merged (GFS_DOMAIN (s2)); gfs_clock_stop (GFS_DOMAIN (s1)->timer); gfs_clock_stop (GFS_DOMAIN (s2)->timer); ss1 = surface_from_domain (GFS_DOMAIN (s1)); ss2 = surface_from_domain (GFS_DOMAIN (s2)); data[0] = ss2; data[1] = var1; data[2] = var2; data[3] = e; gts_surface_foreach_vertex (ss1, (GtsFunc) difference_triangulated, data); } #endif /* FTT_2D */ else { gfs_domain_cell_traverse (GFS_DOMAIN (s1), FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_get_from_below_intensive, var1); gfs_domain_cell_traverse (GFS_DOMAIN (s2), FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_get_from_below_intensive, var2); data[4] = . gts_container_foreach (GTS_CONTAINER (s1), (GtsFunc) difference_box, data); } data[0] = &full; data[2] = &histogram; data[3] = ¢ered; data[4] = &weighted; if (constant) { gdouble sum = 0., weight = 0.; data[1] = ∑ data[5] = &weight; data[6] = e; gfs_domain_cell_traverse (GFS_DOMAIN (s1), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) difference_constant, data); constant = weight > 0. ? sum/weight : 0.; } gfs_norm_init (&norm); data[1] = &norm; data[5] = &constant; data[6] = &mixed; data[7] = e; gfs_domain_cell_traverse (GFS_DOMAIN (s1), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) difference, data); gfs_norm_update (&norm); if (verbose) { gdouble f = pow (s1->physical_params.L, var1->units); fprintf (stderr, "total err first: %10.3e second: %10.3e infty: %10.3e w: %g\n", norm.first*f, norm.second*f, norm.infty*f, norm.w); if (refined_error) { norm = gfs_domain_norm_variable (GFS_DOMAIN (s1), e, NULL, FTT_TRAVERSE_LEVEL, gfs_domain_depth (GFS_DOMAIN (s1)), NULL, NULL); fprintf (stderr, "refined err first: %10.3e second: %10.3e infty: %10.3e w: %g\n", norm.first*f, norm.second*f, norm.infty*f, norm.w); } } if (output || #if FTT_2D gnuplot || #endif /* FTT_2D */ squares) { if (take_log) gfs_domain_cell_traverse (GFS_DOMAIN (s1), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_log, e); else if (absolute) gfs_domain_cell_traverse (GFS_DOMAIN (s1), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_absolute, e); if (squares) { GtsRange stats = gfs_domain_stats_variable (GFS_DOMAIN (s1), e, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); gfs_write_squares (GFS_DOMAIN (s1), e, min < G_MAXDOUBLE ? min : stats.min, max > - G_MAXDOUBLE ? max : stats.max, FTT_TRAVERSE_LEAFS, -1, NULL, stdout); } #if FTT_2D else if (gnuplot) gfs_write_gnuplot (GFS_DOMAIN (s1), e, FTT_TRAVERSE_LEAFS, -1, NULL, stdout); #endif /* FTT_2D */ else gfs_write_gts (GFS_DOMAIN (s1), e, FTT_TRAVERSE_LEAFS, -1, NULL, stdout); } return 0; } gerris-snapshot-131206/tools/gfscombine.c0000644000175100017510000001520212250371172015303 00000000000000#include #include #include #include "config.h" #ifdef HAVE_GETOPT_H # include #endif /* HAVE_GETOPT_H */ #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #include "init.h" #include "simulation.h" typedef struct { GfsSimulation * s1, * s2; GfsVariable * v1, * v2; } CombineData; static void relativepos (FttCell * cell, GfsSimulation * s1, GfsSimulation * s2, FttVector * pos) { ftt_cell_pos (cell, pos); gfs_simulation_map_inverse (s1, pos); gfs_simulation_map (s2, pos); } static void refine (FttCell * cell, CombineData * p) { FttVector pos; relativepos (cell, p->s1, p->s2, &pos); FttCell * matching = gfs_domain_locate (GFS_DOMAIN (p->s2), pos, -1, NULL); if (matching && ftt_cell_level (cell) < ftt_cell_level (matching)) ftt_cell_refine_single (cell, GFS_DOMAIN (p->s1)->cell_init, GFS_DOMAIN (p->s1)->cell_init_data); } static void combine (FttCell * cell, CombineData * p) { FttVector pos; relativepos (cell, p->s1, p->s2, &pos); FttCell * matching = gfs_domain_locate (GFS_DOMAIN (p->s2), pos, -1, NULL); if (matching) { g_assert (ftt_cell_level (cell) >= ftt_cell_level (matching)); GFS_VALUE (cell, p->v1) = MAX (GFS_VALUE (cell, p->v1), GFS_VALUE (matching, p->v2)); } } int main (int argc, char * argv[]) { GtsFile * fp; FILE * f; int c = 0; gchar * name; GfsVariable * var1, * var2; GfsSimulation * s1, * s2; gboolean verbose = FALSE; gchar * fname1, * fname2; gfs_init (&argc, &argv); /* parse options using getopt */ while (c != EOF) { #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { {"help", no_argument, NULL, 'h'}, {"verbose", no_argument, NULL, 'v'}, { NULL } }; int option_index = 0; switch ((c = getopt_long (argc, argv, "hv", long_options, &option_index))) { #else /* not HAVE_GETOPT_LONG */ switch ((c = getopt (argc, argv, "hv"))) { #endif /* not HAVE_GETOPT_LONG */ case 'v': /* verbose */ verbose = TRUE; break; case 'h': /* help */ fprintf (stderr, "Usage: gfscombine [OPTION] FILE1 FILE2 VAR\n" "Computes the maximum of VAR between the solutions in FILE1 and FILE2\n" "and outputs the corresponding simulation.\n" "\n" " -v --verbose display statistics and other info\n" " -h --help display this help and exit\n" "\n" "Reports bugs to %s\n", FTT_MAINTAINER); return 0; /* success */ break; case '?': /* wrong options */ fprintf (stderr, "Try `gfscombine --help' for more information.\n"); return 1; /* failure */ } } if (optind >= argc) { /* missing FILE1 */ fprintf (stderr, "gfscombine: missing FILE1\n" "Try `gfscombine --help' for more information.\n"); return 1; /* failure */ } fname1 = argv[optind++]; if (optind >= argc) { /* missing FILE2 */ fprintf (stderr, "gfscombine: missing FILE2\n" "Try `gfscombine --help' for more information.\n"); return 1; /* failure */ } fname2 = argv[optind++]; if (optind >= argc) { /* missing VAR */ fprintf (stderr, "gfscombine: missing VAR\n" "Try `gfscombine --help' for more information.\n"); return 1; /* failure */ } name = argv[optind++]; f = fopen (fname1, "rt"); if (f == NULL) { fprintf (stderr, "gfscombine: cannot open file `%s'\n", fname1); return 1; } fp = gts_file_new (f); if (!(s1 = gfs_simulation_read (fp))) { fprintf (stderr, "gfscombine: file `%s' is not a valid simulation file\n" "%s:%d:%d: %s\n", fname1, fname1, fp->line, fp->pos, fp->error); return 1; } gts_file_destroy (fp); fclose (f); gfs_simulation_init (s1); f = fopen (fname2, "rt"); if (f == NULL) { fprintf (stderr, "gfscombine: cannot open file `%s'\n", fname2); return 1; } fp = gts_file_new (f); if (!(s2 = gfs_simulation_read (fp))) { fprintf (stderr, "gfscombine: file `%s' is not a valid simulation file\n" "%s:%d:%d: %s\n", fname2, fname2, fp->line, fp->pos, fp->error); return 1; } gts_file_destroy (fp); fclose (f); gfs_simulation_init (s2); var1 = gfs_variable_from_name (GFS_DOMAIN (s1)->variables, name); if (var1 == NULL) { fprintf (stderr, "gfscombine: unknown variable `%s' for `%s'\n" "Try `gfscombine --help' for more information.\n", name, fname1); return 1; /* failure */ } var2 = gfs_variable_from_name (GFS_DOMAIN (s2)->variables, name); if (var2 == NULL) { fprintf (stderr, "gfscombine: unknown variable `%s' for `%s'\n" "Try `gfscombine --help' for more information.\n", name, fname2); return 1; /* failure */ } if (verbose) { GfsNorm norm = gfs_domain_norm_variable (GFS_DOMAIN (s1), var1, NULL, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); GtsRange s = gfs_domain_stats_variable (GFS_DOMAIN (s1), var1, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); gdouble f = pow (s1->physical_params.L, var1->units); fprintf (stderr, "%s:\n" " first: %g second: %g infty: %g w: %g\n" " min: %g avg: %g | %g max: %g\n", fname1, norm.first*f, norm.second*f, norm.infty*f, norm.w, s.min*f, s.mean*f, s.stddev*f, s.max*f); norm = gfs_domain_norm_variable (GFS_DOMAIN (s2), var2, NULL, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); s = gfs_domain_stats_variable (GFS_DOMAIN (s2), var2, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); fprintf (stderr, "%s:\n" " first: %g second: %g infty: %g w: %g\n" " min: %g avg: %g | %g max: %g\n", fname2, norm.first*f, norm.second*f, norm.infty*f, norm.w, s.min*f, s.mean*f, s.stddev*f, s.max*f); } CombineData p = { s1, s2, var1, var2 }; gfs_domain_traverse_leaves (GFS_DOMAIN (s1), (FttCellTraverseFunc) refine, &p); gfs_domain_traverse_leaves (GFS_DOMAIN (s1), (FttCellTraverseFunc) combine, &p); if (verbose) { GfsNorm norm = gfs_domain_norm_variable (GFS_DOMAIN (s1), var1, NULL, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); GtsRange s = gfs_domain_stats_variable (GFS_DOMAIN (s1), var1, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); gdouble f = pow (s1->physical_params.L, var1->units); fprintf (stderr, "max(%s,%s):\n" " first: %g second: %g infty: %g w: %g\n" " min: %g avg: %g | %g max: %g\n", fname1, fname2, norm.first*f, norm.second*f, norm.infty*f, norm.w, s.min*f, s.mean*f, s.stddev*f, s.max*f); } gfs_simulation_write (s1, -1, stdout); gts_object_destroy (GTS_OBJECT (s1)); gts_object_destroy (GTS_OBJECT (s2)); return 0; } gerris-snapshot-131206/tools/ppm2video0000644000175100017510000000072412250371172014656 00000000000000#!/bin/bash if test -z "`which ffmpeg`"; then echo "ppm2video: error: could not find 'ffmpeg'" > /dev/stderr exit 1 fi command="ffmpeg -f image2pipe -vcodec ppm -i - -y" while test $# -gt 0; do command="$command $1" shift done if test -d "$TMPDIR" ; then log=`mktemp $TMPDIR/ppm2video.XXXXXX` else log=`mktemp /tmp/ppm2video.XXXXXX` fi if $command 2> $log; then : else cat $log > /dev/stderr rm -f $log exit 1 fi rm -f $log exit 0 gerris-snapshot-131206/tools/gfsjoin0000644000175100017510000001165212250371172014412 00000000000000#!/bin/bash # script to join gerris output files in parallel simulations help () { echo "" echo "Usage: gfsjoin Simfile Directory Rootname NP Tailname > Joined" echo "" echo "Simfile: Name of the simulation file" echo "Directory: Directory where results are located" echo "Rootname: File root name" echo "NP: Number of processors" echo "Tailname: File tail name" echo "" exit } #verbose=1 message () { if test $verbose; then echo $1 > /dev/stdout fi } errmessage () { echo $1 > /dev/stderr } #------------------------------------------------------------------------------ #checking input if [ $# -ne 5 ]; then if [ $1 == '-h' ]; then help else errmessage "Input error, this command requires 5 arguments" errmessage "Type gfsjoin -h for more info" fi exit fi # removing all blanks and tabs immediately before the end of line. # Comments are also removed to avoid errors tmp=`mktemp -d` sed -e 's/#.*//' -e 's/[ ^I]*$//' -e '/^$/ d' $1 | sed '/^#/ d' > $tmp/sim.tmp c1=$3 c2=$5 c3="$tmp/sim.tmp" numproc=$4 dir=$2 # checking operations y=`expr ${#c2} - 2` tailst=`expr substr $c2 $y 3` if [ $tailst == 'gfs' ]; then compress=0 else if [ $tailst == '.gz' ]; then compress=1 c2=`expr substr $c2 1 $[$y-1]` else errmessage "Your simulation file has not a valid extension ("$tailst")" errmessage "The correct file extensions are either .gfs or .gz" exit fi fi p1=$(awk '/GfsSimulation/ {print $1}' $c3) p2=$(awk '/GfsSimulation/ {print $2}' $c3) i=1 if [ $compress -eq 1 ]; then while [ $i -le $numproc ]; do gunzip -q ${dir}'/'$c1$[$i-1]$c2 i=$[$i+1] done fi message 'Creating output................' # Variables to handle the files names i=0 while [ $i -lt $numproc ]; do mainfile[$i]=${dir}'/'$c1$i$c2 message "${mainfile[$i]}" i=$[$i+1] done # Copying the first two lines of the simulation file head -2 ${mainfile[0]} > $tmp/tmp.tmp # Inserting the correct number of boxes and connections sed -e '/GfsSimulation/ s/[0-9]*/'$p1'/1' -e '/GfsSimulation/s/[0-9]*/'$p2'/2' $tmp/tmp.tmp # Copying solid file (if any) sed -n '/SurfaceFile/ p' $c3 # The first two lines are removed because they have useless information. # As I have already inserted the solid, this information is also removed from the files i=0 while [ $i -lt $numproc ]; do nend=$(echo -n $(sed -n '/GtsSurface/,/Gfs/ p' ${mainfile[$i]} | tail -1 | awk '{print $1}' )) nend=$(echo -n $(awk '$1 ~ /'$nend'/ {print NR}' ${mainfile[$i]} | head -1 )) nend=$[$nend+0] if [ $nend -ne 0 ]; then sed -e '1,2 d' -e '/GtsSurface/,'$[$nend-1]' d' ${mainfile[$i]} > $tmp/tmpfile$i else more +3 ${mainfile[$i]} > $tmp/tmpfile$i fi i=$[$i+1] done #Taking the initial common arguments sed -n '1,/GfsBox/p' $tmp/tmpfile0 | sed '$ d' # Creating temporal file with all the boxes (sed is used to remove the # local connectivities in case they will be equal) # boxes in proc 0 (sed -n '/GfsBox/,$p' $tmp/tmpfile0 | awk ' BEGIN{} { condition1 = ( $3 == "right" || $3 == "left" || $3 == "top" || $3 == "bottom" || $3 == "front" || $3 == "back" ) if(!(NF == 3 && condition1)) {print $0} } END{}') > $tmp/tmp.tmp # the rest of boxes i=1 while [ $i -lt $numproc ]; do (sed -n '/GfsBox/,$p' $tmp/tmpfile$i | awk ' BEGIN{} { condition1= ( $3 == "right" || $3 == "left" || $3 == "top" || $3 == "bottom" || $3 == "front" || $3 == "back" ) if(!(NF == 3 && condition1)) {print $0} } END{}') >> $tmp/tmp.tmp i=$[$i+1] done message message "IMPORTANT: This script assumes that the \"id\" is in correlative order in your simulation file (not the pid)" message awk '$1 ~ /GfsBox/ && /id =/ {print $0}' $tmp/tmp.tmp | \ awk 'BEGIN{} { i = 0 do { i++ } while ( $i !~ /^id/ ) print $(i+2) } END{}' > $tmp/tmp.tmp2 # The last box in the temporal file is: lastid=$(tail -1 $tmp/tmp.tmp2) # And the total number of boxes: numboxes=$(wc -l $tmp/tmp.tmp2 | awk '{print $1}') message "Putting boxes in order in the final file" # Boxes are pasted in the final file in order (it is assumed to be sequential) i=1 while [ $i -le $numboxes ]; do if [ $i -ne $lastid ]; then message -n "$i ," n0=$(awk '{if($1 == '$i') {print NR}}' $tmp/tmp.tmp2) n1=$(awk 'FNR == '$[$n0+1]' {print $1}' $tmp/tmp.tmp2) # Taking the lines of this range (the last line is removed # because it corresponds to the next box) (awk '/id = '$i' pid/,/id = '$n1' pid/ {print $0}' $tmp/tmp.tmp | head -n -1) i=$[$i+1] else message -n "$i ," nf=$(awk '$1 ~ /GfsBox/ && $5 == '$i' && $3 ~ /id/ {print NR}' $tmp/tmp.tmp) more +$nf $tmp/tmp.tmp i=$[$i+1] fi done # Copying the global conectivities tail -n $p2 $c3 message message if [ $compress -eq 1 ]; then message 'compressing files again' gzip -f -q ${dir}'/'${c1}*'.gfs' fi rm -rf $tmp gerris-snapshot-131206/tools/Makefile.am0000644000175100017510000000247212250371172015064 00000000000000## Process this file with automake to produce Makefile.in INCLUDES = -I$(top_srcdir)/src -I$(includedir) -DG_LOG_DOMAIN=\"Gfs-tools\"\ $(GTS_CFLAGS) bin_PROGRAMS = \ gfs2oogl2D \ gfs2oogl3D \ streamanime \ ppmcombine \ gfscompare2D \ gfscompare3D \ gfscombine2D \ gfscombine3D \ gfsjoin2D \ gfsjoin3D \ shapes bin_SCRIPTS = \ darcs2dist \ bat2gts \ ppm2mpeg \ ppm2theora \ ppm2video \ gfs2gfs \ gfsjoin \ gfsplot EXTRA_DIST = $(bin_SCRIPTS) gfs2oogl2D_SOURCES = gfs2oogl.c gfs2oogl3D_SOURCES = gfs2oogl.c gfscompare2D_SOURCES = gfscompare.c gfscompare3D_SOURCES = gfscompare.c gfscombine2D_SOURCES = gfscombine.c gfscombine3D_SOURCES = gfscombine.c gfsjoin2D_SOURCES = gfsjoin2.c gfsjoin3D_SOURCES = gfsjoin2.c gfs2oogl2D_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 gfs2oogl2D_LDADD = $(GFS2D_LIBS) gfs2oogl3D_LDADD = $(GFS3D_LIBS) gfscompare2D_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 gfscompare2D_LDADD = $(GFS2D_LIBS) gfscompare3D_LDADD = $(GFS3D_LIBS) gfscombine2D_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 gfscombine2D_LDADD = $(GFS2D_LIBS) gfscombine3D_LDADD = $(GFS3D_LIBS) gfsjoin2D_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 gfsjoin2D_LDADD = $(GFS2D_LIBS) gfsjoin3D_LDADD = $(GFS3D_LIBS) ppmcombine_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 ppmcombine_LDADD = $(GFS2D_LIBS) streamanime_LDADD = $(GFS3D_LIBS) shapes_LDADD = $(GTS_LIBS) gerris-snapshot-131206/tools/gfsjoin2.c0000644000175100017510000001333612250371172014716 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include "config.h" #ifdef HAVE_GETOPT_H # include #endif /* HAVE_GETOPT_H */ #include "init.h" #include "simulation.h" #ifdef HAVE_MPI # include # include "mpi_boundary.h" #endif /* HAVE_MPI */ static void add_box (GfsBox * box, GfsSimulation * sim) { gts_container_add (GTS_CONTAINER (sim), GTS_CONTAINEE (box)); } static void add_id (GfsBox * box, GPtrArray * ids) { if (box->id > ids->len) g_ptr_array_set_size (ids, box->id); g_ptr_array_index (ids, box->id - 1) = box; } static void convert_boundary_mpi_into_edges (GfsBox * box, GPtrArray * ids) { #ifdef HAVE_MPI FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY_MPI (box->neighbor[d])) { GfsBoundaryMpi * b = GFS_BOUNDARY_MPI (box->neighbor[d]); if (b->id < 0) { fprintf (stderr, "gfsjoin: id < 0, you maybe trying to join old parallel simulation files\n"); exit (1); } GfsBox * nbox = g_ptr_array_index (ids, b->id - 1); if (nbox) { if (nbox->pid != b->process) { fprintf (stderr, "gfsjoin: inconsistent MPI boundary: pid = %d, nbox->pid = %d\n", b->process, nbox->pid); exit (1); } if (!GFS_IS_BOUNDARY_MPI (nbox->neighbor[FTT_OPPOSITE_DIRECTION (d)])) { fprintf (stderr, "gfsjoin: inconsistent MPI boundary: nbox[%d] is not an MPI boundary\n", FTT_OPPOSITE_DIRECTION (d)); exit (1); } GfsBoundaryMpi * nb = GFS_BOUNDARY_MPI (nbox->neighbor[FTT_OPPOSITE_DIRECTION (d)]); if (box->pid != nb->process || box->id != nb->id) { fprintf (stderr, "gfsjoin: inconsistent MPI boundary\n" "box->pid != nb->process || box->id != nb->id\n"); exit (1); } gts_object_destroy (GTS_OBJECT (b)); gts_object_destroy (GTS_OBJECT (nb)); gfs_gedge_new (gfs_gedge_class (), box, nbox, d); } } #endif /* HAVE_MPI */ } int main (int argc, char * argv[]) { int c = 0; gboolean verbose = FALSE, keep = FALSE; gfs_init (&argc, &argv); /* parse options using getopt */ while (c != EOF) { #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { {"keep", no_argument, NULL, 'k'}, {"help", no_argument, NULL, 'h'}, {"verbose", no_argument, NULL, 'v'}, { NULL } }; int option_index = 0; switch ((c = getopt_long (argc, argv, "hvk", long_options, &option_index))) { #else /* not HAVE_GETOPT_LONG */ switch ((c = getopt (argc, argv, "hvk"))) { #endif /* not HAVE_GETOPT_LONG */ case 'k': /* keep */ keep = TRUE; break; case 'v': /* verbose */ verbose = TRUE; break; case 'h': /* help */ fprintf (stderr, "Usage: gfsjoin [OPTION] NAME1 NAME2... > JOINED\n" "Joins several parallel Gerris simulation files\n" "\n" " -k --keep keep MPI boundaries\n" " -v --verbose display statistics and other info\n" " -h --help display this help and exit\n" "\n" "Reports bugs to %s\n", FTT_MAINTAINER); return 0; /* success */ break; case '?': /* wrong options */ fprintf (stderr, "Try `gfsjoin --help' for more information.\n"); return 1; /* failure */ } } #ifndef HAVE_MPI fprintf (stderr, "gfsjoin: only works for MPI version of Gerris\n" "Try `gfsjoin --help' for more information.\n"); return 1; /* failure */ #endif if (optind >= argc) { /* missing NAME */ fprintf (stderr, "gfsjoin: missing NAME\n" "Try `gfsjoin --help' for more information.\n"); return 1; /* failure */ } GfsSimulation ** sim = g_malloc (sizeof (GfsSimulation *)*(argc - optind)); for (c = optind; c < argc; c++) { FILE * fptr = fopen (argv[c], "r"); if (fptr == NULL) { fprintf (stderr, "gfsjoin: cannot open file `%s'\n", argv[c]); return 1; /* failure */ } GtsFile * fp = gts_file_new (fptr); if (!(sim[c - optind] = gfs_simulation_read (fp))) { fprintf (stderr, "gfsjoin: file `%s' is not a valid simulation file\n" "%s:%d:%d: %s\n", argv[c], argv[c], fp->line, fp->pos, fp->error); return 1; } if (verbose) fprintf (stderr, "%s: %d box(es), %d cells\n", argv[c], gts_container_size (GTS_CONTAINER (sim[c - optind])), gfs_domain_size (GFS_DOMAIN (sim[c - optind]), FTT_TRAVERSE_LEAFS, -1)); } /* Add all boxes to first simulation */ for (c = 1; c < argc - optind; c++) gts_container_foreach (GTS_CONTAINER (sim[c]), (GtsFunc) add_box, sim[0]); if (!keep) { /* Create array for fast linking of ids to GfsBox pointers */ GPtrArray * ids = g_ptr_array_new (); gts_container_foreach (GTS_CONTAINER (sim[0]), (GtsFunc) add_id, ids); /* Convert GfsBoundaryMpi into graph edges */ gts_container_foreach (GTS_CONTAINER (sim[0]), (GtsFunc) convert_boundary_mpi_into_edges, ids); g_ptr_array_free (ids, TRUE); } gfs_simulation_write (sim[0], -1, stdout); return 0; } gerris-snapshot-131206/tools/gfs2oogl.c0000644000175100017510000010473512250371172014723 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include "config.h" #ifdef HAVE_GETOPT_H # include #endif /* HAVE_GETOPT_H */ #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #include "init.h" #include "simulation.h" #include "graphic.h" #include "solid.h" #include "adaptive.h" #define DEBUG 0 static void merged_draw (GSList * merged, FILE * fp) { if (merged->next != NULL) { GSList * i = merged; while (i) { FttCell * cell = i->data; FttCellNeighbors n; FttCellFace f; f.cell = cell; ftt_cell_neighbors (cell, &n); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) if (!n.c[f.d] || !g_slist_find (merged, n.c[f.d])) ftt_face_draw (&f, fp); i = i->next; } } } static gdouble local_size_ratio (GtsSegment * s, GfsDomain * domain) { GtsPoint * p1 = GTS_POINT (s->v1); GtsPoint * p2 = GTS_POINT (s->v2); gdouble l = gts_point_distance (p1, p2); FttVector p; FttCell * cell; gdouble size = G_MAXDOUBLE; p.x = p1->x; p.y = p1->y; p.z = p1->z; cell = gfs_domain_locate (domain, p, -1, NULL); if (cell) size = ftt_cell_size (cell); p.x = p2->x; p.y = p2->y; p.z = p2->z; cell = gfs_domain_locate (domain, p, -1, NULL); if (cell) { gdouble s = ftt_cell_size (cell); if (size == G_MAXDOUBLE || s > size) size = s; } return size/l; } static gboolean stop (gdouble cost, guint nedge) { if (cost >= 1. || nedge > 50000) return TRUE; return FALSE; } static void draw_vector (FttCell * cell, gpointer * data) { gdouble * scale = data[0]; GfsVariable ** u = data[1]; FILE * fp = stdout; FttVector pos, f; gfs_cell_cm (cell, &pos); f.x = GFS_VALUE (cell, u[0])*(*scale); f.y = GFS_VALUE (cell, u[1])*(*scale); #if FTT_2D f.z = 0.; #else f.z = GFS_VALUE (cell, u[2])*(*scale); #endif fprintf (fp, "VECT 1 3 0 3 0 %g %g %g %g %g %g %g %g %g\n", pos.x + f.x - (f.x - f.y/2.)/5., pos.y + f.y - (f.x/2. + f.y)/5., pos.z + f.z, pos.x + f.x, pos.y + f.y, pos.z + f.z, pos.x + f.x - (f.x + f.y/2.)/5., pos.y + f.y + (f.x/2. - f.y)/5., pos.z + f.z); fprintf (fp, "VECT 1 2 0 2 0 %g %g %g %g %g %g\n", pos.x, pos.y, pos.z, pos.x + f.x, pos.y + f.y, pos.z + f.z); } static void compute_mixed_vorticity (FttCell * cell, gpointer * data) { GfsVariable * v = data[0]; GfsVariable * u = data[1]; FttVector g; g_assert (((cell)->flags & GFS_FLAG_DIRICHLET) != 0); gfs_cell_dirichlet_gradient (cell, u->i, -1, GFS_STATE (cell)->solid->fv, &g); if (u->component == FTT_X) GFS_VALUE (cell, v) -= g.y; else GFS_VALUE (cell, v) += g.x; } static void output_mixed_vorticity (FttCell * cell, GfsVariable * v) { gdouble size = ftt_cell_size (cell); GfsSolidVector * s = GFS_STATE (cell)->solid; printf ("%g %g %g %g\n", s->ca.x, s->ca.y, s->ca.z, GFS_VALUE (cell, v)/size); } static void output_mixed_pressure (FttCell * cell, GfsVariable * p) { GfsSolidVector * s = GFS_STATE (cell)->solid; printf ("%g %g %g %g\n", s->ca.x, s->ca.y, s->ca.z, gfs_dimensional_value (p, gfs_interpolate (cell, s->ca, p))); } static void output_mixed_variable (FttCell * cell, GfsVariable * v) { GfsSolidVector * s = GFS_STATE (cell)->solid; printf ("%g %g %g %g\n", s->ca.x, s->ca.y, s->ca.z, gfs_dimensional_value (v, GFS_VALUE (cell, v))); } /* SVertex: Header */ typedef struct _SVertex SVertex; struct _SVertex { /*< private >*/ GtsVertex parent; /*< public >*/ gdouble s; }; #define S_VERTEX(obj) GTS_OBJECT_CAST (obj,\ SVertex,\ s_vertex_class ()) #define IS_S_VERTEX(obj) (gts_object_is_from_class (obj,\ s_vertex_class ())) /* SVertex: Object */ static GtsVertexClass * s_vertex_class (void) { static GtsVertexClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo s_vertex_info = { "SVertex", sizeof (SVertex), sizeof (GtsVertexClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_vertex_class ()), &s_vertex_info); } return klass; } typedef struct { GSList *** p; guint nx, ny; gdouble h; FttVector min, max; } ClosestGrid; static ClosestGrid * closest_box_grid_new (FttVector min, FttVector max, gdouble h) { ClosestGrid * g = g_malloc (sizeof (ClosestGrid)); guint i; g->max = max; g->min = min; g->nx = (g->max.x - g->min.x)/h + 3; g->h = h; g->ny = (g->max.y - g->min.y)/h + 3; g->min.x -= h; g->min.y -= h; g->max.x = g->min.x + g->nx*g->h; g->max.y = g->min.y + g->ny*g->h; g->p = g_malloc (g->nx*sizeof (GSList **)); for (i = 0; i < g->nx; i++) g->p[i] = g_malloc0 (g->ny*sizeof (GSList *)); return g; } static void min_max_extent (FttCell * cell, ClosestGrid * g) { FttVector pos; ftt_cell_pos (cell, &pos); if (pos.x > g->max.x) g->max.x = pos.x; if (pos.y > g->max.y) g->max.y = pos.y; if (pos.x < g->min.x) g->min.x = pos.x; if (pos.y < g->min.y) g->min.y = pos.y; } static ClosestGrid * closest_grid_new (GfsDomain * domain, gdouble h) { ClosestGrid * g = g_malloc (sizeof (ClosestGrid)); guint i; g->max.x = - G_MAXDOUBLE; g->max.y = - G_MAXDOUBLE; g->max.z = - G_MAXDOUBLE; g->min.x = G_MAXDOUBLE; g->min.y = G_MAXDOUBLE; g->min.z = G_MAXDOUBLE; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) min_max_extent, g); g->nx = (g->max.x - g->min.x)/h + 3; g->h = h; g->ny = (g->max.y - g->min.y)/h + 3; g->min.x -= h; g->min.y -= h; g->max.x = g->min.x + g->nx*g->h; g->max.y = g->min.y + g->ny*g->h; g->p = g_malloc (g->nx*sizeof (GSList **)); for (i = 0; i < g->nx; i++) g->p[i] = g_malloc0 (g->ny*sizeof (GSList *)); return g; } static void closest_grid_destroy (ClosestGrid * g) { guint i, j; for (i = 0; i < g->nx; i++) { for (j = 0; j < g->ny; j++) g_slist_free (g->p[i][j]); g_free (g->p[i]); } g_free (g->p); g_free (g); } typedef enum { INSERTED, ALREADY_THERE, CLOSED, SELFCLOSED, FINISHED, OFFSIDE } InsertStatus; static gdouble point_distance2 (GtsPoint * p1, GtsPoint * p2) { return ((p1->x - p2->x)*(p1->x - p2->x) + (p1->y - p2->y)*(p1->y - p2->y)); } static InsertStatus closest_grid_is_insertable (ClosestGrid * g, GtsPoint * p, gdouble dmin, gdouble ds) { gint i = (p->x - g->min.x)/(g->max.x - g->min.x)*g->nx, i1; gint j = (p->y - g->min.y)/(g->max.y - g->min.y)*g->ny, j1; if (i < 0 || i >= g->nx || j < 0 || j >= g->ny) return OFFSIDE; for (i1 = i - 1; i1 <= i + 1; i1++) for (j1 = j - 1; j1 <= j + 1; j1++) if (i1 >= 0 && i1 < g->nx && j1 >= 0 && j1 < g->ny) { GSList * k = g->p[i1][j1]; while (k) { GtsPoint * p1 = k->data; if (IS_S_VERTEX (p) && IS_S_VERTEX (p1) && S_VERTEX (p1)->s >= 0.) { gdouble d = point_distance2 (p, p1); if (d == 0.) return ALREADY_THERE; if (S_VERTEX (p)->s - S_VERTEX (p1)->s >= 3.*ds && d < 0.9*ds*ds) return S_VERTEX (p1)->s == 0. ? CLOSED : SELFCLOSED; } else if ((!IS_S_VERTEX (p1) || S_VERTEX (p1)->s < 0.) && point_distance2 (p, p1) < dmin*dmin) return FINISHED; k = k->next; } } return INSERTED; } static InsertStatus closest_grid_add (ClosestGrid * g, GtsPoint * p, gdouble dmin, gdouble ds) { InsertStatus status; gint i = (p->x - g->min.x)/(g->max.x - g->min.x)*g->nx; gint j = (p->y - g->min.y)/(g->max.y - g->min.y)*g->ny; if ((status = closest_grid_is_insertable (g, p, dmin, ds)) != INSERTED) return status; g->p[i][j] = g_slist_prepend (g->p[i][j], p); return INSERTED; } static void closest_grid_remove (GtsPoint * p, ClosestGrid * g) { gint i = (p->x - g->min.x)/(g->max.x - g->min.x)*g->nx; gint j = (p->y - g->min.y)/(g->max.y - g->min.y)*g->ny; if (i < 0 || i >= g->nx || j < 0 || j >= g->ny) return; g->p[i][j] = g_slist_remove (g->p[i][j], p); } static InsertStatus insert (FttVector p, ClosestGrid * g, gdouble dmin, gdouble s, gdouble ds, GtsVertex ** vertex) { GtsVertex * v = gts_vertex_new (s_vertex_class (), p.x, p.y, p.z); InsertStatus status; S_VERTEX (v)->s = s; if ((status = closest_grid_add (g, GTS_POINT (v), dmin, ds)) != INSERTED) { gts_object_destroy (GTS_OBJECT (v)); *vertex = NULL; return status; } *vertex = v; return INSERTED; } static gboolean advect (GfsDomain * domain, FttCell * cell, FttVector * p, gdouble ds, gint direction) { FttComponent c; FttVector u, ph; gdouble nu = 0.; guint n = 10; gdouble h = ds/n; gboolean ad = TRUE; GfsVariable ** U = gfs_domain_velocity (domain); while (n-- > 0 && ad) { for (c = 0; c < 2/*FTT_DIMENSION*/; c++) { ((gdouble *) &u)[c] = direction*gfs_interpolate (cell, *p, U[c]); nu += ((gdouble *) &u)[c]*((gdouble *) &u)[c]; } if (nu > 0.) { nu = sqrt (nu); ph = *p; for (c = 0; c < 2/*FTT_DIMENSION*/; c++) ((gdouble *) &ph)[c] += h*((gdouble *) &u)[c]/(2.*nu); cell = gfs_domain_locate (domain, ph, -1, NULL); if (cell != NULL) { nu = 0.; for (c = 0; c < 2/*FTT_DIMENSION*/; c++) { ((gdouble *) &u)[c] = direction*gfs_interpolate (cell, ph, U[c]); nu += ((gdouble *) &u)[c]*((gdouble *) &u)[c]; } if (nu > 0.) { nu = sqrt (nu); for (c = 0; c < 2/*FTT_DIMENSION*/; c++) ((gdouble *) p)[c] += h*((gdouble *) &u)[c]/nu; } else ad = FALSE; } else ad = FALSE; } else ad = FALSE; } return ad; } static InsertStatus grow_streamline (GfsDomain * domain, ClosestGrid * grid, FttVector p, gdouble dmin, gdouble rds, gint direction, GSList ** stream) { FttCell * cell = gfs_domain_locate (domain, p, -1, NULL); GtsVertex * v, * vstart = NULL; gdouble s = 0.; InsertStatus status = cell ? INSERTED : OFFSIDE; while (status == INSERTED || status == ALREADY_THERE) { gdouble ds = rds*ftt_cell_size (cell); ds = MIN (dmin, ds); switch ((status = insert (p, grid, dmin, s, ds, &v))) { case INSERTED: *stream = g_slist_prepend (*stream, v); #if DEBUG fprintf (stderr, "%g %g\n", GTS_POINT (v)->x, GTS_POINT (v)->y); fflush (stderr); #endif if (!vstart) vstart = v; case ALREADY_THERE: if (advect (domain, cell, &p, ds, direction)) { s += ds; cell = gfs_domain_locate (domain, p, -1, NULL); if (cell == NULL) status = OFFSIDE; } else status = OFFSIDE; break; default: ; } } if (direction > 0) { if (status == CLOSED) *stream = g_slist_prepend (*stream, vstart); *stream = g_slist_reverse (*stream); } return status; } static void set_not_current (SVertex * s) { g_assert (IS_S_VERTEX (s)); s->s = -1.; } static void streamline_destroy (GSList * s, ClosestGrid * grid) { g_slist_foreach (s, (GFunc) closest_grid_remove, grid); g_slist_foreach (s, (GFunc) gts_object_destroy, NULL); g_slist_free (s); } static GSList * streamline (GfsDomain * domain, ClosestGrid * grid, FttVector p, gdouble dmin, gdouble rds, gboolean closed) { GSList * stream = NULL; InsertStatus status = grow_streamline (domain, grid, p, dmin, rds, 1, &stream); if (!closed) { if (status != CLOSED && status != SELFCLOSED) grow_streamline (domain, grid, p, dmin, rds, -1, &stream); } else { if (status != CLOSED && status != SELFCLOSED && status != OFFSIDE) { streamline_destroy (stream, grid); return NULL; } if (status == OFFSIDE) { status = grow_streamline (domain, grid, p, dmin, rds, -1, &stream); if (status != CLOSED && status != SELFCLOSED && status != OFFSIDE) { streamline_destroy (stream, grid); return NULL; } } } g_slist_foreach (stream, (GFunc) set_not_current, NULL); #if DEBUG fprintf (stderr, "\n"); fflush (stderr); #endif return stream; } static gboolean seed (GSList * i, GfsDomain * domain, ClosestGrid * grid, gdouble dsep, gdouble dmin, GList ** streams, gboolean closed) { GtsPoint * v = gts_point_new (gts_point_class (), 0., 0., 0.); FttVector p; p.z = 0.;/*-0.49;*/ while (i) { GtsPoint * p1 = i->data; i = i->next; if (i) { GtsPoint * p2 = i->data; gdouble d = sqrt (point_distance2 (p1, p2)); if (d > 1e-6) { v->x = p.x = (p1->x + p2->x)/2. - (p2->y - p1->y)*dsep/d; v->y = p.y = (p1->y + p2->y)/2. + (p2->x - p1->x)*dsep/d; if (gfs_domain_locate (domain, p, -1, NULL) && closest_grid_is_insertable (grid, v, dsep, 0.) == INSERTED) { GSList * s = streamline (domain, grid, p, dmin, 0.25, closed); if (s) { *streams = g_list_prepend (*streams, s); gts_object_destroy (GTS_OBJECT (v)); return TRUE; } } v->x = p.x = (p1->x + p2->x)/2. + (p2->y - p1->y)*dsep/d; v->y = p.y = (p1->y + p2->y)/2. - (p2->x - p1->x)*dsep/d; if (gfs_domain_locate (domain, p, -1, NULL) && closest_grid_is_insertable (grid, v, dsep, 0.) == INSERTED) { GSList * s = streamline (domain, grid, p, dmin, 0.25, closed); if (s) { *streams = g_list_prepend (*streams, s); gts_object_destroy (GTS_OBJECT (v)); return TRUE; } } } i = i->next; } } gts_object_destroy (GTS_OBJECT (v)); return FALSE; } static void cell_center (FttCell * cell, gpointer * data) { FttVector * p = data[0], pos; if (p->x == G_MAXDOUBLE) { GfsDomain * domain = data[1]; ClosestGrid * grid = data[2]; GtsPoint * v; ftt_cell_pos (cell, &pos); pos.z = 0.; v = gts_point_new (gts_point_class (), pos.x, pos.y, pos.z); if (gfs_domain_locate (domain, pos, -1, NULL) && closest_grid_is_insertable (grid, v, 0., 0.) == INSERTED) *p = pos; gts_object_destroy (GTS_OBJECT (v)); } } static GList * even_streamlines (GfsDomain * domain, ClosestGrid * grid, gdouble dsep, gdouble dmin, gboolean closed) { GList * streams = NULL, * current; FttVector p = {G_MAXDOUBLE, G_MAXDOUBLE, G_MAXDOUBLE}; gboolean finished = FALSE; gpointer data[3]; data[0] = &p; data[1] = domain; data[2] = grid; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) cell_center, data); current = streams = g_list_prepend (streams, streamline (domain, grid, p, dmin, 0.25, closed)); do { if (!seed (current->data, domain, grid, dsep, dmin, &streams, closed)) { if (current == streams) finished = TRUE; else current = current->prev; } } while (!finished); return streams; } static gdouble curve_cost (GtsPoint * p1, GtsPoint * p2, GtsPoint * p3) { GtsVector v1, v2, a; v1[0] = p2->x - p1->x; v1[1] = p2->y - p1->y; v1[2] = p2->z - p1->z; v2[0] = p3->x - p2->x; v2[1] = p3->y - p2->y; v2[2] = p3->z - p2->z; gts_vector_cross (a, v1, v2); return gts_vector_norm (a)/2.; } static GSList * simplify_stream (GSList * stream, gdouble maxcost) { GSList * i = stream; GSList * s = NULL; GtsPoint * p1 = NULL, * p2 = NULL; gdouble cost = 0.; while (i) { GtsPoint * p = i->data; if (p1 == NULL) { p1 = p; s = g_slist_prepend (s, p); } else if (p2 == NULL) p2 = p; else { cost += curve_cost (p1, p2, p); p1 = p2; p2 = p; if (cost > maxcost || !i->next) { s = g_slist_prepend (s, p); cost = 0.; } else GTS_OBJECT (p)->reserved = p; } i = i->next; } i = stream; while (i) { if (GTS_OBJECT (i->data)->reserved == i->data) gts_object_destroy (i->data); i = i->next; } g_slist_free (stream); return s; } static void write_stream (GSList * i, FILE * fp) { guint n = g_slist_length (i); fprintf (fp, "VECT 1 %u 0 %u 0\n", n, n); while (i) { GtsPoint * p = i->data; fprintf (fp, "%g %g 0\n", p->x, p->y); i = i->next; } } static void update_var (FttCell * cell, gpointer * data) { GfsVariable * v = data[0]; GfsFunction * f = data[1]; GFS_VALUE (cell, v) = gfs_function_value (f, cell); } static void velocity_norm (FttCell * cell, gpointer * data) { GfsVariable * v = data[0]; GfsVariable ** u = data[1]; GFS_VALUE (cell, v) = gfs_vector_norm (cell, u); } int main (int argc, char * argv[]) { int c = 0; GfsVariable * var = NULL; GtsFile * fp; GtsSurface * surface = NULL; gboolean draw_surface = FALSE; gboolean verbose = FALSE; gboolean refine = FALSE; gdouble vector = -1.; FILE * stream = NULL; gchar * streamname = NULL, * color = NULL; gboolean ribbon = FALSE, lines = FALSE, squares = FALSE; GtsBBox * box = NULL; gdouble min = 0., max = 0.; gboolean gnuplot = FALSE; gboolean merged = FALSE; gboolean reinit = FALSE; gboolean mixed = FALSE; gdouble even_stream = 0., rdmin = 0.5, maxcost = 2e-7; FttVector bmin, bmax = { -G_MAXDOUBLE, -G_MAXDOUBLE, -G_MAXDOUBLE }; gboolean closed = FALSE; gint level = -1; gdouble iso = G_MAXDOUBLE; FILE * profile = NULL; gfs_init (&argc, &argv); /* parse options using getopt */ while (c != EOF) { #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { {"iso", required_argument, NULL, 'u'}, {"level", required_argument, NULL, 'L'}, {"closed", no_argument, NULL, 'j'}, {"stream", required_argument, NULL, 'f'}, {"dmin", required_argument, NULL, 'I'}, {"maxcost", required_argument, NULL, 'O'}, {"box", required_argument, NULL, 'b'}, {"profile", required_argument, NULL, 'p'}, {"mixed", no_argument, NULL, 'o'}, {"reinit", no_argument, NULL, 'i'}, {"merged", no_argument, NULL, 'e'}, {"min", required_argument, NULL, 'm'}, {"max", required_argument, NULL, 'M'}, {"squares", no_argument, NULL, 'S'}, {"gnuplot", no_argument, NULL, 'g'}, {"sx", required_argument, NULL, 'x'}, {"sy", required_argument, NULL, 'y'}, {"sz", required_argument, NULL, 'z'}, {"color", required_argument, NULL, 'c'}, {"streamlines", required_argument, NULL, 'l'}, {"cylinder", required_argument, NULL, 'C'}, {"ribbon", required_argument, NULL, 'R'}, {"refine", no_argument, NULL, 'r'}, {"surface", required_argument, NULL, 's'}, {"vector", required_argument, NULL, 'V'}, {"help", no_argument, NULL, 'h'}, {"verbose", no_argument, NULL, 'v'}, { NULL } }; int option_index = 0; switch ((c = getopt_long (argc, argv, "hvs:rV:C:R:c:x:y:z:Sm:M:eiop:f:I:O:b:jl:L:u:g", long_options, &option_index))) { #else /* not HAVE_GETOPT_LONG */ switch ((c = getopt (argc, argv, "hvs:rV:C:R:c:x:y:z:Sm:M:geiop:f:I:O:b:jl:L:u:g"))) { #endif /* not HAVE_GETOPT_LONG */ case 'u': /* isosurface */ iso = atof (optarg); break; case 'L': /* level */ level = atoi (optarg); break; case 'j': /* closed */ closed = TRUE; rdmin = 0.9; break; case 'b': { /* box */ gchar * s = strtok (optarg, ","); guint i = 0; while (i < 3 && s != NULL) { (&bmin.x)[i++] = atof (s); s = strtok (NULL, ","); } if (i != 3) { fprintf (stderr, "gfs2oogl: expecting a number for option `--box'\n"); fprintf (stderr, "Try `gfs2oogl --help' for more information.\n"); return 1; } i = 0; while (i < 3 && s != NULL) { (&bmax.x)[i++] = atof (s); s = strtok (NULL, ","); } if (i != 3) { fprintf (stderr, "gfs2oogl: expecting a number for option `--box'\n"); fprintf (stderr, "Try `gfs2oogl --help' for more information.\n"); return 1; } break; } case 'f': /* stream */ even_stream = atof (optarg); break; case 'I': /* dmin */ rdmin = atof (optarg); break; case 'O': /* maxcost */ maxcost = atof (optarg); break; case 'p': /* profile */ if ((profile = fopen (optarg, "rt")) == NULL) { fprintf (stderr, "gfs2oogl: cannot open file `%s'\n" "Try `gfs2oogl --help' for more information.\n", optarg); return 1; /* failure */ } break; case 'o': /* mixed */ mixed = TRUE; break; case 'i': /* reinit */ reinit = TRUE; break; case 'e': /* merged */ merged = TRUE; break; case 'M': /* max */ max = atof (optarg); break; case 'm': /* min */ min = atof (optarg); break; case 'g': /* gnuplot */ gnuplot = TRUE; break; case 'S': /* squares */ squares = TRUE; break; case 'x': /* sx */ box = gts_bbox_new (gts_bbox_class (), NULL, atof (optarg), -G_MAXDOUBLE/2., -G_MAXDOUBLE/2., atof (optarg), G_MAXDOUBLE/2., G_MAXDOUBLE/2.); break; case 'y': /* sy */ box = gts_bbox_new (gts_bbox_class (), NULL, -G_MAXDOUBLE/2., atof (optarg), -G_MAXDOUBLE/2., G_MAXDOUBLE/2., atof (optarg), G_MAXDOUBLE/2.); break; case 'z': /* sz */ box = gts_bbox_new (gts_bbox_class (), NULL, -G_MAXDOUBLE/2., -G_MAXDOUBLE/2., atof (optarg), G_MAXDOUBLE/2., G_MAXDOUBLE/2., atof (optarg)); break; case 's': /* surface */ draw_surface = TRUE; if (strcmp (optarg, "solid")) { FILE * fp = fopen (optarg, "rt"); GtsFile * f; if (fp == NULL) { fprintf (stderr, "gfs2oogl: cannot open file `%s'\n" "Try `gfs2oogl --help' for more information.\n", optarg); return 1; /* failure */ } f = gts_file_new (fp); surface = gts_surface_new (gts_surface_class (), gts_face_class (), gts_edge_class (), gts_vertex_class ()); if (gts_surface_read (surface, f)) { fprintf (stderr, "gfs2oogl: file `%s' is not a valid GTS file\n", optarg); fprintf (stderr, "%s:%d:%d: %s\n", optarg, f->line, f->pos, f->error); return 1; /* failure */ } gts_file_destroy (f); fclose (fp); } break; case 'l': /* lines */ lines = TRUE; /* fall through */ case 'R': /* ribbon */ ribbon = TRUE; /* fall through */ case 'C': /* cylinder */ stream = fopen (optarg, "rt"); streamname = g_strdup (g_basename (optarg)); if (stream == NULL) { fprintf (stderr, "gfs2oogl: cannot open file `%s'\n" "Try `gfs2oogl --help' for more information.\n", optarg); return 1; /* failure */ } break; case 'V': /* vector */ vector = atof (optarg); break; case 'r': /* refine */ refine = TRUE; break; case 'c': /* color */ color = g_strdup (optarg); break; case 'v': /* verbose */ verbose = TRUE; break; case 'h': /* help */ fprintf (stderr, "Usage: gfs2oogl [OPTION] < GFS_FILE\n" "Converts a Gerris simulation file to other (graphical) formats.\n" "\n" " -u V --iso=V outputs a GTS file isosurface for value V\n" " the variable needs to be specified using -c\n" " -f D --stream=D draw evenly-spaced streamlines (D is the spacing)\n" " -I M --dmin=M controls length of evenly-spaced streamlines\n" " default is 0.5\n" " -O M --maxcost=M controls compression of streamlines (default is 2e-7)\n" " -b x,.. --box=x,y,.. specify bounding box for streamline calculation\n" " -j --closed outputs only closed streamlines\n" " -p F --profile=F output list of values for coordinates defined in F\n" " -o --mixed output text values in mixed cells only\n" " -L L --level=L use cells at level L only\n" " -i --reinit reinitializes refinement and solid fractions\n" " -e --merged draw boundaries of merged cells\n" " -S --squares draw (colored) squares\n" " -g --gnuplot output gnuplot data\n" " -x VAL --sx=VAL outputs a GTS surface, cross section for x = VAL\n" " of the scalar variable\n" " -y VAL --sy=VAL outputs a GTS surface, cross section for y = VAL\n" " of the scalar variable\n" " -z VAL --sz=VAL outputs a GTS surface, cross section for z = VAL\n" " of the scalar variable\n" " -s S --surface=S outputs the surface defined by file S (or the solid\n" " surface is S is equal to `solid')\n" " -V S --vector=S output an OOGL representation of the velocity vector\n" " field in the mixed cells\n" " -l F --streamlines=F draw streamlines starting from each point defined\n" " in file F\n" " -C F --cylinder=F draw stream cylinders starting from each point defined\n" " in file F\n" " -R F --ribbon=F draw stream ribbons starting from each point defined\n" " in file F\n" " -r refines the solid surface according to the local\n" " resolution\n" " -c V --color=V color surfaces, streamlines etc... according to the\n" " -m V --min=V set minimum scalar value to V\n" " -M V --max=V set maximum scalar value to V\n" " -v --verbose display statistics and other info\n" " -h --help display this help and exit\n" "\n" "Reports bugs to %s\n", FTT_MAINTAINER); return 0; /* success */ break; case '?': /* wrong options */ fprintf (stderr, "Try `gfs2oogl --help' for more information.\n"); return 1; /* failure */ } } fp = gts_file_new (stdin); while (fp->type == GTS_INT) { GfsSimulation * simulation; GfsDomain * domain; GtsRange stats; if (!(simulation = gfs_simulation_read (fp))) { fprintf (stderr, "gfs2oogl: file on standard input is not a valid simulation file\n" ":%d:%d: %s\n", fp->line, fp->pos, fp->error); return 1; } gfs_simulation_init (simulation); domain = GFS_DOMAIN (simulation); if (color) { GtsFile * fp = gts_file_new_from_string (color); GfsFunction * f = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (f, domain, fp); gfs_pending_functions_compilation (fp); if (fp->type == GTS_ERROR) { fprintf (stderr, "gfs2oogl: incorrect `color' argument\n" "%d: %s\n", fp->pos, fp->error); return 1; } gts_file_destroy (fp); g_free (color); if (!(var = gfs_function_get_variable (f))) { gpointer data[2]; data[0] = var = gfs_temporary_variable (domain); data[1] = f; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) update_var, data); } gts_object_destroy (GTS_OBJECT (f)); } if (verbose) fprintf (stderr, "gfs2oogl: processing t = %10e\n", simulation->time.t); if (reinit) { gfs_clock_start (domain->timer); gfs_simulation_refine (simulation); gfs_simulation_init (simulation); gfs_clock_stop (domain->timer); } if (var != NULL) { if (min == max) { stats = gfs_domain_stats_variable (domain, var, FTT_TRAVERSE_ALL, -1, NULL, NULL); if (verbose) fprintf (stderr, "min: %g avg: %g| %g max: %g n: %7d\n", stats.min, stats.mean, stats.stddev, stats.max, stats.n); } else { stats.min = min; stats.max = max; } } else stats.min = stats.max = 0.; if (var != NULL && gnuplot) { if (mixed) gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) output_mixed_variable, var); else { if (level < 0) gfs_write_gnuplot (domain, var, FTT_TRAVERSE_LEAFS, -1, box, stdout); else gfs_write_gnuplot (domain, var, FTT_TRAVERSE_LEVEL, level, box, stdout); } } else if (box && var != NULL) { if (squares) { if (level < 0) gfs_write_squares (domain, var, stats.min, stats.max, FTT_TRAVERSE_LEAFS, -1, box, stdout); else gfs_write_squares (domain, var, stats.min, stats.max, FTT_TRAVERSE_LEVEL, level, box, stdout); } else gfs_write_gts (domain, var, FTT_TRAVERSE_LEAFS, -1, box, stdout); } else if (stream) { FttVector p; rewind (stream); printf ("(geometry \"%s-%g\" = LIST {\n", streamname, simulation->time.t); while (fscanf (stream, "%lf %lf %lf", &p.x, &p.y, &p.z) == 3) { #if FTT_2D gfs_draw_streamline (domain, p, stdout); #else /* 3D */ if (lines) gfs_draw_streamline (domain, p, stdout); else if (ribbon) gfs_draw_stream_ribbon (domain, p, 2e-3, var, stats.min, stats.max, stdout); else gfs_draw_stream_cylinder (domain, p, 5e-4, var, stats.min, stats.max, stdout); #endif /* 3D */ } printf ("})\n"); } else if (profile) { FttVector p; if (var) while (fscanf (profile, "%lf %lf %lf", &p.x, &p.y, &p.z) == 3) { FttVector pm = p; gfs_simulation_map (simulation, &pm); FttCell * cell = gfs_domain_locate (domain, pm, -1, NULL); if (cell) printf ("%g %g %g %g\n", p.x, p.y, p.z, gfs_dimensional_value (var, gfs_interpolate (cell, pm, var))); } else { GSList * j; guint i = 4; printf ("# 1:X 2:Y 3:Z "); j = domain->variables; while (j) { GfsVariable * v = j->data; printf ("%d:%s ", i++, v->name); j = j->next; } printf ("\n"); while (fscanf (profile, "%lf %lf %lf", &p.x, &p.y, &p.z) == 3) { FttVector pm = p; gfs_simulation_map (simulation, &pm); FttCell * cell = gfs_domain_locate (domain, pm, -1, NULL); if (cell) { printf ("%g %g %g ", p.x, p.y, p.z); j = domain->variables; while (j) { GfsVariable * v = j->data; printf ("%g ", gfs_dimensional_value (v, gfs_interpolate (cell, pm, v))); j = j->next; } printf ("\n"); } } } } else if (vector > 0.) { GtsRange stats; gdouble scale = 1.; GfsVariable * norm = gfs_temporary_variable (domain); gpointer data[2]; data[0] = norm; data[1] = gfs_domain_velocity (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) velocity_norm, data); stats = gfs_domain_stats_variable (domain, norm, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); gts_object_destroy (GTS_OBJECT (norm)); if (verbose) fprintf (stderr, "min: %g avg: %g| %g max: %g n: %7d\n", stats.min, stats.mean, stats.stddev, stats.max, stats.n); if (stats.max > 0.) scale = vector*ftt_level_size (gfs_domain_depth (domain))/stats.max; printf ("(geometry \"vector-%g\" = LIST {\n", simulation->time.t); data[0] = &scale; #if FTT_2D if (box == NULL) box = gts_bbox_new (gts_bbox_class (), NULL, 0., -G_MAXDOUBLE/2., -G_MAXDOUBLE/2., 0., G_MAXDOUBLE/2., G_MAXDOUBLE/2.); #else /* 3D */ if (box == NULL) gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) draw_vector, data); else #endif /* 3D */ gfs_domain_cell_traverse_box (domain, box, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) draw_vector, data); printf ("})\n"); } else if (draw_surface) { GSList * l = gfs_simulation_get_solids (simulation), * i = l; while (i) { GtsSurface * s = GFS_IS_SURFACE (GFS_SOLID (i->data)->s) ? GFS_SURFACE (GFS_SOLID (i->data)->s)->s : NULL; if (s) { if (refine) gts_surface_refine (s, (GtsKeyFunc) local_size_ratio, domain, NULL, NULL, (GtsStopFunc) stop, NULL); gfs_draw_surface (domain, s, var, stats.min, stats.max, stdout); } i = i->next; } g_slist_free (l); } else if (merged) { gfs_set_merged (domain); puts ("LIST {\n"); gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) merged_draw, stdout); puts ("}\n"); } else if (mixed && var->name && !strcmp (var->name, "Vorticity")) { FttComponent c; GfsVariable ** u, * vort = gfs_temporary_variable (domain); gpointer data[2]; u = gfs_domain_velocity (domain); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) gfs_cell_reset, vort); data[0] = vort; for (c = 0; c < FTT_DIMENSION; c++) { gfs_domain_surface_bc (domain, u[c]); data[1] = u[c]; gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) compute_mixed_vorticity, data); } gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) output_mixed_vorticity, vort); gts_object_destroy (GTS_OBJECT (vort)); } else if (mixed && var->name && !strcmp (var->name, "P")) gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) output_mixed_pressure, var); else if (even_stream > 0.) { GList * s, * i; ClosestGrid * grid; gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); if (bmax.x == -G_MAXDOUBLE) grid = closest_grid_new (domain, even_stream); else grid = closest_box_grid_new (bmin, bmax, even_stream); i = s = even_streamlines (domain, grid, even_stream, even_stream*rdmin, closed); closest_grid_destroy (grid); printf ("LIST {\n"); while (i) { i->data = simplify_stream (i->data, maxcost); write_stream (i->data, stdout); i = i->next; } printf ("}\n"); } else if (iso < G_MAXDOUBLE && var != NULL) { GtsSurface * s = gfs_isosurface (domain, var, iso, level); gts_surface_write (s, stdout); gts_object_destroy (GTS_OBJECT (s)); } else { gfs_draw_refined_boundaries (domain, stdout); gfs_draw_solid_boundaries (domain, stdout); gfs_draw_boundary_conditions (domain, stdout); } gts_object_destroy (GTS_OBJECT (simulation)); } gts_file_destroy (fp); return 0; } gerris-snapshot-131206/tools/streamanime.c0000644000175100017510000001002612250371172015473 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include "config.h" #ifdef HAVE_GETOPT_H # include #endif /* HAVE_GETOPT_H */ #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #include "init.h" #include "simulation.h" #include "graphic.h" static void streamline_draw (GList * s, FILE * fp) { guint np = g_list_length (s); fprintf (fp, "VECT 1 %u 0 %u 0\n", np, np); while (s) { GtsPoint * p = s->data; fprintf (fp, "%g %g %g\n", p->x, p->y, p->z); s = s->next; } } int main (int argc, char * argv[]) { int c = 0; GtsFile * fp; GfsTime time; guint ns = 0; gboolean verbose = FALSE; gfs_init (&argc, &argv); /* parse options using getopt */ while (c != EOF) { #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { {"help", no_argument, NULL, 'h'}, {"verbose", no_argument, NULL, 'v'}, { NULL } }; int option_index = 0; switch ((c = getopt_long (argc, argv, "hv", long_options, &option_index))) { #else /* not HAVE_GETOPT_LONG */ switch ((c = getopt (argc, argv, "hv"))) { #endif /* not HAVE_GETOPT_LONG */ case 'v': /* verbose */ verbose = TRUE; break; case 'h': /* help */ fprintf (stderr, "Usage: streamanime [OPTION] < STREAMLINE_FILE\n" "Converts a Gerris streamline file to other (graphical) formats.\n" "\n" " -v --verbose display statistics and other info\n" " -h --help display this help and exit\n" "\n" "Reports bugs to %s\n", FTT_MAINTAINER); return 0; /* success */ break; case '?': /* wrong options */ fprintf (stderr, "Try `streamanime --help' for more information.\n"); return 1; /* failure */ } } fp = gts_file_new (stdin); gfs_time_init (&time); while (fp->type == GTS_STRING) { if (!strcmp (fp->token->str, "GfsTime")) { gts_file_next_token (fp); gfs_time_read (&time, fp); if (fp->type == GTS_ERROR) { fprintf (stderr, "streamanime: file on standard input is not a valid streamline file\n" ":%d:%d: %s\n", fp->line, fp->pos, fp->error); return 1; } if (verbose) fprintf (stderr, "\rstreamanime: processing t: %7.3f n: %5u", time.t, ns); gts_file_first_token_after (fp, '\n'); ns = 0; printf ("(redraw focus)\n(freeze focus)\n"); } else if (!strcmp (fp->token->str, "GfsStreamline")) { GList * streamline = gfs_streamline_read (fp); if (fp->type == GTS_ERROR) { fprintf (stderr, "streamanime: file on standard input is not a valid streamline file\n" ":%d:%d: %s\n", fp->line, fp->pos, fp->error); return 1; } printf ("(geometry \"stream-%u\" = {\n", ns++); streamline_draw (streamline, stdout); printf ("})\n"); gfs_streamline_destroy (streamline); } else { gts_file_error (fp, "unknown identifier `%s'", fp->token->str); fprintf (stderr, "streamanime: file on standard input is not a valid streamline file\n" ":%d:%d: %s\n", fp->line, fp->pos, fp->error); return 1; } } gts_file_destroy (fp); printf ("(redraw focus)\n"); if (verbose) fputc ('\n', stderr); return 0; } gerris-snapshot-131206/tools/gfsplot0000644000175100017510000000236012250371172014425 00000000000000#!/bin/sh awk -v header="$1" -v plottmp=`mktemp` ' BEGIN { np = 0 plot="" quote = sprintf("%c", 39) input = sprintf("%c-%c", 39, 39) print "set terminal wxt noraise" } { if ($1 == "#" && $2 == "1:x") { # Simulation plot if (plot) { # finish plot fflush(current) print plot print "! rm -f " current fflush() } else { # initial setup ns = 0 for (i = 2; i < NF; i++) { split($i,a,":") number[ns] = a[1] symbol[ns++] = a[2] } for (i in symbol) gsub ("\\(" symbol[i] "\\)", "($" number[i] ")", header); } if (header) { # new simulation plot current = plottmp np++ plot = header gsub (input, quote current quote, plot) gsub ("\\(t\\)", $(NF), plot) } } else if ($2 == "time:") { # timeseries plot print $0 >> plottmp fflush(plottmp) if (plot) { print plot fflush() } else if (header) { plot = header gsub (input, quote plottmp quote, plot) } } else if (plot) print $0 >> current; } END { if (current) { # finish simulation plot fflush (current) print plot print "! rm -f " current } print "! rm -f " plottmp }' | gnuplot gerris-snapshot-131206/tools/darcs2dist0000644000175100017510000000442212250371172015012 00000000000000#!/bin/sh # see ../src/darcsversion.sh darcsversion() { darcs changes --last=1 --xml-output | \ awk 'BEGIN{RS=" ";FS="="}{if ($1 == "date") print substr($2,4,6);}' } usage() { cat <&2 fi package=$1 repo=$2 url=$3 wrkdir=`mktemp -d /tmp/darcs2dist.XXXXXX` cd $wrkdir if darcs get $repo $package > msg 2>&1 ; then cd $package version=`darcsversion` login=`echo $url | awk 'BEGIN{FS=":"}{print $1}'` dir=`echo $url | awk 'BEGIN{FS=":"}{print $2}'` if test x$dir = x; then if test -f $login/tarballs/$package-snapshot-$version.tar.gz; then # tarball already at latest version rm -r -f $wrkdir exit 0 fi fi else cat msg rm -r -f $wrkdir exit 1 fi if ( cd $wrkdir/$package && \ version=`darcsversion` && \ login=`echo $url | awk 'BEGIN{FS=":"}{print $1}'` && \ dir=`echo $url | awk 'BEGIN{FS=":"}{print $2}'` && \ sh autogen.sh && \ make && \ make dist && \ tar xzf $package-*.tar.gz && \ cd $package-[0-9].[0-9].[0-9] && \ ./configure && make && cd .. && \ rm -r -f $package-[0-9].[0-9].[0-9] && tar xzf $package-*.tar.gz && \ mv $package-[0-9].[0-9].[0-9] $package-snapshot-$version && \ tar chof - $package-snapshot-$version | gzip --best -c > $package-snapshot-$version.tar.gz && \ transfer $package $version $login "$dir" ) > msg 2>&1; then : else cat msg rm -r -f $wrkdir exit 1 fi rm -r -f $wrkdir gerris-snapshot-131206/configure.ac0000644000175100017510000003210112250371171014145 00000000000000AC_INIT(configure.ac) AC_CONFIG_MACRO_DIR([m4]) dnl we to AC_DIVERT_PUSH/AC_DIVERT_POP these variable definitions so they dnl are available for $ac_help expansion (don't we all *love* autoconf?) #AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl # Making releases: # GFS_MICRO_VERSION += 1; # GFS_INTERFACE_AGE += 1; # GFS_BINARY_AGE += 1; # if any functions have been added, set GFS_INTERFACE_AGE to 0. # if backwards compatibility has been broken, # set GFS_BINARY_AGE and GFS_INTERFACE_AGE to 0. # # Remember to update rpm/gerris.spec when changing the version number. GFS_MAJOR_VERSION=1 GFS_MINOR_VERSION=3 GFS_MICRO_VERSION=2 GFS_INTERFACE_AGE=0 GFS_BINARY_AGE=0 GFS_VERSION=$GFS_MAJOR_VERSION.$GFS_MINOR_VERSION.$GFS_MICRO_VERSION GFS_COMPILATION_FLAGS=$CFLAGS dnl #AC_DIVERT_POP()dnl AC_SUBST(GFS_MAJOR_VERSION) AC_SUBST(GFS_MINOR_VERSION) AC_SUBST(GFS_MICRO_VERSION) AC_SUBST(GFS_VERSION) AC_SUBST(GFS_COMPILATION_FLAGS) # change this to the gerris web site root WEBROOT=/var/www/site-gerris/gerris AC_SUBST(WEBROOT) # libtool versioning LT_RELEASE=$GFS_MAJOR_VERSION.$GFS_MINOR_VERSION LT_CURRENT=`expr $GFS_MICRO_VERSION - $GFS_INTERFACE_AGE` LT_REVISION=$GFS_INTERFACE_AGE LT_AGE=`expr $GFS_BINARY_AGE - $GFS_INTERFACE_AGE` AC_SUBST(LT_RELEASE) AC_SUBST(LT_CURRENT) AC_SUBST(LT_REVISION) AC_SUBST(LT_AGE) # For automake. VERSION=$GFS_VERSION PACKAGE=gerris AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define) # Specify a configuration file AM_CONFIG_HEADER(config.h) AC_DEFINE_UNQUOTED(GFS_MAJOR_VERSION, $GFS_MAJOR_VERSION, [Major version]) AC_DEFINE_UNQUOTED(GFS_MINOR_VERSION, $GFS_MINOR_VERSION, [Minor version]) AC_DEFINE_UNQUOTED(GFS_MICRO_VERSION, $GFS_MICRO_VERSION, [Micro version]) AC_DEFINE_UNQUOTED(GFS_INTERFACE_AGE, $GFS_INTERFACE_AGE, [Interface age]) AC_DEFINE_UNQUOTED(GFS_BINARY_AGE, $GFS_BINARY_AGE, [Binary age]) AC_DEFINE_UNQUOTED(GFS_VERSION, "$GFS_VERSION", [Version]) AC_DEFINE_UNQUOTED(GFS_COMPILATION_FLAGS, "$GFS_COMPILATION_FLAGS", [Compilation flags]) dnl Initialize maintainer mode AM_MAINTAINER_MODE AC_ARG_WITH(mpicc, [ --with-mpicc=path pick a specific path to mpicc], [with_mpicc=$withval], [with_mpicc='']) AC_ARG_WITH(suffix, [ --with-suffix=.a override the glib dynamic module suffix], [with_suffix=$withval], [with_suffix=default]) if test ! "x$with_suffix" = "xdefault"; then AC_DEFINE_UNQUOTED(MODULES_SUFFIX, "$with_suffix", [Dynamic module suffix]) fi # check if MPI support is disabled AC_ARG_ENABLE(mpi, [ --disable-mpi do not compile MPI support], [ case "${enableval}" in yes) ;; *) with_mpicc=no ;; esac]) if test "x$with_mpicc" != "xno" ; then if test "x$with_mpicc" != "x" ; then if test -x "$with_mpicc" ; then use_mpicc=yes CC="$with_mpicc" fi else AC_CHECK_PROG(use_mpicc, mpicc, yes, no) if test "x$use_mpicc" = "xyes" ; then CC=mpicc fi fi if test "x$use_mpicc" = "xyes" ; then AC_DEFINE(HAVE_MPI, 1, [Define to 1 if you have MPI]) else AC_MSG_WARN([MPI not found. No MPI support will be compiled in.]) fi else use_mpicc=no fi AC_PROG_CC # -D_GNU_SOURCE is only necessary for old (< 2.10) glibc implementations of open_memstream() CFLAGS="$CFLAGS -D_XOPEN_SOURCE=700 -D_BSD_SOURCE -D_GNU_SOURCE" if test x$GCC = xyes ; then CFLAGS="$CFLAGS -Wall -Werror-implicit-function-declaration -Wmissing-prototypes -Wmissing-declarations -pipe -std=c99" fi dnl Initialize libtool AC_LIBTOOL_WIN32_DLL AM_PROG_LIBTOOL AM_PROG_CC_C_O dnl Enable verbose output from libtool (enable libtool's default) AC_ARG_ENABLE(libtool-verbose, [ --enable-libtool-verbose enable verbose libtool output (default disabled)], [with_libtool_verbose=$enableval], [with_libtool_verbose='no']) if test "$with_libtool_verbose" = 'no' then LIBTOOL="$LIBTOOL --silent" fi dnl Fix for MacOSX and cygwin libtool case "$build" in *-apple-darwin*) NO_UNDEFINED="" CFLAGS="$CFLAGS -D_DARWIN_C_SOURCE" ;; *-pc-cygwin*) NO_UNDEFINED="" ;; *) NO_UNDEFINED="-no-undefined" ;; esac AC_SUBST(NO_UNDEFINED) AC_PROG_AWK AC_ISC_POSIX AC_HEADER_STDC # check that pointers can be stored in doubles AC_MSG_CHECKING(whether pointers can be stored in doubles) AC_TRY_RUN([ main () { if (sizeof (void *) > sizeof (double)) return 1; return 0; } ], can_store_pointers=yes, can_store_pointers=no, [can_store_pointers=yes; echo $ac_n "cross compiling; assumed OK... $ac_c"]) AC_MSG_RESULT($can_store_pointers) if test x$can_store_pointers = xno ; then AC_MSG_ERROR([ *** Pointers cannot be stored in doubles on this architecture.]) fi PKG_CHECK_MODULES(GTS, [gts >= 0.7.4]) # check if we want to enable GTS casts checks AC_ARG_ENABLE(gts-check, [ --enable-gts-check enable object type cast checks in GTS], [ case "${enableval}" in *) gts_check_casts="--check" ;; esac]) if test -n "$gts_check_casts"; then GTS_CFLAGS="$GTS_CFLAGS -DGTS_CHECK_CASTS" fi AC_SUBST(GTS_CFLAGS) AC_SUBST(GTS_LIBS) # check whether GModules are supported AC_MSG_CHECKING(whether modules are supported) OLD_CFLAGS=$CFLAGS CFLAGS=$GTS_CFLAGS OLD_LIBS=$LIBS LIBS=$GTS_LIBS AC_TRY_RUN([ #include #include main () { if (!g_module_supported ()) return 1; return 0; } ], have_gmodule=yes, have_gmodule=no, [have_gmodule=yes; echo $ac_n "cross compiling; assumed OK... $ac_c"]) AC_MSG_RESULT($have_gmodule) CFLAGS=$OLD_CFLAGS LIBS=$OLD_LIBS # checking how to build modules if test "$have_gmodule" = "yes"; then # try gcc first module_flags="" if test x$GCC = xyes; then gcc_flags="-fpic -x c" for flags in \ "-shared" \ "-dynamiclib -undefined dynamic_lookup" \ "-bundle" do if test x"$module_flags" = x; then if echo "void test(){}" | $CC $flags $gcc_flags - 2> /dev/null; then module_flags="$flags" fi fi done fi if test x"$module_flags" = x; then # use libtool if not using gcc sed -e "s|PREFIX|$prefix|g" -e "s|COMPILER|$CC|g" < build_function_libtool > build_function else sed -e "s|MODULE_FLAGS|$module_flags|" -e "s|COMPILER|$CC|g" < build_function_gcc > build_function fi else # cannot use modules cat < build_function #!/bin/sh echo "functions are not supported on this system" exit 1 EOF fi # checks for pkg-config if test "$have_gmodule" = "yes"; then AC_CHECK_PROG(have_pkg_config, pkg-config, yes, no) if test "$have_pkg_config" = "no"; then AC_MSG_WARN([pkg-config is required for functions in parameter files.]) fi fi if test x"$have_pkg_config" = x"yes"; then AC_DEFINE(HAVE_PKG_CONFIG, 1, [Define to 1 if GModule are supported and if you have pkg-config.]) else AC_DEFINE(HAVE_PKG_CONFIG, 0) fi if test x"$have_pkg_config" = x""; then have_pkg_config=undefined fi # checks for m4 AC_CHECK_PROG(have_m4, m4, yes, no) options_m4="" if test "$have_m4" = "yes"; then AC_DEFINE(HAVE_M4, 1, [Define to 1 if m4 is available.]) AC_MSG_CHECKING(check whether m4 accepts the -P option) if m4 -P < /dev/null 2> /dev/null; then options_m4="-P" accepts_P="yes" else accepts_P="no" fi AC_MSG_RESULT($accepts_P) else AC_DEFINE(HAVE_M4, 0) fi AC_DEFINE_UNQUOTED(M4_OPTIONS, "$options_m4", [Options for m4]) AC_SUBST(CFLAGS) AC_SUBST(CPPFLAGS) AC_SUBST(LDFLAGS) # checks for libproj AC_CHECK_LIB(proj, pj_fwd, proj="yes", AC_MSG_WARN([libproj not found. Map module will not be available.]), [-lm]) AC_CHECK_HEADERS(proj_api.h, proj="yes", proj="no") AM_CONDITIONAL(HAS_LIBPROJ, test x$proj = xyes) # checks for GNU Scientific Library AM_PATH_GSL AM_CONDITIONAL(HAS_GSL, test x$no_gsl != xyes) # checks for netCDF AC_CHECK_LIB(netcdf, nc_open, netcdf="true", netcdf="false", [-lm]) AC_CHECK_HEADERS(netcdf.h, netcdf="true", netcdf="false") AM_CONDITIONAL(HAS_NETCDF, test x$netcdf = xtrue) # Tide module requires both netCDF and GSL if test x$netcdf = xfalse -o x$no_gsl = xyes; then AC_MSG_WARN([GSL and/or netCDF not found. Tide module will not be available.]) tide=no else tide=yes fi AM_CONDITIONAL(BUILD_TIDE, test x$netcdf = xtrue -a x$no_gsl = x) # Stokes module requires a fortran compiler AC_PROG_F77 if test x$F77 != x; then AC_F77_WRAPPERS fi AM_CONDITIONAL(BUILD_STOKES, test x$F77 != x) # Enable the AGMG module (disabled by default due to non-free license) AC_ARG_ENABLE(agmg, [ --enable-agmg enable the AGMG module (beware of non-free license)], [with_agmg=$enableval], [with_agmg="no"]) # AGMG module requires the gfortran compiler and lapack/blas if test x$with_agmg != xno; then AC_PROG_FC([gfortran f90 xlf90],90) AC_CHECK_LIB(lapack, sorg2l_, lapack="true", lapack="false", [-lblas -lm]) fi AM_CONDITIONAL(BUILD_AGMG, test x$FC = xgfortran -a x$lapack = xtrue -a x$with_agmg != xno) # Build wavewatch module if wavewatch is installed AM_CONDITIONAL(BUILD_WAVEWATCH, test -r $HOME/.wwatch3.env) if test -r $HOME/.wwatch3.env; then ww3_dir=`grep WWATCH3_DIR $HOME/.wwatch3.env | awk '{print $2}'` ww3_version=`grep "WWVER = " $ww3_dir/ftn/*.ftn | \ awk '{print substr($(NF-1),2)}' | \ sed 's/\.//'` W3INIT="w3init$ww3_version" AC_SUBST(W3INIT) AC_DEFINE_UNQUOTED(WW3_VERSION, $ww3_version, [WaveWatch III version number]) fi # Build ode module if ODE is installed AC_CHECK_PROG(ode, ode-config, yes, no) if test x$ode = xyes; then ODE_CFLAGS=`ode-config --cflags` ODE_LIBS="`ode-config --libs` -lstdc++" AC_SUBST(ODE_CFLAGS) AC_SUBST(ODE_LIBS) else AC_MSG_WARN([ODE not found. ode module will not be available.]) fi AM_CONDITIONAL(BUILD_ODE, test x$ode = xyes) # Build hypre module if HYPRE is installed hypre=no if test "x$use_mpicc" = "xyes" ; then # HYPRE needs MPI AC_CHECK_LIB(HYPRE, HYPRE_IJMatrixCreate, hypre="yes", hypre="no", [-lm]) if test x$hypre = xyes; then AC_CHECK_HEADERS(HYPRE.h, hypre="yes", hypre="no") fi if test x$hypre = xno; then AC_MSG_WARN([HYPRE not found. hypre Module won't be available.]) fi fi AM_CONDITIONAL(BUILD_HYPRE, test x$hypre = xyes) # Build lis module if lis is installed AC_CHECK_LIB(lis, lis_initialize, lis="yes", lis="no", [-lgfortran -lm]) if test x$lis = xyes; then AC_CHECK_HEADERS(lis.h, lis="yes", lis="no") fi if test x$lis = xno; then AC_MSG_WARN([lis not found. lis Module won't be available.]) fi AM_CONDITIONAL(BUILD_LIS, test x$lis = xyes) # Build fft module if fttw3 is installed PKG_CHECK_MODULES(FFTW3, [ fftw3 >= 3 ], [ fftw3="yes" ], [ fftw3="no" ]) AM_CONDITIONAL(HAS_FFTW3, test x$fftw3 = xyes) AC_SUBST(FFTW3_CFLAGS) AC_SUBST(FFTW3_LIBS) # header file checks AC_CHECK_HEADERS(fenv.h, AC_DEFINE(HAVE_FENV_H)) AC_CHECK_HEADERS(unistd.h, AC_DEFINE(HAVE_UNISTD_H)) AC_CHECK_HEADERS(getopt.h, AC_DEFINE(HAVE_GETOPT_H)) # functions checks OLD_CFLAGS=$CFLAGS CFLAGS=$GTS_CFLAGS OLD_LIBS=$LIBS LIBS=$GTS_LIBS AC_CHECK_FUNCS(getopt_long g_mkdtemp open_memstream funopen) CFLAGS=$OLD_CFLAGS LIBS=$OLD_LIBS # use alternative implementation of open_memstream() if the system # (e.g. MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8.) does not # support POSIX 2008 natively AC_CHECK_FUNC(open_memstream, have_open_memstream=yes, have_open_memstream=no) AM_CONDITIONAL(OPEN_MEMSTREAM, test x$have_open_memstream = xno) # link flags GFS2D_LIBS="\$(top_builddir)/src/libgfs2D.la $GTS_LIBS" GFS3D_LIBS="\$(top_builddir)/src/libgfs3D.la $GTS_LIBS" AC_SUBST(GFS2D_LIBS) AC_SUBST(GFS3D_LIBS) # check whether the code is under darcs AM_CONDITIONAL(DARCS_CONTROLLED, test -d _darcs) AC_CONFIG_FILES([ Makefile src/Makefile src/gerris2D.pc src/gerris3D.pc tools/Makefile modules/Makefile modules/RStarTree/Makefile modules/kdt/Makefile modules/fes2004/Makefile modules/wavewatch/Makefile modules/culvert/Makefile test/Makefile doc/Makefile doc/tutorial/Makefile doc/examples/Makefile doc/manpages/Makefile doc/examples/gfs2doc doc/examples/gfs-highlight doc/examples/crossref.sh desktop/Makefile debian/Makefile ]) AC_OUTPUT() echo echo "Configuration summary" echo echo " System = $build" echo " C Compiler = $CC" echo " C Flags = $CFLAGS" echo " MPI enabled = $use_mpicc" echo " GModule support = $have_gmodule" echo " pkg-config = $have_pkg_config" echo " m4 = $have_m4" if test x$have_m4 = xyes; then echo " m4 options = $options_m4" fi echo " open_memstream = $have_open_memstream" echo echo "Modules" echo echo " map = $proj" echo " tide = $tide" if test x$F77 != x; then echo " stokes = yes" else echo " stokes = no" fi if test -r $HOME/.wwatch3.env; then echo " wavewatch = yes" echo " wavewatch version = $ww3_version" else echo " wavewatch = no" fi echo " hypre = $hypre" echo " lis = $lis" if test x$FC = xgfortran -a x$lapack = xtrue -a x$with_agmg != xno; then echo " agmg = yes" else echo " agmg = no" fi echo " ode = $ode" if test x$no_gsl != xyes; then echo " bubbles = yes" else echo " bubbles = no" fi if test x$fftw3 != xno; then echo " fft = yes" else echo " fft = no" fi echo gerris-snapshot-131206/Makefile.am0000644000175100017510000000377312250371171013730 00000000000000## Process this file with automake to produce Makefile.in ACLOCAL_AMFLAGS = -I m4 # change this to your OSC directory OSC_DIR=$(HOME)/local/src/osc/home:popinet/$(PACKAGE)-snapshot # change this to your dput command DPUT = socksify dput # change this to your launchpad PPA # configured in ~/.dput.cf PPA = gerris-ppa # change this to the ID of the PPA GPG key KEY = 07AB22DC LOG = $(WEBROOT)/version/gerris_changes SUBDIRS = src modules tools test doc desktop debian EXTRA_DIST = ChangeLog m4 build_function_gcc build_function_libtool if DARCS_CONTROLLED DARCS_CHANGELOG = changelog else DARCS_CHANGELOG = endif pkgdata_SCRIPTS = build_function libtool ChangeLog: $(DARCS_CHANGELOG) changelog: darcs changes | grep -v Ignore-this: > ChangeLog debian-snapshot: $(DARCS_CHANGELOG) config.h src/version.h sh debian/changelog.sh dpkg-buildpackage -rfakeroot -b rm -f debian/repo/* mv -f ../*.changes ../*.deb debian/repo cd debian/repo && dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz launchpad-snapshot: $(DARCS_CHANGELOG) config.h src/version.h dist tar xzf gerris-?.?.?.tar.gz cd gerris-?.?.? && ./configure && sh debian/changelog.sh $(LOG) && chmod +x debian/rules && dpkg-buildpackage -rfakeroot -k$(KEY) -S -sa rm -f gerris-?.?.?.tar.gz rm -r -f gerris-?.?.? $(DPUT) $(PPA) gerris-snapshot_*_source.changes rm -f gerris-snapshot_* buildservice-snapshot: $(DARCS_CHANGELOG) config.h src/version.h dist tar xzf $(PACKAGE)-?.?.?.tar.gz rm -f $(PACKAGE)-?.?.?.tar.gz mv -f $(PACKAGE)-?.?.? $(PACKAGE)-snapshot cd $(PACKAGE)-snapshot && ./configure && sh debian/changelog.sh $(LOG) && chmod +x debian/rules && make distclean tar czvf $(PACKAGE)-snapshot.tar.gz $(PACKAGE)-snapshot dpkg-source -b $(PACKAGE)-snapshot rm -r -f $(PACKAGE)-snapshot cd $(OSC_DIR) && osc update && rm -f $(OSC_DIR)/* cp -f rpm/$(PACKAGE).spec $(OSC_DIR) mv -f $(PACKAGE)-snapshot.tar.gz $(PACKAGE)-snapshot_*.tar.gz $(PACKAGE)-snapshot_*.dsc $(OSC_DIR) cd $(OSC_DIR) && osc addremove && osc commit -m "snapshot release" gerris-snapshot-131206/missing0000755000175100017510000002415212250371206013264 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gerris-snapshot-131206/install-sh0000755000175100017510000003325612250371206013676 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gerris-snapshot-131206/acinclude.m40000644000175100017510000003502312250371171014056 00000000000000# Configure paths for GTS # Stéphane Popinet 2001-10-4 # adapted from # Configure paths for GLIB # Owen Taylor 97-11-3 dnl AM_PATH_GTS([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) dnl Test for GTS, and define GTS_CFLAGS and GTS_LIBS dnl AC_DEFUN([AM_PATH_GTS], [dnl dnl Get the cflags and libraries from the gts-config script dnl AC_ARG_WITH(gts-prefix,[ --with-gts-prefix=PFX Prefix where GTS is installed (optional)], gts_config_prefix="$withval", gts_config_prefix="") AC_ARG_WITH(gts-exec-prefix,[ --with-gts-exec-prefix=PFX Exec prefix where GTS is installed (optional)], gts_config_exec_prefix="$withval", gts_config_exec_prefix="") AC_ARG_ENABLE(gtstest, [ --disable-gtstest Do not try to compile and run a test GTS program], , enable_gtstest=yes) if test x$gts_config_exec_prefix != x ; then gts_config_args="$gts_config_args --exec-prefix=$gts_config_exec_prefix" if test x${GTS_CONFIG+set} != xset ; then GTS_CONFIG=$gts_config_exec_prefix/bin/gts-config fi fi if test x$gts_config_prefix != x ; then gts_config_args="$gts_config_args --prefix=$gts_config_prefix" if test x${GTS_CONFIG+set} != xset ; then GTS_CONFIG=$gts_config_prefix/bin/gts-config fi fi for module in . $4 do case "$module" in gmodule) gts_config_args="$gts_config_args gmodule" ;; gthread) gts_config_args="$gts_config_args gthread" ;; esac done AC_PATH_PROG(GTS_CONFIG, gts-config, no) min_gts_version=ifelse([$1], ,0.4.2,$1) AC_MSG_CHECKING(for GTS - version >= $min_gts_version) no_gts="" if test "$GTS_CONFIG" = "no" ; then no_gts=yes else GTS_CFLAGS=`$GTS_CONFIG $gts_config_args --cflags` GTS_LIBS=`$GTS_CONFIG $gts_config_args --libs` gts_config_major_version=`$GTS_CONFIG $gts_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` gts_config_minor_version=`$GTS_CONFIG $gts_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` gts_config_micro_version=`$GTS_CONFIG $gts_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_gtstest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTS_CFLAGS" LIBS="$GTS_LIBS $LIBS" dnl dnl Now check if the installed GTS is sufficiently new. (Also sanity dnl checks the results of gts-config to some extent dnl rm -f conf.gtstest AC_TRY_RUN([ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtstest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gts_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gts_version"); exit(1); } if ((gts_major_version != $gts_config_major_version) || (gts_minor_version != $gts_config_minor_version) || (gts_micro_version != $gts_config_micro_version)) { printf("\n*** 'gts-config --version' returned %d.%d.%d, but GTS (%d.%d.%d)\n", $gts_config_major_version, $gts_config_minor_version, $gts_config_micro_version, gts_major_version, gts_minor_version, gts_micro_version); printf ("*** was found! If gts-config was correct, then it is best\n"); printf ("*** to remove the old version of GTS. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gts-config was wrong, set the environment variable GTS_CONFIG\n"); printf("*** to point to the correct copy of gts-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } else if ((gts_major_version != GTS_MAJOR_VERSION) || (gts_minor_version != GTS_MINOR_VERSION) || (gts_micro_version != GTS_MICRO_VERSION)) { printf("*** GTS header files (version %d.%d.%d) do not match\n", GTS_MAJOR_VERSION, GTS_MINOR_VERSION, GTS_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gts_major_version, gts_minor_version, gts_micro_version); } else { if ((gts_major_version > major) || ((gts_major_version == major) && (gts_minor_version > minor)) || ((gts_major_version == major) && (gts_minor_version == minor) && (gts_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTS (%d.%d.%d) was found.\n", gts_major_version, gts_minor_version, gts_micro_version); printf("*** You need a version of GTS newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTS is always available from http://gts.sourceforge.net.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gts-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTS, but you can also set the GTS_CONFIG environment to point to the\n"); printf("*** correct copy of gts-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_gts=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gts" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$GTS_CONFIG" = "no" ; then echo "*** The gts-config script installed by GTS could not be found" echo "*** If GTS was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTS_CONFIG environment variable to the" echo "*** full path to gts-config." else if test -f conf.gtstest ; then : else echo "*** Could not run GTS test program, checking why..." CFLAGS="$CFLAGS $GTS_CFLAGS" LIBS="$LIBS $GTS_LIBS" AC_TRY_LINK([ #include #include ], [ return ((gts_major_version) || (gts_minor_version) || (gts_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTS or finding the wrong" echo "*** version of GTS. If it is not finding GTS, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***"], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTS was incorrectly installed" echo "*** or that you have moved GTS since it was installed. In the latter case, you" echo "*** may want to edit the gts-config script: $GTS_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTS_CFLAGS="" GTS_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GTS_CFLAGS) AC_SUBST(GTS_LIBS) rm -f conf.gtstest ]) dnl DX_INSTALL_PATH dnl Tries to find the location where dx is installed if it dnl can not then it defaults to /usr/local/dx dnl -------------------------------------------------------- AC_DEFUN([DX_INSTALL_PATH], [ AC_CACHE_CHECK([for dx install path], ac_cv_dx_install_path, [ AC_MSG_RESULT(locating) DX_DEFAULT_INST=/usr/local/dx AC_CHECK_PROGS( DX, dx ) DX_PATH="" if test -n "$DX" ; then AC_MSG_CHECKING([for path via "dx -whereami"]) DX_PATH=`$DX -whereami | grep "installed in" | sed -e "s/installed in //" -e "s'^\(.*\)\/$'\1'"` if test -z "$DX_PATH" ; then AC_MSG_RESULT([warning: old version of dx script in path]) elif test "x$ARCH" = "xintelnt" ; then DX_PATH=`cygpath -w -s "$DX_PATH"` fi fi if test -z "$DX_PATH" ; then AC_MSG_CHECKING([for /usr/local/bin/dx]) if test -x "/usr/local/bin/dx" ; then DX_PATH=`/usr/local/bin/dx -whereami | grep "installed in" | sed -e "s/installed in //"` fi if test -z "$DX_PATH" ; then AC_MSG_WARN([Missing dx script--please install OpenDX first.]) elif test "x$ARCH" = "xintelnt" ; then DX_PATH=`cygpath -w -s "$DX_PATH"` fi fi ac_cv_dx_install_path=$DX_PATH ]) DX_PATH=$ac_cv_dx_install_path ]) # Configure path for the GNU Scientific Library # Christopher R. Gabriel , April 2000 AC_DEFUN([AM_PATH_GSL], [ AC_ARG_WITH(gsl-prefix,[ --with-gsl-prefix=PFX Prefix where GSL is installed (optional)], gsl_prefix="$withval", gsl_prefix="") AC_ARG_WITH(gsl-exec-prefix,[ --with-gsl-exec-prefix=PFX Exec prefix where GSL is installed (optional)], gsl_exec_prefix="$withval", gsl_exec_prefix="") AC_ARG_ENABLE(gsltest, [ --disable-gsltest Do not try to compile and run a test GSL program], , enable_gsltest=yes) if test "x${GSL_CONFIG+set}" != xset ; then if test "x$gsl_prefix" != x ; then GSL_CONFIG="$gsl_prefix/bin/gsl-config" fi if test "x$gsl_exec_prefix" != x ; then GSL_CONFIG="$gsl_exec_prefix/bin/gsl-config" fi fi AC_PATH_PROG(GSL_CONFIG, gsl-config, no) min_gsl_version=ifelse([$1], ,0.2.5,$1) AC_MSG_CHECKING(for GSL - version >= $min_gsl_version) no_gsl="" if test "$GSL_CONFIG" = "no" ; then no_gsl=yes else GSL_CFLAGS=`$GSL_CONFIG --cflags` GSL_LIBS=`$GSL_CONFIG --libs` gsl_major_version=`$GSL_CONFIG --version | \ sed 's/^\([[0-9]]*\).*/\1/'` if test "x${gsl_major_version}" = "x" ; then gsl_major_version=0 fi gsl_minor_version=`$GSL_CONFIG --version | \ sed 's/^\([[0-9]]*\)\.\{0,1\}\([[0-9]]*\).*/\2/'` if test "x${gsl_minor_version}" = "x" ; then gsl_minor_version=0 fi gsl_micro_version=`$GSL_CONFIG --version | \ sed 's/^\([[0-9]]*\)\.\{0,1\}\([[0-9]]*\)\.\{0,1\}\([[0-9]]*\).*/\3/'` if test "x${gsl_micro_version}" = "x" ; then gsl_micro_version=0 fi if test "x$enable_gsltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GSL_CFLAGS" LIBS="$LIBS $GSL_LIBS" rm -f conf.gsltest AC_TRY_RUN([ #include #include #include char* my_strdup (const char *str); char* my_strdup (const char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (void) { int major = 0, minor = 0, micro = 0; int n; char *tmp_version; system ("touch conf.gsltest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_gsl_version"); n = sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) ; if (n != 2 && n != 3) { printf("%s, bad version string\n", "$min_gsl_version"); exit(1); } if (($gsl_major_version > major) || (($gsl_major_version == major) && ($gsl_minor_version > minor)) || (($gsl_major_version == major) && ($gsl_minor_version == minor) && ($gsl_micro_version >= micro))) { exit(0); } else { printf("\n*** 'gsl-config --version' returned %d.%d.%d, but the minimum version\n", $gsl_major_version, $gsl_minor_version, $gsl_micro_version); printf("*** of GSL required is %d.%d.%d. If gsl-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If gsl-config was wrong, set the environment variable GSL_CONFIG\n"); printf("*** to point to the correct copy of gsl-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); exit(1); } } ],, no_gsl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gsl" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$GSL_CONFIG" = "no" ; then echo "*** The gsl-config script installed by GSL could not be found" echo "*** If GSL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GSL_CONFIG environment variable to the" echo "*** full path to gsl-config." else if test -f conf.gsltest ; then : else echo "*** Could not run GSL test program, checking why..." CFLAGS="$CFLAGS $GSL_CFLAGS" LIBS="$LIBS $GSL_LIBS" AC_TRY_LINK([ #include ], [ return 0; ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GSL or finding the wrong" echo "*** version of GSL. If it is not finding GSL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GSL was incorrectly installed" echo "*** or that you have moved GSL since it was installed. In the latter case, you" echo "*** may want to edit the gsl-config script: $GSL_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi # GSL_CFLAGS="" # GSL_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GSL_CFLAGS) AC_SUBST(GSL_LIBS) rm -f conf.gsltest ]) gerris-snapshot-131206/src/0000755000175100017510000000000012250371671012536 500000000000000gerris-snapshot-131206/src/balance.h0000644000175100017510000000272212250371171014212 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __BALANCE_H__ #define __BALANCE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "event.h" /* GfsEventBalance: Header */ typedef struct _GfsEventBalance GfsEventBalance; struct _GfsEventBalance { GfsEvent parent; gdouble max; }; #define GFS_EVENT_BALANCE(obj) GTS_OBJECT_CAST (obj,\ GfsEventBalance,\ gfs_event_balance_class ()) #define GFS_IS_EVENT_BALANCE(obj) (gts_object_is_from_class (obj,\ gfs_event_balance_class ())) GfsEventClass * gfs_event_balance_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __BALANCE_H__ */ gerris-snapshot-131206/src/init.h0000644000175100017510000000316112250371171013566 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __INIT_H__ #define __INIT_H__ #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ GtsObjectClass ** gfs_classes (void); void gfs_init (int * argc, char *** argv); void gfs_catch_floating_point_exceptions (void); int gfs_restore_floating_point_exceptions (void); void gfs_disable_floating_point_exceptions (void); void gfs_enable_floating_point_exceptions (void); #define gfs_restore_fpe_for_function(f) \ { \ if (gfs_restore_floating_point_exceptions ()) { \ g_message ("floating-point exception in user-defined function:\n%s", \ gfs_function_description (f, FALSE)); \ exit (1); \ } \ } #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __INIT_H__ */ gerris-snapshot-131206/src/moving.c0000644000175100017510000011312112250371171014113 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2005-2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Moving solid boundaries. */ #include #include #include #include "moving.h" #include "simulation.h" #include "domain.h" #include "utils.h" #include "ftt.h" #include "refine.h" #include "adaptive.h" #include "solid.h" #include "vof.h" #include "surface.h" #include "advection.h" #include "source.h" #define OLD_SOLID(c) (*((GfsSolidVector **) &(GFS_VALUE (c, old_solid_v)))) typedef struct { GfsDomain * domain; gdouble dt; FttComponent c; GfsVariable * div; GfsVariable * v; } DivergenceData; #include "moving2.c" /* GfsNumberedVertex: Object */ static void numbered_vertex_read (GtsObject ** o, GtsFile * f) { static glong count = 0; (* GTS_OBJECT_CLASS (gfs_numbered_vertex_class ())->parent_class->read) (o, f); GfsNumberedVertex * v = GFS_NUMBERED_VERTEX (*o); v->num = count++; } static void numbered_vertex_class_init (GtsObjectClass * klass) { klass->read = numbered_vertex_read; } GtsVertexClass * gfs_numbered_vertex_class (void) { static GtsVertexClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo numbered_vertex_info = { "GfsNumberedVertex", sizeof (GfsNumberedVertex), sizeof (GtsVertexClass), (GtsObjectClassInitFunc) numbered_vertex_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_vertex_class ()), &numbered_vertex_info); } return klass; } /** * Moving solid boundaries. * \beginobject{GfsSolidMoving} */ typedef struct { GfsSimulation * sim; GfsSolidMoving * s; GfsVariable * old_solid_v, ** sold2, ** v; GArray * stmp, * sall; } SolidInfo; static double surface_value (FttCell * cell, GfsVariable * v, FttVector * ca) { gdouble val = 0.; if (!v->surface_bc) /* default surface BC for velocity is zero */ return 0.; else if (GFS_STATE (cell)->solid) { FttVector oldca; if (ca) { oldca = GFS_STATE (cell)->solid->ca; GFS_STATE (cell)->solid->ca = *ca; } (* GFS_SURFACE_GENERIC_BC_CLASS (GTS_OBJECT (v->surface_bc)->klass)->bc) (cell, v->surface_bc); if (ca) GFS_STATE (cell)->solid->ca = oldca; val = GFS_STATE (cell)->solid->fv; } else { GfsSolidVector solid; if (ca) solid.ca = *ca; else ftt_cell_pos (cell, &solid.ca); solid.cm = solid.ca; GFS_STATE (cell)->solid = &solid; (* GFS_SURFACE_GENERIC_BC_CLASS (GTS_OBJECT (v->surface_bc)->klass)->bc) (cell, v->surface_bc); GFS_STATE (cell)->solid = NULL; val = solid.fv; } if (!(cell->flags & GFS_FLAG_DIRICHLET)) g_assert_not_implemented (); return val; } static void init_new_cell_velocity_from_solid (FttCell * cell, SolidInfo * p) { FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (cell, p->v[c]) = surface_value (cell, p->v[c], NULL); } static void update_neighbors (FttCell * cell) { gint i; FttCellNeighbors neighbor; g_assert (cell); ftt_cell_neighbors (cell, &neighbor); for (i = 0; i < FTT_NEIGHBORS; i++) if (neighbor.c[i] && neighbor.c[i]->children) { ftt_cell_neighbors_not_cached (neighbor.c[i], &(neighbor.c[i]->children->neighbors));} } static gboolean refine_maxlevel (FttCell * cell, gint * maxlevel) { return (ftt_cell_level (cell) < *maxlevel); } static void moving_cell_coarse_fine (FttCell * cell, GfsVariable * v) { FttCell * parent = ftt_cell_parent (cell); GFS_VALUE (cell, v) = GFS_VALUE (parent, v); if (!GFS_CELL_IS_BOUNDARY (parent)) { FttVector p; FttComponent c; ftt_cell_relative_pos (cell, &p); for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (cell, v) += (&p.x)[c]*gfs_center_van_leer_gradient (parent, c, v->i); } } static void moving_vof_cell_coarse_fine (FttCell * cell, GfsVariable * v) { FttCell * parent = ftt_cell_parent (cell); GfsVariableTracerVOF * t = GFS_VARIABLE_TRACER_VOF (v); gdouble f = GFS_VALUE (parent, v); FttComponent c; guint i; if (GFS_IS_FULL (f)) { GFS_VALUE (cell, v) = f; for (c = 1; c < FTT_DIMENSION; c++) GFS_VALUE (cell, t->m[c]) = 0.; GFS_VALUE (cell, t->m[0]) = 1.; GFS_VALUE (cell, t->alpha) = f; } else { gdouble alpha = GFS_VALUE (parent, t->alpha); FttVector m; for (i = 0; i < FTT_DIMENSION; i++) (&m.x)[i] = GFS_VALUE (parent, t->m[i]); gdouble alpha1 = alpha; FttVector p; ftt_cell_relative_pos (cell, &p); for (c = 0; c < FTT_DIMENSION; c++) { alpha1 -= (&m.x)[c]*(0.25 + (&p.x)[c]); GFS_VALUE (cell, t->m[c]) = (&m.x)[c]; } GFS_VALUE (cell, v) = gfs_plane_volume (&m, 2.*alpha1); GFS_VALUE (cell, t->alpha) = 2.*alpha1; } } static void moving_cell_init (FttCell * cell, SolidInfo * solid_info) { GSList * i; gint k; GfsDomain * domain = GFS_DOMAIN (solid_info->sim); GfsVariable * old_solid_v = GFS_SIMULATION_MOVING (domain)->old_solid; gfs_cell_init (cell, domain); i = domain->variables; while (i) { GfsVariable * v = i->data; if (v->coarse_fine == (GfsVariableFineCoarseFunc) gfs_cell_coarse_fine) moving_cell_coarse_fine (cell, v); if (GFS_IS_VARIABLE_TRACER_VOF (v)) moving_vof_cell_coarse_fine (cell, v); i = i->next; } g_assert (OLD_SOLID (cell) == NULL); OLD_SOLID (cell) = g_malloc0 (sizeof (GfsSolidVector)); OLD_SOLID (cell)->a = 0.; GfsVariable ** sold2 = solid_info->sold2; if (sold2) for (k = 0; k < FTT_NEIGHBORS; k++) SOLD2 (cell, k) = OLD_SOLID (cell)->s[k] = 0.; init_new_cell_velocity_from_solid (cell, solid_info); } static void moving_cell_fine_init (FttCell * cell, SolidInfo * solid_info) { GfsDomain * domain = GFS_DOMAIN(solid_info->sim); GfsVariable * old_solid_v = GFS_SIMULATION_MOVING (domain)->old_solid; GfsVariable ** sold2 = solid_info->sold2; FttCellChildren child; guint n; gfs_cell_fine_init (cell, domain); /* need to update the neighbors of the "undestroyed" parent cell */ update_neighbors (cell); ftt_cell_children (cell, &child); for (n = 0; n < FTT_CELLS; n++) { GfsSolidVector * solid = OLD_SOLID (child.c[n]); gint k; g_assert (!solid); solid = OLD_SOLID (child.c[n]) = g_malloc0 (sizeof (GfsSolidVector)); solid->a = 0.; if (sold2) for (k = 0; k < FTT_NEIGHBORS; k++) SOLD2 (child.c[n], k) = solid->s[k] = 0.; } } static void create_new_cells (FttCell * cell, GfsSurface * s, SolidInfo * solid_info) { GfsSolidMoving * solid = solid_info->s; gint maxlevel = gfs_function_value (solid->level, cell); if (FTT_CELL_IS_DESTROYED (cell) && ftt_cell_level (cell) <= maxlevel) { cell->flags &= ~FTT_FLAG_DESTROYED; moving_cell_init (cell, solid_info); if (ftt_cell_level (cell) < maxlevel) ftt_cell_refine (cell, (FttCellRefineFunc) refine_maxlevel, &maxlevel, (FttCellInitFunc) moving_cell_fine_init, solid_info); } else if (ftt_cell_level (cell) < maxlevel) ftt_cell_refine (cell, (FttCellRefineFunc) refine_maxlevel, &maxlevel, (FttCellInitFunc) gfs_cell_fine_init, solid_info->sim); } static FttVector rpos[FTT_NEIGHBORS] = { #if FTT_2D {1.,0.,0.}, {-1.,0.,0.}, {0.,1.,0.}, {0.,-1.,0.} #else /* FTT_3D */ {1.,0.,0.}, {-1.,0.,0.}, {0.,1.,0.}, {0.,-1.,0.}, {0.,0.,1.}, {0.,0.,-1.} #endif /* FTT_3D */ }; static void match (FttCell * cell, GfsBoundary * boundary) { FttCell * neighbor = ftt_cell_neighbor (cell, boundary->d); FttCell * parent = ftt_cell_parent (cell); guint level = ftt_cell_level (cell); cell->flags |= GFS_FLAG_BOUNDARY; if (parent && GFS_CELL_IS_GRADIENT_BOUNDARY (parent)) cell->flags |= GFS_FLAG_GRADIENT_BOUNDARY; if (neighbor == NULL || ftt_cell_level (neighbor) < level) { if (FTT_CELL_IS_ROOT (cell)) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "root cell is entirely outside of the fluid domain\n" "the solid surface orientation may be incorrect"); ftt_cell_destroy (cell, (FttCellCleanupFunc) gfs_cell_cleanup, gfs_box_domain (boundary->box)); boundary->changed = TRUE; return; } if (ftt_cell_level (neighbor) == level) { GfsSolidVector * s = GFS_STATE (neighbor)->solid; if (s && s->s[FTT_OPPOSITE_DIRECTION (boundary->d)] == 0.) { if (FTT_CELL_IS_ROOT (cell)) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "root cell is entirely outside of the fluid domain\n" "the solid surface orientation may be incorrect"); ftt_cell_destroy (cell, (FttCellCleanupFunc) gfs_cell_cleanup, gfs_box_domain (boundary->box)); boundary->changed = TRUE; return; } if (s) { FttDirection d; FttComponent c; GfsSolidVector * t; if (GFS_STATE (cell)->solid == NULL) GFS_STATE (cell)->solid = g_malloc0 (sizeof (GfsSolidVector)); t = GFS_STATE (cell)->solid; t->a = s->a; for (d = 0; d < FTT_NEIGHBORS; d++) if (d/2 == boundary->d/2) t->s[d] = s->s[FTT_OPPOSITE_DIRECTION (d)]; else t->s[d] = s->s[d]; for (c = 0; c < FTT_DIMENSION; c++) if (c == boundary->d/2) { FttVector p1, p2; ftt_cell_pos (cell, &p1); ftt_cell_pos (neighbor, &p2); (&t->cm.x)[c] = (&p1.x)[c] + (&p2.x)[c] - (&s->cm.x)[c]; (&t->ca.x)[c] = (&p1.x)[c] + (&p2.x)[c] - (&s->ca.x)[c]; } else { (&t->cm.x)[c] = (&s->cm.x)[c]; (&t->ca.x)[c] = (&s->ca.x)[c]; } } else if (GFS_STATE (cell)->solid != NULL) { g_free (GFS_STATE (cell)->solid); GFS_STATE (cell)->solid = NULL; } if (FTT_CELL_IS_LEAF (cell) && !FTT_CELL_IS_LEAF (neighbor)) { GfsDomain * domain = gfs_box_domain (boundary->box); ftt_cell_refine_single (cell, domain->cell_init, domain->cell_init_data); boundary->changed = TRUE; } } else g_assert_not_reached (); if (!FTT_CELL_IS_LEAF (cell)) level++; if (level > boundary->depth) boundary->depth = level; } static void boundary_match (GfsBoundary * boundary) { guint l = ftt_cell_level (boundary->root); boundary->changed = FALSE; boundary->depth = l; while (l <= boundary->depth) { ftt_cell_traverse_boundary (boundary->root, boundary->d, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, l, (FttCellTraverseFunc) match, boundary); l++; } if (boundary->changed) ftt_cell_flatten (boundary->root, boundary->d, (FttCellCleanupFunc) gfs_cell_cleanup, gfs_box_domain (boundary->box)); } static void renew_boundary (GfsBox * box, GfsSimulation * sim) { GfsDomain * domain = GFS_DOMAIN(sim); FttDirection d; FttVector pos; gdouble size; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) { GfsBoundary * boundary = GFS_BOUNDARY (box->neighbor[d]); /* Expensive but case independent fix */ ftt_cell_destroy (boundary->root, (FttCellCleanupFunc) gfs_cell_cleanup, domain); domain = gfs_box_domain (box); boundary->root = ftt_cell_new ((FttCellInitFunc) gfs_cell_init, domain); FTT_ROOT_CELL (boundary->root)->parent = box; ftt_cell_set_level (boundary->root, ftt_cell_level (box->root)); ftt_cell_set_neighbor_match (boundary->root, box->root, boundary->d, (FttCellInitFunc) gfs_cell_init, domain); ftt_cell_pos (box->root, &pos); size = ftt_cell_size (box->root); pos.x += rpos[d].x*size; pos.y += rpos[d].y*size; pos.z += rpos[d].z*size; ftt_cell_set_pos (boundary->root, &pos); boundary_match (boundary); } } static void remesh_surface_moving (GfsSimulation * sim, GfsSolidMoving * s) { GfsDomain * domain = GFS_DOMAIN (sim); SolidInfo solid_info; solid_info.sim = sim; solid_info.s = s; solid_info.sold2 = GFS_SIMULATION_MOVING (sim)->sold2; solid_info.v = gfs_domain_velocity (domain); gfs_domain_traverse_cut (domain, GFS_SOLID (s)->s, FTT_POST_ORDER, FTT_TRAVERSE_LEAFS | FTT_TRAVERSE_DESTROYED, (FttCellTraverseCutFunc) create_new_cells, &solid_info); if (domain->pid >= 0) gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) renew_boundary, sim); } static void solid_moving_destroy (GtsObject * object) { gts_object_destroy (GTS_OBJECT (GFS_SOLID_MOVING (object)->level)); (* GTS_OBJECT_CLASS (gfs_solid_moving_class ())->parent_class->destroy) (object); } static void solid_moving_read (GtsObject ** o, GtsFile * fp) { GfsSolidMoving * solid = GFS_SOLID_MOVING (*o); GFS_SURFACE (GFS_SOLID (solid)->s)->vertex_class = gfs_numbered_vertex_class (); if (GTS_OBJECT_CLASS (gfs_solid_moving_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_solid_moving_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; solid->nvertex = gts_surface_vertex_number (GFS_SURFACE (GFS_SOLID (solid)->s)->s); if (!GFS_IS_SURFACE (GFS_SOLID (solid)->s) || !GFS_SURFACE (GFS_SOLID (solid)->s)->s) { gts_file_error (fp, "moving implicit surfaces are not implemented yet"); return; } if (!GFS_IS_SIMULATION_MOVING (gfs_object_simulation (*o))) { gts_file_error (fp, "GfsSolidMoving only makes sense with GfsSimulationMoving"); return; } if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } fp->scope_max++; gts_file_next_token (fp); while (fp->type != GTS_ERROR && fp->type != '}') { if (fp->type == '\n') { gts_file_next_token (fp); continue; } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a keyword"); return; } if (!strcmp (fp->token->str, "level")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (solid->level, gfs_object_simulation (*o), fp); } else { gts_file_error (fp, "unknown keyword `%s'", fp->token->str); return; } } if (fp->type == GTS_ERROR) return; if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); } static void solid_moving_write (GtsObject * object, FILE * fp) { GfsSolidMoving * solid = GFS_SOLID_MOVING (object); if (GTS_OBJECT_CLASS (gfs_solid_moving_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_solid_moving_class ())->parent_class->write) (object, fp); fputs (" { level =", fp); gfs_function_write (solid->level, fp); fputs (" }", fp); } static void set_old_solid (FttCell * cell, GfsVariable * old_solid_v) { g_free (OLD_SOLID (cell)); OLD_SOLID (cell) = GFS_STATE (cell)->solid; GFS_STATE (cell)->solid = NULL; cell->flags &= ~GFS_FLAG_PERMANENT; } static void check_face (FttCellFace * f, guint * nf) { GfsSolidVector * s = GFS_STATE (f->cell)->solid; if (s && !f->neighbor && s->s[f->d] > 0. && s->s[f->d] < 1.) (*nf)++; } static void check_solid_fractions (GfsBox * box, guint * nf) { FttDirection d; gfs_cell_check_solid_fractions (box->root); for (d = 0; d < FTT_NEIGHBORS; d++) ftt_face_traverse_boundary (box->root, d, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) check_face, nf); } static void is_diffusion (GfsSource * s, gboolean * diffusion) { *diffusion = (GFS_IS_SOURCE_DIFFUSION (s) != NULL); } static void set_permanent (FttCell * cell) { cell->flags |= GFS_FLAG_PERMANENT; } typedef struct { GfsDomain * domain; GfsVariable * status; GfsVariable ** v; } ReInitParams; static void redistribute_destroyed_cells_content (FttCell * cell, ReInitParams * p) { if (GFS_VALUE (cell, p->status) != 1.) return; GfsDomain * domain = p->domain; GfsVariable * old_solid_v = GFS_SIMULATION_MOVING (domain)->old_solid; GSList * i; FttCell * merged, * next; gdouble s1, s2; gint c; if (!OLD_SOLID (cell) || !(merged = OLD_SOLID (cell)->merged)) return; while (OLD_SOLID (merged) && (next = OLD_SOLID (merged)->merged)) merged = next; s1 = ftt_cell_volume (cell); s2 = ftt_cell_volume (merged); /* redistribution of the velocity */ for (c = 0; c < FTT_DIMENSION; c++) { gdouble a = OLD_SOLID (merged) ? OLD_SOLID (merged)->a : 1.; GfsVariable * var = p->v[c]; GFS_VALUE (merged, var) = (s1*OLD_SOLID (cell)->a*GFS_VALUE (cell, var) + s2*a*GFS_VALUE (merged, var)) /(s1*OLD_SOLID (cell)->a + s2*a); } /* redistribution of tracers */ i = domain->variables; while (i) { if (GFS_IS_VARIABLE_TRACER (i->data)) { gdouble a = OLD_SOLID (merged) ? OLD_SOLID (merged)->a : 1.; GfsVariableTracer * t = GFS_VARIABLE_TRACER(i->data); GfsVariable * var = t->advection.v; GFS_VALUE (merged, var) = (s1*OLD_SOLID (cell)->a*GFS_VALUE (cell, var) + s2*a*GFS_VALUE (merged, var)) /(s1*OLD_SOLID (cell)->a + s2*a); } i = i->next; } if (!OLD_SOLID (merged)) { OLD_SOLID (merged) = g_malloc0 (sizeof (GfsSolidVector)); OLD_SOLID (merged)->a = 1.; } OLD_SOLID (merged)->a += s1/s2*OLD_SOLID (cell)->a; if (GFS_SIMULATION (domain)->advection_params.moving_order == 2) redistribute_old_face (cell, merged, GFS_SIMULATION_MOVING (domain)->old_solid); } /** * gfs_domain_reinit_solid_fractions: * @domain: a #GfsDomain. * @i: a list of #GfsSolids. * * Reinitializes the solid fractions of all the cells of @domain. * * If @destroy_solid is set to %TRUE, the cells entirely contained in * the solid are destroyed using @cleanup as cleanup function. * * Destroy the cells that are not fluid cells anymore when the solid * have moved. * * The fluid fractions of the destroyed is redistributed. * * Returns: the number of thin cells. */ static guint domain_reinit_solid_fractions (GfsSimulation * sim, GSList * i) { GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * status; g_return_val_if_fail (sim != NULL, 0); status = gfs_temporary_variable (domain); guint thin = gfs_init_solid_fractions_leaves (domain, i, status); if (sim->time.t != 0.) { ReInitParams rp; rp.domain = domain; rp.status = status; rp.v = gfs_domain_velocity (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) redistribute_destroyed_cells_content, &rp); } gfs_init_solid_fractions_from_children (domain, TRUE, (FttCellCleanupFunc) gfs_cell_cleanup, domain, status); gts_object_destroy (GTS_OBJECT (status)); return thin; } /** * reinit_solid_fractions: * @sim: a #GfsSimulation. * * Calls the domain_reinit_solid_fractions(). Matches the * boundaries by calling gfs_domain_match(). */ static void reinit_solid_fractions (GfsSimulation * sim) { guint nf = 0; GfsDomain * domain = GFS_DOMAIN (sim);; GSList * solids = gfs_simulation_get_solids (sim); if (solids) { sim->thin = domain_reinit_solid_fractions (sim, solids); g_slist_free (solids); gfs_domain_match (domain); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) set_permanent, NULL); } gts_container_foreach (GTS_CONTAINER (sim), (GtsFunc) check_solid_fractions, &nf); if (nf > 0) { GSList * i = domain->variables; gboolean diffusion = FALSE; while (i && !diffusion) { GfsVariable * v = i->data; if (v->sources) gts_container_foreach (v->sources, (GtsFunc) is_diffusion, &diffusion); i = i->next; } if (diffusion) g_warning ("the solid surface cuts %d boundary cells,\n" "this may cause errors for diffusion terms\n", nf); } } /* see gfs_advection_update() for a description of what this function does */ static void moving_advection_update (GSList * merged, const GfsAdvectionParams * par) { GfsVariable * old_solid_v = GFS_SIMULATION_MOVING (par->v->domain)->old_solid; if (merged->next == NULL) { /* cell is not merged */ FttCell * cell = merged->data; gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.; gdouble olda = OLD_SOLID (cell) ? OLD_SOLID (cell)->a : 1.; if (GFS_IS_MIXED (cell)) g_assert (!gfs_cell_is_small (cell)); GFS_VALUE (cell, par->v) = (olda*GFS_VALUE (cell, par->v) + GFS_VALUE (cell, par->fv))/a; } else if (1 /* par->average */) { /* average value */ GSList * i = merged; gdouble w = 0., total_vol = 0.; while (i) { FttCell * cell = i->data; gdouble vol = ftt_cell_volume (cell); gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.; gdouble olda = OLD_SOLID (cell) ? OLD_SOLID (cell)->a : 1.; total_vol += vol*a; w += vol*(olda*GFS_VALUE (cell, par->v) + GFS_VALUE (cell, par->fv)); i = i->next; } w /= total_vol; i = merged; while (i) { FttCell * cell = i->data; GFS_VALUE (cell, par->v) = w; i = i->next; } } else { GSList * i = merged; gdouble w = 0., total_vol = 0.; while (i) { FttCell * cell = i->data; gdouble vol = ftt_cell_volume (cell); gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.; gdouble olda = OLD_SOLID (cell) ? OLD_SOLID (cell)->a : 1.; total_vol += vol*a; if (a < GFS_SMALL) { GFS_VALUE (cell, par->v) = olda*GFS_VALUE (cell, par->v)/a + GFS_VALUE (cell, par->fv)/GFS_SMALL; w += vol*GFS_VALUE (cell, par->fv)*(1. - a/GFS_SMALL); } else GFS_VALUE (cell, par->v) = (olda*GFS_VALUE (cell, par->v) + GFS_VALUE (cell, par->fv))/a; i = i->next; } w /= total_vol; i = merged; while (i) { FttCell * cell = i->data; /* fixme: small cells should be excluded here?? (with corresponding modification in total_vol) */ GFS_VALUE (cell, par->v) += w; i = i->next; } } } static void moving_init (GfsSimulation * sim) { GfsDomain * domain = GFS_DOMAIN(sim); GSList * i = domain->variables; if (sim->advection_params.moving_order == 2) sim->advection_params.flux = moving_face_velocity_advection_flux; else sim->advection_params.flux = gfs_face_velocity_advection_flux; sim->advection_params.update = (GfsMergedTraverseFunc) moving_advection_update; while (i) { if (GFS_IS_VARIABLE_TRACER (i->data)) { GfsAdvectionParams * par = &GFS_VARIABLE_TRACER (i->data)->advection; if (sim->advection_params.moving_order == 2) par->flux = moving_face_advection_flux; else par->flux = gfs_face_advection_flux; par->update = sim->advection_params.update; par->moving_order = sim->advection_params.moving_order; } i = i->next; } } static gboolean solid_moving_event (GfsEvent * event, GfsSimulation * sim) { return (GFS_SOLID_MOVING (event)->active = (* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_solid_moving_class ())->parent_class)->event) (event, sim)); } static void solid_moving_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = solid_moving_destroy; GTS_OBJECT_CLASS (klass)->read = solid_moving_read; GTS_OBJECT_CLASS (klass)->write = solid_moving_write; klass->event = solid_moving_event; } static void solid_moving_init (GfsSolidMoving * solid) { gfs_event_set (GFS_EVENT (solid), 0., G_MAXDOUBLE/2., -1., 0, G_MAXINT/2, 1); solid->level = gfs_function_new (gfs_function_class (), 0.); } GfsEventClass * gfs_solid_moving_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo solid_moving_info = { "GfsSolidMoving", sizeof (GfsSolidMoving), sizeof (GfsEventClass), (GtsObjectClassInitFunc) solid_moving_class_init, (GtsObjectInitFunc) solid_moving_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_solid_class ()), &solid_moving_info); } return klass; } /** \endobject{GfsSolidMoving} */ #define MOVING_CFL 0.45 /** * Euler solver with moving solid boundaries. * \beginobject{GfsSimulationMoving} */ static void set_dtmax (FttCell * cell, SolidInfo * p) { gdouble size = ftt_cell_size (cell); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) { gdouble v = fabs (surface_value (cell, p->v[c], NULL)); if (v != 0.) { gdouble dt = size*MOVING_CFL/v; if (dt < p->sim->time.dtmax) p->sim->time.dtmax = dt; } } } static void simulation_moving_set_timestep (GfsSimulation * sim) { gdouble dtmax = sim->time.dtmax; SolidInfo p; p.sim = sim; p.v = gfs_domain_velocity (GFS_DOMAIN (sim)); gfs_domain_traverse_mixed (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) set_dtmax, &p); gfs_simulation_set_timestep (sim); sim->time.dtmax = dtmax; } static void move_vertex (GfsNumberedVertex * v, SolidInfo * par) { GtsPoint * p = >S_VERTEX(v)->p; FttVector pos = *((FttVector *) &p->x); FttCell * cell = gfs_domain_locate (GFS_DOMAIN (par->sim), pos, -2, NULL); FttComponent c; if (cell) { gdouble dt = par->sim->advection_params.dt; for (c = 0; c < FTT_DIMENSION; c++) (&p->x)[c] += surface_value (cell, par->v[c], &pos)*dt; } } #ifdef HAVE_MPI static void move_vertex_mpi (GfsNumberedVertex * v, SolidInfo * par) { GtsPoint * p = >S_VERTEX(v)->p; FttVector pos = *((FttVector *) &p->x); FttCell * cell = gfs_domain_locate (GFS_DOMAIN (par->sim), pos, -2, NULL); FttComponent c; if (cell) { gdouble dt = par->sim->advection_params.dt; for (c = 0; c < FTT_DIMENSION; c++) { (&p->x)[c] += surface_value (cell, par->v[c], &pos)*dt; g_array_index(par->stmp, double, FTT_DIMENSION*v->num+c) = (&p->x)[c]; } } else { for (c = 0; c < FTT_DIMENSION; c++) g_array_index(par->stmp,double,FTT_DIMENSION*v->num+c) = -G_MAXDOUBLE; } } static void synchronize_vertex (GfsNumberedVertex * v, SolidInfo * par) { GtsPoint * p = >S_VERTEX(v)->p; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&p->x)[c] = g_array_index(par->sall,double,FTT_DIMENSION*v->num+c); } #endif /* HAVE_MPI */ static void solid_move_remesh (GfsSolidMoving * solid, GfsSimulation * sim) { GfsSurface * surface = GFS_SURFACE (GFS_SOLID (solid)->s); if (surface->s) { SolidInfo p; p.sim = sim; p.s = solid; p.v = gfs_domain_velocity (GFS_DOMAIN (sim)); #ifdef HAVE_MPI if (GFS_DOMAIN (sim)->pid >= 0) { /* Parallel simulation */ p.stmp = g_array_set_size ( g_array_new (FALSE, FALSE, sizeof (double)) , FTT_DIMENSION*solid->nvertex); p.sall = g_array_set_size ( g_array_new (FALSE, FALSE, sizeof (double)) , FTT_DIMENSION*solid->nvertex); gts_surface_foreach_vertex (surface->s, (GtsFunc) move_vertex_mpi, &p); MPI_Allreduce (p.stmp->data, p.sall->data, p.stmp->len, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD); gts_surface_foreach_vertex (surface->s, (GtsFunc) synchronize_vertex, &p); g_array_free (p.stmp, FALSE); g_array_free (p.sall, FALSE); } else #endif /* HAVE_MPI */ gts_surface_foreach_vertex (surface->s, (GtsFunc) move_vertex, &p); } else /* implicit surface */ g_assert_not_implemented (); remesh_surface_moving (sim, solid); } static void move_solids (GfsSimulation * sim) { GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * old_solid = GFS_SIMULATION_MOVING (sim)->old_solid; GfsVariable * sold2[FTT_NEIGHBORS]; gfs_domain_timer_start (domain, "move_solids"); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) set_old_solid, old_solid); if (sim->advection_params.moving_order == 2) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { sold2[d] = gfs_domain_add_variable (domain, NULL, NULL); sold2[d]->coarse_fine = sold2_fine_init; } GFS_SIMULATION_MOVING (sim)->sold2 = sold2; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) set_sold2, sim); } GSList * solids = gfs_simulation_get_solids (sim), * s = solids; while (s) { if (GFS_IS_SOLID_MOVING (s->data) && GFS_SOLID_MOVING (s->data)->active) solid_move_remesh (s->data, sim); s = s->next; } g_slist_free (solids); reinit_solid_fractions (sim); gfs_domain_reshape (domain, gfs_domain_depth (domain)); if (sim->advection_params.moving_order == 2) { gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) second_order_face_fractions, sim); FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) gts_object_destroy (GTS_OBJECT (sold2[d])); GFS_SIMULATION_MOVING (sim)->sold2 = NULL; } gfs_domain_timer_stop (domain, "move_solids"); } static void moving_divergence_approx (FttCell * cell, DivergenceData * p) { GFS_VALUE (cell, p->div) += GFS_STATE (cell)->solid->fv*(GFS_STATE (cell)->solid->s[2*p->c + 1] - GFS_STATE (cell)->solid->s[2*p->c])*ftt_cell_size (cell); } static void moving_divergence_distribution (GSList * merged, DivergenceData * p) { if (merged->next != NULL && merged->next->data != merged->data) { gdouble total_volume = 0., total_div = 0.; GSList * i = merged; while (i) { FttCell * cell = i->data; g_assert (FTT_CELL_IS_LEAF (cell)); gdouble a = GFS_STATE (cell)->solid ? GFS_STATE (cell)->solid->a : 1.; total_volume += a*ftt_cell_volume (cell); total_div += GFS_VALUE (cell, p->div); i = i->next; } total_div /= total_volume; i = merged; while (i) { FttCell * cell = i->data; gdouble a = GFS_STATE (cell)->solid ? GFS_STATE (cell)->solid->a : 1.; GFS_VALUE (cell, p->div) = total_div*a*ftt_cell_volume (cell); i = i->next; } } } static void divergence_approx_hook (GfsDomain * domain, gdouble dt, GfsVariable * div) { DivergenceData q; GfsVariable ** v = gfs_domain_velocity (domain); q.div = div; for (q.c = 0; q.c < FTT_DIMENSION; q.c++) { gfs_domain_surface_bc (domain, v[q.c]); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) moving_divergence_approx, &q); } gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) moving_divergence_distribution, &q); } static void moving_divergence_mac (FttCell * cell, DivergenceData * p) { GfsVariable * old_solid_v = GFS_SIMULATION_MOVING (p->domain)->old_solid; gdouble size = ftt_cell_size (cell); gdouble a = GFS_STATE (cell)->solid ? GFS_STATE (cell)->solid->a : 1.; gdouble olda = OLD_SOLID (cell) ? OLD_SOLID (cell)->a : 1.; GFS_VALUE (cell, p->div) += (olda - a)*size*size/p->dt; } static void divergence_mac_hook_order_1 (GfsDomain * domain, gdouble dt, GfsVariable * div) { DivergenceData q; q.dt = - 2.*dt; q.div = div; q.domain = domain; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) moving_divergence_mac, &q); gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) moving_divergence_distribution, &q); } static void divergence_mac_hook_order_2 (GfsDomain * domain, gdouble dt, GfsVariable * div) { DivergenceData q; q.dt = 2.*dt; q.div = div; q.domain = domain; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) moving_divergence_mac, &q); gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) moving_divergence_distribution_second_order, &q); } static void moving_mac_projection (GfsSimulation * sim, GfsMultilevelParams * par, GfsAdvectionParams * apar, GfsVariable * p, GfsFunction * alpha, GfsVariable ** g) { if (apar->moving_order == 2) swap_face_fractions (sim); gfs_mac_projection (GFS_DOMAIN (sim), par, apar->dt/2., p, alpha, g, (apar->moving_order == 2 ? divergence_mac_hook_order_2 : divergence_mac_hook_order_1)); if (apar->moving_order == 2) swap_face_fractions_back (sim); } static void simulation_moving_run (GfsSimulation * sim) { GfsVariable * p, * pmac, * res = NULL, * g[FTT_DIMENSION], * gmac[FTT_DIMENSION]; GfsVariable ** gc = sim->advection_params.gc ? g : NULL; GfsDomain * domain; GSList * i; domain = GFS_DOMAIN (sim); p = gfs_variable_from_name (domain->variables, "P"); g_assert (p); pmac = gfs_variable_from_name (domain->variables, "Pmac"); g_assert (pmac); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) { gmac[c] = gfs_temporary_variable (domain); if (sim->advection_params.gc) g[c] = gfs_temporary_variable (domain); else g[c] = gmac[c]; } gfs_variable_set_vector (gmac, FTT_DIMENSION); gfs_variable_set_vector (g, FTT_DIMENSION); gfs_simulation_refine (sim); gfs_simulation_init (sim); i = domain->variables; while (i) { if (GFS_IS_VARIABLE_RESIDUAL (i->data)) res = i->data; i = i->next; } moving_init (sim); simulation_moving_set_timestep (sim); if (sim->time.i == 0) gfs_approximate_projection (domain, &sim->approx_projection_params, sim->advection_params.dt, p, sim->physical_params.alpha, res, g, divergence_approx_hook); else if (sim->advection_params.gc) gfs_update_gradients (domain, p, sim->physical_params.alpha, g); while (sim->time.t < sim->time.end && sim->time.i < sim->time.iend) { gdouble tstart = gfs_clock_elapsed (domain->timer); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); move_solids (sim); gfs_predicted_face_velocities (domain, FTT_DIMENSION, &sim->advection_params); gfs_variables_swap (p, pmac); moving_mac_projection (sim, &sim->projection_params, &sim->advection_params, p, sim->physical_params.alpha, gmac); gfs_variables_swap (p, pmac); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_half_do, sim); gfs_centered_velocity_advection_diffusion (domain, FTT_DIMENSION, &sim->advection_params, gmac, sim->time.i > 0 || !gc ? gc : gmac, sim->physical_params.alpha); gfs_advance_tracers (sim, sim->advection_params.dt); if (gc) { gfs_source_coriolis_implicit (domain, sim->advection_params.dt); gfs_correct_centered_velocities (domain, FTT_DIMENSION, sim->time.i > 0 ? gc : gmac, -sim->advection_params.dt); } else if (gfs_has_source_coriolis (domain)) { gfs_correct_centered_velocities (domain, FTT_DIMENSION, gmac, sim->advection_params.dt); gfs_source_coriolis_implicit (domain, sim->advection_params.dt); gfs_correct_centered_velocities (domain, FTT_DIMENSION, gmac, -sim->advection_params.dt); } gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); gfs_simulation_adapt (sim); gfs_approximate_projection (domain, &sim->approx_projection_params, sim->advection_params.dt, p, sim->physical_params.alpha, res, g, divergence_approx_hook); sim->time.t = sim->tnext; sim->time.i++; simulation_moving_set_timestep (sim); gts_range_add_value (&domain->timestep, gfs_clock_elapsed (domain->timer) - tstart); gts_range_update (&domain->timestep); gts_range_add_value (&domain->size, gfs_domain_size (domain, FTT_TRAVERSE_LEAFS, -1)); gts_range_update (&domain->size); } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL); for (c = 0; c < FTT_DIMENSION; c++) { gts_object_destroy (GTS_OBJECT (gmac[c])); if (sim->advection_params.gc) gts_object_destroy (GTS_OBJECT (g[c])); } } static void simulation_moving_class_init (GfsSimulationClass * klass) { klass->run = simulation_moving_run; } static void old_solid_cleanup (FttCell * cell, GfsVariable * old_solid_v) { g_free (OLD_SOLID (cell)); OLD_SOLID (cell) = NULL; } static void none (void) {} static void simulation_moving_init (GfsDomain * domain) { gfs_domain_add_variable (domain, "div", "Divergence")->centered = TRUE; /* old_solid will hold a pointer to a GfsSolidVector */ GfsVariable * old_solid = gfs_domain_add_variable (domain, NULL, NULL); GFS_SIMULATION_MOVING (domain)->old_solid = old_solid; /* pointers need to be "interpolated" correctly (i.e. not at all) */ old_solid->coarse_fine = (GfsVariableFineCoarseFunc) none; old_solid->fine_coarse = (GfsVariableFineCoarseFunc) none; /* the memory needs to be freed when the cell is cleaned up */ old_solid->cleanup = (FttCellCleanupFunc) old_solid_cleanup; /* switch off boundary conditions */ GfsBc * bc = gfs_bc_new (gfs_bc_class (), old_solid, FALSE); bc->bc = bc->homogeneous_bc = bc->face_bc = (FttFaceTraverseFunc) none; gfs_variable_set_default_bc (old_solid, bc); } GfsSimulationClass * gfs_simulation_moving_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_simulation_moving_info = { "GfsSimulationMoving", sizeof (GfsSimulationMoving), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) simulation_moving_class_init, (GtsObjectInitFunc) simulation_moving_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), &gfs_simulation_moving_info); } return klass; } /** \endobject{GfsSimulationMoving} */ gerris-snapshot-131206/src/ftt_internal.c0000644000175100017510000000405612250371171015313 00000000000000static void traverse_face (FttCell * cell, gpointer * datum) { FttDirection * d = datum[0]; gint max_depth = *((gint *) datum[1]); FttFaceTraverseFunc func = (FttFaceTraverseFunc) datum[2]; gpointer data = datum[3]; gboolean check = *((gboolean *) datum[4]); gboolean boundary_faces = *((gboolean *) datum[5]); FttCellFace face; face.d = *d; face.cell = cell; face.neighbor = ftt_cell_neighbor (cell, face.d); if (face.neighbor) { if (!check || (face.neighbor->flags & FTT_FLAG_TRAVERSED) == 0) { if (FTT_CELL_IS_LEAF (cell) && !FTT_CELL_IS_LEAF (face.neighbor) && (max_depth < 0 || ftt_cell_level (face.neighbor) < max_depth)) { /* coarse -> fine */ FttCellChildren children; guint i, n; face.d = FTT_OPPOSITE_DIRECTION (face.d); n = ftt_cell_children_direction (face.neighbor, face.d, &children); face.neighbor = face.cell; for (i = 0; i < n; i++) if ((face.cell = children.c[i]) && (!check || (face.cell->flags & FTT_FLAG_TRAVERSED) == 0)) (* func) (&face, data); } else (* func) (&face, data); } } else if (boundary_faces) (* func) (&face, data); } static void traverse_all_faces (FttCell * cell, gpointer * datum) { FttDirection d; datum[0] = &d; for (d = 0; d < FTT_NEIGHBORS; d++) traverse_face (cell, datum); cell->flags |= FTT_FLAG_TRAVERSED; } static void traverse_all_direct_faces (FttCell * cell, gpointer * datum) { FttDirection d; datum[0] = &d; for (d = 0; d < FTT_NEIGHBORS; d += 2) traverse_face (cell, datum); cell->flags |= FTT_FLAG_TRAVERSED; } static void traverse_face_direction (FttCell * cell, gpointer * datum) { traverse_face (cell, datum); cell->flags |= FTT_FLAG_TRAVERSED; } static void traverse_face_component (FttCell * cell, gpointer * datum) { FttComponent * c = datum[0]; FttDirection d; datum[0] = &d; d = 2*(*c); traverse_face (cell, datum); d++; traverse_face (cell, datum); cell->flags |= FTT_FLAG_TRAVERSED; datum[0] = c; } static void reset_flag (FttCell * cell) { cell->flags &= ~FTT_FLAG_TRAVERSED; } gerris-snapshot-131206/src/unstructured.h0000644000175100017510000000306512250371171015375 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric * Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __UNSTRUCTURED_H__ #define __UNSTRUCTURED_H__ #include "domain.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ void gfs_domain_write_vtk (GfsDomain * domain, gint max_depth, GSList * variables, const gchar * precision, FILE * fp); void gfs_domain_write_tecplot (GfsDomain * domain, gint max_depth, GSList * variables, const gchar * precision, FILE * fp); #if !FTT_2D void gfs_domain_write_tecplot_surface (GfsDomain * domain, gint max_depth, GSList * variables, const gchar * precision, FILE * fp); #endif #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __UNSTRUCTURED_H__ */ gerris-snapshot-131206/src/wave.c0000644000175100017510000004010512250371171013557 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2008 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief GfsWave spectral wave model. */ #include #include "wave.h" #include "adaptive.h" #include "solid.h" #include "init.h" /** * Spectral wave model. * \beginobject{GfsWave} */ static double frequency (int ik) { double gamma = GFS_WAVE_GAMMA; double f0 = GFS_WAVE_F0; return f0*pow(gamma, ik); } static double theta (guint ith, guint ntheta) { return 2.*M_PI*ith/ntheta; } static void group_velocity (int ik, int ith, FttVector * u, guint ntheta, gdouble g) { double cg = g/(4.*M_PI*frequency (ik)); u->x = cg*cos (theta (ith, ntheta)); u->y = cg*sin (theta (ith, ntheta)); u->z = 0.; } static gdouble cell_E (FttCell * cell, FttCellFace * face, GfsDomain * domain) { GfsWave * wave = GFS_WAVE (domain); GfsVariable *** F = wave->F; guint ik, ith; gdouble E = 0., sigma = 2.*M_PI*GFS_WAVE_F0, sgamma = (GFS_WAVE_GAMMA - 1./GFS_WAVE_GAMMA)/2.; for (ik = 0; ik < wave->nk; ik++) { gdouble df = sigma*sgamma; gdouble dE = 0.; for (ith = 0; ith < wave->ntheta; ith++) dE += GFS_VALUE (cell, F[ik][ith]); E += dE*df; sigma *= GFS_WAVE_GAMMA; } return E*2.*M_PI/wave->ntheta; } static void set_group_velocity (const FttCellFace * face, FttVector * u) { GFS_FACE_NORMAL_VELOCITY_RIGHT (face) = GFS_FACE_NORMAL_VELOCITY_LEFT (face) = (&u->x)[face->d/2]; } typedef struct { GfsAdvectionParams * p; GfsVariable * div, * fv; } SolidFluxParams; static void solid_flux (FttCell * cell, SolidFluxParams * par) { gfs_normal_divergence (cell, par->div); if (GFS_VALUE (cell, par->div) < 0.) { gdouble h = ftt_cell_size (cell); GFS_VALUE (cell, par->fv) = GFS_VALUE (cell, par->div)*par->p->dt* GFS_VALUE (cell, par->p->v)/(h*h); } else GFS_VALUE (cell, par->fv) = 0.; } typedef struct { GfsVariable * F, * Fn, * dF; gdouble D[2][2]; } GSEData; static void compute_gradient (FttCell * cell, GSEData * p) { GFS_VALUE (cell, p->dF) = gfs_center_regular_gradient (cell, p->dF->component, p->Fn); } static void diffusion (FttCell * cell, GSEData * p) { gdouble h2 = ftt_cell_size (cell); h2 *= h2; /* off-diagonal */ FttComponent j; for (j = 0; j < 2; j++) if (j != p->dF->component) GFS_VALUE (cell, p->F) += p->D[j][p->dF->component]*gfs_center_regular_gradient (cell, j, p->dF)/h2; /* diagonal */ GFS_VALUE (cell, p->F) += p->D[p->dF->component][p->dF->component]* gfs_center_regular_2nd_derivative (cell, p->dF->component, p->Fn)/h2; } static void copy_F (FttCell * cell, GSEData * p) { GFS_VALUE (cell, p->Fn) = GFS_VALUE (cell, p->F); } static void gse_alleviation_diffusion (GfsDomain * domain, GfsVariable * F, FttVector * cg, gdouble dt) { gfs_domain_timer_start (domain, "gse_alleviation"); gdouble ncg = sqrt (cg->x*cg->x + cg->y*cg->y); gdouble dcg = (GFS_WAVE_GAMMA - 1./GFS_WAVE_GAMMA)*ncg/2.; gdouble dtheta = 2.*M_PI/GFS_WAVE (domain)->ntheta; #if 0 gdouble Ts = 4.*GFS_WAVE (domain)->alpha_s*GFS_WAVE (domain)->alpha_s*dt; gdouble dtDss = dt*dcg*dcg*Ts/12.; gdouble dtDnn = dt*(ncg*dtheta)*(ncg*dtheta)*Ts/12.; #else gdouble alpha = GFS_WAVE (domain)->alpha_s*dcg*dt; gdouble beta = GFS_WAVE (domain)->alpha_s*ncg*dtheta*dt; gdouble dtDss = alpha*alpha/3.; gdouble dtDnn = beta*beta/3.; #endif GSEData p; gdouble cost = cg->x/ncg, sint = cg->y/ncg; p.D[0][0] = dtDss*cost*cost + dtDnn*sint*sint; p.D[1][1] = dtDss*sint*sint + dtDnn*cost*cost; p.D[0][1] = p.D[1][0] = (dtDss - dtDnn)*cost*sint; p.F = F; p.Fn = gfs_temporary_variable (domain); p.dF = gfs_temporary_variable (domain); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) copy_F, &p); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) p.Fn->fine_coarse, p.Fn); for (p.dF->component = 0; p.dF->component < 2; p.dF->component++) { gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) compute_gradient, &p); gfs_domain_bc (domain, FTT_TRAVERSE_ALL, -1, p.dF); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) diffusion, &p); } gts_object_destroy (GTS_OBJECT (p.Fn)); gts_object_destroy (GTS_OBJECT (p.dF)); gfs_domain_timer_stop (domain, "gse_alleviation"); } static void redo_some_events (GfsEvent * event, GfsSimulation * sim) { if (GFS_IS_ADAPT (event) || GFS_IS_INIT (event)) gfs_event_redo (event, sim); } static void wave_run (GfsSimulation * sim) { GfsDomain * domain = GFS_DOMAIN (sim); GfsWave * wave = GFS_WAVE (sim); SolidFluxParams par; par.div = gfs_variable_from_name (domain->variables, "P"); g_assert (par.div); par.p = &sim->advection_params; par.fv = gfs_temporary_variable (domain); gfs_simulation_refine (sim); gfs_simulation_init (sim); while (sim->time.t < sim->time.end && sim->time.i < sim->time.iend) { gdouble tstart = gfs_clock_elapsed (domain->timer); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); /* get global timestep */ gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL); gfs_simulation_set_timestep (sim); gdouble dt = sim->advection_params.dt; gdouble g = sim->physical_params.g/sim->physical_params.L; gdouble tnext = sim->tnext; /* spatial advection */ guint ik, ith; for (ik = 0; ik < wave->nk; ik++) { FttVector cg; group_velocity (ik, 0, &cg, wave->ntheta, g); gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) set_group_velocity, &cg); if (wave->alpha_s > 0.) { /* stability criterion for GSE diffusion */ gdouble cfl = sim->advection_params.cfl; sim->advection_params.cfl = MIN (cfl, 2./(4.*wave->alpha_s*M_PI/wave->ntheta)); /* fixme: this should be: sim->advection_params.cfl = MIN (cfl, sqrt(3.)/(wave->alpha_s*2.*M_PI/wave->ntheta)); */ gfs_simulation_set_timestep (sim); sim->advection_params.cfl = cfl; } else gfs_simulation_set_timestep (sim); /* subcycling */ guint n = rint (dt/sim->advection_params.dt); g_assert (fabs (sim->time.t + sim->advection_params.dt*n - tnext) < 1e-12); while (n--) { for (ith = 0; ith < wave->ntheta; ith++) { FttVector cg; group_velocity (ik, ith, &cg, wave->ntheta, g); gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) set_group_velocity, &cg); GfsVariable * t = GFS_WAVE (sim)->F[ik][ith]; sim->advection_params.v = t; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) solid_flux, &par); gfs_tracer_advection_diffusion (domain, &sim->advection_params, NULL); sim->advection_params.fv = par.fv; gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) gfs_advection_update, &sim->advection_params); if (wave->alpha_s > 0.) gse_alleviation_diffusion (domain, t, &cg, sim->advection_params.dt); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, t); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) t->fine_coarse, t); } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) redo_some_events, sim); gfs_simulation_adapt (sim); } } sim->advection_params.dt = dt; /* source terms */ if (wave->source) (* wave->source) (wave); sim->time.t = sim->tnext = tnext; sim->time.i++; gts_range_add_value (&domain->timestep, gfs_clock_elapsed (domain->timer) - tstart); gts_range_update (&domain->timestep); gts_range_add_value (&domain->size, gfs_domain_size (domain, FTT_TRAVERSE_LEAFS, -1)); gts_range_update (&domain->size); } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL); gts_object_destroy (GTS_OBJECT (par.fv)); } static void wave_destroy (GtsObject * object) { if (GFS_WAVE (object)->F) gfs_matrix_free (GFS_WAVE (object)->F); (* GTS_OBJECT_CLASS (gfs_wave_class ())->parent_class->destroy) (object); } static void wave_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_wave_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsWave * wave = GFS_WAVE (*o); if (fp->type == '{') { GtsFileVariable var[] = { {GTS_UINT, "nk", TRUE, &wave->nk}, {GTS_UINT, "ntheta", TRUE, &wave->ntheta}, {GTS_DOUBLE, "alpha_s", TRUE, &wave->alpha_s}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; } GfsDomain * domain = GFS_DOMAIN (wave); guint ik, ith; wave->F = gfs_matrix_new (wave->nk, wave->ntheta, sizeof (GfsVariable *)); for (ik = 0; ik < wave->nk; ik++) for (ith = 0; ith < wave->ntheta; ith++) { gchar * name = g_strdup_printf ("F%d_%d", ik, ith); gchar * description = g_strdup_printf ("Action density for f = %g Hz and theta = %g degrees", frequency (ik), theta (ith, wave->ntheta)*180./M_PI); wave->F[ik][ith] = gfs_domain_get_or_add_variable (domain, name, description); g_assert (wave->F[ik][ith]); g_free (name); g_free (description); } } static void wave_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_wave_class ())->parent_class->write) (o, fp); GfsWave * wave = GFS_WAVE (o); fprintf (fp, " {\n" " nk = %d\n" " ntheta = %d\n" " alpha_s = %g\n" "}", wave->nk, wave->ntheta, wave->alpha_s); } static void gfs_wave_class_init (GfsSimulationClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = wave_destroy; GTS_OBJECT_CLASS (klass)->read = wave_read; GTS_OBJECT_CLASS (klass)->write = wave_write; klass->run = wave_run; } static gdouble cell_hs (FttCell * cell, FttCellFace * face, GfsDomain * domain) { gdouble E = cell_E (cell, face, domain); return E > 0. ? 4.*sqrt (E) : 0.; } static gdouble cell_frequency (FttCell * cell, FttCellFace * face, GfsDomain * domain) { return frequency (GFS_WAVE (domain)->ik); } static gdouble cell_direction (FttCell * cell, FttCellFace * face, GfsDomain * domain) { return theta (GFS_WAVE (domain)->ith, GFS_WAVE (domain)->ntheta); } static void wave_init (GfsWave * wave) { wave->nk = 25; wave->ntheta = 24; wave->alpha_s = 0.; /* default for g is acceleration of gravity on Earth with kilometres as spatial units, hours as time units and Hz as frequency units */ GFS_SIMULATION (wave)->physical_params.g = 9.81/1000.*3600.; GfsAdvectionParams * par = &GFS_SIMULATION (wave)->advection_params; par->gradient = gfs_center_van_leer_gradient; par->flux = gfs_face_advection_flux; par->use_centered_velocity = FALSE; static GfsDerivedVariableInfo derived_variable[] = { { "Hs", "Significant wave height", cell_hs }, { "Energy", "Wave energy", cell_E }, { "Frequency", "Wave frequency", cell_frequency }, { "Direction", "Wave direction (angle)", cell_direction }, { NULL, NULL, NULL} }; GfsDerivedVariableInfo * v = derived_variable; while (v->name) { g_assert (gfs_domain_add_derived_variable (GFS_DOMAIN (wave), *v)); v++; } } GfsSimulationClass * gfs_wave_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_wave_info = { "GfsWave", sizeof (GfsWave), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) gfs_wave_class_init, (GtsObjectInitFunc) wave_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), &gfs_wave_info); } return klass; } /** \endobject{GfsWave} */ /** * Initial wave spectrum for wave model. * \beginobject{GfsInitWave} */ static void gfs_init_wave_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_init_wave_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (!GFS_IS_WAVE (domain)) { gts_file_error (fp, "GfsInitWave can only be used within a GfsWave simulation"); return; } gfs_function_read (GFS_INIT_WAVE (*o)->d, domain, fp); if (fp->type == GTS_ERROR) return; gfs_function_read (GFS_INIT_WAVE (*o)->hs, domain, fp); } static void gfs_init_wave_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_init_wave_class ())->parent_class->write) (o, fp); gfs_function_write (GFS_INIT_WAVE (o)->d, fp); gfs_function_write (GFS_INIT_WAVE (o)->hs, fp); } static void gfs_init_wave_destroy (GtsObject * object) { gts_object_destroy (GTS_OBJECT (GFS_INIT_WAVE (object)->d)); gts_object_destroy (GTS_OBJECT (GFS_INIT_WAVE (object)->hs)); (* GTS_OBJECT_CLASS (gfs_init_wave_class ())->parent_class->destroy) (object); } static void init_energy (FttCell * cell, GfsInitWave * event) { GfsWave * wave = GFS_WAVE (gfs_object_simulation (event)); for (wave->ik = 0; wave->ik < wave->nk; wave->ik++) for (wave->ith = 0; wave->ith < wave->ntheta; wave->ith++) GFS_VALUE (cell, wave->F[wave->ik][wave->ith]) = gfs_function_value (event->d, cell); } static void scale_energy (FttCell * cell, GfsInitWave * event) { GfsWave * wave = GFS_WAVE (gfs_object_simulation (event)); gdouble E = cell_E (cell, NULL, GFS_DOMAIN (wave)); if (E > 0.) { gdouble Hs = gfs_function_value (event->hs, cell); gdouble scaling = Hs*Hs/(16.*E); guint ik, ith; for (ik = 0; ik < wave->nk; ik++) for (ith = 0; ith < wave->ntheta; ith++) GFS_VALUE (cell, wave->F[ik][ith]) *= scaling; } } static gboolean gfs_init_wave_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_init_wave_class ())->parent_class)->event) (event, sim)) { gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) init_energy, event); gfs_restore_fpe_for_function (GFS_INIT_WAVE (event)->d); gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) scale_energy, event); gfs_restore_fpe_for_function (GFS_INIT_WAVE (event)->hs); return TRUE; } return FALSE; } static void gfs_init_wave_class_init (GfsGenericInitClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_init_wave_event; GTS_OBJECT_CLASS (klass)->read = gfs_init_wave_read; GTS_OBJECT_CLASS (klass)->write = gfs_init_wave_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_init_wave_destroy; } static void gfs_init_wave_init (GfsInitWave * object) { object->d = gfs_function_new (gfs_function_class (), 0.); object->hs = gfs_function_new (gfs_function_class (), 0.); } GfsGenericInitClass * gfs_init_wave_class (void) { static GfsGenericInitClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_init_wave_info = { "GfsInitWave", sizeof (GfsInitWave), sizeof (GfsGenericInitClass), (GtsObjectClassInitFunc) gfs_init_wave_class_init, (GtsObjectInitFunc) gfs_init_wave_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_init_class ()), &gfs_init_wave_info); } return klass; } /** \endobject{GfsInitWave} */ gerris-snapshot-131206/src/particle.c0000644000175100017510000000621112250371171014420 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Lagrangian particles. */ #include #include "particle.h" /** * Lagrangian particules. * \beginobject{GfsParticle} */ static gboolean gfs_particle_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_particle_class ())->parent_class)->event) (event, sim)) { GfsParticle * p = GFS_PARTICLE (event); FttVector pos = p->pos; gfs_simulation_map (sim, &pos); gfs_domain_advect_point (GFS_DOMAIN (sim), &pos, sim->advection_params.dt); gfs_simulation_map_inverse (sim, &pos); p->pos = pos; return TRUE; } return FALSE; } static void gfs_particle_read (GtsObject ** o, GtsFile * fp) { GfsParticle * p = GFS_PARTICLE(*o); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (Id)"); return; } p->id = atoi (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (p.x)"); return; } p->pos.x = atof (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (p.y)"); return; } p->pos.y = atof (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (p.z)"); return; } p->pos.z = atof (fp->token->str); gts_file_next_token (fp); } static void gfs_particle_write (GtsObject * o, FILE * fp) { GfsParticle * p = GFS_PARTICLE(o); fprintf (fp, " %d %g %g %g", p->id, p->pos.x, p->pos.y, p->pos.z); } static void gfs_particle_class_init (GfsEventClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_particle_event; GTS_OBJECT_CLASS (klass)->read = gfs_particle_read; GTS_OBJECT_CLASS (klass)->write = gfs_particle_write; } GfsEventClass * gfs_particle_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_particle_info = { "GfsParticle", sizeof (GfsParticle), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_particle_class_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_particle_info); } return klass; } /** \endobject{GfsParticle} */ gerris-snapshot-131206/src/levelset.c0000644000175100017510000001624012250371171014443 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2006 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief GfsVariableDistance. */ #include #include "levelset.h" #include "vof.h" /** * Signed distance to a VOF interface. * \beginobject{GfsVariableDistance} */ static void variable_distance_read (GtsObject ** o, GtsFile * fp) { GfsDomain * domain; (* GTS_OBJECT_CLASS (gfs_variable_distance_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (c)"); return; } domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (!(GFS_VARIABLE_DISTANCE (*o)->v = gfs_variable_from_name (domain->variables, fp->token->str))) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } if (GFS_VARIABLE (*o)->description) g_free (GFS_VARIABLE (*o)->description); GFS_VARIABLE (*o)->description = g_strjoin (" ", "Distance to the interface defined by tracer", fp->token->str, NULL); gts_file_next_token (fp); if (fp->type == '{') { GtsFileVariable var[] = { {GTS_INT, "stencil", TRUE}, {GTS_NONE} }; var[0].data = &GFS_VARIABLE_DISTANCE (*o)->stencil; gts_file_assign_variables (fp, var); } } static void variable_distance_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_variable_distance_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", GFS_VARIABLE_DISTANCE (o)->v->name); if (GFS_VARIABLE_DISTANCE (o)->stencil) fputs (" { stencil = 1 }", fp); } static gdouble vof_distance2 (FttCell * cell, GtsPoint * t, gpointer v) { gdouble f = GFS_VALUE (cell, GFS_VARIABLE (v)); if (GFS_IS_FULL (f)) return GFS_NODATA; if (!FTT_CELL_IS_LEAF (cell)) return ftt_cell_point_distance2_min (cell, t); else return gfs_vof_facet_distance2 (cell, v, t); } static void distance_for_stencil (FttCell * cell, gpointer * data) { GfsVariable * v = data[0]; GfsVariable * s2 = data[2]; if (GFS_VALUE (cell, s2)) { GfsVariableDistance * l = GFS_VARIABLE_DISTANCE (v); GtsPoint p; gdouble d2; ftt_cell_pos (cell, (FttVector *) &p.x); d2 = gfs_domain_cell_point_distance2 (v->domain, &p, vof_distance2, l->v, NULL); GFS_VALUE (cell, v) = GFS_VALUE (cell, l->v) > 0.5 ? sqrt (d2) : -sqrt (d2); } else GFS_VALUE (cell, v) = GFS_NODATA; } static void distance (FttCell * cell, GfsVariable * v) { GfsVariableDistance * l = GFS_VARIABLE_DISTANCE (v); GtsPoint p; gdouble d2; ftt_cell_pos (cell, (FttVector *) &p.x); d2 = gfs_domain_cell_point_distance2 (v->domain, &p, vof_distance2, l->v, NULL); GFS_VALUE (cell, v) = GFS_VALUE (cell, l->v) > 0.5 ? sqrt (d2) : -sqrt (d2); } static void stencil_interpolate (FttCell * cell, gpointer * data) { GfsVariableDistance * v = data[0]; gdouble f = GFS_VALUE (cell, v->v); if (!GFS_IS_FULL (f)) gfs_interpolate_stencil (cell, data[1]); } static void stencil_gradient (FttCell * cell, gpointer * data) { GfsVariable * s1 = data[1]; GfsVariable * s2 = data[2]; FttComponent c; if (GFS_VALUE (cell, s1)) for (c = 0; c < FTT_DIMENSION; c++) gfs_center_gradient_stencil (cell, c, s2->i); } static void variable_distance_event_half (GfsEvent * event, GfsSimulation * sim) { GfsDomain * domain = GFS_DOMAIN (sim); GfsVariableDistance * v = GFS_VARIABLE_DISTANCE (event); gfs_domain_timer_start (domain, "distance"); if (v->stencil) { /* fixme: this "acceleration technique" i.e. computing distance only in a band around the interface seems to be slower than computing the distance function everywhere! */ gpointer data[3], tmp; data[0] = v; data[1] = gfs_temporary_variable (domain); data[2] = gfs_temporary_variable (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_reset, data[1]); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) stencil_interpolate, data); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_reset, data[2]); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) stencil_gradient, data); tmp = data[1]; data[1] = data[2]; data[2] = tmp; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) stencil_gradient, data); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) v->v->fine_coarse, v->v); gfs_traverse_and_bc (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) distance_for_stencil, data, GFS_VARIABLE (event),GFS_VARIABLE (event)); gts_object_destroy (data[1]); gts_object_destroy (data[2]); } else gfs_traverse_and_bc (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) distance, v, GFS_VARIABLE (event),GFS_VARIABLE (event)); gfs_domain_timer_stop (domain, "distance"); } static gboolean variable_distance_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_variable_distance_class ())->parent_class)->event) (event, sim)) { if (!GFS_VARIABLE_DISTANCE (event)->first_done) { variable_distance_event_half (event, sim); GFS_VARIABLE_DISTANCE (event)->first_done = TRUE; } return TRUE; } return FALSE; } static void variable_distance_class_init (GtsObjectClass * klass) { klass->read = variable_distance_read; klass->write = variable_distance_write; GFS_EVENT_CLASS (klass)->event = variable_distance_event; GFS_EVENT_CLASS (klass)->event_half = variable_distance_event_half; } static void variable_distance_init (GfsVariable * v) { v->units = 1.; } GfsVariableClass * gfs_variable_distance_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_distance_info = { "GfsVariableDistance", sizeof (GfsVariableDistance), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_distance_class_init, (GtsObjectInitFunc) variable_distance_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &gfs_variable_distance_info); } return klass; } /** \endobject{GfsVariableDistance} */ gerris-snapshot-131206/src/moving.h0000644000175100017510000000516312250371171014126 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __MOVING_H__ #define __MOVING_H__ #include #include "variable.h" #include "utils.h" #include "solid.h" #include "advection.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* GfsNumberedVertex: Header */ typedef struct _GfsNumberedVertex GfsNumberedVertex; #define GFS_IS_NUMBERED_VERTEX(obj) (gts_object_is_from_class (obj,\ gfs_numbered_vertex_class ())) #define GFS_NUMBERED_VERTEX(obj) GTS_OBJECT_CAST (obj,\ GfsNumberedVertex,\ gfs_numbered_vertex_class ()) struct _GfsNumberedVertex { GtsVertex parent; glong num; }; GtsVertexClass * gfs_numbered_vertex_class (void); /* GfsSolidMoving: Header */ typedef struct _GfsSolidMoving GfsSolidMoving; struct _GfsSolidMoving { /*< private >*/ GfsSolid parent; /*< public >*/ GfsFunction * level; gboolean active; glong nvertex; }; GfsEventClass * gfs_solid_moving_class (void); #define GFS_SOLID_MOVING(obj) GTS_OBJECT_CAST (obj,\ GfsSolidMoving,\ gfs_solid_moving_class ()) #define GFS_IS_SOLID_MOVING(obj) (gts_object_is_from_class (obj,\ gfs_solid_moving_class ())) /* GfsSimulationMoving: Header */ typedef struct _GfsSimulationMoving GfsSimulationMoving; struct _GfsSimulationMoving { /*< private >*/ GfsSimulation parent; /*< public >*/ GfsVariable * old_solid, ** sold2; }; #define GFS_SIMULATION_MOVING(obj) GTS_OBJECT_CAST (obj,\ GfsSimulationMoving,\ gfs_simulation_moving_class ()) #define GFS_IS_SIMULATION_MOVING(obj) (gts_object_is_from_class (obj,\ gfs_simulation_moving_class ())) GfsSimulationClass * gfs_simulation_moving_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __MOVING_H__ */ gerris-snapshot-131206/src/gerris.c0000644000175100017510000003436012250371171014116 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include "config.h" #ifdef HAVE_GETOPT_H # include #endif /* HAVE_GETOPT_H */ #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #include "init.h" #include "simulation.h" #include "refine.h" #include "output.h" #include "adaptive.h" #include "solid.h" #include "version.h" static void set_box_pid (GfsBox * box, gint * pid) { box->pid = *pid; } static void setup_binary_IO (GfsDomain * domain) { /* make sure that all the variables are sent */ g_slist_free (domain->variables_io); domain->variables_io = NULL; GSList * i = domain->variables; while (i) { if (GFS_VARIABLE (i->data)->name) domain->variables_io = g_slist_append (domain->variables_io, i->data); i = i->next; } domain->binary = TRUE; } static gboolean set_macros () { #ifndef HAVE_M4 gfs_error (0, "gerris: macros are not supported on this system\n"); return 1; #endif /* not HAVE_M4 */ return 0; } int main (int argc, char * argv[]) { GfsSimulation * simulation; GfsDomain * domain; FILE * fptr; GtsFile * fp; int c = 0; guint split = 0; guint npart = 0; gboolean profile = FALSE, macros = FALSE, one_box_per_pe = TRUE, bubble = FALSE, verbose = FALSE; gchar * m4_options = g_strdup (M4_OPTIONS); GPtrArray * events = g_ptr_array_new (); gint maxlevel = -2; gfs_init (&argc, &argv); /* parse options using getopt */ while (c != EOF) { #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { {"split", required_argument, NULL, 's'}, {"pid", no_argument, NULL, 'i'}, {"partition", required_argument, NULL, 'p'}, {"profile", no_argument, NULL, 'P'}, {"define", required_argument, NULL, 'D'}, {"include", required_argument, NULL, 'I'}, {"macros", no_argument, NULL, 'm'}, {"data", no_argument, NULL, 'd'}, {"event", required_argument, NULL, 'e'}, {"bubble", required_argument, NULL, 'b'}, {"debug", no_argument, NULL, 'B'}, {"verbose", no_argument, NULL, 'v'}, {"help", no_argument, NULL, 'h'}, {"version", no_argument, NULL, 'V'}, { NULL } }; int option_index = 0; switch ((c = getopt_long (argc, argv, "hVs:ip:PD:I:mde:b:vB", long_options, &option_index))) { #else /* not HAVE_GETOPT_LONG */ switch ((c = getopt (argc, argv, "hVs:ip:PD:I:mde:b:vB"))) { #endif /* not HAVE_GETOPT_LONG */ case 'P': /* profile */ profile = TRUE; break; case 'p': /* partition */ npart = atoi (optarg); break; case 'b': /* "bubble" partition */ npart = atoi (optarg); bubble = TRUE; break; case 's': /* split */ split = atoi (optarg); break; case 'i': /* pid */ one_box_per_pe = FALSE; break; case 'I': { /* include */ gchar * tmp = g_strjoin (" ", m4_options, "-I", optarg, NULL); g_free (m4_options); m4_options = tmp; if (set_macros ()) return 1; macros = TRUE; break; } case 'D': { /* define */ gchar * tmp = g_strjoin (" ", m4_options, "-D", optarg, NULL); g_free (m4_options); m4_options = tmp; if (set_macros ()) return 1; macros = TRUE; break; } case 'm': /* macros */ if (set_macros ()) return 1; macros = TRUE; break; case 'd': /* data */ maxlevel = -1; break; case 'e': /* event */ g_ptr_array_add (events, g_strdup (optarg)); break; case 'B': /* debug */ gfs_debug_enabled (TRUE); break; case 'v': /* verbose */ verbose = TRUE; break; case 'h': { /* help */ gchar * usage = "Usage: gerris [OPTION] FILE\n" "The Gerris flow solver simulation engine.\n" "\n" " -s N --split=N splits the domain N times and returns\n" " the corresponding simulation\n" " -i --pid keep box pids when splitting\n" " -p N --partition=N partition the domain in 2^N subdomains and returns\n" " the corresponding simulation\n" " -b N --bubble=N partition the domain in N subdomains and returns\n" " the corresponding simulation\n" " -d --data when splitting or partitioning, output all data\n" " -P --profile profiles calls to boundary conditions\n" #ifdef HAVE_M4 " -m --macros Turn macros support on\n" " -DNAME Defines NAME as a macro expanding to VALUE\n" " -DNAME=VALUE (macro support is implicitly turned on)\n" " --define=NAME\n" " --define=NAME=VALUE\n" " -IDIR --include=DIR Append DIR to macro include path\n" #endif /* HAVE_M4 */ " -eEV --event=EV Evaluates GfsEvent EV and returns the simulation\n" " -B --debug Enables debugging messages\n" " -v --verbose Display more messages\n" " -h --help display this help and exit\n" " -V --version output version information and exit\n" "\n" "Reports bugs to %s\n"; gfs_error (0, usage, FTT_MAINTAINER); return 0; /* success */ break; } case 'V': { /* version */ gchar * mpi = #ifdef HAVE_MPI "yes"; #else "no"; #endif gchar * pkgconfig = #ifdef HAVE_PKG_CONFIG "yes"; #else "no"; #endif gchar * m4 = #ifdef HAVE_M4 "yes"; #else "no"; #endif gfs_error (0, "gerris: using %dD libgfs version %s (%s)\n" " compiled with flags: %s\n" " MPI: %s\n" " pkg-config: %s\n" " m4: %s\n" "Copyright (C) 2001-2011 NIWA.\n" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", FTT_DIMENSION, GFS_VERSION, GFS_BUILD_VERSION, GFS_COMPILATION_FLAGS, mpi, pkgconfig, m4); return 0; /* succes */ break; } case '?': /* wrong options */ gfs_error (0, "Try `gerris --help' for more information.\n"); return 1; /* failure */ } } if (optind >= argc) { /* missing FILE */ gfs_error (0, "gerris: missing FILE\n" "Try `gerris --help' for more information.\n"); return 1; /* failure */ } if (macros) { gchar * awk = g_strconcat ("awk -v prefix=", strstr (m4_options, "-P") ? "m4_" : "", " -f ", GFS_DATA_DIR, "/m4.awk ", NULL); gchar * command; if (!strcmp (argv[optind], "-")) command = g_strjoin (NULL, awk, "| m4 ", m4_options, NULL); else command = g_strjoin (NULL, awk, argv[optind], " | m4 ", m4_options, NULL); fptr = popen (command, "r"); g_free (command); g_free (awk); } else { /* no macros */ if (!strcmp (argv[optind], "-")) fptr = stdin; else { #ifdef HAVE_MPI gint pid = -1; int size; MPI_Comm_size (MPI_COMM_WORLD, &size); if (size > 1) MPI_Comm_rank (MPI_COMM_WORLD, &pid); gboolean dynamic = FALSE, parallel = FALSE; GSList * format = gfs_format_new (argv[optind], NULL, &dynamic, ¶llel); if (dynamic) { gfs_error (-1, "gerris: simulation file cannot be time-dependent\n"); return 1; } if (parallel) { gchar * fpname = gfs_format_string (format, pid, 0, 0.); fptr = fopen (fpname, "r"); g_free (fpname); } else fptr = fopen (argv[optind], "r"); gfs_format_destroy (format); #else fptr = fopen (argv[optind], "r"); #endif } } g_free (m4_options); if (fptr == NULL) { gfs_error (-1, "gerris: unable to open file `%s'\n", argv[optind]); return 1; } fp = gts_file_new (fptr); if (!(simulation = gfs_simulation_read (fp))) { gfs_error (-1, "gerris: file `%s' is not a valid simulation file\n" "%s:%d:%d: %s\n", argv[optind], argv[optind], fp->line, fp->pos, fp->error); return 1; } gts_file_destroy (fp); if (macros) pclose (fptr); else if (fptr != stdin) fclose (fptr); domain = GFS_DOMAIN (simulation); #ifdef HAVE_MPI if (domain->pid >= 0) { int size; MPI_Comm_size (MPI_COMM_WORLD, &size); if (size > 1 && domain->np < size) { if (npart != 0) { gfs_error (0, "gerris: manual partitioning is not a valid option in parallel\n"); return 1; } /* automatic bubble partitioning if the simulation is not partitioned correctly (or at all) */ npart = size; bubble = TRUE; } } #endif /* HAVE_MPI */ if (split) { int pid = domain->pid; domain->pid = -1; /* force serial */ gfs_clock_start (domain->timer); gfs_simulation_refine (simulation); gfs_clock_stop (domain->timer); while (split) { gfs_domain_split (domain, one_box_per_pe); split--; } if (npart == 0) { gfs_simulation_write (simulation, maxlevel, stdout); return 0; } domain->pid = pid; } if ((bubble && npart > 1) || (!bubble && npart > 0)) { guint nmin = 1000; guint mmax = 10000; guint ntry = 10000; guint np = bubble ? npart : pow (2., npart); gfloat imbalance = 0.0; GSList * partition, * i; if (verbose && domain->pid <= 0) gts_graph_print_stats (GTS_GRAPH (simulation), stderr); if (gts_container_size (GTS_CONTAINER (simulation)) < np) { gfs_error (0, "gerris: the number of boxes in the domain to partition should be >= %d\n" "Use option '-s' to split the domain first\n" "Try `gerris --help' for more information.\n", np); return 1; } if (bubble) partition = gts_graph_bubble_partition (GTS_GRAPH (simulation), npart, 100, verbose ? (GtsFunc) gts_graph_partition_print_stats : NULL, stderr); else partition = gts_graph_recursive_bisection (GTS_WGRAPH (simulation), npart, ntry, mmax, nmin, imbalance); gint pid = 0; i = partition; while (i) { if (gts_container_size (GTS_CONTAINER (i->data)) == 0) { fprintf (stderr, "gerris: partitioning failed: empty partition\n"); if (!bubble) fprintf (stderr, "Try using the '-b' option\n" "Try `gerris --help' for more information.\n"); return 1; } gts_container_foreach (GTS_CONTAINER (i->data), (GtsFunc) set_box_pid, &pid); pid++; i = i->next; } if (pid != np) fprintf (stderr, "gerris: warning: only %d partitions were created\n", pid); if (verbose && domain->pid <= 0) gts_graph_partition_print_stats (partition, stderr); gts_graph_partition_destroy (partition); if (domain->pid >= 0) { /* we are running a parallel job */ /* write partitioned simulation in a temporary file */ gchar * partname = gfs_template (); gint fd = g_mkstemp (partname); remove (partname); g_free (partname); FILE * fptr = fdopen (fd, "w+"); gfs_simulation_write (simulation, maxlevel, fptr); gts_object_destroy (GTS_OBJECT (simulation)); /* replace the simulation with its partitioned version */ rewind (fptr); fp = gts_file_new (fptr); simulation = gfs_simulation_read (fp); domain = GFS_DOMAIN (simulation); /* cleanup */ gts_file_destroy (fp); fclose (fptr); close (fd); g_assert (simulation); } else { /* just a serial job */ gfs_simulation_write (simulation, maxlevel, stdout); return 0; } } if (events->len > 0) { GSList * l = NULL; guint i; for (i = 0; i < events->len; i++) { GtsFile * fp = gts_file_new_from_string (g_ptr_array_index (events, i)); if (fp->type != GTS_STRING) { gfs_error (-1, "gerris: invalid event: '%s'\n" "expecting a GfsEvent name\n", (char *) g_ptr_array_index (events, i)); return 1; } GtsObjectClass * klass = gfs_object_class_from_name (fp->token->str); if (klass == NULL) { gfs_error (-1, "gerris: unknown event class `%s'\n", fp->token->str); return 1; } if (!gts_object_class_is_from_class (klass, gfs_event_class ())) { gfs_error (-1, "gerris: class `%s' is not a GfsEvent\n", fp->token->str); return 1; } GtsObject * object = gts_object_new (klass); gfs_object_simulation_set (object, simulation); g_assert (klass->read); (* klass->read) (&object, fp); if (fp->type == GTS_ERROR) { gfs_error (-1, "gerris: invalid event: '%s'\n" "%d:%d: %s\n", (char *) g_ptr_array_index (events, i), fp->line, fp->pos, fp->error); return 1; } if (GFS_IS_ADAPT (object)) gts_container_add (GTS_CONTAINER (simulation->adapts), GTS_CONTAINEE (object)); else if (GFS_IS_SOLID (object)) gts_container_add (GTS_CONTAINER (simulation->solids), GTS_CONTAINEE (object)); gts_container_add (GTS_CONTAINER (simulation->events), GTS_CONTAINEE (object)); l = g_slist_append (l, object); gts_file_destroy (fp); } GtsFile * fp = gts_file_new_from_string (""); gfs_pending_functions_compilation (fp); if (fp->type == GTS_ERROR) { gfs_error (-1, "gerris: invalid event\n" "%d:%d: %s\n", fp->line, fp->pos, fp->error); return 1; } gts_file_destroy (fp); gfs_clock_start (domain->timer); GSList * j = domain->variables; while (j) { gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, j->data); j = j->next; } g_slist_foreach (l, (GFunc) gfs_event_do, simulation); gfs_clock_stop (domain->timer); setup_binary_IO (domain); gfs_simulation_write (simulation, -1, stdout); return 0; } domain->profile_bc = profile; gfs_simulation_run (simulation); gts_object_destroy (GTS_OBJECT (simulation)); return 0; } gerris-snapshot-131206/src/myc2d.h0000644000175100017510000000315012250371171013637 00000000000000#define NOT_ZERO 1.e-30 /*-----------------------------------------------------* *MYC - Mixed Youngs and Central Scheme (2D) * *-----------------------------------------------------*/ static void mycs(double c[3][3],double mxy[2]) { int ix; double c_t,c_b,c_r,c_l; double mx0,my0,mx1,my1,mm1,mm2; /* top, bottom, right and left sums of c values */ c_t = c[0][2] + c[1][2] + c[2][2]; c_b = c[0][0] + c[1][0] + c[2][0]; c_r = c[2][0] + c[2][1] + c[2][2]; c_l = c[0][0] + c[0][1] + c[0][2]; /* consider two lines: sgn(my) Y = mx0 X + alpha, and: sgn(mx) X = my0 Y + alpha */ mx0 = 0.5*(c_l-c_r); my0 = 0.5*(c_b-c_t); /* minimum coefficient between mx0 and my0 wins */ if (fabs(mx0) <= fabs(my0)) { my0 = my0 > 0. ? 1. : -1.; ix = 1; } else { mx0 = mx0 > 0. ? 1. : -1.; ix = 0; } /* Youngs' normal to the interface */ mm1 = c[0][0] + 2.0*c[0][1] + c[0][2]; mm2 = c[2][0] + 2.0*c[2][1] + c[2][2]; mx1 = mm1 - mm2; mm1 = c[0][0] + 2.0*c[1][0] + c[2][0]; mm2 = c[0][2] + 2.0*c[1][2] + c[2][2]; my1 = mm1 - mm2; /* choose between the best central and Youngs' scheme */ if (ix) { mm1 = fabs(my1) + NOT_ZERO; mm1 = fabs(mx1)/mm1; if (mm1 > fabs(mx0)) { mx0 = mx1; my0 = my1; } } else { mm1 = fabs(mx1) + NOT_ZERO; mm1 = fabs(my1)/mm1; if (mm1 > fabs(my0)) { mx0 = mx1; my0 = my1; } } /* normalize the set (mx0,my0): |mx0|+|my0|=1 and write the two components of the normal vector */ mm1 = fabs(mx0) + fabs(my0) + NOT_ZERO; mxy[0] = mx0/mm1; mxy[1] = my0/mm1; return; } gerris-snapshot-131206/src/ocean.h0000644000175100017510000000647312250371171013721 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2004 Stéphane Popinet * National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __OCEAN_H__ #define __OCEAN_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "simulation.h" #include "source.h" /* GfsOcean: Header */ typedef struct _GfsOcean GfsOcean; struct _GfsOcean { GfsSimulation parent; #if !FTT_2D GPtrArray * layer; GfsDomain * toplayer; #endif /* 3D */ }; #define GFS_OCEAN(obj) GTS_OBJECT_CAST (obj,\ GfsOcean,\ gfs_ocean_class ()) #define GFS_IS_OCEAN(obj) (gts_object_is_from_class (obj,\ gfs_ocean_class ())) GfsSimulationClass * gfs_ocean_class (void); #if !FTT_2D void gfs_hydrostatic_pressure (GfsDomain * domain, GfsVariable * p, GfsVariable * rho, gdouble g); /* GfsSourceHydrostatic: Header */ typedef struct _GfsSourceHydrostatic GfsSourceHydrostatic; struct _GfsSourceHydrostatic { /*< private >*/ GfsSourceVelocity parent; GfsVariable * ph1; gboolean not_first; /*< public >*/ GfsVariable * ph, * rho; }; #define GFS_SOURCE_HYDROSTATIC(obj) GTS_OBJECT_CAST (obj,\ GfsSourceHydrostatic,\ gfs_source_hydrostatic_class ()) #define GFS_IS_SOURCE_HYDROSTATIC(obj) (gts_object_is_from_class (obj,\ gfs_source_hydrostatic_class ())) GfsSourceGenericClass * gfs_source_hydrostatic_class (void); #endif /* 3D */ /* GfsSourceFriction: Header */ typedef struct _GfsSourceFriction GfsSourceFriction; struct _GfsSourceFriction { /*< private >*/ GfsSourceVelocity parent; GfsVariable * u[FTT_DIMENSION]; /*< public >*/ GfsVariable * h; gdouble f; }; #define GFS_SOURCE_FRICTION(obj) GTS_OBJECT_CAST (obj,\ GfsSourceFriction,\ gfs_source_friction_class ()) #define GFS_IS_SOURCE_FRICTION(obj) (gts_object_is_from_class (obj,\ gfs_source_friction_class ())) GfsSourceGenericClass * gfs_source_friction_class (void); /* GfsBcFlather: Header */ typedef struct _GfsBcFlather GfsBcFlather; struct _GfsBcFlather { /*< private >*/ GfsBcValue parent; /*< public >*/ GfsVariable * h, * p; GfsFunction * val; }; #define GFS_BC_FLATHER(obj) GTS_OBJECT_CAST (obj,\ GfsBcFlather,\ gfs_bc_flather_class ()) #define GFS_IS_BC_FLATHER(obj) (gts_object_is_from_class (obj,\ gfs_bc_flather_class ())) GfsBcClass * gfs_bc_flather_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __OCEAN_H__ */ gerris-snapshot-131206/src/timestep.c0000644000175100017510000011332412250371171014453 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Timestepping. */ #include #include #include "timestep.h" #include "source.h" #include "solid.h" #include "tension.h" typedef struct { GfsVariable ** g; guint dimension; } GradientData; static void reset_cell_gradients (FttCell * cell, GradientData * p) { FttComponent c; for (c = 0; c < p->dimension; c++) GFS_VALUE (cell, p->g[c]) = 0.; } /** * gfs_reset_gradients: * @domain: a #GfsDomain. * @g: an array of @dimension #GfsVariables. * @dimension: the number of dimension. * * Resets the gradient vector @g. */ void gfs_reset_gradients (GfsDomain * domain, guint dimension, GfsVariable ** g) { g_return_if_fail (domain != NULL); g_return_if_fail (g != NULL); GradientData p = { g, dimension }; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) reset_cell_gradients, &p); } static void scale_cell_gradients (FttCell * cell, gpointer * data) { GfsVariable ** g = data[0]; guint * dimension = data[1]; FttComponent c; /* fixme: mapping??? */ if (GFS_IS_MIXED (cell)) { GfsSolidVector * s = GFS_STATE (cell)->solid; for (c = 0; c < *dimension; c++) if (s->s[2*c] + s->s[2*c + 1] > 0.) GFS_VALUE (cell, g[c]) /= s->s[2*c] + s->s[2*c + 1]; else g_assert (GFS_VALUE (cell, g[c]) == 0.); } else { FttCellNeighbors n; ftt_cell_neighbors (cell, &n); for (c = 0; c < *dimension; c++) { FttCell * c1 = n.c[2*c], * c2 = n.c[2*c + 1]; if (c1 && c2 && !GFS_CELL_IS_GRADIENT_BOUNDARY (c1) && !GFS_CELL_IS_GRADIENT_BOUNDARY (c2)) GFS_VALUE (cell, g[c]) /= 2.; } } } /** * gfs_scale_gradients: * @domain: a #GfsDomain. * @dimension: the number of dimensions. * @g: the components of the gradient. * * Scales the gradient accumulated in @g (typically using * gfs_correct_normal_velocities()). */ void gfs_scale_gradients (GfsDomain * domain, guint dimension, GfsVariable ** g) { g_return_if_fail (domain != NULL); g_return_if_fail (g != NULL); gpointer data[2]; data[0] = g; data[1] = &dimension; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) scale_cell_gradients, data); FttComponent c; for (c = 0; c < dimension; c++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, g[c]); } typedef struct { GfsVariable * p, ** gv; gdouble dt; } CorrectPar; static void correct_normal_velocity (FttCellFace * face, CorrectPar * par) { GfsGradient g; gdouble dp, f; if (GFS_FACE_FRACTION_RIGHT (face) == 0.) return; gfs_face_weighted_gradient (face, &g, par->p->i, -1); dp = (g.b - g.a*GFS_VALUE (face->cell, par->p))/ftt_cell_size (face->cell); if (!FTT_FACE_DIRECT (face)) dp = - dp; f = gfs_domain_face_fraction (par->p->domain, face); if (f > 0.) dp /= f; GFS_FACE_NORMAL_VELOCITY_LEFT (face) -= dp*par->dt; if (par->gv) GFS_VALUE (face->cell, par->gv[face->d/2]) += dp*GFS_FACE_FRACTION_LEFT (face); if (ftt_face_type (face) == FTT_FINE_COARSE) dp *= GFS_FACE_FRACTION_LEFT (face)/(GFS_FACE_FRACTION_RIGHT (face)*FTT_CELLS/2); GFS_FACE_NORMAL_VELOCITY_RIGHT (face) -= dp*par->dt; if (par->gv) GFS_VALUE (face->neighbor, par->gv[face->d/2]) += dp*GFS_FACE_FRACTION_RIGHT (face); } /** * gfs_correct_normal_velocities: * @domain: a #GfsDomain. * @dimension: the number of dimensions (2 or 3). * @p: the pressure field. * @g: where to store the pressure gradient or %NULL. * @dt: the timestep. * * Corrects the normal velocity field of @domain using @p and and @dt. * * Assumes that the Poisson weighting coefficients have already been * computed using gfs_poisson_coefficients(). * * Also fills the @g variables (if not %NULL) with the centered * gradient of @p. */ void gfs_correct_normal_velocities (GfsDomain * domain, guint dimension, GfsVariable * p, GfsVariable ** g, gdouble dt) { CorrectPar par; g_return_if_fail (domain != NULL); g_return_if_fail (p != NULL); par.p = p; par.gv = g; par.dt = dt; gfs_domain_face_traverse (domain, dimension == 2 ? FTT_XY : FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) correct_normal_velocity, &par); } static void scale_divergence (FttCell * cell, gpointer * data) { GfsVariable * div = data[0]; gdouble * dt = data[1]; GFS_VALUE (cell, div) /= *dt; } typedef struct { GfsSourceGeneric * s; GfsVariable * v, ** g; FttComponent c; gdouble dt; } FaceSource; #define DIRICHLET_BOUNDARY (1 << GFS_FLAG_USER) static void tag_dirichlet (FttCellFace * f) { f->cell->flags |= DIRICHLET_BOUNDARY; } static void ignore_dirichlet_boundaries (GfsBox * box, FaceSource * f) { FttDirection d; for (d = 2*f->c; d <= 2*f->c + 1; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); GfsBc * bc = gfs_boundary_lookup_bc (b, f->v); if (GFS_IS_BC_DIRICHLET (bc)) ftt_face_traverse_boundary (b->root, b->d, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) tag_dirichlet, NULL); } } static void add_face_source (FttCellFace * face, FaceSource * f) { gdouble dp; FttComponent c; if (face->neighbor->flags & DIRICHLET_BOUNDARY) { face->neighbor->flags &= ~DIRICHLET_BOUNDARY; return; } if (GFS_FACE_FRACTION_RIGHT (face) == 0.) return; c = face->d/2; dp = (* f->s->face_value) (f->s, face, f->v); GFS_FACE_NORMAL_VELOCITY_LEFT (face) += dp*f->dt; if (f->g) GFS_VALUE (face->cell, f->g[c]) -= dp*GFS_FACE_FRACTION_LEFT (face); if (ftt_face_type (face) == FTT_FINE_COARSE) dp *= GFS_FACE_FRACTION_LEFT (face)/(GFS_FACE_FRACTION_RIGHT (face)*FTT_CELLS/2); GFS_FACE_NORMAL_VELOCITY_RIGHT (face) += dp*f->dt; if (f->g) GFS_VALUE (face->neighbor, f->g[c]) -= dp*GFS_FACE_FRACTION_RIGHT (face); } /** * gfs_velocity_face_sources: * @domain: a #GfsDomain. * @u: the velocity vector. * @dt: the timestep. * @alpha: the specific volume. * @g: the gradient vector. * * Add source terms on the velocity component of each cell faces. */ void gfs_velocity_face_sources (GfsDomain * domain, GfsVariable ** u, gdouble dt, GfsFunction * alpha, GfsVariable ** g) { g_return_if_fail (domain != NULL); g_return_if_fail (u != NULL); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) if (u[c]->sources) { GSList * i = GTS_SLIST_CONTAINER (u[c]->sources)->items; while (i) { GfsSourceGeneric * s = i->data; if (s->face_value) { FaceSource f = { s, u[c], g, c, dt }; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) ignore_dirichlet_boundaries, &f); gfs_domain_face_traverse (domain, c, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) add_face_source, &f); } i = i->next; } } if (u[0]->sources) { GSList * i = GTS_SLIST_CONTAINER (u[0]->sources)->items; while (i) { if (GFS_IS_SOURCE_TENSION (i->data)) { GfsSourceTension * s = i->data; gfs_source_tension_coefficients (s, domain, alpha); gfs_correct_normal_velocities (domain, FTT_DIMENSION, GFS_SOURCE_TENSION_GENERIC (s)->c, g, dt); } i = i->next; } } } /** * gfs_update_gradients: * @domain: a #GfsDomain. * @p: the pressure. * @alpha: the Poisson equation gradient weight. * @g: where to store the pressure gradient. * * Updates the gradients in @g using @p and @alpha. */ void gfs_update_gradients (GfsDomain * domain, GfsVariable * p, GfsFunction * alpha, GfsVariable ** g) { g_return_if_fail (domain != NULL); g_return_if_fail (p != NULL); g_return_if_fail (g != NULL); /* Add face sources */ gfs_reset_gradients (domain, FTT_DIMENSION, g); gfs_velocity_face_sources (domain, gfs_domain_velocity (domain), 0., alpha, g); /* Initialize face coefficients */ gfs_poisson_coefficients (domain, alpha, TRUE, TRUE, TRUE); /* Add pressure gradient */ gfs_correct_normal_velocities (domain, FTT_DIMENSION, p, g, 0.); gfs_scale_gradients (domain, FTT_DIMENSION, g); } typedef struct { GfsVariable * v, * div; gdouble L2; } SourceVolumePar; static void cell_volume_source (FttCell * cell, SourceVolumePar * p) { gdouble sum = 0.; GSList * i = GTS_SLIST_CONTAINER (p->v->sources)->items; while (i) { GfsSourceGeneric * s = i->data; if (s->centered_value) sum += (* s->centered_value) (s, cell, p->v); i = i->next; } /* div*h^2 (units source m^3/s/vol) */ GFS_VALUE (cell, p->div) -= sum*p->L2*ftt_cell_volume (cell); } static void volume_sources (GfsDomain * domain, GfsVariable * p, GfsVariable * div) { SourceVolumePar par; par.div = div; par.v = p; par.L2 = GFS_SIMULATION (domain)->physical_params.L; par.L2 *= par.L2; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) cell_volume_source, &par); } static void mac_projection (GfsDomain * domain, GfsMultilevelParams * par, gdouble dt, GfsVariable * p, GfsFunction * alpha, GfsVariable * res, GfsVariable ** g, void (* divergence_hook) (GfsDomain * domain, gdouble dt, GfsVariable * div) ) { /* Add face sources */ gfs_reset_gradients (domain, FTT_DIMENSION, g); gfs_velocity_face_sources (domain, gfs_domain_velocity (domain), dt, alpha, g); GfsVariable * dia = gfs_temporary_variable (domain); GfsVariable * div = gfs_temporary_variable (domain); GfsVariable * res1 = res ? res : gfs_temporary_variable (domain); /* Initialize face coefficients */ gfs_poisson_coefficients (domain, alpha, TRUE, TRUE, TRUE); /* hydrostatic pressure */ GSList * i = domain->variables; while (i) { if (GFS_IS_HYDROSTATIC_PRESSURE (i->data)) gfs_correct_normal_velocities (domain, FTT_DIMENSION, i->data, g, dt); i = i->next; } /* Initialize diagonal coefficient */ gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_reset, dia); /* compute MAC divergence */ gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) gfs_normal_divergence, div); /* Divergence hook */ if (divergence_hook) (* divergence_hook) (domain, dt, div); /* add volume sources (if any) */ if (p->sources) volume_sources (domain, p, div); /* Scale divergence */ gpointer data[2]; data[0] = div; data[1] = &dt; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) scale_divergence, data); #if 0 { FILE * fp = fopen ("/tmp/mac", "wt"); GfsNorm norm; gfs_write_mac_velocity (domain, 0.9, FTT_TRAVERSE_LEAFS, -1, NULL, fp); fclose (fp); norm = gfs_domain_norm_variable (domain, div, FTT_TRAVERSE_LEAFS, -1); fprintf (stderr, "mac div before: %g %g %g\n", norm.first, norm.second, norm.infty); } #endif par->poisson_solve (domain, par, p, div, res1, dia, dt); gts_object_destroy (GTS_OBJECT (dia)); gts_object_destroy (GTS_OBJECT (div)); if (!res) gts_object_destroy (GTS_OBJECT (res1)); gfs_correct_normal_velocities (domain, FTT_DIMENSION, p, g, dt); gfs_scale_gradients (domain, FTT_DIMENSION, g); } /** * gfs_mac_projection: * @domain: a #GfsDomain. * @par: the projection control parameters. * @dt: the timestep. * @p: the pressure. * @alpha: the Poisson equation gradient weight. * @g: where to store the pressure gradient. * @divergence_hook: a hook function or %NULL. * * Corrects the face-centered velocity field (MAC field) on the leaf * level of @domain using an exact (MAC) projection. The resulting * face-centered velocity field is (almost) exactly divergence * free. The (potential) pressure field is also obtained as a * by-product as well as its gradient at the center of the leaf cells * of the domain. The gradient is stored in newly-allocated @g[] * variables and is obtained by simple averaging from the face values * to the center. The newly-allocated @g[] variables should be freed * when not needed anymore. * * The @residual field of the @par projection parameters is set to the * norm of the residual after the projection. The @niter field of the * @par projection parameters is set to the number of iterations * performed to solve the Poisson equation. The other projection * parameters are not modified. */ void gfs_mac_projection (GfsDomain * domain, GfsMultilevelParams * par, gdouble dt, GfsVariable * p, GfsFunction * alpha, GfsVariable ** g, void (* divergence_hook) (GfsDomain * domain, gdouble dt, GfsVariable * div) ) { g_return_if_fail (domain != NULL); g_return_if_fail (par != NULL); g_return_if_fail (p != NULL); g_return_if_fail (g != NULL); gfs_domain_timer_start (domain, "mac_projection"); mac_projection (domain, par, dt, p, alpha, NULL, g, divergence_hook); gfs_domain_timer_stop (domain, "mac_projection"); if (par->residual.infty > par->tolerance) g_warning ("MAC projection: max residual %g > %g", par->residual.infty, par->tolerance); } static void correct (FttCell * cell, gpointer * data) { FttComponent c; GfsVariable ** v = data[0]; GfsVariable ** g = data[1]; gdouble * dt = data[2]; guint * dimension = data[3]; for (c = 0; c < *dimension; c++) GFS_VALUE (cell, v[c]) -= GFS_VALUE (cell, g[c])*(*dt); } /** * gfs_correct_centered_velocities: * @domain: a #GfsDomain. * @dimension: the number of dimensions (2 or 3). * @g: the pressure gradient. * @dt: the timestep. * * Corrects the velocity field of @domain using the pressure gradient * stored in g[]. * * The @g[] variables are freed by this function. */ void gfs_correct_centered_velocities (GfsDomain * domain, guint dimension, GfsVariable ** g, gdouble dt) { GfsVariable ** v; FttComponent c; gpointer data[4]; g_return_if_fail (domain != NULL); g_return_if_fail (g != NULL); data[0] = v = gfs_domain_velocity (domain); data[1] = g; data[2] = &dt; data[3] = &dimension; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) correct, data); for (c = 0; c < dimension; c++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, v[c]); } /** * gfs_approximate_projection: * @domain: a #GfsDomain. * @par: the projection control parameters. * @dt: the timestep. * @p: the pressure. * @alpha: the Poisson equation gradient weight. * @res: the residual or %NULL. * @g: where to store the pressure gradient. * @divergence_hook: a hook function or %NULL. * * Corrects the centered velocity field on the leaf level of @domain * using an approximate projection. The resulting centered velocity * field is approximately divergence free. The (potential) pressure * field is also obtained as a by-product. * * The @residual field of the @par projection parameters is set to the * norm of the residual (on the MAC grid) after the projection. The * @niter field of the @par projection parameters is set to the number * of iterations performed to solve the Poisson equation. The other * projection parameters are not modified. * * The Poisson equation for the pressure is first solved on a MAC grid * where the MAC velocities are obtained from the centered velocities * by simple averaging. The resulting pressure gradients (defined on * the faces) are then averaged down on the center of the cells to * correct the centered velocity. */ void gfs_approximate_projection (GfsDomain * domain, GfsMultilevelParams * par, gdouble dt, GfsVariable * p, GfsFunction * alpha, GfsVariable * res, GfsVariable ** g, void (* divergence_hook) (GfsDomain * domain, gdouble dt, GfsVariable * div) ) { g_return_if_fail (domain != NULL); g_return_if_fail (par != NULL); g_return_if_fail (p != NULL); g_return_if_fail (g != NULL); gfs_domain_timer_start (domain, "approximate_projection"); /* compute MAC velocities from centered velocities */ gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL); gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_interpolated_normal_velocity, gfs_domain_velocity (domain)); mac_projection (domain, par, dt, p, alpha, res, g, divergence_hook); gfs_correct_centered_velocities (domain, FTT_DIMENSION, g, dt); gfs_domain_timer_stop (domain, "approximate_projection"); if (par->residual.infty > par->tolerance) g_warning ("approx projection: max residual %g > %g", par->residual.infty, par->tolerance); } static void save_face_values (FttCell * cell, GfsVariable * f[4]) { FttDirection d; for (d = 0; d < 4; d++) GFS_VALUE (cell, f[d]) = GFS_STATE (cell)->f[d].v; } static void face_values_init (FttCellTraverseFunc face_values, GfsAdvectionParams * par) { if (par->scheme == GFS_GODUNOV && par->v->component < FTT_DIMENSION && par->v->domain->has_rotated_bc) { /* store normal and tangential face values for vector quantities. This is required to apply boundary conditions for rotated topologies (e.g. cubed sphere) */ GfsVariable * v = par->v; GfsDomain * domain = v->domain; FttComponent c; for (c = 0; c < 2; c++) { FttDirection d; for (d = 0; d < 4; d++) { g_assert (v->vector[0]->face[c][d] == NULL); g_assert (v->vector[1]->face[c][d] == NULL); v->vector[0]->face[c][d] = v->vector[1]->face[c][d] = gfs_temporary_variable (domain); } } for (c = 0; c < 2; c++) { par->v = v->vector[c]; gfs_domain_traverse_leaves (domain, face_values, par); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) save_face_values, par->v->face[c]); } par->v = v; } } static void restore_face_values (FttCell * cell, GfsVariable * f[4]) { FttDirection d; for (d = 0; d < 4; d++) GFS_STATE (cell)->f[d].v = GFS_VALUE (cell, f[d]); } static void face_values_set (FttCellTraverseFunc face_values, GfsAdvectionParams * par) { if (par->v->component < 2 && par->v->domain->has_rotated_bc) /* vector: restore stored face values */ gfs_domain_traverse_leaves (par->v->domain, (FttCellTraverseFunc) restore_face_values, par->v->face[par->v->component]); else /* scalar or z-component: compute face values */ gfs_domain_traverse_leaves (par->v->domain, face_values, par); gfs_domain_face_bc (par->v->domain, FTT_XYZ, par->v); } static void face_values_free (GfsVariable * v) { if (v->component < FTT_DIMENSION && v->domain->has_rotated_bc) { FttComponent c; for (c = 0; c < 2; c++) { FttDirection d; for (d = 0; d < 4; d++) { if (v->vector[0]->face[c][d]) gts_object_destroy (GTS_OBJECT (v->vector[0]->face[c][d])); v->vector[0]->face[c][d] = v->vector[1]->face[c][d] = NULL; } } } } /** * gfs_predicted_face_velocities: * @domain: a #GfsDomain. * @d: the number of dimensions (2 or 3). * @par: the advection parameters. * * Fills the face (MAC) normal velocities of each leaf cell of @domain * with the predicted values at time t + dt/2 using a godunov type * advection scheme. */ void gfs_predicted_face_velocities (GfsDomain * domain, guint d, GfsAdvectionParams * par) { FttComponent c; FttCellTraverseFunc face_values; g_return_if_fail (domain != NULL); g_return_if_fail (par != NULL); gfs_domain_timer_start (domain, "predicted_face_velocities"); gfs_domain_face_traverse (domain, d == 2 ? FTT_XY : FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL); par->u = gfs_domain_velocity (domain); par->use_centered_velocity = TRUE; if (par->scheme == GFS_NONE) { face_values = (FttCellTraverseFunc) gfs_cell_non_advected_face_values; par->upwinding = GFS_NO_UPWINDING; } else { face_values = (FttCellTraverseFunc) gfs_cell_advected_face_values; par->upwinding = GFS_CENTERED_UPWINDING; } par->v = par->u[0]; face_values_init (face_values, par); for (c = 0; c < d; c++) { par->v = par->u[c]; face_values_set (face_values, par); gfs_domain_face_traverse (domain, c, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_advected_normal_velocity, par); } face_values_free (par->u[0]); gfs_domain_timer_stop (domain, "predicted_face_velocities"); } /** * gfs_diffusion: * @domain: a #GfsDomain. * @par: the multilevel parameters. * @v: a #GfsVariable. * @rhs: the right-hand side. * @rhoc: the mass. * @metric: the metric term. * * Solves a diffusion equation for variable @v using a Crank-Nicholson * scheme with multilevel relaxations. * * Diffusion coefficients must have been set using * gfs_diffusion_coefficients() and a right-hand side defined using * gfs_diffusion_rhs(). */ void gfs_diffusion (GfsDomain * domain, GfsMultilevelParams * par, GfsVariable * v, GfsVariable * rhs, GfsVariable * rhoc, GfsVariable * metric) { guint minlevel, maxlevel; GfsVariable * res; g_return_if_fail (domain != NULL); g_return_if_fail (par != NULL); g_return_if_fail (v != NULL); g_return_if_fail (rhs != NULL); g_return_if_fail (rhoc != NULL); res = gfs_temporary_variable (domain); minlevel = domain->rootlevel; if (par->minlevel > minlevel) minlevel = par->minlevel; maxlevel = gfs_domain_depth (domain); gfs_diffusion_residual (domain, v, rhs, rhoc, metric, res); par->residual_before = par->residual = gfs_domain_norm_variable (domain, res, NULL, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); gdouble res_max_before = par->residual.infty; par->niter = 0; while (par->niter < par->nitermin || (par->residual.infty > par->tolerance && par->niter < par->nitermax)) { gfs_diffusion_cycle (domain, minlevel, maxlevel, par->nrelax, v, rhs, rhoc, metric, res); par->residual = gfs_domain_norm_variable (domain, res, NULL, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); if (par->residual.infty == res_max_before) /* convergence has stopped!! */ break; if (par->residual.infty > res_max_before/1.1 && minlevel < maxlevel) minlevel++; res_max_before = par->residual.infty; #if 0 fprintf (stderr, "%d bias: %g first: %g second: %g infty: %g minlevel: %d\n", par->niter, par->residual.bias, par->residual.first, par->residual.second, par->residual.infty, minlevel); #endif par->niter++; } gts_object_destroy (GTS_OBJECT (res)); if (par->residual.infty > par->tolerance) g_warning ("gfs_diffusion(): max residual %g > %g", par->residual.infty, par->tolerance); } static GfsSourceDiffusion * source_diffusion (GfsVariable * v) { if (v->sources) { GSList * i = GTS_SLIST_CONTAINER (v->sources)->items; while (i) { GtsObject * o = i->data; if (GFS_IS_SOURCE_DIFFUSION (o) && !GFS_IS_SOURCE_DIFFUSION_EXPLICIT (o) && !GFS_IS_SOURCE_VISCOSITY_EXPLICIT (o) && GFS_SOURCE_DIFFUSION (o)->phi == GFS_SOURCE_SCALAR (o)->v) return GFS_SOURCE_DIFFUSION (o); i = i->next; } } return NULL; } static void add_pressure_gradient (FttCell * cell, GfsAdvectionParams * par) { GFS_VALUE (cell, par->fv) -= GFS_VALUE (cell, par->g[par->v->component])*par->dt; } static void add_sinking (FttCellFace * face, GfsAdvectionParams * par) { GFS_FACE_NORMAL_VELOCITY_LEFT (face) += gfs_function_face_value ( par->sink[face->d/2], face); GFS_FACE_NORMAL_VELOCITY_RIGHT (face) += gfs_function_face_value (par->sink[face->d/2], face); } /** * gfs_add_sinking_velocity: * @domain: a #GfsDomain. * @par: the advection parameters. * * Adds the sinking velocity to the MAC velocity field of @domain. */ void gfs_add_sinking_velocity (GfsDomain * domain, GfsAdvectionParams * par) { g_return_if_fail (domain != NULL); g_return_if_fail (par != NULL); if (par->sink[0]) gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) add_sinking, par); } static void remove_sinking (FttCellFace * face, GfsAdvectionParams * par) { GFS_FACE_NORMAL_VELOCITY_LEFT (face) -= gfs_function_face_value (par->sink[face->d/2], face); GFS_FACE_NORMAL_VELOCITY_RIGHT (face) -= gfs_function_face_value (par->sink[face->d/2], face); } /** * gfs_remove_sinking_velocity: * @domain: a #GfsDomain. * @par: the advection parameters. * * Removes the sinking velocity from the MAC velocity field of @domain. */ void gfs_remove_sinking_velocity (GfsDomain * domain, GfsAdvectionParams * par) { g_return_if_fail (domain != NULL); g_return_if_fail (par != NULL); if (par->sink[0]) gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) remove_sinking, par); } static void variable_sources (GfsDomain * domain, GfsAdvectionParams * par, GfsVariable * sv, GfsVariable ** gmac, GfsVariable ** g) { if (par->scheme == GFS_GODUNOV) { GfsVariable * v = par->v; par->u = gfs_domain_velocity (domain); par->g = gmac; par->fv = gfs_temporary_variable (domain); par->upwinding = GFS_FACE_UPWINDING; gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset, par->fv); gfs_add_sinking_velocity (domain, par); face_values_set ((FttCellTraverseFunc) gfs_cell_advected_face_values, par); gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) par->flux, par); gfs_remove_sinking_velocity (domain, par); par->v = sv; gfs_domain_traverse_merged (domain, par->update, par); par->v = v; par->u = par->g = NULL; gts_object_destroy (GTS_OBJECT (par->fv)); par->fv = NULL; } if (g) { par->fv = sv; par->g = g; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) add_pressure_gradient, par); par->g = NULL; par->fv = NULL; } /* fixme: time should be set to t + dt/2 here for evaluation of source terms in the call below */ par->fv = gfs_domain_variable_fluxes (domain, par->v, par->dt); if (par->fv) { GfsVariable * v = par->v; par->v = sv; /* fixme: for axi and moving should this be par->update? */ gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) gfs_advection_update, par); par->v = v; gts_object_destroy (GTS_OBJECT (par->fv)); par->fv = NULL; } gfs_domain_variable_centered_sources (domain, par->v, sv, par->dt); } static void variable_diffusion (GfsDomain * domain, GfsSourceDiffusion * d, GfsAdvectionParams * par, GfsVariable * rhs, GfsFunction * alpha) { GfsVariable * rhoc, * metric = NULL; rhoc = gfs_temporary_variable (domain); if (par->v->component < FTT_DIMENSION && domain->viscous_metric_implicit) { /* v is a component of a vector quantity and the domain has a metric */ metric = gfs_temporary_variable (domain); metric->component = par->v->component; } gfs_domain_surface_bc (domain, par->v); gfs_diffusion_coefficients (domain, d, par->dt, rhoc, metric, alpha, d->D->par.beta); gfs_diffusion_rhs (domain, par->v, rhs, rhoc, metric, d->D->par.beta); /* fixme: time shoud be set to t + dt here in case boundary values are time-dependent in the call below */ gfs_domain_surface_bc (domain, par->v); par->diffusion_solve (domain, &d->D->par, par->v, rhs, rhoc, metric); if (metric) gts_object_destroy (GTS_OBJECT (metric)); gts_object_destroy (GTS_OBJECT (rhoc)); } static void copy_v_rhs (FttCell * cell, GfsAdvectionParams * apar) { GFS_VALUE (cell, apar->fv) = GFS_VALUE (cell, apar->v); } /** * gfs_centered_velocity_advection_diffusion: * @domain: a #GfsDomain. * @dimension: the number of dimensions (2 or 3). * @par: the advection parameters. * @gmac: the MAC pressure gradient. * @g: the pressure gradient. * @alpha: the inverse of density or %NULL. * * Advects the (centered) velocity field using the current * face-centered (MAC) velocity field and @par->flux to compute the * velocity flux through the faces of each cell. * * For each component of the velocity, before calling the @par->flux * function the face values are first defined (at time t + dt/2) and * can then be used within the @par->flux function. * * "Small" cut cells are treated using a cell-merging approach to * avoid any restrictive CFL stability condition. */ void gfs_centered_velocity_advection_diffusion (GfsDomain * domain, guint dimension, GfsAdvectionParams * par, GfsVariable ** gmac, GfsVariable ** g, GfsFunction * alpha) { FttComponent c; GfsVariable ** v; g_return_if_fail (domain != NULL); g_return_if_fail (par != NULL); g_return_if_fail (gmac != NULL); gfs_domain_timer_start (domain, "centered_velocity_advection_diffusion"); par->use_centered_velocity = FALSE; v = gfs_domain_velocity (domain); par->v = v[0]; face_values_init ((FttCellTraverseFunc) gfs_cell_advected_face_values, par); for (c = 0; c < dimension; c++) { GfsSourceDiffusion * d = source_diffusion (v[c]); par->v = v[c]; if (d) { GfsVariable * rhs; par->fv = rhs = gfs_temporary_variable (domain); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) copy_v_rhs, par); variable_sources (domain, par, rhs, gmac, g); variable_diffusion (domain, d, par, rhs, alpha); gts_object_destroy (GTS_OBJECT (rhs)); } else variable_sources (domain, par, par->v, gmac, g); } for (c = 0; c < dimension; c++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, v[c]); face_values_free (par->v); gfs_domain_timer_stop (domain, "centered_velocity_advection_diffusion"); } /** * gfs_tracer_advection_diffusion: * @domain: a #GfsDomain. * @par: the advection parameters. * @alpha: the specific volume or %NULL. * * Advects the @v field of @par using the current face-centered (MAC) * velocity field. */ void gfs_tracer_advection_diffusion (GfsDomain * domain, GfsAdvectionParams * par, GfsFunction * alpha) { GfsSourceDiffusion * d; g_return_if_fail (domain != NULL); g_return_if_fail (par != NULL); gfs_domain_timer_start (domain, "tracer_advection_diffusion"); if ((d = source_diffusion (par->v))) { GfsVariable * rhs; par->fv = rhs = gfs_temporary_variable (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) copy_v_rhs, par); variable_sources (domain, par, rhs, NULL, NULL); variable_diffusion (domain, d, par, rhs, par->v->component < FTT_DIMENSION ? alpha : NULL); gts_object_destroy (GTS_OBJECT (rhs)); } else { variable_sources (domain, par, par->v, NULL, NULL); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, par->v); } gfs_domain_timer_stop (domain, "tracer_advection_diffusion"); } /** * Generic Surface boundary condition. * \beginobject{GfsSurfaceGenericBc} */ static void gfs_surface_generic_bc_destroy (GtsObject * o) { if (GFS_SURFACE_GENERIC_BC (o)->v) GFS_SURFACE_GENERIC_BC (o)->v->surface_bc = NULL; (* GTS_OBJECT_CLASS (gfs_surface_generic_bc_class ())->parent_class->destroy) (o); } static void gfs_surface_generic_bc_read (GtsObject ** o, GtsFile * fp) { GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); GfsSurfaceGenericBc * bc = GFS_SURFACE_GENERIC_BC (*o); GtsObjectClass * klass; if (GTS_OBJECT_CLASS (gfs_surface_generic_bc_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_surface_generic_bc_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a class name"); return; } if (!(klass = gfs_object_class_from_name (fp->token->str))) { gts_file_error (fp, "unknown class `%s'", fp->token->str); return; } if (!gts_object_class_is_from_class (klass, gfs_surface_generic_bc_class ())) { gts_file_error (fp, "class `%s' is not a GfsSurfaceGenericClass", fp->token->str); return; } gts_file_next_token (fp); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable name"); return; } bc->v = gfs_variable_from_name (domain->variables, fp->token->str); if (!bc->v) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } if (bc->v->surface_bc) { gts_file_error (fp, "variable `%s' already has a surface boundary condition", fp->token->str); return; } bc->v->surface_bc = bc; gts_file_next_token (fp); } static void gfs_surface_generic_bc_write (GtsObject * o, FILE * fp) { if (GTS_OBJECT_CLASS (gfs_surface_generic_bc_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_surface_generic_bc_class ())->parent_class->write) (o, fp); fprintf (fp, "%s %s", o->klass->info.name, GFS_SURFACE_GENERIC_BC (o)->v->name); } static void gfs_surface_generic_bc_class_init (GfsSurfaceGenericBcClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = gfs_surface_generic_bc_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_surface_generic_bc_read; GTS_OBJECT_CLASS (klass)->write = gfs_surface_generic_bc_write; } GfsSurfaceGenericBcClass * gfs_surface_generic_bc_class (void) { static GfsSurfaceGenericBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_surface_generic_bc_info = { "GfsSurfaceGenericBc", sizeof (GfsSurfaceGenericBc), sizeof (GfsSurfaceGenericBcClass), (GtsObjectClassInitFunc) gfs_surface_generic_bc_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_object_class ()), &gfs_surface_generic_bc_info); } return klass; } /** \endobject{GfsSurfaceGenericBc} */ /** * Boundary conditions for diffusion and Poisson equations. * \beginobject{GfsSurfaceBc} */ static void gfs_surface_bc_destroy (GtsObject * object) { gts_object_destroy (GTS_OBJECT (GFS_SURFACE_BC (object)->type)); gts_object_destroy (GTS_OBJECT (GFS_SURFACE_BC (object)->val)); (* GTS_OBJECT_CLASS (gfs_surface_bc_class ())->parent_class->destroy) (object); } static void gfs_surface_bc_read (GtsObject ** o, GtsFile * fp) { GfsSurfaceBc * bc = GFS_SURFACE_BC (*o); if (GTS_OBJECT_CLASS (gfs_surface_bc_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_surface_bc_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (!strcmp (fp->token->str, "Neumann")) { gfs_function_set_constant_value (bc->type, 0.); gts_file_next_token (fp); } else if (!strcmp (fp->token->str, "Dirichlet")) { gfs_function_set_constant_value (bc->type, 1.); gts_file_next_token (fp); } else { gfs_function_read (bc->type, gfs_object_simulation (bc), fp); if (fp->type == GTS_ERROR) return; } gfs_function_read (bc->val, gfs_object_simulation (bc), fp); } static void gfs_surface_bc_write (GtsObject * o, FILE * fp) { GfsSurfaceBc * bc = GFS_SURFACE_BC (o); gdouble val; if (GTS_OBJECT_CLASS (gfs_surface_bc_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_surface_bc_class ())->parent_class->write) (o, fp); if ((val = gfs_function_get_constant_value (bc->type)) < G_MAXDOUBLE) fprintf (fp, " %s", val ? "Dirichlet" : "Neumann"); else gfs_function_write (bc->type, fp); gfs_function_write (bc->val, fp); } static void gfs_surface_bc_bc (FttCell * cell, GfsSurfaceGenericBc * b) { GfsSurfaceBc * bc = GFS_SURFACE_BC (b); if (gfs_function_value (bc->type, cell) > 0.) { /* Dirichlet */ cell->flags |= GFS_FLAG_DIRICHLET; gfs_function_set_units (bc->val, GFS_SURFACE_GENERIC_BC (bc)->v->units); GFS_STATE (cell)->solid->fv = gfs_function_value (bc->val, cell); } else { /* Neumann */ cell->flags &= ~GFS_FLAG_DIRICHLET; gfs_function_set_units (bc->val, GFS_SURFACE_GENERIC_BC (bc)->v->units - 1.); FttVector n; gfs_solid_normal (cell, &n); GFS_STATE (cell)->solid->fv = gfs_function_value (bc->val, cell)*ftt_vector_norm (&n) *pow (ftt_cell_size (cell), FTT_DIMENSION - 1);; } } static void gfs_surface_bc_class_init (GfsSurfaceGenericBcClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_surface_bc_read; GTS_OBJECT_CLASS (klass)->write = gfs_surface_bc_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_surface_bc_destroy; klass->bc = gfs_surface_bc_bc; } static void gfs_surface_bc_init (GfsSurfaceBc * object) { object->type = gfs_function_new (gfs_function_class (), 0.); object->val = gfs_function_new (gfs_function_class (), 0.); } GfsSurfaceGenericBcClass * gfs_surface_bc_class (void) { static GfsSurfaceGenericBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_surface_bc_info = { "GfsSurfaceBc", sizeof (GfsSurfaceBc), sizeof (GfsSurfaceGenericBcClass), (GtsObjectClassInitFunc) gfs_surface_bc_class_init, (GtsObjectInitFunc) gfs_surface_bc_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_surface_generic_bc_class ()), &gfs_surface_bc_info); } return klass; } /** \endobject{GfsSurfaceBc} */ gerris-snapshot-131206/src/timestep.h0000644000175100017510000001207412250371171014460 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __TIMESTEP_H__ #define __TIMESTEP_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "advection.h" #include "poisson.h" #include "variable.h" void gfs_reset_gradients (GfsDomain * domain, guint dimension, GfsVariable ** g); void gfs_correct_normal_velocities (GfsDomain * domain, guint dimension, GfsVariable * p, GfsVariable ** g, gdouble dt); void gfs_scale_gradients (GfsDomain * domain, guint dimension, GfsVariable ** g); void gfs_update_gradients (GfsDomain * domain, GfsVariable * p, GfsFunction * alpha, GfsVariable ** g); void gfs_mac_projection (GfsDomain * domain, GfsMultilevelParams * par, double dt, GfsVariable * p, GfsFunction * alpha, GfsVariable ** g, void (* divergence_hook) (GfsDomain * domain, gdouble dt, GfsVariable * div) ); void gfs_correct_centered_velocities (GfsDomain * domain, guint dimension, GfsVariable ** g, gdouble dt); void gfs_approximate_projection (GfsDomain * domain, GfsMultilevelParams * par, gdouble dt, GfsVariable * p, GfsFunction * alpha, GfsVariable * res, GfsVariable ** g, void (* divergence_hook) (GfsDomain * domain, gdouble dt, GfsVariable * div) ); void gfs_predicted_face_velocities (GfsDomain * domain, guint d, GfsAdvectionParams * par); void gfs_diffusion (GfsDomain * domain, GfsMultilevelParams * par, GfsVariable * v, GfsVariable * rhs, GfsVariable * rhoc, GfsVariable * metric); void gfs_centered_velocity_advection_diffusion (GfsDomain * domain, guint dimension, GfsAdvectionParams * apar, GfsVariable ** gmac, GfsVariable ** g, GfsFunction * alpha); void gfs_add_sinking_velocity (GfsDomain * domain, GfsAdvectionParams * par); void gfs_remove_sinking_velocity (GfsDomain * domain, GfsAdvectionParams * par); void gfs_tracer_advection_diffusion (GfsDomain * domain, GfsAdvectionParams * par, GfsFunction * alpha); void gfs_velocity_face_sources (GfsDomain * domain, GfsVariable ** u, gdouble dt, GfsFunction * alpha, GfsVariable ** g); /* GfsSurfaceGenericBc: Header */ struct _GfsSurfaceGenericBc { /*< private >*/ GtsObject parent; /*< public >*/ GfsVariable * v; }; typedef struct _GfsSurfaceGenericBcClass GfsSurfaceGenericBcClass; struct _GfsSurfaceGenericBcClass { /*< private >*/ GtsObjectClass parent_class; /*< public >*/ void (* bc) (FttCell *, GfsSurfaceGenericBc *); }; #define GFS_SURFACE_GENERIC_BC(obj) GTS_OBJECT_CAST (obj,\ GfsSurfaceGenericBc,\ gfs_surface_generic_bc_class ()) #define GFS_SURFACE_GENERIC_BC_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsSurfaceGenericBcClass,\ gfs_surface_generic_bc_class()) #define GFS_IS_SURFACE_GENERIC_BC(obj) (gts_object_is_from_class (obj,\ gfs_surface_generic_bc_class ())) GfsSurfaceGenericBcClass * gfs_surface_generic_bc_class (void); /* GfsSurfaceBc: Header */ typedef struct _GfsSurfaceBc GfsSurfaceBc; struct _GfsSurfaceBc { /*< private >*/ GfsSurfaceGenericBc parent; /*< public >*/ GfsFunction * type, * val; }; #define GFS_SURFACE_BC(obj) GTS_OBJECT_CAST (obj,\ GfsSurfaceBc,\ gfs_surface_bc_class ()) #define GFS_IS_SURFACE_BC(obj) (gts_object_is_from_class (obj,\ gfs_surface_bc_class ())) GfsSurfaceGenericBcClass * gfs_surface_bc_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __TIMESTEP_H__ */ gerris-snapshot-131206/src/poisson.c0000644000175100017510000014361312250371171014317 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Poisson and diffusion solvers. */ #include #include #include "poisson.h" #include "solid.h" #include "source.h" #include "tension.h" #include "init.h" #include "mpi_boundary.h" /** * gfs_multilevel_params_write: * @par: the multilevel parameters. * @fp: a file pointer. * * Writes in @fp a text representation of the multilevel parameters * @par. */ void gfs_multilevel_params_write (GfsMultilevelParams * par, FILE * fp) { g_return_if_fail (par != NULL); g_return_if_fail (fp != NULL); fprintf (fp, "{\n" " tolerance = %g\n" " nrelax = %u\n" " erelax = %u\n" " minlevel = %u\n" " nitermax = %u\n" " nitermin = %u\n" " weighted = %d\n" " beta = %g\n", par->tolerance, par->nrelax, par->erelax, par->minlevel, par->nitermax, par->nitermin, par->weighted, par->beta); if (par->omega != 1.) fprintf (fp, " omega = %g\n", par->omega); if (par->function) fputs (" function = 1\n", fp); fputc ('}', fp); } void gfs_multilevel_params_init (GfsMultilevelParams * par) { g_return_if_fail (par != NULL); par->tolerance = 1e-3; par->nrelax = 4; par->erelax = 1; par->minlevel = 0; par->nitermax = 100; par->nitermin = 1; par->dimension = FTT_DIMENSION; par->weighted = FALSE; par->beta = 1.; par->omega = 1.; par->function = FALSE; par->poisson_solve = gfs_poisson_solve; } void gfs_multilevel_params_read (GfsMultilevelParams * par, GtsFile * fp) { g_return_if_fail (par != NULL); g_return_if_fail (fp != NULL); GtsFileVariable var[] = { {GTS_DOUBLE, "tolerance", TRUE, &par->tolerance}, {GTS_UINT, "nrelax", TRUE, &par->nrelax}, {GTS_UINT, "erelax", TRUE, &par->erelax}, {GTS_UINT, "minlevel", TRUE, &par->minlevel}, {GTS_UINT, "nitermax", TRUE, &par->nitermax}, {GTS_UINT, "nitermin", TRUE, &par->nitermin}, {GTS_INT, "weighted", TRUE, &par->weighted}, {GTS_DOUBLE, "beta", TRUE, &par->beta}, {GTS_DOUBLE, "omega", TRUE, &par->omega}, {GTS_INT, "function", TRUE, &par->function}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; if (par->tolerance <= 0.) { gts_file_variable_error (fp, var, "tolerance", "tolerance `%g' must be strictly positive", par->tolerance); return; } if (par->nrelax == 0) gts_file_variable_error (fp, var, "nrelax", "nrelax must be non zero"); if (par->erelax == 0) gts_file_variable_error (fp, var, "erelax", "erelax must be non zero"); if (par->beta < 0.5 || par->beta > 1.) gts_file_variable_error (fp, var, "beta", "beta must be in [0.5,1]"); } static gdouble rate (gdouble a, gdouble b, guint n) { if (a > 0. && b > 0. && n > 0) return exp (log (b/a)/n); return 0.; } /** * gfs_multilevel_params_stats_write: * @par: the multilevel parameters. * @fp: a file pointer. * * Writes in @fp the statistics contained in @p. */ void gfs_multilevel_params_stats_write (GfsMultilevelParams * par, FILE * fp) { g_return_if_fail (par != NULL); g_return_if_fail (fp != NULL); fprintf (fp, " niter: %4d\n" " residual.bias: % 10.3e % 10.3e\n" " residual.first: % 10.3e % 10.3e %6.2g\n" " residual.second: % 10.3e % 10.3e %6.2g\n" " residual.infty: % 10.3e % 10.3e %6.2g\n", par->niter, par->residual_before.bias, par->residual.bias, par->residual_before.first, par->residual.first, rate (par->residual.first, par->residual_before.first, par->niter), par->residual_before.second, par->residual.second, rate (par->residual.second, par->residual_before.second, par->niter), par->residual_before.infty, par->residual.infty, rate (par->residual.infty, par->residual_before.infty, par->niter)); } /* GfsLinearProblem: Object */ /** * gfs_linear_problem_new: * @domain: a #GfsDomain. * * Returns: a new #GfsLinearProblem. */ GfsLinearProblem * gfs_linear_problem_new (GfsDomain * domain) { g_return_val_if_fail (domain != NULL, NULL); GfsLinearProblem * lp = g_malloc (sizeof (GfsLinearProblem)); lp->rhs = g_array_new (FALSE, FALSE, sizeof (gdouble)); lp->lhs = g_array_new (FALSE, FALSE, sizeof (gdouble)); lp->LP = g_ptr_array_new (); lp->id = gfs_temporary_variable (domain); lp->neighbor = gfs_temporary_variable (domain); lp->neighborw = gfs_temporary_variable (domain); lp->istart = 0; return lp; } /** * gfs_linear_problem_add_stencil: * @lp: a #GfsLinearProblem. * @stencil: a #GfsStencil. * * Adds a stencil to the linear problem. */ void gfs_linear_problem_add_stencil (GfsLinearProblem * lp, GfsStencil * stencil) { g_return_if_fail (lp != NULL); g_return_if_fail (stencil != NULL); g_ptr_array_add (lp->LP, stencil); } /** * gfs_linear_problem_destroy: * @lp: a #GfsLinearProblem. * * Destroys a #GfsLinearProblem. */ void gfs_linear_problem_destroy (GfsLinearProblem * lp) { g_return_if_fail (lp != NULL); gts_object_destroy (GTS_OBJECT (lp->id)); gts_object_destroy (GTS_OBJECT (lp->neighbor)); gts_object_destroy (GTS_OBJECT (lp->neighborw)); g_array_free (lp->rhs, TRUE); g_array_free (lp->lhs, TRUE); int i; for (i = 0; i < lp->LP->len; i++) gfs_stencil_destroy (g_ptr_array_index (lp->LP, i)); g_ptr_array_free (lp->LP, TRUE); g_free (lp); } typedef struct { GfsLinearProblem * lp; GfsVariable * dia; gint maxlevel; GfsVariable * metric, * rhs; } RelaxStencilParams; static void relax_stencil (FttCell * cell, RelaxStencilParams * p) { GfsGradient g; FttCellNeighbors neighbor; FttCellFace f; GfsGradient ng; GfsStencil * stencil = gfs_stencil_new (cell, p->lp, 0.); g.a = GFS_VALUE (cell, p->dia); f.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) { f.neighbor = neighbor.c[f.d]; if (f.neighbor) { gfs_face_weighted_gradient_stencil (&f, &ng, p->maxlevel, p->lp, stencil); g.a += ng.a; } } if (g.a != 0.) gfs_stencil_add_element (stencil, cell, p->lp, -g.a); else { gfs_stencil_destroy (stencil); stencil = gfs_stencil_new (cell, p->lp, 1.); g_array_index (p->lp->rhs, gdouble, (gint) GFS_VALUE (cell, p->lp->id)) = 0.; } gfs_linear_problem_add_stencil (p->lp, stencil); } static void relax_dirichlet_stencil (FttCell * cell, RelaxStencilParams * p) { GfsGradient g; FttCellNeighbors neighbor; FttCellFace f; GfsGradient ng; GfsVariable * id = p->lp->id; GfsStencil * stencil = gfs_stencil_new (cell, p->lp, 0.); g.a = GFS_VALUE (cell, p->dia); if (GFS_IS_MIXED (cell) && ((cell)->flags & GFS_FLAG_DIRICHLET) != 0) { g.b = gfs_cell_dirichlet_gradient_flux_stencil (cell, p->maxlevel, 0., p->lp, stencil); /* Dirichlet contribution */ g_array_index (p->lp->lhs, gdouble, (gint) GFS_VALUE (cell, id)) -= g.b; } f.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) { f.neighbor = neighbor.c[f.d]; gfs_face_cm_weighted_gradient_stencil (&f, &ng, p->maxlevel, p->lp, stencil); g.a += ng.a; } if (g.a != 0.) gfs_stencil_add_element (stencil, cell, p->lp, -g.a); else { gfs_stencil_destroy (stencil); stencil = gfs_stencil_new (cell, p->lp, 1.); g_array_index (p->lp->rhs, gdouble, (gint) GFS_VALUE (cell, id)) = 0.; } gfs_linear_problem_add_stencil (p->lp, stencil); } typedef struct { GfsLinearProblem * lp; GfsVariable * lhs, * rhs; guint nleafs; gint maxlevel; FttFaceTraverseFunc bc_number; } NumberingParams; static void leaves_numbering (FttCell * cell, NumberingParams * p) { GFS_VALUE (cell, p->lp->id) = p->nleafs++; GFS_DOUBLE_TO_POINTER (GFS_VALUE (cell, p->lp->neighbor)) = NULL; g_array_append_val (p->lp->lhs, GFS_VALUE (cell, p->lhs)); g_array_append_val (p->lp->rhs, GFS_VALUE (cell, p->rhs)); } static void bc_number (FttCellFace * f, NumberingParams * p) { /* rhs = 0 as all boundary conditions are homogeneous */ GFS_VALUE (f->cell, p->rhs) = 0.; g_array_append_val (p->lp->lhs, GFS_VALUE (f->cell, p->lhs)); g_array_append_val (p->lp->rhs, GFS_VALUE (f->cell, p->rhs)); GFS_VALUE (f->cell, p->lp->id) = p->nleafs++; } static void reset_bc (FttCellFace * f, GfsLinearProblem * lp) { GFS_VALUE (f->cell, lp->id) = -1; GFS_DOUBLE_TO_POINTER (GFS_VALUE (f->cell, lp->neighbor)) = NULL; } static void box_reset_bc (GfsBox * box, GfsLinearProblem * lp) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d]) && !GFS_IS_BOUNDARY_PERIODIC (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); ftt_face_traverse_boundary (b->root, b->d, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) reset_bc, lp); } } #ifdef HAVE_MPI static void set_mpi_domain_index (GfsDomain * domain, GfsLinearProblem * lp) { int gsize, i; guint * mpi_domain_index; MPI_Comm_size (MPI_COMM_WORLD, &gsize); mpi_domain_index = g_malloc (sizeof (guint)*gsize); MPI_Allgather (&lp->rhs->len, 1, MPI_UNSIGNED, mpi_domain_index, 1, MPI_UNSIGNED, MPI_COMM_WORLD); lp->istart = 0; for (i = 0; i < domain->pid; i++) lp->istart += mpi_domain_index[i]; g_free (mpi_domain_index); } static void leaves_renumbering (FttCell * cell, NumberingParams * p) { GFS_VALUE (cell, p->lp->id) = p->nleafs++; } #endif /* HAVE_MPI */ typedef struct { GfsVariable * lhs; gboolean dirichlet; } CompatPar; static void check_box_dirichlet (GfsBox * box, CompatPar * p) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); GfsBc * bc = gfs_boundary_lookup_bc (b, p->lhs); if (GFS_IS_BC_DIRICHLET (bc)) { p->dirichlet = TRUE; return; } } } static void cell_numbering (GfsDomain * domain, GfsLinearProblem * lp, GfsVariable * rhs, GfsVariable * lhs, gint maxlevel) { /* fixme: should it be FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS */ NumberingParams np = { lp, lhs, rhs, 0, maxlevel, (FttFaceTraverseFunc) bc_number }; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, maxlevel, (FttCellTraverseFunc) leaves_numbering, &np); #ifdef HAVE_MPI /* Renumbering of the different subdomains for parallel simulations */ if (domain->pid >= 0) { set_mpi_domain_index (domain, lp); np.nleafs = lp->istart; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, maxlevel, (FttCellTraverseFunc) leaves_renumbering, &np); } #endif /* HAVE_MPI */ gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, maxlevel, lp->id); } /** * gfs_get_poisson_problem: * @domain: the domain over which the poisson problem is defined * @rhs: the variable to use as right-hand side * @lhs: the variable to use as left-hand side * @dia: the diagonal weight * @maxlevel: the maximum level to consider (or -1). * @v: a #GfsVariable of which @lhs is an homogeneous version. * * Extracts the poisson problem associated with @lhs and @rhs. * * Returns: a #GfsLinearProblem. */ GfsLinearProblem * gfs_get_poisson_problem (GfsDomain * domain, GfsVariable * rhs, GfsVariable * lhs, GfsVariable * dia, gint maxlevel, GfsVariable * v) { gfs_domain_timer_start (domain, "get_poisson_problem"); GfsLinearProblem * lp = gfs_linear_problem_new (domain); cell_numbering (domain, lp, rhs, lhs, maxlevel); /* Create stencils on the fly */ RelaxStencilParams p = { lp, dia, maxlevel }; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_reset_bc, lp); gfs_domain_homogeneous_bc_stencil (domain, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS, maxlevel, lhs, v, lp); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS, maxlevel, (FttCellTraverseFunc) (v->centered ? relax_stencil: relax_dirichlet_stencil), &p); /* If Neumann conditions are applied everywhere, the solution is defined to within a constant so we need to remove one degree of freedom to make the solution unique, assuming that the domain is simply connected... */ if (v->centered && /* fixme: this seems to reduce the convergence speed for pure Poisson problems */ !GFS_IS_POISSON (domain)) { /* check whether any boundary has a Dirichlet condition on @v */ CompatPar p = { v, FALSE }; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) check_box_dirichlet, &p); gfs_all_reduce (domain, p.dirichlet, MPI_INT, MPI_MAX); if (!p.dirichlet) { /* impose P = 0 for one unknown of the system */ int i; for (i = 0; i < lp->rhs->len; i++) { GfsStencil * stencil = g_ptr_array_index (lp->LP, i); if (g_array_index (stencil->id, int, 0) == 0) { stencil->id->len = 1; stencil->coeff->len = 1; g_array_index (stencil->coeff, double, 0) = -1.; g_array_index (lp->rhs, double, i) = 0.; } else { int j, ncols = stencil->id->len; for (j = 0; j < ncols; j++) if (g_array_index (stencil->id, int, j) == 0) g_array_index (stencil->coeff, double, j) = 0.; } } } } gfs_domain_timer_stop (domain, "get_poisson_problem"); return lp; } typedef struct { guint u, rhs, dia, res; gint maxlevel; gdouble beta, omega; guint metric; } RelaxParams; /* relax_stencil() needs to be updated whenever this * function is modified */ static void relax (FttCell * cell, RelaxParams * p) { GfsGradient g; FttCellNeighbors neighbor; FttCellFace f; GfsGradient ng; g.a = GFS_VALUEI (cell, p->dia); g.b = 0.; f.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) { f.neighbor = neighbor.c[f.d]; if (f.neighbor) { gfs_face_weighted_gradient (&f, &ng, p->u, p->maxlevel); g.a += ng.a; g.b += ng.b; } } if (g.a != 0.) GFS_VALUEI (cell, p->u) = (g.b - GFS_VALUEI (cell, p->rhs))/g.a; else GFS_VALUEI (cell, p->u) = 0.; } static void relax2D (FttCell * cell, RelaxParams * p) { GfsGradient g; FttCellNeighbors neighbor; FttCellFace f; GfsGradient ng; g.a = GFS_VALUEI (cell, p->dia); g.b = 0.; f.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (f.d = 0; f.d < FTT_NEIGHBORS_2D; f.d++) { f.neighbor = neighbor.c[f.d]; if (f.neighbor) { gfs_face_weighted_gradient_2D (&f, &ng, p->u, p->maxlevel); g.a += ng.a; g.b += ng.b; } } if (g.a != 0.) GFS_VALUEI (cell, p->u) = (1. - p->omega)*GFS_VALUEI (cell, p->u) + p->omega*(g.b - GFS_VALUEI (cell, p->rhs))/g.a; else GFS_VALUEI (cell, p->u) = 0.; } /* relax_dirichlet_stencil() needs to be updated whenever this function is modified */ static void relax_dirichlet (FttCell * cell, RelaxParams * p) { GfsGradient g; FttCellNeighbors neighbor; FttCellFace f; GfsGradient ng; g.a = GFS_VALUEI (cell, p->dia); if (GFS_IS_MIXED (cell) && ((cell)->flags & GFS_FLAG_DIRICHLET) != 0) g.b = gfs_cell_dirichlet_gradient_flux (cell, p->u, p->maxlevel, 0.); else g.b = 0.; f.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) { f.neighbor = neighbor.c[f.d]; gfs_face_cm_weighted_gradient (&f, &ng, p->u, p->maxlevel); g.a += ng.a; g.b += ng.b; } if (g.a != 0.) GFS_VALUEI (cell, p->u) = (g.b - GFS_VALUEI (cell, p->rhs))/g.a; else GFS_VALUEI (cell, p->u) = 0.; } /** * gfs_relax: * @domain: the domain to relax. * @d: number of dimensions (2 or 3). * @max_depth: the maximum depth of the domain to relax. * @omega: the over-relaxation parameter. * @u: the variable to use as left-hand side. * @rhs: the variable to use as right-hand side. * @dia: the diagonal weight. * * Apply one pass of a Jacobi relaxation to all the leaf cells of * @domain with a level inferior or equal to @max_depth and to all the * cells at level @max_depth. The relaxation should converge (if the * right-hand-side @rhs verifies the solvability conditions) toward * the solution of a Poisson equation for @u at the maximum depth. */ void gfs_relax (GfsDomain * domain, guint d, gint max_depth, gdouble omega, GfsVariable * u, GfsVariable * rhs, GfsVariable * dia) { RelaxParams p; g_return_if_fail (domain != NULL); g_return_if_fail (d > 1 && d <= 3); g_return_if_fail (u != NULL); g_return_if_fail (rhs != NULL); g_return_if_fail (dia != NULL); p.u = u->i; p.rhs = rhs->i; p.dia = dia->i; p.maxlevel = max_depth; p.omega = omega; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS, max_depth, (FttCellTraverseFunc) (u->centered ? (d == 2 ? relax2D : relax) : relax_dirichlet), &p); } static void residual_set (FttCell * cell, RelaxParams * p) { GfsGradient g; FttCellNeighbors neighbor; FttCellFace f; GfsGradient ng; g.a = GFS_VALUEI (cell, p->dia); g.b = 0.; f.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) { f.neighbor = neighbor.c[f.d]; if (f.neighbor) { gfs_face_weighted_gradient (&f, &ng, p->u, p->maxlevel); g.a += ng.a; g.b += ng.b; } } GFS_VALUEI (cell, p->res) = GFS_VALUEI (cell, p->rhs) - (g.b - GFS_VALUEI (cell, p->u)*g.a); } static void residual_set2D (FttCell * cell, RelaxParams * p) { GfsGradient g; FttCellNeighbors neighbor; FttCellFace f; GfsGradient ng; g.a = GFS_VALUEI (cell, p->dia); g.b = 0.; f.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (f.d = 0; f.d < FTT_NEIGHBORS_2D; f.d++) { f.neighbor = neighbor.c[f.d]; if (f.neighbor) { gfs_face_weighted_gradient_2D (&f, &ng, p->u, p->maxlevel); g.a += ng.a; g.b += ng.b; } } GFS_VALUEI (cell, p->res) = GFS_VALUEI (cell, p->rhs) - (g.b - GFS_VALUEI (cell, p->u)*g.a); } static void residual_set_dirichlet (FttCell * cell, RelaxParams * p) { GfsGradient g; FttCellNeighbors neighbor; FttCellFace f; GfsGradient ng; g.a = GFS_VALUEI (cell, p->dia); if (GFS_IS_MIXED (cell) && ((cell)->flags & GFS_FLAG_DIRICHLET) != 0) g.b = gfs_cell_dirichlet_gradient_flux (cell, p->u, p->maxlevel, GFS_STATE (cell)->solid->fv); else g.b = 0.; f.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) { f.neighbor = neighbor.c[f.d]; gfs_face_cm_weighted_gradient (&f, &ng, p->u, p->maxlevel); g.a += ng.a; g.b += ng.b; } GFS_VALUEI (cell, p->res) = GFS_VALUEI (cell, p->rhs) - (g.b - GFS_VALUEI (cell, p->u)*g.a); } /** * gfs_residual: * @domain: a domain. * @d: number of dimensions (2 or 3). * @flags: which types of cells are to be visited. * @max_depth: maximum depth of the traversal. * @u: the variable to use as left-hand side. * @rhs: the variable to use as right-hand side. * @dia: the diagonal weight. * @res: the variable to use to store the residual. * * For each cell of @domain, computes the sum of the residual over * the volume of the cell for a Poisson equation with @u as * left-hand-side and @rhs as right-hand-side. Stores the result in * @res. */ void gfs_residual (GfsDomain * domain, guint d, FttTraverseFlags flags, gint max_depth, GfsVariable * u, GfsVariable * rhs, GfsVariable * dia, GfsVariable * res) { RelaxParams p; g_return_if_fail (domain != NULL); g_return_if_fail (d > 1 && d <= 3); g_return_if_fail (u != NULL); g_return_if_fail (rhs != NULL); g_return_if_fail (dia != NULL); g_return_if_fail (res != NULL); p.u = u->i; p.rhs = rhs->i; p.dia = dia->i; p.res = res->i; p.maxlevel = max_depth; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, max_depth, (FttCellTraverseFunc) (u->centered ? (d == 2 ? residual_set2D : residual_set) : residual_set_dirichlet), &p); } typedef struct { gdouble lambda2[FTT_DIMENSION]; GfsFunction * alpha; GfsDomain * domain; gboolean positive; } PoissonCoeff; static void reset_coeff (FttCell * cell, PoissonCoeff * p) { FttDirection d; GfsFaceStateVector * f = GFS_STATE (cell)->f; if (GFS_IS_MIXED (cell)) { FttVector v = {0.,0.,0.}; GFS_STATE (cell)->solid->v = v; } for (d = 0; d < FTT_NEIGHBORS; d++) f[d].v = 0.; } static void poisson_coeff (FttCellFace * face, PoissonCoeff * p) { gdouble alpha = p->alpha ? gfs_function_face_value (p->alpha, face) : 1.; gdouble v = p->lambda2[face->d/2]*alpha*gfs_domain_face_fraction (p->domain, face)/ gfs_domain_face_scale_metric (p->domain, face, face->d/2); if (alpha <= 0. && p->positive) { FttVector p; ftt_face_pos (face, &p); g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "alpha is negative (%g) at face (%g,%g,%g).\n" "Please check your definition.", alpha, p.x, p.y, p.z); } GFS_STATE (face->cell)->f[face->d].v += v; switch (ftt_face_type (face)) { case FTT_FINE_FINE: GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].v += v; break; case FTT_FINE_COARSE: GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].v += v/FTT_CELLS_DIRECTION (face->d); break; default: g_assert_not_reached (); } } static void poisson_mixed_coeff (FttCell * cell, PoissonCoeff * p) { if (GFS_IS_MIXED (cell)) { gdouble alpha = p->alpha ? gfs_function_value (p->alpha, cell) : 1.; if (((cell)->flags & GFS_FLAG_DIRICHLET) == 0) /* Neumann condition (prescribed flux) */ GFS_STATE (cell)->solid->v.x += alpha; else { /* Dirichlet */ GfsSolidVector * s = GFS_STATE (cell)->solid; FttVector m = {1.,1.,1.}; gfs_domain_solid_metric (p->domain, cell, &m); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&s->v.x)[c] += alpha*(&m.x)[c]*(s->s[2*c + 1] - s->s[2*c]); } if (alpha <= 0. && p->positive) { FttVector p; ftt_cell_pos (cell, &p); g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "alpha is negative (%g) at cell (%g,%g,%g).\n" "Please check your definition.", alpha, p.x, p.y, p.z); } } } static void face_coeff_from_below (FttCell * cell) { FttDirection d; GfsFaceStateVector * f = GFS_STATE (cell)->f; guint neighbors = 0; for (d = 0; d < FTT_NEIGHBORS; d++) { FttCellChildren child; guint i, n; f[d].v = 0.; n = ftt_cell_children_direction (cell, d, &child); for (i = 0; i < n; i++) if (child.c[i]) f[d].v += GFS_STATE (child.c[i])->f[d].v; f[d].v /= n; /* fixme: this stuff may not be necessary anymore? The 'dumbell' test case seems to work fine without this */ FttCell * neighbor; if (f[d].v != 0. && (neighbor = ftt_cell_neighbor (cell, d)) && !GFS_CELL_IS_BOUNDARY (neighbor)) neighbors++; } if (neighbors == 1) for (d = 0; d < FTT_NEIGHBORS; d++) f[d].v = 0.; } /** * gfs_poisson_coefficients: * @domain: a #GfsDomain. * @alpha: the inverse of density or %NULL. * @positive: if %TRUE, @alpha must be strictly positive. * @centered: %TRUE if solving for a centered variable. * @reset: %TRUE if resetting previous coefficients. * * Initializes the face coefficients for the Poisson equation * \f$\nabla\cdot\alpha\nabla p=\dots\f$. * * If @alpha is %NULL, it is taken to be unity. */ void gfs_poisson_coefficients (GfsDomain * domain, GfsFunction * alpha, gboolean positive, gboolean centered, gboolean reset) { PoissonCoeff p; FttComponent i; g_return_if_fail (domain != NULL); for (i = 0; i < FTT_DIMENSION; i++) { gdouble lambda = (&domain->lambda.x)[i]; p.lambda2[i] = lambda*lambda; } p.alpha = alpha; p.domain = domain; p.positive = positive; if (reset) gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) reset_coeff, &p); if (!centered) gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) poisson_mixed_coeff, &p); gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) poisson_coeff, &p); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) face_coeff_from_below, NULL); } static void tension_coeff (FttCellFace * face, gpointer * data) { gdouble * lambda2 = data[0]; GfsSourceTensionGeneric * t = data[1]; GfsVariable * kappa = GFS_SOURCE_TENSION (data[1])->k; gdouble alpha = data[2] ? gfs_function_face_value (data[2], face) : 1.; gdouble v = lambda2[face->d/2]*alpha*gfs_domain_face_fraction (kappa->domain, face)* gfs_function_face_value (t->sigma, face); gdouble k1 = GFS_VALUE (face->cell, kappa); gdouble k2 = GFS_VALUE (face->neighbor, kappa); #if 0 gdouble c1 = GFS_VALUE (face->cell, t->c); gdouble c2 = GFS_VALUE (face->neighbor, t->c); gdouble w1 = c1*(1. - c1); gdouble w2 = c2*(1. - c2); if (w1 + w2 > 0.) v *= (w1*k1 + w2*k2)/(w1 + w2); else #endif { if (k1 < G_MAXDOUBLE) { if (k2 < G_MAXDOUBLE) v *= (k1 + k2)/2.; else v *= k1; } else if (k2 < G_MAXDOUBLE) v *= k2; else /* the curvature is undefined: we assume that this is because we are far enough from the interface and thus that the surface tension force is zero */ v = 0.; } if (alpha <= 0.) { FttVector p; ftt_face_pos (face, &p); g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "alpha is negative (%g) at face (%g,%g,%g).\n" "Please check your definition.", alpha, p.x, p.y, p.z); } GFS_STATE (face->cell)->f[face->d].v = v; switch (ftt_face_type (face)) { case FTT_FINE_FINE: GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].v = v; break; case FTT_FINE_COARSE: GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].v = G_MAXDOUBLE; break; default: g_assert_not_reached (); } } /** * gfs_source_tension_coefficients: * @s: a #GfsSourceTension. * @domain: a #GfsDomain. * @alpha: the inverse of density or %NULL. * * Initializes the face coefficients with the surface tension term * (interface curvature times surface tension coefficient). * * If @alpha is %NULL, it is taken to be unity. */ void gfs_source_tension_coefficients (GfsSourceTension * s, GfsDomain * domain, GfsFunction * alpha) { gdouble lambda2[FTT_DIMENSION]; gpointer data[3]; FttComponent i; g_return_if_fail (s != NULL); g_return_if_fail (domain != NULL); for (i = 0; i < FTT_DIMENSION; i++) { gdouble lambda = (&domain->lambda.x)[i]; lambda2[i] = lambda*lambda; } gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) reset_coeff, NULL); data[0] = lambda2; data[1] = s; data[2] = alpha; gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) tension_coeff, data); } static void correct (FttCell * cell, gpointer * data) { GfsVariable * u = data[0]; GfsVariable * dp = data[1]; GFS_VALUE (cell, u) += GFS_VALUE (cell, dp); } static void get_from_above (FttCell * parent, GfsVariable * v) { guint level = ftt_cell_level (parent); FttCellNeighbors n; FttCellChildren child; FttComponent c; FttVector h; guint i; ftt_cell_neighbors (parent, &n); for (c = 0; c < FTT_DIMENSION; c++) { FttCellFace f; GfsGradient g; gdouble g1, g2; f.cell = parent; f.d = 2*c; f.neighbor = n.c[f.d]; gfs_face_gradient (&f, &g, v->i, level); g1 = g.b - g.a*GFS_VALUE (parent, v); f.d = 2*c + 1; f.neighbor = n.c[f.d]; gfs_face_gradient (&f, &g, v->i, level); g2 = g.b - g.a*GFS_VALUE (parent, v); (&h.x)[c] = (g1 - g2)/2.; } ftt_cell_children (parent, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { FttVector p; GFS_VALUE (child.c[i], v) = GFS_VALUE (parent, v); ftt_cell_relative_pos (child.c[i], &p); for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (child.c[i], v) += (&p.x)[c]*(&h.x)[c]; } } static void get_from_below_3D (FttCell * cell, const GfsVariable * v) { gdouble val = 0.; guint i; FttCellChildren child; ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) val += GFS_VALUE (child.c[i], v); GFS_VALUE (cell, v) = val/2.; } static void get_from_below_2D (FttCell * cell, const GfsVariable * v) { gdouble val = 0.; guint i; FttCellChildren child; ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) val += GFS_VALUE (child.c[i], v); GFS_VALUE (cell, v) = val; } static void relax_loop (GfsDomain * domain, GfsVariable * dp, GfsVariable * u, RelaxParams * q, guint nrelax, FttCellTraverseFunc relaxfunc) { guint n; gfs_domain_homogeneous_bc (domain, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS, q->maxlevel, dp, u); for (n = 0; n < nrelax - 1; n++) gfs_traverse_and_homogeneous_bc (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS, q->maxlevel, relaxfunc, q, dp, u); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS, q->maxlevel, relaxfunc, q); } /** * gfs_poisson_cycle: * @domain: the domain on which to solve the Poisson equation. * @p: the #GfsMultilevelParams. * @u: the variable to use as left-hand side. * @rhs: the variable to use as right-hand side. * @dia: the diagonal weight. * @res: the residual. * * Apply one multigrid iteration to the Poisson equation defined by @u * and @rhs. * * The initial value of @res on the leaves of @root must be set to * the residual of the Poisson equation (using gfs_residual()). * * The face coefficients must be set using gfs_poisson_coefficients(). * * The values of @u on the leaf cells are updated as well as the values * of @res (i.e. the cell tree is ready for another iteration). */ void gfs_poisson_cycle (GfsDomain * domain, GfsMultilevelParams * p, GfsVariable * u, GfsVariable * rhs, GfsVariable * dia, GfsVariable * res) { guint l, nrelax, minlevel; GfsVariable * dp; gpointer data[2]; g_return_if_fail (domain != NULL); g_return_if_fail (p != NULL); g_return_if_fail (p->dimension > 1 && p->dimension <= 3); g_return_if_fail (u != NULL); g_return_if_fail (rhs != NULL); g_return_if_fail (dia != NULL); g_return_if_fail (res != NULL); dp = gfs_temporary_variable (domain); minlevel = MAX (domain->rootlevel, p->minlevel); /* compute residual on non-leafs cells */ gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) (p->dimension == 2 ? get_from_below_2D : get_from_below_3D), res); /* relax top level */ nrelax = p->nrelax; for (l = minlevel; l < p->depth; l++) nrelax *= p->erelax; RelaxParams q; q.u = dp->i; q.rhs = res->i; q.dia = dia->i; q.maxlevel = minlevel; q.omega = p->omega; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS, q.maxlevel, (FttCellTraverseFunc) gfs_cell_reset, dp); FttCellTraverseFunc relaxfunc = (FttCellTraverseFunc) (u->centered ? (p->dimension == 2 ? relax2D : relax) : relax_dirichlet); relax_loop (domain, dp, u, &q, nrelax, relaxfunc); nrelax /= p->erelax; /* relax from top to bottom */ for (q.maxlevel = minlevel + 1; q.maxlevel <= p->depth; q.maxlevel++, nrelax /= p->erelax) { /* get initial guess from coarser grid */ gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_NON_LEAFS, q.maxlevel - 1, (FttCellTraverseFunc) get_from_above, dp); relax_loop (domain, dp, u, &q, nrelax, relaxfunc); } /* correct on leaf cells */ data[0] = u; data[1] = dp; gfs_traverse_and_bc (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) correct, data, u, u); /* compute new residual on leaf cells */ gfs_residual (domain, p->dimension, FTT_TRAVERSE_LEAFS, -1, u, rhs, dia, res); gts_object_destroy (GTS_OBJECT (dp)); } /** * gfs_poisson_compatibility: * @domain: the domain over which the poisson problem is solved. * @lhs: the variable to use as left-hand side. * @rhs: the variable to use as right-hand side. * @dt: the timestep. * * Returns: the absolute value of the compatibility condition for a * Poisson equation using @lhs as left-hand-side and @rhs as * right-hand-side. */ gdouble gfs_poisson_compatibility (GfsDomain * domain, GfsVariable * lhs, GfsVariable * rhs, gdouble dt) { g_return_val_if_fail (domain != NULL, 0.); g_return_val_if_fail (lhs != NULL, 0.); g_return_val_if_fail (rhs != NULL, 0.); /* check whether any boundary has a Dirichlet condition on @lhs */ CompatPar p = { lhs, FALSE }; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) check_box_dirichlet, &p); gfs_all_reduce (domain, p.dirichlet, MPI_INT, MPI_MAX); if (p.dirichlet) /* Assumes that the domain is simply connected in which case compatibility is guaranteed */ return 0.; /* compute volume integral of right-hand-side (again we assume that the domain is simply connected) */ return fabs (gfs_domain_norm_residual (domain, FTT_TRAVERSE_LEAFS, -1, dt, rhs).bias); } /** * gfs_poisson_solve: * @domain: the domain over which the poisson problem is solved. * @par: the parameters of the poisson problem. * @lhs: the variable to use as left-hand side. * @rhs: the variable to use as right-hand side. * @res: the variable in which to store the residual * @dia: the diagonal weight. * @dt: the length of the time-step. * * Solves the poisson problem over domain using Gerris' native * multigrid poisson solver. */ void gfs_poisson_solve (GfsDomain * domain, GfsMultilevelParams * par, GfsVariable * lhs, GfsVariable * rhs, GfsVariable * res, GfsVariable * dia, gdouble dt) { g_return_if_fail (domain != NULL); g_return_if_fail (par != NULL); g_return_if_fail (lhs != NULL); g_return_if_fail (rhs != NULL); g_return_if_fail (res != NULL); g_return_if_fail (dia != NULL); gfs_domain_timer_start (domain, "poisson_solve"); guint minlevel = par->minlevel; par->depth = gfs_domain_depth (domain); par->niter = 0; /* calculates the initial residual and its norm */ gfs_residual (domain, par->dimension, FTT_TRAVERSE_LEAFS, -1, lhs, rhs, dia, res); par->residual_before = par->residual = gfs_domain_norm_residual (domain, FTT_TRAVERSE_LEAFS, -1, dt, res); gdouble res_max_before = par->residual.infty; while (par->niter < par->nitermin || (par->residual.infty > par->tolerance && par->niter < par->nitermax)) { /* Does one iteration */ gfs_poisson_cycle (domain, par, lhs, rhs, dia, res); par->residual = gfs_domain_norm_residual (domain, FTT_TRAVERSE_LEAFS, -1, dt, res); if (par->residual.infty == res_max_before) /* convergence has stopped!! */ break; if (par->residual.infty > res_max_before/1.1 && par->minlevel < par->depth) par->minlevel++; res_max_before = par->residual.infty; par->niter++; } par->minlevel = minlevel; gfs_domain_timer_stop (domain, "poisson_solve"); } typedef struct { GfsSourceDiffusion * d; gdouble lambda2[FTT_DIMENSION]; gdouble dt; GfsVariable * rhoc, * metric; GfsFunction * alpha; GfsDomain * domain; } DiffusionCoeff; static void diffusion_coef (FttCellFace * face, DiffusionCoeff * c) { gdouble v = c->lambda2[face->d/2]*c->dt* gfs_source_diffusion_face (c->d, face)* gfs_domain_face_fraction (c->domain, face)/ gfs_domain_face_scale_metric (c->domain, face, face->d/2); GFS_STATE (face->cell)->f[face->d].v = v; switch (ftt_face_type (face)) { case FTT_FINE_FINE: GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].v = v; break; case FTT_FINE_COARSE: GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].v += v/FTT_CELLS_DIRECTION (face->d); break; default: g_assert_not_reached (); } } static void diffusion_mixed_coeff (FttCell * cell, DiffusionCoeff * c) { reset_coeff (cell, NULL); if (GFS_IS_MIXED (cell)) { gdouble diffusion = c->dt*gfs_source_diffusion_cell (c->d, cell); if (((cell)->flags & GFS_FLAG_DIRICHLET) == 0) /* Neumann condition (prescribed flux) */ GFS_STATE (cell)->solid->v.x = diffusion; else { /* Dirichlet */ GfsSolidVector * s = GFS_STATE (cell)->solid; FttVector m = {1.,1.,1.}; gfs_domain_solid_metric (c->domain, cell, &m); FttComponent i; for (i = 0; i < FTT_DIMENSION; i++) (&s->v.x)[i] = diffusion*(&m.x)[i]*(s->s[2*i + 1] - s->s[2*i]); } } if (c->rhoc) { gdouble rho = c->alpha ? 1./gfs_function_value (c->alpha, cell) : 1.; if (rho <= 0.) { FttVector p; ftt_cell_pos (cell, &p); g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "density is negative (%g) at cell (%g,%g,%g).\n" "Please check your definition of alpha.", rho, p.x, p.y, p.z); } GFS_VALUE (cell, c->rhoc) = rho*gfs_domain_cell_fraction (c->domain, cell); } } static void viscous_metric_coeff (FttCell * cell, DiffusionCoeff * c) { GFS_VALUE (cell, c->metric) = c->dt* gfs_source_diffusion_cell (c->d, cell)* (* c->domain->viscous_metric_implicit) (c->domain, cell, c->metric->component) *gfs_domain_cell_fraction (c->domain, cell) /GFS_VALUE (cell, c->rhoc); } /** * gfs_diffusion_coefficients: * @domain: a #GfsDomain. * @d: a #GfsSourceDiffusion. * @dt: the time-step. * @rhoc: where to store the mass. * @metric: where to store the implicit metric term (or %NULL). * @alpha: the inverse of density or %NULL. * @beta: the implicitness parameter (0.5 Crank-Nicholson, 1. backward Euler). * * Initializes the face coefficients for the diffusion equation. */ void gfs_diffusion_coefficients (GfsDomain * domain, GfsSourceDiffusion * d, gdouble dt, GfsVariable * rhoc, GfsVariable * metric, GfsFunction * alpha, gdouble beta) { DiffusionCoeff coef; FttComponent i; g_return_if_fail (domain != NULL); g_return_if_fail (d != NULL); g_return_if_fail (beta >= 0.5 && beta <= 1.); for (i = 0; i < FTT_DIMENSION; i++) { gdouble lambda = (&domain->lambda.x)[i]; coef.lambda2[i] = lambda*lambda; } coef.d = d; coef.dt = beta*dt; coef.rhoc = rhoc; coef.alpha = alpha; coef.domain = domain; coef.metric = metric; gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) diffusion_mixed_coeff, &coef); if (coef.metric && coef.rhoc) gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) viscous_metric_coeff, &coef); gfs_restore_fpe_for_function (alpha); gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) diffusion_coef, &coef); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) face_coeff_from_below, NULL); } static void diffusion_rhs (FttCell * cell, RelaxParams * p) { gdouble f, h, val; FttCellNeighbors neighbor; FttCellFace face; if (GFS_IS_MIXED (cell)) { GfsSolidVector * solid = GFS_STATE (cell)->solid; if (((cell)->flags & GFS_FLAG_DIRICHLET) != 0) f = gfs_cell_dirichlet_gradient_flux (cell, p->u, -1, solid->fv); else f = solid->fv*solid->v.x; } else f = 0.; /* Neumann condition by default */ h = ftt_cell_size (cell); val = GFS_VALUEI (cell, p->u); face.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (face.d = 0; face.d < FTT_NEIGHBORS; face.d++) { GfsGradient g; face.neighbor = neighbor.c[face.d]; gfs_face_cm_weighted_gradient (&face, &g, p->u, -1); f += g.b - g.a*val; } GFS_VALUEI (cell, p->rhs) += p->beta*f/(h*h*GFS_VALUEI (cell, p->dia)); if (p->metric) GFS_VALUEI (cell, p->rhs) -= val*p->beta*GFS_VALUEI (cell, p->metric); } /** * gfs_diffusion_rhs: * @domain: a #GfsDomain. * @v: a #GfsVariable. * @rhs: a #GfsVariable. * @rhoc: the mass. * @metric: the metric term. * @beta: the implicitness parameter (0.5 Crank-Nicholson, 1. backward Euler). * * Adds to the @rhs variable of @cell the right-hand side of the * diffusion equation for variable @v. * * The diffusion coefficients must have been already set using * gfs_diffusion_coefficients(). */ void gfs_diffusion_rhs (GfsDomain * domain, GfsVariable * v, GfsVariable * rhs, GfsVariable * rhoc, GfsVariable * metric, gdouble beta) { RelaxParams p; g_return_if_fail (domain != NULL); g_return_if_fail (v != NULL); g_return_if_fail (rhs != NULL); g_return_if_fail (rhoc != NULL); g_return_if_fail (beta >= 0.5 && beta <= 1.); p.u = v->i; p.rhs = rhs->i; p.dia = rhoc->i; p.beta = (1. - beta)/beta; p.metric = metric ? metric->i : FALSE; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) diffusion_rhs, &p); } /* diffusion_relax_stencil() needs to be updated whenever this function is modified */ static void diffusion_relax (FttCell * cell, RelaxParams * p) { GfsGradient g = { 0., 0. }; gdouble h = ftt_cell_size (cell); FttCellNeighbors neighbor; FttCellFace face; if (GFS_IS_MIXED (cell) && ((cell)->flags & GFS_FLAG_DIRICHLET) != 0) g.b = gfs_cell_dirichlet_gradient_flux (cell, p->u, p->maxlevel, 0.); face.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (face.d = 0; face.d < FTT_NEIGHBORS; face.d++) { GfsGradient ng; face.neighbor = neighbor.c[face.d]; gfs_face_cm_weighted_gradient (&face, &ng, p->u, p->maxlevel); g.a += ng.a; g.b += ng.b; } gdouble a = GFS_VALUEI (cell, p->dia)*h*h; g_assert (a != 0.); g.a = 1. + g.a/a; if (p->metric) g.a += GFS_VALUEI (cell, p->metric); g_assert (g.a != 0.); GFS_VALUEI (cell, p->u) = (g.b/a + GFS_VALUEI (cell, p->res))/g.a; } static void diffusion_relax_stencil (FttCell * cell, RelaxStencilParams * p) { GfsGradient g = { 0., 0. }; gdouble h = ftt_cell_size (cell); FttCellNeighbors neighbor; FttCellFace face; GfsVariable * id = p->lp->id; GfsStencil * stencil = gfs_stencil_new (cell, p->lp, 0.); if (GFS_IS_MIXED (cell) && ((cell)->flags & GFS_FLAG_DIRICHLET) != 0) { g.b = gfs_cell_dirichlet_gradient_flux_stencil (cell, p->maxlevel, 0., p->lp, stencil); /* fixme: not sure about this */ g_array_index (p->lp->lhs, gdouble, (gint) GFS_VALUE (cell, id)) -= g.b; } face.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (face.d = 0; face.d < FTT_NEIGHBORS; face.d++) { GfsGradient ng; face.neighbor = neighbor.c[face.d]; gfs_face_cm_weighted_gradient_stencil (&face, &ng, p->maxlevel, p->lp, stencil); g.a += ng.a; } gdouble a = GFS_VALUE (cell, p->dia)*h*h; g_assert (a != 0.); g.a = 1. + g.a/a; if (p->metric) g.a += GFS_VALUE (cell, p->metric); g_assert (g.a != 0.); gfs_stencil_add_element (stencil, cell, p->lp, - a*g.a); gfs_linear_problem_add_stencil (p->lp, stencil); } static void diffusion_residual (FttCell * cell, RelaxParams * p) { gdouble a; GfsGradient g = { 0., 0. }; gdouble h; FttCellNeighbors neighbor; FttCellFace face; h = ftt_cell_size (cell); a = GFS_VALUEI (cell, p->dia); if (GFS_IS_MIXED (cell)) { GfsSolidVector * solid = GFS_STATE (cell)->solid; if (((cell)->flags & GFS_FLAG_DIRICHLET) != 0) g.b = gfs_cell_dirichlet_gradient_flux (cell, p->u, -1, solid->fv); else g.b = solid->fv*solid->v.x; } face.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (face.d = 0; face.d < FTT_NEIGHBORS; face.d++) { GfsGradient ng; face.neighbor = neighbor.c[face.d]; gfs_face_cm_weighted_gradient (&face, &ng, p->u, -1); g.a += ng.a; g.b += ng.b; } a *= h*h; g_assert (a != 0.); g.a = 1. + g.a/a; if (p->metric) g.a += GFS_VALUEI (cell, p->metric); g.b = GFS_VALUEI (cell, p->rhs) + g.b/a; GFS_VALUEI (cell, p->res) = g.b - g.a*GFS_VALUEI (cell, p->u); } /** * gfs_diffusion_residual: * @domain: a #GfsDomain. * @u: the variable to use as left-hand side. * @rhs: the right-hand side. * @rhoc: the mass. * @metric: the metric term. * @res: the residual. * * Sets the @res variable of each leaf cell of @domain to the residual * of the diffusion equation for @v. * * The diffusion coefficients must have been set using * gfs_diffusion_coefficients() and the right-hand side using * gfs_diffusion_rhs(). */ void gfs_diffusion_residual (GfsDomain * domain, GfsVariable * u, GfsVariable * rhs, GfsVariable * rhoc, GfsVariable * metric, GfsVariable * res) { RelaxParams p; g_return_if_fail (domain != NULL); g_return_if_fail (u != NULL); g_return_if_fail (rhs != NULL); g_return_if_fail (rhoc != NULL); g_return_if_fail (res != NULL); p.u = u->i; p.rhs = rhs->i; p.dia = rhoc->i; p.res = res->i; p.metric = metric ? metric->i : FALSE; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) diffusion_residual, &p); } /** * gfs_diffusion_cycle: * @domain: the domain on which to solve the diffusion equation. * @levelmin: the top level of the multigrid hierarchy. * @depth: the total depth of the domain. * @nrelax: the number of relaxations to apply at each level. * @u: the variable to use as left-hand side. * @rhs: the right-hand side. * @rhoc: the mass. * @metric: the metric term. * @res: the residual. * * Apply one multigrid iteration to the diffusion equation for @u. * * The initial value of @res on the leaves of @root must be set to * the residual of the diffusion equation using gfs_diffusion_residual(). * * The diffusion coefficients must be set using gfs_diffusion_coefficients(). * * The values of @u on the leaf cells are updated as well as the values * of @res (i.e. the cell tree is ready for another iteration). */ void gfs_diffusion_cycle (GfsDomain * domain, guint levelmin, guint depth, guint nrelax, GfsVariable * u, GfsVariable * rhs, GfsVariable * rhoc, GfsVariable * metric, GfsVariable * res) { GfsVariable * dp; RelaxParams p; gpointer data[2]; g_return_if_fail (domain != NULL); g_return_if_fail (u != NULL); g_return_if_fail (rhs != NULL); g_return_if_fail (rhoc != NULL); g_return_if_fail (res != NULL); dp = gfs_temporary_variable (domain); /* compute residual on non-leafs cells */ gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_get_from_below_intensive, res); /* relax top level */ p.maxlevel = levelmin; p.u = dp->i; p.res = res->i; p.dia = rhoc->i; p.metric = metric ? metric->i : FALSE; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, levelmin, (FttCellTraverseFunc) gfs_cell_reset, dp); relax_loop (domain, dp, u, &p, 10*nrelax, (FttCellTraverseFunc) diffusion_relax); /* relax from top to bottom */ for (p.maxlevel = levelmin + 1; p.maxlevel <= depth; p.maxlevel++) { /* get initial guess from coarser grid */ gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_NON_LEAFS, p.maxlevel - 1, (FttCellTraverseFunc) get_from_above, dp); relax_loop (domain, dp, u, &p, nrelax, (FttCellTraverseFunc) diffusion_relax); } /* correct on leaf cells */ data[0] = u; data[1] = dp; gfs_traverse_and_bc (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) correct, data, u, u); /* compute new residual on leaf cells */ gfs_diffusion_residual (domain, u, rhs, rhoc, metric, res); gts_object_destroy (GTS_OBJECT (dp)); } static void scale_rhs (FttCell * cell, RelaxStencilParams * p) { gdouble h = ftt_cell_size (cell); GFS_VALUE (cell, p->rhs) *= - GFS_VALUE (cell, p->dia)*h*h; } /** * gfs_get_diffusion_problem: * @domain: the domain over which the poisson problem is defined * @rhs: the variable to use as right-hand side * @lhs: the variable to use as left-hand side * @rhoc: the mass. * @metric: the metric term (or %NULL). * @maxlevel: the maximum level to consider (or -1). * @v: a #GfsVariable of which @lhs is an homogeneous version. * * Extracts the diffusion problem associated with @lhs and @rhs. * * Returns: a #GfsLinearProblem. */ GfsLinearProblem * gfs_get_diffusion_problem (GfsDomain * domain, GfsVariable * rhs, GfsVariable * lhs, GfsVariable * rhoc, GfsVariable * metric, gint maxlevel, GfsVariable * v) { gfs_domain_timer_start (domain, "get_diffusion_problem"); GfsLinearProblem * lp = gfs_linear_problem_new (domain); RelaxStencilParams p = { lp, rhoc, maxlevel, metric, rhs }; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS, maxlevel, (FttCellTraverseFunc) scale_rhs, &p); cell_numbering (domain, lp, rhs, lhs, maxlevel); /* Creates stencils on the fly */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_reset_bc, lp); gfs_domain_homogeneous_bc_stencil (domain, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS, maxlevel, lhs, v, lp); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS, maxlevel, (FttCellTraverseFunc) diffusion_relax_stencil, &p); gfs_domain_timer_stop (domain, "get_diffusion_problem"); return lp; } gerris-snapshot-131206/src/surface.h0000644000175100017510000001076712250371171014265 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __SURFACE_H__ #define __SURFACE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #include "ftt.h" /* GfsGenericSurface: Header */ typedef GtsObject GfsGenericSurface; typedef struct { GtsPoint * E, * D; gdouble x; guint n; gint inside; } GfsSegment; typedef struct _GfsGenericSurfaceClass GfsGenericSurfaceClass; struct _GfsGenericSurfaceClass { /*< private >*/ GtsObjectClass parent_class; /*< public >*/ GfsGenericSurface * (* cell_is_cut) (FttCell * cell, GfsGenericSurface * s, gboolean flatten, gint maxlevel); guint (* segment_intersection) (GfsGenericSurface * s, FttCell * cell, GfsSegment * I); void (* segment_normal) (GfsGenericSurface * s, FttCell * cell, GfsSegment * I, GtsVector n); gint (* point_is_inside) (GfsGenericSurface * s, FttVector * p); }; #define GFS_GENERIC_SURFACE(obj) GTS_OBJECT_CAST (obj,\ GtsObject,\ gfs_generic_surface_class ()) #define GFS_GENERIC_SURFACE_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsGenericSurfaceClass,\ gfs_generic_surface_class()) #define GFS_IS_GENERIC_SURFACE(obj) (gts_object_is_from_class (obj,\ gfs_generic_surface_class ())) GfsGenericSurfaceClass * gfs_generic_surface_class (void); guint gfs_surface_segment_intersection (GfsGenericSurface * s, FttCell * cell, GfsSegment * I); void gfs_surface_segment_normal (GfsGenericSurface * s, FttCell * cell, GfsSegment * I, GtsVector n); gint gfs_surface_point_is_inside (GfsGenericSurface * s, FttVector * p); GfsGenericSurface * gfs_cell_is_cut (FttCell * cell, GfsGenericSurface * s, gboolean flatten, gint maxlevel); typedef void (* FttCellTraverseCutFunc) (FttCell * cell, GfsGenericSurface * s, gpointer data); void gfs_cell_traverse_cut (FttCell * root, GfsGenericSurface * s, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseCutFunc func, gpointer data); void gfs_cell_traverse_cut_2D (FttCell * root, GfsGenericSurface * s, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseCutFunc func, gpointer data); void gfs_generic_surface_read (GfsGenericSurface * s, gpointer sim, GtsFile * fp); void gfs_generic_surface_write (GfsGenericSurface * s, gpointer sim, FILE * fp); /* GfsSurface: Header */ typedef struct _GfsSurface GfsSurface; struct _GfsSurface { /*< private >*/ GtsObject parent; GtsVector rotate, scale, translate; gboolean flip; GfsFunction * f; GtsMatrix * m; GNode * bbtree; /*< public >*/ GtsSurface * s; gboolean twod; GtsFaceClass * face_class; GtsEdgeClass * edge_class; GtsVertexClass * vertex_class; }; #define GFS_SURFACE(obj) GTS_OBJECT_CAST (obj,\ GfsSurface,\ gfs_surface_class ()) #define GFS_IS_SURFACE(obj) (gts_object_is_from_class (obj,\ gfs_surface_class ())) GfsGenericSurfaceClass * gfs_surface_class (void); gdouble gfs_surface_implicit_value (GfsSurface * s, GtsPoint p); void gfs_surface_transformation (GtsSurface * surface, GtsVector rotate, GtsVector translate, GtsVector scale, gboolean flip, GtsMatrix ** matrix); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __SURFACE_H__ */ gerris-snapshot-131206/src/simulation.c0000644000175100017510000020376512250371171015016 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief GfsSimulation, GfsPoisson, GfsAdvection models. */ #include #include #include #include "config.h" #include "simulation.h" #include "output.h" #include "refine.h" #include "solid.h" #include "adaptive.h" #include "source.h" #include "vof.h" #include "tension.h" #include "map.h" #include "river.h" #include "version.h" /** * The incompressible Euler solver. * \beginobject{GfsSimulation} */ static void module_close (GModule *module) { if (!g_module_close (module)) g_warning ("%s: %s", g_module_name (module), g_module_error ()); } static void simulation_destroy (GtsObject * object) { GfsSimulation * sim = GFS_SIMULATION (object); gts_container_foreach (GTS_CONTAINER (sim->refines), (GtsFunc) gts_object_destroy, NULL); gts_object_destroy (GTS_OBJECT (sim->refines)); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL); gts_object_destroy (GTS_OBJECT (sim->events)); gts_container_foreach (GTS_CONTAINER (sim->maps), (GtsFunc) gts_object_destroy, NULL); gts_object_destroy (GTS_OBJECT (sim->maps)); gts_object_destroy (GTS_OBJECT (sim->adapts)); gts_object_destroy (GTS_OBJECT (sim->solids)); g_slist_foreach (sim->modules, (GFunc) module_close, NULL); g_slist_free (sim->modules); g_slist_foreach (sim->globals, (GFunc) gts_object_destroy, NULL); g_slist_free (sim->globals); g_slist_foreach (sim->preloaded_modules, (GFunc) module_close, NULL); g_slist_free (sim->preloaded_modules); (* GTS_OBJECT_CLASS (gfs_simulation_class ())->parent_class->destroy) (object); } static void simulation_write (GtsObject * object, FILE * fp) { GfsSimulation * sim = GFS_SIMULATION (object); GfsDomain * domain = GFS_DOMAIN (sim); GSList * i; GfsVariable * v; (* GTS_OBJECT_CLASS (gfs_simulation_class ())->parent_class->write) (object, fp); fputs (" {\n", fp); i = sim->modules; while (i) { void (* module_write) (FILE *); const gchar * name = NULL; fprintf (fp, " GModule %s", g_module_symbol (i->data, "gfs_module_name", (gpointer) &name) ? name : g_module_name (i->data)); if (g_module_symbol (i->data, "gfs_module_write", (gpointer) &module_write)) (* module_write) (fp); fputc ('\n', fp); i = i->next; } i = sim->globals; while (i) { fputs (" ", fp); (* GTS_OBJECT (i->data)->klass->write) (i->data, fp); i = i->next; } fputs (" GfsTime ", fp); gfs_time_write (&sim->time, fp); fputc ('\n', fp); i = sim->refines->items; while (i) { GtsObject * object = i->data; if (GFS_IS_LAYERS (object) || domain->max_depth_write < -1) { fputs (" ", fp); g_assert (object->klass->write); (* object->klass->write) (object, fp); fputc ('\n', fp); } i = i->next; } i = sim->events->items; while (i) { GtsObject * object = i->data; GfsEvent * event = i->data; if (event->t < event->end && event->i < event->iend) { fputs (" ", fp); g_assert (object->klass->write); (* object->klass->write) (object, fp); fputc ('\n', fp); } i = i->next; } i = domain->variables; while (i) { v = i->data; if (v->surface_bc) { fputs (" ", fp); (* GTS_OBJECT (v->surface_bc)->klass->write) (GTS_OBJECT (v->surface_bc), fp); fputc ('\n', fp); } i = i->next; } fputs (" GfsPhysicalParams ", fp); gfs_physical_params_write (&sim->physical_params, fp); fputs ("\n GfsAdvectionParams ", fp); gfs_advection_params_write (&sim->advection_params, fp); fputs ("\n GfsApproxProjectionParams ", fp); gfs_multilevel_params_write (&sim->approx_projection_params, fp); fputs ("\n GfsProjectionParams ", fp); gfs_multilevel_params_write (&sim->projection_params, fp); fputc ('\n', fp); i = sim->maps->items; while (i) { GtsObject * object = i->data; g_assert (object->klass->write); (* object->klass->write) (object, fp); fputc ('\n', fp); i = i->next; } fputc ('}', fp); } static gboolean strmatch (const gchar * s, const gchar * s1) { gboolean m = !strcmp (s, s1); if (!m) { gchar * s2 = g_strconcat ("Gfs", s, NULL); m = !strcmp (s2, s1); g_free (s2); } return m; } static GModule * load_module (GtsFile * fp, GfsSimulation * sim) { gts_file_next_token (fp); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (module name)"); return NULL; } if (!g_module_supported ()) { g_warning ("modules are not supported on this system"); gts_file_next_token (fp); return NULL; } else { GModule * module; module = g_module_open (fp->token->str, 0); if (module == NULL) { gchar * name = g_strconcat (fp->token->str, #if FTT_2D "2D" #else "3D" #endif , NULL); #ifdef MODULES_SUFFIX gchar * path; if (name[0] != G_DIR_SEPARATOR) path = g_strconcat (GFS_MODULES_DIR, G_DIR_SEPARATOR_S, "lib", name, MODULES_SUFFIX, NULL); else path = g_strdup (name); #else gchar * path = g_module_build_path (GFS_MODULES_DIR, name); #endif g_free (name); module = g_module_open (path, 0); g_free (path); } if (module == NULL) { gts_file_error (fp, "cannot load module: %s", g_module_error ()); return NULL; } g_module_make_resident (module); gts_file_next_token (fp); void (* module_read) (GtsFile *, GfsSimulation * sim); if (g_module_symbol (module, "gfs_module_read", (gpointer) &module_read)) { (* module_read) (fp, sim); if (fp->type == GTS_ERROR) return NULL; } return module; } } static void simulation_read (GtsObject ** object, GtsFile * fp) { GfsSimulation * sim = GFS_SIMULATION (*object); (* GTS_OBJECT_CLASS (gfs_simulation_class ())->parent_class->read) (object, fp); if (fp->type == GTS_ERROR) return; if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } fp->scope_max++; gts_file_next_token (fp); GfsDomain * domain = GFS_DOMAIN (sim); while (fp->type != GTS_ERROR && fp->type != '}') { if (fp->type == '\n') { gts_file_next_token (fp); continue; } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a keyword"); return; } /* ------ fixme: obsolete, just here for backward compatibility ------*/ if (!strcmp (fp->token->str, "GfsDeferredCompilation")) gts_file_next_token (fp); /* ------------ GModule ------------ */ else if (!strcmp (fp->token->str, "GModule")) { GModule * module = load_module (fp, sim); if (module == NULL) return; sim->modules = g_slist_prepend (sim->modules, module); } /* ------------ GfsTime ------------ */ else if (strmatch (fp->token->str, "GfsTime")) { gts_file_next_token (fp); gfs_time_read (&sim->time, fp); if (fp->type == GTS_ERROR) return; } /* ------------ GfsPhysicalParams ------------ */ else if (strmatch (fp->token->str, "GfsPhysicalParams")) { gts_file_next_token (fp); gfs_physical_params_read (&sim->physical_params, domain, fp); if (fp->type == GTS_ERROR) return; } /* ------------ GfsProjectionParams ------------ */ else if (strmatch (fp->token->str, "GfsProjectionParams")) { gts_file_next_token (fp); gfs_multilevel_params_read (&sim->projection_params, fp); if (fp->type == GTS_ERROR) return; } /* ------------ GfsApproxProjectionParams ------------ */ else if (strmatch (fp->token->str, "GfsApproxProjectionParams")) { gts_file_next_token (fp); gfs_multilevel_params_read (&sim->approx_projection_params, fp); if (fp->type == GTS_ERROR) return; } /* ------------ GfsAdvectionParams ------------ */ else if (strmatch (fp->token->str, "GfsAdvectionParams")) { gts_file_next_token (fp); gfs_advection_params_read (&sim->advection_params, fp); if (fp->type == GTS_ERROR) return; if (sim->advection_params.linear) { sim->u0[0] = gfs_domain_get_or_add_variable (domain, "U0", "x-component of the base velocity"); sim->u0[0]->units = 1.; sim->u0[1] = gfs_domain_get_or_add_variable (domain, "V0", "y-component of the base velocity"); sim->u0[1]->units = 1.; #if (!FTT_2D) sim->u0[2] = gfs_domain_get_or_add_variable (domain, "W0", "z-component of the base velocity"); sim->u0[2]->units = 1.; #endif /* FTT_3D */ gfs_variable_set_vector (sim->u0, FTT_DIMENSION); } } /* ------------ GtsObject ------------ */ else { GtsObjectClass * klass = gfs_object_class_from_name (fp->token->str); GtsObject * object; if (klass == NULL) { gts_file_error (fp, "unknown keyword `%s'", fp->token->str); return; } if (gts_object_class_is_from_class (klass, gfs_box_class ())) { gts_file_error (fp, "parse error (unclosed statement?)"); return; } object = gts_object_new (klass); gfs_object_simulation_set (object, sim); g_assert (klass->read); (* klass->read) (&object, fp); if (fp->type == GTS_ERROR) { gts_object_destroy (object); return; } if (GFS_IS_GLOBAL (object)) sim->globals = g_slist_append (sim->globals, object); else if (GFS_IS_REFINE (object)) gts_container_add (GTS_CONTAINER (sim->refines), GTS_CONTAINEE (object)); else if (GFS_IS_ADAPT (object)) { gts_container_add (GTS_CONTAINER (sim->adapts), GTS_CONTAINEE (object)); gts_container_add (GTS_CONTAINER (sim->events), GTS_CONTAINEE (object)); } else if (GFS_IS_SOLID (object)) { gts_container_add (GTS_CONTAINER (sim->solids), GTS_CONTAINEE (object)); gts_container_add (GTS_CONTAINER (sim->events), GTS_CONTAINEE (object)); } else if (GFS_IS_EVENT (object)) gts_container_add (GTS_CONTAINER (sim->events), GTS_CONTAINEE (object)); else if (GFS_IS_MAP (object)) gts_container_add (GTS_CONTAINER (sim->maps), GTS_CONTAINEE (object)); else if (GFS_IS_SURFACE_GENERIC_BC (object)) ; else g_assert_not_reached (); } } if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); sim->refines->items = g_slist_reverse (sim->refines->items); sim->adapts->items = g_slist_reverse (sim->adapts->items); sim->events->items = g_slist_reverse (sim->events->items); sim->solids->items = g_slist_reverse (sim->solids->items); sim->modules = g_slist_reverse (sim->modules); if (sim->advection_params.scheme == GFS_NONE) domain->advection_metric = NULL; else if (domain->advection_metric && !gfs_has_source_coriolis (domain)) { /* we need to add a pseudo-Coriolis term to include the metric advection terms */ } } /** * gfs_advance_tracers: * @sim: a #GfsSimulation. * @dt: the timestep. * * Performs advection/difussion of tracers associated with @sim. */ void gfs_advance_tracers (GfsSimulation * sim, gdouble dt) { g_return_if_fail (sim != NULL); GfsDomain * domain = GFS_DOMAIN (sim); GSList * i = sim->events->items; while (i) { if (GFS_IS_VARIABLE_TRACER_VOF (i->data)) { GfsVariableTracer * t = i->data; t->advection.dt = dt; gfs_tracer_vof_advection (domain, &t->advection); gfs_domain_variable_centered_sources (domain, i->data, i->data, t->advection.dt); } else if (GFS_IS_VARIABLE_TRACER (i->data)) { GfsVariableTracer * t = i->data; t->advection.dt = dt; gfs_tracer_advection_diffusion (domain, &t->advection, sim->physical_params.alpha); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) GFS_VARIABLE (t)->fine_coarse, t); } i = i->next; } } static void simulation_run (GfsSimulation * sim) { GfsVariable * p, * pmac, * res = NULL, * g[FTT_DIMENSION], * gmac[FTT_DIMENSION]; GfsVariable ** gc = sim->advection_params.gc ? g : NULL; GfsDomain * domain; GSList * i; domain = GFS_DOMAIN (sim); p = gfs_variable_from_name (domain->variables, "P"); g_assert (p); pmac = gfs_variable_from_name (domain->variables, "Pmac"); g_assert (pmac); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) { gmac[c] = gfs_temporary_variable (domain); if (sim->advection_params.gc) g[c] = gfs_temporary_variable (domain); else g[c] = gmac[c]; } gfs_variable_set_vector (gmac, FTT_DIMENSION); gfs_variable_set_vector (g, FTT_DIMENSION); gfs_simulation_refine (sim); gfs_simulation_init (sim); i = domain->variables; while (i) { if (GFS_IS_VARIABLE_RESIDUAL (i->data)) res = i->data; i = i->next; } gfs_simulation_set_timestep (sim); if (sim->time.i == 0) { gfs_approximate_projection (domain, &sim->approx_projection_params, sim->advection_params.dt, p, sim->physical_params.alpha, res, g, NULL); gfs_simulation_set_timestep (sim); gfs_advance_tracers (sim, sim->advection_params.dt/2.); } else if (sim->advection_params.gc) gfs_update_gradients (domain, p, sim->physical_params.alpha, g); while (sim->time.t < sim->time.end && sim->time.i < sim->time.iend) { gdouble tstart = gfs_clock_elapsed (domain->timer); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); if (sim->advection_params.linear) { /* linearised advection */ gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL); gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_interpolated_normal_velocity, sim->u0); } else gfs_predicted_face_velocities (domain, FTT_DIMENSION, &sim->advection_params); gfs_variables_swap (p, pmac); gfs_mac_projection (domain, &sim->projection_params, sim->advection_params.dt/2., p, sim->physical_params.alpha, gmac, NULL); gfs_variables_swap (p, pmac); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_half_do, sim); gfs_centered_velocity_advection_diffusion (domain, FTT_DIMENSION, &sim->advection_params, gmac, sim->time.i > 0 || !gc ? gc : gmac, sim->physical_params.alpha); if (gc) { gfs_source_coriolis_implicit (domain, sim->advection_params.dt); gfs_correct_centered_velocities (domain, FTT_DIMENSION, sim->time.i > 0 ? gc : gmac, -sim->advection_params.dt); } else if (gfs_has_source_coriolis (domain)) { gfs_correct_centered_velocities (domain, FTT_DIMENSION, gmac, sim->advection_params.dt); gfs_source_coriolis_implicit (domain, sim->advection_params.dt); gfs_correct_centered_velocities (domain, FTT_DIMENSION, gmac, -sim->advection_params.dt); } gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); gfs_simulation_adapt (sim); gfs_approximate_projection (domain, &sim->approx_projection_params, sim->advection_params.dt, p, sim->physical_params.alpha, res, g, NULL); sim->time.t = sim->tnext; sim->time.i++; gfs_simulation_set_timestep (sim); gfs_advance_tracers (sim, sim->advection_params.dt); gts_range_add_value (&domain->timestep, gfs_clock_elapsed (domain->timer) - tstart); gts_range_update (&domain->timestep); gts_range_add_value (&domain->size, gfs_domain_size (domain, FTT_TRAVERSE_LEAFS, -1)); gts_range_update (&domain->size); } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL); for (c = 0; c < FTT_DIMENSION; c++) { gts_object_destroy (GTS_OBJECT (gmac[c])); if (sim->advection_params.gc) gts_object_destroy (GTS_OBJECT (g[c])); } } static gdouble simulation_cfl (GfsSimulation * sim) { GSList * i = GFS_DOMAIN (sim)->variables; gdouble cflmin = G_MAXDOUBLE; while (i) { GfsVariable * v = i->data; if (GFS_IS_VARIABLE_TRACER (v) && GFS_VARIABLE_TRACER (v)->advection.scheme != GFS_NONE && GFS_VARIABLE_TRACER (v)->advection.sink[0]) { gfs_add_sinking_velocity (GFS_DOMAIN (sim), &GFS_VARIABLE_TRACER (v)->advection); gdouble cfl = gfs_domain_cfl (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1); gfs_remove_sinking_velocity (GFS_DOMAIN (sim), &GFS_VARIABLE_TRACER (v)->advection); if (cfl < cflmin) cflmin = cfl; } i = i->next; } return cflmin < G_MAXDOUBLE ? cflmin : gfs_domain_cfl (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1); } static void gfs_simulation_class_init (GfsSimulationClass * klass) { GTS_OBJECT_CLASS (klass)->write = simulation_write; GTS_OBJECT_CLASS (klass)->read = simulation_read; GTS_OBJECT_CLASS (klass)->destroy = simulation_destroy; klass->run = simulation_run; klass->cfl = simulation_cfl; } /* Derived variables */ static gdouble cell_x (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { FttVector p; g_return_val_if_fail (cell != NULL || face != NULL, 0.); if (face) gfs_face_ca (face, &p); else gfs_cell_cm (cell, &p); gfs_simulation_map_inverse (sim, &p); return p.x; } static gdouble cell_y (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { FttVector p; g_return_val_if_fail (cell != NULL || face != NULL, 0.); if (face) gfs_face_ca (face, &p); else gfs_cell_cm (cell, &p); gfs_simulation_map_inverse (sim, &p); return p.y; } static gdouble cell_z (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { FttVector p; g_return_val_if_fail (cell != NULL || face != NULL, 0.); if (face) gfs_face_ca (face, &p); else gfs_cell_cm (cell, &p); gfs_simulation_map_inverse (sim, &p); return p.z; } static gdouble cell_ax (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { g_return_val_if_fail (cell != NULL, 0.); if (!GFS_IS_MIXED (cell)) return 0.; else { FttVector p = GFS_STATE (cell)->solid->ca; gfs_simulation_map_inverse (sim, &p); return p.x; } } static gdouble cell_ay (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { g_return_val_if_fail (cell != NULL, 0.); if (!GFS_IS_MIXED (cell)) return 0.; else { FttVector p = GFS_STATE (cell)->solid->ca; gfs_simulation_map_inverse (sim, &p); return p.y; } } static gdouble cell_az (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { g_return_val_if_fail (cell != NULL, 0.); if (!GFS_IS_MIXED (cell)) return 0.; else { FttVector p = GFS_STATE (cell)->solid->ca; gfs_simulation_map_inverse (sim, &p); return p.z; } } static gdouble cell_cx (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { FttVector p; g_return_val_if_fail (cell != NULL || face != NULL, 0.); if (face) ftt_face_pos (face, &p); else ftt_cell_pos (cell, &p); gfs_simulation_map_inverse (sim, &p); return p.x; } static gdouble cell_cy (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { FttVector p; g_return_val_if_fail (cell != NULL || face != NULL, 0.); if (face) ftt_face_pos (face, &p); else ftt_cell_pos (cell, &p); gfs_simulation_map_inverse (sim, &p); return p.y; } static gdouble cell_cz (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { FttVector p; g_return_val_if_fail (cell != NULL || face != NULL, 0.); if (face) ftt_face_pos (face, &p); else ftt_cell_pos (cell, &p); gfs_simulation_map_inverse (sim, &p); return p.z; } static gdouble cell_rx (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { FttVector p; g_return_val_if_fail (cell != NULL || face != NULL, 0.); if (face) ftt_face_pos (face, &p); else ftt_cell_pos (cell, &p); return p.x; } static gdouble cell_ry (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { FttVector p; g_return_val_if_fail (cell != NULL || face != NULL, 0.); if (face) ftt_face_pos (face, &p); else ftt_cell_pos (cell, &p); return p.y; } static gdouble cell_rz (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { FttVector p; g_return_val_if_fail (cell != NULL || face != NULL, 0.); if (face) ftt_face_pos (face, &p); else ftt_cell_pos (cell, &p); return p.z; } static gdouble cell_dV (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { gdouble dV = gfs_cell_volume (cell, GFS_DOMAIN (sim)); gdouble L = sim->physical_params.L; #if FTT_2D dV *= L*L; #else dV *= L*L*L; #endif return dV; } static gdouble cell_dL (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { gdouble dL = ftt_cell_size (cell); gdouble L = sim->physical_params.L; return L*dL; } static gdouble cell_t (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { return sim->time.t; } static gdouble cell_dt (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { return sim->advection_params.dt; } static gdouble cell_vorticity (FttCell * cell, FttCellFace * face, GfsDomain * domain) { return gfs_vorticity (cell, gfs_domain_velocity (domain)); } static gdouble cell_divergence (FttCell * cell, FttCellFace * face, GfsDomain * domain) { return gfs_divergence (cell, gfs_domain_velocity (domain)); } static gdouble cell_velocity_norm (FttCell * cell, FttCellFace * face, GfsDomain * domain) { gdouble L = GFS_SIMULATION (domain)->physical_params.L; return L*gfs_vector_norm (cell, gfs_domain_velocity (domain)); } static gdouble cell_velocity_norm2 (FttCell * cell, FttCellFace * face, GfsDomain * domain) { gdouble L = GFS_SIMULATION (domain)->physical_params.L; return L*L*gfs_vector_norm2 (cell, gfs_domain_velocity (domain)); } static gdouble cell_level (FttCell * cell) { return ftt_cell_level (cell); } static gdouble cell_fraction (FttCell * cell) { g_return_val_if_fail (cell != NULL, 0.); return GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.; } static gdouble cell_solid_area (FttCell * cell, FttCellFace * face, GfsDomain * domain) { FttVector n; gfs_solid_normal (cell, &n); return ftt_vector_norm (&n)*pow (ftt_cell_size (cell)*GFS_SIMULATION (domain)->physical_params.L, FTT_DIMENSION - 1); } static gdouble cell_solid_sr (FttCell * cell) { return GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->s[FTT_RIGHT] : 1.; } static gdouble cell_solid_sl (FttCell * cell) { return GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->s[FTT_LEFT] : 1.; } static gdouble cell_solid_st (FttCell * cell) { return GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->s[FTT_TOP] : 1.; } static gdouble cell_solid_sb (FttCell * cell) { return GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->s[FTT_BOTTOM] : 1.; } #if !FTT_2D static gdouble cell_solid_sf (FttCell * cell) { return GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->s[FTT_FRONT] : 1.; } static gdouble cell_solid_sk (FttCell * cell) { return GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->s[FTT_BACK] : 1.; } #endif /* 3D */ static gdouble cell_velocity_lambda2 (FttCell * cell, FttCellFace * face, GfsDomain * domain) { return gfs_vector_lambda2 (cell, gfs_domain_velocity (domain)); } static gdouble cell_streamline_curvature (FttCell * cell, FttCellFace * face, GfsDomain * domain) { gdouble L = GFS_SIMULATION (domain)->physical_params.L; return gfs_streamline_curvature (cell, gfs_domain_velocity (domain))/L; } static gdouble cell_2nd_principal_invariant (FttCell * cell, FttCellFace * face, GfsDomain * domain) { return gfs_2nd_principal_invariant (cell, gfs_domain_velocity (domain))/ftt_cell_size (cell); } static gdouble cell_pid (FttCell * cell) { while (!FTT_CELL_IS_ROOT (cell)) cell = ftt_cell_parent (cell); return GFS_BOX (FTT_ROOT_CELL (cell)->parent)->pid; } static gdouble cell_id (FttCell * cell) { while (!FTT_CELL_IS_ROOT (cell)) cell = ftt_cell_parent (cell); return GFS_BOX (FTT_ROOT_CELL (cell)->parent)->id; } static gdouble cell_orthogonality (FttCell * cell, FttCellFace * face, GfsDomain * domain) { gdouble h; FttVector p; if (cell) { ftt_cell_pos (cell, &p); h = ftt_cell_size (cell)/2.; } else { ftt_face_pos (face, &p); h = ftt_cell_size (face->cell)/2.; } FttVector p1 = p, p2 = p, p3 = p, p4 = p; p1.x += h; p2.x -= h; p3.y += h; p4.y -= h; gfs_simulation_map_inverse (GFS_SIMULATION (domain), &p1); gfs_simulation_map_inverse (GFS_SIMULATION (domain), &p2); gfs_simulation_map_inverse (GFS_SIMULATION (domain), &p3); gfs_simulation_map_inverse (GFS_SIMULATION (domain), &p4); GtsVector p1p2, p3p4; gts_vector_init (p1p2, &p1, &p2); gts_vector_init (p3p4, &p3, &p4); return fabs (acos (gts_vector_scalar (p1p2, p3p4)/(gts_vector_norm (p1p2)*gts_vector_norm (p3p4))) - M_PI/2.)*180./M_PI; } static void simulation_init (GfsSimulation * object) { GfsDomain * domain = GFS_DOMAIN (object); /* Please update http://gfs.sourceforge.net/wiki/index.php/Domain_variables when changing this list */ static GfsDerivedVariableInfo derived_variable[] = { { "x", "x-coordinate of the center of mass of the cell", cell_x }, { "y", "y-coordinate of the center of mass of the cell", cell_y }, { "z", "z-coordinate of the center of mass of the cell", cell_z }, { "ax", "x-coordinate of the center of area of the solid surface", cell_ax }, { "ay", "y-coordinate of the center of area of the solid surface", cell_ay }, { "az", "z-coordinate of the center of area of the solid surface", cell_az }, { "cx", "x-coordinate of the center of the cell", cell_cx }, { "cy", "y-coordinate of the center of the cell", cell_cy }, { "cz", "z-coordinate of the center of the cell", cell_cz }, { "rx", "x-coordinate of the center of the cell (internal)", cell_rx }, { "ry", "y-coordinate of the center of the cell (internal)", cell_ry }, { "rz", "z-coordinate of the center of the cell (internal)", cell_rz }, { "dV", "volume of the cell", cell_dV}, { "dL", "length of the cell", cell_dL}, { "t", "Physical time", cell_t }, { "dt", "Timestep", cell_dt }, { "Vorticity", "Norm of the vorticity vector of the velocity field", cell_vorticity }, { "Divergence", "Divergence of the velocity field", cell_divergence }, { "Velocity", "Norm of the velocity vector", cell_velocity_norm }, { "Velocity2", "Squared norm of the velocity vector", cell_velocity_norm2 }, { "Level", "Quad/octree level of the cell", cell_level }, { "A", "Fluid fraction of the cell", cell_fraction }, { "S", "Area of the solid contained in the cell", cell_solid_area }, { "Sr", "Fluid fraction of the right cell face", cell_solid_sr }, { "Sl", "Fluid fraction of the left cell face", cell_solid_sl }, { "St", "Fluid fraction of the top cell face", cell_solid_st }, { "Sb", "Fluid fraction of the bottom cell face", cell_solid_sb }, #if !FTT_2D { "Sf", "Fluid fraction of the front cell face", cell_solid_sf }, { "Sk", "Fluid fraction of the back cell face", cell_solid_sk }, #endif /* 3D */ { "Lambda2", "Vortex-detection criterion of Jeong & Hussein", cell_velocity_lambda2 }, { "Curvature", "Curvature of the local streamline", cell_streamline_curvature }, { "D2", "Second principal invariant of the deformation tensor", cell_2nd_principal_invariant }, { "Pid", "Parent box process ID", cell_pid }, { "Id", "Parent box ID", cell_id }, { "Orthogonality", "Deviation from orthogonality", cell_orthogonality }, { NULL, NULL, NULL} }; GfsVariable * v; v = gfs_domain_add_variable (domain, "P", "Approximate projection pressure"); v->centered = TRUE; v->units = 2.; v = gfs_domain_add_variable (domain, "Pmac", "MAC projection pressure"); v->centered = TRUE; v->units = 2.; GfsVariable * u[FTT_DIMENSION]; u[0] = gfs_domain_add_variable (domain, "U", "x-component of the velocity"); u[0]->units = 1.; u[0]->face_source = TRUE; u[1] = gfs_domain_add_variable (domain, "V", "y-component of the velocity"); u[1]->units = 1.; u[1]->face_source = TRUE; #if (!FTT_2D) u[2] = gfs_domain_add_variable (domain, "W", "z-component of the velocity"); u[2]->units = 1.; u[2]->face_source = TRUE; #endif /* FTT_3D */ gfs_variable_set_vector (u, FTT_DIMENSION); GfsDerivedVariableInfo * dv = derived_variable; while (dv->name) { g_assert (gfs_domain_add_derived_variable (domain, *dv)); dv++; } domain->derived_variables = g_slist_reverse (domain->derived_variables); gfs_time_init (&object->time); gfs_physical_params_init (&object->physical_params); gfs_advection_params_init (&object->advection_params); object->advection_params.flux = gfs_face_velocity_advection_flux; object->advection_params.average = TRUE; gfs_multilevel_params_init (&object->projection_params); gfs_multilevel_params_init (&object->approx_projection_params); object->solids = GTS_SLIST_CONTAINER (gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ()))); object->output_solid = TRUE; object->refines = GTS_SLIST_CONTAINER (gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ()))); object->maps = GTS_SLIST_CONTAINER (gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ()))); object->adapts = GTS_SLIST_CONTAINER (gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ()))); gfs_adapt_stats_init (&object->adapts_stats); object->events = GTS_SLIST_CONTAINER (gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ()))); object->modules = object->preloaded_modules = NULL; object->tnext = 0.; } GfsSimulationClass * gfs_simulation_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_simulation_info = { "GfsSimulation", sizeof (GfsSimulation), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) gfs_simulation_class_init, (GtsObjectInitFunc) simulation_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_domain_class ()), &gfs_simulation_info); } return klass; } GfsSimulation * gfs_simulation_new (GfsSimulationClass * klass) { GfsSimulation * object; object = GFS_SIMULATION (gts_graph_new (GTS_GRAPH_CLASS (klass), GTS_GNODE_CLASS (gfs_box_class ()), GTS_GEDGE_CLASS (gfs_gedge_class ()))); return object; } static void init_non_variable (GfsEvent * event, GfsSimulation * sim) { if (!GFS_IS_VARIABLE (event)) gfs_event_init (event, sim); } static void redo_non_variable (GfsEvent * event, GfsSimulation * sim) { if (!GFS_IS_VARIABLE (event)) gfs_event_redo (event, sim); } /** * gfs_simulation_init: * @sim: a #GfsSimulation. * * Initialises @sim: matches boundary conditions, applies boundary * conditions and initialises all variables, etc... */ void gfs_simulation_init (GfsSimulation * sim) { g_return_if_fail (sim != NULL); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) init_non_variable, sim); GfsDomain * domain = GFS_DOMAIN (sim); gfs_domain_match (domain); gfs_set_merged (domain); GSList * i = domain->variables; while (i) { gfs_event_init (GFS_EVENT (i->data), sim); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, i->data); i = i->next; } gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); /* Iterate mesh adaptation and initialisation */ if (domain->timer->start >= 0.) /* only if timing is on (i.e. within gfs_simulation_run()) */ while (gfs_simulation_adapt (sim)) { gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) redo_non_variable, sim); i = domain->variables; while (i) { gfs_event_redo (GFS_EVENT (i->data), sim); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, i->data); i = i->next; } gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); if (sim->adapts_stats.depth_increase <= 0) break; } } static void refine_cell_corner (FttCell * cell, GfsDomain * domain) { if (FTT_CELL_IS_LEAF (cell) && ftt_refine_corner (cell)) ftt_cell_refine_single (cell, domain->cell_init, domain->cell_init_data); } static void check_face (FttCellFace * f, guint * nf) { GfsSolidVector * s = GFS_STATE (f->cell)->solid; if (s && !f->neighbor && s->s[f->d] > 0. && s->s[f->d] < 1.) (*nf)++; } static void check_solid_fractions (GfsBox * box, guint * nf) { FttDirection d; gfs_cell_check_solid_fractions (box->root); for (d = 0; d < FTT_NEIGHBORS; d++) ftt_face_traverse_boundary (box->root, d, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) check_face, nf); } /** * gfs_check_solid_fractions: * @domain: a #GfsDomain. * * Checks consistency of solid fractions. * * Returns: the number of partial fluid faces which do not have two * neighbors. */ guint gfs_check_solid_fractions (GfsDomain * domain) { g_return_val_if_fail (domain != NULL, 0); guint nf = 0; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) check_solid_fractions, &nf); return nf; } static void is_diffusion (GfsSource * s, gboolean * diffusion) { *diffusion = (GFS_IS_SOURCE_DIFFUSION (s) != NULL); } static void set_permanent (FttCell * cell) { cell->flags |= GFS_FLAG_PERMANENT; } /** * gfs_simulation_get_solids: * @sim: a #GfsSimulation. * * Returns: a new list of #GfsSolid defining the solid boundaries * contained in @sim. */ GSList * gfs_simulation_get_solids (GfsSimulation * sim) { g_return_val_if_fail (sim != NULL, NULL); GSList * solids = NULL, * i = sim->solids->items; while (i) { solids = g_slist_prepend (solids, i->data); i = i->next; } return solids; } static gboolean coarsen_cell (void) { return TRUE; } static void refine_leaf_boxes (GfsBox * box, GfsDomain * domain) { /* refine then coarsen boxes which are also leaf cells: this is the * simplest way to initialise the values of "automatic" GfsVariables * e.g. VariableTerrain, VariableMetric etc... */ if (FTT_CELL_IS_LEAF (box->root)) { ftt_cell_refine_single (box->root, domain->cell_init, domain->cell_init_data); gfs_cell_coarse_init (box->root, domain); ftt_cell_coarsen (box->root, (FttCellCoarsenFunc) coarsen_cell, NULL, (FttCellCleanupFunc) gfs_cell_cleanup, domain); } } /** * gfs_simulation_refine: * @sim: a #GfsSimulation. * * Calls the @refine() methods of the #GfsRefine of @sim. Initialize the * solid fractions by calling gfs_init_solid_fractions(). Matches the * boundaries by calling gfs_domain_match(). */ void gfs_simulation_refine (GfsSimulation * sim) { GSList * i; guint depth; gint l; GfsDomain * domain; g_return_if_fail (sim != NULL); domain = GFS_DOMAIN (sim); gfs_domain_timer_start (domain, "simulation_refine"); i = sim->refines->items; while (i) { GfsRefine * refine = i->data; GSList * next = i->next; if (GFS_REFINE_CLASS (GTS_OBJECT (refine)->klass)->refine) (* GFS_REFINE_CLASS (GTS_OBJECT (refine)->klass)->refine) (refine, sim); i = next; } gts_container_foreach (GTS_CONTAINER (sim), (GtsFunc) refine_leaf_boxes, sim); depth = gfs_domain_depth (domain); for (l = depth - 2; l >= 0; l--) gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, l, (FttCellTraverseFunc) refine_cell_corner, domain); gfs_domain_match (domain); gfs_domain_timer_stop (domain, "simulation_refine"); GSList * solids = gfs_simulation_get_solids (sim); if (solids) { gfs_domain_timer_start (domain, "solid_fractions"); sim->thin = gfs_domain_init_solid_fractions (domain, solids, TRUE, (FttCellCleanupFunc) gfs_cell_cleanup, domain, NULL); g_slist_free (solids); gfs_domain_match (domain); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) set_permanent, NULL); gfs_domain_timer_stop (domain, "solid_fractions"); } guint nf = gfs_check_solid_fractions (domain); if (nf > 0) { GSList * i = domain->variables; gboolean diffusion = FALSE; while (i && !diffusion) { GfsVariable * v = i->data; if (v->sources) gts_container_foreach (v->sources, (GtsFunc) is_diffusion, &diffusion); i = i->next; } if (diffusion) g_warning ("the solid surface cuts %d boundary cells,\n" "this may cause errors for diffusion terms\n", nf); } } /** * gfs_simulation_read: * @fp: a #GtsFile. * * Reads a simulation file from @fp. * * Returns: the #GfsSimulation or %NULL if an error occured, in which * case the @pos and @error fields of @fp are set. */ GfsSimulation * gfs_simulation_read (GtsFile * fp) { GfsDomain * d; GSList * ml = NULL; /* list of preloaded modules */ g_return_val_if_fail (fp != NULL, NULL); while (fp->type == '\n') gts_file_next_token (fp); while (fp->type == GTS_STRING && !strcmp (fp->token->str, "GModule")) { /* preloaded module */ GModule * module = load_module (fp, NULL); if (module == NULL) return NULL; ml = g_slist_prepend (ml, module); while (fp->type == '\n') gts_file_next_token (fp); } d = gfs_domain_read (fp); if (d != NULL && !GFS_IS_SIMULATION (d)) { gts_file_error (fp, "parent graph is not a GfsSimulation"); gts_object_destroy (GTS_OBJECT (d)); g_slist_free (ml); return NULL; } if (d) { gfs_pending_functions_compilation (fp); if (fp->type == GTS_ERROR) { gts_object_destroy (GTS_OBJECT (d)); g_slist_free (ml); return NULL; } else GFS_SIMULATION (d)->preloaded_modules = g_slist_reverse (ml); } else g_slist_free (ml); return GFS_SIMULATION (d); } static void write_preloaded_modules (GfsSimulation * sim, FILE * fp) { GSList * i = sim->preloaded_modules; while (i) { void (* module_write) (FILE *); const gchar * name = NULL; fprintf (fp, "GModule %s", g_module_symbol (i->data, "gfs_module_name", (gpointer) &name) ? name : g_module_name (i->data)); if (g_module_symbol (i->data, "gfs_module_write", (gpointer) &module_write)) (* module_write) (fp); fputc ('\n', fp); i = i->next; } } /** * gfs_simulation_write: * @sim: a #GfsSimulation. * @max_depth: the maximum depth at which to stop writing cell tree * data (-1 means no limit). * @fp: a file pointer. * * Writes in @fp a text representation of @sim. If @max_depth is * smaller or equal to -2, no cell tree data is written. */ void gfs_simulation_write (GfsSimulation * sim, gint max_depth, FILE * fp) { gint depth; GfsDomain * domain; g_return_if_fail (sim != NULL); g_return_if_fail (fp != NULL); fprintf (fp, "# Gerris Flow Solver %dD version %s (%s)\n", FTT_DIMENSION, GFS_VERSION, GFS_BUILD_VERSION); write_preloaded_modules (sim, fp); domain = GFS_DOMAIN (sim); depth = domain->max_depth_write; domain->max_depth_write = max_depth; gts_graph_write (GTS_GRAPH (sim), fp); domain->max_depth_write = depth; } #ifdef HAVE_MPI static void count_edges (GtsGEdge * e, guint * nedge) { (*nedge)++; } static void write_node (GtsObject * node, gpointer * data) { FILE * fp = data[0]; guint * nnode = data[1]; node->reserved = GUINT_TO_POINTER ((*nnode)++); if (node->klass->write) (* node->klass->write) (node, fp); fputc ('\n', fp); } static void write_edge (GtsGEdge * edge, FILE * fp) { fprintf (fp, "%u %u", GPOINTER_TO_UINT (GTS_OBJECT (edge->n1)->reserved), GPOINTER_TO_UINT (GTS_OBJECT (edge->n2)->reserved)); if (GTS_OBJECT (edge)->klass->write) (* GTS_OBJECT (edge)->klass->write) (GTS_OBJECT (edge), fp); fputc ('\n', fp); } #endif /* HAVE_MPI */ /** * gfs_simulation_union_write: * @sim: a #GfsSimulation. * @max_depth: the maximum depth at which to stop writing cell tree * data (-1 means no limit). * @fp: a file pointer. * * Identical to gfs_simulation_write() for serial simulations. For * parallel simulations writes the union of the simulations on all * processes to @fp. */ void gfs_simulation_union_write (GfsSimulation * sim, gint max_depth, FILE * fp) { GfsDomain * domain = GFS_DOMAIN (sim); g_return_if_fail (sim != NULL); g_return_if_fail (fp != NULL); if (domain->pid < 0) gfs_simulation_write (sim, max_depth, fp); else { #ifdef HAVE_MPI int gsize; guint * nbox; MPI_Comm_size (MPI_COMM_WORLD, &gsize); nbox = g_malloc (sizeof (guint)*gsize); guint n = gts_container_size (GTS_CONTAINER (sim)); MPI_Allgather (&n, 1, MPI_UNSIGNED, nbox, 1, MPI_UNSIGNED, MPI_COMM_WORLD); /* nbox[] now contains the number of boxes on each PE */ /* see gts/src/graph.c:gts_graph_write() for the original (serial) implementation */ GtsGraph * g = GTS_GRAPH (sim); guint nedge = 0; gts_graph_foreach_edge (g, (GtsFunc) count_edges, &nedge); gfs_all_reduce (domain, nedge, MPI_UNSIGNED, MPI_SUM); if (domain->pid == 0) { fprintf (fp, "# Gerris Flow Solver %dD version %s (%s)\n", FTT_DIMENSION, GFS_VERSION, GFS_BUILD_VERSION); write_preloaded_modules (sim, fp); guint i, nboxes = 0; for (i = 0; i < gsize; i++) nboxes += nbox[i]; fprintf (fp, "%u %u", nboxes, nedge); if (GTS_OBJECT (g)->klass->write) (* GTS_OBJECT (g)->klass->write) (GTS_OBJECT (g), fp); fputc ('\n', fp); } gint depth = domain->max_depth_write; guint i, nnode = 1; gpointer data[2]; for (i = 0; i < domain->pid; i++) nnode += nbox[i]; g_free (nbox); GfsUnionFile uf; FILE * fpp = gfs_union_open (fp, domain->pid, &uf); data[0] = fpp; data[1] = &nnode; domain->max_depth_write = max_depth; gts_container_foreach (GTS_CONTAINER (g), (GtsFunc) write_node, data); domain->max_depth_write = depth; gfs_union_close (fp, domain->pid, &uf); fpp = gfs_union_open (fp, domain->pid, &uf); gts_graph_foreach_edge (g, (GtsFunc) write_edge, fpp); gfs_union_close (fp, domain->pid, &uf); gts_container_foreach (GTS_CONTAINER (g), (GtsFunc) gts_object_reset_reserved, NULL); #endif /* HAVE_MPI */ } } static gdouble min_cfl (GfsSimulation * sim) { gdouble cfl = (sim->advection_params.scheme == GFS_NONE ? G_MAXDOUBLE : sim->advection_params.cfl); GSList * i = GFS_DOMAIN (sim)->variables; while (i) { GfsVariable * v = i->data; if (GFS_IS_VARIABLE_TRACER (v) && GFS_VARIABLE_TRACER (v)->advection.scheme != GFS_NONE && GFS_VARIABLE_TRACER (v)->advection.cfl < cfl) cfl = GFS_VARIABLE_TRACER (v)->advection.cfl; i = i->next; } return cfl; } /** * gfs_simulation_set_timestep: * @sim: a #GfsSimulation. * * Sets the time step for the next iteration of @sim using the CFL * (computed using gfs_domain_cfl()), the stability conditions for * source terms and taking into account the timings of the various * #GfsEvent associated to @sim. * * More precisely, the time step is adjusted (if necessary) so that * the time of the closest event is exactly reached after the * iteration. */ void gfs_simulation_set_timestep (GfsSimulation * sim) { gdouble t, cfl; g_return_if_fail (sim != NULL); t = sim->time.t; if ((cfl = min_cfl (sim)) < G_MAXDOUBLE) sim->advection_params.dt = cfl*(* GFS_SIMULATION_CLASS (GTS_OBJECT (sim)->klass)->cfl) (sim); else sim->advection_params.dt = G_MAXINT; if (sim->advection_params.dt > sim->time.dtmax) sim->advection_params.dt = sim->time.dtmax; GSList * i = GFS_DOMAIN (sim)->variables; while (i) { GfsVariable * v = i->data; if (v->sources) { GSList * j = GTS_SLIST_CONTAINER (v->sources)->items; while (j) { GfsSourceGeneric * s = j->data; if (GFS_SOURCE_GENERIC_CLASS (GTS_OBJECT (s)->klass)->stability) { gdouble dt = (* GFS_SOURCE_GENERIC_CLASS (GTS_OBJECT (s)->klass)->stability) (s, sim); if (dt < sim->advection_params.dt) sim->advection_params.dt = dt; } j = j->next; } } i = i->next; } gfs_all_reduce (GFS_DOMAIN (sim), sim->advection_params.dt, MPI_DOUBLE, MPI_MIN); gdouble tnext = G_MAXINT; i = sim->events->items; while (i) { gdouble next = gfs_event_next (i->data, sim); if (t < next && next < tnext) tnext = next + 1e-9; i = i->next; } if (sim->time.end < tnext) tnext = sim->time.end; gdouble n = ceil ((tnext - t)/sim->advection_params.dt); if (n > 0. && n < G_MAXINT) { sim->advection_params.dt = (tnext - t)/n; if (n == 1.) sim->tnext = tnext; else sim->tnext = t + sim->advection_params.dt; } else sim->tnext = t + sim->advection_params.dt; if (sim->advection_params.dt < 1e-9) sim->advection_params.dt = 1e-9; if (sim->time.t < sim->time.end && sim->advection_params.dt == G_MAXINT) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "could not find a suitable timescale to set the timestep.\n" "Please set a timescale explicitly (e.g. through the 'step' parameter\n" "of a GfsEvent)."); } /** * gfs_time_write: * @t: the time structure. * @fp: a file pointer. * * Writes in @fp a text representation of the time structure @t. */ void gfs_time_write (GfsTime * t, FILE * fp) { g_return_if_fail (t != NULL); g_return_if_fail (fp != NULL); fprintf (fp, "{ i = %u t = %g ", t->i, t->t); if (t->start != 0.) fprintf (fp, "start = %g ", t->start); if (t->istart != 0) fprintf (fp, "start = %u ", t->istart); if (t->end < G_MAXDOUBLE) fprintf (fp, "end = %g ", t->end); if (t->iend < G_MAXINT) fprintf (fp, "iend = %u ", t->iend); if (t->dtmax < G_MAXDOUBLE) fprintf (fp, "dtmax = %g ", t->dtmax); fputc ('}', fp); } /** * gfs_time_init: * @t: the #GfsTime. * * Initializes the time structure @t with default values. */ void gfs_time_init (GfsTime * t) { g_return_if_fail (t != NULL); t->t = t->start = 0.; t->end = G_MAXDOUBLE; t->i = t->istart = 0; t->iend = G_MAXINT; t->dtmax = G_MAXDOUBLE; } /** * gfs_time_read: * @t: the #GfsTime. * @fp: the #GtsFile. * * Reads a time structure from @fp and puts it in @t. */ void gfs_time_read (GfsTime * t, GtsFile * fp) { GtsFileVariable var[] = { {GTS_DOUBLE, "t", TRUE}, {GTS_DOUBLE, "start", TRUE}, {GTS_DOUBLE, "end", TRUE}, {GTS_UINT, "i", TRUE}, {GTS_UINT, "istart", TRUE}, {GTS_UINT, "iend", TRUE}, {GTS_DOUBLE, "dtmax", TRUE}, {GTS_NONE} }; g_return_if_fail (t != NULL); g_return_if_fail (fp != NULL); var[0].data = &t->t; var[1].data = &t->start; var[2].data = &t->end; var[3].data = &t->i; var[4].data = &t->istart; var[5].data = &t->iend; var[6].data = &t->dtmax; gts_file_assign_variables (fp, var); if (t->t < t->start) t->t = t->start; if (t->i < t->istart) t->i = t->istart; } /** * gfs_physical_params_write: * @p: the physical parameters structure. * @fp: a file pointer. * * Writes in @fp a text representation of the physical parameters * structure @p. */ void gfs_physical_params_write (GfsPhysicalParams * p, FILE * fp) { g_return_if_fail (p != NULL); g_return_if_fail (fp != NULL); fprintf (fp, "{ g = %g L = %g", p->g, p->L); if (p->alpha) { fputs (" alpha =", fp); gfs_function_write (p->alpha, fp); } fputs (" }", fp); } /** * gfs_physical_params_init: * @p: the #GfsPhysicalParams. * * Initializes the physical parameters structure @p with default values. */ void gfs_physical_params_init (GfsPhysicalParams * p) { g_return_if_fail (p != NULL); p->g = p->L = 1.; p->alpha = NULL; } /** * gfs_physical_params_read: * @p: the #GfsPhysicalParams. * @domain: a #GfsDomain. * @fp: the #GtsFile. * * Reads a physical parameters structure from @fp and puts it in @p. */ void gfs_physical_params_read (GfsPhysicalParams * p, GfsDomain * domain, GtsFile * fp) { g_return_if_fail (p != NULL); g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } fp->scope_max++; gts_file_next_token (fp); while (fp->type != GTS_ERROR && fp->type != '}') { if (fp->type == '\n') { gts_file_next_token (fp); continue; } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a keyword"); return; } else { gchar * id = g_strdup (fp->token->str); gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting `='"); return; } gts_file_next_token (fp); if (!strcmp (id, "g")) { /* fixme: units? */ p->g = gfs_read_constant (fp, domain); if (fp->type == GTS_ERROR) { g_free (id); return; } } else if (!strcmp (id, "L")) { p->L = gfs_read_constant (fp, domain); if (fp->type == GTS_ERROR) { g_free (id); return; } if (p->L == 0.) { g_free (id); gts_file_error (fp, "L must be different from zero"); return; } } else if (!strcmp (id, "alpha")) { p->alpha = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (p->alpha, domain, fp); if (fp->type == GTS_ERROR) { g_free (id); gts_object_destroy (GTS_OBJECT (p->alpha)); return; } } else { g_free (id); gts_file_error (fp, "unknown keyword `%s'", id); return; } g_free (id); } } if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); } static void error_handler (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { GfsDomain * domain = user_data; g_slist_free (domain->variables_io); domain->variables_io = NULL; GSList * i = domain->variables; while (i) { if (GFS_VARIABLE (i->data)->name) domain->variables_io = g_slist_append (domain->variables_io, i->data); i = i->next; } gchar fname[20] = "error.gfs"; if (domain->pid >= 0) snprintf (fname, 20, "error-%d.gfs", domain->pid); FILE * fp = fopen (fname, "w"); if (fp) { gfs_simulation_write (GFS_SIMULATION (domain), -1, fp); fclose (fp); } g_log_default_handler (log_domain, log_level, message, NULL); } /** * gfs_simulation_run: * @sim: a #GfsSimulation. * * Runs @sim. */ void gfs_simulation_run (GfsSimulation * sim) { g_return_if_fail (sim != NULL); guint id = g_log_set_handler ("Gfs", G_LOG_LEVEL_ERROR | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, error_handler, sim); GfsDomain * domain = GFS_DOMAIN (sim); g_timer_start (domain->clock); gfs_clock_start (domain->timer); gts_range_init (&domain->mpi_wait); (* GFS_SIMULATION_CLASS (GTS_OBJECT (sim)->klass)->run) (sim); gfs_clock_stop (domain->timer); g_timer_stop (domain->clock); g_log_remove_handler ("Gfs", id); } /** * gfs_simulation_map: * @sim: a #GfsSimulation. * @p: a #FttVector. * * Maps the physical space coordinates @p into computational space. */ void gfs_simulation_map (GfsSimulation * sim, FttVector * p) { g_return_if_fail (sim != NULL); g_return_if_fail (p != NULL); FttComponent c; for (c = 0; c < 3; c++) (&p->x)[c] *= (&GFS_DOMAIN (sim)->lambda.x)[c]/sim->physical_params.L; GSList * i = sim->maps->items; while (i) { (* GFS_MAP (i->data)->transform) (i->data, p, p); i = i->next; } } /** * gfs_simulation_map_inverse: * @sim: a #GfsSimulation. * @p: a #FttVector. * * Maps the computational coordinates @p into physical space. */ void gfs_simulation_map_inverse (GfsSimulation * sim, FttVector * p) { g_return_if_fail (sim != NULL); g_return_if_fail (p != NULL); GSList * reverse = g_slist_reverse (sim->maps->items); GSList * i = reverse; while (i) { (* GFS_MAP (i->data)->inverse) (i->data, p, p); i = i->next; } sim->maps->items = g_slist_reverse (reverse); FttComponent c; for (c = 0; c < 3; c++) (&p->x)[c] *= sim->physical_params.L/(&GFS_DOMAIN (sim)->lambda.x)[c]; } /** * gfs_simulation_map_vector: * @sim: a #GfsSimulation. * @p: the position. * @v: a #FttVector. * * Applies the mapping transformations associated with @sim at * location @p, to vector @v. */ void gfs_simulation_map_vector (GfsSimulation * sim, const FttVector * p, FttVector * v) { g_return_if_fail (sim != NULL); g_return_if_fail (p != NULL); g_return_if_fail (v != NULL); GSList * i = sim->maps->items; while (i) { (* GFS_MAP (i->data)->transform_vector) (i->data, p, v, v); i = i->next; } } /** * gfs_simulation_map_inverse_vector: * @sim: a #GfsSimulation. * @p: the position. * @v: a #FttVector. * * Applies the inverse mapping transformations associated with @sim at * location @p, to vector @v. */ void gfs_simulation_map_inverse_vector (GfsSimulation * sim, const FttVector * p, FttVector * v) { g_return_if_fail (sim != NULL); g_return_if_fail (p != NULL); g_return_if_fail (v != NULL); GSList * reverse = g_slist_reverse (sim->maps->items); GSList * i = reverse; while (i) { (* GFS_MAP (i->data)->inverse_vector) (i->data, p, v, v); i = i->next; } sim->maps->items = g_slist_reverse (reverse); } /** * gfs_simulation_map_inverse_cell: * @sim: a #GfsSimulation. * @p: an array of #FttVector. * * Array @p should contain the (x,y) coordinates of the four corners * of a #FttCell. This function will inverse transform these * coordinates taking into account any specificity of the mapping * (e.g. periodicity). */ void gfs_simulation_map_inverse_cell (GfsSimulation * sim, FttVector p[4]) { g_return_if_fail (sim != NULL); g_return_if_fail (p != NULL); GSList * reverse = g_slist_reverse (sim->maps->items); GSList * i = reverse; while (i) { (* GFS_MAP (i->data)->inverse_cell) (i->data, p, p); i = i->next; } sim->maps->items = g_slist_reverse (reverse); FttComponent j, c; for (j = 0; j < 4; j++) for (c = 0; c < 3; c++) (&p[j].x)[c] *= sim->physical_params.L/(&GFS_DOMAIN (sim)->lambda.x)[c]; } /** * gfs_dimensional_value: * @v: a #GfsVariable. * @val: a non-dimensional value of @v. * * Returns: the dimensional value of @val according to the units of @v. */ gdouble gfs_dimensional_value (GfsVariable * v, gdouble val) { g_return_val_if_fail (v != NULL, 0.); gdouble L; if (val == GFS_NODATA || v->units == 0. || (L = GFS_SIMULATION (v->domain)->physical_params.L) == 1.) return val; return val*pow (L, v->units); } /** * gfs_variable_is_dimensional: * @v: a #GfsVariable. * * Returns: %TRUE if @v has dimensions, %FALSE otherwise. */ gboolean gfs_variable_is_dimensional (GfsVariable * v) { g_return_val_if_fail (v != NULL, FALSE); if (v->units == 0. || GFS_SIMULATION (v->domain)->physical_params.L == 1.) return FALSE; return TRUE; } /** \endobject{GfsSimulation} */ /** * The advection solver. * \beginobject{GfsAdvection} */ static void event_do_adapt (GfsEvent * event, GfsSimulation * sim) { if (GFS_IS_ADAPT (event)) gfs_event_do (event, sim); } static void event_do_not_adapt (GfsEvent * event, GfsSimulation * sim) { if (!GFS_IS_ADAPT (event)) gfs_event_do (event, sim); } static void advection_run (GfsSimulation * sim) { GfsDomain * domain = GFS_DOMAIN (sim); gboolean streamfunction = FALSE; #if FTT_2D GSList * i = domain->variables; while (i && !streamfunction) { streamfunction = (GFS_IS_VARIABLE_STREAM_FUNCTION (i->data) != NULL); i = i->next; } #endif /* 2D */ gfs_simulation_refine (sim); gfs_simulation_init (sim); /* ignore default advection scheme (use per tracer parameters only) */ sim->advection_params.scheme = GFS_NONE; while (sim->time.t < sim->time.end && sim->time.i < sim->time.iend) { gdouble tstart = gfs_clock_elapsed (domain->timer); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) event_do_adapt, sim); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); gfs_simulation_adapt (sim); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) event_do_not_adapt, sim); if (!streamfunction) { gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL); gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_interpolated_normal_velocity, gfs_domain_velocity (domain)); } gfs_simulation_set_timestep (sim); gfs_advance_tracers (sim, sim->advection_params.dt); sim->time.t = sim->tnext; sim->time.i++; gts_range_add_value (&domain->timestep, gfs_clock_elapsed (domain->timer) - tstart); gts_range_update (&domain->timestep); gts_range_add_value (&domain->size, gfs_domain_size (domain, FTT_TRAVERSE_LEAFS, -1)); gts_range_update (&domain->size); } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL); } static void gfs_advection_class_init (GfsSimulationClass * klass) { klass->run = advection_run; } GfsSimulationClass * gfs_advection_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_advection_info = { "GfsAdvection", sizeof (GfsSimulation), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) gfs_advection_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), &gfs_advection_info); } return klass; } /** \endobject{GfsAdvection} */ /** * The Poisson solver. * \beginobject{GfsPoisson} */ typedef struct { GfsVariable * divu, * div; gdouble ddiv; GtsRange vol; } DivData; static void rescale_div (FttCell * cell, DivData * p) { gdouble size = ftt_cell_size (cell); gdouble a = size*size*gfs_domain_cell_fraction (p->div->domain, cell); GFS_VALUE (cell, p->div) = GFS_VALUE (cell, p->divu)*a; gts_range_add_value (&p->vol, a); } static void add_ddiv (FttCell * cell, DivData * p) { gdouble size = ftt_cell_size (cell); GFS_VALUE (cell, p->div) += size*size*p->ddiv*gfs_domain_cell_fraction (p->div->domain, cell); } static void correct_div (GfsDomain * domain, GfsVariable * divu, GfsVariable * div, gboolean dirichlet) { DivData p = { divu, div }; gts_range_init (&p.vol); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) rescale_div, &p); if (!dirichlet) { gts_range_update (&p.vol); p.ddiv = - gfs_domain_stats_variable (domain, div, FTT_TRAVERSE_LEAFS, -1, NULL, NULL).mean/p.vol.mean; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) add_ddiv, &p); } } static void has_dirichlet (FttCell * cell, GfsVariable * p) { if (((cell)->flags & GFS_FLAG_DIRICHLET) != 0) p->centered = FALSE; } typedef struct { GfsVariable * lhs; gboolean dirichlet; } CompatPar; static void check_box_dirichlet (GfsBox * box, CompatPar * p) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); GfsBc * bc = gfs_boundary_lookup_bc (b, p->lhs); if (GFS_IS_BC_DIRICHLET (bc)) { p->dirichlet = TRUE; return; } } } static void poisson_run (GfsSimulation * sim) { GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * dia, * div, * res = NULL, * res1, * p; GfsMultilevelParams * par = &sim->approx_projection_params; GSList * i; gfs_simulation_refine (sim); gfs_simulation_init (sim); i = domain->variables; while (i) { if (GFS_IS_VARIABLE_RESIDUAL (i->data)) res = i->data; i = i->next; } p = gfs_variable_from_name (domain->variables, "P"); gfs_domain_surface_bc (domain, p); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) has_dirichlet, p); if (!p->centered) { guint nf = gfs_check_solid_fractions (domain); if (nf > 0) g_warning ("the solid surface cuts %d boundary cells,\n" "this may cause errors for the Poisson solution\n", nf); } gboolean dirichlet = !p->centered; gfs_all_reduce (domain, dirichlet, MPI_INT, MPI_MAX); if (!dirichlet) { /* check whether any boundary has a Dirichlet condition on @p */ CompatPar q = { p, FALSE }; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) check_box_dirichlet, &q); gfs_all_reduce (domain, q.dirichlet, MPI_INT, MPI_MAX); dirichlet = q.dirichlet; } div = gfs_temporary_variable (domain); res1 = res ? res : gfs_temporary_variable (domain); dia = gfs_temporary_variable (domain); while (sim->time.i < sim->time.iend && sim->time.t < sim->time.end) { gdouble tstart = gfs_clock_elapsed (domain->timer); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); gfs_simulation_adapt (sim); gfs_domain_surface_bc (domain, p); correct_div (domain, gfs_variable_from_name (domain->variables, "Div"), div, dirichlet); gfs_poisson_coefficients (domain, sim->physical_params.alpha, FALSE, p->centered, TRUE); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_reset, dia); par->poisson_solve (domain, par, p, div, res1, dia, 1.); sim->time.t = sim->tnext; sim->time.i++; gts_range_add_value (&domain->timestep, gfs_clock_elapsed (domain->timer) - tstart); gts_range_update (&domain->timestep); gts_range_add_value (&domain->size, gfs_domain_size (domain, FTT_TRAVERSE_LEAFS, -1)); gts_range_update (&domain->size); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL); gts_object_destroy (GTS_OBJECT (dia)); gts_object_destroy (GTS_OBJECT (div)); if (!res) gts_object_destroy (GTS_OBJECT (res1)); } static void poisson_class_init (GfsSimulationClass * klass) { klass->run = poisson_run; } static void poisson_init (GfsDomain * domain) { gfs_domain_add_variable (domain, "Div", "Right-hand-side of the Poisson equation"); GFS_SIMULATION (domain)->time.iend = 1; } GfsSimulationClass * gfs_poisson_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_poisson_info = { "GfsPoisson", sizeof (GfsSimulation), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) poisson_class_init, (GtsObjectInitFunc) poisson_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), &gfs_poisson_info); } return klass; } /** \endobject{GfsPoisson} */ /** * The axisymmetric Euler solver. * \beginobject{GfsAxi} */ static void axi_read (GtsObject ** object, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_axi_class ())->parent_class->read) (object, fp); if (fp->type == GTS_ERROR) return; GfsDomain * domain = GFS_DOMAIN (*object); domain->refpos.y = 0.5; GfsVariable * w = gfs_variable_from_name (domain->variables, "W"); if (w) { if (!GFS_IS_VARIABLE_TRACER (w)) { gts_file_error (fp, "W (the azimuthal velocity) must be a tracer"); return; } w->component = FTT_Y; /* to include the appropriate diffusion metric terms */ } } static gdouble axi_face_metric (const GfsDomain * domain, const FttCellFace * face) { FttVector p; ftt_face_pos (face, &p); return p.y; } static gdouble axi_cell_metric (const GfsDomain * domain, const FttCell * cell) { FttVector p; gfs_cell_cm (cell, &p); return p.y; } static void axi_solid_metric (const GfsDomain * domain, const FttCell * cell, FttVector * m) { g_assert (GFS_IS_MIXED (cell)); m->x = m->y = GFS_STATE (cell)->solid->ca.y; } static gdouble axi_scale_metric (const GfsDomain * domain, const FttCell * cell, FttComponent c) { if (c < 2) return 1.; FttVector p; gfs_cell_cm (cell, &p); return p.y; } static gdouble axi_viscous_metric_implicit (const GfsDomain * domain, FttCell * cell, FttComponent c) { if (c != FTT_Y) return 0.; FttVector p; gfs_cell_cm (cell, &p); return 1./(p.y*p.y); } static void axi_class_init (GfsSimulationClass * klass) { GTS_OBJECT_CLASS (klass)->read = axi_read; } static void axi_init (GfsDomain * domain) { domain->face_metric = axi_face_metric; domain->cell_metric = axi_cell_metric; domain->solid_metric = axi_solid_metric; domain->scale_metric = axi_scale_metric; domain->viscous_metric_implicit = axi_viscous_metric_implicit; } GfsSimulationClass * gfs_axi_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_axi_info = { "GfsAxi", sizeof (GfsSimulation), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) axi_class_init, (GtsObjectInitFunc) axi_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), &gfs_axi_info); } return klass; } /** \endobject{GfsAxi} */ /** * The axisymmetric advection solver. * \beginobject{GfsAdvectionAxi} */ GfsSimulationClass * gfs_advection_axi_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_advection_axi_info = { "GfsAdvectionAxi", sizeof (GfsSimulation), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) gfs_advection_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_axi_class ()), &gfs_advection_axi_info); } return klass; } /** \endobject{GfsAdvectionAxi} */ gerris-snapshot-131206/src/metric.c0000644000175100017510000021213612250371171014105 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2009-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Orthogonal curvilinear metric. */ #include #include "metric.h" #include #include "map.h" #include "solid.h" #include "source.h" #if USE_GSL # include #endif /** \beginobject{GfsGenericMetric} */ static gdouble face_metric_direction (const GfsDomain * domain, FttCell * cell, FttDirection d) { FttCellFace f; f.cell = cell; f.d = d; return (* domain->face_metric) (domain, &f); } /* see: doc/figures/viscous-metric.tm equation (4) */ static gdouble viscous_metric_implicit (const GfsDomain * domain, FttCell * cell, FttComponent component) { g_assert (component < FTT_DIMENSION); /* fixme: 2D only */ if (component > 1) return 0.; /* fixme: this does not include the "curvature" of the metric yet */ FttComponent c1 = component; FttComponent c2 = (c1 + 1) % 2; double h1h2 = (* domain->cell_metric) (domain, cell); double size = ftt_cell_size (cell); double h1_2 = (face_metric_direction (domain, cell, 2*c2) - face_metric_direction (domain, cell, 2*c2 + 1)); double h2_1 = (face_metric_direction (domain, cell, 2*c1) - face_metric_direction (domain, cell, 2*c1 + 1)); return (h1_2*h1_2 + h2_1*h2_1)/(size*size*h1h2*h1h2); } /* see: doc/figures/viscous-metric.tm equation (4) */ static gdouble viscous_metric_explicit (const GfsDomain * domain, FttCell * cell, GfsVariable * v, GfsDiffusion * d) { g_assert (v->component < FTT_DIMENSION); /* fixme: 2D only */ if (v->component > 1) return 0.; FttComponent c1 = v->component; FttComponent c2 = (c1 + 1) % 2; double h1h2 = (* domain->cell_metric) (domain, cell); double h1 = (* domain->scale_metric) (domain, cell, c1); double h2 = (* domain->scale_metric) (domain, cell, c2); double size = ftt_cell_size (cell); double h1_2 = (face_metric_direction (domain, cell, 2*c2) - face_metric_direction (domain, cell, 2*c2 + 1)); double h2_1 = (face_metric_direction (domain, cell, 2*c1) - face_metric_direction (domain, cell, 2*c1 + 1)); double u2_1 = gfs_center_gradient (cell, c1, v->vector[c2]->i); double u2_2 = gfs_center_gradient (cell, c2, v->vector[c2]->i); double eta = gfs_diffusion_cell (d, cell); /* fixme: this does not include the terms with derivatives of the viscosity yet */ /* fixme: this does not include the "curvature" of the metric yet */ /* fixme: this does not take into account density */ return eta*( + 2.*(u2_1*h1_2/h1 - u2_2*h2_1/h2)/(size*size) )/h1h2; } static void advection_metric (const GfsDomain * domain, FttCell * cell, FttComponent c1, gdouble m[2]) { g_assert (c1 < FTT_DIMENSION); /* fixme: 2D only */ g_assert (c1 <= 1); FttComponent c2 = (c1 + 1) % 2; double h1h2 = (* domain->cell_metric) (domain, cell); double size = ftt_cell_size (cell); double h1_2 = (face_metric_direction (domain, cell, 2*c2) - face_metric_direction (domain, cell, 2*c2 + 1)); double h2_1 = (face_metric_direction (domain, cell, 2*c1) - face_metric_direction (domain, cell, 2*c1 + 1)); m[0] = h1_2/(size*h1h2); m[1] = h2_1/(size*h1h2); } static void set_default_metric (GtsObject ** o, GtsFile * fp) { GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (domain->metric_data || domain->face_metric || domain->cell_metric) { gts_file_error (fp, "cannot use multiple metrics (yet)"); return; } domain->viscous_metric_implicit = viscous_metric_implicit; domain->viscous_metric_explicit = viscous_metric_explicit; domain->advection_metric = advection_metric; } static void generic_metric_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_generic_metric_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; set_default_metric (o, fp); } static void generic_metric_class_init (GtsObjectClass * klass) { klass->read = generic_metric_read; } GfsEventClass * gfs_generic_metric_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsGenericMetric", sizeof (GfsEvent), sizeof (GfsEventClass), (GtsObjectClassInitFunc) generic_metric_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &info); } return klass; } /** \endobject{GfsGenericMetric} */ /** * A generic class for metrics which require storage. * \beginobject{GfsVariableMetric} */ static void variable_metric_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_variable_metric_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; set_default_metric (o, fp); } static void variable_metric_class_init (GtsObjectClass * klass) { klass->read = variable_metric_read; } GfsVariableClass * gfs_variable_metric_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsVariableMetric", sizeof (GfsVariable), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_metric_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &info); } return klass; } /** \endobject{GfsVariableMetric} */ /** \beginobject{GfsStoredMetric} */ #define USE_GSL 0 /* Coefficients from http://sparse-grids.de/ */ /* KPU: Univariate nested quadrature rules as basis - delayed Kronrod-Patterson rules, see Knut Petras (2003): "Smolyak cubature of given polynomial degree with few nodes for increasing dimension." Numerische Mathematik 93, 729-753. */ static double kpu_1d_l3[3][2] = { {.1127017, .2777778}, {.5, .4444444}, {.8872983, .2777778} }; static double kpu_2d_l2[5][3] = { {.1127017, .5, .2777778}, {.5, .1127017, .2777778}, {.5, .5, -.1111112}, {.5, .8872983, .2777778}, {.8872983, .5, .2777778} }; static double kpu_2d_l3[9][3] = { {.1127017, .1127017, .07716050617284001}, {.1127017, .5, .12345678765432}, {.1127017, .8872983, .07716050617284001}, {.5, .1127017, .12345678765432}, {.5, .5, .19753082469136002}, {.5, .8872983, .12345678765432}, {.8872983, .1127017, .07716050617284001}, {.8872983, .5, .12345678765432}, {.8872983, .8872983, .07716050617284001} }; static double kpu_2d_l4[17][3] = { { .0197544, .5, .052328105232810528 }, { .1127017, .1127017, .077160506172840024 }, { .1127017, .5, -.020076998921278625 }, { .1127017, .8872983, .077160506172840024 }, { .2828781, .5, .20069872006987202 }, { .5, .0197544, .052328105232810528 }, { .5, .1127017, -.020076998921278667 }, { .5, .2828781, .20069872006987202 }, { .5, .5, -.24044133021697545 }, { .5, .7171219, .20069872006987202 }, { .5, .8872983, -.020076998921278667 }, { .5, .9802456, .052328105232810528 }, { .7171219, .5, .20069872006987202 }, { .8872983, .1127017, .077160506172840024 }, { .8872983, .5, -.020076998921278625 }, { .8872983, .8872983, .077160506172840024 }, { .9802456, .5, .052328105232810528 }, }; #define EPS 1e-6 static double ru_rv (FttVector r, GfsMap * map) { FttVector ru = { r.x + EPS, r.y, 0. }; FttVector rv = { r.x, r.y + EPS, 0. }; (* map->inverse) (map, &r, &r); (* map->inverse) (map, &ru, &ru); (* map->inverse) (map, &rv, &rv); ru.x -= r.x; ru.y -= r.y; ru.z -= r.z; rv.x -= r.x; rv.y -= r.y; rv.z -= r.z; return sqrt ((ru.x*ru.x + ru.y*ru.y + ru.z*ru.z)*(rv.x*rv.x + rv.y*rv.y + rv.z*rv.z) /* the cross-term should be zero for an orthogonal metric but we keep them for clarity*/ - (ru.x*rv.x + ru.y*rv.y + ru.z*rv.z)*(ru.x*rv.x + ru.y*rv.y + ru.z*rv.z) ); } static double integration2d (GfsMap * map, double u1, double v1, double u2, double v2) { int i; FttVector r; double du = u2 - u1; double dv = v2 - v1; double a = 0.; r.z = 0.; for (i = 0; i < 9; i++) { r.x = u1 + du*kpu_2d_l3[i][0]; r.y = v1 + dv*kpu_2d_l3[i][1]; a += kpu_2d_l3[i][2]*ru_rv (r, map); } return a*du*dv; } typedef struct { FttVector * r; GfsMap * map; gdouble v1, v2; } RuRvData; static double ru (FttVector r, GfsMap * map) { FttVector dr = { r.x + EPS, r.y, 0. }; (* map->inverse) (map, &r, &r); (* map->inverse) (map, &dr, &dr); dr.x -= r.x; dr.y -= r.y; dr.z -= r.z; return sqrt ((dr.x*dr.x + dr.y*dr.y + dr.z*dr.z)); } static double rv (FttVector r, GfsMap * map) { FttVector dr = { r.x, r.y + EPS, 0. }; (* map->inverse) (map, &r, &r); (* map->inverse) (map, &dr, &dr); dr.x -= r.x; dr.y -= r.y; dr.z -= r.z; return sqrt ((dr.x*dr.x + dr.y*dr.y + dr.z*dr.z)); } /* Returns: \sqrt{(r_u.r_u)} */ #if USE_GSL static double ru_gsl (double u, void * data) { RuRvData * p = data; p->r->x = u; return ru (*(p->r), p->map)/EPS; } /* Returns: \sqrt{(r_v.r_v)} */ static double rv_gsl (double v, void * data) { RuRvData * p = data; p->r->y = v; return rv (*(p->r), p->map)/EPS; } static gdouble integration (const gsl_function * f, double a, double b) { double result, abserr; size_t neval; /* we set the error to one but the QNG code will use at least 21 points which is enough */ gsl_integration_qng (f, a, b, 1., 0., &result, &abserr, &neval); // fprintf (stderr, "neval: %d abserr: %g result: %g\n", neval, abserr, result); return result; } #endif /* USE_GSL */ /* Returns: \int \sqrt{(r_u.r_u)} du */ static double length_u (GfsMap * map, double u1, double u2, double v) { #if USE_GSL FttVector r; RuRvData p = { &r, map }; r.y = v; r.z = 0.; gsl_function f; f.function = ru_gsl; f.params = &p; return integration (&f, u1, u2); #else int i; FttVector r; double du = u2 - u1; double a = 0.; r.y = v; r.z = 0.; for (i = 0; i < 3; i++) { r.x = u1 + du*kpu_1d_l3[i][0]; a += kpu_1d_l3[i][1]*ru (r, map); } return a*du/EPS; #endif } /* Returns: \int \sqrt{(r_v.r_v)} dv */ static double length_v (GfsMap * map, double v1, double v2, double u) { #if USE_GSL FttVector r; gsl_function f; RuRvData p = { &r, map }; f.function = rv_gsl; f.params = &p; r.x = u; r.z = 0.; return integration (&f, v1, v2); #else int i; FttVector r; double dv = v2 - v1; double a = 0.; r.x = u; r.z = 0.; for (i = 0; i < 3; i++) { r.y = v1 + dv*kpu_1d_l3[i][0]; a += kpu_1d_l3[i][1]*rv (r, map); } return a*dv/EPS; #endif } /* Returns: \sqrt{(r_u.r_u)(r_v.r_v) - (r_u.r_v)^2} */ #if USE_GSL static double ru_rv_gsl (double v, void * data) { RuRvData * p = data; p->r->y = v; return ru_rv (*(p->r), p->map)/(EPS*EPS); } /* Returns: \int \sqrt{(r_u.r_u)(r_v.r_v) - (r_u.r_v)^2} dv */ static double ru_rv_dv (double u, void * data) { RuRvData * p = data; gsl_function f; f.function = ru_rv_gsl; f.params = p; p->r->x = u; return integration (&f, p->v1, p->v2); } #endif /* USE_GSL */ /* Returns: \int\int \sqrt{(r_u.r_u)(r_v.r_v) - (r_u.r_v)^2} du dv */ static double area (GfsMap * map, double u1, double v1, double u2, double v2) { #if USE_GSL FttVector r; gsl_function f; RuRvData p = { &r, map, v1, v2 }; f.function = ru_rv_dv; f.params = &p; r.z = 0.; return integration (&f, u1, u2); #else return integration2d (map, u1, v1, u2, v2)/(EPS*EPS); #endif } static void metric_coarse_fine (FttCell * parent, GfsVariable * a) { if (GFS_CELL_IS_BOUNDARY (parent)) return; FttVector p; FttCellChildren child; gdouble h = ftt_cell_size (parent)/2., sa = 0.; ftt_cell_children (parent, &child); int i; GfsStoredMetric * m = GFS_STORED_METRIC (a); GfsMap * map = m->map; for (i = 0; i < FTT_CELLS; i++) { ftt_cell_pos (child.c[i], &p); GFS_VALUE (child.c[i], a) = area (map, p.x - h/2., p.y - h/2., p.x + h/2., p.y + h/2.)/(h*h); sa += GFS_VALUE (child.c[i], a); } if (m->e) { double e = GFS_VALUE (parent, a) - sa/4.; for (i = 0; i < FTT_CELLS; i++) GFS_VALUE (child.c[i], m->e) = e; } ftt_cell_pos (parent, &p); GFS_VALUE (child.c[0], m->h[0]) = GFS_VALUE (child.c[1], m->h[1]) = length_v (map, p.y, p.y + h, p.x)/h; GFS_VALUE (child.c[0], m->h[3]) = GFS_VALUE (child.c[2], m->h[2]) = length_u (map, p.x - h, p.x, p.y)/h; GFS_VALUE (child.c[2], m->h[0]) = GFS_VALUE (child.c[3], m->h[1]) = length_v (map, p.y - h, p.y, p.x)/h; GFS_VALUE (child.c[1], m->h[3]) = GFS_VALUE (child.c[3], m->h[2]) = length_u (map, p.x, p.x + h, p.y)/h; GFS_VALUE (child.c[0], m->h[2]) = length_u (map, p.x - h, p.x, p.y + h)/h; GFS_VALUE (child.c[0], m->h[1]) = length_v (map, p.y, p.y + h, p.x - h)/h; GFS_VALUE (child.c[1], m->h[2]) = length_u (map, p.x, p.x + h, p.y + h)/h; GFS_VALUE (child.c[1], m->h[0]) = length_v (map, p.y, p.y + h, p.x + h)/h; GFS_VALUE (child.c[2], m->h[3]) = length_u (map, p.x - h, p.x, p.y - h)/h; GFS_VALUE (child.c[2], m->h[1]) = length_v (map, p.y - h, p.y, p.x - h)/h; GFS_VALUE (child.c[3], m->h[3]) = length_u (map, p.x, p.x + h, p.y - h)/h; GFS_VALUE (child.c[3], m->h[0]) = length_v (map, p.y - h, p.y, p.x + h)/h; } static void metric_fine_coarse (FttCell * parent, GfsVariable * a) { FttCellChildren child; guint n; ftt_cell_children (parent, &child); gdouble va = 0.; for (n = 0; n < 4; n++) va += GFS_VALUE (child.c[n], a); GFS_VALUE (parent, a) = va/4.; GfsStoredMetric * m = GFS_STORED_METRIC (a); GFS_VALUE (parent, m->h[0]) = (GFS_VALUE (child.c[1], m->h[0]) + GFS_VALUE (child.c[3], m->h[0]))/2.; GFS_VALUE (parent, m->h[1]) = (GFS_VALUE (child.c[0], m->h[1]) + GFS_VALUE (child.c[2], m->h[1]))/2.; GFS_VALUE (parent, m->h[2]) = (GFS_VALUE (child.c[0], m->h[2]) + GFS_VALUE (child.c[1], m->h[2]))/2.; GFS_VALUE (parent, m->h[3]) = (GFS_VALUE (child.c[2], m->h[3]) + GFS_VALUE (child.c[3], m->h[3]))/2.; } static gdouble face_metric (const GfsDomain * domain, const FttCellFace * face) { if (face->d/2 > FTT_Y) return 1.; return GFS_VALUE (face->cell, GFS_STORED_METRIC (domain->metric_data)->h[face->d]); } static gdouble cell_metric (const GfsDomain * domain, const FttCell * cell) { return GFS_VALUE (cell, GFS_VARIABLE (domain->metric_data)); } static void solid_metric (const GfsDomain * domain, const FttCell * cell, FttVector * m) { g_assert (GFS_IS_MIXED (cell)); g_assert_not_implemented (); } static gdouble scale_metric (const GfsDomain * domain, const FttCell * cell, FttComponent c) { /* fixme: this does not allow for Z-metric */ if (c > FTT_Y) return 1.; FttComponent d = FTT_ORTHOGONAL_COMPONENT (c); return (GFS_VALUE (cell, GFS_STORED_METRIC (domain->metric_data)->h[2*d]) + GFS_VALUE (cell, GFS_STORED_METRIC (domain->metric_data)->h[2*d + 1]))/2.; } static gdouble face_scale_metric (const GfsDomain * domain, const FttCellFace * face, FttComponent c) { /* fixme: this does not allow for Z-metric */ if (c > FTT_Y) return 1.; /* fixme: this is not second-order for fine/coarse faces */ return (scale_metric (domain, face->cell, c) + scale_metric (domain, face->neighbor, c))/2.; } static void none (FttCell * parent, GfsVariable * v) { } static void stored_metric_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_stored_metric_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); GfsStoredMetric * m = GFS_STORED_METRIC (*o); if (fp->type == GTS_STRING) { if (!(m->e = gfs_domain_get_or_add_variable (domain, fp->token->str, "Metric error"))) { gts_file_error (fp, "`%s' is a reserved variable name", fp->token->str); return; } m->e->fine_coarse = m->e->coarse_fine = none; gts_file_next_token (fp); } GfsVariable * a = GFS_VARIABLE (*o); FttDirection d; for (d = 0; d < 4; d++) { gchar * name = g_strdup_printf ("%sh%d", a->name, d); m->h[d] = gfs_domain_get_or_add_variable (domain, name, "Face metric"); m->h[d]->fine_coarse = m->h[d]->coarse_fine = none; g_free (name); } g_free (a->description); a->description = g_strdup ("Cell metric"); a->coarse_fine = metric_coarse_fine; a->fine_coarse = metric_fine_coarse; m->map = GFS_MAP (gts_object_new (GTS_OBJECT_CLASS (m->map_class))); gfs_object_simulation_set (m->map, domain); gts_container_add (GTS_CONTAINER (GFS_SIMULATION (domain)->maps), GTS_CONTAINEE (m->map)); domain->metric_data = *o; domain->face_metric = face_metric; domain->cell_metric = cell_metric; domain->solid_metric = solid_metric; domain->scale_metric = scale_metric; domain->face_scale_metric = face_scale_metric; } static void stored_metric_class_init (GtsObjectClass * klass) { klass->read = stored_metric_read; } static void stored_metric_init (GfsStoredMetric * m) { m->map_class = gfs_map_class (); } GfsVariableClass * gfs_stored_metric_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsStoredMetric", sizeof (GfsStoredMetric), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) stored_metric_class_init, (GtsObjectInitFunc) stored_metric_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_metric_class ()), &info); } return klass; } /** \endobject{GfsStoredMetric} */ /* GfsMapMetric: Header */ #define GFS_IS_MAP_METRIC(obj) (gts_object_is_from_class (obj,\ gfs_map_metric_class ())) static GfsMapClass * gfs_map_metric_class (void); /* GfsMapMetric: Object */ static void gfs_map_metric_read (GtsObject ** o, GtsFile * fp) { /* this mapping cannot be used independently from GfsMetric */ } static void gfs_map_metric_write (GtsObject * o, FILE * fp) { /* this mapping cannot be used independently from GfsMetric */ } static void gfs_map_metric_class_init (GfsMapClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_map_metric_read; GTS_OBJECT_CLASS (klass)->write = gfs_map_metric_write; } static void map_metric_inverse (GfsMap * map, const FttVector * src, FttVector * dest) { GfsMetric * m = GFS_DOMAIN (gfs_object_simulation (map))->metric_data; FttVector src1 = *src; /* just in case src == dest */ FttComponent c; for (c = 0; c < 3; c++) if ((&m->x)[c]) (&dest->x)[c] = gfs_function_spatial_value ((&m->x)[c], &src1); else (&dest->x)[c] = (&src1.x)[c]; } static void gfs_map_metric_init (GfsMap * map) { map->inverse = map_metric_inverse; } static GfsMapClass * gfs_map_metric_class (void) { static GfsMapClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_map_metric_info = { "GfsMapMetric", sizeof (GfsMap), sizeof (GfsMapClass), (GtsObjectClassInitFunc) gfs_map_metric_class_init, (GtsObjectInitFunc) gfs_map_metric_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_map_class ()), &gfs_map_metric_info); } return klass; } /** \beginobject{GfsMetric} */ static void metric_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_metric_class ())->parent_class->write) (o, fp); GfsMetric * m = GFS_METRIC (o); fputs (" {", fp); FttComponent c; static gchar name[3][2] = {"x", "y", "z"}; for (c = 0; c < 3; c++) if ((&m->x)[c]) { fprintf (fp, "\n %s = ", name[c]); gfs_function_write ((&m->x)[c], fp); } fputs ("\n }", fp); } static void metric_destroy (GtsObject * o) { GfsMetric * m = GFS_METRIC (o); FttComponent c; for (c = 0; c < 3; c++) if ((&m->x)[c]) gts_object_destroy (GTS_OBJECT ((&m->x)[c])); (* GTS_OBJECT_CLASS (gfs_metric_class ())->parent_class->destroy) (o); } static void metric_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_metric_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != '{') { gts_file_error (fp, "expecting a parameter block"); return; } GfsMetric * m = GFS_METRIC (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (m)); GtsFileVariable var[] = { {GTS_OBJ, "x", TRUE, &m->x}, {GTS_OBJ, "y", TRUE, &m->y}, {GTS_OBJ, "z", TRUE, &m->z}, {GTS_NONE} }; FttComponent c; for (c = 0; c < 3; c++) gfs_object_simulation_set ((&m->x)[c], domain); gts_file_assign_variables (fp, var); for (c = 0; c < 3; c++) if (!var[c].set) { gts_object_destroy (GTS_OBJECT ((&m->x)[c])); (&m->x)[c] = NULL; } if (fp->type == GTS_ERROR) return; } static void metric_class_init (GtsObjectClass * klass) { klass->destroy = metric_destroy; klass->read = metric_read; klass->write = metric_write; } static void metric_init (GfsMetric * m) { GFS_STORED_METRIC (m)->map_class = gfs_map_metric_class (); m->x = gfs_function_new (gfs_function_map_class (), 1.); m->y = gfs_function_new (gfs_function_map_class (), 1.); m->z = gfs_function_new (gfs_function_map_class (), 1.); } GfsVariableClass * gfs_metric_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_metric_info = { "GfsMetric", sizeof (GfsMetric), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) metric_class_init, (GtsObjectInitFunc) metric_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_stored_metric_class ()), &gfs_metric_info); } return klass; } /** \endobject{GfsMetric} */ /* "Expanded spherical cube" metric */ #define N 30 #if 1 /* Conformal mapping Taylor coefficients: from Rancic et al, 1996, Table B.1 */ static double A[N] = { 1.47713062600964, -0.38183510510174, -0.05573058001191, -0.00895883606818, -0.00791315785221, -0.00486625437708, -0.00329251751279, -0.00235481488325, -0.00175870527475, -0.00135681133278, -0.00107459847699, -0.00086944475948, -0.00071607115121, -0.00059867100093, -0.00050699063239, -0.00043415191279, -0.00037541003286, -0.00032741060100, -0.00028773091482, -0.00025458777519, -0.00022664642371, -0.00020289261022, -0.00018254510830, -0.00016499474461, -0.00014976117168, -0.00013646173946, -0.00012478875823, -0.00011449267279, -0.00010536946150, -0.00009725109376 }; static double B[N] = { 0.67698819751739, 0.11847293456554, 0.05317178134668, 0.02965810434052, 0.01912447304028, 0.01342565621117, 0.00998873323180, 0.00774868996406, 0.00620346979888, 0.00509010874883, 0.00425981184328, 0.00362308956077, 0.00312341468940, 0.00272360948942, 0.00239838086555, 0.00213001905118, 0.00190581316131, 0.00171644156404, 0.00155493768255, 0.00141600715207, 0.00129556597754, 0.00119042140226, 0.00109804711790, 0.00101642216628, 0.00094391366522, 0.00087919021224, 0.00082115710311, 0.00076890728775, 0.00072168382969, 0.00067885087750 }; #else /* Conformal mapping Taylor coefficients: from map_xy2xyz.m from mitgcm */ static double A[N] = { 1.47713057321600, -0.38183513110512, -0.05573055466344, -0.00895884801823, -0.00791314396396, -0.00486626515498, -0.00329250387158, -0.00235482619663, -0.00175869000970, -0.00135682443774, -0.00107458043205, -0.00086946107050, -0.00071604933286, -0.00059869243613, -0.00050696402446, -0.00043418115349, -0.00037537743098, -0.00032745130951, -0.00028769063795, -0.00025464473946, -0.00022659577923, -0.00020297175587, -0.00018247947703, -0.00016510295548, -0.00014967258633, -0.00013660647356, -0.00012466390509, -0.00011468147908, -0.00010518717478, -0.00009749136078 }; static double B[N] = { 0.67698822171341, 0.11847295533659, 0.05317179075349, 0.02965811274764, 0.01912447871071, 0.01342566129383, 0.00998873721022, 0.00774869352561, 0.00620347278164, 0.00509011141874, 0.00425981415542, 0.00362309163280, 0.00312341651697, 0.00272361113245, 0.00239838233411, 0.00213002038153, 0.00190581436893, 0.00171644267546, 0.00155493871562, 0.00141600812949, 0.00129556691848, 0.00119042232809, 0.00109804804853, 0.00101642312253, 0.00094391466713, 0.00087919127990, 0.00082115825576, 0.00076890854394, 0.00072168520663, 0.00067885239089 }; #endif static complex double WofZ (complex double Z) { complex double W = 0.; int n = N; while (n-- > 0) W = (W + A[n])*Z; return W; } static complex double ZofW (complex double W) { complex double Z = 0.; int n = N; while (n-- > 0) Z = (Z + B[n])*W; return Z; } /* I^(1/3) */ #define I3 (0.86602540378444 + I/2.) /* sqrt (3.) - 1. */ #define RA 0.73205080756888 /* Conformal mapping of a cube face onto a sphere. Maps (x,y) on the * north-pole face of a cube to (X,Y,Z) coordinates in physical space. * * Based on f77 code from Jim Purser & Misha Rancic. * * Face is oriented normal to Z-axis with X and Y increasing with x * and y. */ static void fmap_xy2XYZ (double x, double y, double * X, double * Y, double * Z) { int kx = x < 0., ky = y < 0.; x = fabs (x); y = fabs (y); int kxy = y > x; if (kxy) { double tmp = x; x = 1. - y; y = 1. - tmp; } else { x = 1. - x; y = 1. - y; } complex double z = (x + I*y)/2.; complex double W; if (cabs (z) > 0.) { W = WofZ (z*z*z*z); W = I3*cpow (W*I, 1./3.); } else W = 0.; complex double cb = I - 1.; complex double cc = RA*cb/2.; W = (W - RA)/(cb + cc*W); *X = creal (W); *Y = cimag (W); double H = 2./(1. + (*X)*(*X) + (*Y)*(*Y)); *X *= H; *Y *= H; *Z = H - 1.; if (kxy) { double tmp = *X; *X = *Y; *Y = tmp; } if (kx) *X = - *X; if (ky) *Y = - *Y; } /* Conformal mapping of a cube onto a sphere. Maps (x,y) on the * 6 faces of the cube to (X,Y,Z) coordinates in physical space. * * Based on f77 code from Jim Purser & Misha Rancic. * * Face 1 is oriented normal to Z-axis with X and Y increasing with x * and y (see doc/figures/cubed.fig). * * returns: FALSE if the input coordinates are invalid, TRUE otherwise. */ static void cmap_xy2XYZ (double x, double y, double * X, double * Y, double * Z) { x *= 2.; y *= 2.; /* fixme: causes crash in gfsview when saving in gnuplot format */ // g_assert (x >= -1. && x <= 7. && y >= -1. && y <= 5.); /* symmetries: see doc/figures/cubed.fig */ double tmp; if (y <= 1. && x <= 3.) { if (x <= 1.) /* face 1 */ fmap_xy2XYZ (x, y, X, Y, Z); else { /* face 2 */ fmap_xy2XYZ (x - 2., y, X, Y, Z); tmp = *X; *X = *Z; *Z = - tmp; } } else if (y <= 3. && x <= 5.) { if (x <= 3.) { /* face 3 */ fmap_xy2XYZ (x - 2., y - 2., X, Y, Z); tmp = *X; *X = -*Y; *Y = *Z; *Z = - tmp; } else { /* face 4 */ fmap_xy2XYZ (x - 4., y - 2., X, Y, Z); tmp = *Y; *Z = - *Z; *Y = - *X; *X = - tmp; } } else { if (x <= 5.) { /* face 5 */ fmap_xy2XYZ (x - 4., y - 4., X, Y, Z); tmp = *Z; *Z = *Y; *Y = - *X; *X = - tmp; } else { /* face 6 */ fmap_xy2XYZ (x - 6., y - 4., X, Y, Z); tmp = *Y; *Y = - *Z; *Z = tmp; } } } /* Conformal mapping of a sphere onto a cube face. Maps (X,Y,Z) coordinates * in physical space to (x,y) on the north-pole face of a cube. * * This is the inverse transform of fmap_xy2XYZ(). */ static void fmap_XYZ2xy (double X, double Y, double Z, double * x, double * y) { int kx = X < 0., ky = Y < 0.; X = fabs (X); Y = fabs (Y); int kxy = Y > X; if (kxy) { double tmp = X; X = Y; Y = tmp; } double H = Z + 1.; X /= H; Y /= H; complex double W = X + Y*I; complex double cb = I - 1.; complex double cc = RA*cb/2.; W = (W*cb + RA)/(1. - W*cc); W = W/I3; W = W*W*W; W /= I; complex double z = ZofW (W); z = cpow (z, 1./4.)*2.; *x = fabs (creal (z)); *y = fabs (cimag (z)); if (kxy) { *x = 1. - *x; *y = 1. - *y; } else { double tmp = *x; *x = 1. - *y; *y = 1. - tmp; } if (kx) *x = - *x; if (ky) *y = - *y; } static double angle_between_vectors (const double v1[3], const double v2[3]) { return acos (v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]); } static void plane_normal (const double p1[3], const double p2[3], double plane[3]) { plane[0] = p1[1]*p2[2] - p1[2]*p2[1]; plane[1] = p1[2]*p2[0] - p1[0]*p2[2]; plane[2] = p1[0]*p2[1] - p1[1]*p2[0]; double mag = sqrt (plane[0]*plane[0] + plane[1]*plane[1] + plane[2]*plane[2]); plane[0] /= mag; plane[1] /= mag; plane[2] /= mag; } static double excess_of_quad (const double v1[3], const double v2[3], const double v3[3], const double v4[3]) { double plane1[3], plane2[3], plane3[3], plane4[3]; plane_normal (v1, v2, plane1); plane_normal (v2, v3, plane2); plane_normal (v3, v4, plane3); plane_normal (v4, v1, plane4); return 2.*M_PI - angle_between_vectors (plane2, plane1) - angle_between_vectors (plane3, plane2) - angle_between_vectors (plane4, plane3) - angle_between_vectors (plane1, plane4); } /* GfsMapCubed: Object */ static void gfs_map_cubed_read (GtsObject ** o, GtsFile * fp) { /* this mapping cannot be used independently from GfsMetricCubed */ } static void gfs_map_cubed_write (GtsObject * o, FILE * fp) { /* this mapping cannot be used independently from GfsMetricCubed */ } static void gfs_map_cubed_class_init (GfsMapClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_map_cubed_read; GTS_OBJECT_CLASS (klass)->write = gfs_map_cubed_write; } /* Returns the index of the face of the cube containing */ /* the point of coordinates X,Y,Z */ static int face_num (gdouble X, gdouble Y, gdouble Z) { if (fabs(X) < Z && fabs(Y) < Z) return 1; else if (fabs(X) > fabs(Y) && X > fabs(Z)) return 2; else if (fabs(X) < fabs(Y) && Y > fabs(Z)) return 3; else if (-fabs(X) > Z && -fabs(Y) > Z) return 4; else if (fabs(X) > fabs(Y) && -X > fabs(Z)) return 5; else return 6; } static void map_cubed_transform (GfsMap * map, const FttVector * src, FttVector * dest) { GfsSimulation * sim = gfs_object_simulation (map); double lon = src->x*sim->physical_params.L*M_PI/180.; double lat = src->y*sim->physical_params.L*M_PI/180.; double coslat = cos (lat), sinlat = sin (lat), coslon = cos (lon); double X = coslat*sin (lon), Y = sinlat, Z = coslat*coslon; double x, y; /* Maybe not the most elegant but works */ switch (face_num(X,Y,Z)) { case 1: fmap_XYZ2xy (X, Y, fabs(Z), &x, &y); dest->x = x/2.; dest->y = y/2.; dest->z = src->z; break; case 2: X = - coslat*coslon; Z = sqrt (1. - X*X - Y*Y); fmap_XYZ2xy (X, Y, Z, &x, &y); dest->x = (1. + x/2.); dest->y = y/2.; dest->z = src->z; break; case 3: if (M_PI/4. < fabs(lon) && fabs(lon) < 3.*M_PI/4.) { X = - coslat*coslon; Z = sqrt (1. - X*X - Y*Y); fmap_XYZ2xy (X, Y, Z, &x, &y); dest->x = (1. + x/2.); if (lon < 0.) dest->y = (1. + y/2.); else dest->y = (1. - y/2.); dest->z = src->z; } else { fmap_XYZ2xy (X, Y, fabs(Z), &x, &y); if (lon > -3.*M_PI/4. && lon < 3.*M_PI/4.) dest->x = (1. - y/2.); else dest->x = (1. + y/2.); dest->y = (1. - x/2.); dest->z = src->z; } break; case 4: fmap_XYZ2xy (X, Y, fabs(Z), &x, &y); dest->x = (2. - y/2.); dest->y = (1. - x/2.); dest->z = src->z; break; case 5: X = coslat*coslon; Z = sqrt (1. - X*X - Y*Y); fmap_XYZ2xy (X, Y, Z, &x, &y); dest->x = (2. - y/2.); dest->y = (2. + x/2.); dest->z = src->z; break; case 6: if (M_PI/4. < fabs(lon) && fabs(lon) < 3.*M_PI/4.) { X = - coslat*coslon; Z = sqrt (1. - X*X - Y*Y); fmap_XYZ2xy (X, Y, Z, &x, &y); dest->y = (2. - x/2.); if (lon < 0.) dest->x = (3. + y/2.); else dest->x = (3. - y/2.); dest->z = src->z; } else { fmap_XYZ2xy (X, Y, fabs(Z), &x, &y); if (lon > -3.*M_PI/4. && lon < 3.*M_PI/4.) dest->y = (2. - y/2.); else dest->y = (2. + y/2.); dest->x = (3. + x/2.); dest->z = src->z; } break; default: g_assert_not_reached (); } } static void map_cubed_inverse (GfsMap * map, const FttVector * src, FttVector * dest) { GfsSimulation * sim = gfs_object_simulation (map); double X, Y, Z; cmap_xy2XYZ (src->x, src->y, &X, &Y, &Z); dest->x = atan2 (X, Z)*180./M_PI/sim->physical_params.L; dest->y = asin (Y)*180./M_PI/sim->physical_params.L; dest->z = src->z; } static void map_cubed_inverse_cell (GfsMap * map, const FttVector * src, FttVector * dest) { gint i; FttVector o = { 0., 0., 0. }; for (i = 0; i < 4; i++) { o.x += src[i].x; o.y += src[i].y; o.z += src[i].z; map_cubed_inverse (map, &(src[i]), &(dest[i])); } o.x /= 4.; o.y /= 4.; o.z /= 4.; map_cubed_inverse (map, &o, &o); /* make sure we do not cross periodic longitude boundary */ gdouble L = gfs_object_simulation (map)->physical_params.L; for (i = 0; i < 4; i++) if (dest[i].x > o.x + 180./L) dest[i].x -= 360./L; else if (dest[i].x < o.x - 180./L) dest[i].x += 360./L; } static double evaluate (const FttVector * x, const FttVector * rhs, FttVector * f) { gdouble delta = 0.; cmap_xy2XYZ (x->x, x->y, &f->x, &f->y, &f->z); int i; for (i = 0; i < 3; i++) { (&f->x)[i] -= (&rhs->x)[i]; delta += (&f->x)[i]*(&f->x)[i]; } return delta; } #define DELTA 1e-6 static void jacobian (const FttVector * x, const FttVector * rhs, FttVector * f, GtsMatrix * J) { int i, j; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) { FttVector df, dx = *x; (&dx.x)[j] += DELTA; cmap_xy2XYZ (dx.x, dx.y, &df.x, &df.y, &df.z); df.x *= 1. + dx.z; df.y *= 1. + dx.z; df.z *= 1. + dx.z; J[i][j] = ((&df.x)[i] - (&rhs->x)[i] - (&f->x)[i])/DELTA; } } static void normalized_jacobian (const FttVector * p, GtsMatrix * J) { FttVector f, rhs = {0., 0., 0.}; g_assert (p->z == 0.); evaluate (p, &rhs, &f); jacobian (p, &rhs, &f, J); /* normalize */ int i, j; for (i = 0; i < 3; i++) { gdouble h = 0.; for (j = 0; j < 3; j++) h += J[j][i]*J[j][i]; h = sqrt (h); for (j = 0; j < 3; j++) J[j][i] /= h; } } static void map_cubed_inverse_vector (GfsMap * map, const FttVector * p, const FttVector * src, FttVector * dest) { GtsMatrix J[4]; normalized_jacobian (p, J); FttVector src1; int i, j; for (i = 0; i < 3; i++) { (&src1.x)[i] = 0.; for (j = 0; j < 3; j++) (&src1.x)[i] += (&src->x)[j]*J[i][j]; } FttVector p1; map_cubed_inverse (map, p, &p1); GfsSimulation * sim = gfs_object_simulation (map); gdouble lon = p1.x*sim->physical_params.L*M_PI/180.; gdouble lat = p1.y*sim->physical_params.L*M_PI/180.; dest->x = (src1.x + tan (lat)*sin (lon)*src1.y)/cos (lon); dest->y = src1.y/cos (lat); dest->z = src1.z; } static void map_cubed_transform_vector (GfsMap * map, const FttVector * p, const FttVector * src, FttVector * dest) { GtsMatrix J[4]; normalized_jacobian (p, J); GtsMatrix * iJ = gts_matrix3_inverse (J); if (!iJ) { gts_matrix_print (J, stderr); g_assert_not_reached (); } FttVector src1 = *src; FttVector p1; map_cubed_inverse (map, p, &p1); GfsSimulation * sim = gfs_object_simulation (map); gdouble lon = p1.x*sim->physical_params.L*M_PI/180.; gdouble lat = p1.y*sim->physical_params.L*M_PI/180.; gdouble coslon = cos (lon), sinlon = sin (lon); gdouble sinlat = sin (lat); src1.x = coslon*src->x - sinlat*sinlon*src->y; src1.y = cos(lat)*src->y; src1.z = - sinlon*src->x - sinlat*coslon*src->y; int i, j; for (i = 0; i < 3; i++) { (&dest->x)[i] = 0.; for (j = 0; j < 3; j++) (&dest->x)[i] += (&src1.x)[j]*iJ[i][j]; } gts_matrix_destroy (iJ); } static void gfs_map_cubed_init (GfsMap * map) { map->transform = map_cubed_transform; map->inverse = map_cubed_inverse; map->inverse_cell = map_cubed_inverse_cell; map->inverse_vector = map_cubed_inverse_vector; map->transform_vector = map_cubed_transform_vector; } static GfsMapClass * gfs_map_cubed_class (void) { static GfsMapClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_map_cubed_info = { "GfsMapCubed", sizeof (GfsMap), sizeof (GfsMapClass), (GtsObjectClassInitFunc) gfs_map_cubed_class_init, (GtsObjectInitFunc) gfs_map_cubed_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_map_class ()), &gfs_map_cubed_info); } return klass; } /** * The 'cubed sphere' metric. * \beginobject{GfsMetricCubed} */ static gdouble cubed_face_scale_metric (const GfsDomain * domain, const FttCellFace * face, FttComponent c) { if (c > FTT_Y) return 1.; /* The transformation is conformal so the metric is isotropic */ return GFS_VALUE (face->cell, GFS_STORED_METRIC (domain->metric_data)->h[face->d]); } typedef struct { double x, y, z; double x1, y1, z1; double a; } Point; static void point_new (Point * p, double x, double y) { p->x = x; p->y = y; cmap_xy2XYZ (x, y, &p->x1, &p->y1, &p->z1); } static Point ** matrix_refine (Point ** m, int n) { int n1 = 2*n - 1, i, j; Point ** r = gfs_matrix_new (n1, n1, sizeof (Point)); for (i = 0; i < n; i++) for (j = 0; j < n; j++) r[2*i][2*j] = m[i][j]; for (i = 0; i < n - 1; i++) for (j = 0; j < n - 1; j++) { point_new (&r[2*i+1][2*j], (m[i][j].x + m[i+1][j].x)/2., m[i][j].y); point_new (&r[2*i][2*j+1], m[i][j].x, (m[i][j].y + m[i][j+1].y)/2.); point_new (&r[2*i+1][2*j+1], (m[i][j].x + m[i+1][j].x)/2., (m[i][j].y + m[i][j+1].y)/2.); } i = n - 1; for (j = 0; j < n - 1; j++) point_new (&r[2*i][2*j+1], m[i][j].x, (m[i][j].y + m[i][j+1].y)/2.); j = n - 1; for (i = 0; i < n - 1; i++) point_new (&r[2*i+1][2*j], (m[i][j].x + m[i+1][j].x)/2., m[i][j].y); gfs_matrix_free (m); return r; } static Point ** matrix_from_cell (FttCell * cell) { FttVector p; ftt_cell_pos (cell, &p); double h = ftt_cell_size (cell)/2.; Point ** r = gfs_matrix_new (2, 2, sizeof (Point)); point_new (&r[0][0], p.x - h, p.y - h); point_new (&r[1][0], p.x + h, p.y - h); point_new (&r[1][1], p.x + h, p.y + h); point_new (&r[0][1], p.x - h, p.y + h); return r; } static double matrix_a (Point ** r, int m, int i0, int j0) { int i, j; double a = 0.; double h = r[m][0].x - r[0][0].x; for (i = 0; i < m; i++) for (j = 0; j < m; j++) a += excess_of_quad (&r[i0+i][j0+j].x1, &r[i0+i+1][j0+j].x1, &r[i0+i+1][j0+j+1].x1, &r[i0+i][j0+j+1].x1); return 4.*a/(M_PI*M_PI*h*h); } static double matrix_hx (Point ** r, int m, int i0, int j0) { int i; double hx = 0.; double h = r[m][0].x - r[0][0].x; for (i = 0; i < m; i++) hx += angle_between_vectors (&r[i0+i][j0].x1, &r[i0+i+1][j0].x1); return 2.*hx/(M_PI*h); } static double matrix_hy (Point ** r, int m, int i0, int j0) { int j; double hy = 0.; double h = r[m][0].x - r[0][0].x; for (j = 0; j < m; j++) hy += angle_between_vectors (&r[i0][j0+j].x1, &r[i0][j0+j+1].x1); return 2.*hy/(M_PI*h); } static void cubed_coarse_fine (FttCell * parent, GfsVariable * a) { if (GFS_CELL_IS_BOUNDARY (parent)) return; GfsMetricCubed * cubed = GFS_METRIC_CUBED (a); Point ** r = matrix_from_cell (parent); r = matrix_refine (r, 2); int n = 3, level = cubed->level - (ftt_cell_level (parent) + 1); while (level-- > 0) { r = matrix_refine (r, n); n = 2*n - 1; } FttCellChildren child; ftt_cell_children (parent, &child); int m = n/2; GFS_VALUE (child.c[0], a) = matrix_a (r, m, 0, m); GFS_VALUE (child.c[1], a) = matrix_a (r, m, m, m); GFS_VALUE (child.c[2], a) = matrix_a (r, m, 0, 0); GFS_VALUE (child.c[3], a) = matrix_a (r, m, m, 0); GfsStoredMetric * metric = GFS_STORED_METRIC (a); GFS_VALUE (child.c[0], metric->h[0]) = GFS_VALUE (child.c[1], metric->h[1]) = matrix_hy (r, m, m, m); GFS_VALUE (child.c[0], metric->h[3]) = GFS_VALUE (child.c[2], metric->h[2]) = matrix_hx (r, m, 0, m); GFS_VALUE (child.c[2], metric->h[0]) = GFS_VALUE (child.c[3], metric->h[1]) = matrix_hy (r, m, m, 0); GFS_VALUE (child.c[1], metric->h[3]) = GFS_VALUE (child.c[3], metric->h[2]) = matrix_hx (r, m, m, m); GFS_VALUE (child.c[0], metric->h[2]) = matrix_hx (r, m, 0, n - 1); GFS_VALUE (child.c[0], metric->h[1]) = matrix_hy (r, m, 0, m); GFS_VALUE (child.c[1], metric->h[2]) = matrix_hx (r, m, m, n - 1); GFS_VALUE (child.c[1], metric->h[0]) = matrix_hy (r, m, n - 1, m); GFS_VALUE (child.c[2], metric->h[3]) = matrix_hx (r, m, 0, 0); GFS_VALUE (child.c[2], metric->h[1]) = matrix_hy (r, m, 0, 0); GFS_VALUE (child.c[3], metric->h[0]) = matrix_hy (r, m, n - 1, 0); GFS_VALUE (child.c[3], metric->h[3]) = matrix_hx (r, m, m, 0); gfs_matrix_free (r); } static void metric_cubed_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_metric_cubed_class ())->parent_class->write) (o, fp); if (GFS_METRIC_CUBED (o)->level != 0) fprintf (fp, " %d", GFS_METRIC_CUBED (o)->level); } static void metric_cubed_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_metric_cubed_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsMetricCubed * cubed = GFS_METRIC_CUBED (*o); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (level)"); return; } cubed->level = atoi (fp->token->str); gts_file_next_token (fp); GfsVariable * a = GFS_VARIABLE (*o); a->coarse_fine = cubed_coarse_fine; a->domain->face_scale_metric = cubed_face_scale_metric; } static void metric_cubed_class_init (GtsObjectClass * klass) { klass->read = metric_cubed_read; klass->write = metric_cubed_write; } static void metric_cubed_init (GfsStoredMetric * m) { m->map_class = gfs_map_cubed_class (); } GfsVariableClass * gfs_metric_cubed_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsMetricCubed", sizeof (GfsMetricCubed), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) metric_cubed_class_init, (GtsObjectInitFunc) metric_cubed_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_stored_metric_class ()), &info); } return klass; } /** \endobject{GfsMetricCubed} */ /* GfsMapLonLat: Header */ typedef struct _GfsMapLonLat GfsMapLonLat; struct _GfsMapLonLat { /*< private >*/ GfsMap parent; /*< public >*/ gdouble r; }; #define GFS_MAP_LONLAT(obj) GTS_OBJECT_CAST (obj,\ GfsMapLonLat,\ gfs_map_lonlat_class ()) #define GFS_IS_MAP_LONLAT(obj) (gts_object_is_from_class (obj,\ gfs_map_lonlat_class ())) static GfsMapClass * gfs_map_lonlat_class (void); static void gfs_map_lonlat_read (GtsObject ** o, GtsFile * fp) { /* this mapping cannot be used independently from GfsMetricLonLat */ } static void gfs_map_lonlat_write (GtsObject * o, FILE * fp) { /* this mapping cannot be used independently from GfsMetricLonLat */ } static void gfs_map_lonlat_class_init (GfsMapClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_map_lonlat_read; GTS_OBJECT_CLASS (klass)->write = gfs_map_lonlat_write; } static void map_lonlat_transform (GfsMap * map, const FttVector * src, FttVector * dest) { dest->x = src->x*M_PI/180.*GFS_MAP_LONLAT (map)->r; dest->y = src->y*M_PI/180.*GFS_MAP_LONLAT (map)->r; dest->z = src->z; } static void map_lonlat_inverse (GfsMap * map, const FttVector * src, FttVector * dest) { double x = src->x*180./(M_PI*GFS_MAP_LONLAT (map)->r); dest->x = x < -180. ? x + 360. : x > 180. ? x - 360. : x; dest->y = src->y*180./(M_PI*GFS_MAP_LONLAT (map)->r); dest->z = src->z; } static void map_lonlat_inverse_cell (GfsMap * map, const FttVector * src, FttVector * dest) { gint i; FttVector q; q.x = (src[0].x + src[1].x)/2.; q.y = (src[0].y + src[2].y)/2.; q.z = 0.; for (i = 0; i < 4; i++) (* map->inverse) (map, &(src[i]), &(dest[i])); /* Fix for cells that contain the -180/180 degrees longitude line */ if (dest[0].x < dest[1].x) { (* map->inverse) (map, &q, &q); if (q.x > dest[0].x) { dest[0].x = 2.*q.x - dest[1].x; dest[3].x = dest[0].x; } else { dest[1].x = 2.*q.x - dest[0].x; dest[2].x = dest[1].x; } } } static void gfs_map_lonlat_init (GfsMap * map) { map->transform = map_lonlat_transform; map->inverse = map_lonlat_inverse; map->inverse_cell = map_lonlat_inverse_cell; GFS_MAP_LONLAT (map)->r = 1.; } static GfsMapClass * gfs_map_lonlat_class (void) { static GfsMapClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_map_lonlat_info = { "GfsMapLonLat", sizeof (GfsMapLonLat), sizeof (GfsMapClass), (GtsObjectClassInitFunc) gfs_map_lonlat_class_init, (GtsObjectInitFunc) gfs_map_lonlat_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_map_class ()), &gfs_map_lonlat_info); } return klass; } /** * The longitude/latitude metric. * \beginobject{GfsMetricLonLat} */ static void metric_lon_lat_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_metric_lon_lat_class ())->parent_class->write) (o, fp); fprintf (fp, " %g", GFS_METRIC_LON_LAT (o)->r); } static gdouble lon_lat_face_metric (const GfsDomain * domain, const FttCellFace * face) { if (face->d/2 != FTT_Y) return 1.; return face->d == 2 ? GFS_VALUE (face->cell, GFS_METRIC_LON_LAT (domain->metric_data)->h2) : GFS_VALUE (face->cell, GFS_METRIC_LON_LAT (domain->metric_data)->h3); } static gdouble lon_lat_cell_metric (const GfsDomain * domain, const FttCell * cell) { return GFS_VALUE (cell, GFS_VARIABLE (domain->metric_data)); } static gdouble lon_lat_scale_metric (const GfsDomain * domain, const FttCell * cell, FttComponent c) { if (c != FTT_X) return 1.; return GFS_VALUE (cell, GFS_VARIABLE (domain->metric_data)); } static gdouble lon_lat_face_scale_metric (const GfsDomain * domain, const FttCellFace * face, FttComponent c) { if (c != FTT_X) return 1.; return gfs_face_interpolated_value (face, GFS_VARIABLE (domain->metric_data)->i); } static void lonlat_coarse_fine (FttCell * parent, GfsVariable * a) { if (GFS_CELL_IS_BOUNDARY (parent)) return; GfsMetricLonLat * lonlat = GFS_METRIC_LON_LAT (a); FttCellChildren child; ftt_cell_children (parent, &child); FttVector p; ftt_cell_pos (parent, &p); double theta0 = gfs_object_simulation (lonlat)->physical_params.L/lonlat->r; double theta = p.y*theta0; double h = ftt_cell_size (parent); double dtheta = h*theta0/2.; double theta1 = theta + dtheta; double theta2 = theta - dtheta; double sintheta = sin (theta); GFS_VALUE (child.c[0], a) = GFS_VALUE (child.c[1], a) = (sin (theta1) - sintheta)/dtheta; GFS_VALUE (child.c[2], a) = GFS_VALUE (child.c[3], a) = (sintheta - sin (theta2))/dtheta; GFS_VALUE (child.c[0], lonlat->h2) = GFS_VALUE (child.c[1], lonlat->h2) = cos (theta1); GFS_VALUE (child.c[0], lonlat->h3) = GFS_VALUE (child.c[1], lonlat->h3) = GFS_VALUE (child.c[2], lonlat->h2) = GFS_VALUE (child.c[3], lonlat->h2) = cos (theta); GFS_VALUE (child.c[2], lonlat->h3) = GFS_VALUE (child.c[3], lonlat->h3) = cos (theta2); } static void lonlat_fine_coarse (FttCell * parent, GfsVariable * a) { GfsMetricLonLat * lonlat = GFS_METRIC_LON_LAT (a); FttCellChildren child; guint n; ftt_cell_children (parent, &child); gdouble va = 0.; for (n = 0; n < 4; n++) /* fixme: won't work with solid boundaries */ va += GFS_VALUE (child.c[n], a); GFS_VALUE (parent, a) = va/4.; GFS_VALUE (parent, lonlat->h2) = (GFS_VALUE (child.c[0], lonlat->h2) + GFS_VALUE (child.c[1], lonlat->h2))/2.; GFS_VALUE (parent, lonlat->h3) = (GFS_VALUE (child.c[3], lonlat->h3) + GFS_VALUE (child.c[2], lonlat->h3))/2.; } static void metric_lon_lat_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_metric_lon_lat_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GFS_METRIC_LON_LAT (*o)->r = gfs_read_constant (fp, gfs_object_simulation (*o)); if (fp->type == GTS_ERROR) return; if (GFS_METRIC_LON_LAT (*o)->r <= 0.) { gts_file_error (fp, "radius must be strictly positive"); return; } GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); GfsVariable * a = GFS_VARIABLE (*o); GfsMetricLonLat * lonlat = GFS_METRIC_LON_LAT (a); gchar * name = g_strdup_printf ("%sh2", a->name); lonlat->h2 = gfs_domain_get_or_add_variable (domain, name, "LonLat face metric"); lonlat->h2->coarse_fine = lonlat->h2->fine_coarse = none; g_free (name); name = g_strdup_printf ("%sh3", a->name); lonlat->h3 = gfs_domain_get_or_add_variable (domain, name, "LonLat face metric"); lonlat->h3->coarse_fine = lonlat->h3->fine_coarse = none; g_free (name); g_free (a->description); a->description = g_strdup ("LonLat cell metric"); a->coarse_fine = lonlat_coarse_fine; a->fine_coarse = lonlat_fine_coarse; GtsObject * map = gts_object_new (GTS_OBJECT_CLASS (gfs_map_lonlat_class ())); gfs_object_simulation_set (map, domain); gts_container_add (GTS_CONTAINER (GFS_SIMULATION (domain)->maps), GTS_CONTAINEE (map)); GFS_MAP_LONLAT (map)->r = GFS_METRIC_LON_LAT (*o)->r; domain->metric_data = *o; domain->face_metric = lon_lat_face_metric; domain->cell_metric = lon_lat_cell_metric; domain->solid_metric = solid_metric; domain->scale_metric = lon_lat_scale_metric; domain->face_scale_metric = lon_lat_face_scale_metric; } static void metric_lon_lat_class_init (GtsObjectClass * klass) { klass->read = metric_lon_lat_read; klass->write = metric_lon_lat_write; } static void metric_lon_lat_init (GfsMetricLonLat * m) { m->r = 1.; } GfsVariableClass * gfs_metric_lon_lat_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_metric_lon_lat_info = { "GfsMetricLonLat", sizeof (GfsMetricLonLat), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) metric_lon_lat_class_init, (GtsObjectInitFunc) metric_lon_lat_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_metric_class ()), &gfs_metric_lon_lat_info); } return klass; } /** \endobject{GfsMetricLonLat} */ /* GfsMapStretch: Header */ #define GFS_IS_MAP_STRETCH(obj) (gts_object_is_from_class (obj,\ gfs_map_stretch_class ())) static GfsMapClass * gfs_map_stretch_class (void); static void gfs_map_stretch_read (GtsObject ** o, GtsFile * fp) { /* this mapping cannot be used independently from GfsMetricStretch */ } static void gfs_map_stretch_write (GtsObject * o, FILE * fp) { /* this mapping cannot be used independently from GfsMetricStretch */ } static void gfs_map_stretch_class_init (GfsMapClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_map_stretch_read; GTS_OBJECT_CLASS (klass)->write = gfs_map_stretch_write; } static void map_stretch_transform (GfsMap * map, const FttVector * src, FttVector * dest) { GfsMetricStretch * m = GFS_DOMAIN (gfs_object_simulation (map))->metric_data; dest->x = src->x/m->sx; dest->y = src->y/m->sy; #if !FTT_2D dest->z = src->z/m->sz; #endif } static void map_stretch_inverse (GfsMap * map, const FttVector * src, FttVector * dest) { GfsMetricStretch * m = GFS_DOMAIN (gfs_object_simulation (map))->metric_data; dest->x = src->x*m->sx; dest->y = src->y*m->sy; #if !FTT_2D dest->z = src->z*m->sz; #endif } static void gfs_map_stretch_init (GfsMap * map) { map->transform = map_stretch_transform; map->inverse = map_stretch_inverse; } static GfsMapClass * gfs_map_stretch_class (void) { static GfsMapClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_map_stretch_info = { "GfsMapStretch", sizeof (GfsMap), sizeof (GfsMapClass), (GtsObjectClassInitFunc) gfs_map_stretch_class_init, (GtsObjectInitFunc) gfs_map_stretch_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_map_class ()), &gfs_map_stretch_info); } return klass; } /** * The "stretch" metric. * \beginobject{GfsMetricStretch} */ static void metric_stretch_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_metric_stretch_class ())->parent_class->write) (o, fp); fprintf (fp, " { sx = %g sy = %g sz = %g }", GFS_METRIC_STRETCH (o)->sx, GFS_METRIC_STRETCH (o)->sy, GFS_METRIC_STRETCH (o)->sz); } static gdouble stretch_face_metric (const GfsDomain * domain, const FttCellFace * face) { GfsMetricStretch * s = GFS_METRIC_STRETCH (domain->metric_data); switch (face->d/2) { #if FTT_2D case FTT_X: return s->sy; case FTT_Y: return s->sx; #else case FTT_X: return s->sy*s->sz; case FTT_Y: return s->sx*s->sz; case FTT_Z: return s->sx*s->sy; #endif default: g_assert_not_reached (); } return 1.; } static gdouble stretch_cell_metric (const GfsDomain * domain, const FttCell * cell) { GfsMetricStretch * s = GFS_METRIC_STRETCH (domain->metric_data); #if FTT_2D return s->sx*s->sy; #else return s->sx*s->sy*s->sz; #endif } static void stretch_solid_metric (const GfsDomain * domain, const FttCell * cell, FttVector * m) { GfsMetricStretch * s = GFS_METRIC_STRETCH (domain->metric_data); g_assert (GFS_IS_MIXED (cell)); #if FTT_2D m->x = s->sy/s->sx; m->y = s->sx/s->sy; #else m->x = s->sy*s->sz/s->sx; m->y = s->sx*s->sz/s->sy; m->z = s->sx*s->sy/s->sz; #endif } static gdouble stretch_scale_metric (const GfsDomain * domain, const FttCell * cell, FttComponent c) { return (&GFS_METRIC_STRETCH (domain->metric_data)->sx)[c]; } static gdouble stretch_face_scale_metric (const GfsDomain * domain, const FttCellFace * face, FttComponent c) { return (&GFS_METRIC_STRETCH (domain->metric_data)->sx)[c]; } static void metric_stretch_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_metric_stretch_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsMetricStretch * s = GFS_METRIC_STRETCH (*o); if (fp->type == '{') { GtsFileVariable var[] = { {GTS_DOUBLE, "sx", TRUE, &s->sx}, {GTS_DOUBLE, "sy", TRUE, &s->sy}, {GTS_DOUBLE, "sz", TRUE, &s->sz}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; if (s->sx <= 0. || s->sy <= 0. || s->sz <= 0.) { gts_file_error (fp, "stretching factors must be strictly positive"); return; } } GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); GtsObject * map = gts_object_new (GTS_OBJECT_CLASS (gfs_map_stretch_class ())); gfs_object_simulation_set (map, domain); gts_container_add (GTS_CONTAINER (GFS_SIMULATION (domain)->maps), GTS_CONTAINEE (map)); domain->metric_data = *o; domain->face_metric = stretch_face_metric; domain->cell_metric = stretch_cell_metric; domain->solid_metric = stretch_solid_metric; domain->scale_metric = stretch_scale_metric; domain->face_scale_metric = stretch_face_scale_metric; } static void metric_stretch_class_init (GtsObjectClass * klass) { klass->read = metric_stretch_read; klass->write = metric_stretch_write; } static void metric_stretch_init (GfsMetricStretch * m) { GFS_EVENT (m)->istep = 1; m->sx = m->sy = m->sz = 1.; } GfsEventClass * gfs_metric_stretch_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsMetricStretch", sizeof (GfsMetricStretch), sizeof (GfsEventClass), (GtsObjectClassInitFunc) metric_stretch_class_init, (GtsObjectInitFunc) metric_stretch_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_metric_class ()), &info); } return klass; } /** \endobject{GfsMetricStretch} */ /* GfsMetricCubed1 is a reimplementation of GfsMetricCubed using GfsStoredMetric. This is left here as an example of how to implement a complex metric relatively simply. */ /* GfsMapCubed1: Header */ #define GFS_IS_MAP_CUBED1(obj) (gts_object_is_from_class (obj,\ gfs_map_cubed1_class ())) static GfsMapClass * gfs_map_cubed1_class (void); /* GfsMapCubed1: Object */ static void gfs_map_cubed1_read (GtsObject ** o, GtsFile * fp) { /* this mapping cannot be used independently from GfsMetricCubed1 */ } static void gfs_map_cubed1_write (GtsObject * o, FILE * fp) { /* this mapping cannot be used independently from GfsMetricCubed1 */ } static void gfs_map_cubed1_class_init (GfsMapClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_map_cubed1_read; GTS_OBJECT_CLASS (klass)->write = gfs_map_cubed1_write; } static void map_cubed1_inverse (GfsMap * map, const FttVector * src, FttVector * dest) { cmap_xy2XYZ (src->x, src->y, &dest->x, &dest->y, &dest->z); dest->x *= 2./M_PI; dest->y *= 2./M_PI; dest->z *= 2./M_PI; } static void gfs_map_cubed1_init (GfsMap * map) { map->inverse = map_cubed1_inverse; } static GfsMapClass * gfs_map_cubed1_class (void) { static GfsMapClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsMapCubed1", sizeof (GfsMap), sizeof (GfsMapClass), (GtsObjectClassInitFunc) gfs_map_cubed1_class_init, (GtsObjectInitFunc) gfs_map_cubed1_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_map_class ()), &info); } return klass; } /* GfsMetricCubed1: Object */ static void metric_cubed1_init (GfsStoredMetric * m) { m->map_class = gfs_map_cubed1_class (); } GfsVariableClass * gfs_metric_cubed1_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsMetricCubed1", sizeof (GfsStoredMetric), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) metric_cubed1_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_stored_metric_class ()), &info); } return klass; } /* GfsMapVariable: Header */ #define GFS_IS_MAP_VARIABLE(obj) (gts_object_is_from_class (obj,\ gfs_map_variable_class ())) static GfsMapClass * gfs_map_variable_class (void); /* GfsMapVariable: Object */ static void gfs_map_variable_read (GtsObject ** o, GtsFile * fp) { /* this mapping cannot be used independently from GfsMetricVariable */ } static void gfs_map_variable_write (GtsObject * o, FILE * fp) { /* this mapping cannot be used independently from GfsMetricVariable */ } static void gfs_map_variable_class_init (GfsMapClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_map_variable_read; GTS_OBJECT_CLASS (klass)->write = gfs_map_variable_write; } static void map_variable_inverse (GfsMap * map, const FttVector * src, FttVector * dest) { GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (map)); FttVector p = *src; FttCell * cell = gfs_domain_boundary_locate (domain, p, -1, NULL); if (cell == NULL) fprintf (stderr, "%g %g\n", p.x, p.y); g_return_if_fail (cell != NULL); GfsMetricVariable * m = domain->metric_data; FttComponent c; for (c = 0; c < 2; c++) (&dest->x)[c] = gfs_interpolate (cell, p, m->x[c]); dest->z = m->x[2] ? gfs_interpolate (cell, p, m->x[2]) : src->z; } static void gfs_map_variable_init (GfsMap * map) { map->inverse = map_variable_inverse; } static GfsMapClass * gfs_map_variable_class (void) { static GfsMapClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsMapVariable", sizeof (GfsMap), sizeof (GfsMapClass), (GtsObjectClassInitFunc) gfs_map_variable_class_init, (GtsObjectInitFunc) gfs_map_variable_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_map_class ()), &info); } return klass; } /* GfsMetricVariable: Object */ static void metric_variable_coarse_fine (FttCell * parent, GfsVariable * a) { if (GFS_CELL_IS_BOUNDARY (parent)) return; GfsStoredMetric * m = GFS_STORED_METRIC (a); FttCellChildren child; ftt_cell_children (parent, &child); int i; for (i = 0; i < FTT_CELLS; i++) { FttComponent d; for (d = 0; d < 4; d++) GFS_VALUE (child.c[i], m->h[d]) = 1.; GFS_VALUE (child.c[i], a) = 1.; } } static void metric_variable_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_metric_variable_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsMetricVariable * m = GFS_METRIC_VARIABLE (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (m)); GfsVariable * v = GFS_VARIABLE (*o); FttComponent c; for (c = 0; c < 3; c++) { gchar cname[3][2] = {"x", "y", "z"}; gchar * name = g_strdup_printf ("%s%s", v->name, cname[c]); m->x[c] = gfs_domain_get_or_add_variable (domain, name, "coordinate for variable metric"); g_free (name); } v->coarse_fine = metric_variable_coarse_fine; } typedef struct { GfsMetricVariable * m; gdouble max; GfsVariable * div; } UpdateData; static void update_metric (FttCell * cell, UpdateData * p) { gdouble h = ftt_cell_size (cell); gdouble x[4*(FTT_DIMENSION - 1) + 1], y[4*(FTT_DIMENSION - 1) + 1], dx, dy, dz; gfs_cell_corner_values (cell, p->m->x[0], -1, x); gfs_cell_corner_values (cell, p->m->x[1], -1, y); gdouble z[4*(FTT_DIMENSION - 1) + 1]; if (p->m->x[2]) gfs_cell_corner_values (cell, p->m->x[2], -1, z); else z[0] = z[1] = z[2] = z[3] = 0.; GfsStoredMetric * m = GFS_STORED_METRIC (p->m); dx = x[1] - x[2]; dy = y[1] - y[2]; dz = z[1] - z[2]; GFS_VALUE (cell, m->h[0]) = sqrt(dx*dx + dy*dy + dz*dz)/h; dx = x[3] - x[0]; dy = y[3] - y[0]; dz = z[3] - z[0]; GFS_VALUE (cell, m->h[1]) = sqrt(dx*dx + dy*dy + dz*dz)/h; dx = x[2] - x[3]; dy = y[2] - y[3]; dz = z[2] - z[3]; GFS_VALUE (cell, m->h[2]) = sqrt(dx*dx + dy*dy + dz*dz)/h; dx = x[0] - x[1]; dy = y[0] - y[1]; dz = z[0] - z[1]; GFS_VALUE (cell, m->h[3]) = sqrt(dx*dx + dy*dy + dz*dz)/h; GtsVector v02, v01, v03; v01[0] = x[1] - x[0]; v01[1] = y[1] - y[0]; v01[2] = z[1] - z[0]; v02[0] = x[2] - x[0]; v02[1] = y[2] - y[0]; v02[2] = z[2] - z[0]; v03[0] = x[3] - x[0]; v03[1] = y[3] - y[0]; v03[2] = z[3] - z[0]; GtsVector c012, c023; gts_vector_cross (c012, v01, v02); gts_vector_cross (c023, v02, v03); gdouble am = (gts_vector_norm (c012) + gts_vector_norm (c023))/(2.*h*h); gdouble change = fabs (GFS_VALUE (cell, GFS_VARIABLE (m)) - am)/am; if (change > p->max) p->max = change; GFS_VALUE (cell, GFS_VARIABLE (m)) = am; } static gboolean metric_variable_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_stored_metric_class())->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsMetricVariable * m = GFS_METRIC_VARIABLE (event); UpdateData p = { m, 1e6 }; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) update_metric, &p); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) GFS_VARIABLE (event)->fine_coarse, event); return TRUE; } return FALSE; } static void metric_variable_class_init (GtsObjectClass * klass) { klass->read = metric_variable_read; GFS_EVENT_CLASS (klass)->event = metric_variable_event; } static void metric_variable_init (GfsStoredMetric * m) { GFS_EVENT (m)->start = 0.; GFS_EVENT (m)->istep = G_MAXINT/2; m->map_class = gfs_map_variable_class (); } GfsVariableClass * gfs_metric_variable_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsMetricVariable", sizeof (GfsMetricVariable), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) metric_variable_class_init, (GtsObjectInitFunc) metric_variable_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_stored_metric_class ()), &info); } return klass; } /* GfsMetricLaplace: Object */ static gdouble conformal_face_scale_metric (const GfsDomain * domain, const FttCellFace * face, FttComponent c) { if (c > FTT_Y) return 1.; return GFS_VALUE (face->cell, GFS_STORED_METRIC (domain->metric_data)->h[face->d]); } static void metric_laplace_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_metric_laplace_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsMetricLaplace * m = GFS_METRIC_LAPLACE (*o); if (fp->type == '{') { GtsFileVariable var[] = { {GTS_INT, "conformal", TRUE, &m->conformal}, {GTS_INT, "spherical", TRUE, &m->spherical}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; } GfsSimulation * sim = gfs_object_simulation (*o); if (!m->spherical) { gts_object_destroy (GTS_OBJECT (GFS_METRIC_VARIABLE (m)->x[2])); GFS_METRIC_VARIABLE (m)->x[2] = NULL; } if (m->conformal) GFS_DOMAIN (sim)->face_scale_metric = conformal_face_scale_metric; } static void metric_laplace_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_metric_laplace_class ())->parent_class->write) (o, fp); GfsMetricLaplace * m = GFS_METRIC_LAPLACE (o); fprintf (fp, " { conformal = %d spherical = %d }", m->conformal, m->spherical); } static void cartesian_coordinates (FttCell * cell, UpdateData * d) { FttVector p; ftt_cell_pos (cell, &p); GFS_VALUE (cell, d->m->x[0]) = p.x; GFS_VALUE (cell, d->m->x[1]) = p.y; if (d->m->x[2]) GFS_VALUE (cell, d->m->x[2]) = p.z; GFS_VALUE (cell, d->div) = 0.; } static void spherical_laplacian (FttCell * cell, GfsVariable * dia) { gdouble h = ftt_cell_size (cell); GFS_VALUE (cell, dia) = -2.*h*h*gfs_domain_cell_fraction (dia->domain, cell); } static gboolean metric_laplace_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_stored_metric_class())->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * dia = gfs_temporary_variable (domain); GfsVariable * div = gfs_temporary_variable (domain); GfsVariable * res = gfs_temporary_variable (domain); GfsMetricLaplace * m = GFS_METRIC_LAPLACE (event); GfsMetricVariable * mv = GFS_METRIC_VARIABLE (event); GfsMultilevelParams par; gfs_multilevel_params_init (&par); /* convergence is dominated by non-linear terms, 1 iteration of the multigrid is enough */ par.tolerance = 1.; par.nitermin = 1; UpdateData p = { mv, 1e6, div }; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) cartesian_coordinates, &p); if (!m->spherical) gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_reset, dia); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, mv->x[0]); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, mv->x[1]); if (mv->x[2]) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, mv->x[2]); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) update_metric, &p); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) GFS_VARIABLE (event)->fine_coarse, event); int niter = 1000; while (niter-- && p.max > 1e-3) { gfs_poisson_coefficients (domain, NULL, FALSE, TRUE, TRUE); if (m->spherical) gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) spherical_laplacian, dia); par.poisson_solve (domain, &par, mv->x[0], div, res, dia, 1.); par.poisson_solve (domain, &par, mv->x[1], div, res, dia, 1.); if (m->spherical) par.poisson_solve (domain, &par, mv->x[2], div, res, dia, 1.); p.max = 0.; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) update_metric, &p); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) GFS_VARIABLE (event)->fine_coarse, event); // gfs_multilevel_params_stats_write (&par, stderr); // fprintf (stderr, "%d %g %g\n", niter, p.max, asym); } gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) GFS_VARIABLE (event)->fine_coarse, event); gts_object_destroy (GTS_OBJECT (dia)); gts_object_destroy (GTS_OBJECT (div)); gts_object_destroy (GTS_OBJECT (res)); return TRUE; } return FALSE; } static void metric_laplace_class_init (GtsObjectClass * klass) { klass->read = metric_laplace_read; klass->write = metric_laplace_write; GFS_EVENT_CLASS (klass)->event = metric_laplace_event; } GfsVariableClass * gfs_metric_laplace_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsMetricLaplace", sizeof (GfsMetricLaplace), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) metric_laplace_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_metric_variable_class ()), &info); } return klass; } gerris-snapshot-131206/src/vof.c0000644000175100017510000032240512250371171013415 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Volume-Of-Fluid tracers. */ #include #include #include "vof.h" #include "variable.h" #include "adaptive.h" #include "graphic.h" #define THRESHOLD(c) {if ((c) < 0.) c = 0.; else if ((c) > 1.) c = 1.;} /** * gfs_line_area: * @m: normal to the line. * @alpha: line constant. * * Returns: the area of the fraction of a cell lying under the line * (@m,@alpha). */ gdouble gfs_line_area (const FttVector * m, gdouble alpha) { FttVector n; gdouble alpha1, a, v, area; g_return_val_if_fail (m != NULL, 0.); n = *m; alpha1 = alpha; if (n.x < 0.) { alpha1 -= n.x; n.x = - n.x; } if (n.y < 0.) { alpha1 -= n.y; n.y = - n.y; } if (alpha1 <= 0.) return 0.; if (alpha1 >= n.x + n.y) return 1.; if (n.x == 0.) area = alpha1/n.y; else if (n.y == 0.) area = alpha1/n.x; else { v = alpha1*alpha1; a = alpha1 - n.x; if (a > 0.) v -= a*a; a = alpha1 - n.y; if (a > 0.) v -= a*a; area = v/(2.*n.x*n.y); } return CLAMP (area, 0., 1.); } /** * gfs_line_alpha: * @m: a #FttVector. * @c: a volume fraction. * * Returns: the value @alpha such that the area of a square cell * lying under the line defined by @m.@x = @alpha is equal to @c. */ gdouble gfs_line_alpha (const FttVector * m, gdouble c) { gdouble alpha, m1, m2, v1; g_return_val_if_fail (m != NULL, 0.); g_return_val_if_fail (c >= 0. && c <= 1., 0.); m1 = fabs (m->x); m2 = fabs (m->y); if (m1 > m2) { v1 = m1; m1 = m2; m2 = v1; } v1 = m1/2.; if (c <= v1/m2) alpha = sqrt (2.*c*m1*m2); else if (c <= 1. - v1/m2) alpha = c*m2 + v1; else alpha = m1 + m2 - sqrt (2.*m1*m2*(1. - c)); if (m->x < 0.) alpha += m->x; if (m->y < 0.) alpha += m->y; return alpha; } #define EPS 1e-4 /** * gfs_line_center: * @m: normal to the line. * @alpha: line constant. * @a: area of cell fraction. * @p: a #FttVector. * * Fills @p with the position of the center of mass of the fraction of * a square cell lying under the line (@m,@alpha). */ void gfs_line_center (const FttVector * m, gdouble alpha, gdouble a, FttVector * p) { FttVector n; gdouble b; g_return_if_fail (m != NULL); g_return_if_fail (p != NULL); n = *m; if (n.x < 0.) { alpha -= n.x; n.x = - n.x; } if (n.y < 0.) { alpha -= n.y; n.y = - n.y; } p->z = 0.; if (alpha <= 0.) { p->x = p->y = 0.; return; } if (alpha >= n.x + n.y) { p->x = p->y = 0.5; return; } g_return_if_fail (a > 0. && a < 1.); if (n.x < EPS) { p->x = 0.5; p->y = m->y < 0. ? 1. - a/2. : a/2.; return; } if (n.y < EPS) { p->y = 0.5; p->x = m->x < 0. ? 1. - a/2. : a/2.; return; } p->x = p->y = alpha*alpha*alpha; b = alpha - n.x; if (b > 0.) { p->x -= b*b*(alpha + 2.*n.x); p->y -= b*b*b; } b = alpha - n.y; if (b > 0.) { p->y -= b*b*(alpha + 2.*n.y); p->x -= b*b*b; } p->x /= 6.*n.x*n.x*n.y*a; p->y /= 6.*n.x*n.y*n.y*a; if (m->x < 0.) p->x = 1. - p->x; if (m->y < 0.) p->y = 1. - p->y; } /** * gfs_line_area_center: * @m: normal to the line. * @alpha: line constant. * @p: a #FttVector. * * Fills @p with the position of the center of area of the fraction of * a square cell lying under the line (@m,@alpha). * * Returns: the length of the facet. */ gdouble gfs_line_area_center (const FttVector * m, gdouble alpha, FttVector * p) { FttVector n; g_return_val_if_fail (m != NULL, 0.); g_return_val_if_fail (p != NULL, 0.); n = *m; if (n.x < 0.) { alpha -= n.x; n.x = - n.x; } if (n.y < 0.) { alpha -= n.y; n.y = - n.y; } p->z = 0.; if (alpha <= 0. || alpha >= n.x + n.y) { p->x = p->y = 0.; return 0.; } if (n.x < EPS) { p->x = 0.5; p->y = m->y < 0. ? 1. - alpha : alpha; return 1.; } if (n.y < EPS) { p->y = 0.5; p->x = m->x < 0. ? 1. - alpha : alpha; return 1.; } p->x = p->y = 0.; if (alpha >= n.x) { p->x += 1.; p->y += (alpha - n.x)/n.y; } else p->x += alpha/n.x; gdouble ax = p->x, ay = p->y; if (alpha >= n.y) { p->y += 1.; ay -= 1.; p->x += (alpha - n.y)/n.x; ax -= (alpha - n.y)/n.x; } else { p->y += alpha/n.y; ay -= alpha/n.y; } p->x /= 2.; p->y /= 2.; THRESHOLD (p->x); THRESHOLD (p->y); if (m->x < 0.) p->x = 1. - p->x; if (m->y < 0.) p->y = 1. - p->y; return sqrt (ax*ax + ay*ay); } #if (!FTT_2D) /** * gfs_plane_volume: * @m: normal to the plane. * @alpha: plane constant. * * Returns: the volume of a cell lying under the plane (@m,@alpha). */ gdouble gfs_plane_volume (const FttVector * m, gdouble alpha) { g_return_val_if_fail (m != NULL, 0.); gdouble al = alpha + MAX(0., -m->x) + MAX(0., -m->y) + MAX(0., -m->z); if (al <= 0.) return 0.; gdouble tmp = fabs(m->x) + fabs(m->y) + fabs(m->z); if (al >= tmp) return 1.; g_assert (tmp > 0.); gdouble n1 = fabs(m->x)/tmp; gdouble n2 = fabs(m->y)/tmp; gdouble n3 = fabs(m->z)/tmp; al = MAX(0., MIN(1., al/tmp)); gdouble al0 = MIN(al, 1. - al); gdouble b1 = MIN(n1*1, n2); gdouble b3 = MAX(n1*1, n2); gdouble b2 = n3; if (b2 < b1) { tmp = b1; b1 = b2; b2 = tmp; } else if (b2 > b3) { tmp = b3; b3 = b2; b2 = tmp; } gdouble b12 = b1 + b2; gdouble bm = MIN(b12, b3); gdouble pr = MAX(6.*b1*b2*b3, 1e-50); if (al0 < b1) tmp = al0*al0*al0/pr; else if (al0 < b2) tmp = 0.5*al0*(al0 - b1)/(b2*b3) + b1*b1*b1/pr; else if (al0 < bm) tmp = (al0*al0*(3.*b12 - al0) + b1*b1*(b1 - 3.*al0) + b2*b2*(b2 - 3.*al0))/pr; else if (b12 < b3) tmp = (al0 - 0.5*bm)/b3; else tmp = (al0*al0*(3. - 2.*al0) + b1*b1*(b1 - 3.*al0) + b2*b2*(b2 - 3.*al0) + b3*b3*(b3 - 3.*al0))/pr; gdouble volume = al <= 0.5 ? tmp : 1. - tmp; return CLAMP (volume, 0., 1.); } /** * gfs_plane_alpha: * @m: a #FttVector. * @c: a volume fraction. * * Returns: the value @alpha such that the volume of a cubic cell * lying under the plane defined by @m.@x = @alpha is equal to @c. */ gdouble gfs_plane_alpha (const FttVector * m, gdouble c) { gdouble alpha; FttVector n; g_return_val_if_fail (m != NULL, 0.); g_return_val_if_fail (c >= 0. && c <= 1., 0.); n.x = fabs (m->x); n.y = fabs (m->y); n.z = fabs (m->z); gdouble m1, m2, m3; m1 = MIN(n.x, n.y); m3 = MAX(n.x, n.y); m2 = n.z; if (m2 < m1) { gdouble tmp = m1; m1 = m2; m2 = tmp; } else if (m2 > m3) { gdouble tmp = m3; m3 = m2; m2 = tmp; } gdouble m12 = m1 + m2; gdouble pr = MAX(6.*m1*m2*m3, 1e-50); gdouble V1 = m1*m1*m1/pr; gdouble V2 = V1 + (m2 - m1)/(2.*m3), V3; gdouble mm; if (m3 < m12) { mm = m3; V3 = (m3*m3*(3.*m12 - m3) + m1*m1*(m1 - 3.*m3) + m2*m2*(m2 - 3.*m3))/pr; } else { mm = m12; V3 = mm/(2.*m3); } gdouble ch = MIN(c, 1. - c); if (ch < V1) alpha = pow (pr*ch, 1./3.); else if (ch < V2) alpha = (m1 + sqrt(m1*m1 + 8.*m2*m3*(ch - V1)))/2.; else if (ch < V3) { gdouble p = 2.*m1*m2; gdouble q = 3.*m1*m2*(m12 - 2.*m3*ch)/2.; gdouble p12 = sqrt (p); gdouble teta = acos(q/(p*p12))/3.; gdouble cs = cos(teta); alpha = p12*(sqrt(3.*(1. - cs*cs)) - cs) + m12; } else if (m12 < m3) alpha = m3*ch + mm/2.; else { gdouble p = m1*(m2 + m3) + m2*m3 - 1./4.; gdouble q = 3.*m1*m2*m3*(1./2. - ch)/2.; gdouble p12 = sqrt(p); gdouble teta = acos(q/(p*p12))/3.; gdouble cs = cos(teta); alpha = p12*(sqrt(3.*(1. - cs*cs)) - cs) + 1./2.; } if (c > 1./2.) alpha = 1. - alpha; if (m->x < 0.) alpha += m->x; if (m->y < 0.) alpha += m->y; if (m->z < 0.) alpha += m->z; return alpha; } /** * gfs_plane_center: * @m: normal to the plane. * @alpha: plane constant. * @a: volume of cell fraction. * @p: a #FttVector. * * Fills @p with the position of the center of mass of the fraction of * a cubic cell lying under the plane (@m,@alpha). */ void gfs_plane_center (const FttVector * m, gdouble alpha, gdouble a, FttVector * p) { FttVector n; gdouble b, amax; g_return_if_fail (m != NULL); g_return_if_fail (p != NULL); g_return_if_fail (a >= 0. && a <= 1.); if (fabs (m->x) < EPS) { FttVector q; n.x = m->y; n.y = m->z; gfs_line_center (&n, alpha, a, &q); p->x = 0.5; p->y = q.x; p->z = q.y; return; } if (fabs (m->y) < EPS) { FttVector q; n.x = m->z; n.y = m->x; gfs_line_center (&n, alpha, a, &q); p->x = q.y; p->y = 0.5; p->z = q.x; return; } if (fabs (m->z) < EPS) { gfs_line_center (m, alpha, a, p); p->z = 0.5; return; } n = *m; if (n.x < 0.) { alpha -= n.x; n.x = - n.x; } if (n.y < 0.) { alpha -= n.y; n.y = - n.y; } if (n.z < 0.) { alpha -= n.z; n.z = - n.z; } if (alpha <= 0. || a == 0.) { p->x = p->y = p->z = 0.; return; } if (alpha >= n.x + n.y + n.z || a == 1.) { p->x = p->y = p->z = 0.5; return; } amax = n.x + n.y + n.z; p->x = p->y = p->z = alpha*alpha*alpha*alpha; b = alpha - n.x; if (b > 0.) { p->x -= b*b*b*(3.*n.x + alpha); p->y -= b*b*b*b; p->z -= b*b*b*b; } b = alpha - n.y; if (b > 0.) { p->y -= b*b*b*(3.*n.y + alpha); p->x -= b*b*b*b; p->z -= b*b*b*b; } b = alpha - n.z; if (b > 0.) { p->z -= b*b*b*(3.*n.z + alpha); p->x -= b*b*b*b; p->y -= b*b*b*b; } amax = alpha - amax; b = amax + n.x; if (b > 0.) { p->y += b*b*b*(3.*n.y + alpha - n.z); p->z += b*b*b*(3.*n.z + alpha - n.y); p->x += b*b*b*b; } b = amax + n.y; if (b > 0.) { p->x += b*b*b*(3.*n.x + alpha - n.z); p->z += b*b*b*(3.*n.z + alpha - n.x); p->y += b*b*b*b; } b = amax + n.z; if (b > 0.) { p->x += b*b*b*(3.*n.x + alpha - n.y); p->y += b*b*b*(3.*n.y + alpha - n.x); p->z += b*b*b*b; } b = 24.*n.x*n.y*n.z*a; p->x /= b*n.x; p->y /= b*n.y; p->z /= b*n.z; if (m->x < 0.) p->x = 1. - p->x; if (m->y < 0.) p->y = 1. - p->y; if (m->z < 0.) p->z = 1. - p->z; } /** * gfs_plane_area_center: * @m: normal to the plane. * @alpha: plane constant. * @p: a #FttVector. * * Fills @p with the position of the center of area of the fraction of * a cubic cell lying under the plane (@m,@alpha). * * Returns: the area of the facet. */ gdouble gfs_plane_area_center (const FttVector * m, gdouble alpha, FttVector * p) { g_return_val_if_fail (m != NULL, 0.); g_return_val_if_fail (p != NULL, 0.); if (fabs (m->x) < EPS) { FttVector n, q; n.x = m->y; n.y = m->z; gdouble area = gfs_line_area_center (&n, alpha, &q); p->x = 0.5; p->y = q.x; p->z = q.y; return area; } if (fabs (m->y) < EPS) { FttVector n, q; n.x = m->z; n.y = m->x; gdouble area = gfs_line_area_center (&n, alpha, &q); p->x = q.y; p->y = 0.5; p->z = q.x; return area; } if (fabs (m->z) < EPS) { gdouble area = gfs_line_area_center (m, alpha, p); p->z = 0.5; return area; } FttVector n = *m; if (n.x < 0.) { alpha -= n.x; n.x = - n.x; } if (n.y < 0.) { alpha -= n.y; n.y = - n.y; } if (n.z < 0.) { alpha -= n.z; n.z = - n.z; } gdouble amax = n.x + n.y + n.z; if (alpha <= 0. || alpha >= amax) { p->x = p->y = p->z = 0.; return 0.; } gdouble area = alpha*alpha; p->x = p->y = p->z = area*alpha; gdouble b = alpha - n.x; if (b > 0.) { area -= b*b; p->x -= b*b*(2.*n.x + alpha); p->y -= b*b*b; p->z -= b*b*b; } b = alpha - n.y; if (b > 0.) { area -= b*b; p->y -= b*b*(2.*n.y + alpha); p->x -= b*b*b; p->z -= b*b*b; } b = alpha - n.z; if (b > 0.) { area -= b*b; p->z -= b*b*(2.*n.z + alpha); p->x -= b*b*b; p->y -= b*b*b; } amax = alpha - amax; b = amax + n.x; if (b > 0.) { area += b*b; p->y += b*b*(2.*n.y + alpha - n.z); p->z += b*b*(2.*n.z + alpha - n.y); p->x += b*b*b; } b = amax + n.y; if (b > 0.) { area += b*b; p->x += b*b*(2.*n.x + alpha - n.z); p->z += b*b*(2.*n.z + alpha - n.x); p->y += b*b*b; } b = amax + n.z; if (b > 0.) { area += b*b; p->x += b*b*(2.*n.x + alpha - n.y); p->y += b*b*(2.*n.y + alpha - n.x); p->z += b*b*b; } area *= 3.; p->x /= area*n.x; p->y /= area*n.y; p->z /= area*n.z; THRESHOLD (p->x); THRESHOLD (p->y); THRESHOLD (p->z); if (m->x < 0.) p->x = 1. - p->x; if (m->y < 0.) p->y = 1. - p->y; if (m->z < 0.) p->z = 1. - p->z; return area*sqrt (1./(n.x*n.x*n.y*n.y) + 1./(n.x*n.x*n.z*n.z) + 1./(n.z*n.z*n.y*n.y))/6.; } #endif /* 3D */ /** * gfs_youngs_gradient: * @cell: a #FttCell. * @v: a #GfsVariable. * @g: a #FttVector. * * Fills @g with the Youngs-averaged gradients of @v * normalised by the size of @cell. */ void gfs_youngs_gradient (FttCell * cell, GfsVariable * v, FttVector * g) { static FttDirection d[(FTT_DIMENSION - 1)*4][FTT_DIMENSION] = { #if FTT_2D {FTT_RIGHT, FTT_TOP}, {FTT_LEFT, FTT_TOP}, {FTT_LEFT, FTT_BOTTOM}, {FTT_RIGHT, FTT_BOTTOM} #else /* 3D */ {FTT_RIGHT, FTT_TOP, FTT_FRONT}, {FTT_LEFT, FTT_TOP, FTT_FRONT}, {FTT_LEFT, FTT_BOTTOM, FTT_FRONT}, {FTT_RIGHT, FTT_BOTTOM, FTT_FRONT}, {FTT_RIGHT, FTT_TOP, FTT_BACK}, {FTT_LEFT, FTT_TOP, FTT_BACK}, {FTT_LEFT, FTT_BOTTOM, FTT_BACK}, {FTT_RIGHT, FTT_BOTTOM, FTT_BACK}, #endif /* 3D */ }; gdouble u[(FTT_DIMENSION - 1)*4]; guint i; g_return_if_fail (cell != NULL); g_return_if_fail (v != NULL); g_return_if_fail (g != NULL); for (i = 0; i < (FTT_DIMENSION - 1)*4; i++) u[i] = gfs_cell_corner_value (cell, d[i], v, -1); #if FTT_2D g->x = (u[0] + u[3] - u[1] - u[2])/2.; g->y = (u[0] + u[1] - u[2] - u[3])/2.; #else /* 3D */ g->x = (u[0] + u[3] + u[4] + u[7] - u[1] - u[2] - u[5] - u[6])/4.; g->y = (u[0] + u[1] + u[4] + u[5] - u[2] - u[3] - u[6] - u[7])/4.; g->z = (u[0] + u[1] + u[2] + u[3] - u[4] - u[5] - u[6] - u[7])/4.; #endif /* 3D */ } /** * gfs_vof_plane_interpolate: * @cell: a #FttCell containing location @p. * @p: the center of the virtual cell. * @level: the level of the virtual cell. * @t: a #GfsVariableTracerVOF. * @m: a #FttVector. * * Computes the equation @m.x = alpha of the volume fraction plane of * a virtual cell at @level centered on @p. * * Returns: alpha for the virtual cell. */ gdouble gfs_vof_plane_interpolate (FttCell * cell, FttVector * p, guint level, GfsVariableTracerVOF * t, FttVector * m) { guint l = ftt_cell_level (cell); g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (l <= level, 0.); g_return_val_if_fail (t != NULL, 0.); g_return_val_if_fail (m != NULL, 0.); GfsVariable * v = GFS_VARIABLE (t); gdouble f = GFS_VALUE (cell, v); g_return_val_if_fail (!GFS_IS_FULL (f), 0.); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&m->x)[c] = GFS_VALUE (cell, t->m[c]); gdouble alpha = GFS_VALUE (cell, t->alpha); if (l < level) { gdouble h = ftt_level_size (level); gdouble H = ftt_cell_size (cell); FttVector q; ftt_cell_pos (cell, &q); alpha *= H; for (c = 0; c < FTT_DIMENSION; c++) alpha -= (&m->x)[c]*((&p->x)[c] - h/2. - (&q.x)[c] + H/2); alpha /= h; } return alpha; } /** * gfs_vof_interpolate: * @cell: a #FttCell containing location @p. * @p: the center of the virtual cell. * @level: the level of the virtual cell. * @t: a #GfsVariableTracerVOF. * * Computes the volume fraction of a virtual cell at @level centered * on @p. * * Returns: the volume fraction of the virtual cell. */ gdouble gfs_vof_interpolate (FttCell * cell, FttVector * p, guint level, GfsVariableTracerVOF * t) { guint l = ftt_cell_level (cell); g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (l <= level, 0.); g_return_val_if_fail (t != NULL, 0.); GfsVariable * v = GFS_VARIABLE (t); gdouble f = GFS_VALUE (cell, v); if (l == level || GFS_IS_FULL (f)) return f; else { FttVector m; gdouble alpha = gfs_vof_plane_interpolate (cell, p, level, t, &m); return gfs_plane_volume (&m, alpha); } } /** * Volume-Of-Fluid advection. * \beginobject{GfsVariableTracerVOF} */ #if FTT_2D # define F(x,y,z) f[x][y] #else # define F(x,y,z) f[x][y][z] #endif static void stencil (FttCell * cell, GfsVariable * v, gdouble F(3,3,3)) { gdouble h = ftt_cell_size (cell); guint level = ftt_cell_level (cell); FttVector p; gint x, y, z = 0; F(1,1,1) = GFS_VALUE (cell, v); ftt_cell_pos (cell, &p); #if !FTT_2D for (z = -1; z <= 1; z++) #endif for (x = -1; x <= 1; x++) for (y = -1; y <= 1; y++) if (x != 0 || y != 0 || z != 0) { FttVector o; o.x = p.x + h*x; o.y = p.y + h*y; o.z = p.z + h*z; FttCell * neighbor = gfs_domain_boundary_locate (v->domain, o, level, NULL); if (neighbor) F(x + 1, y + 1, z + 1) = gfs_vof_interpolate (neighbor, &o, level, GFS_VARIABLE_TRACER_VOF (v)); else F(x + 1, y + 1, z + 1) = -1.; } /* boundary conditions (symmetry) */ #if FTT_2D for (x = 0; x <= 2; x++) { if (f[x][0] < 0.) f[x][0] = f[x][1]; if (f[x][2] < 0.) f[x][2] = f[x][1]; } for (y = 0; y <= 2; y++) { if (f[0][y] < 0.) f[0][y] = f[1][y]; if (f[2][y] < 0.) f[2][y] = f[1][y]; } #else /* 3D */ for (x = 0; x <= 2; x++) for (y = 0; y <= 2; y++) { if (f[x][y][0] < 0.) f[x][y][0] = f[x][y][1]; if (f[x][y][2] < 0.) f[x][y][2] = f[x][y][1]; } for (x = 0; x <= 2; x++) for (z = 0; z <= 2; z++) { if (f[x][0][z] < 0.) f[x][0][z] = f[x][1][z]; if (f[x][2][z] < 0.) f[x][2][z] = f[x][1][z]; } for (z = 0; z <= 2; z++) for (y = 0; y <= 2; y++) { if (f[0][y][z] < 0.) f[0][y][z] = f[1][y][z]; if (f[2][y][z] < 0.) f[2][y][z] = f[1][y][z]; } #endif /* 3D */ } static void youngs_normal (FttCell * cell, GfsVariable * v, FttVector * n) { gdouble F(3,3,3); stencil (cell, v, f); #if FTT_2D n->x = (f[0][2] + 2.*f[0][1] + f[0][0] - 2.*f[2][1] - f[2][2] - f[2][0])/8.; n->y = (f[2][0] + 2.*f[1][0] + f[0][0] - 2.*f[1][2] - f[2][2] - f[0][2])/8.; n->z = 0.; #else /* 3D */ gdouble mm1 = f[0][0][0] + f[0][0][2] + f[0][2][0] + f[0][2][2] + 2.*(f[0][0][1] + f[0][2][1] + f[0][1][0] + f[0][1][2]) + 4.*f[0][1][1]; gdouble mm2 = f[2][0][0] + f[2][0][2] + f[2][2][0] + f[2][2][2] + 2.*(f[2][0][1] + f[2][2][1] + f[2][1][0] + f[2][1][2]) + 4.*f[2][1][1]; n->x = (mm1 - mm2)/32.; mm1 = f[0][0][0] + f[0][0][2] + f[2][0][0] + f[2][0][2] + 2.*(f[0][0][1] + f[2][0][1] + f[1][0][0] + f[1][0][2]) + 4.*f[1][0][1]; mm2 = f[0][2][0] + f[0][2][2] + f[2][2][0] + f[2][2][2] + 2.*(f[0][2][1] + f[2][2][1] + f[1][2][0] + f[1][2][2]) + 4.*f[1][2][1]; n->y = (mm1 - mm2)/32.; mm1 = f[0][0][0] + f[0][2][0] + f[2][0][0] + f[2][2][0] + 2.*(f[0][1][0] + f[2][1][0] + f[1][0][0] + f[1][2][0]) + 4.*f[1][1][0]; mm2 = f[0][0][2] + f[0][2][2] + f[2][0][2] + f[2][2][2] + 2.*(f[0][1][2] + f[2][1][2] + f[1][0][2] + f[1][2][2]) + 4.*f[1][1][2]; n->z = (mm1 - mm2)/32.; #endif /* 3D */ } #if FTT_2D # include "myc2d.h" #else # include "myc.h" #endif static void myc_normal (FttCell * cell, GfsVariable * v, FttVector * n) { gdouble F(3,3,3); stencil (cell, v, f); mycs (f, &n->x); #if FTT_2D n->z = 0.; #endif } static void vof_plane (FttCell * cell, GfsVariable * v) { if (FTT_CELL_IS_LEAF (cell)) { GfsVariableTracerVOF * t = GFS_VARIABLE_TRACER_VOF (v); gdouble f = GFS_VALUE (cell, v); FttComponent c; THRESHOLD (f); if (GFS_IS_FULL (f)) { for (c = 1; c < FTT_DIMENSION; c++) GFS_VALUE (cell, t->m[c]) = 0.; GFS_VALUE (cell, t->m[0]) = 1.; GFS_VALUE (cell, t->alpha) = f; } else { FttVector m; gdouble n = 0.; myc_normal (cell, v, &m); for (c = 0; c < FTT_DIMENSION; c++) n += fabs ((&m.x)[c]); if (n > 0.) for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] /= n; else /* fixme: this is a small fragment */ m.x = 1.; for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (cell, t->m[c]) = (&m.x)[c]; GFS_VALUE (cell, t->alpha) = gfs_plane_alpha (&m, f); } } } static void no_coarse_fine (FttCell * cell, GfsVariable * v) {} static void allocate_normal_alpha (GfsVariableTracerVOF * t) { GfsVariable * v = GFS_VARIABLE (t); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) { static gchar index[][2] = {"x", "y", "z"}; gchar * name = g_strdup_printf ("%s_%s", v->name, index[c]); gchar * description = g_strdup_printf ("%s-component of the normal to the interface defined by %s", index[c], v->name); t->m[c] = gfs_domain_get_or_add_variable (v->domain, name, description); t->m[c]->fine_coarse = t->m[c]->coarse_fine = no_coarse_fine; g_free (name); g_free (description); } gchar * name = g_strdup_printf ("%s_alpha", v->name); gchar * description = g_strdup_printf ("\"alpha\" for the interface defined by %s", v->name); t->alpha = gfs_domain_get_or_add_variable (v->domain, name, description); t->alpha->fine_coarse = t->alpha->coarse_fine = no_coarse_fine; g_free (name); g_free (description); } static void variable_tracer_vof_update (GfsVariable * v, GfsDomain * domain) { GfsVariableTracerVOF * t = GFS_VARIABLE_TRACER_VOF (v); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) v->fine_coarse, v); gfs_domain_bc (domain, FTT_TRAVERSE_ALL, -1, v); GSList * j = t->concentrations->items; while (j) { gfs_domain_bc (domain, FTT_TRAVERSE_ALL, -1, j->data); j = j->next; } /* update normals and alpha */ guint l, depth = gfs_domain_depth (domain); FttComponent c; for (l = 0; l <= depth; l++) { gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, l, (FttCellTraverseFunc) vof_plane, v); for (c = 0; c < FTT_DIMENSION; c++) gfs_domain_bc (domain, FTT_TRAVERSE_LEVEL, l, t->m[c]); gfs_domain_bc (domain, FTT_TRAVERSE_LEVEL, l, t->alpha); } } static gboolean variable_tracer_vof_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_variable_tracer_vof_class ())->parent_class)->event) (event, sim)) { (* GFS_VARIABLE_TRACER_VOF_CLASS (GTS_OBJECT (event)->klass)->update) (GFS_VARIABLE (event), GFS_DOMAIN (sim)); return TRUE; } return FALSE; } static void variable_tracer_vof_destroy (GtsObject * o) { GfsVariableTracerVOF * v = GFS_VARIABLE_TRACER_VOF (o); if (v->alpha) { FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) gts_object_destroy (GTS_OBJECT (v->m[c])); gts_object_destroy (GTS_OBJECT (v->alpha)); } gts_object_destroy (GTS_OBJECT (v->concentrations)); (* GTS_OBJECT_CLASS (gfs_variable_tracer_vof_class ())->parent_class->destroy) (o); } static void variable_tracer_vof_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_variable_tracer_vof_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (GFS_VARIABLE_TRACER (*o)->advection.cfl > 0.5) { gts_file_error (fp, "cfl `%g' is out of range `]0,0.5]'", GFS_VARIABLE_TRACER (*o)->advection.cfl); return; } allocate_normal_alpha (GFS_VARIABLE_TRACER_VOF (*o)); } static void variable_tracer_vof_class_init (GtsObjectClass * klass) { GFS_VARIABLE_TRACER_VOF_CLASS (klass)->update = variable_tracer_vof_update; GFS_EVENT_CLASS (klass)->event = variable_tracer_vof_event; klass->destroy = variable_tracer_vof_destroy; klass->read = variable_tracer_vof_read; } static void vof_coarse_fine (FttCell * parent, GfsVariable * v) { GfsVariableTracerVOF * t = GFS_VARIABLE_TRACER_VOF (v); gdouble f = GFS_VALUE (parent, v); FttCellChildren child; guint i; ftt_cell_children (parent, &child); if (GFS_IS_FULL (f)) { for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { FttComponent c; GFS_VALUE (child.c[i], v) = f; for (c = 1; c < FTT_DIMENSION; c++) GFS_VALUE (child.c[i], t->m[c]) = 0.; GFS_VALUE (child.c[i], t->m[0]) = 1.; GFS_VALUE (child.c[i], t->alpha) = f; } /* second-order interpolation for concentrations in full cells */ GSList * j = t->concentrations->items; while (j) { gfs_cell_coarse_fine (parent, j->data); j = j->next; } } else { /* interfacial cell */ gdouble alpha = GFS_VALUE (parent, t->alpha); FttVector m; for (i = 0; i < FTT_DIMENSION; i++) (&m.x)[i] = GFS_VALUE (parent, t->m[i]); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { /* fixme: this is not mass conserving */ gdouble alpha1 = alpha; FttComponent c; FttVector p; ftt_cell_relative_pos (child.c[i], &p); for (c = 0; c < FTT_DIMENSION; c++) { alpha1 -= (&m.x)[c]*(0.25 + (&p.x)[c]); GFS_VALUE (child.c[i], t->m[c]) = (&m.x)[c]; } GFS_VALUE (child.c[i], v) = gfs_plane_volume (&m, 2.*alpha1); GFS_VALUE (child.c[i], t->alpha) = 2.*alpha1; } /* firs-order interpolation for concentrations in interfacial cells */ GSList * j = t->concentrations->items; while (j) { GfsVariable * v = j->data; for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) GFS_VALUE (child.c[i], v) = GFS_VALUE (parent, v); j = j->next; } } } static void vof_fine_coarse (FttCell * parent, GfsVariable * v) { gdouble val = 0., sa = 0.; guint i; FttCellChildren child; ftt_cell_children (parent, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i] && GFS_HAS_DATA (child.c[i], v)) { val += GFS_VALUE (child.c[i], v); sa += 1.; } if (sa > 0.) GFS_VALUE (parent, v) = val/sa; else GFS_VALUE (parent, v) = GFS_NODATA; GfsVariableTracerVOF * t = GFS_VARIABLE_TRACER_VOF (v); gdouble f = GFS_VALUE (parent, v); FttComponent c; if (GFS_IS_FULL (f)) { for (c = 1; c < FTT_DIMENSION; c++) GFS_VALUE (parent, t->m[c]) = 0.; GFS_VALUE (parent, t->m[0]) = 1.; GFS_VALUE (parent, t->alpha) = f; } else { FttVector m = {0., 0., 0.}; for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { gdouble f = GFS_VALUE (child.c[i], v); gdouble a = f*(1. - f); for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] += a*GFS_VALUE (child.c[i], t->m[c]); } gdouble n = 0.; for (c = 0; c < FTT_DIMENSION; c++) n += fabs ((&m.x)[c]); if (n > 0.) for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] /= n; else /* fixme: this is a small fragment */ m.x = 1.; for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (parent, t->m[c]) = (&m.x)[c]; GFS_VALUE (parent, t->alpha) = gfs_plane_alpha (&m, f); } GSList * j = t->concentrations->items; while (j) { GfsVariable * p = j->data; gdouble sp = 0.; for (i = 0; i < FTT_CELLS; i++) if (child.c[i] && GFS_HAS_DATA (child.c[i], v)) sp += GFS_VALUE (child.c[i], v)*GFS_VALUE (child.c[i], p); if (val > 0.) GFS_VALUE (parent, p) = sp/val; else GFS_VALUE (parent, p) = 0.; j = j->next; } } static void variable_tracer_vof_init (GfsVariable * v) { GFS_EVENT (v)->start = -1; GFS_EVENT (v)->istep = G_MAXINT/2; v->coarse_fine = vof_coarse_fine; v->fine_coarse = vof_fine_coarse; // v->face_value = gfs_vof_face_value; GFS_VARIABLE_TRACER (v)->advection.cfl = 0.5; GFS_VARIABLE_TRACER_VOF (v)->concentrations = GTS_SLIST_CONTAINER (gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ()))); } GfsVariableTracerVOFClass * gfs_variable_tracer_vof_class (void) { static GfsVariableTracerVOFClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsVariableTracerVOF", sizeof (GfsVariableTracerVOF), sizeof (GfsVariableTracerVOFClass), (GtsObjectClassInitFunc) variable_tracer_vof_class_init, (GtsObjectInitFunc) variable_tracer_vof_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_tracer_class ()), &info); } return klass; } typedef struct { GfsAdvectionParams * par, vpar; GfsVariable * u, * du[FTT_DIMENSION - 1], * vof; FttComponent c; GfsDomain * domain; GfsFunction * sink; guint depth, too_coarse; } VofParms; static gdouble plane_volume_shifted (FttVector m, gdouble alpha, FttVector p[2]) { FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) { alpha -= (&m.x)[c]*(&p[0].x)[c]; (&m.x)[c] *= (&p[1].x)[c] - (&p[0].x)[c]; } return gfs_plane_volume (&m, alpha); } static gdouble fine_fraction (FttCellFace * face, GfsVariable * v, gdouble un, FttVector q[2]) { gdouble f = GFS_VALUE (face->cell, v); if (f == 0. || f == 1.) return f; else { FttComponent c; FttVector m, q1[2]; gdouble alpha = GFS_VALUE (face->cell, GFS_VARIABLE_TRACER_VOF (v)->alpha); for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] = GFS_VALUE (face->cell, GFS_VARIABLE_TRACER_VOF (v)->m[c]); c = face->d/2; if (face->d % 2 != 0) { (&m.x)[c] = - (&m.x)[c]; alpha += (&m.x)[c]; } q1[0] = q[0]; q1[1] = q[1]; (&q1[0].x)[c] = 1. - un; return plane_volume_shifted (m, alpha, q1); } } static gdouble coarse_fraction (FttCellFace * face, GfsVariable * v, gdouble un, FttVector q[2]) { gdouble f = GFS_VALUE (face->neighbor, v); if (f == 0. || f == 1.) return f; else { FttComponent c; FttVector m, o, q1[2]; gdouble alpha = GFS_VALUE (face->neighbor, GFS_VARIABLE_TRACER_VOF (v)->alpha); for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] = GFS_VALUE (face->neighbor, GFS_VARIABLE_TRACER_VOF (v)->m[c]); if (!FTT_FACE_DIRECT (face)) { (&m.x)[face->d/2] = - (&m.x)[face->d/2]; alpha += (&m.x)[face->d/2]; } /* shift interface perpendicularly */ q1[0] = q[0]; q1[1] = q[1]; ftt_cell_relative_pos (face->cell, &o); for (c = 0; c < FTT_DIMENSION; c++) if (c != face->d/2) { (&q1[0].x)[c] = (&o.x)[c] + 1./4. + (&q1[0].x)[c]/2.; (&q1[1].x)[c] = (&o.x)[c] + 1./4. + (&q1[1].x)[c]/2.; } (&q1[1].x)[face->d/2] = un; return plane_volume_shifted (m, alpha, q1); } } #define TOO_COARSE(cell) (GFS_VALUE (cell, p->par->fv)) /* Marks coarse cells which should be refined because an interface in a neighboring finer cell will be advected into them */ static void face_too_coarse (FttCellFace * face, VofParms * p) { if (ftt_face_type (face) == FTT_FINE_COARSE) { gdouble un = GFS_FACE_NORMAL_VELOCITY (face); if (!FTT_FACE_DIRECT (face)) un = - un; if (un > 0.) { gdouble f = GFS_VALUE (face->neighbor, p->par->v); if (GFS_IS_FULL (f)) { FttVector q[2] = {{0., 0., 0.},{1., 1., 1.}}; if (fine_fraction (face, p->vof, un*p->par->dt/ftt_cell_size (face->cell), q) != f) { p->too_coarse++; TOO_COARSE (face->neighbor) = TRUE; } } } } } static void vof_cell_fine_init (FttCell * parent, VofParms * p) { gfs_cell_fine_init (parent, p->domain); FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { FttDirection od = FTT_OPPOSITE_DIRECTION (d); FttCellChildren dchild; guint i, n = ftt_cell_children_direction (parent, d, &dchild); for (i = 0; i < n; i++) if (dchild.c[i]) { FttCell * neighbor = ftt_cell_neighbor (dchild.c[i], d); if (neighbor) GFS_STATE (dchild.c[i])->f[d].un = GFS_STATE (neighbor)->f[od].un; } } FttCellChildren child; gdouble div[FTT_CELLS], P[FTT_CELLS]; guint n; ftt_cell_children (parent, &child); for (n = 0; n < FTT_CELLS; n++) { div[n] = 0.; if (child.c[n]) { GFS_VALUE (child.c[n], p->vpar.v) = GFS_VALUE (parent, p->vpar.v); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) div[n] += GFS_STATE (child.c[n])->f[2*c].un - GFS_STATE (child.c[n])->f[2*c + 1].un; } } #if FTT_2D P[0] = 0.; P[1] = (3.*div[1] + div[2])/4. + div[3]/2.; P[2] = (div[1] + 3.*div[2])/4. + div[3]/2.; P[3] = (div[1] + div[2])/2. + div[3]; if (child.c[0]) { GFS_STATE (child.c[0])->f[0].un = P[1] - P[0]; GFS_STATE (child.c[0])->f[3].un = P[0] - P[2]; } if (child.c[1]) { GFS_STATE (child.c[1])->f[1].un = P[1] - P[0]; GFS_STATE (child.c[1])->f[3].un = P[1] - P[3]; } if (child.c[2]) { GFS_STATE (child.c[2])->f[0].un = P[3] - P[2]; GFS_STATE (child.c[2])->f[2].un = P[0] - P[2]; } if (child.c[3]) { GFS_STATE (child.c[3])->f[1].un = P[3] - P[2]; GFS_STATE (child.c[3])->f[2].un = P[1] - P[3]; } #else /* 3D */ static gdouble m[7][7] = {{7./12.,5./24.,3./8.,5./24.,3./8.,1./4.,1./3.}, {5./24.,7./12.,3./8.,5./24.,1./4.,3./8.,1./3.}, {3./8.,3./8.,3./4.,1./4.,3./8.,3./8.,1./2.}, {5./24.,5./24.,1./4.,7./12.,3./8.,3./8.,1./3.}, {3./8.,1./4.,3./8.,3./8.,3./4.,3./8.,1./2.}, {1./4.,3./8.,3./8.,3./8.,3./8.,3./4.,1./2.}, {1./3.,1./3.,1./2.,1./3.,1./2.,1./2.,5./6.}}; P[0] = 0.; guint i, j; for (i = 0; i < 7; i++) { P[i + 1] = 0.; for (j = 0; j < 7; j++) P[i + 1] += m[i][j]*div[j + 1]; } if (child.c[0]) { GFS_STATE (child.c[0])->f[0].un = P[1] - P[0]; GFS_STATE (child.c[0])->f[3].un = P[0] - P[2]; GFS_STATE (child.c[0])->f[5].un = P[0] - P[4]; } if (child.c[1]) { GFS_STATE (child.c[1])->f[1].un = P[1] - P[0]; GFS_STATE (child.c[1])->f[3].un = P[1] - P[3]; GFS_STATE (child.c[1])->f[5].un = P[1] - P[5]; } if (child.c[2]) { GFS_STATE (child.c[2])->f[0].un = P[3] - P[2]; GFS_STATE (child.c[2])->f[2].un = P[0] - P[2]; GFS_STATE (child.c[2])->f[5].un = P[2] - P[6]; } if (child.c[3]) { GFS_STATE (child.c[3])->f[1].un = P[3] - P[2]; GFS_STATE (child.c[3])->f[2].un = P[1] - P[3]; GFS_STATE (child.c[3])->f[5].un = P[3] - P[7]; } if (child.c[4]) { GFS_STATE (child.c[4])->f[0].un = P[5] - P[4]; GFS_STATE (child.c[4])->f[3].un = P[4] - P[6]; GFS_STATE (child.c[4])->f[4].un = P[0] - P[4]; } if (child.c[5]) { GFS_STATE (child.c[5])->f[1].un = P[5] - P[4]; GFS_STATE (child.c[5])->f[3].un = P[5] - P[7]; GFS_STATE (child.c[5])->f[4].un = P[1] - P[5]; } if (child.c[6]) { GFS_STATE (child.c[6])->f[0].un = P[7] - P[6]; GFS_STATE (child.c[6])->f[2].un = P[4] - P[6]; GFS_STATE (child.c[6])->f[4].un = P[2] - P[6]; } if (child.c[7]) { GFS_STATE (child.c[7])->f[1].un = P[7] - P[6]; GFS_STATE (child.c[7])->f[2].un = P[5] - P[7]; GFS_STATE (child.c[7])->f[4].un = P[3] - P[7]; } #endif /* 3D */ } /* Same as vof_cell_fine_init() but initialisation of MAC velocities is done through a GfsVariableStreamFunction */ static void vof_cell_fine_init_with_streamfunction (FttCell * parent, VofParms * p) { gfs_cell_fine_init (parent, p->domain); FttCellChildren child; guint n; ftt_cell_children (parent, &child); for (n = 0; n < FTT_CELLS; n++) { g_assert (child.c[n]); GFS_VALUE (child.c[n], p->vpar.v) = GFS_VALUE (parent, p->vpar.v); } } static void refine_too_coarse (FttCell * cell, VofParms * p) { if (TOO_COARSE (cell)) { guint level = ftt_cell_level (cell); TOO_COARSE (cell) = FALSE; ftt_cell_refine_corners (cell, (FttCellInitFunc) p->domain->cell_init, p); ftt_cell_refine_single (cell, (FttCellInitFunc) p->domain->cell_init, p); if (level + 1 > p->depth) p->depth = level + 1; } } /* refine cells which would lead to a loss of resolution at the interface */ static void fix_too_coarse (GfsDomain * domain, VofParms * p) { gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_reset, p->par->fv); p->depth = 0; p->domain = domain; p->too_coarse = 0; gfs_domain_face_traverse (domain, p->c, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) face_too_coarse, p); gboolean streamfunction = FALSE; #if FTT_2D GSList * i = domain->variables; while (i && !streamfunction) { streamfunction = (GFS_IS_VARIABLE_STREAM_FUNCTION (i->data) != NULL); i = i->next; } #endif /* 2D */ domain->cell_init = (FttCellInitFunc) (streamfunction ? vof_cell_fine_init_with_streamfunction : vof_cell_fine_init); domain->cell_init_data = p; if (p->too_coarse > 0) gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) refine_too_coarse, p); gfs_all_reduce (domain, p->too_coarse, MPI_UNSIGNED, MPI_SUM); if (p->too_coarse > 0) gfs_domain_reshape (domain, p->depth); domain->cell_init = (FttCellInitFunc) gfs_cell_fine_init; domain->cell_init_data = domain; } static void concentration_face_values (FttCell * cell, VofParms * p) { GfsStateVector * s = GFS_STATE (cell); gdouble size = ftt_cell_size (cell); if (p->domain->scale_metric) size *= (* p->domain->scale_metric) (p->domain, cell, p->c); gdouble unorm = p->par->dt*(s->f[2*p->c].un + s->f[2*p->c + 1].un)/(2.*size); if (p->sink) unorm += p->par->dt*gfs_function_value (p->sink, cell)/size; gdouble g = (* p->par->gradient) (cell, p->c, p->par->v->i); gdouble v = GFS_VALUE (cell, p->par->v); s->f[2*p->c].v = v + MIN (( 1. - unorm)/2., 0.5)*g; s->f[2*p->c + 1].v = v + MAX ((- 1. - unorm)/2., -0.5)*g; GFS_VALUE (cell, p->par->fv) = 0.; } static void vof_flux (FttCellFace * face, VofParms * p) { gdouble size = ftt_cell_size (face->cell); gdouble un = GFS_FACE_NORMAL_VELOCITY (face)*p->par->dt/size, dun[FTT_DIMENSION - 1]; if (p->sink) un += gfs_function_face_value (p->sink, face)*p->par->dt/size; FttComponent c; int n; /* loop over n "horizontal bands" */ if (GFS_IS_FULL (GFS_VALUE (face->cell, p->vof)) && GFS_IS_FULL (GFS_VALUE (face->neighbor, p->vof))) { n = 1; /* non-interfacial cells: use only one band */ for (c = 0; c < FTT_DIMENSION - 1; c++) dun[c] = 0.; } else { for (c = 0; c < FTT_DIMENSION - 1; c++) dun[c] = gfs_face_interpolated_value (face, p->du[c]->i)*p->par->dt; n = 4; /* interfacial cells: use 4 bands */ } if (!FTT_FACE_DIRECT (face)) { un = - un; for (c = 0; c < FTT_DIMENSION - 1; c++) dun[c] = - dun[c]; } if (fabs (un) > 0.51) { FttVector p; ftt_face_pos (face, &p); g_warning ("CFL (%g) at (%g,%g,%g) is larger than 0.51!", un, p.x, p.y, p.z); } FttVector q[2] = {{0., 0., 0.},{1., 1., 1.}}; gdouble flux = 0., unj = un; FttComponent ci = FTT_ORTHOGONAL_COMPONENT (p->c); #if FTT_2D gdouble f = gfs_domain_face_fraction (p->vof->domain, face)/n; #else /* 3D */ gdouble f = gfs_domain_face_fraction (p->vof->domain, face)/(n*n); FttComponent cj = FTT_ORTHOGONAL_COMPONENT (ci); int j; for (j = 0; j < n; j++) { (&q[0].x)[cj] = j/(gdouble) n; /* front of the band */ (&q[1].x)[cj] = (j + 1)/(gdouble) n; /* back of the band */ /* linear interpolation of the velocity at the center of the band */ unj = un + (1 - n + 2*j)*dun[1]/(gdouble) (2*n); #endif /* 3D */ int i; for (i = 0; i < n; i++) { (&q[0].x)[ci] = i/(gdouble) n; /* bottom of the band */ (&q[1].x)[ci] = (i + 1)/(gdouble) n; /* top of the band */ /* linear interpolation of the velocity at the center of the band */ gdouble uni = unj + (1 - n + 2*i)*dun[0]/(gdouble) (2*n); switch (ftt_face_type (face)) { case FTT_FINE_FINE: { if (uni < 0.) { FttCell * tmp = face->cell; face->cell = face->neighbor; face->neighbor = tmp; face->d = FTT_OPPOSITE_DIRECTION (face->d); uni = - uni; unj = - unj; un = - un; for (c = 0; c < FTT_DIMENSION - 1; c++) dun[c] = - dun[c]; } flux = fine_fraction (face, p->vof, uni, q)*uni*f; if (p->par->v == p->vof) GFS_VALUE (face->neighbor, p->vpar.fv) += uni*f; else flux *= GFS_STATE (face->cell)->f[face->d].v; GFS_VALUE (face->neighbor, p->par->fv) += flux; break; } case FTT_FINE_COARSE: { flux = uni > 0. ? fine_fraction (face, p->vof, uni, q)*uni*f : coarse_fraction (face, p->vof, -uni/2., q)*uni*f; if (p->par->v == p->vof) GFS_VALUE (face->neighbor, p->vpar.fv) += uni*f/FTT_CELLS; else flux *= uni > 0. ? GFS_STATE (face->cell)->f[face->d].v : GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].v; GFS_VALUE (face->neighbor, p->par->fv) += flux/FTT_CELLS; break; } default: g_assert_not_reached (); } if (p->par->v == p->vof) GFS_VALUE (face->cell, p->vpar.fv) -= uni*f; GFS_VALUE (face->cell, p->par->fv) -= flux; } #if !FTT_2D } #endif } static void initialize_dV (FttCell * cell, GfsVariable * dV) { GFS_VALUE (cell, dV) = 1.; } static void reset_fluxes (FttCellFace * face, VofParms * p) { GFS_VALUE (face->cell, p->par->fv) = GFS_VALUE (face->neighbor, p->par->fv) = 0.; GFS_VALUE (face->cell, p->vpar.fv) = GFS_VALUE (face->neighbor, p->vpar.fv) = 0.; } static void grad_u (FttCell * cell, VofParms * p) { FttComponent c, d = FTT_ORTHOGONAL_COMPONENT (p->c); for (c = 0; c < FTT_DIMENSION - 1; c++) { GFS_VALUE (cell, p->du[c]) = gfs_center_gradient (cell, d, p->u->i)/ftt_cell_size (cell); d = FTT_ORTHOGONAL_COMPONENT (d); } } static void f_times_dV (FttCell * cell, VofParms * p) { GFS_VALUE (cell, p->par->v) *= GFS_VALUE (cell, p->vpar.v); } static void concentration_times_dV (FttCell * cell, VofParms * p) { GFS_VALUE (cell, p->par->v) *= GFS_VALUE (cell, p->vpar.v)*GFS_VALUE (cell, p->vof); } static void f_over_dV (FttCell * cell, VofParms * p) { g_assert (GFS_VALUE (cell, p->vpar.v) > 0.); gdouble f = GFS_VALUE (cell, p->par->v)/GFS_VALUE (cell, p->vpar.v); GFS_VALUE (cell, p->par->v) = f < 1e-10 ? 0. : f > 1. - 1e-10 ? 1. : f; } static void concentration_over_dV (FttCell * cell, VofParms * p) { gdouble f = GFS_VALUE (cell, p->vof); if (f > 0.) GFS_VALUE (cell, p->par->v) = GFS_VALUE (cell, p->par->v)/(GFS_VALUE (cell, p->vpar.v)*f); else GFS_VALUE (cell, p->par->v) = GFS_NODATA; } static void per_vof_volume (FttCell * cell, GfsVariable * v) { GfsVariable * vof = GFS_VARIABLE (GFS_VARIABLE_VOF_CONCENTRATION (v)->vof); gdouble f = GFS_VALUE (cell, vof); GFS_VALUE (cell, v) = f > 0. ? GFS_VALUE (cell, v)/f : GFS_NODATA; } static void per_cell_volume (FttCell * cell, GfsVariable * v) { GfsVariable * vof = GFS_VARIABLE (GFS_VARIABLE_VOF_CONCENTRATION (v)->vof); GFS_VALUE (cell, v) *= GFS_VALUE (cell, vof); } static void add_sink_velocity (FttCell * cell, VofParms * p) { GFS_VALUE (cell, p->u) += gfs_function_value (p->sink, cell); } static void remove_sink_velocity (FttCell * cell, VofParms * p) { GFS_VALUE (cell, p->u) -= gfs_function_value (p->sink, cell); } /** * gfs_tracer_vof_advection: * @domain: a #GfsDomain. * @par: the advection parameters. * * Advects the @v field of @par using the current face-centered (MAC) * velocity field. */ void gfs_tracer_vof_advection (GfsDomain * domain, GfsAdvectionParams * par) { VofParms p; static FttComponent cstart = 0; FttComponent c, d; g_return_if_fail (domain != NULL); g_return_if_fail (par != NULL); g_return_if_fail (GFS_IS_VARIABLE_TRACER_VOF (par->v)); g_return_if_fail (par->cfl <= 0.5); gfs_domain_timer_start (domain, "tracer_vof_advection"); p.par = par; p.vof = par->v; p.sink = NULL; gfs_advection_params_init (&p.vpar); for (d = 0; d < FTT_DIMENSION - 1; d++) p.du[d] = gfs_temporary_variable (domain); p.vpar.v = gfs_temporary_variable (domain); p.vpar.fv = gfs_temporary_variable (domain); p.vpar.average = par->average; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) initialize_dV, p.vpar.v); par->fv = gfs_temporary_variable (domain); GSList * concentrations = GFS_VARIABLE_TRACER_VOF (p.vof)->concentrations->items, * j; j = concentrations; while (j) { GFS_VARIABLE_TRACER (j->data)->advection.fv = gfs_temporary_variable (domain); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) per_vof_volume, j->data); j = j->next; } for (c = 0; c < FTT_DIMENSION; c++) { p.c = (cstart + c) % FTT_DIMENSION; fix_too_coarse (domain, &p); p.u = gfs_domain_velocity (domain)[p.c]; gfs_domain_face_traverse (domain, p.c, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) reset_fluxes, &p); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) grad_u, &p); for (d = 0; d < FTT_DIMENSION - 1; d++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, p.du[d]); gfs_domain_face_traverse (domain, p.c, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) vof_flux, &p); j = concentrations; while (j) { GfsAdvectionParams * par = &GFS_VARIABLE_TRACER (j->data)->advection; GfsVariable * fv = p.par->fv; p.par->v = j->data; p.par->fv = par->fv; p.par->gradient = par->gradient; if (par->sink[0]) { p.sink = par->sink[p.c]; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) add_sink_velocity, &p); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) grad_u, &p); for (d = 0; d < FTT_DIMENSION - 1; d++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, p.du[d]); } gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) concentration_face_values, &p); gfs_domain_face_bc (domain, p.c, p.par->v); gfs_domain_face_traverse (domain, p.c, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) vof_flux, &p); if (p.sink) { gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) remove_sink_velocity, &p); p.sink = NULL; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) grad_u, &p); for (d = 0; d < FTT_DIMENSION - 1; d++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, p.du[d]); } gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) concentration_times_dV, &p); gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) par->update, par); p.par->fv = fv; p.par->v = p.vof; j = j->next; } gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) f_times_dV, &p); gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) par->update, par); gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) par->update, &p.vpar); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) f_over_dV, &p); j = concentrations; while (j) { p.par->v = j->data; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) concentration_over_dV, &p); p.par->v = p.vof; j = j->next; } /* update VOF data (normals etc...) */ (* GFS_VARIABLE_TRACER_VOF_CLASS (GTS_OBJECT (p.par->v)->klass)->update) (p.par->v, domain); } cstart = (cstart + 1) % FTT_DIMENSION; gts_object_destroy (GTS_OBJECT (par->fv)); par->fv = NULL; j = concentrations; while (j) { gts_object_destroy (GTS_OBJECT (GFS_VARIABLE_TRACER (j->data)->advection.fv)); GFS_VARIABLE_TRACER (j->data)->advection.fv = NULL; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) per_cell_volume, j->data); j = j->next; } gts_object_destroy (GTS_OBJECT (p.vpar.v)); gts_object_destroy (GTS_OBJECT (p.vpar.fv)); for (d = 0; d < FTT_DIMENSION - 1; d++) gts_object_destroy (GTS_OBJECT (p.du[d])); gfs_domain_timer_stop (domain, "tracer_vof_advection"); } static gdouble face_value (FttCell * cell, FttDirection d, GfsVariable * v) { gdouble f = GFS_VALUE (cell, v); if (GFS_IS_FULL (f)) return f; else { GfsVariableTracerVOF * t = GFS_VARIABLE_TRACER_VOF (v); gdouble alpha = GFS_VALUE (cell, t->alpha); FttComponent c; FttVector m; for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] = GFS_VALUE (cell, t->m[c]); (&m.x)[d/2] /= 2.; if (d % 2 == 0) { (&m.x)[d/2] = -(&m.x)[d/2]; alpha += (&m.x)[d/2]; } (&m.x)[d/2] /= 2.; return gfs_plane_volume (&m, alpha); } } /** * gfs_vof_face_value: * @face: a #FttCellFace. * @t: a #GfsVariableTracerVOF. * * Returns: the value of the VOF fraction defined by @t, interpolated * on @face. */ gdouble gfs_vof_face_value (const FttCellFace * face, GfsVariableTracerVOF * t) { g_return_val_if_fail (face != NULL, 0.); g_return_val_if_fail (t != NULL, 0.); GfsVariable * v = GFS_VARIABLE (t); gdouble vright, vleft = GFS_VALUE (face->cell, v); //face_value (face->cell, face->d, v); if (ftt_face_type (face) == FTT_FINE_COARSE) { gdouble f = GFS_VALUE (face->neighbor, v); if (GFS_IS_FULL (f)) vright = f; else { gdouble alpha = GFS_VALUE (face->neighbor, t->alpha); FttComponent c; FttVector m; for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] = GFS_VALUE (face->neighbor, t->m[c]); FttVector p, o; ftt_face_pos (face, &p); ftt_cell_pos (face->neighbor, &o); gdouble h = ftt_cell_size (face->neighbor); (&p.x)[face->d/2] += face->d % 2 ? -h/4. : h/4.; for (c = 0; c < FTT_DIMENSION; c++) alpha -= (&m.x)[c]*(0.25 - ((&p.x)[c] - (&o.x)[c])/h); alpha *= 2.; // if (face->d % 2 == 0) { // (&m.x)[face->d/2] = -(&m.x)[face->d/2]; // alpha += (&m.x)[face->d/2]; // } // (&m.x)[face->d/2] /= 2.; vright = gfs_plane_volume (&m, alpha); #if 0 if (vright > 0.2 && vright < 0.8) { fprintf (stderr, "%d (%g,%g) (%g,%g) %g\n", face->d, p.x, p.y, o.x, o.y, vright); g_assert_not_reached (); } #endif } } else vright = GFS_VALUE (face->neighbor, v); //face_value (face->neighbor, FTT_OPPOSITE_DIRECTION (face->d), v); return (vright + vleft)/2.; } /** * gfs_vof_facet: * @cell: a #FttCell. * @t: a #GfsVariableTracerVOF. * @p: a #FttVector array (of size 2 in 2D and 6 in 3D) * @m: a #FttVector. * * Fills @p with the coordinates of points defining the * VOF-reconstructed interface facet defined by @t. * * Fills @m with the normal to the interface. * * Returns: the number of points defining the facet. */ guint gfs_vof_facet (FttCell * cell, GfsVariableTracerVOF * t, FttVector * p, FttVector * m) { g_return_val_if_fail (cell != NULL, 0); g_return_val_if_fail (t != NULL, 0); g_return_val_if_fail (p != NULL, 0); g_return_val_if_fail (m != NULL, 0); if (GFS_IS_FULL (GFS_VALUE (cell, GFS_VARIABLE (t)))) return 0; guint n = 0; FttVector q; ftt_cell_pos (cell, &q); gdouble h = ftt_cell_size (cell); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&m->x)[c] = GFS_VALUE (cell, t->m[c]); gdouble alpha = GFS_VALUE (cell, t->alpha); #if FTT_2D gdouble x, y; if (fabs (m->y) > EPS) { y = (alpha - m->x)/m->y; if (y >= 0. && y <= 1.) { p[n].x = q.x + h/2.; p[n].y = q.y + h*(y - 0.5); p[n++].z = 0.; } } if (fabs (m->x) > EPS) { x = (alpha - m->y)/m->x; if (x >= 0. && x <= 1.) { p[n].x = q.x + h*(x - 0.5); p[n].y = q.y + h/2.; p[n++].z = 0.; } } if (fabs (m->y) > EPS) { y = alpha/m->y; if (y >= 0. && y <= 1.) { p[n].x = q.x - h/2.; p[n].y = q.y + h*(y - 0.5); p[n++].z = 0.; } } if (fabs (m->x) > EPS) { x = alpha/m->x; if (x >= 0. && x <= 1.) { p[n].x = q.x + h*(x - 0.5); p[n].y = q.y - h/2.; p[n++].z = 0.; } } g_assert (n <= 2); #else /* 3D */ gdouble max = fabs (m->x); c = FTT_X; if (fabs (m->y) > max) { max = fabs (m->y); c = FTT_Y; } if (fabs (m->z) > max) c = FTT_Z; q.x -= h/2.; q.y -= h/2.; q.z -= h/2.; (&q.x)[c] += h*alpha/(&m->x)[c]; FttVector m1 = *m; gts_vector_normalize (&m1.x); FttDirection d[12]; n = gfs_cut_cube_vertices (cell, -1, &q, &m1, p, d, NULL, NULL); g_assert (n <= 6); #endif /* 3D */ return n; } /** * gfs_vof_facet_distance2: * @cell: a #FttCell. * @t: a #GfsVariableTracerVOF. * @p: a #GtsPoint. * * Returns: the square of the distance between point @p and the * VOF-reconstructed interface facet defined by @t or %GFS_NODATA if * @cell does not contain an interface. */ gdouble gfs_vof_facet_distance2 (FttCell * cell, GfsVariableTracerVOF * t, GtsPoint * p) { g_return_val_if_fail (cell != NULL, GFS_NODATA); g_return_val_if_fail (t != NULL, GFS_NODATA); g_return_val_if_fail (p != NULL, GFS_NODATA); if (GFS_IS_FULL (GFS_VALUE (cell, GFS_VARIABLE (t)))) return GFS_NODATA; FttVector q, m; ftt_cell_pos (cell, &q); gdouble h = ftt_cell_size (cell), lambda = 0., norm2 = 0.; FttComponent c; q.x -= h/2.; q.y -= h/2.; q.z -= h/2.; /* compute position of closest point on VOF plane m*x + m*y + m*z = alpha */ for (c = 0; c < FTT_DIMENSION; c++) { (&m.x)[c] = GFS_VALUE (cell, t->m[c]); lambda += (&m.x)[c]*((&p->x)[c] - (&q.x)[c])/h; norm2 += (&m.x)[c]*(&m.x)[c]; } gdouble alpha = GFS_VALUE (cell, t->alpha); g_assert (norm2 > 0.); lambda = (lambda - alpha)/norm2; FttVector o; for (c = 0; c < FTT_DIMENSION; c++) { (&o.x)[c] = ((&p->x)[c] - (&q.x)[c])/h - lambda*(&m.x)[c]; if ((&o.x)[c] <= 0. || (&o.x)[c] >= 1.) { /* closest point on VOF plane is not within cell return minimum distance from facet edges */ FttVector q[FTT_DIMENSION*(FTT_DIMENSION - 1) + 1]; gdouble dmin = G_MAXDOUBLE; guint i, n = gfs_vof_facet (cell, t, q, &m); #if !FTT_2D if (n > 2) q[n++] = q[0]; #endif for (i = 0; i < n - 1; i++) { GtsPoint p1, p2; p1.x = q[i].x; p1.y = q[i].y; p1.z = q[i].z; p2.x = q[i + 1].x; p2.y = q[i + 1].y; p2.z = q[i + 1].z; GtsSegment s; s.v1 = (GtsVertex *) &p1; s.v2 = (GtsVertex *) &p2; gdouble d = gts_point_segment_distance2 (p, &s); if (d < dmin) dmin = d; } return dmin == G_MAXDOUBLE ? GFS_NODATA : dmin; } } return h*h*lambda*lambda*norm2; } /** * gfs_vof_center: * @cell: a #FttCell. * @t: a #GfsVariableTracerVOF. * @p: a #FttVector. * * Fills @p with the coordinates of the center of mass of the * VOF-reconstructed interface facet defined by @t. * * Returns: the area (length in 2D) of the VOF-reconstructed facet or 0 if the * cell is not cut by the interface. */ gdouble gfs_vof_center (FttCell * cell, GfsVariableTracerVOF * t, FttVector * p) { g_return_val_if_fail (cell != NULL, FALSE); g_return_val_if_fail (t != NULL, FALSE); g_return_val_if_fail (p != NULL, 0); if (GFS_IS_FULL (GFS_VALUE (cell, GFS_VARIABLE (t)))) return 0.; FttVector m, o; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] = GFS_VALUE (cell, t->m[c]); gdouble area = gfs_plane_area_center (&m, GFS_VALUE (cell, t->alpha), p); ftt_cell_pos (cell, &o); gdouble h = ftt_cell_size (cell); for (c = 0; c < FTT_DIMENSION; c++) (&p->x)[c] = (&o.x)[c] + h*((&p->x)[c] - 0.5); return area; } static gdouble fraction (FttVector * p, guint level, GfsVariable * v) { FttCell * cell = gfs_domain_boundary_locate (v->domain, *p, level, NULL); if (cell) return gfs_vof_interpolate (cell, p, level, GFS_VARIABLE_TRACER_VOF (v)); else /* fixme: boundary conditions? */ return 2.; } #define NMAX 10 #define ADD_H(f) { H += f; n++; } #define SIGN(x) ((x) > 0. ? 1. : -1.) static gdouble local_height (FttVector * p, FttVector * origin, guint level, GfsVariable * v, FttDirection d, GtsVector interface) { gdouble h = ftt_level_size (level), h1 = d % 2 ? - h : h, H = 0.; gdouble right = fraction (p, level, v), left = right; FttVector pright = *p, pleft = pright; FttComponent c = d/2; guint n = 0; ADD_H (right); gboolean found_interface = (right > 0.); while (n < NMAX && (!found_interface || !GFS_IS_FULL (right))) { (&pright.x)[c] += h1; right = fraction (&pright, level, v); if (right > 1.) return G_MAXDOUBLE; ADD_H (right); if (!GFS_IS_FULL (right)) found_interface = TRUE; } if (right != 1.) return G_MAXDOUBLE; found_interface = (left < 1.); while (n < NMAX && (!found_interface || !GFS_IS_FULL (left))) { (&pleft.x)[c] -= h1; left = fraction (&pleft, level, v); if (left > 1.) return G_MAXDOUBLE; ADD_H (left); if (!GFS_IS_FULL (left)) found_interface = TRUE; } if (left != 0.) return G_MAXDOUBLE; H -= ((&pright.x)[c] - (&origin->x)[c])/h1 + 0.5; interface[0] = (p->x - origin->x)/h; interface[1] = (p->y - origin->y)/h; interface[2] = (p->z - origin->z)/h; interface[c] = - SIGN (h1)*H; return H; } /* fixme: does not work for periodic boundary conditions along direction c * for cells close to the boundary */ static gboolean curvature_along_direction (FttCell * cell, GfsVariableTracerVOF * t, FttComponent c, gdouble * kappa, gdouble * kmax, GtsVector * interface, guint * n) { GfsVariable * v = GFS_VARIABLE (t); FttVector m; FttComponent i; for (i = 0; i < FTT_DIMENSION; i++) (&m.x)[i] = GFS_VALUE (cell, t->m[i]); FttDirection d = 2*c + ((&m.x)[c] > 0.); FttVector p; ftt_cell_pos (cell, &p); guint level = ftt_cell_level (cell); gdouble size = ftt_level_size (level), H; gboolean found_all_heights = TRUE; H = local_height (&p, &p, level, v, d, interface[*n]); if (H == G_MAXDOUBLE) found_all_heights = FALSE; else (*n)++; #if 0 if (H < -0.5 || H > 0.5) found_all_heights = FALSE; #endif #ifdef FTT_2D FttComponent cp = FTT_ORTHOGONAL_COMPONENT (c); FttVector q = p; gdouble h[2]; (&q.x)[cp] += size; h[0] = local_height (&q, &p, level, v, d, interface[*n]); if (h[0] == G_MAXDOUBLE) found_all_heights = FALSE; else (*n)++; q = p; (&q.x)[cp] -= size; h[1] = local_height (&q, &p, level, v, d, interface[*n]); if (h[1] == G_MAXDOUBLE) found_all_heights = FALSE; else (*n)++; if (found_all_heights) { gdouble hxx = h[0] - 2.*H + h[1]; gdouble hx = (h[0] - h[1])/2.; gdouble dnm = 1. + hx*hx; *kappa = hxx/(size*sqrt (dnm*dnm*dnm)); if (kmax) *kmax = fabs (*kappa); if (GFS_IS_AXI (v->domain)) { gdouble nr, r = p.y; if (c == FTT_X) nr = hx; else { r += (d == FTT_TOP ? - H*size : H*size); nr = (d == FTT_TOP ? 1. : -1.); } /* limit the minimum radius to half the grid size */ gdouble kaxi = nr/MAX (sqrt(dnm)*r, size/2.); *kappa += kaxi; if (kmax) *kmax = MAX (*kmax, fabs (kaxi)); } } #else /* 3D */ static FttComponent or[3][2] = { { FTT_Y, FTT_Z }, { FTT_X, FTT_Z }, { FTT_X, FTT_Y } }; gdouble h[3][3]; gint x, y; for (x = -1; x <= 1; x++) for (y = -1; y <= 1; y++) if (x != 0 || y != 0) { FttVector q = p; (&q.x)[or[c][0]] += size*x; (&q.x)[or[c][1]] += size*y; h[x + 1][y + 1] = local_height (&q, &p, level, v, d, interface[*n]); if (h[x + 1][y + 1] == G_MAXDOUBLE) found_all_heights = FALSE; else (*n)++; } if (found_all_heights) { gdouble hxx = h[2][1] - 2.*H + h[0][1]; gdouble hyy = h[1][2] - 2.*H + h[1][0]; gdouble hx = (h[2][1] - h[0][1])/2.; gdouble hy = (h[1][2] - h[1][0])/2.; gdouble hxy = (h[2][2] + h[0][0] - h[2][0] - h[0][2])/4.; gdouble dnm = 1. + hx*hx + hy*hy; *kappa = (hxx + hyy + hxx*hy*hy + hyy*hx*hx - 2.*hxy*hx*hy)/(size*sqrt (dnm*dnm*dnm)); if (kmax) { gdouble km = *kappa/2.; /* Gaussian curvature */ gdouble kg = (hxx*hyy - hxy*hxy)/(size*size*dnm*dnm); gdouble a = km*km - kg; *kmax = fabs (km); if (a >= 0.) *kmax += sqrt (a); } } #endif /* 3D */ return found_all_heights; } #define PARABOLA_FIT_CENTER_WEIGHT .1 #define PARABOLA_SIMPLER 0 typedef struct { GtsVector o; #if FTT_2D /* y = a[0]*x^2 + a[0]*x + a[1] */ GtsVector m; GtsMatrix * M; GtsVector rhs, a; #else /* 3D */ # if PARABOLA_SIMPLER /* z = a[0]*x^2 + a[1]*y^2 + a[2]*x*y */ GtsMatrix * M; GtsVector rhs, a; # else /* z = a[0]*x^2 + a[1]*y^2 + a[2]*x*y + a[3]*x + a[4]*y + a[5] */ gdouble ** M, rhs[6], a[6]; # endif GtsVector t[3]; #endif /* 3D */ } ParabolaFit; static void parabola_fit_init (ParabolaFit * p, FttVector * o, FttVector * m) { p->o[0] = o->x; p->o[1] = o->y; p->o[2] = o->z; #if FTT_2D p->m[0] = m->x; p->m[1] = m->y; p->m[2] = 0.; gts_vector_normalize (p->m); p->M = gts_matrix_zero (NULL); p->rhs[0] = p->rhs[1] = p->rhs[2] = 0.; #else /* 3D */ gdouble max; GtsVector nx = {0., 0., 0.}, ny, nz; guint d = 0; nz[0] = m->x; nz[1] = m->y; nz[2] = m->z; gts_vector_normalize (nz); max = nz[0]*nz[0]; /* build a vector orthogonal to nz */ if (nz[1]*nz[1] > max) { max = nz[1]*nz[1]; d = 1; } if (nz[2]*nz[2] > max) d = 2; switch (d) { case 0: nx[0] = - nz[2]/nz[0]; nx[2] = 1.0; break; case 1: nx[1] = - nz[2]/nz[1]; nx[2] = 1.0; break; case 2: nx[2] = - nz[0]/nz[2]; nx[0] = 1.0; break; } gts_vector_normalize (nx); /* build a second vector orthogonal to nx and nz */ gts_vector_cross (ny, nz, nx); /* transformation matrix from (i,j,k) to (nx, ny, nz) */ p->t[0][0] = nx[0]; p->t[0][1] = nx[1]; p->t[0][2] = nx[2]; p->t[1][0] = ny[0]; p->t[1][1] = ny[1]; p->t[1][2] = ny[2]; p->t[2][0] = nz[0]; p->t[2][1] = nz[1]; p->t[2][2] = nz[2]; # if PARABOLA_SIMPLER p->M = gts_matrix_zero (NULL); p->rhs[0] = p->rhs[1] = p->rhs[2] = 0.; # else p->M = gfs_matrix_new (6, 6, sizeof (gdouble)); p->rhs[0] = p->rhs[1] = p->rhs[2] = p->rhs[3] = p->rhs[4] = p->rhs[5] = 0.; # endif #endif /* 3D */ } static void parabola_fit_add (ParabolaFit * p, GtsVector m, gdouble w) { #if FTT_2D gdouble x1 = m[0] - p->o[0]; gdouble y1 = m[1] - p->o[1]; gdouble x = p->m[1]*x1 - p->m[0]*y1; gdouble y = p->m[0]*x1 + p->m[1]*y1; gdouble x2 = w*x*x, x3 = x2*x, x4 = x3*x; p->M[0][0] += x4; p->M[1][0] += x3; p->M[1][1] += x2; p->M[2][1] += w*x; p->M[2][2] += w; p->rhs[0] += x2*y; p->rhs[1] += w*x*y; p->rhs[2] += w*y; #else /* 3D */ gdouble x1 = m[0] - p->o[0]; gdouble y1 = m[1] - p->o[1]; gdouble z1 = m[2] - p->o[2]; gdouble x = p->t[0][0]*x1 + p->t[0][1]*y1 + p->t[0][2]*z1; gdouble y = p->t[1][0]*x1 + p->t[1][1]*y1 + p->t[1][2]*z1; gdouble z = p->t[2][0]*x1 + p->t[2][1]*y1 + p->t[2][2]*z1; gdouble x2 = x*x, x3 = x2*x, x4 = x3*x; gdouble y2 = y*y, y3 = y2*y, y4 = y3*y; # if PARABOLA_SIMPLER p->M[0][0] += w*x4; p->M[1][0] += w*x2*y2; p->M[1][1] += w*y4; p->M[2][0] += w*x3*y; p->M[2][1] += w*x*y3; p->rhs[0] += w*z*x2; p->rhs[1] += w*z*y2; p->rhs[2] += w*z*x*y; # else p->M[0][0] += w*x4; p->M[1][1] += w*y4; p->M[2][2] += w*x2*y2; p->M[3][3] += w*x2; p->M[4][4] += w*y2; p->M[5][5] += w; p->M[0][2] += w*x3*y; p->M[0][3] += w*x3; p->M[0][4] += w*x2*y; p->M[1][2] += w*x*y3; p->M[1][3] += w*x*y2; p->M[1][4] += w*y3; p->M[2][5] += w*x*y; p->M[3][5] += w*x; p->M[4][5] += w*y; p->rhs[0] += w*x2*z; p->rhs[1] += w*y2*z; p->rhs[2] += w*x*y*z; p->rhs[3] += w*x*z; p->rhs[4] += w*y*z; p->rhs[5] += w*z; # endif #endif /* 3D */ } static void parabola_fit_solve (ParabolaFit * p) { #if FTT_2D p->M[0][1] = p->M[1][0]; p->M[0][2] = p->M[2][0] = p->M[1][1]; p->M[1][2] = p->M[2][1]; GtsMatrix * M = gts_matrix3_inverse ((GtsMatrix *) p->M); if (M) { p->a[0] = M[0][0]*p->rhs[0] + M[0][1]*p->rhs[1] + M[0][2]*p->rhs[2]; p->a[1] = M[1][0]*p->rhs[0] + M[1][1]*p->rhs[1] + M[1][2]*p->rhs[2]; gts_matrix_destroy (M); } else /* this may be a degenerate/isolated interface fragment */ p->a[0] = p->a[1] = 0.; #else /* 3D */ # if PARABOLA_SIMPLER p->M[0][1] = p->M[1][0]; p->M[0][2] = p->M[2][0]; p->M[1][2] = p->M[2][1]; p->M[2][2] = p->M[1][0]; GtsMatrix * M = gts_matrix3_inverse ((GtsMatrix *) p->M); if (M) { p->a[0] = M[0][0]*p->rhs[0] + M[0][1]*p->rhs[1] + M[0][2]*p->rhs[2]; p->a[1] = M[1][0]*p->rhs[0] + M[1][1]*p->rhs[1] + M[1][2]*p->rhs[2]; p->a[2] = M[2][0]*p->rhs[0] + M[2][1]*p->rhs[1] + M[2][2]*p->rhs[2]; gts_matrix_destroy (M); } else /* this may be a degenerate/isolated interface fragment */ p->a[0] = p->a[1] = p->a[2] = 0.; # else p->M[0][1] = p->M[2][2]; p->M[0][5] = p->M[3][3]; p->M[1][5] = p->M[4][4]; p->M[2][3] = p->M[0][4]; p->M[2][4] = p->M[1][3]; p->M[3][4] = p->M[2][5]; guint i, j; for (i = 1; i < 6; i++) for (j = 0; j < i; j++) p->M[i][j] = p->M[j][i]; if (gfs_matrix_inverse (p->M, 6, 1e-10)) { for (i = 0; i < 6; i++) { p->a[i] = 0.; for (j = 0; j < 6; j++) p->a[i] += p->M[i][j]*p->rhs[j]; } } else { /* this may be a degenerate/isolated interface fragment */ g_warning ("singular matrix"); p->a[0] = p->a[1] = p->a[2] = 0.; } # endif #endif /* 3D */ } static gdouble parabola_fit_curvature (ParabolaFit * p, gdouble kappamax, gdouble * kmax) { gdouble kappa; #if FTT_2D gdouble dnm = 1. + p->a[1]*p->a[1]; kappa = 2.*p->a[0]/sqrt (dnm*dnm*dnm); if (kmax) *kmax = fabs (kappa); #else /* 3D */ gdouble hxx = 2.*p->a[0]; gdouble hyy = 2.*p->a[1]; gdouble hxy = p->a[2]; gdouble hx, hy; # if PARABOLA_SIMPLER hx = hy = 0.; # else hx = p->a[3]; hy = p->a[4]; # endif gdouble dnm = 1. + hx*hx + hy*hy; kappa = (hxx + hyy + hxx*hy*hy + hyy*hx*hx - 2.*hxy*hx*hy)/sqrt (dnm*dnm*dnm); if (kmax) { gdouble kg = (hxx*hyy - hxy*hxy)/(dnm*dnm); gdouble a = kappa*kappa/4. - kg; *kmax = fabs (kappa/2.); if (a >= 0.) *kmax += sqrt (a); } #endif /* 3D */ if (fabs (kappa) > kappamax) { if (kmax) *kmax = kappamax; return kappa > 0. ? kappamax : - kappamax; } return kappa; } #if FTT_2D static void parabola_fit_axi_curvature (const ParabolaFit * p, gdouble r, gdouble h, gdouble * kappa, gdouble * kmax) { gdouble nr = (p->m[0]*p->a[1] + p->m[1])/sqrt (1. + p->a[1]*p->a[1]); gdouble kaxi = - nr/MAX(r, h/2.); /* limit the minimum radius to half the grid size */ *kappa += kaxi; if (kmax) *kmax = MAX (*kmax, fabs (kaxi)); } #endif /* 2D */ static void parabola_fit_destroy (ParabolaFit * p) { #if (FTT_2D || PARABOLA_SIMPLER) gts_matrix_destroy (p->M); #else gfs_matrix_free (p->M); #endif } static void add_vof_center (FttCell * cell, FttVector * p, guint level, FttVector * origin, GfsVariableTracerVOF * t, ParabolaFit * fit, gdouble w) { gdouble f = GFS_VALUE (cell, GFS_VARIABLE (t)); if (!GFS_IS_FULL (f)) { FttVector m, c; gdouble alpha = gfs_vof_plane_interpolate (cell, p, level, t, &m); gdouble area = gfs_plane_area_center (&m, alpha, &c); gdouble h = ftt_level_size (level); FttComponent i; for (i = 0; i < FTT_DIMENSION; i++) (&c.x)[i] = ((&p->x)[i] - (&origin->x)[i])/h + (&c.x)[i] - 0.5; parabola_fit_add (fit, &c.x, w*area); } } static void fit_from_fractions (FttCell * cell, GfsVariable * v, ParabolaFit * fit) { gdouble h = ftt_cell_size (cell); guint level = ftt_cell_level (cell); gint x, y, z = 0; FttVector p; ftt_cell_pos (cell, &p); #if !FTT_2D for (z = -1; z <= 1; z++) #endif for (x = -1; x <= 1; x++) for (y = -1; y <= 1; y++) if (x != 0 || y != 0 || z != 0) { FttVector o; o.x = p.x + h*x; o.y = p.y + h*y; o.z = p.z + h*z; FttCell * neighbor = gfs_domain_boundary_locate (v->domain, o, level, NULL); if (neighbor) add_vof_center (neighbor, &o, level, &p, GFS_VARIABLE_TRACER_VOF (v), fit, 1.); } } /** * gfs_fit_curvature: * @cell: a #FttCell containing an interface. * @t: a #GfsVariableTracerVOF. * @kmax: a pointer or %NULL. * * Computes an approximation of the curvature of the interface * contained in @cell using paraboloid fitting of the centroids of the * reconstructed interface segments. * * If @kmax is not %NULL, it is filled with the absolute value of the * maximum surface curvature (note that in 2D this is just the absolute value of * the mean curvature). * * Returns: (double in 3D) the mean curvature of the interface contained in @cell. */ gdouble gfs_fit_curvature (FttCell * cell, GfsVariableTracerVOF * t, gdouble * kmax) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (t != NULL, 0.); GfsVariable * v = GFS_VARIABLE (t); g_return_val_if_fail (!GFS_IS_FULL (GFS_VALUE (cell, v)), 0.); FttVector m; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] = GFS_VALUE (cell, t->m[c]); ParabolaFit fit; FttVector p, fc; ftt_cell_pos (cell, &p); gdouble area = gfs_vof_center (cell, t, &fc); gdouble h = ftt_cell_size (cell); fc.x = (fc.x - p.x)/h; fc.y = (fc.y - p.y)/h; fc.z = (fc.z - p.z)/h; parabola_fit_init (&fit, &fc, &m); parabola_fit_add (&fit, &fc.x, area); fit_from_fractions (cell, GFS_VARIABLE (t), &fit); parabola_fit_solve (&fit); gdouble kappa = parabola_fit_curvature (&fit, 2., kmax)/h; if (kmax) *kmax /= h; #if FTT_2D if (GFS_IS_AXI (v->domain)) parabola_fit_axi_curvature (&fit, fc.y*h + p.y, h, &kappa, kmax); #endif parabola_fit_destroy (&fit); return kappa; } #if FTT_2D # define NI 3 #else # define NI 9 #endif static void orientation (FttVector * m, FttComponent * c) { FttComponent i, j; for (i = 0; i < FTT_DIMENSION; i++) c[i] = i; for (i = 0; i < FTT_DIMENSION - 1; i++) for (j = 0; j < FTT_DIMENSION - 1 - i; j++) if (fabs ((&m->x)[c[j + 1]]) > fabs ((&m->x)[c[j]])) { FttComponent tmp = c[j]; c[j] = c[j + 1]; c[j + 1] = tmp; } } static guint independent_positions (GtsVector * interface, guint n) { if (n < 2) return n; guint j, ni = 1; for (j = 1; j < n; j++) { guint i; gboolean depends = FALSE; for (i = 0; i < j && !depends; i++) { gdouble d2 = 0.; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); depends = d2 < 0.5*0.5; } ni += !depends; } return ni; } /** * gfs_height_curvature: * @cell: a #FttCell containing an interface. * @t: a #GfsVariableTracerVOF. * @kmax: a pointer or %NULL. * * An implementation of the Height-Function (HF) method generalised to * adaptive meshes. * * If @kmax is not %NULL, it is filled with the absolute value of the * maximum surface curvature (note that in 2D this is just the * absolute value of the mean curvature). * * Returns: (double in 3D) the mean curvature of the interface * contained in @cell, or %GFS_NODATA if the HF method could not * compute a consistent curvature. */ gdouble gfs_height_curvature (FttCell * cell, GfsVariableTracerVOF * t, gdouble * kmax) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (t != NULL, 0.); GfsVariable * v = GFS_VARIABLE (t); gdouble f = GFS_VALUE (cell, v); g_return_val_if_fail (!GFS_IS_FULL (f), 0.); FttVector m; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] = GFS_VALUE (cell, t->m[c]); FttComponent try[FTT_DIMENSION]; orientation (&m, try); /* sort directions according to normal */ gdouble kappa = 0.; GtsVector interface[FTT_DIMENSION*NI]; guint n = 0; for (c = 0; c < FTT_DIMENSION; c++) /* try each direction */ if (curvature_along_direction (cell, t, try[c], &kappa, kmax, interface, &n)) return kappa; /* Could not compute curvature from the simple algorithm along any direction: * Try parabola fitting of the collected interface positions */ if (independent_positions (interface, n) < 3*(FTT_DIMENSION - 1)) { if (kmax) *kmax = GFS_NODATA; return GFS_NODATA; } gdouble h = ftt_cell_size (cell); ParabolaFit fit; guint j; FttVector p, fc; ftt_cell_pos (cell, &p); gdouble area = gfs_vof_center (cell, t, &fc); fc.x = (fc.x - p.x)/h; fc.y = (fc.y - p.y)/h; fc.z = (fc.z - p.z)/h; parabola_fit_init (&fit, &fc, &m); #if FTT_2D parabola_fit_add (&fit, &fc.x, PARABOLA_FIT_CENTER_WEIGHT); #elif !PARABOLA_SIMPLER parabola_fit_add (&fit, &fc.x, area*100.); #endif for (j = 0; j < n; j++) parabola_fit_add (&fit, interface[j], 1.); parabola_fit_solve (&fit); kappa = parabola_fit_curvature (&fit, 2., kmax)/h; if (kmax) *kmax /= h; #if FTT_2D if (GFS_IS_AXI (v->domain)) parabola_fit_axi_curvature (&fit, fc.y*h + p.y, h, &kappa, kmax); #endif parabola_fit_destroy (&fit); return kappa; } /* Returns: the height @h of the neighboring column in direction @d or GFS_NODATA if it is undefined. Also fills @x with the coordinates of the cell (3/4, 1 or 3/2 depending on its relative level). */ static gdouble neighboring_column (FttCell * cell, GfsVariable * h, FttComponent c, gdouble orientation, FttDirection d, gdouble * x) { FttCell * n = ftt_cell_neighbor (cell, d); if (!n) return GFS_NODATA; if (ftt_cell_level (cell) == ftt_cell_level (n)) { if (GFS_HAS_DATA (n, h)) { *x = 1.; return GFS_VALUE (n, h); } else if (FTT_CELL_IS_LEAF (n)) return GFS_NODATA; /* check finer neighbors */ FttCellChildren child; int i, m = ftt_cell_children_direction (n, FTT_OPPOSITE_DIRECTION (d), &child); for (i = 0; i < m; i++) if (child.c[i] && GFS_HAS_DATA (child.c[i], h)) { FttVector p; ftt_cell_relative_pos (child.c[i], &p); *x = 3./4.; return GFS_VALUE (child.c[i], h)/2. + orientation*(&p.x)[c]; } return GFS_NODATA; } else if (GFS_HAS_DATA (n, h)) { /* coarser neighbor */ FttVector p; ftt_cell_relative_pos (cell, &p); *x = 3./2.; return (GFS_VALUE (n, h) - orientation*(&p.x)[c])*2.; } return GFS_NODATA; } static void curvature_from_h (FttCell * cell, GfsDomain * domain, gdouble x[3], gdouble h[3], gdouble orientation, FttComponent c, gdouble * kappa, gdouble * kmax) { gdouble size = ftt_cell_size (cell); gdouble det = x[0]*x[1]*(x[0] - x[1]), a = x[1]*(h[0] - h[2]), b = x[0]*(h[1] - h[2]); gdouble hxx = 2.*(a - b)/det; gdouble hx = (x[0]*b - x[1]*a)/det; gdouble dnm = 1. + hx*hx; *kappa = hxx/(size*sqrt (dnm*dnm*dnm)); if (kmax) *kmax = fabs (*kappa); if (GFS_IS_AXI (domain)) { FttVector p; ftt_cell_pos (cell, &p); gdouble nr, r = p.y; if (c == FTT_X) nr = hx; else { r += orientation*h[2]*size; nr = - orientation; } /* limit the minimum radius to half the grid size */ gdouble kaxi = nr/MAX (sqrt(dnm)*r, size/2.); *kappa += kaxi; if (kmax) *kmax = MAX (*kmax, fabs (kaxi)); } } /** * gfs_curvature_along_direction: * @cell: a #FttCell. * @t: a #GfsVariableTracerVOFHeight. * @c: x, y or z. * @kappa: the curvature. * @kmax: the maximum curvature. * * Tries to compute an interface curvature for @cell using * height-functions on equally-spaced columns in direction @c. * * Returns: %TRUE if the curvature was successfully computed, %FALSE * otherwise. */ gboolean gfs_curvature_along_direction (FttCell * cell, GfsVariableTracerVOFHeight * t, FttComponent c, gdouble * kappa, gdouble * kmax) { g_return_val_if_fail (cell != NULL, FALSE); g_return_val_if_fail (t != NULL, FALSE); g_return_val_if_fail (kappa != NULL, FALSE); #ifdef FTT_2D gdouble orientation; GfsVariable * hv = gfs_closest_height (cell, t, c, &orientation); if (!hv) return FALSE; else if (fabs (GFS_VALUE (cell, hv)) > 1.) return FALSE; /* interface is too far */ FttComponent oc = FTT_ORTHOGONAL_COMPONENT (c); gdouble x[3], h[3]; h[2] = GFS_VALUE (cell, hv); x[2] = 0.; h[0] = neighboring_column (cell, hv, c, orientation, 2*oc, &x[0]); if (h[0] != GFS_NODATA && x[0] == 1.) { h[1] = neighboring_column (cell, hv, c, orientation, 2*oc + 1, &x[1]); if (h[1] != GFS_NODATA && x[1] == 1.) { x[1] = - x[1]; curvature_from_h (cell, GFS_VARIABLE (t)->domain, x, h, orientation, c, kappa, kmax); return TRUE; } } #else /* 3D */ g_assert_not_implemented (); #endif /* 3D */ return FALSE; } static gboolean curvature_along_direction_new (FttCell * cell, GfsVariableTracerVOFHeight * t, FttComponent c, gdouble * kappa, gdouble * kmax, GtsVector * interface, guint * nb) { #ifdef FTT_2D gdouble orientation; GfsVariable * hv = gfs_closest_height (cell, t, c, &orientation); FttComponent oc = FTT_ORTHOGONAL_COMPONENT (c); if (!hv) { /* no data for either directions, look "right" and "left" to collect potential interface positions */ hv = gfs_closest_height (ftt_cell_neighbor (cell, 2*oc), t, c, &orientation); if (!hv) hv = gfs_closest_height (ftt_cell_neighbor (cell, 2*oc + 1), t, c, &orientation); if (!hv) /* give up */ return FALSE; } else if (fabs (GFS_VALUE (cell, hv)) > 1.) return FALSE; /* interface is too far */ gdouble x[3], h[3]; h[2] = GFS_VALUE (cell, hv); x[2] = 0.; h[0] = neighboring_column (cell, hv, c, orientation, 2*oc, &x[0]); h[1] = neighboring_column (cell, hv, c, orientation, 2*oc + 1, &x[1]); x[1] = - x[1]; if (h[2] != GFS_NODATA && h[0] != GFS_NODATA && h[1] != GFS_NODATA) { curvature_from_h (cell, GFS_VARIABLE (t)->domain, x, h, orientation, c, kappa, kmax); return TRUE; } else { /* h[2] == GFS_NODATA || h[0] == GFS_NODATA || h[1] == GFS_NODATA */ /* collect interface positions (based on height function) */ int i; for (i = 0; i < 3; i++) if (h[i] != GFS_NODATA) { interface[*nb][oc] = x[i]; interface[(*nb)++][c] = orientation*h[i]; } return FALSE; } #else /* 3D */ g_assert_not_implemented (); #endif /* 3D */ return FALSE; } /** * gfs_height_curvature_new: * @cell: a #FttCell containing an interface. * @t: a #GfsVariableTracerVOFHeight. * @kmax: a pointer or %NULL. * * Tries to estimate the curvature of an interface using * height-functions, either on equally-spaced columns, non-equally * spaced columns or using parabola fits of interface positions * defined using the height-functions in all directions. * * If @kmax is not %NULL, it is filled with the absolute value of the * maximum surface curvature (note that in 2D this is just the * absolute value of the mean curvature). * * Returns: (double in 3D) the mean curvature of the interface * contained in @cell, or %GFS_NODATA if the HF method could not * compute a consistent curvature. */ gdouble gfs_height_curvature_new (FttCell * cell, GfsVariableTracerVOFHeight * t, gdouble * kmax) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (t != NULL, 0.); GfsVariable * v = GFS_VARIABLE (t); gdouble f = GFS_VALUE (cell, v); g_return_val_if_fail (!GFS_IS_FULL (f), 0.); FttVector m; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] = GFS_VALUE (cell, GFS_VARIABLE_TRACER_VOF (t)->m[c]); FttComponent try[FTT_DIMENSION]; orientation (&m, try); /* sort directions according to normal */ gdouble kappa = 0.; GtsVector interface[FTT_DIMENSION*NI]; guint n = 0; for (c = 0; c < FTT_DIMENSION; c++) /* try each direction */ if (curvature_along_direction_new (cell, t, try[c], &kappa, kmax, interface, &n)) return kappa; /* Could not compute curvature from the simple algorithm along any direction: * Try parabola fitting of the collected interface positions */ if (independent_positions (interface, n) < 3*(FTT_DIMENSION - 1)) return GFS_NODATA; gdouble h = ftt_cell_size (cell); ParabolaFit fit; guint j; FttVector p, fc; ftt_cell_pos (cell, &p); gdouble area = gfs_vof_center (cell, GFS_VARIABLE_TRACER_VOF (t), &fc); fc.x = (fc.x - p.x)/h; fc.y = (fc.y - p.y)/h; fc.z = (fc.z - p.z)/h; parabola_fit_init (&fit, &fc, &m); #if FTT_2D parabola_fit_add (&fit, &fc.x, PARABOLA_FIT_CENTER_WEIGHT); #elif !PARABOLA_SIMPLER parabola_fit_add (&fit, &fc.x, area*100.); #endif for (j = 0; j < n; j++) parabola_fit_add (&fit, interface[j], 1.); parabola_fit_solve (&fit); kappa = parabola_fit_curvature (&fit, 2., kmax)/h; if (kmax) *kmax /= h; #if FTT_2D if (GFS_IS_AXI (v->domain)) parabola_fit_axi_curvature (&fit, fc.y*h + p.y, h, &kappa, kmax); #endif parabola_fit_destroy (&fit); return kappa; } /** * gfs_vof_correctness: * @cell: a #FttCell. * @t: a #GfsVariableTracerVOF. * * An implementation of the criterion of Cerne, Petelin, Tiselj * (2002), to measure how well an interface is represented by a local * VOF field. * * Returns: the "correctness" of the interface representation. */ gdouble gfs_vof_correctness (FttCell * cell, GfsVariableTracerVOF * t) { GfsVariable * v = GFS_VARIABLE (t); gdouble F(3,3,3); g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (t != NULL, 0.); if (GFS_VALUE (cell, v) <= 0. || GFS_VALUE (cell, v) >= 1.) return 1.; stencil (cell, v, f); #if FTT_2D gdouble dx = f[2][0] + f[2][1] + f[2][2] - f[0][0] - f[0][1] - f[0][2]; gdouble dy = f[0][2] + f[1][2] + f[2][2] - f[0][0] - f[1][0] - f[2][0]; return sqrt ((dx*dx + dy*dy)/9.); #else gdouble dx = (f[2][0][0] + f[2][1][0] + f[2][2][0] - f[0][0][0] - f[0][1][0] - f[0][2][0] + f[2][0][1] + f[2][1][1] + f[2][2][1] - f[0][0][1] - f[0][1][1] - f[0][2][1] + f[2][0][2] + f[2][1][2] + f[2][2][2] - f[0][0][2] - f[0][1][2] - f[0][2][2]); gdouble dy = (f[0][2][0] + f[1][2][0] + f[2][2][0] - f[0][0][0] - f[1][0][0] - f[2][0][0] + f[0][2][1] + f[1][2][1] + f[2][2][1] - f[0][0][1] - f[1][0][1] - f[2][0][1] + f[0][2][2] + f[1][2][2] + f[2][2][2] - f[0][0][2] - f[1][0][2] - f[2][0][2]); gdouble dz = (f[0][0][2] + f[1][0][2] + f[2][0][2] - f[0][0][0] - f[1][0][0] - f[2][0][0] + f[0][1][2] + f[1][1][2] + f[2][1][2] - f[0][1][0] - f[1][1][0] - f[2][1][0] + f[0][2][2] + f[1][2][2] + f[2][2][2] - f[0][2][0] - f[1][2][0] - f[2][2][0]); return sqrt ((dx*dx + dy*dy + dz*dz)/27.); #endif } /** \endobject{GfsVariableTracerVOF} */ /** \beginobject{GfsVariableVOFConcentration} */ static void variable_vof_concentration_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_variable_vof_concentration_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (name)"); return; } GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); GfsVariable * v = gfs_variable_from_name (domain->variables, fp->token->str); if (v == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } if (!GFS_IS_VARIABLE_TRACER_VOF (v)) { gts_file_error (fp, "variable `%s' is not a VOF tracer", fp->token->str); return; } GfsVariableTracerVOF * vof = GFS_VARIABLE_TRACER_VOF (v); GFS_VARIABLE_VOF_CONCENTRATION (*o)->vof = vof; gts_container_add (GTS_CONTAINER (vof->concentrations), GTS_CONTAINEE (*o)); gts_file_next_token (fp); } static void variable_vof_concentration_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_variable_vof_concentration_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", GFS_VARIABLE (GFS_VARIABLE_VOF_CONCENTRATION (o)->vof)->name); } static void variable_vof_concentration_class_init (GtsObjectClass * klass) { klass->read = variable_vof_concentration_read; klass->write = variable_vof_concentration_write; } static void variable_vof_concentration_init (GfsVariable * v) { /* this is taken care of by the associated VOF tracer */ v->fine_coarse = v->coarse_fine = no_coarse_fine; GFS_VARIABLE_TRACER (v)->advection.scheme = GFS_NONE; } GfsVariableClass * gfs_variable_vof_concentration_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsVariableVOFConcentration", sizeof (GfsVariableVOFConcentration), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_vof_concentration_class_init, (GtsObjectInitFunc) variable_vof_concentration_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_tracer_class ()), &info); } return klass; } /** \endobject{GfsVariableVOFConcentration} */ /** \beginobject{GfsVariableTracerVOFHeight} */ typedef struct { GfsVariable * f; /* volume fraction */ GfsVariable * hb, * ht; /* heights in either orientation */ GfsBc * angle; /* contact angle BC */ FttComponent c; /* x, y or z */ FttDirection d; } HFState; static gboolean is_interfacial (FttCell * cell, gpointer data) { GfsVariable * f = data; return !GFS_IS_FULL (GFS_VALUE (cell, f)); } static void undefined_height (FttCell * cell, HFState * hf) { GFS_VALUE (cell, hf->hb) = GFS_NODATA; GFS_VALUE (cell, hf->ht) = GFS_NODATA; } #define HMAX 5 #define SIGN(x) ((x) > 0. ? 1. : -1.) #define BOUNDARY_HIT (2.*HMAX) static gint children_half_height (FttCell * cell, FttDirection d, GfsVariable * fv, gdouble * H, gint * n) { FttCellChildren child; guint i, m = ftt_cell_children_direction (cell, FTT_OPPOSITE_DIRECTION (d), &child); gint s = 0; for (i = 0; i < m; i++) if (child.c[i]) { gdouble f = GFS_VALUE (child.c[i], fv); if (f > 0. && f < 1.) { s = 0; break; } s = SIGN (f - 0.5); } if (s != 0) return s; *H += GFS_VALUE (cell, fv); (*n)++; m = ftt_cell_children_direction (cell, d, &child); for (i = 0; i < m; i++) if (child.c[i]) { gdouble f = GFS_VALUE (child.c[i], fv); if (f > 0. && f < 1.) { return 0; } s = SIGN (f - 0.5); } return s; } static gint half_height (FttCell * cell, GfsVariable * fv, FttDirection d, gdouble * H, gint * n) { gint s = 0; *n = 0; guint level = ftt_cell_level (cell); FttCell * neighbor = ftt_cell_neighbor (cell, d); while (*n < HMAX && !s && neighbor) { gdouble f = GFS_VALUE (neighbor, fv); if (f > 0. && f < 1.) { /* interfacial cell */ if (ftt_cell_level (neighbor) < level) /* neighbor is coarser */ return 0; if (GFS_CELL_IS_BOUNDARY (neighbor)) return 2; if (FTT_CELL_IS_LEAF (neighbor)) { *H += f; (*n)++; } else s = children_half_height (neighbor, d, fv, H, n); } else /* full or empty cell */ s = SIGN (f - 0.5); neighbor = ftt_cell_neighbor (neighbor, d); } return s; } #define DMAX 2. static void height_propagation (FttCell * cell, HFState * hf, GfsVariable * h, gdouble orientation) { guint level = ftt_cell_level (cell); FttDirection d; for (d = 2*hf->c; d <= 2*hf->c + 1; d++, orientation = - orientation) { gdouble H = GFS_VALUE (cell, h); FttCell * neighbor = ftt_cell_neighbor (cell, d); gboolean interface = FALSE; while (fabs (H) < DMAX - 1. && neighbor && !interface && ftt_cell_level (neighbor) == level) { H -= orientation; GFS_VALUE (neighbor, h) = H; interface = is_interfacial (neighbor, hf->f); neighbor = ftt_cell_neighbor (neighbor, d); } } } static void height (FttCell * cell, HFState * hf) { if (!FTT_CELL_IS_LEAF (cell)) { /* look for childrens' HF */ FttComponent c = FTT_ORTHOGONAL_COMPONENT (hf->c); gdouble H = 0., orientation = 0.; guint nc = 0; GfsVariable * h = NULL; FttDirection d; for (d = 2*c; d <= 2*c + 1; d++) { FttCellChildren child; int i, n = ftt_cell_children_direction (cell, d, &child); for (i = 0; i < n; i++) if (child.c[i]) { if (h == NULL) h = gfs_closest_height (child.c[i], GFS_VARIABLE_TRACER_VOF_HEIGHT (hf->f), hf->c, &orientation); if (h != NULL && GFS_HAS_DATA (child.c[i], h)) { FttVector p; ftt_cell_relative_pos (child.c[i], &p); H += GFS_VALUE (child.c[i], h)/2. + orientation*(&p.x)[hf->c]; nc++; break; } } } if (nc == 2) { GFS_VALUE (cell, h) = H/nc; height_propagation (cell, hf, h, orientation); return; } /* try the standard way just in case */ } gdouble H = GFS_VALUE (cell, hf->f); /* top part of the column */ gint nt, st = half_height (cell, hf->f, 2*hf->c, &H, &nt); if (!st) /* still an interfacial cell (or coarser neighboring cell found) */ return; /* bottom part of the column */ gint nb, sb = half_height (cell, hf->f, 2*hf->c + 1, &H, &nb); if (!sb) /* still an interfacial cell (or coarser neighboring cell found) */ return; if (sb != 2 && st != 2) { if (st*sb > 0) /* the column does not cross the interface */ return; } else { /* column hit a boundary */ if (sb == 2 && st == 2) /* cannot hit a boundary on both sides */ return; if (sb == 2) sb = - SIGN (st); H += BOUNDARY_HIT; } if (sb > 0) { GFS_VALUE (cell, hf->hb) = H - 0.5 - nb; height_propagation (cell, hf, hf->hb, 1.); } else { GFS_VALUE (cell, hf->ht) = H - 0.5 - nt; height_propagation (cell, hf, hf->ht, -1.); } } static GfsVariable * boundary_hit (FttCell * cell, HFState * hf) { if (GFS_HAS_DATA (cell, hf->hb) && GFS_VALUE (cell, hf->hb) > BOUNDARY_HIT/2.) return hf->hb; if (GFS_HAS_DATA (cell, hf->ht) && GFS_VALUE (cell, hf->ht) > BOUNDARY_HIT/2.) return hf->ht; return NULL; } static void height_propagation_from_boundary (FttCell * cell, HFState * hf, GfsVariable * h) { guint level = ftt_cell_level (cell); FttDirection d = FTT_OPPOSITE_DIRECTION (hf->d); gdouble orientation = (hf->d % 2 ? -1 : 1)*(h == hf->hb ? 1 : -1); gdouble H = GFS_VALUE (cell, h); cell = ftt_cell_neighbor (cell, d); while (cell && GFS_HAS_DATA (cell, h) && GFS_VALUE (cell, h) > BOUNDARY_HIT/2. && ftt_cell_level (cell) == level) { H += orientation; GFS_VALUE (cell, h) = H; cell = ftt_cell_neighbor (cell, d); } /* propagate to non-interfacial cells up to DMAX */ while (fabs (H) < DMAX - 1. && cell && !is_interfacial (cell, hf->f) && ftt_cell_level (cell) == level) { H += orientation; GFS_VALUE (cell, h) = H; cell = ftt_cell_neighbor (cell, d); } } static void height_periodic_bc (FttCell * cell, HFState * hf) { FttCell * neighbor = ftt_cell_neighbor (cell, hf->d); g_assert (GFS_CELL_IS_BOUNDARY (neighbor)); GfsVariable * h = boundary_hit (cell, hf); if (h) { /* column hit boundary */ GfsVariable * hn = boundary_hit (neighbor, hf); if (hn == h) { /* the column crosses the interface */ /* propagate column height correction from one side (or PE) to the other */ gdouble orientation = (hf->d % 2 ? -1 : 1)*(h == hf->hb ? 1 : -1); gdouble Hn = GFS_VALUE (neighbor, h) + 0.5 + (orientation - 1.)/2. - 2.*BOUNDARY_HIT; GFS_VALUE (cell, h) += Hn; height_propagation_from_boundary (cell, hf, h); } else { /* the column does not cross the interface */ guint level = ftt_cell_level (cell); while (cell && GFS_HAS_DATA (cell, h) && GFS_VALUE (cell, h) > BOUNDARY_HIT/2. && ftt_cell_level (cell) == level) { undefined_height (cell, hf); cell = ftt_cell_neighbor (cell, FTT_OPPOSITE_DIRECTION (hf->d)); } } } else { /* column did not hit a boundary, propagate height across PE boundary */ if (GFS_HAS_DATA (neighbor, hf->hb)) height_propagation (neighbor, hf, hf->hb, 1.); if (GFS_HAS_DATA (neighbor, hf->ht)) height_propagation (neighbor, hf, hf->ht, -1.); } } #define SLOPE_MAX (2.*HMAX/3.) #define THETA_MIN (atan(1./SLOPE_MAX)) static gdouble contact_angle_bc (FttCell * cell, HFState * hf) { if (hf->angle) { FttCellFace f = ftt_cell_face (cell, hf->d); g_assert (GFS_CELL_IS_BOUNDARY (f.neighbor)); return gfs_function_face_value (GFS_BC_VALUE (hf->angle)->val, &f)*M_PI/180.; } else return M_PI/2.; } static void height_contact_normal_bc (FttCell * cell, HFState * hf) { GfsVariable * h = boundary_hit (cell, hf); if (h) { /* column hit boundary */ FttComponent oc = FTT_ORTHOGONAL_COMPONENT (hf->c); FttDirection nd = 2*oc; FttCell * n1 = ftt_cell_neighbor (cell, nd), * n2 = ftt_cell_neighbor (cell, nd + 1); if (n1 && GFS_HAS_DATA (n1, h) && n2 && GFS_HAS_DATA (n2, h)) { /* columns are defined on either side of @cell => it is not a contact line */ /* the boundary is dry or wet i.e. the column height is well defined */ /* reset the BOUNDARY_HIT flag on the whole column */ GFS_VALUE (cell, h) -= BOUNDARY_HIT; height_propagation_from_boundary (cell, hf, h); } else { GfsVariable * hb, * ht; /* use symmetries */ if (hf->d % 2) { hb = hf->hb; ht = hf->ht; } else { hb = hf->ht; ht = hf->hb; } gdouble full_or_empty = (h != hb); if (n1 && GFS_VALUE (n1, hf->f) != full_or_empty) { n1 = n2; nd++; } if (!n1 || GFS_VALUE (n1, hf->f) != full_or_empty) { /* column is not neighbouring a full or empty cell => it is not a contact line */ /* the boundary is dry or wet i.e. the column height is well defined */ /* reset the BOUNDARY_HIT flag on the whole column */ GFS_VALUE (cell, h) -= BOUNDARY_HIT; height_propagation_from_boundary (cell, hf, h); } /* contact line */ else { gdouble theta = contact_angle_bc (cell, hf); if ((h == hb && theta < atan (SLOPE_MAX)) || (h == ht && theta > M_PI - atan (SLOPE_MAX))) { gdouble orientation = (h == hb ? 1. : -1.); FttVector m = { orientation*sin(theta), cos(theta), 0. }; gdouble alpha = gfs_plane_alpha (&m, GFS_VALUE (cell, hf->f)); GFS_VALUE (cell, h) = orientation*((alpha - m.x/2.)/m.y - 0.5); height_propagation_from_boundary (cell, hf, h); /* set height of neighbouring (non-interfacial) column */ /* the line below ensures that the interface does not enter the non-interfacial neighbour */ if (orientation*alpha > orientation*m.x) alpha = m.x; GFS_VALUE (n1, h) = ftt_cell_level (n1) == ftt_cell_level (cell) ? orientation*((alpha - m.x*3./2.)/m.y - 0.5) : /* neighbour at same level */ orientation*((alpha - m.x*2.)/m.y - 1.)/2.; /* coarser neighbor */ height_propagation_from_boundary (n1, hf, h); } } } } } static void contact_angle_height (FttCell * cell, GfsVariable * h, HFState * hf) { if (GFS_HAS_DATA (cell, h)) { FttCell * neighbor = ftt_cell_neighbor (cell, hf->d); if (!neighbor) /* boundary cell is a one-sided solid boundary: give up */ return; g_assert (GFS_CELL_IS_BOUNDARY (neighbor)); /* fixme: * The boundary condition is not evaluated in the cell * containing the contact line. */ gdouble theta = contact_angle_bc (cell, hf); if (theta == M_PI/2.) GFS_VALUE (neighbor, h) = GFS_VALUE (cell, h); else { /* fixme?: * The tangential bc saturates at SLOPE_MAX. Curvatures defined * using parabolic interpolation are not consistent when the * ordinates differ too much. This is not a problem if the interface * is well-resolved (because the curvature will then be defined * using the heights in the other direction, which leads to a * well-defined curvature with the correct contact angle condition). * * If the interface is not well-resolved and if the desired contact * angle is smaller than THETA_MIN (or larger than M_PI - * THETA_MIN), the contact angle will saturate at THETA_MIN = atan (1./SLOPE_MAX). */ gdouble cotantheta = (theta < THETA_MIN ? SLOPE_MAX : theta > M_PI - THETA_MIN ? - SLOPE_MAX : 1./tan(theta)); GFS_VALUE (neighbor, h) = GFS_VALUE (cell, h) + cotantheta; } } } static void height_contact_tangential_bc (FttCell * cell, HFState * hf) { if (is_interfacial (cell, hf->f)) { contact_angle_height (cell, hf->hb, hf); contact_angle_height (cell, hf->ht, hf); } } static void box_periodic_bc (GfsBox * box, HFState * hf) { for (hf->d = 2*hf->c; hf->d <= 2*hf->c + 1; hf->d++) if (GFS_IS_BOUNDARY_PERIODIC (box->neighbor[hf->d])) ftt_cell_traverse_boundary (box->root, hf->d, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) height_periodic_bc, hf); } static void box_contact_bc (GfsBox * box, HFState * hf) { /* fixme: 2D only */ for (hf->d = 0; hf->d < FTT_NEIGHBORS; hf->d++) if (GFS_IS_BOUNDARY (box->neighbor[hf->d]) && !GFS_IS_BOUNDARY_PERIODIC (box->neighbor[hf->d])) { hf->angle = gfs_boundary_lookup_bc (GFS_BOUNDARY (box->neighbor[hf->d]), hf->f); if (!GFS_IS_BC_ANGLE (hf->angle)) hf->angle = NULL; /* symmetry i.e. angle = PI/2 */ FttCellTraverseFunc contact_bc = (FttCellTraverseFunc) (hf->d/2 == hf->c ? height_contact_normal_bc : height_contact_tangential_bc); ftt_cell_traverse_boundary (box->root, hf->d, FTT_POST_ORDER, FTT_TRAVERSE_ALL, -1, contact_bc, hf); } } static void remaining_boundary_height_undefined (FttCell * cell, HFState * hf) { GfsVariable * h = boundary_hit (cell, hf); if (h) GFS_VALUE (cell, h) = GFS_NODATA; } static gboolean height_normal (FttCell * cell, GfsVariable * v, FttVector * m) { gdouble slope = G_MAXDOUBLE; #ifdef FTT_2D GfsVariableTracerVOFHeight * t = GFS_VARIABLE_TRACER_VOF_HEIGHT (v); FttComponent c; m->x = 0.; m->y = 1.; for (c = 0; c < 2; c++) { gdouble orientation; GfsVariable * hv = gfs_closest_height (cell, t, c, &orientation); if (hv != NULL && fabs (GFS_VALUE (cell, hv)) <= 1.) { gdouble H = GFS_VALUE (cell, hv); gdouble x[2], h[2]; FttComponent oc = FTT_ORTHOGONAL_COMPONENT (c); h[0] = neighboring_column (cell, hv, c, orientation, 2*oc, &x[0]); if (h[0] == GFS_NODATA) continue; h[1] = neighboring_column (cell, hv, c, orientation, 2*oc + 1, &x[1]); if (h[1] == GFS_NODATA) continue; x[1] = - x[1]; gdouble det = x[0]*x[1]*(x[0] - x[1]), a = x[1]*(h[0] - H), b = x[0]*(h[1] - H); gdouble hx = (x[0]*b - x[1]*a)/det; if (fabs (hx) < slope) { slope = fabs (hx); (&m->x)[c] = orientation; (&m->x)[(c + 1) % 2] = - hx; } } } #else /* 3D */ g_assert_not_implemented (); #endif /* 3D */ return slope < G_MAXDOUBLE; } static void vof_height_plane (FttCell * cell, GfsVariable * v) { if (FTT_CELL_IS_LEAF (cell)) { GfsVariableTracerVOF * t = GFS_VARIABLE_TRACER_VOF (v); gdouble f = GFS_VALUE (cell, v); FttComponent c; THRESHOLD (f); if (GFS_IS_FULL (f)) { for (c = 1; c < FTT_DIMENSION; c++) GFS_VALUE (cell, t->m[c]) = 0.; GFS_VALUE (cell, t->m[0]) = 1.; GFS_VALUE (cell, t->alpha) = f; } else { FttVector m; gdouble n = 0.; if (!height_normal (cell, v, &m)) myc_normal (cell, v, &m); for (c = 0; c < FTT_DIMENSION; c++) n += fabs ((&m.x)[c]); if (n > 0.) for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] /= n; else /* fixme: this is a small fragment */ m.x = 1.; for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (cell, t->m[c]) = (&m.x)[c]; GFS_VALUE (cell, t->alpha) = gfs_plane_alpha (&m, f); } } } static void variable_tracer_vof_height_update (GfsVariable * v, GfsDomain * domain) { gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) v->fine_coarse, v); gfs_domain_bc (domain, FTT_TRAVERSE_ALL, -1, v); GSList * j = GFS_VARIABLE_TRACER_VOF (v)->concentrations->items; while (j) { gfs_domain_bc (domain, FTT_TRAVERSE_ALL, -1, j->data); j = j->next; } /* update height functions */ GfsVariableTracerVOFHeight * h = GFS_VARIABLE_TRACER_VOF_HEIGHT (v); HFState hf; hf.f = v; for (hf.c = 0; hf.c < FTT_DIMENSION; hf.c++) { hf.hb = h->hb[hf.c]; hf.ht = h->ht[hf.c]; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) undefined_height, &hf); gfs_domain_cell_traverse_condition (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) height, &hf, is_interfacial, hf.f); gfs_domain_bc (domain, FTT_TRAVERSE_ALL, -1, hf.hb); gfs_domain_bc (domain, FTT_TRAVERSE_ALL, -1, hf.ht); /* update periodic boundaries first */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_periodic_bc, &hf); /* apply bc again to make sure periodic bcs are in sync */ gfs_domain_bc (domain, FTT_TRAVERSE_ALL, -1, hf.hb); gfs_domain_bc (domain, FTT_TRAVERSE_ALL, -1, hf.ht); /* apply contact angle bcs */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_contact_bc, &hf); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) remaining_boundary_height_undefined, &hf); } /* update normals and alpha */ GfsVariableTracerVOF * t = GFS_VARIABLE_TRACER_VOF (v); guint l, depth = gfs_domain_depth (domain); FttComponent c; for (l = 0; l <= depth; l++) { gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, l, (FttCellTraverseFunc) vof_height_plane, v); for (c = 0; c < FTT_DIMENSION; c++) gfs_domain_bc (domain, FTT_TRAVERSE_LEVEL, l, t->m[c]); gfs_domain_bc (domain, FTT_TRAVERSE_LEVEL, l, t->alpha); } } static void variable_tracer_vof_height_destroy (GtsObject * o) { GfsVariableTracerVOF * v = GFS_VARIABLE_TRACER_VOF (o); if (v->alpha) { FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) { gts_object_destroy (GTS_OBJECT (GFS_VARIABLE_TRACER_VOF_HEIGHT (v)->hb[c])); gts_object_destroy (GTS_OBJECT (GFS_VARIABLE_TRACER_VOF_HEIGHT (v)->ht[c])); } } (* GTS_OBJECT_CLASS (gfs_variable_tracer_vof_height_class ())->parent_class->destroy) (o); } static void undefined_coarse_fine (FttCell * parent, GfsVariable * v) { FttCellChildren child; int i; ftt_cell_children (parent, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) GFS_VALUE (child.c[i], v) = GFS_NODATA; } static void variable_tracer_vof_height_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_variable_tracer_vof_height_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsVariable * v = GFS_VARIABLE (*o); GfsVariableTracerVOFHeight * t = GFS_VARIABLE_TRACER_VOF_HEIGHT (v); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) { static gchar index[][2] = {"x", "y", "z"}; gchar * name = g_strdup_printf ("%s_Hb%s", v->name, index[c]); gchar * description = g_strdup_printf ("%s-component (bottom) of the height function for the interface defined by %s", index[c], v->name); t->hb[c] = gfs_domain_get_or_add_variable (v->domain, name, description); t->hb[c]->fine_coarse = no_coarse_fine; t->hb[c]->coarse_fine = undefined_coarse_fine; g_free (name); g_free (description); name = g_strdup_printf ("%s_Ht%s", v->name, index[c]); description = g_strdup_printf ("%s-component (top) of the height function for the interface defined by %s", index[c], v->name); t->ht[c] = gfs_domain_get_or_add_variable (v->domain, name, description); t->ht[c]->fine_coarse = no_coarse_fine; t->ht[c]->coarse_fine = undefined_coarse_fine; g_free (name); g_free (description); } } static void variable_tracer_vof_height_class_init (GtsObjectClass * klass) { GFS_VARIABLE_TRACER_VOF_CLASS (klass)->update = variable_tracer_vof_height_update; klass->destroy = variable_tracer_vof_height_destroy; klass->read = variable_tracer_vof_height_read; } GfsVariableTracerVOFClass * gfs_variable_tracer_vof_height_class (void) { static GfsVariableTracerVOFClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsVariableTracerVOFHeight", sizeof (GfsVariableTracerVOFHeight), sizeof (GfsVariableTracerVOFClass), (GtsObjectClassInitFunc) variable_tracer_vof_height_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_tracer_vof_class ()), &info); } return klass; } /** * gfs_closest_height: * @cell: a #FttCell. * @t: a #GfsVariableTracerVOFHeight. * @c: x, y or z. * @orientation: the orientation or %NULL. * * Returns: the variable containing the height value (in direction @c) * closest to the interface, in which case orientation is set to 1 or * -1, or %NULL if no heights are defined for this cell. */ GfsVariable * gfs_closest_height (FttCell * cell, GfsVariableTracerVOFHeight * t, FttComponent c, gdouble * orientation) { g_return_val_if_fail (cell != NULL, NULL); g_return_val_if_fail (t != NULL, NULL); GfsVariable * hv = NULL; gdouble o = 0.; if (cell == NULL) return NULL; if (GFS_HAS_DATA (cell, t->hb[c])) { hv = t->hb[c]; o = 1.; if (GFS_HAS_DATA (cell, t->ht[c]) && fabs (GFS_VALUE (cell, t->ht[c])) < fabs (GFS_VALUE (cell, t->hb[c]))) { hv = t->ht[c]; o = -1.; } } else if (GFS_HAS_DATA (cell, t->ht[c])) { hv = t->ht[c]; o = -1.; } if (orientation) *orientation = o; return hv; } /** \endobject{GfsVariableTracerVOFHeight} */ static gdouble interface_fractions (FttVector m, gdouble alpha, FttDirection d) { gdouble f; #if FTT_2D FttComponent c1 = d > 1, c2 = !c1; if ((&m.x)[c2] == 0) { gdouble sign = (d % 2 ? -1. : 1.); f = (sign*(&m.x)[c1] > 0.) ? 0. : 1.; } else { f = (alpha-(&m.x)[c1]*!(d % 2))/(&m.x)[c2]; if(f < 0.) f = 0.; else if (f > 1.) f = 1.; if((&m.x)[c2] < 0.) f = 1.-f; } #else /* 3D */ FttComponent c1 = (d/2+1) % 3, c2 = (d/2+2) % 3; FttVector mp; mp.x = (&m.x)[c1]; mp.y = (&m.x)[c2]; f = gfs_line_area (&mp, d % 2 ? alpha : alpha - (&m.x)[d/2]); #endif /* 3D */ return f; } gdouble gfs_vof_face_fraction (const FttCellFace * face, GfsVariableTracerVOF * t) { g_return_val_if_fail (face != NULL, 0.); g_return_val_if_fail (t != NULL, 0.); GfsVariable * v = GFS_VARIABLE (t); gdouble vright, vleft = GFS_VALUE (face->cell, v); if (vleft == 0.) return 0.; else if (vleft != 1.0) { FttComponent c; FttVector m; gdouble alpha; for(c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] = GFS_VALUE (face->cell, t->m[c]); alpha = GFS_VALUE (face->cell, t->alpha); vleft = interface_fractions (m, alpha, face->d); } vright = GFS_VALUE (face->neighbor, v); if (vright == 0.) return 0.; else if (vright != 1.0) { FttComponent c; FttVector m; gdouble alpha; for(c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] = GFS_VALUE (face->neighbor,t->m[c]); alpha = GFS_VALUE (face->neighbor, t->alpha); if (ftt_face_type (face) == FTT_FINE_COARSE) { FttVector p, o, q; ftt_face_pos (face, &p); ftt_cell_pos (face->neighbor, &o); ftt_cell_pos (face->cell, &q); gdouble h = ftt_cell_size (face->neighbor); (&p.x)[face->d/2] += face->d % 2 ? -h/4. : h/4.; for (c = 0; c < FTT_DIMENSION; c++) alpha -= (&m.x)[c]*(0.25 + ((&p.x)[c] - (&o.x)[c])/h); alpha *= 2.; } vright = interface_fractions (m, alpha, FTT_OPPOSITE_DIRECTION (face->d)); } return sqrt(vleft*vright); } gerris-snapshot-131206/src/output.c0000644000175100017510000027555212250371171014175 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Various outputs. */ #include #include #include #include #include #include #include #include "output.h" #include "graphic.h" #include "adaptive.h" #include "solid.h" #include "ocean.h" #include "unstructured.h" #include "init.h" /** * Writing simulation data. * \beginobject{GfsOutput} */ static void output_free (GfsOutput * output) { if (output->format) g_free (output->format); output->format = NULL; gfs_format_destroy (output->formats); output->formats = NULL; } static void gfs_output_destroy (GtsObject * object) { GfsOutput * output = GFS_OUTPUT (object); if (output->file) gfs_output_file_close (output->file); output_free (output); (* GTS_OBJECT_CLASS (gfs_output_class ())->parent_class->destroy) (object); } static gboolean gfs_output_event (GfsEvent * event, GfsSimulation * sim) { if ((* gfs_event_class ()->event) (event, sim)) { GfsOutput * output = GFS_OUTPUT (event); gchar * fname; if (!output->parallel && GFS_DOMAIN (sim)->pid > 0) { if (output->file) output->first_call = FALSE; else gfs_output_mute (output); return (output->file != NULL); } if (!output->dynamic) { if (output->file) output->first_call = FALSE; else { if (output->format[0] == '{') { /* script */ guint len = strlen (output->format); g_assert (output->format[len - 1] == '}'); output->format[len - 1] = '\0'; FILE * fp = gfs_popen (sim, &output->format[1], "w"); if (fp == NULL) { g_warning ("GfsOutput cannot start script"); return TRUE; } output->file = gfs_output_file_new (fp); output->file->is_pipe = TRUE; output->format[len - 1] = '}'; } else { /* standard file */ fname = gfs_format_string (output->formats, GFS_DOMAIN (sim)->pid, sim->time.i, sim->time.t); output->file = gfs_output_file_open (fname, sim->time.i > 0 && gfs_event_is_repetitive (event) ? "a" : "w"); if (output->file == NULL) g_warning ("could not open file `%s'", fname); g_free (fname); } } return (output->file != NULL); } if (output->file) gfs_output_file_close (output->file); fname = gfs_format_string (output->formats, GFS_DOMAIN (sim)->pid, sim->time.i, sim->time.t); output->file = gfs_output_file_open (fname, "w"); if (output->file == NULL) g_warning ("could not open file `%s'", fname); g_free (fname); return (output->file != NULL); } return FALSE; } static void gfs_output_post_event (GfsEvent * event, GfsSimulation * sim) { GfsOutput * output = GFS_OUTPUT (event); if (output->file) fflush (output->file->fp); } static void gfs_output_write (GtsObject * o, FILE * fp) { GfsOutput * output = GFS_OUTPUT (o); (* GTS_OBJECT_CLASS (gfs_output_class ())->parent_class->write) (o, fp); if (output->format) fprintf (fp, " %s", output->format); } static void gfs_output_read (GtsObject ** o, GtsFile * fp) { GfsOutput * output; (* GTS_OBJECT_CLASS (gfs_output_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; output = GFS_OUTPUT (*o); if (output->file) gfs_output_file_close (output->file); output->file = NULL; if (output->format) g_free (output->format); output->format = NULL; output->dynamic = FALSE; output->first_call = TRUE; if (fp->type == '{') { gchar * script = gfs_file_statement (fp); if (script == NULL) return; output->format = g_strconcat ("{", script, "}", NULL); g_free (script); gts_file_next_token (fp); } else if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (format)"); return; } else { GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (output)); output->format = g_strdup (fp->token->str); gts_file_next_token (fp); if (!strcmp (output->format, "stderr") || !strcmp (output->format, "stdout")) { if (domain->pid > 0) gfs_output_mute (output); else { g_assert (!output->file); output->file = gfs_output_file_open (output->format, "w"); } return; } output->formats = gfs_format_new (output->format, fp, &output->dynamic, &output->parallel); if (fp->type == GTS_ERROR) { output_free (output); return; } if (output->parallel || domain->pid <= 0) { gchar * fname = gfs_format_string (output->formats, domain->pid, 0, 0.); gchar * fnamebak = g_strconcat (fname, "~", NULL); g_free (fname); FILE * fptr = fopen (fnamebak, "w"); if (fptr == NULL) { gts_file_error (fp, "cannot open file specified by format `%s'\n %s", output->format, strerror (errno)); g_free (fnamebak); output_free (output); return; } fclose (fptr); remove (fnamebak); g_free (fnamebak); } } } static void gfs_output_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_event; GFS_EVENT_CLASS (klass)->post_event = gfs_output_post_event; GTS_OBJECT_CLASS (klass)->write = gfs_output_write; GTS_OBJECT_CLASS (klass)->read = gfs_output_read; GTS_OBJECT_CLASS (klass)->destroy = gfs_output_destroy; } static void gfs_output_init (GfsOutput * object) { object->file = NULL; object->format = NULL; object->formats = NULL; object->dynamic = FALSE; object->parallel = FALSE; object->first_call = TRUE; } GfsOutputClass * gfs_output_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_info = { "GfsOutput", sizeof (GfsOutput), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_class_init, (GtsObjectInitFunc) gfs_output_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_output_info); } return klass; } /** * gfs_output_mute: * @output: a #GfsOutput. * * "Mutes" the output defined by @output, the event associated with * @output still takes place but the output itself is redirected to * /dev/null. */ void gfs_output_mute (GfsOutput * output) { g_return_if_fail (output != NULL); output->dynamic = FALSE; if (output->file) gfs_output_file_close (output->file); output->file = gfs_output_file_open ("/dev/null", "w"); } static GHashTable * gfs_output_files = NULL; /** * gfs_output_file_new: * @fp: a file pointer. * * Returns: a new #GfsOutputFile for @fp. */ GfsOutputFile * gfs_output_file_new (FILE * fp) { GfsOutputFile * file = g_malloc (sizeof (GfsOutputFile)); file->refcount = 1; file->name = NULL; file->fp = fp; file->is_pipe = FALSE; return file; } /** * gfs_output_file_open: * @name: the name of the file to open. * @mode: the fopen mode. * * Checks whether @name has already been opened. If it has, its * reference count is incremented and the corresponding #GfsOutputFile * is returned. If it has not, it is created and opened for writing. * * Returns: the #GfsOutputFile of file @name. */ GfsOutputFile * gfs_output_file_open (const gchar * name, const gchar * mode) { GfsOutputFile * file; FILE * fp; g_return_val_if_fail (name != NULL, NULL); if (gfs_output_files == NULL) { gfs_output_files = g_hash_table_new (g_str_hash, g_str_equal); file = g_malloc (sizeof (GfsOutputFile)); file->refcount = 2; file->name = g_strdup ("stderr"); file->fp = stderr; g_hash_table_insert (gfs_output_files, file->name, file); file = g_malloc (sizeof (GfsOutputFile)); file->refcount = 2; file->name = g_strdup ("stdout"); file->fp = stdout; g_hash_table_insert (gfs_output_files, file->name, file); } if ((file = g_hash_table_lookup (gfs_output_files, name))) { file->refcount++; return file; } fp = fopen (name, mode); if (fp == NULL) return NULL; file = gfs_output_file_new (fp); file->name = g_strdup (name); g_hash_table_insert (gfs_output_files, file->name, file); return file; } /** * gfs_output_file_close: * @file: a #GfsOutputFile. * * Decreases the reference count of @file. If it reaches zero the file * corresponding to @file is closed and @file is freed. */ void gfs_output_file_close (GfsOutputFile * file) { g_return_if_fail (file); file->refcount--; if (file->refcount == 0) { if (file->name) g_hash_table_remove (gfs_output_files, file->name); if (file->is_pipe) pclose (file->fp); else fclose (file->fp); g_free (file->name); g_free (file); } } /** \endobject{GfsOutput} */ /** * Model time, timestep and computing times. * \beginobject{GfsOutputTime} */ static gboolean time_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_output_class())->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); gdouble cpu = gfs_clock_elapsed (domain->timer); #ifdef HAVE_MPI if (domain->pid >= 0) { gfs_all_reduce (domain, cpu, MPI_DOUBLE, MPI_SUM); int size; MPI_Comm_size (MPI_COMM_WORLD, &size); cpu /= size; } #endif fprintf (GFS_OUTPUT (event)->file->fp, "step: %7u t: %15.8f dt: %13.6e cpu: %15.8f real: %15.8f\n", sim->time.i, sim->time.t, sim->advection_params.dt, cpu, g_timer_elapsed (domain->clock, NULL)); return TRUE; } return FALSE; } static void gfs_output_time_class_init (GfsEventClass * klass) { klass->event = time_event; } GfsOutputClass * gfs_output_time_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_time_info = { "GfsOutputTime", sizeof (GfsOutput), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_time_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_time_info); } return klass; } /** \endobject{GfsOutputTime} */ /** * * \beginobject{GfsOutputProgress} */ static gboolean progress_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_output_class())->event) (event, sim)) { gdouble idone = sim->time.i/(gdouble) sim->time.iend; gdouble tdone = sim->time.t/sim->time.end; if (idone > tdone) tdone = idone; fprintf (GFS_OUTPUT (event)->file->fp, "\r%3.0f%% done", 100.*tdone); if (tdone > 0.) { gdouble remaining = GFS_DOMAIN (sim)->timestep.sum*(1. - tdone)/tdone; gdouble hours = floor (remaining/3600.); gdouble mins = floor ((remaining - 3600.*hours)/60.); gdouble secs = floor (remaining - 3600.*hours - 60.*mins); fprintf (GFS_OUTPUT (event)->file->fp, ", %02.0f:%02.0f:%02.0f remaining ", hours, mins, secs); } if (tdone == 1.) fputc ('\n', GFS_OUTPUT (event)->file->fp); return TRUE; } return FALSE; } static void gfs_output_progress_class_init (GfsEventClass * klass) { klass->event = progress_event; } GfsOutputClass * gfs_output_progress_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_progress_info = { "GfsOutputProgress", sizeof (GfsOutput), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_progress_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_progress_info); } return klass; } /** \endobject{GfsOutputProgress} */ /** * * \beginobject{GfsOutputProjectionStats} */ static gboolean projection_stats_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_output_class())->event) (event, sim)) { FILE * fp = GFS_OUTPUT (event)->file->fp; if (sim->projection_params.niter > 0) { fprintf (fp, "MAC projection before after rate\n"); gfs_multilevel_params_stats_write (&sim->projection_params, fp); } fprintf (fp, "Approximate projection\n"); gfs_multilevel_params_stats_write (&sim->approx_projection_params, fp); return TRUE; } return FALSE; } static void gfs_output_projection_stats_class_init (GfsEventClass * klass) { klass->event = projection_stats_event; } GfsOutputClass * gfs_output_projection_stats_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_projection_stats_info = { "GfsOutputProjectionStats", sizeof (GfsOutput), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_projection_stats_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_projection_stats_info); } return klass; } /** \endobject{GfsOutputProjectionStats} */ /** * * \beginobject{GfsOutputDiffusionStats} */ static gboolean diffusion_stats_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_output_class())->event) (event, sim)) { FILE * fp = GFS_OUTPUT (event)->file->fp; GSList * l = NULL, * i; i = GFS_DOMAIN (sim)->variables; while (i) { GfsVariable * v = i->data; if (v->sources) { GSList * j = GTS_SLIST_CONTAINER (v->sources)->items; while (j) { GtsObject * o = j->data; if (GFS_IS_SOURCE_DIFFUSION (o) && GFS_SOURCE_DIFFUSION (o)->D->par.niter > 0 && !g_slist_find (l, o)) { l = g_slist_prepend (l, o); fprintf (fp, "%s diffusion\n", v->name); gfs_multilevel_params_stats_write (&GFS_SOURCE_DIFFUSION (o)->D->par, fp); } j = j->next; } } i = i->next; } g_slist_free (l); return TRUE; } return FALSE; } static void gfs_output_diffusion_stats_class_init (GfsEventClass * klass) { klass->event = diffusion_stats_event; } GfsOutputClass * gfs_output_diffusion_stats_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_diffusion_stats_info = { "GfsOutputDiffusionStats", sizeof (GfsOutput), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_diffusion_stats_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_diffusion_stats_info); } return klass; } /** \endobject{GfsOutputDiffusionStats} */ /** * * \beginobject{GfsOutputSolidStats} */ static gboolean gfs_output_solid_stats_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_solid_stats_class ())->parent_class)->event) (event, sim)) { GtsRange stats = gfs_domain_stats_solid (GFS_DOMAIN (sim)); GtsRange ma, mn; gfs_domain_stats_merged (GFS_DOMAIN (sim), &ma, &mn); fprintf (GFS_OUTPUT (event)->file->fp, "Solid volume fraction\n" " min: %10.3e avg: %10.3e | %10.3e max: %10.3e n: %10d\n" "Total merged solid volume fraction\n" " min: %10.3e avg: %10.3e | %10.3e max: %10.3e n: %10d\n" "Number of cells merged per merged cell\n" " min: %10.0f avg: %10.3f | %10.3f max: %10.0f n: %10d\n" "Number of \"thin\" cells removed: %10d\n", stats.min, stats.mean, stats.stddev, stats.max, stats.n, ma.min, ma.mean, ma.stddev, ma.max, ma.n, mn.min, mn.mean, mn.stddev, mn.max, mn.n, sim->thin); return TRUE; } return FALSE; } static void gfs_output_solid_stats_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_solid_stats_event; } GfsOutputClass * gfs_output_solid_stats_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_solid_stats_info = { "GfsOutputSolidStats", sizeof (GfsOutput), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_solid_stats_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_solid_stats_info); } return klass; } /** \endobject{GfsOutputSolidStats} */ /** * Information about the mesh adaptation. * \beginobject{GfsOutputAdaptStats} */ static gboolean gfs_output_adapt_stats_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_adapt_stats_class ())->parent_class)->event) (event, sim)) { gfs_adapt_stats_update (&sim->adapts_stats); fprintf (GFS_OUTPUT (event)->file->fp, "Adaptive mesh refinement statistics\n" " Cells removed: %10d\n" " Cells created: %10d\n" " Number of cells\n" " min: %10.0f avg: %10.3f | %10.3f max: %10.0f n: %10d\n", sim->adapts_stats.removed, sim->adapts_stats.created, sim->adapts_stats.ncells.min, sim->adapts_stats.ncells.mean, sim->adapts_stats.ncells.stddev, sim->adapts_stats.ncells.max, sim->adapts_stats.ncells.n); if (sim->adapts_stats.cmax.n > 0) fprintf (GFS_OUTPUT (event)->file->fp, " Maximum cost\n" " min: %10.3e avg: %10.3e | %10.3e max: %10.3e n: %10d\n", sim->adapts_stats.cmax.min, sim->adapts_stats.cmax.mean, sim->adapts_stats.cmax.stddev, sim->adapts_stats.cmax.max, sim->adapts_stats.cmax.n); gfs_adapt_stats_init (&sim->adapts_stats); return TRUE; } return FALSE; } static void gfs_output_adapt_stats_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_adapt_stats_event; } GfsOutputClass * gfs_output_adapt_stats_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_adapt_stats_info = { "GfsOutputAdaptStats", sizeof (GfsOutput), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_adapt_stats_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_adapt_stats_info); } return klass; } /** \endobject{GfsOutputAdaptStats} */ /** * * \beginobject{GfsOutputTiming} */ typedef struct { GfsTimer * t; gchar * name; } Timer; static int compare_timer (const void * a, const void * b) { Timer * t1 = (Timer *) a; Timer * t2 = (Timer *) b; return (t1->t->r.sum < t2->t->r.sum) ? -1 : 1 ; } static void get_timer (gchar * name, GfsTimer * t, gpointer * data) { Timer * timing = data[0]; gint * count = data[1]; timing[*count].t = t; timing[*count].name = name; (*count)++; } static void print_timing (GHashTable * timers, GfsDomain * domain, FILE * fp) { Timer * timing = g_malloc (sizeof (Timer)*g_hash_table_size (timers)); gint count = 0; gpointer data[2]; data[0] = timing; data[1] = &count; g_hash_table_foreach (domain->timers, (GHFunc) get_timer, data); qsort (timing, count, sizeof (Timer), compare_timer); while (--count >= 0) if (timing[count].t->r.sum > 0.) fprintf (fp, " %s:\n" " min: %9.3f avg: %9.3f (%4.1f%%) | %7.3f max: %9.3f\n", timing[count].name, timing[count].t->r.min, timing[count].t->r.mean, domain->timestep.sum > 0. ? 100.*timing[count].t->r.sum/domain->timestep.sum : 0., timing[count].t->r.stddev, timing[count].t->r.max); g_free (timing); } static gboolean timing_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_output_class())->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); FILE * fp = GFS_OUTPUT (event)->file->fp; if (domain->timestep.mean > 0.) { fprintf (fp, "Timing summary: %u timesteps %.0f node.timestep/s\n" " timestep:\n" " min: %9.3f avg: %9.3f | %7.3f max: %9.3f\n" " domain size:\n" " min: %9.0f avg: %9.0f | %7.0f max: %9.0f\n" " maximum number of variables: %d\n", domain->timestep.n, domain->size.mean/domain->timestep.mean, domain->timestep.min, domain->timestep.mean, domain->timestep.stddev, domain->timestep.max, domain->size.min, domain->size.mean, domain->size.stddev, domain->size.max, gfs_domain_variables_number (domain)); print_timing (domain->timers, domain, fp); if (domain->mpi_messages.n > 0) fprintf (fp, "Message passing summary\n" " n: %10d size: %10.0f bytes\n", domain->mpi_messages.n, domain->mpi_messages.sum); } return TRUE; } return FALSE; } static void gfs_output_timing_class_init (GfsEventClass * klass) { klass->event = timing_event; } GfsOutputClass * gfs_output_timing_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_timing_info = { "GfsOutputTiming", sizeof (GfsOutput), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_timing_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_timing_info); } return klass; } /** \endobject{GfsOutputTiming} */ /** * Writing simulation size statistics. * \beginobject{GfsOutputBalance} */ static gboolean gfs_output_balance_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_balance_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); FILE * fp = GFS_OUTPUT (event)->file->fp; GtsRange size, boundary, mpiwait; gfs_domain_stats_balance (domain, &size, &boundary, &mpiwait); fprintf (fp, "Balance summary: %u PE\n" " domain min: %9.0f avg: %9.0f | %7.0f max: %9.0f\n", size.n, size.min, size.mean, size.stddev, size.max); if (boundary.max > 0.) fprintf (fp, " boundary min: %9.0f avg: %9.0f | %7.0f max: %9.0f\n", boundary.min, boundary.mean, boundary.stddev, boundary.max); if (mpiwait.max > 0.) fprintf (fp, " average timestep MPI wait time:\n" " min: %9.3f avg: %9.3f | %7.3f max: %9.3f\n", mpiwait.min, mpiwait.mean, mpiwait.stddev, mpiwait.max); return TRUE; } return FALSE; } static void gfs_output_balance_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_balance_event; } GfsOutputClass * gfs_output_balance_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_balance_info = { "GfsOutputBalance", sizeof (GfsOutput), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_balance_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_balance_info); } return klass; } /** \endobject{GfsOutputBalance} */ /** * orces and moments on the embedded solid boundaries. * \beginobject{GfsOutputSolidForce} */ static void gfs_output_solid_force_destroy (GtsObject * object) { if (GFS_OUTPUT_SOLID_FORCE (object)->weight) gts_object_destroy (GTS_OBJECT (GFS_OUTPUT_SOLID_FORCE (object)->weight)); (* GTS_OBJECT_CLASS (gfs_output_solid_force_class ())->parent_class->destroy) (object); } static void gfs_output_solid_force_read (GtsObject ** o, GtsFile * fp) { GfsOutputSolidForce * l = GFS_OUTPUT_SOLID_FORCE (*o); (* GTS_OBJECT_CLASS (gfs_output_solid_force_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != '\n') { if (!l->weight) l->weight = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (l->weight, gfs_object_simulation (l), fp); } } static void gfs_output_solid_force_write (GtsObject * o, FILE * fp) { GfsOutputSolidForce * l = GFS_OUTPUT_SOLID_FORCE (o); (* GTS_OBJECT_CLASS (gfs_output_solid_force_class ())->parent_class->write) (o, fp); if (l->weight) gfs_function_write (l->weight, fp); } static gboolean gfs_output_solid_force_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_solid_force_class ())->parent_class)->event) (event, sim) && sim->advection_params.dt > 0.) { GfsDomain * domain = GFS_DOMAIN (sim); FILE * fp = GFS_OUTPUT (event)->file->fp; FttVector pf, vf, pm, vm; gdouble L = sim->physical_params.L, Ln = pow (L, 3. + FTT_DIMENSION - 2.); if (GFS_OUTPUT (event)->first_call) fputs ("# 1: T (2,3,4): Pressure force (5,6,7): Viscous force " "(8,9,10): Pressure moment (11,12,13): Viscous moment\n", fp); gfs_domain_solid_force (domain, &pf, &vf, &pm, &vm, GFS_OUTPUT_SOLID_FORCE (event)->weight); fprintf (fp, "%g %g %g %g %g %g %g %g %g %g %g %g %g\n", sim->time.t, pf.x*Ln, pf.y*Ln, pf.z*Ln, vf.x*Ln, vf.y*Ln, vf.z*Ln, pm.x*Ln*L, pm.y*Ln*L, pm.z*Ln*L, vm.x*Ln*L, vm.y*Ln*L, vm.z*Ln*L); return TRUE; } return FALSE; } static void gfs_output_solid_force_class_init (GfsOutputClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_output_solid_force_read; GTS_OBJECT_CLASS (klass)->write = gfs_output_solid_force_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_output_solid_force_destroy; GFS_EVENT_CLASS (klass)->event = gfs_output_solid_force_event; } GfsOutputClass * gfs_output_solid_force_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_solid_force_info = { "GfsOutputSolidForce", sizeof (GfsOutputSolidForce), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_solid_force_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_solid_force_info); } return klass; } /** \endobject{GfsOutputSolidForce} */ /** * Writing the values of variables at specified locations. * \beginobject{GfsOutputLocation} */ static gchar default_precision[] = "%g"; static void gfs_output_location_destroy (GtsObject * object) { GfsOutputLocation * l = GFS_OUTPUT_LOCATION (object); g_array_free (l->p, TRUE); g_free (l->label); if (l->precision != default_precision) g_free (l->precision); (* GTS_OBJECT_CLASS (gfs_output_location_class ())->parent_class->destroy) (object); } static gboolean vector_read (GtsFile * fp, FttVector * p) { if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (p.x)"); return FALSE; } p->x = atof (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (p.y)"); return FALSE; } p->y = atof (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (p.z)"); return FALSE; } p->z = atof (fp->token->str); gts_file_next_token (fp); return TRUE; } static void gfs_output_location_read (GtsObject ** o, GtsFile * fp) { GfsOutputLocation * l = GFS_OUTPUT_LOCATION (*o); if (GTS_OBJECT_CLASS (gfs_output_location_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_output_location_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type == GTS_STRING) { FILE * fptr = fopen (fp->token->str, "r"); GtsFile * fp1; if (fptr == NULL) { gts_file_error (fp, "cannot open file `%s'", fp->token->str); return; } fp1 = gts_file_new (fptr); while (fp1->type != GTS_NONE) { FttVector p; if (!vector_read (fp1, &p)) { gts_file_error (fp, "%s:%d:%d: %s", fp->token->str, fp1->line, fp1->pos, fp1->error); return; } g_array_append_val (l->p, p); while (fp1->type == '\n') gts_file_next_token (fp1); } gts_file_destroy (fp1); fclose (fptr); gts_file_next_token (fp); } else if (fp->type == '{') { fp->scope_max++; do gts_file_next_token (fp); while (fp->type == '\n'); while (fp->type != GTS_NONE && fp->type != '}') { FttVector p; if (!vector_read (fp, &p)) return; g_array_append_val (l->p, p); while (fp->type == '\n') gts_file_next_token (fp); } if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); } else { FttVector p; if (!vector_read (fp, &p)) return; g_array_append_val (l->p, p); } if (fp->type == '{') { gchar * label = NULL, * precision = NULL; GtsFileVariable var[] = { {GTS_STRING, "label", TRUE, &label}, {GTS_STRING, "precision", TRUE, &precision}, {GTS_INT, "interpolate", TRUE, &l->interpolate}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) { g_free (label); g_free (precision); return; } if (precision != NULL) { if (l->precision != default_precision) g_free (l->precision); l->precision = precision; } if (label != NULL) { g_free (l->label); l->label = label; } } } static void gfs_output_location_write (GtsObject * o, FILE * fp) { GfsOutputLocation * l = GFS_OUTPUT_LOCATION (o); guint i; (* GTS_OBJECT_CLASS (gfs_output_location_class ())->parent_class->write) (o, fp); fputs (" {\n", fp); gchar * format = g_strdup_printf ("%s %s %s\n", l->precision, l->precision, l->precision); for (i = 0; i < l->p->len; i++) { FttVector p = g_array_index (l->p, FttVector, i); fprintf (fp, format, p.x, p.y, p.z); } g_free (format); fputc ('}', fp); if (l->precision != default_precision || l->label) { fputs (" {\n", fp); if (l->precision != default_precision) fprintf (fp, " precision = %s\n", l->precision); if (l->label) fprintf (fp, " label = \"%s\"\n", l->label); if (!l->interpolate) fputs (" interpolate = 0\n", fp); fputc ('}', fp); } } static gboolean gfs_output_location_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_location_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsOutputLocation * location = GFS_OUTPUT_LOCATION (event); FILE * fp = GFS_OUTPUT (event)->file->fp; GfsUnionFile uf; FILE * fpp = ((domain->pid < 0 || GFS_OUTPUT (event)->parallel) ? fp: gfs_union_open (GFS_OUTPUT (event)->file->fp, domain->pid, &uf)); guint i; if (GFS_OUTPUT (event)->first_call) { GSList * i = domain->variables; guint nv = 5; fputs ("# 1:t 2:x 3:y 4:z", fp); while (i) { if (GFS_VARIABLE (i->data)->name) fprintf (fp, " %d:%s", nv++, GFS_VARIABLE (i->data)->name); i = i->next; } fputc ('\n', fp); } gchar * pformat = g_strdup_printf ("%s %s %s %s", location->precision, location->precision, location->precision, location->precision); gchar * vformat = g_strdup_printf (" %s", location->precision); for (i = 0; i < location->p->len; i++) { FttVector p = g_array_index (location->p, FttVector, i), pm = p; gfs_simulation_map (sim, &pm); FttCell * cell = gfs_domain_locate (domain, pm, -1, NULL); if (cell != NULL) { GSList * i = domain->variables; fprintf (fpp, pformat, sim->time.t, p.x, p.y, p.z); while (i) { GfsVariable * v = i->data; if (v->name) fprintf (fpp, vformat, gfs_dimensional_value (v, location->interpolate ? gfs_interpolate (cell, pm, v) : GFS_VALUE (cell, v))); i = i->next; } fputc ('\n', fpp); } } g_free (pformat); g_free (vformat); fflush (fp); if (!(domain->pid < 0 || GFS_OUTPUT (event)->parallel)) gfs_union_close (GFS_OUTPUT (event)->file->fp, domain->pid, &uf); return TRUE; } return FALSE; } static void gfs_output_location_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_location_event; GTS_OBJECT_CLASS (klass)->destroy = gfs_output_location_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_output_location_read; GTS_OBJECT_CLASS (klass)->write = gfs_output_location_write; } static void gfs_output_location_init (GfsOutputLocation * object) { object->p = g_array_new (FALSE, FALSE, sizeof (FttVector)); object->precision = default_precision; object->interpolate = TRUE; } GfsOutputClass * gfs_output_location_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_location_info = { "GfsOutputLocation", sizeof (GfsOutputLocation), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_location_class_init, (GtsObjectInitFunc) gfs_output_location_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_location_info); } return klass; } /** \endobject{GfsOutputLocation} */ /** * Tracking Lagrangian particles. * \beginobject{GfsOutputParticle} */ static gboolean gfs_output_particle_event (GfsEvent * event, GfsSimulation * sim) { GfsOutputLocation * location = GFS_OUTPUT_LOCATION (event); gboolean ret = FALSE; guint i; if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_location_class ())->parent_class)->event) (event,sim)) { FILE * fp = GFS_OUTPUT (event)->file->fp; for (i = 0; i < location->p->len; i++) { FttVector p = g_array_index (location->p, FttVector, i); fprintf (fp, "%d %g %g %g %g\n", i, sim->time.t, p.x, p.y, p.z); } ret = TRUE; } for (i = 0; i < location->p->len; i++) { FttVector p = g_array_index (location->p, FttVector, i); gfs_simulation_map (sim, &p); gfs_domain_advect_point (GFS_DOMAIN (sim), &p, sim->advection_params.dt); gfs_simulation_map_inverse (sim, &p); g_array_index (location->p, FttVector, i) = p; } return ret; } static void gfs_output_particle_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_particle_event; } GfsOutputClass * gfs_output_particle_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_particle_info = { "GfsOutputParticle", sizeof (GfsOutputLocation), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_particle_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_location_class ()), &gfs_output_particle_info); } return klass; } /** \endobject{GfsOutputParticle} */ /** * Writing the whole simulation. * \beginobject{GfsOutputSimulation} */ static void output_simulation_destroy (GtsObject * object) { GfsOutputSimulation * output = GFS_OUTPUT_SIMULATION (object); g_slist_free (output->var); if (output->precision != default_precision) g_free (output->precision); (* GTS_OBJECT_CLASS (gfs_output_simulation_class ())->parent_class->destroy) (object); } static void write_text (FttCell * cell, gpointer * data) { GfsOutputSimulation * output = data[0]; FILE * fp = data[1]; GSList * i = GFS_DOMAIN (gfs_object_simulation (output))->variables_io; FttVector p; gfs_cell_cm (cell, &p); gfs_simulation_map_inverse (gfs_object_simulation (output), &p); gchar * format = g_strdup_printf ("%s %s %s", output->precision, output->precision, output->precision); fprintf (fp, format, p.x, p.y, p.z); g_free (format); format = g_strdup_printf (" %s", output->precision); while (i) { if (GFS_VARIABLE (i->data)->name) fprintf (fp, format, gfs_dimensional_value (i->data, GFS_VALUE (cell, GFS_VARIABLE (i->data)))); i = i->next; } g_free (format); fputc ('\n', fp); } static gboolean output_simulation_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_output_class())->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsOutputSimulation * output = GFS_OUTPUT_SIMULATION (event); g_slist_free (domain->variables_io); if (output->var) domain->variables_io = output->var; else { GSList * i = domain->variables; domain->variables_io = NULL; while (i) { if (GFS_VARIABLE (i->data)->name) domain->variables_io = g_slist_append (domain->variables_io, i->data); i = i->next; } } domain->binary = output->binary; sim->output_solid = output->solid; switch (output->format) { case GFS: if (GFS_OUTPUT (output)->parallel) gfs_simulation_write (sim, output->max_depth, GFS_OUTPUT (event)->file->fp); else gfs_simulation_union_write (sim, output->max_depth, GFS_OUTPUT (event)->file->fp); break; case GFS_TEXT: { if (GFS_OUTPUT (output)->parallel || domain->pid <= 0) { FILE * fp = GFS_OUTPUT (event)->file->fp; GSList * i = domain->variables_io; guint nv = 4; fputs ("# 1:x 2:y 3:z", fp); while (i) { g_assert (GFS_VARIABLE (i->data)->name); fprintf (fp, " %d:%s", nv++, GFS_VARIABLE (i->data)->name); i = i->next; } fprintf (fp, " %g\n", sim->time.t); } gpointer data[2]; data[0] = output; if (GFS_OUTPUT (output)->parallel) { data[1] = GFS_OUTPUT (event)->file->fp; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL|FTT_TRAVERSE_LEAFS, output->max_depth, (FttCellTraverseFunc) write_text, data); } else { GfsUnionFile uf; FILE * fpp = gfs_union_open (GFS_OUTPUT (event)->file->fp, domain->pid, &uf); data[1] = fpp; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL|FTT_TRAVERSE_LEAFS, output->max_depth, (FttCellTraverseFunc) write_text, data); gfs_union_close (GFS_OUTPUT (event)->file->fp, domain->pid, &uf); } break; } case GFS_VTK: { gfs_domain_write_vtk (domain, output->max_depth, domain->variables_io, output->precision, GFS_OUTPUT (event)->file->fp); break; } case GFS_TECPLOT: { gfs_domain_write_tecplot (domain, output->max_depth, domain->variables_io, output->precision, GFS_OUTPUT (event)->file->fp); #if !FTT_2D gfs_domain_write_tecplot_surface (domain, output->max_depth, domain->variables_io, output->precision, GFS_OUTPUT (event)->file->fp); #endif break; } default: g_assert_not_reached (); } if (!output->var) g_slist_free (domain->variables_io); domain->variables_io = NULL; domain->binary = TRUE; sim->output_solid = TRUE; return TRUE; } return FALSE; } static void output_simulation_write (GtsObject * o, FILE * fp) { GfsOutputSimulation * output = GFS_OUTPUT_SIMULATION (o); GSList * i = output->var; (* GTS_OBJECT_CLASS (gfs_output_simulation_class ())->parent_class->write) (o, fp); fputs (" {", fp); if (output->max_depth != -1) fprintf (fp, " depth = %d", output->max_depth); if (i != NULL) { fprintf (fp, " variables = %s", GFS_VARIABLE (i->data)->name); i = i->next; while (i) { fprintf (fp, ",%s", GFS_VARIABLE (i->data)->name); i = i->next; } } if (!output->binary) fputs (" binary = 0", fp); if (!output->solid) fputs (" solid = 0", fp); switch (output->format) { case GFS_TEXT: fputs (" format = text", fp); break; case GFS_VTK: fputs (" format = VTK", fp); break; case GFS_TECPLOT: fputs (" format = Tecplot", fp); break; default: break; } if (output->precision != default_precision) fprintf (fp, " precision = %s", output->precision); fputs (" }", fp); } static void output_simulation_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_output_simulation_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsOutputSimulation * output = GFS_OUTPUT_SIMULATION (*o); if (fp->type == '{') { GtsFileVariable var[] = { {GTS_INT, "depth", TRUE}, {GTS_STRING, "variables", TRUE}, {GTS_INT, "binary", TRUE}, {GTS_INT, "solid", TRUE}, {GTS_STRING, "format", TRUE}, {GTS_STRING, "precision", TRUE}, {GTS_NONE} }; gchar * variables = NULL, * format = NULL, * precision = NULL; var[0].data = &output->max_depth; var[1].data = &variables; var[2].data = &output->binary; var[3].data = &output->solid; var[4].data = &format; var[5].data = &precision; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) { g_free (variables); g_free (format); g_free (precision); return; } if (variables != NULL) { gchar * error = NULL; GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (output)); GSList * vars = gfs_variables_from_list (domain->variables, variables, &error); if (vars == NULL) { gts_file_variable_error (fp, var, "variables", "unknown variable `%s'", error); g_free (variables); return; } g_slist_free (output->var); output->var = vars; g_free (variables); } if (format != NULL) { if (!strcmp (format, "gfs")) output->format = GFS; else if (!strcmp (format, "text")) output->format = GFS_TEXT; else if (!strcmp (format, "VTK")) output->format = GFS_VTK; else if (!strcmp (format, "Tecplot")) output->format = GFS_TECPLOT; else { gts_file_variable_error (fp, var, "format", "unknown format `%s'", format); g_free (format); return; } g_free (format); } if (precision != NULL) { if (output->precision != default_precision) g_free (output->precision); output->precision = precision; } } } static void gfs_output_simulation_class_init (GfsEventClass * klass) { klass->event = output_simulation_event; GTS_OBJECT_CLASS (klass)->destroy = output_simulation_destroy; GTS_OBJECT_CLASS (klass)->read = output_simulation_read; GTS_OBJECT_CLASS (klass)->write = output_simulation_write; } static void gfs_output_simulation_init (GfsOutputSimulation * object) { object->max_depth = -1; object->var = NULL; object->binary = 1; object->solid = 1; object->format = GFS; object->precision = default_precision; } GfsOutputClass * gfs_output_simulation_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_simulation_info = { "GfsOutputSimulation", sizeof (GfsOutputSimulation), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_simulation_class_init, (GtsObjectInitFunc) gfs_output_simulation_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_simulation_info); } return klass; } /** \endobject{GfsOutputSimulation} */ /** * * \beginobject{GfsOutputBoundaries} */ static gboolean output_boundaries_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_output_class())->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); FILE * fp = GFS_OUTPUT (event)->file->fp; gfs_draw_refined_boundaries (domain, fp); gfs_draw_solid_boundaries (domain, fp); gfs_draw_boundary_conditions (domain, fp); return TRUE; } return FALSE; } static void gfs_output_boundaries_class_init (GfsEventClass * klass) { klass->event = output_boundaries_event; } GfsOutputClass * gfs_output_boundaries_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_boundaries_info = { "GfsOutputBoundaries", sizeof (GfsOutput), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_boundaries_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_boundaries_info); } return klass; } /** \endobject{GfsOutputBoundaries} */ /** * Generic output of scalar fields. * \beginobject{GfsOutputScalar} */ static void gfs_output_scalar_destroy (GtsObject * o) { GfsOutputScalar * output = GFS_OUTPUT_SCALAR (o); gts_object_destroy (GTS_OBJECT (output->f)); g_free (output->name); if (output->condition) gts_object_destroy (GTS_OBJECT (output->condition)); if (output->w) gts_object_destroy (GTS_OBJECT (output->w)); if (output->format) g_free (output->format); (* GTS_OBJECT_CLASS (gfs_output_scalar_class ())->parent_class->destroy) (o); } static void gfs_output_scalar_read (GtsObject ** o, GtsFile * fp) { GfsOutputScalar * output; if (GTS_OBJECT_CLASS (gfs_output_scalar_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_output_scalar_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; output = GFS_OUTPUT_SCALAR (*o); output->autoscale = TRUE; if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } fp->scope_max++; gts_file_next_token (fp); while (fp->type != GTS_ERROR && fp->type != '}') { if (fp->type == '\n') { gts_file_next_token (fp); continue; } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a keyword"); return; } else if (!strcmp (fp->token->str, "v")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (output->f, gfs_object_simulation (*o), fp); output->name = gfs_function_description (output->f, TRUE); } else if (!strcmp (fp->token->str, "min")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); output->min = gfs_read_constant (fp, gfs_object_simulation (*o)); if (fp->type == GTS_ERROR) return; if (output->min > output->max) { gts_file_error (fp, "min `%g' must be smaller than or equal to max `%g'", output->min, output->max); return; } output->autoscale = FALSE; } else if (!strcmp (fp->token->str, "max")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); output->max = gfs_read_constant (fp, gfs_object_simulation (*o)); if (fp->type == GTS_ERROR) return; if (output->max < output->min) { gts_file_error (fp, "max `%g' must be larger than or equal to min `%g'", output->max, output->min); return; } output->autoscale = FALSE; } else if (!strcmp (fp->token->str, "maxlevel")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (maxlevel)"); return; } output->maxlevel = atoi (fp->token->str); gts_file_next_token (fp); } else if (!strcmp (fp->token->str, "condition")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); if (!output->condition) output->condition = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (output->condition, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "w")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); if (!output->w) output->w = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (output->w, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "format")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string"); return; } if (fp->token->str[0] == '"') { output->format = g_strdup (&(fp->token->str[1])); output->format[strlen(output->format) - 1] = '\0'; } else output->format = g_strdup (fp->token->str); gts_file_next_token (fp); } else { gts_file_error (fp, "unknown keyword `%s'", fp->token->str); return; } } if (fp->type == GTS_ERROR) return; if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); } static void gfs_output_scalar_write (GtsObject * o, FILE * fp) { GfsOutputScalar * output = GFS_OUTPUT_SCALAR (o); if (GTS_OBJECT_CLASS (gfs_output_scalar_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_output_scalar_class ())->parent_class->write) (o, fp); fputs (" { v = ", fp); gfs_function_write (output->f, fp); if (output->maxlevel >= 0) fprintf (fp, " maxlevel = %d", output->maxlevel); if (output->condition) { fputs (" condition = ", fp); gfs_function_write (output->condition, fp); } if (output->w) { fputs (" w = ", fp); gfs_function_write (output->w, fp); } if (output->format) fprintf (fp, " format = %s", output->format); if (!output->autoscale) fprintf (fp, " min = %g max = %g }", output->min, output->max); else fputs (" }", fp); } static void update_v (FttCell * cell, GfsOutputScalar * output) { GFS_VALUE (cell, output->v) = gfs_function_value (output->f, cell); } static gboolean cell_condition (FttCell * cell, gpointer condition) { return gfs_function_value (condition, cell); } static void output_scalar_traverse (GfsOutputScalar * output, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (output->condition) gfs_domain_cell_traverse_condition (GFS_DOMAIN (gfs_object_simulation (output)), order, flags, max_depth, func, data, cell_condition, output->condition); else gfs_domain_cell_traverse (GFS_DOMAIN (gfs_object_simulation (output)), order, flags, max_depth, func, data); } static gboolean gfs_output_scalar_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_scalar_class ())->parent_class)->event) (event, sim)) { GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event); GfsDomain * domain = GFS_DOMAIN (sim); if (!(output->v = gfs_function_get_variable (output->f)) || gfs_variable_is_dimensional (output->v)) { output->v = gfs_temporary_variable (domain); gfs_catch_floating_point_exceptions (); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) update_v, output); gfs_restore_fpe_for_function (output->f); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, output->v); } if (output->maxlevel >= 0) { gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) output->v->fine_coarse, output->v); gfs_domain_bc (domain, FTT_TRAVERSE_NON_LEAFS, -1, output->v); } if (output->autoscale) { GtsRange stats = gfs_domain_stats_variable (domain, output->v, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, output->condition ? cell_condition : NULL, output->condition); output->min = stats.min; output->max = stats.max; } return TRUE; } return FALSE; } static void gfs_output_scalar_post_event (GfsEvent * event, GfsSimulation * sim) { GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event); if (output->v != gfs_function_get_variable (output->f)) { gts_object_destroy (GTS_OBJECT (output->v)); output->v = NULL; } (* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_scalar_class ())->parent_class)->post_event) (event, sim); } static void gfs_output_scalar_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_scalar_event; GFS_EVENT_CLASS (klass)->post_event = gfs_output_scalar_post_event; GTS_OBJECT_CLASS (klass)->read = gfs_output_scalar_read; GTS_OBJECT_CLASS (klass)->write = gfs_output_scalar_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_output_scalar_destroy; } static void gfs_output_scalar_init (GfsOutputScalar * object) { object->f = gfs_function_new (gfs_function_class (), 0.); object->min = -G_MAXDOUBLE; object->max = G_MAXDOUBLE; object->autoscale = TRUE; object->maxlevel = -1; object->condition = NULL; } GfsOutputClass * gfs_output_scalar_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_scalar_info = { "GfsOutputScalar", sizeof (GfsOutputScalar), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_scalar_class_init, (GtsObjectInitFunc) gfs_output_scalar_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_scalar_info); } return klass; } /** \endobject{GfsOutputScalar} */ /** * Computing the norms of a scalar field. * \beginobject{GfsOutputScalarNorm} */ static gboolean gfs_output_scalar_norm_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_scalar_norm_class ())->parent_class)->event) (event, sim)) { GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event); GfsNorm norm = gfs_domain_norm_variable (GFS_DOMAIN (sim), output->v, NULL, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, output->condition ? cell_condition : NULL, output->condition); fprintf (GFS_OUTPUT (event)->file->fp, "%s time: %g first: % 10.3e second: % 10.3e infty: % 10.3e\n", output->name, sim->time.t, norm.first, norm.second, norm.infty); return TRUE; } return FALSE; } static void gfs_output_scalar_norm_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_scalar_norm_event; } GfsOutputClass * gfs_output_scalar_norm_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_scalar_norm_info = { "GfsOutputScalarNorm", sizeof (GfsOutputScalar), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_scalar_norm_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()), &gfs_output_scalar_norm_info); } return klass; } /** \endobject{GfsOutputScalarNorm} */ /** * Computing simple statistics for a scalar field. * \beginobject{GfsOutputScalarStats} */ static gboolean gfs_output_scalar_stats_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_scalar_stats_class ())->parent_class)->event) (event, sim)) { GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event); GtsRange stats = gfs_domain_stats_variable (GFS_DOMAIN (sim), output->v, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, output->condition ? cell_condition : NULL, output->condition); gchar * format; if (output->format) { gchar * f = output->format; format = g_strdup_printf ("%%s time: %s min: %s avg: %s | %s max: %s\n", f, f, f, f, f); } else format = g_strdup ("%s time: %g min: %10.3e avg: %10.3e | %10.3e max: %10.3e\n"); fprintf (GFS_OUTPUT (event)->file->fp, format, output->name, sim->time.t, stats.min, stats.mean, stats.stddev, stats.max); g_free (format); return TRUE; } return FALSE; } static void gfs_output_scalar_stats_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_scalar_stats_event; } GfsOutputClass * gfs_output_scalar_stats_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_scalar_stats_info = { "GfsOutputScalarStats", sizeof (GfsOutputScalar), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_scalar_stats_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()), &gfs_output_scalar_stats_info); } return klass; } /** \endobject{GfsOutputScalarStats} */ /** * Computing the sum of a scalar field. * \beginobject{GfsOutputScalarSum} */ typedef struct { GfsVariable * v; GfsFunction * w; gdouble sum; } SumData; static void add (FttCell * cell, SumData * s) { gdouble vol = s->w ? gfs_function_value (s->w, cell) : gfs_cell_volume (cell, s->v->domain); s->sum += vol*GFS_VALUE (cell, s->v); } static gboolean gfs_output_scalar_sum_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_scalar_sum_class ())->parent_class)->event) (event, sim)) { GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event); SumData s = { output->v, output->w, 0. }; output_scalar_traverse (output, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, (FttCellTraverseFunc) add, &s); gfs_all_reduce (GFS_DOMAIN (sim), s.sum, MPI_DOUBLE, MPI_SUM); if (!output->w) s.sum *= pow (sim->physical_params.L, FTT_DIMENSION); gchar * format; if (output->format) { gchar * f = output->format; format = g_strdup_printf ("%%s time: %s sum: %s\n", f, f); } else format = g_strdup ("%s time: %g sum: % 15.6e\n"); fprintf (GFS_OUTPUT (event)->file->fp, format, output->name, sim->time.t, s.sum); g_free (format); return TRUE; } return FALSE; } static void gfs_output_scalar_sum_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_scalar_sum_event; } GfsOutputClass * gfs_output_scalar_sum_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_scalar_sum_info = { "GfsOutputScalarSum", sizeof (GfsOutputScalar), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_scalar_sum_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()), &gfs_output_scalar_sum_info); } return klass; } /** \endobject{GfsOutputScalarSum} */ /** * * \beginobject{GfsOutputScalarMaxima} */ static void gfs_output_scalar_maxima_destroy (GtsObject * o) { guint i; for (i = 0; i < 4; i++) g_free (GFS_OUTPUT_SCALAR_MAXIMA (o)->m[i]); (* GTS_OBJECT_CLASS (gfs_output_scalar_maxima_class ())->parent_class->destroy) (o); } static void gfs_output_scalar_maxima_read (GtsObject ** o, GtsFile * fp) { GfsOutputScalarMaxima * m; guint i; (* GTS_OBJECT_CLASS (gfs_output_scalar_maxima_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (N)"); return; } m = GFS_OUTPUT_SCALAR_MAXIMA (*o); m->N = atoi (fp->token->str); gts_file_next_token (fp); for (i = 0; i < 4; i++) m->m[i] = g_malloc (sizeof (gdouble)*m->N); } static void gfs_output_scalar_maxima_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_output_scalar_maxima_class ())->parent_class->write) (o, fp); fprintf (fp, " %d", GFS_OUTPUT_SCALAR_MAXIMA (o)->N); } static void maxima (FttCell * cell, GfsOutputScalarMaxima * m) { guint i; for (i = 0; i < m->N; i++) { gdouble v = GFS_VALUE (cell, GFS_OUTPUT_SCALAR (m)->v); if (v > m->m[3][i]) { FttVector p; gfs_cell_cm (cell, &p); gfs_simulation_map_inverse (gfs_object_simulation (m), &p); m->m[0][i] = p.x; m->m[1][i] = p.y; m->m[2][i] = p.z; m->m[3][i] = v; return; } } } static gboolean gfs_output_scalar_maxima_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_scalar_maxima_class ())->parent_class)->event) (event, sim)) { GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event); GfsOutputScalarMaxima * m = GFS_OUTPUT_SCALAR_MAXIMA (event); guint i; for (i = 0; i < m->N; i++) m->m[3][i] = -G_MAXDOUBLE; output_scalar_traverse (output, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, (FttCellTraverseFunc) maxima, m); for (i = 0; i < m->N; i++) fprintf (GFS_OUTPUT (event)->file->fp, "%s time: %g #: %d x: %g y: %g z: %g value: %g\n", output->name, sim->time.t, i, m->m[0][i], m->m[1][i], m->m[2][i], m->m[3][i]); return TRUE; } return FALSE; } static void gfs_output_scalar_maxima_class_init (GfsOutputClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = gfs_output_scalar_maxima_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_output_scalar_maxima_read; GTS_OBJECT_CLASS (klass)->write = gfs_output_scalar_maxima_write; GFS_EVENT_CLASS (klass)->event = gfs_output_scalar_maxima_event; } GfsOutputClass * gfs_output_scalar_maxima_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_scalar_maxima_info = { "GfsOutputScalarMaxima", sizeof (GfsOutputScalarMaxima), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_scalar_maxima_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()), &gfs_output_scalar_maxima_info); } return klass; } /** \endobject{GfsOutputScalarMaxima} */ /** * Computing histograms. * \beginobject{GfsOutputScalarHistogram} */ static void gfs_output_scalar_histogram_destroy (GtsObject * o) { GfsOutputScalarHistogram * output = GFS_OUTPUT_SCALAR_HISTOGRAM (o); g_free (output->x); g_free (output->w); if (output->wf) gts_object_destroy (GTS_OBJECT (output->wf)); if (output->yf) { gts_object_destroy (GTS_OBJECT (output->yf)); g_free (output->y); } (* GTS_OBJECT_CLASS (gfs_output_scalar_histogram_class ())->parent_class->destroy) (o); } static void gfs_output_scalar_histogram_read (GtsObject ** o, GtsFile * fp) { GfsOutputScalarHistogram * output; (* GTS_OBJECT_CLASS (gfs_output_scalar_histogram_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; output = GFS_OUTPUT_SCALAR_HISTOGRAM (*o); if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } fp->scope_max++; gts_file_next_token (fp); while (fp->type != GTS_ERROR && fp->type != '}') { if (fp->type == '\n') { gts_file_next_token (fp); continue; } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a keyword"); return; } else if (!strcmp (fp->token->str, "n")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting a number (n)"); return; } output->n = atoi (fp->token->str); if (output->n <= 0) { gts_file_error (fp, "n `%d' must be strictly positive", output->n); return; } gts_file_next_token (fp); } else if (!strcmp (fp->token->str, "w")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); output->wf = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (output->wf, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "y")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); output->yf = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (output->yf, gfs_object_simulation (*o), fp); } else { gts_file_error (fp, "unknown keyword `%s'", fp->token->str); return; } } if (fp->type == GTS_ERROR) return; if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); output->x = g_malloc0 (output->n*sizeof (gdouble)); output->w = g_malloc0 (output->n*sizeof (gdouble)); if (output->yf) output->y = g_malloc0 (output->n*sizeof (gdouble)); } static void gfs_output_scalar_histogram_write (GtsObject * o, FILE * fp) { GfsOutputScalarHistogram * output = GFS_OUTPUT_SCALAR_HISTOGRAM (o); (* GTS_OBJECT_CLASS (gfs_output_scalar_histogram_class ())->parent_class->write) (o, fp); fprintf (fp, " { n = %d", output->n); if (output->wf) { fputs (" w = ", fp); gfs_function_write (output->wf, fp); } if (output->yf) { fputs (" y = ", fp); gfs_function_write (output->yf, fp); } fputs (" }", fp); } static void update_histogram (FttCell * cell, GfsOutputScalar * h) { GfsOutputScalarHistogram * hi = GFS_OUTPUT_SCALAR_HISTOGRAM (h); gdouble v = GFS_VALUE (cell, h->v); gint i = (v - h->min)/(h->max - h->min)*hi->n; if (i >= 0 && i < hi->n) { gdouble w = hi->dt; if (hi->wf) w *= gfs_function_value (hi->wf, cell); else w *= gfs_cell_volume (cell, h->v->domain); hi->W += w; hi->w[i] += w; hi->x[i] += v*w; if (hi->yf) hi->y[i] += w*gfs_function_value (hi->yf, cell); } } static gboolean gfs_output_scalar_histogram_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_scalar_histogram_class ())->parent_class)->event) (event, sim)) { GfsOutputScalarHistogram * h = GFS_OUTPUT_SCALAR_HISTOGRAM (event); if (gfs_event_is_repetitive (event)) h->dt = h->last >= 0. ? sim->time.t - h->last : 0.; else h->dt = 1.; if (h->dt > 0.) { GfsOutput * output = GFS_OUTPUT (event); guint i; gfs_catch_floating_point_exceptions (); output_scalar_traverse (GFS_OUTPUT_SCALAR (output), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, GFS_OUTPUT_SCALAR (output)->maxlevel, (FttCellTraverseFunc) update_histogram, output); if (gfs_restore_floating_point_exceptions ()) { gchar * s = g_strdup ("\n"); if (h->wf) s = g_strconcat (s, gfs_function_description (h->wf, FALSE), NULL); if (h->yf) s = g_strconcat (s, "\n", gfs_function_description (h->yf, FALSE), NULL); /* fixme: memory leaks */ g_message ("floating-point exception in user-defined function(s):%s", s); exit (1); } if (output->file && !output->dynamic) output->file->fp = freopen (output->format, "w", output->file->fp); for (i = 0; i < h->n; i++) if (h->w[i] > 0.) { fprintf (output->file->fp, "%g %g", h->x[i]/h->w[i], h->w[i]/h->W); if (h->yf) fprintf (output->file->fp, " %g", h->y[i]/h->w[i]); fputc ('\n', output->file->fp); } } h->last = sim->time.t; return TRUE; } return FALSE; } static void gfs_output_scalar_histogram_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_scalar_histogram_event; GTS_OBJECT_CLASS (klass)->read = gfs_output_scalar_histogram_read; GTS_OBJECT_CLASS (klass)->write = gfs_output_scalar_histogram_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_output_scalar_histogram_destroy; } static void gfs_output_scalar_histogram_init (GfsOutputScalarHistogram * object) { GFS_OUTPUT_SCALAR (object)->min = -1.; GFS_OUTPUT_SCALAR (object)->max = 1.; GFS_OUTPUT_SCALAR (object)->autoscale = FALSE; object->n = 100; object->W = 0.; object->last = -1.; } GfsOutputClass * gfs_output_scalar_histogram_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_scalar_histogram_info = { "GfsOutputScalarHistogram", sizeof (GfsOutputScalarHistogram), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_scalar_histogram_class_init, (GtsObjectInitFunc) gfs_output_scalar_histogram_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()), &gfs_output_scalar_histogram_info); } return klass; } /** \endobject{GfsOutputScalarHistogram} */ /** * Computing sums for each droplet. * \beginobject{GfsOutputDropletSums} */ static void gfs_output_droplet_sums_destroy (GtsObject * object) { GfsOutputDropletSums * d = GFS_OUTPUT_DROPLET_SUMS (object); gts_object_destroy (GTS_OBJECT (d->c)); if (d->tag) gts_object_destroy (GTS_OBJECT (d->tag)); (* GTS_OBJECT_CLASS (gfs_output_droplet_sums_class ())->parent_class->destroy) (object); } static void gfs_output_droplet_sums_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_output_droplet_sums_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsOutputDropletSums * d = GFS_OUTPUT_DROPLET_SUMS (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); gfs_function_read (d->c, domain, fp); if (fp->type == GTS_ERROR) return; if (fp->type == GTS_STRING) { if (!(d->tag = gfs_domain_get_or_add_variable (domain, fp->token->str, "Droplet index"))) { gts_file_error (fp, "`%s' is a reserved variable name", fp->token->str); return; } gts_file_next_token (fp); } } static void gfs_output_droplet_sums_write (GtsObject * o, FILE * fp) { GfsOutputDropletSums * d = GFS_OUTPUT_DROPLET_SUMS (o); (* GTS_OBJECT_CLASS (gfs_output_droplet_sums_class ())->parent_class->write) (o, fp); gfs_function_write (d->c, fp); if (d->tag) fprintf (fp, " %s", d->tag->name); } typedef struct { double v, f; } VolumePair; typedef struct { GfsVariable * s, * c, * tag; VolumePair * v; guint n; GfsFunction * fc; } DropSumsPar; static void droplet_sums (FttCell * cell, DropSumsPar * p) { guint i = GFS_VALUE (cell, p->tag); if (i > 0) { p->v[i - 1].v += GFS_VALUE (cell, p->c)*ftt_cell_volume (cell); p->v[i - 1].f += GFS_VALUE (cell, p->s); } } static void compute_c (FttCell * cell, DropSumsPar * p) { GFS_VALUE (cell, p->c) = gfs_function_value (p->fc, cell); } static int volume_sort (const void * p1, const void * p2) { VolumePair * a = (VolumePair *) p1; VolumePair * b = (VolumePair *) p2; return a->v < b->v ? 1 : -1; } static gboolean gfs_output_droplet_sums_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_droplet_sums_class ())->parent_class)->event) (event, sim)) { GfsOutputDropletSums * d = GFS_OUTPUT_DROPLET_SUMS (event); GfsDomain * domain = GFS_DOMAIN (sim); DropSumsPar p; p.s = GFS_OUTPUT_SCALAR (event)->v; p.c = gfs_function_get_variable (d->c); if (!p.c) { p.c = gfs_temporary_variable (domain); p.fc = d->c; gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) compute_c, &p); gfs_restore_fpe_for_function (p.fc); } p.tag = d->tag ? d->tag : gfs_temporary_variable (domain); p.n = gfs_domain_tag_droplets (domain, p.c, p.tag); if (p.n > 0) { p.v = g_malloc0 (p.n*sizeof (VolumePair)); output_scalar_traverse (GFS_OUTPUT_SCALAR (event), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) droplet_sums, &p); #ifdef HAVE_MPI if (domain->pid >= 0) { VolumePair * gv = g_malloc0 (p.n*sizeof (VolumePair)); MPI_Allreduce (p.v, gv, p.n*2, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); g_free (p.v); p.v = gv; } #endif /* HAVE_MPI */ qsort (p.v, p.n, sizeof (VolumePair), volume_sort); gchar * f = GFS_OUTPUT_SCALAR (event)->format; gchar * format; if (f) format = g_strdup_printf ("%s %%d %s\n", f, f); else format = g_strdup ("%g %d %.12g\n"); guint i; for (i = 0; i < p.n; i++) fprintf (GFS_OUTPUT (event)->file->fp, format, sim->time.t, i + 1, p.v[i].f); g_free (p.v); g_free (format); } if (p.tag != d->tag) gts_object_destroy (GTS_OBJECT (p.tag)); if (!gfs_function_get_variable (d->c)) gts_object_destroy (GTS_OBJECT (p.c)); return TRUE; } return FALSE; } static void gfs_output_droplet_sums_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_droplet_sums_event; GTS_OBJECT_CLASS (klass)->read = gfs_output_droplet_sums_read; GTS_OBJECT_CLASS (klass)->write = gfs_output_droplet_sums_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_output_droplet_sums_destroy; } static void gfs_output_droplet_sums_init (GfsOutputDropletSums * d) { d->c = gfs_function_new (gfs_function_class (), 0.); } GfsOutputClass * gfs_output_droplet_sums_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_droplet_sums_info = { "GfsOutputDropletSums", sizeof (GfsOutputDropletSums), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_droplet_sums_class_init, (GtsObjectInitFunc) gfs_output_droplet_sums_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()), &gfs_output_droplet_sums_info); } return klass; } /** \endobject{GfsOutputDropletSums} */ /** * Computing differences to a reference solution. * \beginobject{GfsOutputErrorNorm} */ static void output_error_norm_destroy (GtsObject * o) { gts_object_destroy (GTS_OBJECT (GFS_OUTPUT_ERROR_NORM (o)->s)); gts_object_destroy (GTS_OBJECT (GFS_OUTPUT_ERROR_NORM (o)->w)); (* GTS_OBJECT_CLASS (gfs_output_error_norm_class ())->parent_class->destroy) (o); } static void output_error_norm_read (GtsObject ** o, GtsFile * fp) { GfsOutputErrorNorm * n; if (GTS_OBJECT_CLASS (gfs_output_error_norm_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_output_error_norm_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; n = GFS_OUTPUT_ERROR_NORM (*o); if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } fp->scope_max++; gts_file_next_token (fp); while (fp->type != GTS_ERROR && fp->type != '}') { if (fp->type == '\n') { gts_file_next_token (fp); continue; } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a parameter"); return; } else if (!strcmp (fp->token->str, "unbiased")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting `='"); return; } gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer"); return; } n->unbiased = atoi (fp->token->str); gts_file_next_token (fp); } else if (!strcmp (fp->token->str, "relative")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting `='"); return; } gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer"); return; } n->relative = atoi (fp->token->str); gts_file_next_token (fp); } else if (!strcmp (fp->token->str, "s")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting `='"); return; } gts_file_next_token (fp); gfs_function_read (n->s, gfs_object_simulation (*o), fp); if (fp->type == GTS_ERROR) return; } else if (!strcmp (fp->token->str, "w")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting `='"); return; } gts_file_next_token (fp); gfs_function_read (n->w, gfs_object_simulation (*o), fp); if (fp->type == GTS_ERROR) return; } else if (!strcmp (fp->token->str, "v")) { GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting `='"); return; } gts_file_next_token (fp); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable name"); return; } if (!(n->v = gfs_domain_get_or_add_variable (domain, fp->token->str, "Error field"))) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } gts_file_next_token (fp); } else { gts_file_error (fp, "unknown identifier `%s'", fp->token->str); return; } } if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); } static void output_error_norm_write (GtsObject * o, FILE * fp) { GfsOutputErrorNorm * n = GFS_OUTPUT_ERROR_NORM (o); if (GTS_OBJECT_CLASS (gfs_output_error_norm_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_output_error_norm_class ())->parent_class->write) (o, fp); fputs (" { s = ", fp); gfs_function_write (n->s, fp); fputs (" w = ", fp); gfs_function_write (n->w, fp); fprintf (fp, " unbiased = %d relative = %d", n->unbiased, n->relative); if (n->v) fprintf (fp, " v = %s }", n->v->name); else fputs (" }", fp); } static void reference_solution (FttCell * cell, GfsOutputScalar * o) { GFS_VALUE (cell, GFS_OUTPUT_ERROR_NORM (o)->v) = gfs_function_value (GFS_OUTPUT_ERROR_NORM (o)->s, cell); } static void substract (FttCell * cell, GfsOutputScalar * o) { GFS_VALUE (cell, GFS_OUTPUT_ERROR_NORM (o)->v) = GFS_VALUE (cell, o->v) - GFS_VALUE (cell, GFS_OUTPUT_ERROR_NORM (o)->v); } static void compute_error (FttCell * cell, GfsOutputScalar * o) { GFS_VALUE (cell, GFS_OUTPUT_ERROR_NORM (o)->v) = GFS_VALUE (cell, o->v) - gfs_function_value (GFS_OUTPUT_ERROR_NORM (o)->s, cell); } static void remove_bias (FttCell * cell, gpointer * data) { GfsVariable * v = data[0]; GfsNorm * norm = data[1]; GFS_VALUE (cell, v) -= norm->bias; } static gboolean gfs_output_error_norm_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_error_norm_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event); GfsOutputErrorNorm * enorm = GFS_OUTPUT_ERROR_NORM (event); GfsVariable * v = enorm->v; GfsNorm norm, snorm = { 0., 0., 0., 0. }; if (v == NULL) enorm->v = gfs_temporary_variable (domain); if (enorm->relative) { gfs_catch_floating_point_exceptions (); output_scalar_traverse (output, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, (FttCellTraverseFunc) reference_solution, output); gfs_restore_fpe_for_function (enorm->s); snorm = gfs_domain_norm_variable (domain, enorm->v, enorm->w, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, output->condition ? cell_condition : NULL, output->condition); output_scalar_traverse (output, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, (FttCellTraverseFunc) substract, output); } else { gfs_catch_floating_point_exceptions (); output_scalar_traverse (output, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, (FttCellTraverseFunc) compute_error, output); gfs_restore_fpe_for_function (enorm->s); } norm = gfs_domain_norm_variable (domain, enorm->v, enorm->w, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, output->condition ? cell_condition : NULL, output->condition); if (GFS_OUTPUT_ERROR_NORM (event)->unbiased) { gpointer data[2]; data[0] = enorm->v; data[1] = &norm; output_scalar_traverse (output, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, (FttCellTraverseFunc) remove_bias, data); norm = gfs_domain_norm_variable (domain, enorm->v, enorm->w, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, output->condition ? cell_condition : NULL, output->condition); } if (v == NULL) { gts_object_destroy (GTS_OBJECT (enorm->v)); enorm->v = NULL; } if (enorm->relative) { if (snorm.first > 0.) norm.first /= snorm.first; if (snorm.second > 0.) norm.second /= snorm.second; if (snorm.infty > 0.) norm.infty /= snorm.infty; } gchar * format; if (output->format) { gchar * f = output->format; format = g_strdup_printf ("%%s time: %s first: %s second: %s infty: %s bias: %s\n", f, f, f, f, f); } else format = g_strdup ("%s time: %g first: %10.3e second: %10.3e infty: %10.3e bias: %10.3e\n"); fprintf (GFS_OUTPUT (event)->file->fp, format, output->name, sim->time.t, norm.first, norm.second, norm.infty, norm.bias); g_free (format); return TRUE; } return FALSE; } static void gfs_output_error_norm_class_init (GfsOutputClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = output_error_norm_destroy; GTS_OBJECT_CLASS (klass)->read = output_error_norm_read; GTS_OBJECT_CLASS (klass)->write = output_error_norm_write; GFS_EVENT_CLASS (klass)->event = gfs_output_error_norm_event; } static void output_error_norm_init (GfsOutputErrorNorm * e) { e->s = gfs_function_new (gfs_function_class (), 0.); e->w = gfs_function_new (gfs_function_class (), 1.); } GfsOutputClass * gfs_output_error_norm_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_error_norm_info = { "GfsOutputErrorNorm", sizeof (GfsOutputErrorNorm), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_error_norm_class_init, (GtsObjectInitFunc) output_error_norm_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()), &gfs_output_error_norm_info); } return klass; } /** \endobject{GfsOutputErrorNorm} */ /** * * \beginobject{GfsOutputCorrelation} */ static void compute_correlation (FttCell * cell, gpointer * data) { GfsOutputScalar * o = data[0]; gdouble * bias = data[1]; gdouble * sum = data[2]; gdouble * sumref = data[3]; gdouble v, ref, w; ref = gfs_function_value (GFS_OUTPUT_ERROR_NORM (o)->s, cell); v = GFS_VALUE (cell, o->v) - *bias; w = gfs_cell_volume (cell, o->v->domain); *sumref += ref*ref*w; *sum += v*ref*w; } static gboolean gfs_output_correlation_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_error_norm_class ())->parent_class)->event) (event, sim)) { GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event); GfsOutputErrorNorm * enorm = GFS_OUTPUT_ERROR_NORM (event); GfsVariable * v = enorm->v; gdouble bias = 0., sum = 0., sumref = 0.; gpointer data[4]; if (GFS_DOMAIN (sim)->pid != -1) g_assert_not_implemented (); if (v == NULL) enorm->v = gfs_temporary_variable (GFS_DOMAIN (sim)); if (enorm->unbiased) { output_scalar_traverse (output, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, (FttCellTraverseFunc) compute_error, output); bias = gfs_domain_norm_variable (GFS_DOMAIN (sim), enorm->v, NULL, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, output->condition ? cell_condition : NULL, output->condition).bias; } data[0] = output; data[1] = &bias; data[2] = ∑ data[3] = &sumref; gfs_catch_floating_point_exceptions (); output_scalar_traverse (output, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, (FttCellTraverseFunc) compute_correlation, data); gfs_restore_fpe_for_function (enorm->s); if (v == NULL) { gts_object_destroy (GTS_OBJECT (enorm->v)); enorm->v = NULL; } gchar * format; if (output->format) { gchar * f = output->format; format = g_strdup_printf ("%%s time: %s %s\n", f, f); } else format = g_strdup ("%s time: %g %10.3e\n"); fprintf (GFS_OUTPUT (event)->file->fp, format, output->name, sim->time.t, sumref > 0. ? sum/sumref : 0.); g_free (format); return TRUE; } return FALSE; } static void gfs_output_correlation_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_correlation_event; } GfsOutputClass * gfs_output_correlation_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_correlation_info = { "GfsOutputCorrelation", sizeof (GfsOutputErrorNorm), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_correlation_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_error_norm_class ()), &gfs_output_correlation_info); } return klass; } /** \endobject{GfsOutputCorrelation} */ /** * * \beginobject{GfsOutputSquares} */ static gboolean gfs_output_squares_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_squares_class ())->parent_class)->event) (event, sim)) { GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event); gfs_write_squares (GFS_DOMAIN (sim), output->v, output->min, output->max, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, NULL, GFS_OUTPUT (event)->file->fp); return TRUE; } return FALSE; } static void gfs_output_squares_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_squares_event; } GfsOutputClass * gfs_output_squares_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_squares_info = { "GfsOutputSquares", sizeof (GfsOutputScalar), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_squares_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()), &gfs_output_squares_info); } return klass; } /** \endobject{GfsOutputSquares} */ /** * * \beginobject{GfsOutputStreamline} */ static void gfs_output_streamline_read (GtsObject ** o, GtsFile * fp) { GfsOutputStreamline * l = GFS_OUTPUT_STREAMLINE (*o); if (GTS_OBJECT_CLASS (gfs_output_streamline_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_output_streamline_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (p.x)"); return; } l->p.x = atof (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (p.y)"); return; } l->p.y = atof (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (p.z)"); return; } l->p.z = atof (fp->token->str); gts_file_next_token (fp); } static void gfs_output_streamline_write (GtsObject * o, FILE * fp) { GfsOutputStreamline * l = GFS_OUTPUT_STREAMLINE (o); if (GTS_OBJECT_CLASS (gfs_output_streamline_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_output_streamline_class ())->parent_class->write) (o, fp); fprintf (fp, " %g %g %g", l->p.x, l->p.y, l->p.z); } static gboolean gfs_output_streamline_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_streamline_class ())->parent_class)->event) (event,sim)) { FttVector p = GFS_OUTPUT_STREAMLINE (event)->p; gfs_simulation_map (sim, &p); GList * stream = gfs_streamline_new (GFS_DOMAIN (sim), gfs_domain_velocity (GFS_DOMAIN (sim)), p, GFS_OUTPUT_SCALAR (event)->v, 0., 0., TRUE, NULL, NULL); /* fixme: mapping is not taken into account */ gfs_streamline_write (stream, GFS_OUTPUT (event)->file->fp); gfs_streamline_destroy (stream); return TRUE; } return FALSE; } static void gfs_output_streamline_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_streamline_event; GTS_OBJECT_CLASS (klass)->read = gfs_output_streamline_read; GTS_OBJECT_CLASS (klass)->write = gfs_output_streamline_write; } GfsOutputClass * gfs_output_streamline_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_streamline_info = { "GfsOutputStreamline", sizeof (GfsOutputStreamline), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_streamline_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()), &gfs_output_streamline_info); } return klass; } /** \endobject{GfsOutputStreamline} */ /** * Writing 2D images. * \beginobject{GfsOutputPPM} */ static void gfs_output_ppm_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_output_ppm_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_output_ppm_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; #if (!FTT_2D) if (!GFS_IS_OCEAN (gfs_object_simulation (*o))) { gts_file_error (fp, "In more than two dimensions PPM output is possible\n" "only for GfsOcean simulations"); return; } #endif /* 3D */ } static gboolean gfs_output_ppm_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_ppm_class ())->parent_class)->event) (event, sim)) { GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event); #if FTT_2D GfsDomain * domain = GFS_DOMAIN (sim); #else /* 3D */ GfsDomain * domain = GFS_IS_OCEAN (sim) ? GFS_OCEAN (sim)->toplayer : GFS_DOMAIN (sim); #endif /* 3D */ gfs_write_ppm (domain, output->condition, output->v, output->min, output->max, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, GFS_OUTPUT (event)->file->fp, GFS_OUTPUT (event)->parallel); return TRUE; } return FALSE; } static void gfs_output_ppm_class_init (GfsOutputClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_output_ppm_read; GFS_EVENT_CLASS (klass)->event = gfs_output_ppm_event; } GfsOutputClass * gfs_output_ppm_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_ppm_info = { "GfsOutputPPM", sizeof (GfsOutputScalar), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_ppm_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()), &gfs_output_ppm_info); } return klass; } /** \endobject{GfsOutputPPM} */ /** * Writing 2D ESRI raster files. * \beginobject{GfsOutputGRD} */ static gboolean gfs_output_grd_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_grd_class ())->parent_class)->event) (event, sim)) { GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event); gfs_write_grd (sim, output->condition, output->v, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel, GFS_OUTPUT (event)->file->fp, GFS_OUTPUT (event)->parallel, TRUE); return TRUE; } return FALSE; } static void gfs_output_grd_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_grd_event; } GfsOutputClass * gfs_output_grd_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_grd_info = { "GfsOutputGRD", sizeof (GfsOutputScalar), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_grd_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()), &gfs_output_grd_info); } return klass; } /** \endobject{GfsOutputGRD} */ /** * Calling the write method of a given object. * \beginobject{GfsOutputObject} */ static void output_object_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_output_class())->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (object name)"); return; } GfsOutputObject * output = GFS_OUTPUT_OBJECT (*o); output->object = gfs_object_from_name (GFS_DOMAIN (gfs_object_simulation (*o)), fp->token->str); if (output->object == NULL) gts_file_error (fp, "unknown object '%s'", fp->token->str); else gts_file_next_token (fp); } static void output_object_write (GtsObject * o, FILE * fp) { GfsOutputObject * output = GFS_OUTPUT_OBJECT (o); (* GTS_OBJECT_CLASS (gfs_output_object_class ())->parent_class->write) (o, fp); fprintf (fp, " %s\n", GFS_EVENT (output->object)->name ); } static gboolean output_object_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_output_class())->event) (event, sim)) { GtsObject * object = GFS_OUTPUT_OBJECT (event)->object; FILE * fp = GFS_OUTPUT (event)->file->fp; object->klass->write (object, fp); fprintf (fp, "\n"); return TRUE; } return FALSE; } static void gfs_output_object_class_init (GfsOutputClass * klass) { GTS_OBJECT_CLASS (klass)->read = output_object_read; GTS_OBJECT_CLASS (klass)->write = output_object_write; GFS_EVENT_CLASS(klass)->event = output_object_event; } GfsOutputClass * gfs_output_object_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_object_info = { "GfsOutputObject", sizeof (GfsOutputObject), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_object_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_object_info); } return klass; } /** \endobject{GfsOutputObject} */ gerris-snapshot-131206/src/variable.h0000644000175100017510000002321212250371171014407 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __VARIABLE_H__ #define __VARIABLE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct _GfsSurfaceGenericBc GfsSurfaceGenericBc; #include "timestep.h" #include "event.h" /* GfsVariable: Header */ typedef void (* GfsVariableFineCoarseFunc) (FttCell * cell, GfsVariable * v); struct _GfsVariable { /*< private >*/ GfsEvent parent; /*< public >*/ guint i; FttComponent component; GfsVariable * vector[FTT_DIMENSION]; gchar * name, * description; gboolean centered; GfsVariableFineCoarseFunc fine_coarse, coarse_fine; GtsContainer * sources; GfsSurfaceGenericBc * surface_bc; GfsBc * default_bc; GfsDomain * domain; FttCellCleanupFunc cleanup; gdouble units; GfsVariable * face[2][4]; gboolean face_source; /* whether source terms should be evaluated at cell faces only */ gdouble orientation; /* orientation of rotated variable */ gboolean even; /* "eveness" of rotated variable */ }; typedef struct _GfsVariableClass GfsVariableClass; struct _GfsVariableClass { /*< private >*/ GfsEventClass parent_class; /*< public >*/ }; #define GFS_VARIABLE(obj) GTS_OBJECT_CAST (obj,\ GfsVariable,\ gfs_variable_class ()) #define GFS_VARIABLE_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsVariableClass,\ gfs_variable_class()) #define GFS_IS_VARIABLE(obj) (gts_object_is_from_class (obj,\ gfs_variable_class ())) #define GFS_VALUE(cell,v) ((&GFS_STATE (cell)->place_holder)[(v)->i]) GfsVariableClass * gfs_variable_class (void); GfsVariable * gfs_variable_new (GfsVariableClass * klass, GfsDomain * domain, const gchar * name, const gchar * description); #define gfs_temporary_variable(d) (gfs_variable_new (gfs_variable_class (),\ (d), NULL, NULL)) GfsVariable * gfs_variable_from_name (GSList * i, const gchar * name); GSList * gfs_variables_from_list (GSList * i, gchar * list, gchar ** error); void gfs_variables_swap (GfsVariable * v1, GfsVariable * v2); void gfs_variable_set_vector (GfsVariable ** v, guint n); void gfs_variable_set_tensor (GfsVariable * t[2][2]); GfsVariable * gfs_variable_clone (GfsVariable * v, gchar * name); /* GfsVariableBoolean: header */ #define GFS_IS_VARIABLE_BOOLEAN(obj) (gts_object_is_from_class (obj,\ gfs_variable_boolean_class ())) GfsVariableClass * gfs_variable_boolean_class (void); /* GfsVariableTracer: header */ typedef struct _GfsVariableTracer GfsVariableTracer; struct _GfsVariableTracer { /*< private >*/ GfsVariable parent; /*< public >*/ GfsAdvectionParams advection; }; #define GFS_VARIABLE_TRACER(obj) GTS_OBJECT_CAST (obj,\ GfsVariableTracer,\ gfs_variable_tracer_class ()) #define GFS_IS_VARIABLE_TRACER(obj) (gts_object_is_from_class (obj,\ gfs_variable_tracer_class ())) GfsVariableClass * gfs_variable_tracer_class (void); /* GfsVariableResidual: header */ #define GFS_IS_VARIABLE_RESIDUAL(obj) (gts_object_is_from_class (obj,\ gfs_variable_residual_class ())) GfsVariableClass * gfs_variable_residual_class (void); /* GfsVariableFiltered: header */ typedef struct _GfsVariableFiltered GfsVariableFiltered; struct _GfsVariableFiltered { /*< private >*/ GfsVariable parent; /*< public >*/ GfsVariable * v; guint niter; }; #define GFS_VARIABLE_FILTERED(obj) GTS_OBJECT_CAST (obj,\ GfsVariableFiltered,\ gfs_variable_filtered_class ()) #define GFS_IS_VARIABLE_FILTERED(obj) (gts_object_is_from_class (obj,\ gfs_variable_filtered_class ())) GfsVariableClass * gfs_variable_filtered_class (void); /* GfsVariableDiagonal: Header */ GfsVariableClass * gfs_variable_diagonal_class (void); /* GfsVariableFunction: header */ typedef struct _GfsVariableFunction GfsVariableFunction; struct _GfsVariableFunction { /*< private >*/ GfsVariable parent; /*< public >*/ GfsFunction * f; }; #define GFS_VARIABLE_FUNCTION(obj) GTS_OBJECT_CAST (obj,\ GfsVariableFunction,\ gfs_variable_function_class ()) #define GFS_IS_VARIABLE_FUNCTION(obj) (gts_object_is_from_class (obj,\ gfs_variable_function_class ())) GfsVariableClass * gfs_variable_function_class (void); #if FTT_2D /* GfsVariableStreamFunction: header */ #define GFS_IS_VARIABLE_STREAM_FUNCTION(obj) (gts_object_is_from_class (obj,\ gfs_variable_stream_function_class ())) GfsVariableClass * gfs_variable_stream_function_class (void); #endif /* FTT_2D */ /* GfsVariableAge: header */ #define GFS_IS_VARIABLE_AGE(obj) (gts_object_is_from_class (obj,\ gfs_variable_age_class ())) GfsVariableClass * gfs_variable_age_class (void); /* GfsVariableAverage: header */ typedef struct _GfsVariableAverage GfsVariableAverage; struct _GfsVariableAverage { /*< private >*/ GfsVariableFunction parent; /*< public >*/ FttComponent c; }; #define GFS_VARIABLE_AVERAGE(obj) GTS_OBJECT_CAST (obj,\ GfsVariableAverage,\ gfs_variable_average_class ()) #define GFS_IS_VARIABLE_AVERAGE(obj) (gts_object_is_from_class (obj,\ gfs_variable_average_class ())) GfsVariableClass * gfs_variable_average_class (void); /* GfsDerivedVariable: Header */ struct _GfsDerivedVariable { /*< private >*/ GtsObject parent; /*< public >*/ gchar * name, * description; gpointer func, data; }; #define GFS_DERIVED_VARIABLE(obj) GTS_OBJECT_CAST (obj,\ GfsDerivedVariable,\ gfs_derived_variable_class ()) #define GFS_IS_DERIVED_VARIABLE(obj) (gts_object_is_from_class (obj,\ gfs_derived_variable_class ())) GtsObjectClass * gfs_derived_variable_class (void); GfsDerivedVariable * gfs_derived_variable_from_name (GSList * i, const gchar * name); /* GfsConstant: Header */ typedef struct _GfsConstant GfsConstant; /** \instance{GfsConstant} */ struct _GfsConstant { /*< private >*/ GfsEvent parent; GfsDerivedVariable * derived; /*< public >*/ gdouble val; /**< the value of the constant */ }; #define GFS_CONSTANT(obj) GTS_OBJECT_CAST (obj,\ GfsConstant,\ gfs_constant_class ()) #define GFS_IS_CONSTANT(obj) (gts_object_is_from_class (obj,\ gfs_constant_class ())) GfsEventClass * gfs_constant_class (void); /* GfsSpatialSum: Header */ typedef struct _GfsSpatialSum GfsSpatialSum; /** \instance{GfsSpatialSum} */ struct _GfsSpatialSum { /*< private >*/ GfsConstant parent; /*< public >*/ GfsFunction * v; /**< the function to sum */ }; #define GFS_SPATIAL_SUM(obj) GTS_OBJECT_CAST (obj,\ GfsSpatialSum,\ gfs_spatial_sum_class ()) #define GFS_IS_SPATIAL_SUM(obj) (gts_object_is_from_class (obj,\ gfs_spatial_sum_class ())) GfsEventClass * gfs_spatial_sum_class (void); /* GfsVariablePoisson: Header */ typedef struct _GfsVariablePoisson GfsVariablePoisson; struct _GfsVariablePoisson { /*< private >*/ GfsVariableFunction parent; /*< public >*/ GfsMultilevelParams par; }; #define GFS_VARIABLE_POISSON(obj) GTS_OBJECT_CAST (obj,\ GfsVariablePoisson,\ gfs_variable_poisson_class ()) #define GFS_IS_VARIABLE_POISSON(obj) (gts_object_is_from_class (obj,\ gfs_variable_poisson_class ())) GfsVariableClass * gfs_variable_poisson_class (void); /* GfsVariableLaplacian: Header */ #define GFS_IS_VARIABLE_LAPLACIAN(obj) (gts_object_is_from_class (obj,\ gfs_variable_laplacian_class ())) GfsVariableClass * gfs_variable_laplacian_class (void); /* GfsHydrostaticPressure: Header */ typedef struct _GfsHydrostaticPressure GfsHydrostaticPressure; /** \instance{GfsHydrostaticPressure} */ struct _GfsHydrostaticPressure { /*< private >*/ GfsVariable parent; FttComponent c; }; #define GFS_HYDROSTATIC_PRESSURE(obj) GTS_OBJECT_CAST (obj,\ GfsHydrostaticPressure,\ gfs_hydrostatic_pressure_class ()) #define GFS_IS_HYDROSTATIC_PRESSURE(obj) (gts_object_is_from_class (obj,\ gfs_hydrostatic_pressure_class ())) GfsVariableClass * gfs_hydrostatic_pressure_class (void); void gfs_hydrostatic_pressure_update (GfsHydrostaticPressure * p, GfsFunction * alpha); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __VARIABLE_H__ */ gerris-snapshot-131206/src/fluid.c0000644000175100017510000027503612250371171013735 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Low-level discrete operators. */ #include #include #include "fluid.h" #include "variable.h" #include "domain.h" #include "solid.h" /** * gfs_cell_face: * @cell: a #FttCell. * @d: a direction. * * This function is different from ftt_cell_face() because it takes * into account the solid fractions. * * Returns: the face of @cell in direction @d. */ FttCellFace gfs_cell_face (FttCell * cell, FttDirection d) { FttCellFace f = {cell, NULL, d}; g_return_val_if_fail (cell != NULL, f); if (!GFS_IS_MIXED (cell) || GFS_STATE (cell)->solid->s[d] > 0.) f.neighbor = ftt_cell_neighbor (cell, d); return f; } typedef struct _Gradient Gradient; /* grad(p) = -a*p(cell) + b*p(neighbor) + c */ struct _Gradient { gdouble a, b, c; }; /* get_average_neighbor_value_stencil() needs to be updated whenever * this function is modified */ static gdouble average_neighbor_value (const FttCellFace * face, guint v, gdouble * x) { /* check for corner refinement violation (topology.fig) */ g_assert (ftt_cell_level (face->neighbor) == ftt_cell_level (face->cell)); if (FTT_CELL_IS_LEAF (face->neighbor)) return GFS_VALUEI (face->neighbor, v); else { FttCellChildren children; gdouble av = 0., a = 0.; FttDirection od = FTT_OPPOSITE_DIRECTION (face->d); guint i, n; n = ftt_cell_children_direction (face->neighbor, od, &children); for (i = 0; i < n; i++) if (children.c[i] && GFS_VALUEI (children.c[i], v) != GFS_NODATA) { gdouble w = GFS_IS_MIXED (children.c[i]) ? GFS_STATE (children.c[i])->solid->s[od] : 1.; a += w; av += w*GFS_VALUEI (children.c[i], v); } if (a > 0.) { *x = 3./4.; return av/a; } else return GFS_VALUEI (face->cell, v); } } static void average_neighbor_value_stencil (const FttCellFace * face, guint v) { /* check for corner refinement violation (topology.fig) */ g_assert (ftt_cell_level (face->neighbor) == ftt_cell_level (face->cell)); if (FTT_CELL_IS_LEAF (face->neighbor)) GFS_VALUEI (face->neighbor, v) = 1.; else { FttCellChildren children; gdouble a = 0.; guint i, n; n = ftt_cell_children_direction (face->neighbor, FTT_OPPOSITE_DIRECTION (face->d), &children); for (i = 0; i < n; i++) if (children.c[i]) { a += 1.; GFS_VALUEI (children.c[i], v) = 1.; } if (a == 0.) GFS_VALUEI (face->cell, v) = 1.; } } #if FTT_2D /* v = a*v(cell) + b * * Second order 1D interpolation. */ static GfsGradient interpolate_1D2 (FttCell * cell, FttDirection d, gdouble x, guint v) { GfsGradient p; FttCellFace f1, f2; gdouble p1 = 0., p2 = 0.; gdouble x1 = 1., x2 = 1.; gdouble a1, a2; g_return_val_if_fail (cell != NULL, p); g_return_val_if_fail (!GFS_IS_MIXED (cell), p); f1 = gfs_cell_face (cell, FTT_OPPOSITE_DIRECTION (d)); if (f1.neighbor) p1 = average_neighbor_value (&f1, v, &x1); f2 = gfs_cell_face (cell, d); if (f2.neighbor) p2 = average_neighbor_value (&f2, v, &x2); a1 = x*(x - x2)/(x1*(x1 + x2)); a2 = x*(x + x1)/(x2*(x1 + x2)); p.a = 1. - a1 - a2; p.b = 0.; if (f1.neighbor) p.b += a1*p1; else p.a += a1; if (f2.neighbor) p.b += a2*p2; else p.a += a2; return p; } /* v = a*v(cell) + b * * First order 1D interpolation. * * get_interpolate_1D1_stencil() needs to be updated whenever * this function is modified */ static GfsGradient interpolate_1D1 (FttCell * cell, FttDirection d, gdouble x, guint v) { GfsGradient p = { 1., 0. }; FttCellFace f; f = gfs_cell_face (cell, d); if (f.neighbor) { gdouble x2 = 1.; gdouble p2 = average_neighbor_value (&f, v, &x2); if (p2 != GFS_NODATA) { gdouble a2 = x/x2; p.b += a2*p2; p.a -= a2; } } return p; } static void interpolate_1D1_stencil (FttCell * cell, FttDirection d, guint v) { FttCellFace f; GFS_VALUEI (cell, v) = 1.; f = ftt_cell_face (cell, d); if (f.neighbor) average_neighbor_value_stencil (&f, v); } #else /* not FTT_2D */ /* v = a*v(cell) + b * * First order 2D interpolation. * * get_interpolate_2D1_stencil() needs to be updated whenever * this function is modified */ static GfsGradient interpolate_2D1 (FttCell * cell, FttDirection d1, FttDirection d2, gdouble x, gdouble y, guint v) { GfsGradient p = { 1., 0. }; FttCellFace f1, f2; f1 = gfs_cell_face (cell, d1); if (f1.neighbor) { gdouble y1 = 1.; gdouble p1 = average_neighbor_value (&f1, v, &y1); if (p1 != GFS_NODATA) { gdouble a1 = y/y1; p.b += a1*p1; p.a -= a1; } } f2 = gfs_cell_face (cell, d2); if (f2.neighbor) { gdouble x2 = 1.; gdouble p2 = average_neighbor_value (&f2, v, &x2); if (p2 != GFS_NODATA) { gdouble a2 = x/x2; p.b += a2*p2; p.a -= a2; } } return p; } static void interpolate_2D1_stencil (FttCell * cell, FttDirection d1, FttDirection d2, guint v) { FttCellFace f1, f2; GFS_VALUEI (cell, v) = 1.; f1 = ftt_cell_face (cell, d1); if (f1.neighbor) average_neighbor_value_stencil (&f1, v); f2 = ftt_cell_face (cell, d2); if (f2.neighbor) average_neighbor_value_stencil (&f2, v); } #endif /* not FTT_2D */ #if FTT_2D static gint perpendicular[FTT_NEIGHBORS][FTT_CELLS] = {{-1, 2, -1, 3}, { 2, -1, 3, -1}, { 1, 0, -1, -1}, {-1, -1, 1, 0}}; #else /* FTT_3D */ static gint perpendicular[FTT_NEIGHBORS][FTT_CELLS][2] = {{{-1,-1},{2,4},{-1,-1},{3,4},{-1,-1},{2,5},{-1,-1},{3,5}}, {{2,4},{-1,-1},{3,4},{-1,-1},{2,5},{-1,-1},{3,5},{-1,-1}}, {{4,1},{4,0},{-1,-1},{-1,-1},{5,1},{5,0},{-1,-1},{-1,-1}}, {{-1,-1},{-1,-1},{4,1},{4,0},{-1,-1},{-1,-1},{5,1},{5,0}}, {{1,2},{0,2},{1,3},{0,3},{-1,-1},{-1,-1},{-1,-1},{-1,-1}}, {{-1,-1},{-1,-1},{-1,-1},{-1,-1},{1,2},{0,2},{1,3},{0,3}}}; #endif /* FTT_3D */ /* gradient_fine_coarse_stencil() needs to be updated whenever this function is modified */ static Gradient gradient_fine_coarse (const FttCellFace * face, guint v) { Gradient g; GfsGradient p; #if FTT_2D gint dp; #else /* FTT_3D */ gint * dp; #endif /* FTT_3D */ g_assert (face != NULL); g_assert (ftt_face_type (face) == FTT_FINE_COARSE); dp = perpendicular[face->d][FTT_CELL_ID (face->cell)]; #if FTT_2D g_assert (dp >= 0); p = interpolate_1D1 (face->neighbor, dp, 1./4., v); #else /* FTT_3D */ g_assert (dp[0] >= 0 && dp[1] >= 0); p = interpolate_2D1 (face->neighbor, dp[0], dp[1], 1./4., 1./4., v); #endif /* FTT_3D */ g.a = 2./3.; g.b = 2.*p.a/3.; g.c = 2.*p.b/3.; return g; } #define REFINE_CORNER(cell) {if (cell && FTT_CELL_IS_LEAF (cell) && \ ftt_cell_level (cell) < level - 1) \ ftt_cell_refine_single (cell, init, data);} void ftt_cell_refine_corners (FttCell * cell, FttCellInitFunc init, gpointer data) { FttDirection d; FttCellNeighbors neighbor; guint level; g_return_if_fail (cell != NULL); level = ftt_cell_level (cell); ftt_cell_neighbors (cell, &neighbor); for (d = 0; d < FTT_NEIGHBORS; d++) if (neighbor.c[d] && ftt_cell_level (neighbor.c[d]) < level) { if (GFS_CELL_IS_BOUNDARY (neighbor.c[d])) ftt_cell_refine_single (neighbor.c[d], init, data); else { FttCell * n; #if FTT_2D gint dp; #else /* FTT_3D */ gint * dp; #endif /* FTT_3D */ dp = perpendicular[d][FTT_CELL_ID (cell)]; #if FTT_2D g_assert (dp >= 0); n = ftt_cell_neighbor (neighbor.c[d], dp); REFINE_CORNER (n) #else /* FTT_3D */ g_assert (dp[0] >= 0 && dp[1] >= 0); n = ftt_cell_neighbor (neighbor.c[d], dp[0]); REFINE_CORNER (n) n = ftt_cell_neighbor (neighbor.c[d], dp[1]); REFINE_CORNER (n) #endif /* FTT_3D */ } } } /** * gfs_neighbor_value: * @face: a #FttCellFace. * @v: a variable index. * @x: relative position of the neigboring value. * * Returns: the (averaged) neighboring value of variable @v at @face * and its position @x. */ gdouble gfs_neighbor_value (const FttCellFace * face, guint v, gdouble * x) { g_return_val_if_fail (face != NULL, 0.); g_return_val_if_fail (x != NULL, 0.); GfsGradient vc; #if FTT_2D gint dp; #else /* FTT_3D */ gint * dp; #endif /* FTT_3D */ if (ftt_cell_level (face->neighbor) == ftt_cell_level (face->cell)) /* neighbor at same level */ return average_neighbor_value (face, v, x); else { if (GFS_VALUEI (face->neighbor, v) == GFS_NODATA) return GFS_NODATA; /* neighbor at coarser level */ dp = perpendicular[face->d][FTT_CELL_ID (face->cell)]; #if FTT_2D g_assert (dp >= 0); vc = interpolate_1D1 (face->neighbor, dp, 1./4., v); #else /* FTT_3D */ g_assert (dp[0] >= 0 && dp[1] >= 0); vc = interpolate_2D1 (face->neighbor, dp[0], dp[1], 1./4., 1./4., v); #endif /* FTT_3D */ *x = 3./2.; return vc.a*GFS_VALUEI (face->neighbor, v) + vc.b; } } static void neighbor_value_stencil (const FttCellFace * face, guint v) { #if FTT_2D gint dp; #else /* FTT_3D */ gint * dp; #endif /* FTT_3D */ if (ftt_cell_level (face->neighbor) == ftt_cell_level (face->cell)) /* neighbor at same level */ average_neighbor_value_stencil (face, v); else { /* neighbor at coarser level */ dp = perpendicular[face->d][FTT_CELL_ID (face->cell)]; #if FTT_2D g_assert (dp >= 0); interpolate_1D1_stencil (face->neighbor, dp, v); #else /* FTT_3D */ g_assert (dp[0] >= 0 && dp[1] >= 0); interpolate_2D1_stencil (face->neighbor, dp[0], dp[1], v); #endif /* FTT_3D */ GFS_VALUEI (face->neighbor, v) = 1.; } } /** * gfs_center_gradient: * @cell: a #FttCell. * @c: a component. * @v: a #GfsVariable index. * * The gradient is normalized by the size of the cell. * * Returns: the value of the @c component of the gradient of variable @v * at the center of the cell. */ gdouble gfs_center_gradient (FttCell * cell, FttComponent c, guint v) { FttDirection d = 2*c; FttCellFace f1; gdouble v0; g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (c < FTT_DIMENSION, 0.); f1 = gfs_cell_face (cell, FTT_OPPOSITE_DIRECTION (d)); v0 = GFS_VALUEI (cell, v); if (f1.neighbor) { FttCellFace f2 = gfs_cell_face (cell, d); gdouble x1 = 1., v1; v1 = gfs_neighbor_value (&f1, v, &x1); if (f2.neighbor) { /* two neighbors: second-order differencing (parabola) */ gdouble x2 = 1., v2; v2 = gfs_neighbor_value (&f2, v, &x2); return (x1*x1*(v2 - v0) + x2*x2*(v0 - v1))/(x1*x2*(x2 + x1)); } else /* one neighbor: first-order differencing */ return (v0 - v1)/x1; } else { FttCellFace f2 = gfs_cell_face (cell, d); if (f2.neighbor) { gdouble x2 = 1.; /* one neighbor: first-order differencing */ return (gfs_neighbor_value (&f2, v, &x2) - v0)/x2; } } /* no neighbors */ return 0.; } /** * gfs_center_gradient_stencil: * @cell: a #FttCell. * @c: a component. * @v: a #GfsVariable index. * * Sets to 1. the @v variable of all the cells which would be used if * gfs_center_gradient() was called with identical arguments. */ void gfs_center_gradient_stencil (FttCell * cell, FttComponent c, guint v) { FttDirection d = 2*c; FttCellFace f1, f2; g_return_if_fail (cell != NULL); g_return_if_fail (c < FTT_DIMENSION); f1 = ftt_cell_face (cell, FTT_OPPOSITE_DIRECTION (d)); if (f1.neighbor == cell) /* periodic */ return; if (f1.neighbor) { GFS_VALUEI (cell, v) = 1.; neighbor_value_stencil (&f1, v); } f2 = ftt_cell_face (cell, d); if (f2.neighbor) { GFS_VALUEI (cell, v) = 1.; neighbor_value_stencil (&f2, v); } } /** * gfs_center_van_leer_gradient: * @cell: a #FttCell. * @c: a component. * @v: a #GfsVariable index. * * The gradient is normalized by the size of the cell and is limited * using van Leer's limiter. * * Returns: the value of the @c component of the gradient of variable @v * at the center of the cell. */ gdouble gfs_center_van_leer_gradient (FttCell * cell, FttComponent c, guint v) { FttDirection d = 2*c; FttCellFace f1; g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (c < FTT_DIMENSION, 0.); f1 = gfs_cell_face (cell, FTT_OPPOSITE_DIRECTION (d)); if (f1.neighbor) { FttCellFace f2 = gfs_cell_face (cell, d); if (f2.neighbor) { /* two neighbors: second-order differencing (parabola) + van Leer limiter. See http://en.wikipedia.org/wiki/Flux_limiter */ gdouble x1 = 1., x2 = 1., v0, v1, v2; v0 = GFS_VALUEI (cell, v); v1 = gfs_neighbor_value (&f1, v, &x1); v2 = gfs_neighbor_value (&f2, v, &x2); if (v1 == GFS_NODATA || v2 == GFS_NODATA) return 0.; gdouble s1 = 2.*(v0 - v1); gdouble s2 = 2.*(v2 - v0); if (s1*s2 <= 0.) return 0.; gdouble s0 = (x1*x1*(v2 - v0) + x2*x2*(v0 - v1))/(x1*x2*(x2 + x1)); if (ABS (s2) < ABS (s1)) s1 = s2; if (ABS (s0) < ABS (s1)) return s0; return s1; } } /* only one or no neighbors */ return 0.; } static gdouble generic_limiter (gdouble r, gdouble beta) { gdouble v1 = MIN (r, beta), v2 = MIN (beta*r, 1.); v1 = MAX (0., v1); return MAX (v1, v2); } static gdouble minmod_limiter (gdouble r) { return generic_limiter (r, 1.); } static gdouble superbee_limiter (gdouble r) { return generic_limiter (r, 2.); } static gdouble sweby_limiter (gdouble r) { return generic_limiter (r, 1.5); } static gdouble center_limited_gradient (FttCell * cell, FttComponent c, guint v, gdouble (* limiter) (gdouble)) { FttDirection d = 2*c; FttCellFace f1; gdouble v0; f1 = gfs_cell_face (cell, FTT_OPPOSITE_DIRECTION (d)); v0 = GFS_VALUEI (cell, v); if (f1.neighbor) { FttCellFace f2 = gfs_cell_face (cell, d); if (f2.neighbor) { /* two neighbors */ gdouble x1 = 1., v1, x2 = 1., v2; v1 = gfs_neighbor_value (&f1, v, &x1); v2 = gfs_neighbor_value (&f2, v, &x2); gdouble g; if (v0 == v1) g = 0.; else g = (* limiter) ((v2 - v0)*x1/((v0 - v1)*x2))*(v0 - v1)/x1; return g; } } /* only one or no neighbors */ return 0.; } /** * gfs_center_minmod_gradient: * @cell: a #FttCell. * @c: a component. * @v: a #GfsVariable index. * * The gradient is normalized by the size of the cell and is limited * using a minmod limiter. * * Returns: the value of the @c component of the gradient of variable @v * at the center of the cell. */ gdouble gfs_center_minmod_gradient (FttCell * cell, FttComponent c, guint v) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (c < FTT_DIMENSION, 0.); return center_limited_gradient (cell, c, v, minmod_limiter); } /** * gfs_center_superbee_gradient: * @cell: a #FttCell. * @c: a component. * @v: a #GfsVariable index. * * The gradient is normalized by the size of the cell and is limited * using a superbee limiter. * * Returns: the value of the @c component of the gradient of variable @v * at the center of the cell. */ gdouble gfs_center_superbee_gradient (FttCell * cell, FttComponent c, guint v) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (c < FTT_DIMENSION, 0.); return center_limited_gradient (cell, c, v, superbee_limiter); } /** * gfs_center_sweby_gradient: * @cell: a #FttCell. * @c: a component. * @v: a #GfsVariable index. * * The gradient is normalized by the size of the cell and is limited * using a Sweby limiter (beta = 1.5). * * Returns: the value of the @c component of the gradient of variable @v * at the center of the cell. */ gdouble gfs_center_sweby_gradient (FttCell * cell, FttComponent c, guint v) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (c < FTT_DIMENSION, 0.); return center_limited_gradient (cell, c, v, sweby_limiter); } /** * gfs_center_regular_gradient: * @cell: a #FttCell. * @c: a component. * @v: a #GfsVariable. * * The gradient is normalized by the size of the cell. Only regular * Cartesian stencils are used to compute the gradient. * * Returns: the value of the @c component of the gradient of variable @v * at the center of the cell. */ gdouble gfs_center_regular_gradient (FttCell * cell, FttComponent c, GfsVariable * v) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (c < FTT_DIMENSION, 0.); g_return_val_if_fail (v != NULL, 0.); FttCell * n1 = ftt_cell_neighbor (cell, 2*c); guint level = ftt_cell_level (cell); if (n1) { if (ftt_cell_level (n1) < level) return gfs_center_regular_gradient (ftt_cell_parent (cell), c, v)/2.; FttCell * n2 = ftt_cell_neighbor (cell, 2*c + 1); if (n2) { if (ftt_cell_level (n2) < level) return gfs_center_regular_gradient (ftt_cell_parent (cell), c, v)/2.; /* two neighbors: second-order differencing (parabola) */ return (GFS_VALUE (n1, v) - GFS_VALUE (n2, v))/2.; } else /* one neighbor: first-order differencing */ return GFS_VALUE (n1, v) - GFS_VALUE (cell, v); } else { FttCell * n2 = ftt_cell_neighbor (cell, 2*c + 1); if (n2) { if (ftt_cell_level (n2) < level) return gfs_center_regular_gradient (ftt_cell_parent (cell), c, v)/2.; /* one neighbor: first-order differencing */ return GFS_VALUE (cell, v) - GFS_VALUE (n2, v); } } /* no neighbors */ return 0.; } /** * gfs_center_regular_2nd_derivative: * @cell: a #FttCell. * @c: a component. * @v: a #GfsVariable. * * The derivative is normalized by the size of the cell squared. Only * regular Cartesian stencils are used to compute the derivative. * * Returns: the value of the @c component of the 2nd derivative of * variable @v at the center of the cell. */ gdouble gfs_center_regular_2nd_derivative (FttCell * cell, FttComponent c, GfsVariable * v) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (c < FTT_DIMENSION, 0.); g_return_val_if_fail (v != NULL, 0.); FttCell * n1 = ftt_cell_neighbor (cell, 2*c); FttCell * n2 = ftt_cell_neighbor (cell, 2*c + 1); if (n1 && n2) { guint level = ftt_cell_level (cell); if (ftt_cell_level (n1) < level || ftt_cell_level (n2) < level) return gfs_center_regular_2nd_derivative (ftt_cell_parent (cell), c, v)/4.; return GFS_VALUE (n1, v) - 2.*GFS_VALUE (cell, v) + GFS_VALUE (n2, v); } /* one or no neighbors */ return 0.; } /** * gfs_face_gradient: * @face: a #FttCellFace. * @g: the #GfsGradient. * @v: a #GfsVariable index. * @max_level: the maximum cell level to consider (-1 means no restriction). * * Set the value of @g as the gradient of variable @v on the * @face. The value returned is second order accurate in space and * conservative, in the sense that values at a coarse/fine cell * boundary are consistent. * * The value of the gradient (normalised by the size of @face->cell) * is given by: @g->b - @g->a*GFS_VALUE (@face->cell, @v). */ void gfs_face_gradient (const FttCellFace * face, GfsGradient * g, guint v, gint max_level) { guint level; g_return_if_fail (face != NULL); g->a = g->b = 0.; if (face->neighbor == NULL || GFS_FACE_FRACTION (face) == 0.) return; level = ftt_cell_level (face->cell); if (ftt_cell_level (face->neighbor) < level) { /* neighbor is at a shallower level */ Gradient gcf; gcf = gradient_fine_coarse (face, v); g->a = gcf.a; g->b = gcf.b*GFS_VALUEI (face->neighbor, v) + gcf.c; } else { if (level == max_level || FTT_CELL_IS_LEAF (face->neighbor)) { /* neighbor is at the same level */ g->a = 1.; g->b = GFS_VALUEI (face->neighbor, v); } else { /* neighbor is at a deeper level */ FttCellChildren children; FttCellFace f; guint i, n; gdouble s; f.d = FTT_OPPOSITE_DIRECTION (face->d); n = ftt_cell_children_direction (face->neighbor, f.d, &children); f.neighbor = face->cell; for (i = 0; i < n; i++) if ((f.cell = children.c[i])) { Gradient gcf; gcf = gradient_fine_coarse (&f, v); s = GFS_FACE_FRACTION (&f); g->a += s*gcf.b; g->b += s*(gcf.a*GFS_VALUEI (f.cell, v) - gcf.c); } s = GFS_FACE_FRACTION (face)*n/2.; g->a /= s; g->b /= s; } } } /* face_weighted_gradient_stencil() needs to be updated whenever this function is modified */ static void face_weighted_gradient (const FttCellFace * face, GfsGradient * g, guint v, gint max_level, guint dimension) { guint level; g_return_if_fail (face != NULL); g->a = g->b = 0.; if (face->neighbor == NULL) return; level = ftt_cell_level (face->cell); if (ftt_cell_level (face->neighbor) < level) { /* neighbor is at a shallower level */ Gradient gcf; gdouble w = GFS_STATE (face->cell)->f[face->d].v; gcf = gradient_fine_coarse (face, v); g->a = w*gcf.a; g->b = w*(gcf.b*GFS_VALUEI (face->neighbor, v) + gcf.c); } else { if (level == max_level || FTT_CELL_IS_LEAF (face->neighbor)) { /* neighbor is at the same level */ gdouble w = GFS_STATE (face->cell)->f[face->d].v; g->a = w; g->b = w*GFS_VALUEI (face->neighbor, v); } else { /* neighbor is at a deeper level */ FttCellChildren children; FttCellFace f; guint i, n; f.d = FTT_OPPOSITE_DIRECTION (face->d); n = ftt_cell_children_direction (face->neighbor, f.d, &children); f.neighbor = face->cell; for (i = 0; i < n; i++) if ((f.cell = children.c[i])) { Gradient gcf; gdouble w = GFS_STATE (f.cell)->f[f.d].v; gcf = gradient_fine_coarse (&f, v); g->a += w*gcf.b; g->b += w*(gcf.a*GFS_VALUEI (f.cell, v) - gcf.c); } if (dimension > 2) { g->a /= n/2.; g->b /= n/2.; } } } } /** * gfs_face_weighted_gradient: * @face: a #FttCellFace. * @g: the #GfsGradient. * @v: a #GfsVariable index. * @max_level: the maximum cell level to consider (-1 means no restriction). * * Set the value of @g as the gradient of variable @v on the @face * weighted by the value of the @v field of the face state vector of the * corresponding cell. The value returned is second order accurate in * space and conservative, in the sense that values at a coarse/fine * cell boundary are consistent. */ void gfs_face_weighted_gradient (const FttCellFace * face, GfsGradient * g, guint v, gint max_level) { face_weighted_gradient (face, g, v, max_level, FTT_DIMENSION); } void gfs_face_weighted_gradient_2D (const FttCellFace * face, GfsGradient * g, guint v, gint max_level) { face_weighted_gradient (face, g, v, max_level, 2); } static void fullest_directions (const FttCellFace * face, FttDirection d[FTT_DIMENSION]) { FttComponent c = face->d/2, i; FttCell * mixed = GFS_IS_MIXED (face->cell) ? face->cell : face->neighbor; GfsSolidVector * s = GFS_STATE (mixed)->solid; d[0] = face->d; for (i = 1; i < FTT_DIMENSION; i++) { guint cp = (c + i) % FTT_DIMENSION; d[i] = s->s[2*cp] > s->s[2*cp + 1] ? 2*cp : 2*cp + 1; } } static FttCell * cell_corner_neighbor1 (FttCell * cell, FttDirection * d, gint max_level) { if (!cell) return NULL; FttCell * neighbor = ftt_cell_neighbor (cell, d[0]); if (!neighbor) return NULL; else { guint level = ftt_cell_level (cell); if (ftt_cell_level (neighbor) < level) /* neighbor is at a shallower level */ return neighbor; else { if (level == max_level || FTT_CELL_IS_LEAF (neighbor)) /* neighbor is at the same level */ return neighbor; else { /* neighbor is at a deeper level */ guint i; FttDirection d1[FTT_DIMENSION]; d1[0] = FTT_OPPOSITE_DIRECTION (d[0]); for (i = 1; i < FTT_DIMENSION; i++) d1[i] = d[i]; return ftt_cell_child_corner (neighbor, d1); } } } } #if FTT_2D # define N_CELLS 4 #else /* 3D */ # define N_CELLS 8 #endif /* 3D */ static gboolean inverse (gdouble mi[N_CELLS - 1][N_CELLS - 1]) { #if FTT_2D gdouble m[N_CELLS - 1][N_CELLS - 1], det; guint i, j; for (i = 0; i < N_CELLS - 1; i++) for (j = 0; j < N_CELLS - 1; j++) m[i][j] = mi[i][j]; det = (m[0][0]*(m[1][1]*m[2][2] - m[2][1]*m[1][2]) - m[0][1]*(m[1][0]*m[2][2] - m[2][0]*m[1][2]) + m[0][2]*(m[1][0]*m[2][1] - m[2][0]*m[1][1])); if (det == 0.) return FALSE; mi[0][0] = (m[1][1]*m[2][2] - m[1][2]*m[2][1])/det; mi[0][1] = (m[2][1]*m[0][2] - m[0][1]*m[2][2])/det; mi[0][2] = (m[0][1]*m[1][2] - m[1][1]*m[0][2])/det; mi[1][0] = (m[1][2]*m[2][0] - m[1][0]*m[2][2])/det; mi[1][1] = (m[0][0]*m[2][2] - m[2][0]*m[0][2])/det; mi[1][2] = (m[1][0]*m[0][2] - m[0][0]*m[1][2])/det; mi[2][0] = (m[1][0]*m[2][1] - m[2][0]*m[1][1])/det; mi[2][1] = (m[2][0]*m[0][1] - m[0][0]*m[2][1])/det; mi[2][2] = (m[0][0]*m[1][1] - m[0][1]*m[1][0])/det; #else /* 3D */ gint indxc[N_CELLS - 1], indxr[N_CELLS - 1], ipiv[N_CELLS - 1]; gint i, icol = 0, irow = 0, j, k, l, ll; gdouble big, dum, pivinv, temp; #define SWAP(a,b) {temp=(a);(a)=(b);(b)=temp;} for (j = 0; j < N_CELLS - 1; j++) ipiv[j] = -1; for (i = 0; i < N_CELLS - 1; i++) { big = 0.0; for (j = 0; j < N_CELLS - 1; j++) if (ipiv[j] != 0) for (k = 0; k < N_CELLS - 1; k++) { if (ipiv[k] == -1) { if (fabs (mi[j][k]) >= big) { big = fabs (mi[j][k]); irow = j; icol = k; } } } ipiv[icol]++; if (irow != icol) for (l = 0; l < N_CELLS - 1; l++) SWAP (mi[irow][l], mi[icol][l]); indxr[i] = irow; indxc[i] = icol; if (mi[icol][icol] == 0.) return FALSE; pivinv = 1.0/mi[icol][icol]; mi[icol][icol] = 1.0; for (l = 0; l < N_CELLS - 1; l++) mi[icol][l] *= pivinv; for (ll = 0; ll < N_CELLS - 1; ll++) if (ll != icol) { dum = mi[ll][icol]; mi[ll][icol] = 0.0; for (l = 0; l < N_CELLS - 1; l++) mi[ll][l] -= mi[icol][l]*dum; } } for (l = N_CELLS - 1 - 1; l >= 0; l--) { if (indxr[l] != indxc[l]) for (k = 0; k < N_CELLS - 1; k++) SWAP (mi[k][indxr[l]], mi[k][indxc[l]]); } #endif /* 3D */ return TRUE; } #if (!FTT_2D) static void draw_cell (FttCell * cell, gdouble r, gdouble g, gdouble b, const gchar * name) { FttVector p; gdouble size = ftt_cell_size (cell)/2.; ftt_cell_pos (cell, &p); fprintf (stderr, "(geometry \"%s\" = OFF 8 6 12\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "4 3 2 1 0 %g %g %g\n" "4 4 5 6 7 %g %g %g\n" "4 2 3 7 6 %g %g %g\n" "4 0 1 5 4 %g %g %g\n" "4 0 4 7 3 %g %g %g\n" "4 1 2 6 5 %g %g %g\n" ")\n", name, p.x - size, p.y - size, p.z - size, p.x + size, p.y - size, p.z - size, p.x + size, p.y + size, p.z - size, p.x - size, p.y + size, p.z - size, p.x - size, p.y - size, p.z + size, p.x + size, p.y - size, p.z + size, p.x + size, p.y + size, p.z + size, p.x - size, p.y + size, p.z + size, r, g, b, r, g, b, r, g, b, r, g, b, r, g, b, r, g, b); gfs_cell_cm (cell, &p); size /= 8.; fprintf (stderr, "(geometry \"cm %s\" = OFF 8 6 12\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "4 3 2 1 0 %g %g %g\n" "4 4 5 6 7 %g %g %g\n" "4 2 3 7 6 %g %g %g\n" "4 0 1 5 4 %g %g %g\n" "4 0 4 7 3 %g %g %g\n" "4 1 2 6 5 %g %g %g\n" ")\n", name, p.x - size, p.y - size, p.z - size, p.x + size, p.y - size, p.z - size, p.x + size, p.y + size, p.z - size, p.x - size, p.y + size, p.z - size, p.x - size, p.y - size, p.z + size, p.x + size, p.y - size, p.z + size, p.x + size, p.y + size, p.z + size, p.x - size, p.y + size, p.z + size, r, g, b, r, g, b, r, g, b, r, g, b, r, g, b, r, g, b); } static void output_error_mesh (FttCell ** n) { draw_cell (n[0], 0., 0., 0., "n0"); draw_cell (n[1], 0.5, 0., 0., "n1"); draw_cell (n[2], 0., 0.5, 0., "n2"); draw_cell (n[3], 0., 0., 0.5, "n3"); draw_cell (n[4], 1., 1., 1., "n4"); draw_cell (n[5], 1., 0., 0., "n5"); draw_cell (n[6], 0., 1., 0., "n6"); draw_cell (n[7], 0., 0., 1., "n7"); g_assert_not_reached (); } #endif /* 3D */ static gboolean face_bilinear (const FttCellFace * face, FttCell ** n, FttVector * o, void (*cell_pos) (const FttCell *, FttVector *), gint max_level, gdouble m[N_CELLS - 1][N_CELLS - 1]) { FttDirection d[3], d1[3]; guint i; gdouble size = ftt_cell_size (face->cell); fullest_directions (face, d); n[0] = face->cell; n[1] = face->neighbor; d1[0] = d[1]; d1[1] = d[0]; d1[2] = d[2]; if ((n[2] = cell_corner_neighbor1 (n[0], d1, max_level)) == NULL) return FALSE; d1[1] = FTT_OPPOSITE_DIRECTION (d[0]); if ((n[3] = cell_corner_neighbor1 (n[1], d1, max_level)) == NULL) return FALSE; if (n[3] == n[2]) { d1[0] = d[0]; d1[1] = FTT_OPPOSITE_DIRECTION (d[1]); if ((n[3] = cell_corner_neighbor1 (n[2], d1, max_level)) == NULL) return FALSE; } #if FTT_2D for (i = 0; i < 3; i++) { FttVector cm; guint j; (*cell_pos) (n[i + 1], &cm); for (j = 0; j < FTT_DIMENSION; j++) { (&cm.x)[j] -= (&o->x)[j]; (&cm.x)[j] /= size; g_assert (fabs ((&cm.x)[j]) <= 4.); } m[i][0] = cm.x; m[i][1] = cm.y; m[i][2] = cm.x*cm.y; } g_assert (inverse (m)); #else /* 3D */ d1[0] = d[2]; d1[1] = d[0]; d1[2] = d[1]; if ((n[4] = cell_corner_neighbor1 (n[0], d1, max_level)) == NULL) return FALSE; d1[1] = FTT_OPPOSITE_DIRECTION (d[0]); if ((n[5] = cell_corner_neighbor1 (n[1], d1, max_level)) == NULL) return FALSE; if (n[5] == n[4]) { d1[0] = d[0]; d1[1] = d[1]; d1[2] = FTT_OPPOSITE_DIRECTION (d[2]); if ((n[5] = cell_corner_neighbor1 (n[4], d1, max_level)) == NULL) return FALSE; } d1[0] = d[2]; d1[1] = d[0]; d1[2] = FTT_OPPOSITE_DIRECTION (d[1]); if ((n[6] = cell_corner_neighbor1 (n[2], d1, max_level)) == NULL) return FALSE; if (n[6] == n[4]) { d1[0] = d[1]; d1[1] = d[0]; d1[2] = FTT_OPPOSITE_DIRECTION (d[2]); if ((n[6] = cell_corner_neighbor1 (n[4], d1, max_level)) == NULL) return FALSE; } d1[0] = d[2]; d1[1] = FTT_OPPOSITE_DIRECTION (d[0]); d1[2] = FTT_OPPOSITE_DIRECTION (d[1]); if ((n[7] = cell_corner_neighbor1 (n[3], d1, max_level)) == NULL) return FALSE; if (n[7] == n[4] || n[7] == n[5]) { d1[0] = d[1]; d1[2] = FTT_OPPOSITE_DIRECTION (d[2]); if ((n[7] = cell_corner_neighbor1 (n[5], d1, max_level)) == NULL) return FALSE; } if (n[7] == n[6]) { d1[0] = d[0]; d1[1] = FTT_OPPOSITE_DIRECTION (d[1]); d1[2] = FTT_OPPOSITE_DIRECTION (d[2]); if ((n[7] = cell_corner_neighbor1 (n[6], d1, max_level)) == NULL) return FALSE; } for (i = 0; i < 7; i++) { FttVector cm; guint j; for (j = i + 1; j < 7; j++) if (n[i + 1] == n[j + 1]) output_error_mesh (n); (*cell_pos) (n[i + 1], &cm); for (j = 0; j < FTT_DIMENSION; j++) { (&cm.x)[j] -= (&o->x)[j]; (&cm.x)[j] /= size; if (fabs ((&cm.x)[j]) > 4.) output_error_mesh (n); } m[i][0] = cm.x; m[i][1] = cm.y; m[i][2] = cm.z; m[i][3] = cm.x*cm.y; m[i][4] = cm.x*cm.z; m[i][5] = cm.y*cm.z; m[i][6] = cm.x*cm.y*cm.z; } if (!inverse (m)) output_error_mesh (n); #endif /* 3D */ return TRUE; } /* mixed_face_gradient_stencil needs to be updated whenever * this function is modified */ /* grad(v) = -a*v(cell) + b*v(neighbor) + c */ static gboolean mixed_face_gradient (const FttCellFace * face, Gradient * g, guint v, gint max_level) { FttCell * n[N_CELLS]; gdouble m[N_CELLS - 1][N_CELLS - 1]; FttVector o, cm; FttComponent c = face->d/2; gdouble h = ftt_cell_size (face->cell); gfs_cell_cm (face->cell, &o); if (!face_bilinear (face, n, &o, gfs_cell_cm, max_level, m)) return FALSE; gfs_face_ca (face, &cm); #if FTT_2D { FttComponent cp = FTT_ORTHOGONAL_COMPONENT (c); gdouble vp; vp = ((&cm.x)[cp] - (&o.x)[cp])/h; g->a = ((m[c][0] + m[2][0]*vp) + (m[c][1] + m[2][1]*vp) + (m[c][2] + m[2][2]*vp)); g->b = m[c][0] + m[2][0]*vp; g->c = ((m[c][1] + m[2][1]*vp)*GFS_VALUEI (n[2], v) + (m[c][2] + m[2][2]*vp)*GFS_VALUEI (n[3], v)); } #else /* 3D */ { guint j; cm.x = (cm.x - o.x)/h; cm.y = (cm.y - o.y)/h; cm.z = (cm.z - o.z)/h; g->c = 0.; switch (c) { case FTT_X: g->a = g->b = m[0][0] + cm.y*m[3][0] + cm.z*m[4][0] + cm.y*cm.z*m[6][0]; for (j = 1; j < N_CELLS - 1; j++) { gdouble a = m[0][j] + cm.y*m[3][j] + cm.z*m[4][j] + cm.y*cm.z*m[6][j]; g->a += a; g->c += a*GFS_VALUEI (n[j+1], v); } break; case FTT_Y: g->a = g->b = m[1][0] + cm.x*m[3][0] + cm.z*m[5][0] + cm.x*cm.z*m[6][0]; for (j = 1; j < N_CELLS - 1; j++) { gdouble a = m[1][j] + cm.x*m[3][j] + cm.z*m[5][j] + cm.x*cm.z*m[6][j]; g->a += a; g->c += a*GFS_VALUEI (n[j+1], v); } break; case FTT_Z: g->a = g->b = m[2][0] + cm.x*m[4][0] + cm.y*m[5][0] + cm.x*cm.y*m[6][0]; for (j = 1; j < N_CELLS - 1; j++) { gdouble a = m[2][j] + cm.x*m[4][j] + cm.y*m[5][j] + cm.x*cm.y*m[6][j]; g->a += a; g->c += a*GFS_VALUEI (n[j+1], v); } break; default: g_assert_not_reached (); } } #endif /* 3D */ if (!FTT_FACE_DIRECT (face)) { g->a = - g->a; g->b = - g->b; g->c = - g->c; } return TRUE; } /* face_cm_gradient_stencil needs to be updated whenever * this function is modified */ static void face_cm_gradient (const FttCellFace * face, GfsGradient * g, guint v, gint max_level, gboolean weighted) { guint level; Gradient gcf; gdouble w = weighted ? GFS_STATE (face->cell)->f[face->d].v : 1.; g->a = g->b = 0.; if (face->neighbor == NULL || w == 0.) return; level = ftt_cell_level (face->cell); if (ftt_cell_level (face->neighbor) < level) { /* neighbor is at a shallower level */ if (GFS_IS_MIXED (face->cell) || GFS_IS_MIXED (face->neighbor)) { if (!mixed_face_gradient (face, &gcf, v, max_level)) gcf = gradient_fine_coarse (face, v); } else gcf = gradient_fine_coarse (face, v); g->a = w*gcf.a; g->b = w*(gcf.b*GFS_VALUEI (face->neighbor, v) + gcf.c); } else { if (level == max_level || FTT_CELL_IS_LEAF (face->neighbor)) { /* neighbor is at the same level */ if (!GFS_IS_MIXED (face->cell) && !GFS_IS_MIXED (face->neighbor)) { g->a = w; g->b = w*GFS_VALUEI (face->neighbor, v); } else if (mixed_face_gradient (face, &gcf, v, max_level)) { g->a = w*gcf.a; g->b = w*(gcf.b*GFS_VALUEI (face->neighbor, v) + gcf.c); } else { g->a = w; g->b = w*GFS_VALUEI (face->neighbor, v); } } else { /* neighbor is at a deeper level */ FttCellChildren children; FttCellFace f; guint i, n; f.d = FTT_OPPOSITE_DIRECTION (face->d); n = ftt_cell_children_direction (face->neighbor, f.d, &children); f.neighbor = face->cell; for (i = 0; i < n; i++) if ((f.cell = children.c[i])) { w = weighted ? GFS_STATE (f.cell)->f[f.d].v : 1.; if (GFS_IS_MIXED (f.cell) || GFS_IS_MIXED (f.neighbor)) { if (!mixed_face_gradient (&f, &gcf, v, max_level)) gcf = gradient_fine_coarse (&f, v); } else gcf = gradient_fine_coarse (&f, v); g->a += w*gcf.b; g->b += w*(gcf.a*GFS_VALUEI (f.cell, v) - gcf.c); } #if !FTT_2D g->a /= n/2.; g->b /= n/2.; #endif } } } /** * gfs_face_cm_gradient: * @face: a #FttCellFace. * @g: the #GfsGradient. * @v: a #GfsVariable index. * @max_level: the maximum cell level to consider (-1 means no restriction). * * Set the value of @g as the gradient of variable @v on the * @face. Variable @v is defined at the center of mass of its * cell. Linear interpolation is used to evaluate the gradient in the * vicinity of cut cells. */ void gfs_face_cm_gradient (const FttCellFace * face, GfsGradient * g, guint v, gint max_level) { g_return_if_fail (face != NULL); g_return_if_fail (g != NULL); face_cm_gradient (face, g, v, max_level, FALSE); } /** * gfs_face_cm_weighted_gradient: * @face: a #FttCellFace. * @g: the #GfsGradient. * @v: a #GfsVariable index. * @max_level: the maximum cell level to consider (-1 means no restriction). * * Set the value of @g as the gradient of variable @v on the @face * weighted by the value of the @v field of the face state vector of * the corresponding cell. Variable @v is defined at the center of * mass of its cell. Linear interpolation is used to evaluate the * gradient in the vicinity of cut cells. */ /* gfs_face_cm_weighted_gradient_stencil needs to be updated whenever * this function is modified */ void gfs_face_cm_weighted_gradient (const FttCellFace * face, GfsGradient * g, guint v, gint max_level) { g_return_if_fail (face != NULL); g_return_if_fail (g != NULL); face_cm_gradient (face, g, v, max_level, TRUE); } static gboolean cell_bilinear (FttCell * cell, FttCell ** n, FttVector * o, void (*cell_pos) (const FttCell *, FttVector *), gint max_level, gdouble m[N_CELLS - 1][N_CELLS - 1]) { GfsSolidVector * s = GFS_STATE (cell)->solid; FttCellFace f; FttDirection d[FTT_DIMENSION]; FttComponent c; if ((s->s[FTT_RIGHT] == 0. && s->s[FTT_LEFT] == 0.) || (s->s[FTT_RIGHT] == 1. && s->s[FTT_LEFT] == 1.)) return FALSE; for (c = 0; c < FTT_DIMENSION; c++) d[c] = s->s[2*c] > s->s[2*c + 1] ? 2*c : 2*c + 1; f.cell = cell; f.d = d[0]; f.neighbor = cell_corner_neighbor1 (cell, d, max_level); return face_bilinear (&f, n, o, cell_pos, max_level, m); } /** * gfs_cell_dirichlet_gradient: * @cell: a #FttCell. * @v: a #GfsVariable index. * @max_level: the maximum cell level to consider (-1 means no restriction). * @v0: the Dirichlet value on the boundary. * @grad: a #FttVector. * * Fills @grad with components of the gradient of variable @v * interpolated at the center of area of the solid boundary contained * in @cell. The gradient is scaled by the size of the cell. */ /* gfs_cell_dirichlet_gradient_stencil needs to be updated whenever this function is modified */ void gfs_cell_dirichlet_gradient (FttCell * cell, guint v, gint max_level, gdouble v0, FttVector * grad) { g_return_if_fail (cell != NULL); g_return_if_fail (grad != NULL); if (!GFS_IS_MIXED (cell)) return; else { FttCell * n[N_CELLS]; gdouble m[N_CELLS - 1][N_CELLS - 1]; guint i, c; grad->x = grad->y = grad->z = 0.; if (!cell_bilinear (cell, n, &GFS_STATE (cell)->solid->ca, gfs_cell_cm, max_level, m)) return; for (i = 0; i < N_CELLS - 1; i++) for (c = 0; c < FTT_DIMENSION; c++) (&grad->x)[c] += m[c][i]*(GFS_VALUEI (n[i + 1], v) - v0); } } /** * gfs_mixed_cell_gradient: * @cell: a mixed #FttCell. * @v: a #GfsVariable. * @g: the gradient. * * Fills @g with the components of the gradient of @v at the center of * mass of @cell. * * The gradient is normalized by the size of the cell. */ void gfs_mixed_cell_gradient (FttCell * cell, GfsVariable * v, FttVector * g) { FttCell * n[N_CELLS]; gdouble m[N_CELLS - 1][N_CELLS - 1]; gdouble v0, h; FttVector * o, cm; guint i; g_return_if_fail (cell != NULL); g_return_if_fail (GFS_IS_MIXED (cell)); g_return_if_fail (v != NULL); g_return_if_fail (g != NULL); g->x = g->y = g->z = 0.; o = &GFS_STATE (cell)->solid->cm; v0 = GFS_VALUE (cell, v); cm = *o; if (v->surface_bc) { (* GFS_SURFACE_GENERIC_BC_CLASS (GTS_OBJECT (v->surface_bc)->klass)->bc) (cell, v->surface_bc); if (((cell)->flags & GFS_FLAG_DIRICHLET) != 0) { o = &GFS_STATE (cell)->solid->ca; v0 = GFS_STATE (cell)->solid->fv; } } g_assert (cell_bilinear (cell, n, o, gfs_cell_cm, -1, m)); h = ftt_cell_size (cell); cm.x = (cm.x - o->x)/h; cm.y = (cm.y - o->y)/h; cm.z = (cm.z - o->z)/h; for (i = 0; i < N_CELLS - 1; i++) { gdouble val = GFS_VALUE (n[i + 1], v) - v0; #if FTT_2D g->x += (m[0][i] + m[2][i]*cm.y)*val; g->y += (m[1][i] + m[2][i]*cm.x)*val; #else /* 3D */ g->x += (m[0][i] + m[3][i]*cm.y + m[4][i]*cm.z + m[6][i]*cm.y*cm.z)*val; g->y += (m[1][i] + m[3][i]*cm.x + m[5][i]*cm.z + m[6][i]*cm.x*cm.z)*val; g->z += (m[2][i] + m[4][i]*cm.x + m[5][i]*cm.y + m[6][i]*cm.x*cm.y)*val; #endif /* 3D */ } } /** * gfs_mixed_cell_interpolate: * @cell: a mixed #FttCell. * @p: a #FttVector. * @v: a #GfsVariable. * * Returns: the value of variable @v interpolated at position @p within @cell. */ gdouble gfs_mixed_cell_interpolate (FttCell * cell, FttVector p, GfsVariable * v) { FttCell * n[N_CELLS]; gdouble m[N_CELLS - 1][N_CELLS - 1], a[N_CELLS - 1]; gdouble v0, h; FttVector * o; guint i, j; g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (GFS_IS_MIXED (cell), 0.); g_return_val_if_fail (v != NULL, 0.); o = &GFS_STATE (cell)->solid->cm; v0 = GFS_VALUE (cell, v); if (v->surface_bc) { (* GFS_SURFACE_GENERIC_BC_CLASS (GTS_OBJECT (v->surface_bc)->klass)->bc) (cell, v->surface_bc); if (((cell)->flags & GFS_FLAG_DIRICHLET) != 0) { o = &GFS_STATE (cell)->solid->ca; v0 = GFS_STATE (cell)->solid->fv; } } g_assert (cell_bilinear (cell, n, o, gfs_cell_cm, -1, m)); for (i = 0; i < N_CELLS - 1; i++) { a[i] = 0.; for (j = 0; j < N_CELLS - 1; j++) a[i] += m[i][j]*(GFS_VALUE (n[j + 1], v) - v0); } h = ftt_cell_size (cell); p.x = (p.x - o->x)/h; p.y = (p.y - o->y)/h; #if FTT_2D return a[0]*p.x + a[1]*p.y + a[2]*p.x*p.y + v0; #else /* 3D */ p.z = (p.z - o->z)/h; return (a[0]*p.x + a[1]*p.y + a[2]*p.z + a[3]*p.x*p.y + a[4]*p.x*p.z + a[5]*p.y*p.z + a[6]*p.x*p.y*p.z + v0); #endif /* 3D */ } /** * gfs_cell_dirichlet_gradient_flux: * @cell: a #FttCell. * @v: a #GfsVariable index. * @max_level: the maximum cell level to consider (-1 means no restriction). * @v0: the Dirichlet value on the boundary. * * Returns: the flux of the gradient of variable @v through the solid * boundary contained in @cell. */ /* gfs_cell_dirichlet_gradient_flux_stencil needs to be updated whenever this function is modified */ gdouble gfs_cell_dirichlet_gradient_flux (FttCell * cell, guint v, gint max_level, gdouble v0) { g_return_val_if_fail (cell != NULL, 0.); if (!GFS_IS_MIXED (cell)) return 0.; else { GfsSolidVector * s = GFS_STATE (cell)->solid; FttVector g; gfs_cell_dirichlet_gradient (cell, v, max_level, v0, &g); return g.x*s->v.x + g.y*s->v.y + g.z*s->v.z; } } static void gfs_cell_dirichlet_gradient_stencil (FttCell * cell, gint max_level, gdouble v0, FttVector * grad, GfsLinearProblem * lp, GfsStencil * stencil, FttVector * weight) { if (GFS_IS_MIXED (cell)) { FttCell * n[N_CELLS]; gdouble m[N_CELLS - 1][N_CELLS - 1]; guint i, c; grad->x = grad->y = grad->z = 0.; if (!cell_bilinear (cell, n, &GFS_STATE (cell)->solid->ca, gfs_cell_cm, max_level, m)) return; for (i = 0; i < N_CELLS - 1; i++) for (c = 0; c < FTT_DIMENSION; c++) { gfs_stencil_add_element (stencil, n[i + 1], lp, m[c][i]*(&weight->x)[c]); (&grad->x)[c] += -m[c][i]*v0; /* Remaining Dirichlet contribution */ } } } /** * gfs_cell_dirichlet_gradient_flux_stencil: * @cell: a #FttCell. * @max_level: the maximum cell level to consider (-1 means no restriction). * @v0: the Dirichlet value on the boundary. * @lp: the #GfsLinearProblem. * @stencil: a GfsStencil. * * Returns the stencil accounting for the flux of the gradient of * a given variable through the solid boundary contained in @cell. * Returns the stencil equivalent to the action of * gfs_cell_dirichlet_gradient_flux(). * * Returns: the flux of the gradient of variable @v through the solid * boundary contained in @cell. */ gdouble gfs_cell_dirichlet_gradient_flux_stencil (FttCell * cell, gint max_level, gdouble v0, GfsLinearProblem * lp, GfsStencil * stencil) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (lp != NULL, 0.); g_return_val_if_fail (stencil != NULL, 0.); if (!GFS_IS_MIXED (cell)) return 0.; else { GfsSolidVector * s = GFS_STATE (cell)->solid; FttVector g; gfs_cell_dirichlet_gradient_stencil (cell, max_level, v0, &g, lp, stencil, &s->v); return g.x*s->v.x + g.y*s->v.y + g.z*s->v.z; } } /** * gfs_cell_dirichlet_value: * @cell: a #FttCell. * @v: a #GfsVariable. * @max_level: the maximum cell level to consider (-1 means no restriction). * * Returns: the value of variable @v interpolated at the center of * area of the solid boundary contained in @cell. */ gdouble gfs_cell_dirichlet_value (FttCell * cell, GfsVariable * v, gint max_level) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (v != NULL, 0.); if (!GFS_IS_MIXED (cell)) return 0.; else { FttCell * n[N_CELLS]; FttVector p; gdouble m[N_CELLS - 1][N_CELLS - 1], a[N_CELLS - 1]; GfsSolidVector * s = GFS_STATE (cell)->solid; gdouble v0, size = ftt_cell_size (cell); void (* cell_pos) (const FttCell *, FttVector *) = v->centered ? ftt_cell_pos : gfs_cell_cm; guint i, j; (*cell_pos) (cell, &p); if (!cell_bilinear (cell, n, &p, cell_pos, max_level, m)) return 0.; v0 = GFS_VALUE (cell, v); for (i = 0; i < N_CELLS - 1; i++) { a[i] = 0.; for (j = 0; j < N_CELLS - 1; j++) a[i] += m[i][j]*(GFS_VALUE (n[j + 1], v) - v0); } p.x = (s->ca.x - p.x)/size; p.y = (s->ca.y - p.y)/size; #if FTT_2D return (a[0]*p.x + a[1]*p.y + a[2]*p.x*p.y + v0); #else /* 3D */ p.z = (s->ca.z - p.z)/size; return (a[0]*p.x + a[1]*p.y + a[2]*p.z + a[3]*p.x*p.y + a[4]*p.x*p.z + a[5]*p.y*p.z + a[6]*p.x*p.y*p.z + v0); #endif /* 3D */ } } /** * gfs_shear_strain_rate_tensor: * @cell: a #FttCell. * @u: the velocity. * @t: the shear strain rate tensor t[i][j] = (d_iu_j+d_ju_i)/2. * * Fills @t with the shear strain rate tensor at the center of mass of * @cell, normalised by the size of the cell. */ void gfs_shear_strain_rate_tensor (FttCell * cell, GfsVariable ** u, gdouble t[FTT_DIMENSION][FTT_DIMENSION]) { guint i, j; FttVector g[FTT_DIMENSION]; g_return_if_fail (cell != NULL); g_return_if_fail (u != NULL); for (i = 0; i < FTT_DIMENSION; i++) if (GFS_IS_MIXED (cell)) gfs_mixed_cell_gradient (cell, u[i], &g[i]); else for (j = 0; j < FTT_DIMENSION; j++) (&g[i].x)[j] = gfs_center_gradient (cell, j, u[i]->i); for (i = 0; i < FTT_DIMENSION; i++) { t[i][i] = (&g[i].x)[i]; for (j = i + 1; j < FTT_DIMENSION; j++) t[i][j] = ((&g[j].x)[i] + (&g[i].x)[j])/2.; } for (i = 0; i < FTT_DIMENSION; i++) for (j = 0; j < i; j++) t[i][j] = t[j][i]; } /** * gfs_2nd_principal_invariant: * @cell: a #FttCell. * @u: the velocity. * * Returns: the second principal invariant of the shear strain rate * tensor of @cell: sqrt(D:D). */ gdouble gfs_2nd_principal_invariant (FttCell * cell, GfsVariable ** u) { gdouble t[FTT_DIMENSION][FTT_DIMENSION]; gdouble D = 0.; guint i, j; g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (u != NULL, 0.); gfs_shear_strain_rate_tensor (cell, u, t); for (i = 0; i < FTT_DIMENSION; i++) for (j = 0; j < FTT_DIMENSION; j++) D += t[i][j]*t[i][j]; return sqrt (D); } /** * gfs_get_from_below_intensive: * @cell: a #FttCell. * @v: a #GfsVariable to "get from below". * * Sets the value of the "intensive" variable @v of @cell by taking * the volume weighted average of the values of its children cells. * * This functions fails if @cell is a leaf of the cell tree. */ void gfs_get_from_below_intensive (FttCell * cell, const GfsVariable * v) { gdouble val = 0., sa = 0.; guint i; FttCellChildren child; g_return_if_fail (cell != NULL); g_return_if_fail (!FTT_CELL_IS_LEAF (cell)); g_return_if_fail (v != NULL); ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i] && GFS_HAS_DATA (child.c[i], v)) { gdouble a = gfs_domain_cell_fraction (v->domain, child.c[i]); val += GFS_VALUE (child.c[i], v)*a; sa += a; } if (sa > 0.) GFS_VALUE (cell, v) = val/sa; else GFS_VALUE (cell, v) = GFS_NODATA; } /** * gfs_cell_coarse_fine: * @parent: a #FttCell. * @v: a #GfsVariable. * * Initializes @v on the children of @parent using interpolation. * * First-order interpolation (straight injection) is used for boundary * cells and second-order interpolation for the other cells. */ void gfs_cell_coarse_fine (FttCell * parent, GfsVariable * v) { FttCellChildren child; guint n; g_return_if_fail (parent != NULL); g_return_if_fail (!FTT_CELL_IS_LEAF (parent)); g_return_if_fail (v != NULL); ftt_cell_children (parent, &child); for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) GFS_VALUE (child.c[n], v) = GFS_VALUE (parent, v); if (!GFS_CELL_IS_BOUNDARY (parent) && GFS_HAS_DATA (parent, v)) { FttVector g; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&g.x)[c] = gfs_center_van_leer_gradient (parent, c, v->i); if (v->domain->cell_metric) { gdouble a[FTT_CELLS], sa = 0.; for (n = 0; n < FTT_CELLS; n++) { a[n] = (* v->domain->cell_metric) (v->domain, child.c[n]); sa += a[n]; } g_assert (sa > 0.); sa *= 2.; #if FTT_2D double gx1 = g.x*(a[0] + a[2])/sa, gx2 = - g.x*(a[1] + a[3])/sa; double gy1 = g.y*(a[2] + a[3])/sa, gy2 = - g.y*(a[0] + a[1])/sa; GFS_VALUE (child.c[0], v) += gx2 + gy1; GFS_VALUE (child.c[1], v) += gx1 + gy1; GFS_VALUE (child.c[2], v) += gx2 + gy2; GFS_VALUE (child.c[3], v) += gx1 + gy2; #else /* 3D */ double gx1 = g.x*(a[0] + a[2])/sa, gx2 = - g.x*(a[1] + a[3])/sa; double gx3 = g.x*(a[4] + a[6])/sa, gx4 = - g.x*(a[5] + a[7])/sa; double gy1 = g.y*(a[2] + a[3])/sa, gy2 = - g.y*(a[0] + a[1])/sa; double gy3 = g.y*(a[6] + a[7])/sa, gy4 = - g.y*(a[4] + a[5])/sa; double gz1 = g.z*(a[2] + a[6])/sa, gz2 = - g.z*(a[0] + a[4])/sa; double gz3 = g.z*(a[3] + a[7])/sa, gz4 = - g.z*(a[1] + a[5])/sa; GFS_VALUE (child.c[0], v) += gx2 + gy1 + gz1; GFS_VALUE (child.c[1], v) += gx1 + gy1 + gz1; GFS_VALUE (child.c[2], v) += gx2 + gy2 + gz1; GFS_VALUE (child.c[3], v) += gx1 + gy2 + gz1; GFS_VALUE (child.c[4], v) += gx2 + gy1 + gz2; GFS_VALUE (child.c[5], v) += gx1 + gy1 + gz2; GFS_VALUE (child.c[6], v) += gx2 + gy2 + gz2; GFS_VALUE (child.c[7], v) += gx1 + gy2 + gz2; #endif /* 3D */ } else for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) { FttVector p; ftt_cell_relative_pos (child.c[n], &p); for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (child.c[n], v) += (&p.x)[c]*(&g.x)[c]; } } } /** * gfs_cell_cleanup: * @cell: a #FttCell. * @domain: a #GfsDomain. * * Frees the memory allocated for extra data associated with @cell. * * This function must be used as "cleanup function" when using * ftt_cell_destroy(). */ void gfs_cell_cleanup (FttCell * cell, GfsDomain * domain) { g_return_if_fail (cell != NULL); g_return_if_fail (domain != NULL); if (cell->data) { GSList * i = domain->variables; while (i) { GfsVariable * v = i->data; if (v->cleanup) (* v->cleanup) (cell, v); i = i->next; } if (GFS_STATE (cell)->solid) { g_free (GFS_STATE (cell)->solid); GFS_STATE (cell)->solid = NULL; } } g_free (cell->data); cell->data = NULL; } /** * gfs_cell_reset: * @cell: a #FttCell. * @v: a #GfsVariable to reset. * * Sets the value of the variable @v of @cell to zero. */ void gfs_cell_reset (FttCell * cell, GfsVariable * v) { g_return_if_fail (cell != NULL); g_return_if_fail (v != NULL); GFS_VALUE (cell, v) = 0.; } /** * gfs_face_reset: * @face: a #FttCellFace. * @v: a #GfsVariable to reset. * * Sets the value of the variable @v of @face to zero (on both sides). */ void gfs_face_reset (FttCellFace * face, GfsVariable * v) { g_return_if_fail (face != NULL); g_return_if_fail (v != NULL); GFS_VALUE (face->cell, v) = GFS_VALUE (face->neighbor, v) = 0.; } static void add_stats (const FttCell * cell, gpointer * data) { GtsRange * s = data[0]; gdouble v = GFS_VALUE (cell, GFS_VARIABLE (data[1])); if (v != GFS_NODATA) gts_range_add_value (s, v); } /** * gfs_stats_variable: * @root: the root #FttCell of the tree to obtain statistics from. * @v: the variable to consider for statistics. * @flags: which types of cells are to be visited. * @max_depth: maximum depth of the traversal. * * Traverses the cell tree defined by @root using ftt_cell_traverse() * and gathers statistics about variable @v. * * Returns: a #GtsRange containing the statistics about @v. */ GtsRange gfs_stats_variable (FttCell * root, GfsVariable * v, FttTraverseFlags flags, gint max_depth) { GtsRange s; gpointer data[2]; g_return_val_if_fail (root != NULL, s); g_return_val_if_fail (v != NULL, s); gts_range_init (&s); data[0] = &s; data[1] = v; ftt_cell_traverse (root, FTT_PRE_ORDER, flags, max_depth, (FttCellTraverseFunc) add_stats, data); gts_range_update (&s); return s; } static void add_norm (const FttCell * cell, gpointer * data) { GfsNorm * n = data[0]; GfsVariable * v = data[1]; gfs_norm_add (n, GFS_VALUE (cell, v), gfs_cell_volume (cell, v->domain)); } /** * gfs_norm_variable: * @root: the root #FttCell of the tree to obtain norm from. * @v: the variable to consider for norm statistics. * @flags: which types of cells are to be visited. * @max_depth: maximum depth of the traversal. * * Traverses the cell tree defined by @root using ftt_cell_traverse() * and gathers norm statistics about variable @v. * * Returns: a #GfsNorm containing the norm statistics about @v. */ GfsNorm gfs_norm_variable (FttCell * root, GfsVariable * v, FttTraverseFlags flags, gint max_depth) { GfsNorm n; gpointer data[2]; g_return_val_if_fail (root != NULL, n); g_return_val_if_fail (v != NULL, n); gfs_norm_init (&n); data[0] = &n; data[1] = v; ftt_cell_traverse (root, FTT_PRE_ORDER, flags, max_depth, (FttCellTraverseFunc) add_norm, data); gfs_norm_update (&n); return n; } /** * gfs_norm_init: * @n: a #GfsNorm. * * Initializes a #GfsNorm. */ void gfs_norm_init (GfsNorm * n) { g_return_if_fail (n != NULL); n->bias = n->first = n->second = 0.; n->infty = - G_MAXDOUBLE; n->w = 0.; } /** * gfs_norm_reset: * @n: a #GfsNorm. * * Sets all the fields of @n to 0. */ void gfs_norm_reset (GfsNorm * n) { g_return_if_fail (n != NULL); n->bias = n->first = n->second = 0.; n->infty = 0.; n->w = 0.; } /** * gfs_norm_add: * @n: a #GfsNorm. * @val: a value to add to @n. * @weight: weight of @val. * * Adds @val to @n. */ void gfs_norm_add (GfsNorm * n, gdouble val, gdouble weight) { g_return_if_fail (n != NULL); if (val != GFS_NODATA) { n->bias += weight*val; val = fabs (val); if (weight != 0. && val > n->infty) n->infty = val; n->first += weight*val; n->second += weight*val*val; n->w += weight; } } /** * gfs_norm_update: * @n: a #GfsNorm. * * Updates the fields of @n. */ void gfs_norm_update (GfsNorm * n) { g_return_if_fail (n != NULL); if (n->w > 0.0) { n->bias /= n->w; n->first /= n->w; n->second = sqrt (n->second/n->w); } else n->infty = 0.0; } /** * gfs_face_interpolated_value: * @face: a #FttFace. * @v: a #GfsVariable index. * * Computes the value of variable @v on the @face using second-order * interpolation from the cell-centered values. * * Note that this function cannot be called for coarse -> fine faces * (use gfs_face_interpolated_value_generic() instead). * * Returns: the value of variable @v on the face. */ gdouble gfs_face_interpolated_value (const FttCellFace * face, guint v) { gdouble x1 = 1., v1; #if 1 g_return_val_if_fail (face != NULL, 0.); if (face->neighbor) { g_assert (FTT_CELL_IS_LEAF (face->neighbor) || ftt_cell_level (face->neighbor) < ftt_cell_level (face->cell)); v1 = gfs_neighbor_value (face, v, &x1); return ((x1 - 0.5)*GFS_VALUEI (face->cell, v) + 0.5*v1)/x1; } else return GFS_VALUEI (face->cell, v); #else gdouble v0; FttCellFace f2; g_return_val_if_fail (face != NULL, 0.); v0 = GFS_VALUEI (face->cell, v); v1 = gfs_neighbor_value (face, v, &x1); f2 = gfs_cell_face (face->cell, FTT_OPPOSITE_DIRECTION (face->d)); if (f2.neighbor) { gdouble x2 = 1.; gdouble v2 = gfs_neighbor_value (&f2, v, &x2); return v0 + (x2*(v1 - v0)*(1. + 2.*x2) - x1*(v0 - v2)*(1. - 2.*x1)) /(4.*x1*x2*(x1 + x2)); } else return ((x1 - 0.5)*v0 + 0.5*v1)/x1; #endif } /** * gfs_face_interpolated_value_generic: * @face: a #FttFace. * @v: a #GfsVariable. * * Same as gfs_face_interpolated_value() but also works for coarse -> * fine faces. * * Returns: the value of variable @v on the face. */ gdouble gfs_face_interpolated_value_generic (const FttCellFace * face, const GfsVariable * v) { g_return_val_if_fail (face != NULL, 0.); g_return_val_if_fail (v != NULL, 0.); if (!face->neighbor || FTT_CELL_IS_LEAF (face->neighbor) || ftt_cell_level (face->neighbor) < ftt_cell_level (face->cell)) return gfs_face_interpolated_value (face, v->i); else { /* finer neighbor */ FttCellFace f = { NULL, face->cell, FTT_OPPOSITE_DIRECTION (face->d) }; FttCellChildren child; int i, n = ftt_cell_children_direction (face->neighbor, f.d, &child); gdouble avg = 0.; for (i = 0; i < n; i++) if (child.c[i]) { f.cell = child.c[i]; avg += gfs_face_interpolated_value (&f, v->i)*gfs_domain_face_fraction (v->domain, &f); } return avg == 0. ? 0. : avg/(gfs_domain_face_fraction (v->domain, face)*n); } } /** * gfs_face_weighted_interpolated_value: * @face: a #FttFace. * @v: a #GfsVariable index. * * Computes the value of variable @v on the @face weighted by the * value of the @v field of the face state vector using interpolation * from the cell-centered values. The value returned is second order * accurate in space and conservative, in the sense that values at a * coarse/fine cell boundary are consistent. * * Returns: the weighted value of variable @v on the face. */ gdouble gfs_face_weighted_interpolated_value (const FttCellFace * face, guint v) { g_return_val_if_fail (face != NULL, 0.); if (face->neighbor) { if (FTT_CELL_IS_LEAF (face->neighbor)) { gdouble w = GFS_STATE (face->cell)->f[face->d].v, x1 = 1., v1; v1 = gfs_neighbor_value (face, v, &x1); return w*((x1 - 0.5)*GFS_VALUEI (face->cell, v) + 0.5*v1)/x1; } else { /* neighbor is at a deeper level */ FttCellChildren children; FttCellFace f; gdouble val = 0.; guint i, n; f.d = FTT_OPPOSITE_DIRECTION (face->d); n = ftt_cell_children_direction (face->neighbor, f.d, &children); f.neighbor = face->cell; for (i = 0; i < n; i++) if ((f.cell = children.c[i])) { gdouble w = GFS_STATE (f.cell)->f[f.d].v, x1 = 1., v1; v1 = gfs_neighbor_value (&f, v, &x1); val += w*v1; } return val/n; } } else return GFS_STATE (face->cell)->f[face->d].v*GFS_VALUEI (face->cell, v); } /** * gfs_normal_divergence: * @cell: a #FttCell. * @v: a #GfsVariable. * * Adds to variable @v of @cell the integral of the divergence * of the (MAC) velocity field in this cell. */ void gfs_normal_divergence (FttCell * cell, GfsVariable * v) { FttCellFace face; gdouble div = 0.; g_return_if_fail (cell != NULL); g_return_if_fail (v != NULL); face.cell = cell; for (face.d = 0; face.d < FTT_NEIGHBORS; face.d++) div += (FTT_FACE_DIRECT (&face) ? 1. : -1.)* GFS_STATE (cell)->f[face.d].un*gfs_domain_face_fraction (v->domain, &face); GFS_VALUE (cell, v) = div*ftt_cell_size (cell); } /** * gfs_normal_divergence_2D: * @cell: a #FttCell. * @v: a #GfsVariable. * * Fills variable @v of @cell with the integral of the 2D * divergence of the (MAC) velocity field in this cell. */ void gfs_normal_divergence_2D (FttCell * cell, GfsVariable * v) { FttCellFace face; gdouble div = 0.; g_return_if_fail (cell != NULL); g_return_if_fail (v != NULL); face.cell = cell; for (face.d = 0; face.d < 4; face.d++) div += (FTT_FACE_DIRECT (&face) ? 1. : -1.)* GFS_STATE (cell)->f[face.d].un*gfs_domain_face_fraction (v->domain, &face); GFS_VALUE (cell, v) = div*ftt_cell_size (cell); } /** * gfs_divergence: * @cell: a #FttCell. * @v: the components of the vector. * * Returns: the divergence of the (centered) vector field @v in @cell. */ gdouble gfs_divergence (FttCell * cell, GfsVariable ** v) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (v != NULL, 0.); GfsDomain * domain = v[0]->domain; gdouble div = 0.; FttCellNeighbors n; ftt_cell_neighbors (cell, &n); FttCellFace f; f.cell = cell; for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) if (n.c[f.d]) { f.neighbor = n.c[f.d]; div += gfs_domain_face_fraction (domain, &f)* (FTT_FACE_DIRECT (&f) ? 1. : -1.)*gfs_face_interpolated_value_generic (&f, v[f.d/2]); } return div/(gfs_domain_cell_fraction (domain, cell)*ftt_cell_size (cell)); } /** * gfs_vorticity: * @cell: a #FttCell. * @v: the components of the vector. * * Returns: the vorticity (norm of the vorticity vector in 3D) of the * vector field @v in @cell. */ gdouble gfs_vorticity (FttCell * cell, GfsVariable ** v) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (v != NULL, 0.); #if FTT_2D if (GFS_IS_MIXED (cell) || GFS_IS_AXI (v[0]->domain)) /* fixme: the formulation below should also work (better) for solid cells */ return (gfs_center_gradient (cell, FTT_X, v[1]->i) - gfs_center_gradient (cell, FTT_Y, v[0]->i))/ftt_cell_size (cell); else { FttCellNeighbors n; ftt_cell_neighbors (cell, &n); FttCellFace f = { cell }; double circ = 0.; f.d = FTT_RIGHT; f.neighbor = n.c[f.d]; circ += gfs_face_interpolated_value_generic (&f, v[1])* gfs_domain_face_fraction (v[0]->domain, &f); f.d = FTT_LEFT; f.neighbor = n.c[f.d]; circ -= gfs_face_interpolated_value_generic (&f, v[1])* gfs_domain_face_fraction (v[0]->domain, &f); f.d = FTT_TOP; f.neighbor = n.c[f.d]; circ -= gfs_face_interpolated_value_generic (&f, v[0])* gfs_domain_face_fraction (v[0]->domain, &f); f.d = FTT_BOTTOM; f.neighbor = n.c[f.d]; circ += gfs_face_interpolated_value_generic (&f, v[0])* gfs_domain_face_fraction (v[0]->domain, &f); /* vorticity is circulation over area */ return circ*ftt_cell_size (cell)/gfs_cell_volume (cell, v[0]->domain); } #else /* FTT_3D */ /* fixme: does not work with metric */ FttVector vort; vort.x = (gfs_center_gradient (cell, FTT_Y, v[2]->i) - gfs_center_gradient (cell, FTT_Z, v[1]->i)); vort.y = (gfs_center_gradient (cell, FTT_Z, v[0]->i) - gfs_center_gradient (cell, FTT_X, v[2]->i)); vort.z = (gfs_center_gradient (cell, FTT_X, v[1]->i) - gfs_center_gradient (cell, FTT_Y, v[0]->i)); return sqrt (vort.x*vort.x + vort.y*vort.y + vort.z*vort.z)/ftt_cell_size (cell); #endif /* FTT_3D */ } /** * gfs_vector_norm2: * @cell: a #FttCell. * @v: the components of the vector. * * Returns: the squared norm of the vector field @v in @cell. */ gdouble gfs_vector_norm2 (FttCell * cell, GfsVariable ** v) { FttComponent c; gdouble n = 0.; g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (v != NULL, 0.); for (c = 0; c < FTT_DIMENSION; c++) n += GFS_VALUE (cell, v[c])*GFS_VALUE (cell, v[c]); return n; } /** * gfs_vector_norm: * @cell: a #FttCell. * @v: the components of the vector. * * Returns: the norm of the vector field @v in @cell. */ gdouble gfs_vector_norm (FttCell * cell, GfsVariable ** v) { return sqrt (gfs_vector_norm2 (cell, v)); } /** * gfs_vector_lambda2: * @cell: a #FttCell. * @v: the components of the vector. * * Returns: The value of the lambda2 eigenvalue used by Jeong and * Hussain as vortex criterion (JFM 285, 69-94, 1995), normalized by * the square of the size of the cell. */ gdouble gfs_vector_lambda2 (FttCell * cell, GfsVariable ** v) { gdouble J[FTT_DIMENSION][FTT_DIMENSION]; gdouble S2O2[FTT_DIMENSION][FTT_DIMENSION]; gdouble lambda[FTT_DIMENSION], ev[FTT_DIMENSION][FTT_DIMENSION]; guint i, j, k; g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (v != NULL, 0.); for (i = 0; i < FTT_DIMENSION; i++) for (j = 0; j < FTT_DIMENSION; j++) J[i][j] = gfs_center_gradient (cell, j, v[i]->i); for (i = 0; i < FTT_DIMENSION; i++) for (j = 0; j < FTT_DIMENSION; j++) { S2O2[i][j] = 0.; for (k = 0; k < FTT_DIMENSION; k++) S2O2[i][j] += J[i][k]*J[k][j] + J[k][i]*J[j][k]; } gfs_eigenvalues (S2O2, lambda, ev); return lambda[1]/2.; } /** * gfs_pressure_force: * @cell: a #FttCell. * @p: a #GfsVariable. * @f: a #FttVector. * * Fills @f with the pressure @p component of the force exerted by the * fluid on the fraction of embedded boundary contained in @cell. */ void gfs_pressure_force (FttCell * cell, GfsVariable * p, FttVector * f) { GfsSolidVector * s; g_return_if_fail (cell != NULL); g_return_if_fail (p != NULL); g_return_if_fail (f != NULL); if ((s = GFS_STATE (cell)->solid)) { gdouble size = ftt_cell_size (cell); gdouble pv = gfs_cell_dirichlet_value (cell, p, -1)*size; FttComponent c; #if (!FTT_2D) pv *= size; #endif /* 3D */ gfs_solid_normal (cell, f); for (c = 0; c < FTT_DIMENSION; c++) (&f->x)[c] *= pv; } else f->x = f->y = f->z = 0.; } static void cell_traverse_mixed (FttCell * cell, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseFunc func, gpointer data) { if (!GFS_IS_MIXED (cell)) return; if (order == FTT_PRE_ORDER && (flags == FTT_TRAVERSE_ALL || ((flags & FTT_TRAVERSE_LEAFS) != 0 && FTT_CELL_IS_LEAF (cell)) || ((flags & FTT_TRAVERSE_NON_LEAFS) != 0 && !FTT_CELL_IS_LEAF (cell)))) (* func) (cell, data); if (!FTT_CELL_IS_LEAF (cell)) { struct _FttOct * children = cell->children; guint n; for (n = 0; n < FTT_CELLS; n++) { FttCell * c = &(children->cell[n]); if (!FTT_CELL_IS_DESTROYED (c)) cell_traverse_mixed (c, order, flags, func, data); } } if (order == FTT_POST_ORDER && (flags == FTT_TRAVERSE_ALL || ((flags & FTT_TRAVERSE_LEAFS) != 0 && FTT_CELL_IS_LEAF (cell)) || ((flags & FTT_TRAVERSE_NON_LEAFS) != 0 && !FTT_CELL_IS_LEAF (cell)))) (* func) (cell, data); } /** * gfs_cell_traverse_mixed: * @root: the root #FttCell of the tree to traverse. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Traverses a cell tree starting at the given root #FttCell. Calls * the given function for each mixed cell. */ void gfs_cell_traverse_mixed (FttCell * root, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseFunc func, gpointer data) { g_return_if_fail (root != NULL); g_return_if_fail (func != NULL); cell_traverse_mixed (root, order, flags, func, data); } #if FTT_2D static FttDirection corner[4][FTT_DIMENSION] = { { FTT_LEFT, FTT_BOTTOM }, { FTT_RIGHT, FTT_BOTTOM }, { FTT_RIGHT, FTT_TOP }, { FTT_LEFT, FTT_TOP } }; #else /* 3D */ static FttDirection corner[8][FTT_DIMENSION] = { { FTT_LEFT, FTT_BOTTOM, FTT_FRONT }, { FTT_RIGHT, FTT_BOTTOM, FTT_FRONT }, { FTT_RIGHT, FTT_TOP, FTT_FRONT }, { FTT_LEFT, FTT_TOP, FTT_FRONT }, { FTT_LEFT, FTT_BOTTOM, FTT_BACK }, { FTT_RIGHT, FTT_BOTTOM, FTT_BACK }, { FTT_RIGHT, FTT_TOP, FTT_BACK }, { FTT_LEFT, FTT_TOP, FTT_BACK } }; #endif /* 3D */ /** * gfs_cell_corner_values: * @cell: a #FttCell containing location @p. * @v: a #GfsVariable. * @max_level: the maximum cell level to consider (-1 means no restriction). * @f: an array with the correct size (4*(FTT_DIMENSION - 1) + 1). * * Fills @f with the values of @v interpolated at the corners of @cell. */ void gfs_cell_corner_values (FttCell * cell, GfsVariable * v, gint max_level, gdouble f[4*(FTT_DIMENSION - 1) + 1]) { g_return_if_fail (cell != NULL); g_return_if_fail (v != NULL); g_return_if_fail (f != NULL); int i; for (i = 0; i < 4*(FTT_DIMENSION - 1); i++) f[i] = gfs_cell_corner_value (cell, corner[i], v, max_level); f[4*(FTT_DIMENSION - 1)] = GFS_VALUE (cell, v); } /** * gfs_interpolate_from_corners: * @cell: a #FttCell containing location @p. * @p: the location at which to interpolate. * @f: values at the corners of @cell. * * Returns: the interpolated value at location @p. */ gdouble gfs_interpolate_from_corners (FttCell * cell, FttVector p, gdouble * f) { FttVector o; gdouble size; g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (f != NULL, 0.); ftt_cell_pos (cell, &o); size = ftt_cell_size (cell)/2.; p.x = (p.x - o.x)/size; p.y = (p.y - o.y)/size; #if FTT_2D gdouble x = (p.x + p.y)/2., y = (p.y - p.x)/2., v = f[4]; if (x > 0.) v += x*(f[2] - f[4]); else v -= x*(f[0] - f[4]); if (y > 0.) v += y*(f[3] - f[4]); else v -= y*(f[1] - f[4]); return v; #else /* 3D */ gdouble c[8]; p.z = (p.z - o.z)/size; c[0] = - f[0] + f[1] + f[2] - f[3] - f[4] + f[5] + f[6] - f[7]; c[1] = - f[0] - f[1] + f[2] + f[3] - f[4] - f[5] + f[6] + f[7]; c[2] = f[0] + f[1] + f[2] + f[3] - f[4] - f[5] - f[6] - f[7]; c[3] = f[0] - f[1] + f[2] - f[3] + f[4] - f[5] + f[6] - f[7]; c[4] = - f[0] + f[1] + f[2] - f[3] + f[4] - f[5] - f[6] + f[7]; c[5] = - f[0] - f[1] + f[2] + f[3] + f[4] + f[5] - f[6] - f[7]; c[6] = f[0] - f[1] + f[2] - f[3] - f[4] + f[5] - f[6] + f[7]; c[7] = f[0] + f[1] + f[2] + f[3] + f[4] + f[5] + f[6] + f[7]; return (c[0]*p.x + c[1]*p.y + c[2]*p.z + c[3]*p.x*p.y + c[4]*p.x*p.z + c[5]*p.y*p.z + c[6]*p.x*p.y*p.z + c[7])/8.; #endif /* 3D */ } /** * gfs_interpolate: * @cell: a #FttCell containing location @p. * @p: the location at which to interpolate. * @v: a #GfsVariable. * * Interpolates the @v variable of @cell, at location @p. Linear * interpolation is used and the boundaries of the domain are treated * as planes of symmetry for all variables. * * Returns: the interpolated value of variable @v at location @p. */ gdouble gfs_interpolate (FttCell * cell, FttVector p, GfsVariable * v) { g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (v != NULL, 0.); if (GFS_VALUE (cell, v) == GFS_NODATA) return GFS_NODATA; gdouble f[4*(FTT_DIMENSION - 1) + 1]; gfs_cell_corner_values (cell, v, -1, f); return gfs_interpolate_from_corners (cell, p, f); } /** * gfs_interpolate_stencil: * @cell: a #FttCell. * @v: a #GfsVariable. * * Sets to 1. the @v variable of all the cells which would be used by * a call to gfs_interpolate(). */ void gfs_interpolate_stencil (FttCell * cell, GfsVariable * v) { guint i; g_return_if_fail (cell != NULL); g_return_if_fail (v != NULL); for (i = 0; i < (FTT_DIMENSION == 2 ? 4 : 8); i++) { GfsInterpolator inter; guint j; gfs_cell_corner_interpolator (cell, corner[i], -1, TRUE, &inter); for (j = 0; j < inter.n; j++) GFS_VALUE (inter.c[j], v) = 1.; } } /** * gfs_center_curvature: * @cell: a #FttCell. * @c: a component. * @v: a #GfsVariable index. * * The curvature is normalized by the square of the size of the cell. * * Returns: the value of the @c component of the curvature of variable @v * at the center of the cell. */ gdouble gfs_center_curvature (FttCell * cell, FttComponent c, guint v) { FttCellFace f; GfsGradient g = { 0., 0. }; g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (c < FTT_DIMENSION, 0.); if (GFS_IS_MIXED (cell)) return 0.; f.cell = cell; for (f.d = 2*c; f.d <= 2*c + 1; f.d++) if ((f.neighbor = ftt_cell_neighbor (cell, f.d))) { GfsGradient e; gfs_face_gradient (&f, &e, v, -1); g.a += e.a; g.b += e.b; } return g.b - g.a*GFS_VALUEI (cell, v); } /** * gfs_streamline_curvature: * @cell: a #FttCell. * @v: the components of the vector. * * The curvature is normalized by the size of the cell. * * Returns: the value of the curvature of the streamline defined by @v passing * through the center of the cell. */ gdouble gfs_streamline_curvature (FttCell * cell, GfsVariable ** v) { gdouble u2; g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (v != NULL, 0.); u2 = gfs_vector_norm2 (cell, v); if (u2 == 0.) return 0.; else { FttComponent i; gdouble ugu = 0.; for (i = 0; i < FTT_DIMENSION; i++) { FttComponent j; gdouble ugui = 0.; for (j = 0; j < FTT_DIMENSION; j++) ugui += GFS_VALUE (cell, v[j])*gfs_center_gradient (cell, j, v[i]->i); ugu += ugui*ugui; } return sqrt (ugu)/u2; } } static FttCell * cell_corner_neighbor (FttCell * cell, FttDirection * d, gint max_level, gboolean * t_junction) { FttCell * neighbor = ftt_cell_neighbor (cell, d[0]); if (!neighbor) return NULL; else { guint level = ftt_cell_level (cell); if (ftt_cell_level (neighbor) < level) { /* neighbor is at a shallower level */ if (ftt_cell_child_corner (ftt_cell_parent (cell), d) != cell) *t_junction = TRUE; return neighbor; } else { if (level == max_level || FTT_CELL_IS_LEAF (neighbor)) /* neighbor is at the same level */ return neighbor; else { /* neighbor is at a deeper level */ FttCell * n; guint i; FttDirection d1[FTT_DIMENSION]; d1[0] = FTT_OPPOSITE_DIRECTION (d[0]); for (i = 1; i < FTT_DIMENSION; i++) d1[i] = d[i]; n = ftt_cell_child_corner (neighbor, d1); return n ? n : neighbor; } } } } static void interpolator_merge (GfsInterpolator * a, GfsInterpolator * b) { guint i; for (i = 0; i < b->n; i++) { FttCell * c = b->c[i]; guint j; for (j = 0; j < a->n && c != a->c[j]; j++) ; if (j < a->n) a->w[j] += b->w[i]; else { #if FTT_2D g_assert (j < 7); #else g_assert (j < 29); #endif a->c[j] = c; a->w[j] = b->w[i]; a->n++; } } } static void interpolator_scale (GfsInterpolator * a, gdouble b) { guint i; for (i = 0; i < a->n; i++) a->w[i] *= b; } static void t_junction_interpolator (FttCell * cell, FttDirection * d, FttCell * n, gint max_level, gboolean centered, GfsInterpolator * inter) { FttDirection d1[FTT_DIMENSION]; GfsInterpolator a; d1[0] = FTT_OPPOSITE_DIRECTION (d[0]); #if FTT_2D d1[1] = d[1]; gfs_cell_corner_interpolator (n, d1, max_level, centered, inter); d1[1] = FTT_OPPOSITE_DIRECTION (d[1]); gfs_cell_corner_interpolator (n, d1, max_level, centered, &a); interpolator_merge (inter, &a); interpolator_scale (inter, 0.5); #else /* 3D */ d1[1] = d[1]; d1[2] = d[2]; gfs_cell_corner_interpolator (n, d1, max_level, centered, inter); if (ftt_cell_neighbor_is_brother (cell, d[1])) { d1[1] = FTT_OPPOSITE_DIRECTION (d[1]); gfs_cell_corner_interpolator (n, d1, max_level, centered, &a); interpolator_merge (inter, &a); if (ftt_cell_neighbor_is_brother (cell, d[2])) { d1[2] = FTT_OPPOSITE_DIRECTION (d[2]); gfs_cell_corner_interpolator (n, d1, max_level, centered, &a); interpolator_merge (inter, &a); d1[1] = d[1]; gfs_cell_corner_interpolator (n, d1, max_level, centered, &a); interpolator_merge (inter, &a); interpolator_scale (inter, 0.25); } else interpolator_scale (inter, 0.5); } else { d1[2] = FTT_OPPOSITE_DIRECTION (d[2]); gfs_cell_corner_interpolator (n, d1, max_level, centered, &a); interpolator_merge (inter, &a); interpolator_scale (inter, 0.5); } #endif /* 3D */ } static gboolean do_path (FttCell * cell, gint i, FttCell * n[N_CELLS], FttDirection * d, gint max_level, gboolean centered, GfsInterpolator * inter) { /* paths from each cell to neighbors. Cell indices are as in doc/figures/indices.fig first index: cell index second index: path index third index: < FTT_DIMENSION: directions. = FTT_DIMENSION: neighboring cell index */ static gint path[N_CELLS][FTT_DIMENSION][FTT_DIMENSION + 1] = { #if FTT_2D {{1,2,1}, {2,1,2}}, {{2,-1,3}, {-1,2,0}}, {{1,-2,3}, {-2,1,0}}, {{-1,-2,2}, {-2,-1,1}} #else /* 3D */ {{1,2,3,1}, {2,1,3,2}, {3,1,2,4}}, {{2,3,-1,3}, {3,2,-1,5}, {-1,2,3,0}}, {{1,-2,3,3}, {3,-2,1,6}, {-2,3,1,0}}, {{3,-1,-2,7}, {-2,-1,3,1}, {-1,-2,3,2}}, {{2,1,-3,6}, {1,2,-3,5}, {-3,1,2,0}}, {{2,-1,-3,7}, {-1,2,-3,4}, {-3,2,-1,1}}, {{1,-2,-3,7}, {-2,1,-3,4}, {-3,1,-2,2}}, {{-1,-2,-3,6}, {-2,-1,-3,5}, {-3,-1,-2,3}} #endif /* 3D */ }; guint j; for (j = 0; j < FTT_DIMENSION; j++) { guint k = path[i][j][FTT_DIMENSION]; if (n[k] == NULL) { gboolean t_junction = FALSE; FttDirection d1[FTT_DIMENSION]; guint l; for (l = 0; l < FTT_DIMENSION; l++) d1[l] = path[i][j][l] < 0 ? FTT_OPPOSITE_DIRECTION (d[- path[i][j][l] - 1]) : d[path[i][j][l] - 1]; n[k] = cell_corner_neighbor (cell, d1, max_level, &t_junction); if (t_junction) { t_junction_interpolator (cell, d1, n[k], max_level, centered, inter); return TRUE; } if (n[k]) { t_junction = do_path (n[k], k, n, d, max_level, centered, inter); if (t_junction) return TRUE; } } } return FALSE; } static gdouble distance (FttVector * c, FttCell * cell, gboolean centered) { if (centered || !GFS_IS_MIXED (cell)) return ftt_cell_size (cell)* #if FTT_2D 0.707106781185 #else /* 3D */ 0.866025403785 #endif /* 3D */ ; else { FttVector cm; gfs_cell_cm (cell, &cm); #if FTT_2D return sqrt ((cm.x - c->x)*(cm.x - c->x) + (cm.y - c->y)*(cm.y - c->y)); #else /* 3D */ return sqrt ((cm.x - c->x)*(cm.x - c->x) + (cm.y - c->y)*(cm.y - c->y) + (cm.z - c->z)*(cm.z - c->z)); #endif /* 3D */ } } /** * gfs_cell_corner_interpolator: * @cell: a #FttCell. * @d: a set of perpendicular directions. * @max_level: the maximum cell level to consider (-1 means no restriction). * @centered: %TRUE if the interpolator is cell-centered. * @inter: a #GfsInterpolator. * * Fills @inter with the interpolator for the corner of @cell defined by @d. */ void gfs_cell_corner_interpolator (FttCell * cell, FttDirection d[FTT_DIMENSION], gint max_level, gboolean centered, GfsInterpolator * inter) { FttCell * n[N_CELLS]; guint i; gboolean t_junction; g_return_if_fail (cell != NULL); g_return_if_fail (inter != NULL); while (!FTT_CELL_IS_LEAF (cell) && ftt_cell_level (cell) != max_level && (n[0] = ftt_cell_child_corner (cell, d))) cell = n[0]; n[0] = cell; for (i = 1; i < N_CELLS; i++) n[i] = NULL; t_junction = do_path (cell, 0, n, d, max_level, centered, inter); if (t_junction) return; FttVector c; gdouble w = 0.; int boundaries = 0; inter->n = 0; ftt_corner_pos (cell, d, &c); for (i = 0; i < N_CELLS; i++) if (n[i]) { gdouble a; a = 1./(distance (&c, n[i], centered) + 1e-12); inter->c[inter->n] = n[i]; inter->w[inter->n++] = a; w += a; if (GFS_CELL_IS_BOUNDARY (n[i])) boundaries++; } /* corners of domain receive special treatment */ if (inter->n == FTT_DIMENSION + 1 && boundaries == FTT_DIMENSION) { /* remove central cell from interpolator */ w -= inter->w[0]; for (i = 0; i < inter->n - 1; i++) { inter->c[i] = inter->c[i + 1]; inter->w[i] = inter->w[i + 1]; } inter->n--; } g_assert (w > 0.); interpolator_scale (inter, 1./w); } /** * gfs_cell_corner_value: * @cell: a #FttCell. * @d: a set of perpendicular directions. * @v: a #GfsVariable. * @max_level: the maximum cell level to consider (-1 means no restriction). * * Returns: the value of variable @v interpolated at the corner of * @cell defined by @d. */ gdouble gfs_cell_corner_value (FttCell * cell, FttDirection d[FTT_DIMENSION], GfsVariable * v, gint max_level) { GfsInterpolator inter; gdouble val = 0.; guint i; g_return_val_if_fail (cell != NULL, 0.); g_return_val_if_fail (v != NULL, 0.); gfs_cell_corner_interpolator (cell, d, max_level, v->centered, &inter); for (i = 0; i < inter.n; i++) { gdouble v1 = GFS_VALUE (inter.c[i], v); if (v1 == GFS_NODATA) return GFS_VALUE (cell, v); val += inter.w[i]*v1; } return val; } /* GfsStencil: Object */ /* The convention is that the first element is the diagonal */ /** * gfs_stencil_new: * @cell: the #FttCell associated with this stencil. * @lp: the linear problem. * @coeff: the cell coefficient. * * Returns: a new #GfsStencil. */ GfsStencil * gfs_stencil_new (FttCell * cell, GfsLinearProblem * lp, gdouble coeff) { g_return_val_if_fail (cell != NULL, NULL); g_return_val_if_fail (lp != NULL, NULL); GfsStencil * s = g_malloc (sizeof (GfsStencil)); s->id = g_array_new (FALSE, FALSE, sizeof (int)); s->coeff = g_array_new (FALSE, FALSE, sizeof (double)); gfs_stencil_add_element (s, cell, lp, coeff); return s; } /** * gfs_stencil_add_element: * @stencil: the stencil * @cell: a #FttCell. * @lp: the linear problem * @coeff: the cell coefficient. * * Adds the contribution of a @cell to @stencil. */ void gfs_stencil_add_element (GfsStencil * stencil, FttCell * cell, GfsLinearProblem * lp, gdouble coeff) { gint i; g_return_if_fail (stencil != NULL); g_return_if_fail (lp != NULL); int id = GFS_VALUE (cell, lp->id); if (id < 0) { g_assert (GFS_CELL_IS_BOUNDARY (cell)); FttCell * neighbor = GFS_DOUBLE_TO_POINTER (GFS_VALUE (cell, lp->neighbor)); g_assert (neighbor); id = GFS_VALUE (neighbor, lp->id); g_assert (id >= 0); coeff *= GFS_VALUE (cell, lp->neighborw); } for (i = 0; i < stencil->id->len; i++) if (g_array_index (stencil->id, int, i) == id) { g_array_index (stencil->coeff, double, i) += coeff; return; } g_array_append_val (stencil->id, id); g_array_append_val (stencil->coeff, coeff); } /** * gfs_stencil_destroy: * @stencil: a stencil * * Destroys a stencil. */ void gfs_stencil_destroy (GfsStencil * stencil) { g_return_if_fail (stencil != NULL); g_array_free (stencil->id, TRUE); g_array_free (stencil->coeff, TRUE); g_free (stencil); } static void get_average_neighbor_value_stencil (const FttCellFace * face, gdouble * x, GfsLinearProblem * lp, GfsStencil * stencil, gdouble weight) { /* check for corner refinement violation (topology.fig) */ g_assert (ftt_cell_level (face->neighbor) == ftt_cell_level (face->cell)); if (FTT_CELL_IS_LEAF (face->neighbor)) gfs_stencil_add_element (stencil, face->neighbor, lp, weight/(*x)); else { FttCellChildren children; gdouble a = 0.; FttDirection od = FTT_OPPOSITE_DIRECTION (face->d); guint i, n; n = ftt_cell_children_direction (face->neighbor, od, &children); for (i = 0; i < n; i++) if (children.c[i]) { gdouble w = GFS_IS_MIXED (children.c[i]) ? GFS_STATE (children.c[i])->solid->s[od] : 1.; a += w; } if (a > 0.) { *x = 3./4.; for (i = 0; i < n; i++) if (children.c[i]) { gdouble w = GFS_IS_MIXED (children.c[i]) ? GFS_STATE (children.c[i])->solid->s[od] : 1.; gfs_stencil_add_element (stencil, children.c[i], lp, weight*w/a/(*x)); } } else gfs_stencil_add_element (stencil, face->cell, lp, weight/(*x)); } } #if (FTT_2D || FTT_2D3) /* v = a*v(cell) + b * * First order 1D interpolation. */ static GfsGradient get_interpolate_1D1_stencil (FttCell * cell, FttDirection d, gdouble x, GfsLinearProblem * lp, GfsStencil * stencil, gdouble weight) { GfsGradient p; FttCellFace f; f = gfs_cell_face (cell, d); if (f.neighbor) { gdouble x2 = 1.; get_average_neighbor_value_stencil (&f, &x2, lp, stencil, weight*x); p.a = 1. - x/x2; } else p.a = 1.; return p; } #else /* v = a*v(cell) + b * * First order 2D interpolation. */ static GfsGradient get_interpolate_2D1_stencil (FttCell * cell, FttDirection d1, FttDirection d2, gdouble x, gdouble y, GfsLinearProblem * lp, GfsStencil * stencil, gdouble weight) { GfsGradient p; gdouble y1 = 1.; gdouble x2 = 1.; gdouble a1 = y, a2 = x; FttCellFace f1, f2; p.a = 1.; f1 = gfs_cell_face (cell, d1); if (f1.neighbor) { get_average_neighbor_value_stencil (&f1, &y1, lp, stencil, a1*weight); a1 /= y1; p.a -= a1; } f2 = gfs_cell_face (cell, d2); if (f2.neighbor) { get_average_neighbor_value_stencil (&f2, &x2, lp, stencil, a2*weight); a2 /= x2; p.a -= a2; } return p; } #endif /* not FTT_2D */ static Gradient gradient_fine_coarse_stencil (const FttCellFace * face, GfsLinearProblem * lp, GfsStencil * stencil, gdouble weight) { Gradient g; GfsGradient p; #if (FTT_2D || FTT_2D3) gint dp; #else /* FTT_3D */ gint * dp; #endif /* FTT_3D */ g_assert (face != NULL); g_assert (ftt_face_type (face) == FTT_FINE_COARSE); dp = perpendicular[face->d][FTT_CELL_ID (face->cell)]; #if (FTT_2D || FTT_2D3) g_assert (dp >= 0); p = get_interpolate_1D1_stencil (face->neighbor, dp, 1./4., lp, stencil, 2./3.*weight); #else /* FTT_3D */ g_assert (dp[0] >= 0 && dp[1] >= 0); p = get_interpolate_2D1_stencil (face->neighbor, dp[0], dp[1], 1./4., 1./4., lp, stencil, 2./3.*weight); #endif /* FTT_3D */ g.a = 2./3.; g.b = 2.*p.a/3.; g.c = 0.; return g; } static void face_weighted_gradient_stencil (const FttCellFace * face, GfsGradient * g, gint max_level, guint dimension, GfsLinearProblem * lp, GfsStencil * stencil) { guint level; g_return_if_fail (face != NULL); g->a = 0.; if (face->neighbor == NULL) return; level = ftt_cell_level (face->cell); if (ftt_cell_level (face->neighbor) < level) { /* neighbor is at a shallower level */ Gradient gcf; gdouble w = GFS_STATE (face->cell)->f[face->d].v; gcf = gradient_fine_coarse_stencil (face, lp, stencil, w); g->a = w*gcf.a; gfs_stencil_add_element (stencil, face->neighbor, lp, w*gcf.b); } else { if (level == max_level || FTT_CELL_IS_LEAF (face->neighbor)) { /* neighbor is at the same level */ gdouble w = GFS_STATE (face->cell)->f[face->d].v; g->a = w; gfs_stencil_add_element (stencil, face->neighbor, lp, w); } else { /* neighbor is at a deeper level */ FttCellChildren children; FttCellFace f; guint i, n; f.d = FTT_OPPOSITE_DIRECTION (face->d); n = ftt_cell_children_direction (face->neighbor, f.d, &children); f.neighbor = face->cell; for (i = 0; i < n; i++) if ((f.cell = children.c[i])) { Gradient gcf; gdouble w = GFS_STATE (f.cell)->f[f.d].v; if (dimension > 2) w /= n/2; /* fixme??? */ gcf = gradient_fine_coarse_stencil (&f, lp, stencil, -w); g->a += w*gcf.b; gfs_stencil_add_element (stencil, f.cell, lp, w*gcf.a); } } } } /** * gfs_face_weighted_gradient_stencil: * @face: a FttCellFace * @g: a GfsGradient * @max_level: an integer * @lp: the linear problem * @stencil: a stencil * * Fills @stencil with the stencil corresponding to the * weighted gradient on @face. */ void gfs_face_weighted_gradient_stencil (const FttCellFace * face, GfsGradient * g, gint max_level, GfsLinearProblem * lp, GfsStencil * stencil) { face_weighted_gradient_stencil (face, g, max_level, FTT_DIMENSION, lp, stencil); } static gboolean mixed_face_gradient_stencil (const FttCellFace * face, Gradient * g, gint max_level, GfsLinearProblem * lp, GfsStencil * stencil, gdouble weight) { FttCell * n[N_CELLS]; gdouble m[N_CELLS - 1][N_CELLS - 1]; FttVector o, cm; FttComponent c = face->d/2; gdouble h = ftt_cell_size (face->cell); gdouble w = weight; gfs_cell_cm (face->cell, &o); if (!face_bilinear (face, n, &o, gfs_cell_cm, max_level, m)) return FALSE; gfs_face_ca (face, &cm); if (!FTT_FACE_DIRECT (face)) w = -w; #if FTT_2D { FttComponent cp = FTT_ORTHOGONAL_COMPONENT (c); gdouble vp; vp = ((&cm.x)[cp] - (&o.x)[cp])/h; g->a = ((m[c][0] + m[2][0]*vp) + (m[c][1] + m[2][1]*vp) + (m[c][2] + m[2][2]*vp)); g->b = m[c][0] + m[2][0]*vp; gfs_stencil_add_element (stencil, n[2], lp, w*(m[c][1] + m[2][1]*vp)); gfs_stencil_add_element (stencil, n[3], lp, w*(m[c][2] + m[2][2]*vp)); } #else /* 3D */ { guint j; cm.x = (cm.x - o.x)/h; cm.y = (cm.y - o.y)/h; cm.z = (cm.z - o.z)/h; g->c = 0.; switch (c) { case FTT_X: g->a = g->b = m[0][0] + cm.y*m[3][0] + cm.z*m[4][0] + cm.y*cm.z*m[6][0]; for (j = 1; j < N_CELLS - 1; j++) { gdouble a = m[0][j] + cm.y*m[3][j] + cm.z*m[4][j] + cm.y*cm.z*m[6][j]; g->a += a; gfs_stencil_add_element (stencil, n[j+1], lp, w*a); } break; case FTT_Y: g->a = g->b = m[1][0] + cm.x*m[3][0] + cm.z*m[5][0] + cm.x*cm.z*m[6][0]; for (j = 1; j < N_CELLS - 1; j++) { gdouble a = m[1][j] + cm.x*m[3][j] + cm.z*m[5][j] + cm.x*cm.z*m[6][j]; g->a += a; gfs_stencil_add_element (stencil, n[j+1], lp, w*a); } break; case FTT_Z: g->a = g->b = m[2][0] + cm.x*m[4][0] + cm.y*m[5][0] + cm.x*cm.y*m[6][0]; for (j = 1; j < N_CELLS - 1; j++) { gdouble a = m[2][j] + cm.x*m[4][j] + cm.y*m[5][j] + cm.x*cm.y*m[6][j]; g->a += a; gfs_stencil_add_element (stencil, n[j+1], lp, w*a); } break; default: g_assert_not_reached (); } } #endif /* 3D */ if (!FTT_FACE_DIRECT (face)) { g->a = - g->a; g->b = - g->b; } return TRUE; } static void face_cm_gradient_stencil (const FttCellFace * face, GfsGradient * g, gint max_level, gboolean weighted, GfsLinearProblem * lp, GfsStencil * stencil) { guint level; Gradient gcf; gdouble w = weighted ? GFS_STATE (face->cell)->f[face->d].v : 1.; g->a = g->b = 0.; if (face->neighbor == NULL || w == 0.) return; level = ftt_cell_level (face->cell); if (ftt_cell_level (face->neighbor) < level) { /* neighbor is at a shallower level */ if (GFS_IS_MIXED (face->cell) || GFS_IS_MIXED (face->neighbor)) { if (!mixed_face_gradient_stencil (face, &gcf, max_level, lp, stencil, w)) gcf = gradient_fine_coarse_stencil (face, lp, stencil, w); } else gcf = gradient_fine_coarse_stencil (face, lp, stencil, w); g->a = w*gcf.a; gfs_stencil_add_element (stencil, face->neighbor, lp, w*gcf.b); } else { if (level == max_level || FTT_CELL_IS_LEAF (face->neighbor)) { /* neighbor is at the same level */ if (!GFS_IS_MIXED (face->cell) && !GFS_IS_MIXED (face->neighbor)) { g->a = w; gfs_stencil_add_element (stencil, face->neighbor, lp, w); } else if (mixed_face_gradient_stencil (face, &gcf, max_level, lp, stencil, w)) { g->a = w*gcf.a; gfs_stencil_add_element (stencil, face->neighbor, lp, w*gcf.b); } else { g->a = w; gfs_stencil_add_element (stencil, face->neighbor, lp, w); } } else { /* neighbor is at a deeper level */ FttCellChildren children; FttCellFace f; guint i, n; f.d = FTT_OPPOSITE_DIRECTION (face->d); n = ftt_cell_children_direction (face->neighbor, f.d, &children); f.neighbor = face->cell; for (i = 0; i < n; i++) if ((f.cell = children.c[i])) { w = weighted ? GFS_STATE (f.cell)->f[f.d].v : 1.; if (GFS_IS_MIXED (f.cell) || GFS_IS_MIXED (f.neighbor)) { if (!mixed_face_gradient_stencil (&f, &gcf, max_level, lp, stencil, w)) gcf = gradient_fine_coarse_stencil (&f, lp, stencil, -w); } else gcf = gradient_fine_coarse_stencil (&f, lp, stencil, -w); g->a += w*gcf.b; gfs_stencil_add_element (stencil, f.cell, lp, w*gcf.a); } } } } /** * gfs_face_cm_weighted_gradient_stencil: * @face: a #FttCellFace. * @g: a GfsGradient. * @max_level: the maximum cell level to consider (-1 means no restriction). * @lp: the linear problem. * @stencil: a stencil. * * Fills @stencil with the stencil corresponding to the * weighted gradient on @face. The weights are defined at * the center of mass of the cell. Linear interpolation is used * to evaluate the gradient in the vicinity of cut cells. * This function returns the stencil equivalent to the action of * gfs_face_cm_weighted_gradient(). */ void gfs_face_cm_weighted_gradient_stencil (const FttCellFace * face, GfsGradient * g, gint max_level, GfsLinearProblem * lp, GfsStencil * stencil) { g_return_if_fail (face != NULL); g_return_if_fail (g != NULL); g_return_if_fail (lp != NULL); g_return_if_fail (stencil != NULL); face_cm_gradient_stencil (face, g, max_level, TRUE, lp, stencil); } /** * gfs_cm_gradient: * @cell: a #FttCell. * @v: a #GfsVariable. * @g: a #FttVector. * * Fills @g with the components of the gradient of @v at the center of * mass of @cell. * * The gradient is normalized by the size of the cell. */ void gfs_cm_gradient (FttCell * cell, GfsVariable * v, FttVector * g) { g_return_if_fail (cell != NULL); g_return_if_fail (v != NULL); g_return_if_fail (g != NULL); if (v->centered) { FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&g->x)[c] = gfs_center_gradient (cell, c, v->i); } else if (GFS_IS_MIXED (cell)) gfs_mixed_cell_gradient (cell, v, g); else { FttComponent c; GfsGradient g1, g2; FttCellFace f; FttCellNeighbors n; gdouble val = GFS_VALUE (cell, v); ftt_cell_neighbors (cell, &n); f.cell = cell; for (c = 0; c < FTT_DIMENSION; c++) { f.d = 2*c; f.neighbor = n.c[f.d]; gfs_face_cm_gradient (&f, &g1, v->i, -1); f.d = 2*c + 1; f.neighbor = n.c[f.d]; gfs_face_cm_gradient (&f, &g2, v->i, -1); (&g->x)[c] = (g1.b - g2.b + (g2.a - g1.a)*val)/2.; } } } gerris-snapshot-131206/src/init.c0000644000175100017510000002657412250371171013576 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /** \file * \brief Initialisation. */ /** \mainpage Programming API Reference * * - Class hierarchy * - Function index * - Data structure index */ #include "config.h" #ifdef HAVE_FENV_H # define _GNU_SOURCE # include # ifdef FE_NOMASK_ENV # ifdef FE_DIVBYZERO # ifdef FE_INVALID # define EXCEPTIONS (FE_DIVBYZERO|FE_INVALID) # else # define EXCEPTIONS (FE_DIVBYZERO) # endif # endif /* !FE_DIVBYZERO */ # endif /* FE_NO_MASK_ENV */ #endif /* HAVE_FENV_H */ #include #include #include "boundary.h" #include "mpi_boundary.h" #include "init.h" #include "refine.h" #include "output.h" #include "adaptive.h" #include "source.h" #include "tension.h" #include "ocean.h" #include "wave.h" #include "levelset.h" #include "vof.h" #include "solid.h" #include "moving.h" #include "river.h" #include "balance.h" #include "map.h" #include "metric.h" #include "particle.h" #include "cartesian.h" #ifdef HAVE_MPI # include #endif /* HAVE_MPI */ static void gfs_log (const gchar * log_domain, GLogLevelFlags log_level, const gchar * message) { int type = 0; gchar * pe; const gchar stype[][10] = { "ERROR", "CRITICAL", "WARNING", "MESSAGE", "INFO", "DEBUG" }; #ifdef HAVE_MPI int rank = -1; MPI_Comm_size (MPI_COMM_WORLD, &rank); if (rank > 1) MPI_Comm_rank (MPI_COMM_WORLD, &rank); else rank = -1; if (rank >= 0) { char name[MPI_MAX_PROCESSOR_NAME]; int length; MPI_Get_processor_name (name, &length); pe = g_strdup_printf ("PE %d (%s): ", rank, name); } else #endif /* HAVE_MPI */ pe = g_strdup (""); switch (log_level & G_LOG_LEVEL_MASK) { case G_LOG_LEVEL_ERROR: type = 0; break; case G_LOG_LEVEL_CRITICAL: type = 1; break; case G_LOG_LEVEL_WARNING: type = 2; break; case G_LOG_LEVEL_MESSAGE: type = 3; break; case G_LOG_LEVEL_INFO: type = 4; break; case G_LOG_LEVEL_DEBUG: type = 5; break; default: g_assert_not_reached (); } fprintf (stderr, "\n%s-%s **: %s%s\n\n", log_domain, stype[type], pe, message); g_free (pe); } /** * gfs_classes: * * Returns: a pointer to a NULL-terminated array of all the classes * usable in Gerris parameter files. */ GtsObjectClass ** gfs_classes (void) { static GtsObjectClass ** classes = NULL; if (classes == NULL) { gpointer klass[] = { gfs_global_class (), gfs_domain_class (), gfs_simulation_class (), gfs_ocean_class (), gfs_advection_class (), gfs_poisson_class (), gfs_simulation_moving_class (), gfs_axi_class (), gfs_advection_axi_class (), gfs_wave_class (), gfs_river_class (), gfs_domain_projection_class (), gfs_surface_bc_class (), gfs_box_class (), gfs_gedge_class (), gfs_bc_dirichlet_class (), gfs_bc_subcritical_class (), gfs_bc_neumann_class (), gfs_bc_angle_class (), gfs_bc_navier_class (), gfs_bc_flather_class (), gfs_boundary_class (), gfs_boundary_inflow_constant_class (), gfs_boundary_outflow_class (), gfs_boundary_gradient_class (), gfs_boundary_periodic_class (), gfs_boundary_mpi_class (), gfs_refine_class (), gfs_refine_solid_class (), gfs_refine_surface_class (), gfs_refine_distance_class (), gfs_refine_height_class (), gfs_layers_class (), gfs_event_class (), gfs_variable_class (), gfs_variable_boolean_class (), gfs_variable_tracer_class (), gfs_variable_vof_concentration_class (), gfs_variable_tracer_vof_class (), gfs_variable_tracer_vof_height_class (), gfs_variable_residual_class (), gfs_variable_filtered_class (), gfs_variable_diagonal_class (), gfs_variable_function_class (), #if FTT_2D gfs_variable_stream_function_class (), #endif /* FTT_2D */ gfs_variable_average_class (), gfs_variable_poisson_class (), gfs_variable_laplacian_class (), gfs_hydrostatic_pressure_class (), gfs_variable_age_class (), gfs_variable_curvature_class (), gfs_variable_position_class (), gfs_variable_distance_class (), gfs_constant_class (), gfs_discharge_elevation_class (), gfs_spatial_sum_class (), gfs_solid_class (), gfs_solid_moving_class(), gfs_init_class (), gfs_init_mask_class (), gfs_init_flow_constant_class (), gfs_init_fraction_class (), gfs_init_vorticity_class (), gfs_init_wave_class (), gfs_generic_metric_class (), gfs_metric_stretch_class (), gfs_variable_metric_class (), gfs_metric_lon_lat_class (), gfs_stored_metric_class (), gfs_metric_class (), gfs_metric_cubed_class (), gfs_metric_cubed1_class (), gfs_metric_variable_class (), gfs_metric_laplace_class (), gfs_adapt_class (), gfs_adapt_vorticity_class (), gfs_adapt_streamline_curvature_class (), gfs_adapt_function_class (), gfs_adapt_thickness_class (), gfs_adapt_gradient_class (), gfs_adapt_error_class (), gfs_event_sum_class (), gfs_event_sum_direction_class (), gfs_event_harmonic_class (), gfs_event_stop_class (), gfs_event_script_class (), gfs_event_balance_class (), gfs_source_generic_class (), gfs_source_scalar_class (), gfs_source_class (), gfs_source_control_class (), gfs_source_control_field_class (), gfs_source_flux_class (), gfs_source_pipe_class (), gfs_source_diffusion_class (), gfs_source_diffusion_explicit_class (), gfs_source_velocity_class (), gfs_source_viscosity_class (), gfs_source_viscosity_explicit_class (), gfs_source_friction_class (), gfs_source_coriolis_class (), gfs_source_tension_class (), gfs_source_tension_css_class (), #if !FTT_2D gfs_source_hydrostatic_class (), #endif /* 3D */ gfs_remove_droplets_class (), gfs_remove_ponds_class (), gfs_event_filter_class (), gfs_event_list_class (), gfs_diffusion_class (), gfs_output_class (), gfs_output_time_class (), gfs_output_progress_class (), gfs_output_projection_stats_class (), gfs_output_diffusion_stats_class (), gfs_output_solid_stats_class (), gfs_output_adapt_stats_class (), gfs_output_timing_class (), gfs_output_balance_class (), gfs_output_solid_force_class (), gfs_output_location_class (), gfs_output_particle_class (), gfs_output_simulation_class (), gfs_output_boundaries_class (), gfs_output_object_class (), gfs_output_scalar_class (), gfs_output_scalar_norm_class (), gfs_output_scalar_stats_class (), gfs_output_scalar_sum_class (), gfs_output_scalar_maxima_class (), gfs_output_scalar_histogram_class (), gfs_output_droplet_sums_class (), gfs_output_error_norm_class (), gfs_output_correlation_class (), gfs_output_squares_class (), gfs_output_streamline_class (), gfs_output_ppm_class (), gfs_output_grd_class (), gfs_map_class (), gfs_map_function_class (), gfs_map_transform_class (), gfs_particle_class (), gfs_cartesian_grid_class (), gfs_derived_variable_class (), gfs_generic_surface_class (), gfs_surface_class (), gfs_function_class (), gfs_function_constant_class (), gfs_function_spatial_class (), gfs_function_map_class (), NULL}; guint n = 0; gpointer * c = klass; while (*(c++)) n++; classes = g_malloc ((n + 1)*sizeof (gpointer)); memcpy (classes, klass, (n + 1)*sizeof (gpointer)); } return classes; } static gboolean disabled_fpe = FALSE; typedef void (* AtExitFunc) (void); /** * gfs_catch_floating_point_exceptions: * * Catch the default floating-point exceptions set in the Gerris * library. */ void gfs_catch_floating_point_exceptions (void) { #ifdef EXCEPTIONS fedisableexcept (EXCEPTIONS); feclearexcept (EXCEPTIONS); #endif /* EXCEPTIONS */ } /** * gfs_restore_floating_point_exceptions: * * Restores the default floating-point exceptions set in the Gerris * library. * * Returns: 0 if no exceptions where raised between this call and the * call to gfs_catch_floating_point_exceptions(), non-zero otherwise. */ int gfs_restore_floating_point_exceptions (void) { #ifdef EXCEPTIONS int ret = fetestexcept (EXCEPTIONS); feclearexcept (EXCEPTIONS); if (!disabled_fpe) feenableexcept (EXCEPTIONS); return ret; #else /* !EXCEPTIONS */ return 0; #endif /* !EXCEPTIONS */ } /** * gfs_disable_floating_point_exceptions: * * Disables floating-point exceptions (they are enabled by default * when using the Gerris library). */ void gfs_disable_floating_point_exceptions (void) { #ifdef EXCEPTIONS disabled_fpe = TRUE; fedisableexcept (EXCEPTIONS); #endif /* !EXCEPTIONS */ } /** * gfs_enable_floating_point_exceptions: * * Enables floating-point exceptions (they are enabled by default * when using the Gerris library). */ void gfs_enable_floating_point_exceptions (void) { #ifdef EXCEPTIONS disabled_fpe = FALSE; feenableexcept (EXCEPTIONS); #endif /* !EXCEPTIONS */ } /** * gfs_init: * @argc: a pointer on the number of command line arguments passed to * the program. * @argv: a pointer on the command line arguments passed to the * program. * * Initializes the Gerris library. This function must be called before * any other function of the library. */ void gfs_init (int * argc, char *** argv) { static gboolean initialized = FALSE; if (initialized) return; if (!setlocale (LC_ALL, "POSIX")) g_warning ("cannot set locale to POSIX"); #ifdef HAVE_MPI MPI_Initialized (&initialized); if (!initialized) { if (!argc || !argv) { int argc1 = 1; char ** argv1; argv1 = g_malloc (sizeof (char *)); argv1[0] = g_strdup ("gfs_init"); MPI_Init (&argc1, &argv1); g_free (argv1[0]); g_free (argv1); } else MPI_Init (argc, argv); MPI_Errhandler_set (MPI_COMM_WORLD, MPI_ERRORS_ARE_FATAL); } atexit ((AtExitFunc) MPI_Finalize); #endif /* HAVE_MPI */ initialized = TRUE; #ifdef EXCEPTIONS feenableexcept (EXCEPTIONS); #endif /* EXCEPTIONS */ g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, (GLogFunc) gfs_log, NULL); /* Instantiates classes before reading any domain or simulation file */ gfs_classes (); } gerris-snapshot-131206/src/gerris2D.pc.in0000644000175100017510000000040012250371171015055 00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: Gerris2D Description: Gerris Flow Solver Library (2D) Version: @VERSION@ Requires: gts >= 0.7.3 Libs: -L${libdir} -lgfs2D -lgts -lm Cflags: -I${includedir} -DFTT_2D=1 gerris-snapshot-131206/src/source.c0000644000175100017510000016242212250371171014124 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2013 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Source terms. */ #include #include #include "source.h" #include "simulation.h" #include "solid.h" #include "init.h" #include "vof.h" /** * gfs_variable_mac_source: * @v: a #GfsVariable. * @cell: a #FttCell. * * Returns: the sum of all the sources for variable @v in @cell. */ gdouble gfs_variable_mac_source (GfsVariable * v, FttCell * cell) { gdouble sum; GSList * i; g_return_val_if_fail (v != NULL, 0.); g_return_val_if_fail (cell != NULL, 0.); if (v->sources == NULL) return 0.; sum = 0.; i = GTS_SLIST_CONTAINER (v->sources)->items; while (i) { GfsSourceGeneric * s = i->data; if (s->mac_value) sum += (* s->mac_value) (s, cell, v); i = i->next; } return sum; } typedef struct { GfsVariable * v, * sv; gdouble dt; } SourcePar; static void add_sources (FttCell * cell, SourcePar * p) { GSList * i = GTS_SLIST_CONTAINER (p->v->sources)->items; gdouble sum = 0; while (i) { GfsSourceGeneric * s = i->data; if (s->centered_value) sum += (* s->centered_value) (s, cell, p->v); i = i->next; } GFS_VALUE (cell, p->sv) += p->dt*sum; } /** * gfs_domain_variable_centered_sources: * @domain: a #GfsDomain. * @v: a #GfsVariable. * @sv: a #GfsVariable. * @dt: the timestep. * * Adds the source terms for @v to @sv. */ void gfs_domain_variable_centered_sources (GfsDomain * domain, GfsVariable * v, GfsVariable * sv, gdouble dt) { g_return_if_fail (domain != NULL); g_return_if_fail (v != NULL); g_return_if_fail (sv != NULL); if (v->sources) { SourcePar p; p.v = v; p.sv = sv; p.dt = dt; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) add_sources, &p); } } /** * gfs_domain_variable_fluxes: * @domain: a #GfsDomain. * @v: a #GfsVariable. * @dt: the timestep. * * Returns: a new temporary variable containing the fluxes or %NULL. */ GfsVariable * gfs_domain_variable_fluxes (GfsDomain * domain, GfsVariable * v, gdouble dt) { GfsVariable * sv = NULL; g_return_val_if_fail (domain != NULL, NULL); g_return_val_if_fail (v != NULL, NULL); if (!v->sources) return NULL; GSList * i = GTS_SLIST_CONTAINER (v->sources)->items; while (i) { if (GFS_SOURCE_GENERIC (i->data)->flux) { if (sv == NULL) { sv = gfs_temporary_variable (domain); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) gfs_cell_reset, sv); } (* GFS_SOURCE_GENERIC (i->data)->flux) (i->data, domain, v, sv, dt); } i = i->next; } return sv; } /** * Abstract class for source terms. * \beginobject{GfsSourceGeneric} */ static void source_generic_init (GfsSourceGeneric * s) { GFS_EVENT (s)->istep = 1; } GfsSourceGenericClass * gfs_source_generic_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_source_generic_info = { "GfsSourceGeneric", sizeof (GfsSourceGeneric), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) source_generic_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_source_generic_info); } return klass; } /** * gfs_source_find: * @v: a #GfsVariable. * @klass: a #GfsSourceGenericClass. * * Returns: the first source of @v descendant of @klass, or %NULL if * none was found. */ GfsSourceGeneric * gfs_source_find (GfsVariable * v, GfsSourceGenericClass * klass) { g_return_val_if_fail (v != NULL, NULL); g_return_val_if_fail (klass != NULL, NULL); if (v->sources) { GSList * i = GTS_SLIST_CONTAINER (v->sources)->items; while (i) { GtsObject * o = i->data; if (gts_object_is_from_class (o, klass)) return GFS_SOURCE_GENERIC (o); i = i->next; } } return NULL; } /** \endobject{GfsSourceGeneric} */ /** * Source terms for scalar variables. * \beginobject{GfsSourceScalar} */ static void source_scalar_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_source_scalar_class ())->parent_class->write) (o, fp); GfsSourceScalar * s = GFS_SOURCE_SCALAR (o); if (s->v) fprintf (fp, " %s", s->v->name); else { gint i; fputs (" (", fp); for (i = 0; i < FTT_DIMENSION - 1; i++) fprintf (fp, "%s,", s->vector[i]->name); fprintf (fp, "%s)", s->vector[FTT_DIMENSION - 1]->name); } } static void source_scalar_read (GtsObject ** o, GtsFile * fp) { GfsSourceScalar * source; GfsDomain * domain; if (GTS_OBJECT_CLASS (gfs_source_scalar_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_source_scalar_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; source = GFS_SOURCE_SCALAR (*o); domain = GFS_DOMAIN (gfs_object_simulation (source)); if (fp->type == '(') { /* vector */ if (!gfs_read_variable_vector (fp, source->vector, domain)) return; gint i; for (i = 0; i < FTT_DIMENSION; i++) { if (source->vector[i]->sources == NULL) source->vector[i]->sources = gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ())); gts_container_add (source->vector[i]->sources, GTS_CONTAINEE (source)); } } else if (fp->type == GTS_STRING) { /* scalar */ source->v = gfs_variable_from_name (domain->variables, fp->token->str); if (source->v == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } if (source->v->sources == NULL) source->v->sources = gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ())); gts_container_add (source->v->sources, GTS_CONTAINEE (source)); gts_file_next_token (fp); } else { gts_file_error (fp, "expecting a scalar or vector"); return; } } static void source_scalar_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->read = source_scalar_read; GTS_OBJECT_CLASS (klass)->write = source_scalar_write; } GfsSourceGenericClass * gfs_source_scalar_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_source_scalar_info = { "GfsSourceScalar", sizeof (GfsSourceScalar), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) source_scalar_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_generic_class ()), &gfs_source_scalar_info); } return klass; } /** \endobject{GfsSourceScalar} */ /** * Source terms for velocity. * \beginobject{GfsSourceVelocity} */ static void source_velocity_read (GtsObject ** o, GtsFile * fp) { GfsSourceVelocity * source; GfsDomain * domain; FttComponent c; if (GTS_OBJECT_CLASS (gfs_source_velocity_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_source_velocity_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; source = GFS_SOURCE_VELOCITY (*o); domain = GFS_DOMAIN (gfs_object_simulation (source)); if (!(source->v = gfs_domain_velocity (domain))) { gts_file_error (fp, "cannot find velocity components"); return; } for (c = 0; c < FTT_DIMENSION; c++) { if (source->v[c]->sources == NULL) source->v[c]->sources = gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ())); gts_container_add (source->v[c]->sources, GTS_CONTAINEE (source)); } } static void source_velocity_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->read = source_velocity_read; } GfsSourceGenericClass * gfs_source_velocity_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo source_info = { "GfsSourceVelocity", sizeof (GfsSourceVelocity), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) source_velocity_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_generic_class ()), &source_info); } return klass; } /** \endobject{GfsSourceVelocity} */ /** * Source defined by a function. * \beginobject{GfsSource} */ static void source_destroy (GtsObject * o) { GfsSource * s = GFS_SOURCE (o); if (s->intensity) gts_object_destroy (GTS_OBJECT (s->intensity)); gint i; for (i = 0; i < FTT_DIMENSION; i++) if (s->intensity_v[i]) gts_object_destroy (GTS_OBJECT (s->intensity_v[i])); (* GTS_OBJECT_CLASS (gfs_source_class ())->parent_class->destroy) (o); } static gdouble source_face_value (GfsSourceGeneric * s, FttCellFace * face, GfsVariable * v) { return gfs_function_face_value (GFS_SOURCE (s)->intensity, face); } static gdouble source_vector_face_value (GfsSourceGeneric * s, FttCellFace * face, GfsVariable * v) { FttVector p, u; int i; for (i = 0; i < FTT_DIMENSION; i++) (&u.x)[i] = gfs_function_face_value (GFS_SOURCE (s)->intensity_v[i], face); ftt_face_pos (face, &p); gfs_simulation_map_vector (GFS_SIMULATION (v->domain), &p, &u); return (&u.x)[v->component]; } static gdouble source_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { return gfs_function_value (GFS_SOURCE (s)->intensity, cell); } static gdouble source_vector_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { return gfs_function_value (GFS_SOURCE (s)->intensity_v[v->component], cell); } static void source_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_source_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_source_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsSourceScalar * s = GFS_SOURCE_SCALAR (*o); if (s->v) { /* scalar */ GFS_SOURCE (s)->intensity = gfs_function_new (gfs_function_class (), 0.); gfs_function_set_units (GFS_SOURCE (s)->intensity, s->v->units); gfs_function_read (GFS_SOURCE (s)->intensity, gfs_object_simulation (s), fp); if (fp->type != GTS_ERROR) { GfsSourceGeneric * s = GFS_SOURCE_GENERIC (*o); if (GFS_SOURCE_SCALAR (s)->v->face_source) { s->mac_value = s->centered_value = NULL; s->face_value = source_face_value; } } } else { /* vector */ if (!gfs_read_function_vector (fp, s->vector, GFS_SOURCE (s)->intensity_v, gfs_object_simulation (s))) return; if (s->vector[0]->face_source) { GfsSourceGeneric * s = GFS_SOURCE_GENERIC (*o); s->mac_value = s->centered_value = NULL; s->face_value = source_vector_face_value; } else { GfsSourceGeneric * s = GFS_SOURCE_GENERIC (*o); s->mac_value = s->centered_value = source_vector_value; } gts_file_next_token (fp); } } static void source_write (GtsObject * o, FILE * fp) { if (GTS_OBJECT_CLASS (gfs_source_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_source_class ())->parent_class->write) (o, fp); GfsSource * s = GFS_SOURCE (o); if (s->intensity) gfs_function_write (s->intensity, fp); else { gint i; fputs (" (", fp); for (i = 0; i < FTT_DIMENSION - 1; i++) { gfs_function_write (s->intensity_v[i], fp); fputc (',', fp); } gfs_function_write (s->intensity_v[FTT_DIMENSION - 1], fp); fputc (')', fp); } } static void source_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = source_destroy; GTS_OBJECT_CLASS (klass)->read = source_read; GTS_OBJECT_CLASS (klass)->write = source_write; } static void source_init (GfsSourceGeneric * s) { s->mac_value = s->centered_value = source_value; } GfsSourceGenericClass * gfs_source_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo source_info = { "GfsSource", sizeof (GfsSource), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) source_class_init, (GtsObjectInitFunc) source_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_scalar_class ()), &source_info); } return klass; } /** \endobject{GfsSource} */ /** * Controlling the spatially-averaged value of a scalar. * \beginobject{GfsSourceControl} */ static void source_control_destroy (GtsObject * o) { if (GFS_SOURCE_CONTROL (o)->intensity) gts_object_destroy (GTS_OBJECT (GFS_SOURCE_CONTROL (o)->intensity)); (* GTS_OBJECT_CLASS (gfs_source_control_class ())->parent_class->destroy) (o); } static void source_control_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_source_control_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GFS_SOURCE_CONTROL (*o)->intensity = gfs_function_new (gfs_function_class (), 0.); gfs_function_set_units (GFS_SOURCE_CONTROL (*o)->intensity, GFS_SOURCE_SCALAR (*o)->v->units); gfs_function_read (GFS_SOURCE_CONTROL (*o)->intensity, gfs_object_simulation (*o), fp); } static void source_control_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_source_control_class ())->parent_class->write) (o, fp); gfs_function_write (GFS_SOURCE_CONTROL (o)->intensity, fp); } typedef struct { GfsVariable * v; gdouble s, sv; } Sum; static void sum (FttCell * cell, Sum * s) { gdouble vol = gfs_cell_volume (cell, s->v->domain); s->s += vol*GFS_VALUE (cell, s->v); s->sv += vol; } static gboolean source_control_event (GfsEvent * event, GfsSimulation * sim) { if ((* gfs_event_class ()->event) (event, sim)) { GfsSourceControl * s = GFS_SOURCE_CONTROL (event); GfsDomain * domain = GFS_DOMAIN (sim); Sum su = { GFS_SOURCE_SCALAR (event)->v, 0., 0. }; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) sum, &su); gfs_all_reduce (domain, su.s, MPI_DOUBLE, MPI_SUM); gfs_all_reduce (domain, su.sv, MPI_DOUBLE, MPI_SUM); s->s = sim->advection_params.dt > 0. && su.sv > 0. ? (gfs_function_value (s->intensity, NULL) - su.s/su.sv)/sim->advection_params.dt: 0.; return TRUE; } return FALSE; } static void source_control_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->read = source_control_read; GTS_OBJECT_CLASS (klass)->write = source_control_write; GTS_OBJECT_CLASS (klass)->destroy = source_control_destroy; GFS_EVENT_CLASS (klass)->event = source_control_event; } static gdouble source_control_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { return GFS_SOURCE_CONTROL (s)->s; } static void source_control_init (GfsSourceGeneric * s) { s->mac_value = s->centered_value = source_control_value; } GfsSourceGenericClass * gfs_source_control_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo source_control_info = { "GfsSourceControl", sizeof (GfsSourceControl), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) source_control_class_init, (GtsObjectInitFunc) source_control_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_scalar_class ()), &source_control_info); } return klass; } /** \endobject{GfsSourceControl} */ /** * Controlling the value of a scalar averaged at a given spatial scale. * \beginobject{GfsSourceControlField} */ static void source_control_field_destroy (GtsObject * o) { if (GFS_SOURCE_CONTROL_FIELD (o)->s) gts_object_destroy (GTS_OBJECT (GFS_SOURCE_CONTROL_FIELD (o)->s)); (* GTS_OBJECT_CLASS (gfs_source_control_field_class ())->parent_class->destroy) (o); } static gdouble source_control_field_face_value (GfsSourceGeneric * s, FttCellFace * face, GfsVariable * v) { return gfs_face_interpolated_value_generic (face, GFS_SOURCE_CONTROL_FIELD (s)->s); } static void source_control_field_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_source_control_field_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsSourceControlField * f = GFS_SOURCE_CONTROL_FIELD (*o); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (level)"); return; } f->level = atoi (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_DOUBLE) { gts_file_error (fp, "expecting a number (tau)"); return; } f->tau = atof (fp->token->str); if (f->tau <= 0.) { gts_file_error (fp, "tau must be strictly positive"); return; } gts_file_next_token (fp); f->s = gfs_temporary_variable (GFS_DOMAIN (gfs_object_simulation (*o))); GfsSourceGeneric * s = GFS_SOURCE_GENERIC (*o); if (GFS_SOURCE_SCALAR (s)->v->face_source) { s->mac_value = s->centered_value = NULL; s->face_value = source_control_field_face_value; } } static void source_control_field_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_source_control_field_class ())->parent_class->write) (o, fp); fprintf (fp, " %d %g", GFS_SOURCE_CONTROL_FIELD (o)->level, GFS_SOURCE_CONTROL_FIELD (o)->tau); } static void source_control_field_root (FttCell * root, GfsSourceControlField * f) { Sum su = { GFS_SOURCE_SCALAR (f)->v, 0., 0. }; ftt_cell_traverse (root, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) sum, &su); GFS_VALUE (root, f->s) = su.sv > 0. ? (gfs_function_value (GFS_SOURCE_CONTROL (f)->intensity, root) - su.s/su.sv)/f->tau: 0.; } typedef struct { FttCell * root; gdouble * corners; GfsVariable * v; } ExtraData; static void extrapolate (FttCell * cell, ExtraData * p) { FttVector pos; ftt_cell_pos (cell, &pos); GFS_VALUE (cell, p->v) = gfs_interpolate_from_corners (p->root, pos, p->corners); } static void extrapolate_field (FttCell * root, GfsSourceControlField * f) { gdouble corners[4*(FTT_DIMENSION - 1) + 1]; ExtraData p = { root, corners, f->s }; gfs_cell_corner_values (root, f->s, f->level, corners); g_assert (!FTT_CELL_IS_LEAF (root)); ftt_cell_traverse (root, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) extrapolate, &p); } static gboolean source_control_field_event (GfsEvent * event, GfsSimulation * sim) { if ((* gfs_event_class ()->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsSourceControlField * f = GFS_SOURCE_CONTROL_FIELD (event); gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS, f->level, (FttCellTraverseFunc) source_control_field_root, event); gfs_restore_fpe_for_function (GFS_SOURCE_CONTROL (event)->intensity); gfs_domain_bc (domain, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_LEAFS, f->level, f->s); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL | FTT_TRAVERSE_NON_LEAFS, f->level, (FttCellTraverseFunc) extrapolate_field, event); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, f->s); return TRUE; } return FALSE; } static void source_control_field_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = source_control_field_destroy; GTS_OBJECT_CLASS (klass)->read = source_control_field_read; GTS_OBJECT_CLASS (klass)->write = source_control_field_write; GFS_EVENT_CLASS (klass)->event = source_control_field_event; } static gdouble source_control_field_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { return GFS_VALUE (cell, GFS_SOURCE_CONTROL_FIELD (s)->s); } static void source_control_field_init (GfsSourceGeneric * s) { s->mac_value = NULL; s->centered_value = source_control_field_value; GFS_SOURCE_CONTROL_FIELD (s)->tau = 1.; } GfsSourceGenericClass * gfs_source_control_field_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo source_control_field_info = { "GfsSourceControlField", sizeof (GfsSourceControlField), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) source_control_field_class_init, (GtsObjectInitFunc) source_control_field_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_control_class ()), &source_control_field_info); } return klass; } /** \endobject{GfsSourceControlField} */ /** * Adding a flux on a given area or volume. * \beginobject{GfsSourceFlux} */ static void source_flux_destroy (GtsObject * o) { if (GFS_SOURCE_FLUX (o)->intensity) gts_object_destroy (GTS_OBJECT (GFS_SOURCE_FLUX (o)->intensity)); if (GFS_SOURCE_FLUX (o)->fraction) gts_object_destroy (GTS_OBJECT (GFS_SOURCE_FLUX (o)->fraction)); (* GTS_OBJECT_CLASS (gfs_source_flux_class ())->parent_class->destroy) (o); } static void source_flux_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_source_flux_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsSourceFlux * f = GFS_SOURCE_FLUX (*o); f->intensity = gfs_function_new (gfs_function_class (), 0.); gfs_function_set_units (f->intensity, GFS_SOURCE_SCALAR (f)->v->units + FTT_DIMENSION); gfs_function_read (f->intensity, gfs_object_simulation (f), fp); if (fp->type == GTS_ERROR) return; f->fraction = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (f->fraction, gfs_object_simulation (f), fp); } static void source_flux_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_source_flux_class ())->parent_class->write) (o, fp); gfs_function_write (GFS_SOURCE_FLUX (o)->intensity, fp); gfs_function_write (GFS_SOURCE_FLUX (o)->fraction, fp); } static void add (FttCell * cell, GfsSourceFlux * s) { s->s += gfs_cell_volume (cell, GFS_DOMAIN (gfs_object_simulation (s)))* gfs_function_value (s->fraction, cell); } static gboolean source_flux_event (GfsEvent * event, GfsSimulation * sim) { if ((* gfs_event_class ()->event) (event, sim)) { GfsSourceFlux * s = GFS_SOURCE_FLUX (event); s->s = 0.; gfs_catch_floating_point_exceptions (); gfs_domain_traverse_leaves (GFS_DOMAIN (sim), (FttCellTraverseFunc) add, s); gfs_restore_fpe_for_function (s->fraction); gfs_catch_floating_point_exceptions (); s->s = s->s > 0. ? gfs_function_value (s->intensity, NULL)/s->s : 0.; gfs_restore_fpe_for_function (s->intensity); return TRUE; } return FALSE; } static void source_flux_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->read = source_flux_read; GTS_OBJECT_CLASS (klass)->write = source_flux_write; GTS_OBJECT_CLASS (klass)->destroy = source_flux_destroy; GFS_EVENT_CLASS (klass)->event = source_flux_event; } static gdouble source_flux_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { return GFS_SOURCE_FLUX (s)->s*gfs_function_value (GFS_SOURCE_FLUX (s)->fraction, cell); } static void source_flux_init (GfsSourceGeneric * s) { s->mac_value = s->centered_value = source_flux_value; } GfsSourceGenericClass * gfs_source_flux_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo source_flux_info = { "GfsSourceFlux", sizeof (GfsSourceFlux), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) source_flux_class_init, (GtsObjectInitFunc) source_flux_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_scalar_class ()), &source_flux_info); } return klass; } /** \endobject{SourceFlux} */ /** * Diffusion coefficient. * \beginobject{GfsDiffusion} */ static void diffusion_destroy (GtsObject * o) { GfsDiffusion * d = GFS_DIFFUSION (o); if (d->mu && d->mu != gfs_function_get_variable (d->val)) gts_object_destroy (GTS_OBJECT (d->mu)); gts_object_destroy (GTS_OBJECT (d->val)); (* GTS_OBJECT_CLASS (gfs_diffusion_class ())->parent_class->destroy) (o); } static void diffusion_read (GtsObject ** o, GtsFile * fp) { GfsDiffusion * d = GFS_DIFFUSION (*o); gfs_function_read (d->val, gfs_object_simulation (*o), fp); if (fp->type == GTS_ERROR) return; gfs_function_set_units (d->val, 2.); if (fp->type == '{') { gfs_multilevel_params_read (&d->par, fp); if (fp->type == GTS_ERROR) return; } } static void diffusion_write (GtsObject * o, FILE * fp) { gfs_function_write (GFS_DIFFUSION (o)->val, fp); fputc (' ', fp); gfs_multilevel_params_write (&GFS_DIFFUSION (o)->par, fp); } static void update_mu (FttCell * cell, GfsDiffusion * d) { GFS_VALUE (cell, d->mu) = gfs_function_value (d->val, cell); } static gboolean diffusion_event (GfsEvent * event, GfsSimulation * sim) { GfsDiffusion * d = GFS_DIFFUSION (event); if (!gfs_function_is_constant (d->val)) { if (d->mu == NULL && (d->mu = gfs_function_get_variable (d->val)) == NULL) d->mu = gfs_domain_add_variable (GFS_DOMAIN (sim), NULL, NULL); if (d->mu != gfs_function_get_variable (d->val)) { gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) update_mu, event); gfs_restore_fpe_for_function (d->val); } gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_get_from_below_intensive, d->mu); gfs_domain_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_ALL, -1, d->mu); return TRUE; } return FALSE; } static gdouble diffusion_face (GfsDiffusion * d, FttCellFace * face) { if (d->par.function) return gfs_function_face_value (d->val, face); if (d->mu) return gfs_face_interpolated_value_generic (face, d->mu); gdouble val = gfs_function_get_constant_value (d->val); return val < G_MAXDOUBLE ? val : 0.; } static gdouble diffusion_cell (GfsDiffusion * d, FttCell * cell) { if (d->mu) return GFS_VALUE (cell, d->mu); gdouble val = gfs_function_get_constant_value (d->val); return val < G_MAXDOUBLE ? val : 0.; } static gdouble diffusion_concentration_face (GfsDiffusion * d, FttCellFace * face) { return diffusion_face (d, face)*gfs_vof_face_fraction (face, GFS_VARIABLE_TRACER_VOF (d->phase)); } static gdouble diffusion_concentration_cell (GfsDiffusion * d, FttCell * cell) { return diffusion_cell (d, cell)*GFS_VALUE (cell, d->phase); } static void diffusion_class_init (GfsDiffusionClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = diffusion_destroy; GTS_OBJECT_CLASS (klass)->read = diffusion_read; GTS_OBJECT_CLASS (klass)->write = diffusion_write; GFS_EVENT_CLASS (klass)->event = diffusion_event; } static void diffusion_init (GfsDiffusion * d) { gfs_multilevel_params_init (&d->par); d->par.tolerance = 1e-6; d->val = gfs_function_new (gfs_function_class (), 0.); d->mu = NULL; d->face = diffusion_face; d->cell = diffusion_cell; } GfsDiffusionClass * gfs_diffusion_class (void) { static GfsDiffusionClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo diffusion_info = { "GfsDiffusion", sizeof (GfsDiffusion), sizeof (GfsDiffusionClass), (GtsObjectClassInitFunc) diffusion_class_init, (GtsObjectInitFunc) diffusion_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &diffusion_info); } return klass; } gdouble gfs_diffusion_face (GfsDiffusion * d, FttCellFace * f) { return (* d->face) (d, f); } gdouble gfs_diffusion_cell (GfsDiffusion * d, FttCell * cell) { return (* d->cell) (d, cell); } /** \endobject{GfsDiffusion} */ /** * Scalar diffusion. * \beginobject{GfsSourceDiffusion} */ static void source_diffusion_destroy (GtsObject * o) { gts_object_destroy (GTS_OBJECT (GFS_SOURCE_DIFFUSION (o)->D)); (* GTS_OBJECT_CLASS (gfs_source_diffusion_class ())->parent_class->destroy) (o); } static GfsSourceDiffusion * previous_diffusion_source (GfsVariable * v, GfsSourceDiffusion * d) { GSList * i; i = GTS_SLIST_CONTAINER (v->sources)->items; while (i) { if (i->data != d && GFS_IS_SOURCE_DIFFUSION (i->data) && GFS_SOURCE_DIFFUSION (i->data)->phi == d->phi) return i->data; i = i->next; } return NULL; } static void source_diffusion_read (GtsObject ** o, GtsFile * fp) { GfsSourceDiffusion * d; if (GTS_OBJECT_CLASS (gfs_source_diffusion_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_source_diffusion_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; d = GFS_SOURCE_DIFFUSION (*o); if (previous_diffusion_source (GFS_SOURCE_SCALAR (d)->v, d)) { gts_file_error (fp, "only one diffusion source can be specified"); return; } gfs_object_simulation_set (d->D, gfs_object_simulation (d)); (* GTS_OBJECT (d->D)->klass->read) ((GtsObject **) &d->D, fp); if (fp->type == GTS_ERROR) return; GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (fp->type != GTS_STRING) d->phi = GFS_SOURCE_SCALAR (*o)->v; else { d->phi = gfs_variable_from_name (domain->variables, fp->token->str); if (!d->phi) { gts_file_error (fp, "unknown variable '%s'", fp->token->str); return; } gts_file_next_token (fp); gfs_function_set_units (d->D->val, 2. + GFS_SOURCE_SCALAR (*o)->v->units - d->phi->units); } if (GFS_IS_VARIABLE_VOF_CONCENTRATION (GFS_SOURCE_SCALAR (d)->v)) { d->D->phase = GFS_VARIABLE (GFS_VARIABLE_VOF_CONCENTRATION (GFS_SOURCE_SCALAR (d)->v)->vof); d->D->face = diffusion_concentration_face; d->D->cell = diffusion_concentration_cell; } if (GFS_SOURCE_SCALAR (d)->v->component < FTT_DIMENSION && !gfs_function_is_constant (d->D->val)) g_warning ("%d:%d: Terms may be missing when using variable diffusion\n" "on vector quantities", fp->line, fp->pos); } static void source_diffusion_write (GtsObject * o, FILE * fp) { GfsSourceDiffusion * d = GFS_SOURCE_DIFFUSION (o); (* GTS_OBJECT_CLASS (gfs_source_diffusion_class ())->parent_class->write) (o, fp); (* GTS_OBJECT (d->D)->klass->write) (GTS_OBJECT (d->D), fp); if (d->phi != GFS_SOURCE_SCALAR (o)->v) fprintf (fp, " %s", d->phi->name); } static gboolean source_diffusion_event (GfsEvent * event, GfsSimulation * sim) { if ((* gfs_event_class ()->event) (event, sim)) { GfsSourceDiffusion * d = GFS_SOURCE_DIFFUSION (event); if ((* GFS_EVENT_CLASS (GTS_OBJECT (d->D)->klass)->event)) (* GFS_EVENT_CLASS (GTS_OBJECT (d->D)->klass)->event) (GFS_EVENT (d->D), sim); return TRUE; } return FALSE; } static gdouble source_diffusion_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { GfsVariable * phi = GFS_SOURCE_DIFFUSION (s)->phi != GFS_SOURCE_SCALAR (s)->v ? GFS_SOURCE_DIFFUSION (s)->phi : v; FttCellFace f; FttCellNeighbors n; GfsGradient g = { 0., 0. }; gdouble v0, h; if (GFS_IS_MIXED (cell)) /* this improves results for channel test */ return 0.; v0 = GFS_VALUE (cell, phi); f.cell = cell; ftt_cell_neighbors (cell, &n); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) { gdouble D; f.neighbor = n.c[f.d]; D = gfs_source_diffusion_face (GFS_SOURCE_DIFFUSION (s), &f); if (f.neighbor) { GfsGradient e; gfs_face_gradient (&f, &e, phi->i, -1); g.a += D*e.a; g.b += D*e.b; } else if (f.d/2 == phi->component) { g.a += D; g.b -= D*v0; } } h = ftt_cell_size (cell); GfsFunction * alpha = phi->component < FTT_DIMENSION ? gfs_object_simulation (s)->physical_params.alpha : NULL; return (alpha ? gfs_function_value (alpha, cell) : 1.)*(g.b - g.a*v0)/(h*h); } static void source_diffusion_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = source_diffusion_destroy; GTS_OBJECT_CLASS (klass)->read = source_diffusion_read; GTS_OBJECT_CLASS (klass)->write = source_diffusion_write; GFS_EVENT_CLASS (klass)->event = source_diffusion_event; } static void source_diffusion_init (GfsSourceDiffusion * d) { d->D = GFS_DIFFUSION (gts_object_new (GTS_OBJECT_CLASS (gfs_diffusion_class ()))); GFS_SOURCE_GENERIC (d)->mac_value = source_diffusion_value; } GfsSourceGenericClass * gfs_source_diffusion_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo source_diffusion_info = { "GfsSourceDiffusion", sizeof (GfsSourceDiffusion), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) source_diffusion_class_init, (GtsObjectInitFunc) source_diffusion_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_scalar_class ()), &source_diffusion_info); } return klass; } gdouble gfs_source_diffusion_face (GfsSourceDiffusion * d, FttCellFace * f) { g_return_val_if_fail (d != NULL, 0.); g_return_val_if_fail (f != NULL, 0.); return gfs_diffusion_face (d->D, f); } gdouble gfs_source_diffusion_cell (GfsSourceDiffusion * d, FttCell * cell) { g_return_val_if_fail (d != NULL, 0.); g_return_val_if_fail (cell != NULL, 0.); return gfs_diffusion_cell (d->D, cell); } /** \endobject{GfsSourceDiffusionExplicit} */ /** * Time-explicit scalar diffusion. * \beginobject{GfsSourceDiffusionExplicit} */ typedef struct { GfsSourceGeneric * s; GfsVariable * v, * sv, * tv; gdouble dt; } FluxPar; static void add_diffusion_explicit_flux (FttCell * cell, FluxPar * p) { /* see also poisson.c:diffusion_rhs() */ gdouble f, h, val; FttCellNeighbors neighbor; FttCellFace face; if (GFS_IS_MIXED (cell)) { GfsSolidVector * solid = GFS_STATE (cell)->solid; if (((cell)->flags & GFS_FLAG_DIRICHLET) != 0) f = gfs_cell_dirichlet_gradient_flux (cell, p->v->i, -1, solid->fv); else f = solid->fv*solid->v.x; } else f = 0.; /* Neumann condition by default */ h = ftt_cell_size (cell); val = GFS_VALUE (cell, p->v); face.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (face.d = 0; face.d < FTT_NEIGHBORS; face.d++) { GfsGradient g; face.neighbor = neighbor.c[face.d]; gfs_face_cm_weighted_gradient (&face, &g, p->v->i, -1); if (face.d/2 == p->v->component) { g.a *= 2.; g.b *= 2.; } f += g.b - g.a*val; } GFS_VALUE (cell, p->sv) += f/(h*h); } static void source_diffusion_explicit_flux (GfsSourceGeneric * s, GfsDomain * domain, GfsVariable * v, GfsVariable * sv, gdouble dt) { GfsVariable * phi = GFS_SOURCE_DIFFUSION (s)->phi; gfs_domain_surface_bc (domain, phi); gfs_diffusion_coefficients (domain, GFS_SOURCE_DIFFUSION (s), dt, NULL, NULL, NULL, 1.); FluxPar p = { s, phi, sv }; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) add_diffusion_explicit_flux, &p); } static void gfs_source_diffusion_explicit_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_source_diffusion_explicit_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_source_diffusion_explicit_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; } static void gfs_source_diffusion_explicit_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_source_diffusion_explicit_class ())->parent_class->write) (o, fp); } typedef struct { GfsFunction * alpha; GfsSourceGeneric * s; gdouble dtmax; } StabilityParams; static void cell_diffusion_stability (FttCell * cell, StabilityParams * par) { if (GFS_IS_MIXED (cell)) return; FttCellFace f; FttCellNeighbors n; gdouble Dmax = 0.; f.cell = cell; ftt_cell_neighbors (cell, &n); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) { gdouble D; f.neighbor = n.c[f.d]; D = gfs_source_diffusion_face (GFS_SOURCE_DIFFUSION (par->s), &f); if (D > Dmax) Dmax = D; } gdouble h = ftt_cell_size (cell); if (Dmax > 0.) { gdouble dtmax = h*h/(Dmax*(par->alpha ? gfs_function_value (par->alpha, cell) : 1.)) /* fixme: why 10? */ /10.; if (dtmax < par->dtmax) par->dtmax = dtmax; } } static gdouble source_diffusion_stability (GfsSourceGeneric * s, GfsSimulation * sim) { StabilityParams par; par.s = s; par.dtmax = G_MAXDOUBLE; par.alpha = NULL; if (GFS_SOURCE_SCALAR (s)->v == GFS_SOURCE_DIFFUSION (s)->phi) gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) cell_diffusion_stability, &par); /* else fixme: what is the stability condition in that case? */ return par.dtmax; } static void gfs_source_diffusion_explicit_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_source_diffusion_explicit_read; GTS_OBJECT_CLASS (klass)->write = gfs_source_diffusion_explicit_write; klass->stability = source_diffusion_stability; } static void gfs_source_diffusion_explicit_init (GfsSourceGeneric * s) { s->mac_value = s->centered_value = NULL; s->flux = source_diffusion_explicit_flux; } GfsSourceGenericClass * gfs_source_diffusion_explicit_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_source_diffusion_explicit_info = { "GfsSourceDiffusionExplicit", sizeof (GfsSourceDiffusionExplicit), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) gfs_source_diffusion_explicit_class_init, (GtsObjectInitFunc) gfs_source_diffusion_explicit_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_diffusion_class ()), &gfs_source_diffusion_explicit_info); } return klass; } /** \endobject{GfsSourceDiffusionExplicit} */ /** * Viscous terms. * \beginobject{GfsSourceViscosity} */ static void compute_transverse (FttCell * cell, FluxPar * p) { GfsVariable ** v = GFS_SOURCE_VISCOSITY (p->s)->v; gdouble h = ftt_cell_size (cell); GFS_VALUE (cell, p->tv) = gfs_center_gradient (cell, p->v->component, v[(p->v->component + 1) % FTT_DIMENSION]->i)/h; } static void source_viscosity_read (GtsObject ** o, GtsFile * fp) { GfsSourceViscosity * source; GfsSourceDiffusion * d; GfsDomain * domain; FttComponent c; (* GTS_OBJECT_CLASS (gfs_source_velocity_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; source = GFS_SOURCE_VISCOSITY (*o); domain = GFS_DOMAIN (gfs_object_simulation (source)); if (!(source->v = gfs_domain_velocity (domain))) { gts_file_error (fp, "cannot find velocity components"); return; } for (c = 0; c < FTT_DIMENSION; c++) { if (source->v[c]->sources == NULL) source->v[c]->sources = gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ())); gts_container_add (source->v[c]->sources, GTS_CONTAINEE (source)); } d = GFS_SOURCE_DIFFUSION (*o); gfs_object_simulation_set (d->D, gfs_object_simulation (d)); (* GTS_OBJECT (d->D)->klass->read) ((GtsObject **) &d->D, fp); } static void source_viscosity_write (GtsObject * o, FILE * fp) { GfsSourceDiffusion * d = GFS_SOURCE_DIFFUSION (o); (* GTS_OBJECT_CLASS (gfs_source_velocity_class ())->parent_class->write) (o, fp); (* GTS_OBJECT (d->D)->klass->write) (GTS_OBJECT (d->D), fp); } /* Returns explicit terms not included in the implicit scheme i.e. terms linked to a variable viscosity and/or metric terms */ static gdouble source_viscosity_non_diffusion_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { gdouble src = 0.; GfsVariable * mu = GFS_SOURCE_DIFFUSION (s)->D->mu; /* variable viscosity */ if (mu != NULL) { GfsVariable ** u = GFS_SOURCE_VISCOSITY (s)->v; FttComponent c = v->component, j; GfsFunction * alpha = gfs_object_simulation (s)->physical_params.alpha; gdouble h = ftt_cell_size (cell); gdouble a = 0.; for (j = 0; j < FTT_DIMENSION; j++) a += (gfs_center_gradient (cell, c, u[j]->i)* gfs_center_gradient (cell, j, mu->i)); src += a*(alpha ? gfs_function_value (alpha, cell) : 1.)/(h*h); } /* metric */ if (v->domain->viscous_metric_explicit) src += (* v->domain->viscous_metric_explicit) (v->domain, cell, v, GFS_SOURCE_DIFFUSION (s)->D); return src; } static gdouble source_viscosity_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { return (source_diffusion_value (s, cell, v) + source_viscosity_non_diffusion_value (s, cell, v)); } static void source_viscosity_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->read = source_viscosity_read; GTS_OBJECT_CLASS (klass)->write = source_viscosity_write; } static void source_viscosity_init (GfsSourceGeneric * s) { s->mac_value = source_viscosity_value; s->centered_value = source_viscosity_non_diffusion_value; s->flux = NULL; } GfsSourceGenericClass * gfs_source_viscosity_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo source_viscosity_info = { "GfsSourceViscosity", sizeof (GfsSourceViscosity), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) source_viscosity_class_init, (GtsObjectInitFunc) source_viscosity_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_diffusion_class ()), &source_viscosity_info); } return klass; } /** \endobject{GfsSourceViscosity} */ /** * * \beginobject{GfsSourceViscosityExplicit} */ static gdouble source_viscosity_stability (GfsSourceGeneric * s, GfsSimulation * sim) { StabilityParams par; par.s = s; par.dtmax = G_MAXDOUBLE; par.alpha = sim->physical_params.alpha; gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) cell_diffusion_stability, &par); gfs_restore_fpe_for_function (par.alpha); return par.dtmax; } static void source_viscosity_explicit_class_init (GfsSourceGenericClass * klass) { klass->stability = source_viscosity_stability; } /* Defining this will use the divergence-free condition to decouple the diffusion equations for each component. This only works of course for constant viscosity and does not work for axisymmetric flows. */ /* #define NOTRANSVERSE */ static void add_viscosity_explicit_flux (FttCell * cell, FluxPar * p) { FttCellFace f; FttCellNeighbors n; GfsGradient g = { 0., 0. }; gdouble v0; if (GFS_IS_MIXED (cell)) { if (((cell)->flags & GFS_FLAG_DIRICHLET) != 0) g.b = gfs_cell_dirichlet_gradient_flux (cell, p->v->i, -1., 0.); } v0 = GFS_VALUE (cell, p->v); f.cell = cell; ftt_cell_neighbors (cell, &n); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) { GfsGradient e; f.neighbor = n.c[f.d]; gfs_face_cm_weighted_gradient (&f, &e, p->v->i, -1); #ifndef NOTRANSVERSE if (f.d/2 == p->v->component) { e.a *= 2.; e.b *= 2.; } #endif g.a += e.a; g.b += e.b; } gdouble transverse = 0.; #ifndef NOTRANSVERSE #if FTT_2D FttComponent ortho = (p->v->component + 1) % FTT_DIMENSION; for (f.d = 2*ortho; f.d <= 2*ortho + 1; f.d++) { f.neighbor = n.c[f.d]; transverse += (FTT_FACE_DIRECT (&f) ? 1. : -1.)* gfs_face_weighted_interpolated_value (&f, p->tv->i); } #else g_assert_not_implemented (); #endif #endif GfsFunction * alpha = gfs_object_simulation (p->s)->physical_params.alpha; gdouble h = ftt_cell_size (cell); GFS_VALUE (cell, p->sv) += (alpha ? gfs_function_value (alpha, cell) : 1.)* ((g.b - g.a*v0)/h + transverse)/h; } static void add_axisymmetric_term (FttCell * cell, FluxPar * p) { GfsFunction * alpha = gfs_object_simulation (p->s)->physical_params.alpha; gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.; GFS_VALUE (cell, p->sv) -= (alpha ? gfs_function_value (alpha, cell) : 1.)* 2.*gfs_source_diffusion_cell (GFS_SOURCE_DIFFUSION (p->s), cell)* GFS_VALUE (cell, p->v)* a*a/gfs_domain_cell_fraction (p->v->domain, cell)* p->dt; } static void source_viscosity_explicit_flux (GfsSourceGeneric * s, GfsDomain * domain, GfsVariable * v, GfsVariable * sv, gdouble dt) { FluxPar p; gfs_domain_surface_bc (domain, v); gfs_diffusion_coefficients (domain, GFS_SOURCE_DIFFUSION (s), dt, NULL, NULL, NULL, 1.); p.s = s; p.v = v; p.sv = sv; p.dt = dt; p.tv = gfs_temporary_variable (domain); gfs_traverse_and_bc (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_transverse, &p, p.tv, p.tv); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) add_viscosity_explicit_flux, &p); if (GFS_IS_AXI (domain) && v->component == FTT_Y) gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) add_axisymmetric_term, &p); gts_object_destroy (GTS_OBJECT (p.tv)); } static void source_viscosity_explicit_init (GfsSourceGeneric * s) { s->mac_value = NULL; s->centered_value = NULL; s->flux = source_viscosity_explicit_flux; } GfsSourceGenericClass * gfs_source_viscosity_explicit_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo source_viscosity_explicit_info = { "GfsSourceViscosityExplicit", sizeof (GfsSourceViscosity), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) source_viscosity_explicit_class_init, (GtsObjectInitFunc) source_viscosity_explicit_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_viscosity_class ()), &source_viscosity_explicit_info); } return klass; } /** \endobject{GfsSourceViscosityExplicit} */ /** * Coriolis acceleration, linear friction and/or advection metric terms. * \beginobject{GfsSourceCoriolis} */ static void source_coriolis_destroy (GtsObject * o) { GfsSourceCoriolis * s = GFS_SOURCE_CORIOLIS (o); FttComponent c; if (s->omegaz) gts_object_destroy (GTS_OBJECT (s->omegaz)); if (s->drag) gts_object_destroy (GTS_OBJECT (s->drag)); for (c = 0; c < FTT_DIMENSION; c++) if (s->u[c]) gts_object_destroy (GTS_OBJECT (s->u[c])); (* GTS_OBJECT_CLASS (gfs_source_class ())->parent_class->destroy) (o); } static void gfs_source_coriolis_read (GtsObject ** o, GtsFile * fp) { FttComponent c; GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); (* GTS_OBJECT_CLASS (gfs_source_coriolis_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; for (c = 0; c < FTT_DIMENSION; c++) { GfsVariable * v = GFS_SOURCE_VELOCITY (*o)->v[c]; if (v->sources) { GSList * i = GTS_SLIST_CONTAINER (v->sources)->items; while (i) { if (i->data != *o && GFS_IS_SOURCE_CORIOLIS (i->data)) { gts_file_error (fp, "variable '%s' cannot have multiple Coriolis source terms", v->name); return; } i = i->next; } } } GfsSourceCoriolis * s = GFS_SOURCE_CORIOLIS (*o); s->omegaz = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (s->omegaz, gfs_object_simulation (s), fp); if (fp->type != '\n') { s->drag = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (s->drag, gfs_object_simulation (s), fp); } if (s->beta < 1.) for (c = 0; c < FTT_DIMENSION; c++) s->u[c] = gfs_temporary_variable (domain); else { GFS_SOURCE_GENERIC (s)->centered_value = NULL; GFS_SOURCE_GENERIC (s)->mac_value = NULL; } #if !FTT_2D if (fp->type == '{') { GtsFileVariable var[] = { {GTS_DOUBLE, "x", TRUE, &s->d[0]}, {GTS_DOUBLE, "y", TRUE, &s->d[1]}, {GTS_DOUBLE, "z", TRUE, &s->d[2]}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; gdouble norm = sqrt (s->d[0]*s->d[0] + s->d[1]*s->d[1] + s->d[2]*s->d[2]); if (norm == 0.) gts_file_error (fp, "vector must be non-zero"); else { s->d[0] /= norm; s->d[1] /= norm; s->d[2] /= norm; } } #endif /* 3D */ } static void gfs_source_coriolis_write (GtsObject * o, FILE * fp) { GfsSourceCoriolis * s = GFS_SOURCE_CORIOLIS (o); (* GTS_OBJECT_CLASS (gfs_source_coriolis_class ())->parent_class->write) (o, fp); gfs_function_write (s->omegaz, fp); if (s->drag) gfs_function_write (s->drag, fp); if (s->d[2] != 1.) fprintf (fp," { x = %g y = %g z = %g }", s->d[0], s->d[1], s->d[2]); } static void coriolis_drag_metric_coefficients (GfsSourceCoriolis * sc, FttCell * cell, GfsVariable ** u, FttComponent c1, gdouble f[2]) { f[0] = sc->drag ? gfs_function_value (sc->drag, cell) : 0.; f[1] = sc->omegaz ? gfs_function_value (sc->omegaz, cell) : 0.; GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (sc)); if (domain->advection_metric) { /* fixme: 2D only */ FttComponent c2 = (c1 + 1) % 2; gdouble m[2]; (* domain->advection_metric) (domain, cell, c1, m); f[0] += GFS_VALUE (cell, u[c2])*m[0]; f[1] += (c1 == FTT_X ? 1. : -1.)*GFS_VALUE (cell, u[c2])*m[1]; } } static gdouble gfs_source_coriolis_mac_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { GfsSourceVelocity * sv = GFS_SOURCE_VELOCITY (s); GfsSourceCoriolis * sc = GFS_SOURCE_CORIOLIS (s); #if FTT_2D gdouble f[2]; coriolis_drag_metric_coefficients (sc, cell, sv->v, v->component, f); switch (v->component) { case FTT_X: return f[1]*GFS_VALUE (cell, sv->v[1]) - f[0]*GFS_VALUE (cell, sv->v[0]); case FTT_Y: return - f[0]*GFS_VALUE (cell, sv->v[1]) - f[1]*GFS_VALUE (cell, sv->v[0]); default: g_assert_not_reached (); } #else /* 3D */ gdouble f = gfs_function_value (sc->omegaz, cell); gdouble e = sc->drag ? gfs_function_value (sc->drag, cell) : 0.; switch (v->component) { case FTT_X: return - e*GFS_VALUE (cell, sv->v[0]) + f*(GFS_VALUE (cell, sv->v[1])*sc->d[2] - GFS_VALUE (cell, sv->v[2])*sc->d[1]); case FTT_Y: return - e*GFS_VALUE (cell, sv->v[1]) + f*(GFS_VALUE (cell, sv->v[2])*sc->d[0] - GFS_VALUE (cell, sv->v[0])*sc->d[2]); case FTT_Z: return - e*GFS_VALUE (cell, sv->v[2]) + f*(GFS_VALUE (cell, sv->v[0])*sc->d[1] - GFS_VALUE (cell, sv->v[1])*sc->d[0]); default: g_assert_not_reached (); } #endif /* 3D */ return 0.; } static void save_coriolis (FttCell * cell, GfsSourceCoriolis * s) { GfsSourceVelocity * sv = GFS_SOURCE_VELOCITY (s); #if FTT_2D gdouble f[2]; coriolis_drag_metric_coefficients (s, cell, sv->v, FTT_X, f); GFS_VALUE (cell, s->u[0]) = (1. - s->beta)*(f[1]*GFS_VALUE (cell, sv->v[1]) - f[0]*GFS_VALUE (cell, sv->v[0])); coriolis_drag_metric_coefficients (s, cell, sv->v, FTT_Y, f); GFS_VALUE (cell, s->u[1]) = (1. - s->beta)*(- f[0]*GFS_VALUE (cell, sv->v[1]) - f[1]*GFS_VALUE (cell, sv->v[0])); #else /* 3D */ gdouble f = gfs_function_value (s->omegaz, cell)*(1. - s->beta); gdouble e = s->drag ? gfs_function_value (s->drag, cell)*(1. - s->beta) : 0.; GFS_VALUE (cell, s->u[0]) = - e*GFS_VALUE (cell, sv->v[0]) + f*(GFS_VALUE (cell, sv->v[1])*s->d[2] - GFS_VALUE (cell, sv->v[2])*s->d[1]); GFS_VALUE (cell, s->u[1]) = - e*GFS_VALUE (cell, sv->v[1]) + f*(GFS_VALUE (cell, sv->v[2])*s->d[0] - GFS_VALUE (cell, sv->v[0])*s->d[2]); GFS_VALUE (cell, s->u[2]) = - e*GFS_VALUE (cell, sv->v[2]) + f*(GFS_VALUE (cell, sv->v[0])*s->d[1] - GFS_VALUE (cell, sv->v[1])*s->d[0]); #endif /* 3D */ } static gboolean gfs_source_coriolis_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_sum_class ())->parent_class)->event) (event, sim)) { if (GFS_SOURCE_CORIOLIS (event)->beta < 1.) { gfs_catch_floating_point_exceptions (); gfs_domain_traverse_layers (GFS_DOMAIN (sim), (FttCellTraverseFunc) save_coriolis, event); if (gfs_restore_floating_point_exceptions ()) { GfsSourceCoriolis * c = GFS_SOURCE_CORIOLIS (event); gchar * s = g_strconcat ("\n", gfs_function_description (c->omegaz, FALSE), NULL); if (c->drag) s = g_strconcat (s, "\n", gfs_function_description (c->drag, FALSE), NULL); /* fixme: memory leaks */ g_message ("floating-point exception in user-defined function(s):%s", s); exit (1); } } return TRUE; } return FALSE; } static gdouble gfs_source_coriolis_centered_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { return GFS_VALUE (cell, GFS_SOURCE_CORIOLIS (s)->u[v->component]); } static void gfs_source_coriolis_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = source_coriolis_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_source_coriolis_read; GTS_OBJECT_CLASS (klass)->write = gfs_source_coriolis_write; GFS_EVENT_CLASS (klass)->event = gfs_source_coriolis_event; } static void gfs_source_coriolis_init (GfsSourceGeneric * s) { s->mac_value = gfs_source_coriolis_mac_value; GFS_SOURCE_CORIOLIS (s)->beta = 0.5; /* Crank-Nicholson */ s->centered_value = gfs_source_coriolis_centered_value; GfsSourceCoriolis * sc = GFS_SOURCE_CORIOLIS (s); sc->d[0] = sc->d[1] = 0.; sc->d[2] = 1.; } GfsSourceGenericClass * gfs_source_coriolis_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_source_coriolis_info = { "GfsSourceCoriolis", sizeof (GfsSourceCoriolis), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) gfs_source_coriolis_class_init, (GtsObjectInitFunc) gfs_source_coriolis_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_velocity_class ()), &gfs_source_coriolis_info); } return klass; } /** * gfs_has_source_coriolis: * @domain: a #GfsDomain. * * Returns: the #GfsSourceCoriolis associated with @domain or %NULL. */ GfsSourceCoriolis * gfs_has_source_coriolis (GfsDomain * domain) { GfsVariable * v; g_return_val_if_fail (domain != NULL, NULL); v = gfs_variable_from_name (domain->variables, "U"); g_return_val_if_fail (v != NULL, NULL); if (v->sources) { GSList * i = GTS_SLIST_CONTAINER (v->sources)->items; while (i) { if (GFS_IS_SOURCE_CORIOLIS (i->data)) return i->data; i = i->next; } } return NULL; } static void implicit_coriolis_2D (FttCell * cell, GfsSourceCoriolis * s) { GfsSourceVelocity * sv = GFS_SOURCE_VELOCITY (s); gdouble m[2][2]; gdouble f[2]; GfsSimulation * sim = gfs_object_simulation (s); gdouble dt = sim->advection_params.dt*s->beta; coriolis_drag_metric_coefficients (s, cell, sv->v, FTT_X, f); m[0][0] = 1. + f[0]*dt; m[0][1] = - f[1]*dt; coriolis_drag_metric_coefficients (s, cell, sv->v, FTT_Y, f); m[1][0] = f[1]*dt; m[1][1] = 1. + f[0]*dt; gdouble det = m[0][0]*m[1][1] - m[0][1]*m[1][0]; gdouble u = GFS_VALUE (cell, sv->v[0]); gdouble v = GFS_VALUE (cell, sv->v[1]); GFS_VALUE (cell, sv->v[0]) = ( m[1][1]*u - m[0][1]*v)/det; GFS_VALUE (cell, sv->v[1]) = (- m[1][0]*u + m[0][0]*v)/det; } static void implicit_coriolis_3D (FttCell * cell, GfsSourceCoriolis * s) { GfsSourceVelocity * sv = GFS_SOURCE_VELOCITY (s); GfsSimulation * sim = gfs_object_simulation (s); gdouble c = sim->advection_params.dt*gfs_function_value (s->omegaz, cell)*s->beta; gdouble e = s->drag ? sim->advection_params.dt*gfs_function_value (s->drag, cell)*s->beta : 0.; GtsMatrix * m = gts_matrix_new ( 1. + e, -c*s->d[2], c*s->d[1], 0., c*s->d[2], 1. + e, -c*s->d[0], 0., -c*s->d[1], c*s->d[0], 1. + e, 0., 0., 0., 0., 0.); GtsMatrix * im = gts_matrix3_inverse (m); g_assert (im); gint i, j; gdouble vel[3]; for (i = 0; i < 3; i++) vel[i] = GFS_VALUE (cell, sv->v[i]); for (i = 0; i < 3; i++) { GFS_VALUE (cell, sv->v[i]) = 0.; for (j = 0; j < 3; j++) GFS_VALUE (cell, sv->v[i]) += im[i][j]*vel[j]; } gts_matrix_destroy (m); gts_matrix_destroy (im); } /** * gfs_source_coriolis_implicit: * @domain: a #GfsDomain. * @dt: the timestep. * * Applies the implicit part of the Coriolis source term of @domain. */ void gfs_source_coriolis_implicit (GfsDomain * domain, gdouble dt) { GfsSourceCoriolis * s; g_return_if_fail (domain != NULL); if ((s = gfs_has_source_coriolis (domain))) { GfsSimulation * sim = GFS_SIMULATION (domain); gdouble olddt = sim->advection_params.dt; sim->advection_params.dt = dt; gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) (s->d[2] != 1. ? implicit_coriolis_3D : implicit_coriolis_2D), s); if (gfs_restore_floating_point_exceptions ()) { gchar * c = g_strconcat ("\n", gfs_function_description (s->omegaz, FALSE), NULL); if (s->drag) c = g_strconcat (c, "\n", gfs_function_description (s->drag, FALSE), NULL); /* fixme: memory leaks */ g_message ("floating-point exception in user-defined function(s):%s", c); exit (1); } sim->advection_params.dt = olddt; } } /** \endobject{GfsSourceCoriolis} */ gerris-snapshot-131206/src/boundary.h0000644000175100017510000002430012250371171014444 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __BOUNDARY_H__ #define __BOUNDARY_H__ #include "fluid.h" #include "utils.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct _GfsBox GfsBox; typedef struct _GfsBoxClass GfsBoxClass; typedef struct _GfsBoundary GfsBoundary; typedef struct _GfsBoundaryClass GfsBoundaryClass; /* GfsBc: Header */ typedef struct _GfsBc GfsBc; struct _GfsBc { /*< private >*/ GtsObject parent; GfsLinearProblem * lp; /*< public >*/ GfsBoundary * b; GfsVariable * v; gboolean extra; FttFaceTraverseFunc bc, homogeneous_bc; FttFaceTraverseFunc homogeneous_bc_stencil; FttFaceTraverseFunc face_bc; }; typedef struct _GfsBcClass GfsBcClass; struct _GfsBcClass { /*< private >*/ GtsObjectClass parent_class; /*< public >*/ }; #define GFS_BC(obj) GTS_OBJECT_CAST (obj,\ GfsBc,\ gfs_bc_class ()) #define GFS_BC_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsBcClass,\ gfs_bc_class()) #define GFS_IS_BC(obj) (gts_object_is_from_class (obj,\ gfs_bc_class ())) GfsBcClass * gfs_bc_class (void); GfsBc * gfs_bc_new (GfsBcClass * k, GfsVariable * v, gboolean extra); /* GfsBcValue: Header */ typedef struct _GfsBcValue GfsBcValue; struct _GfsBcValue { /*< private >*/ GfsBc parent; /*< public >*/ GfsFunction * val; }; #define GFS_BC_VALUE(obj) GTS_OBJECT_CAST (obj,\ GfsBcValue,\ gfs_bc_value_class ()) #define GFS_IS_BC_VALUE(obj) (gts_object_is_from_class (obj,\ gfs_bc_value_class ())) GfsBcClass * gfs_bc_value_class (void); /* GfsBcDirichlet: Header */ #define GFS_IS_BC_DIRICHLET(obj) (gts_object_is_from_class (obj,\ gfs_bc_dirichlet_class ())) GfsBcClass * gfs_bc_dirichlet_class (void); /* GfsBcNeumann: Header */ #define GFS_IS_BC_NEUMANN(obj) (gts_object_is_from_class (obj,\ gfs_bc_neumann_class ())) GfsBcClass * gfs_bc_neumann_class (void); /* GfsBcAngle: Header */ #define GFS_IS_BC_ANGLE(obj) (gts_object_is_from_class (obj,\ gfs_bc_angle_class ())) GfsBcClass * gfs_bc_angle_class (void); /* GfsBcNavier: Header */ typedef struct _GfsBcNavier GfsBcNavier; struct _GfsBcNavier { /*< private >*/ GfsBcValue parent; /*< public >*/ GfsFunction * lambda; }; #define GFS_BC_NAVIER(obj) GTS_OBJECT_CAST (obj,\ GfsBcNavier,\ gfs_bc_navier_class ()) #define GFS_IS_BC_NAVIER(obj) (gts_object_is_from_class (obj,\ gfs_bc_navier_class ())) GfsBcClass * gfs_bc_navier_class (void); /* GfsBoundary: Header */ typedef enum { GFS_BOUNDARY_CENTER_VARIABLE, GFS_BOUNDARY_FACE_VARIABLE, GFS_BOUNDARY_MATCH_VARIABLE, GFS_BOUNDARY_VARIABLE_NUMBER } GfsBoundaryVariableType; struct _GfsBoundary { /*< private >*/ GtsObject parent; FttCell * root; GfsBox * box; FttDirection d; guint depth; GfsBc * default_bc; gboolean changed; /*< public >*/ GfsVariable * v; GfsBoundaryVariableType type; GHashTable * bc; }; struct _GfsBoundaryClass { GtsObjectClass parent_class; void (* match) (GfsBoundary * boundary); void (* send) (GfsBoundary * boundary); void (* receive) (GfsBoundary * boundary, FttTraverseFlags flags, gint max_depth); void (* synchronize) (GfsBoundary * boundary); void (* update) (GfsBoundary * boundary); }; #define GFS_BOUNDARY(obj) GTS_OBJECT_CAST (obj,\ GfsBoundary,\ gfs_boundary_class ()) #define GFS_BOUNDARY_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsBoundaryClass,\ gfs_boundary_class()) #define GFS_IS_BOUNDARY(obj) (gts_object_is_from_class (obj,\ gfs_boundary_class ())) GfsBoundaryClass * gfs_boundary_class (void); GfsBoundary * gfs_boundary_new (GfsBoundaryClass * klass, GfsBox * box, FttDirection d); void gfs_boundary_send (GfsBoundary * boundary); void gfs_boundary_update (GfsBoundary * boundary); void gfs_boundary_receive (GfsBoundary * boundary, FttTraverseFlags flags, gint max_depth); void gfs_boundary_synchronize (GfsBoundary * boundary); GfsBc * gfs_boundary_lookup_bc (GfsBoundary * b, GfsVariable * v); void gfs_boundary_set_default_bc (GfsBoundary * b, GfsBc * bc); void gfs_variable_set_default_bc (GfsVariable * v, GfsBc * bc); void gfs_boundary_add_bc (GfsBoundary * b, GfsBc * bc); /* GfsBoundaryInflowConstant: Header */ typedef struct _GfsBoundaryInflowConstant GfsBoundaryInflowConstant; typedef struct _GfsBoundaryInflowConstantClass GfsBoundaryInflowConstantClass; struct _GfsBoundaryInflowConstant { GfsBoundary parent; GfsFunction * un; }; struct _GfsBoundaryInflowConstantClass { GfsBoundaryClass parent_class; }; #define GFS_BOUNDARY_INFLOW_CONSTANT(obj) GTS_OBJECT_CAST (obj,\ GfsBoundaryInflowConstant,\ gfs_boundary_inflow_constant_class ()) #define GFS_BOUNDARY_INFLOW_CONSTANT_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsBoundaryInflowConstantClass,\ gfs_boundary_inflow_constant_class()) #define GFS_IS_BOUNDARY_INFLOW_CONSTANT(obj) (gts_object_is_from_class (obj,\ gfs_boundary_inflow_constant_class ())) GfsBoundaryInflowConstantClass * gfs_boundary_inflow_constant_class (void); /* GfsBoundaryOutflow: Header */ typedef struct _GfsBoundaryOutflowClass GfsBoundaryOutflowClass; struct _GfsBoundaryOutflowClass { GfsBoundaryClass parent_class; }; #define GFS_BOUNDARY_OUTFLOW_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsBoundaryOutflowClass,\ gfs_boundary_outflow_class()) #define GFS_IS_BOUNDARY_OUTFLOW(obj) (gts_object_is_from_class (obj,\ gfs_boundary_outflow_class ())) GfsBoundaryOutflowClass * gfs_boundary_outflow_class (void); /* GfsBoundaryGradient: Header */ #define GFS_IS_BOUNDARY_GRADIENT(obj) (gts_object_is_from_class (obj,\ gfs_boundary_gradient_class ())) GfsBoundaryClass * gfs_boundary_gradient_class (void); /* GfsBoundaryPeriodic: Header */ typedef struct _GfsBoundaryPeriodic GfsBoundaryPeriodic; struct _GfsBoundaryPeriodic { /*< private >*/ GfsBoundary parent; GfsBox * matching; FttDirection d; GArray * sndbuf, * rcvbuf; guint sndcount, rcvcount; gdouble rotate; }; #define GFS_BOUNDARY_PERIODIC(obj) GTS_OBJECT_CAST (obj,\ GfsBoundaryPeriodic,\ gfs_boundary_periodic_class ()) #define GFS_IS_BOUNDARY_PERIODIC(obj) (gts_object_is_from_class (obj,\ gfs_boundary_periodic_class ())) GfsBoundaryClass * gfs_boundary_periodic_class (void); GfsBoundaryPeriodic * gfs_boundary_periodic_new (GfsBoundaryClass * klass, GfsBox * box, FttDirection d, GfsBox * matching); void gfs_boundary_periodic_rotate (GfsBoundaryPeriodic * boundary, FttDirection rotate, gdouble orientation); GfsBoundaryPeriodic * gfs_boundary_periodic_rotate_new (GfsBoundaryClass * klass, GfsBox * box, FttDirection d, GfsBox * matching, FttDirection rotate, gdouble orientation); /* GfsGEdge: Header */ typedef struct _GfsGEdge GfsGEdge; typedef struct _GfsGEdgeClass GfsGEdgeClass; struct _GfsGEdge { GtsGEdge parent; FttDirection d, rotate; }; struct _GfsGEdgeClass { GtsGEdgeClass parent_class; }; #define GFS_GEDGE(obj) GTS_OBJECT_CAST (obj,\ GfsGEdge,\ gfs_gedge_class ()) #define GFS_GEDGE_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsGEdgeClass,\ gfs_gedge_class()) #define GFS_IS_GEDGE(obj) (gts_object_is_from_class (obj,\ gfs_gedge_class ())) GfsGEdgeClass * gfs_gedge_class (void); GfsGEdge * gfs_gedge_new (GfsGEdgeClass * klass, GfsBox * b1, GfsBox * b2, FttDirection d); void gfs_gedge_link_boxes (GfsGEdge * edge); struct _GfsBox { GtsGNode parent; FttCell * root; GtsObject * neighbor[FTT_NEIGHBORS]; guint id; int pid; gint size; }; struct _GfsBoxClass { GtsGNodeClass parent_class; }; #define GFS_BOX(obj) GTS_OBJECT_CAST (obj,\ GfsBox,\ gfs_box_class ()) #define GFS_BOX_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsBoxClass,\ gfs_box_class()) #define GFS_IS_BOX(obj) (gts_object_is_from_class (obj,\ gfs_box_class ())) GfsBoxClass * gfs_box_class (void); GfsBox * gfs_box_new (GfsBoxClass * klass); static inline GfsDomain * gfs_box_domain (GfsBox * box) { GfsDomain * d; g_return_val_if_fail (box != NULL, NULL); d = GTS_OBJECT (box)->reserved; if (GTS_SLIST_CONTAINEE (box)->containers) { GSList * i = GTS_SLIST_CONTAINEE (box)->containers; while (i->next) i = i->next; d = i->data; } return d; } #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __BOUNDARY_H__ */ gerris-snapshot-131206/src/function.h0000644000175100017510000001610012250371171014445 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __FUNCTION_H__ #define __FUNCTION_H__ #define NODATA GFS_NODATA static double Dirichlet = 1.; static double Neumann = 0.; static GfsSimulation * _sim = NULL; static FttCell * _cell = NULL; static double dd (const gchar * name, FttComponent c) { GfsVariable * v = gfs_variable_from_name (GFS_DOMAIN (_sim)->variables, name); if (v == NULL) return 0.; g_return_val_if_fail (_cell != NULL, 0.); return gfs_dimensional_value (v, gfs_center_gradient (_cell, c, v->i)/ (_sim->physical_params.L*ftt_cell_size (_cell))); } static double dd2 (const gchar * name, FttComponent c) { GfsVariable * v = gfs_variable_from_name (GFS_DOMAIN (_sim)->variables, name); if (v == NULL) return 0.; g_return_val_if_fail (_cell != NULL, 0.); FttCellFace f1 = ftt_cell_face (_cell, 2*c); FttCellFace f2 = ftt_cell_face (_cell, 2*c + 1); if (f1.neighbor && f2.neighbor) { GfsGradient g1, g2; gfs_face_gradient (&f1, &g1, v->i, -1); gfs_face_gradient (&f2, &g2, v->i, -1); return gfs_dimensional_value (v, (g1.b + g2.b - (g1.a + g2.a)*GFS_VALUE (_cell, v)) /pow (_sim->physical_params.L*ftt_cell_size (_cell), 2.)); } return 0.; } static double dx (const gchar * name) { return dd (name, FTT_X); } static double dy (const gchar * name) { return dd (name, FTT_Y); } static double dx2 (const gchar * name) { return dd2 (name, FTT_X); } static double dy2 (const gchar * name) { return dd2 (name, FTT_Y); } #if !FTT_2D static double dz (const gchar * name) { return dd (name, FTT_Z); } static double dz2 (const gchar * name) { return dd2 (name, FTT_Z); } #endif /* 3D */ static double area (const gchar * name) { GfsVariable * v = gfs_variable_from_name (GFS_DOMAIN (_sim)->variables, name); if (v == NULL || !GFS_IS_VARIABLE_TRACER_VOF (v)) return 0.; g_return_val_if_fail (_cell != NULL, 0.); GfsVariableTracerVOF * t = GFS_VARIABLE_TRACER_VOF (v); FttVector m, p; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] = GFS_VALUE (_cell, t->m[c]); return gfs_plane_area_center (&m, GFS_VALUE (_cell, t->alpha), &p)/ (_sim->physical_params.L*ftt_cell_size (_cell)); } static double correctness (const gchar * name) { GfsVariable * v = gfs_variable_from_name (GFS_DOMAIN (_sim)->variables, name); if (v == NULL || !GFS_IS_VARIABLE_TRACER_VOF (v)) return 0.; g_return_val_if_fail (_cell != NULL, 0.); return gfs_vof_correctness (_cell, GFS_VARIABLE_TRACER_VOF (v)); } static double distance (double xo, double yo, double zo) { /* fixme: this doesn't take mapping into account properly */ GtsPoint o; o.x = xo; o.y = yo; o.z = zo; gfs_simulation_map (_sim, (FttVector *) &o.x); GtsBBox bb; ftt_cell_bbox (_cell, &bb); gdouble min, max; gts_bbox_point_distance2 (&bb, &o, &min, &max); return sqrt (min)*_sim->physical_params.L; } static gboolean is_velocity (GfsVariable * v, GfsDomain * domain) { FttComponent c; GfsVariable ** u = gfs_domain_velocity (domain); for (c = 0; c < FTT_DIMENSION; c++) if (v == u[c]) return TRUE; return FALSE; } static void dirichlet_bc (FttCell * cell) { cell->flags |= GFS_FLAG_DIRICHLET; GFS_STATE (cell)->solid->fv = 0.; } static double dsd (const gchar * name, FttComponent c) { g_return_val_if_fail (_cell != NULL, NODATA); if (!GFS_IS_MIXED (_cell)) return NODATA; GfsVariable * v = gfs_variable_from_name (GFS_DOMAIN (_sim)->variables, name); if (v == NULL) return NODATA; if (v->surface_bc) (* GFS_SURFACE_GENERIC_BC_CLASS (GTS_OBJECT (v->surface_bc)->klass)->bc) (_cell, v->surface_bc); else if (is_velocity (v, GFS_DOMAIN (_sim))) dirichlet_bc (_cell); else /* Neumann */ return 0.; if ((_cell->flags & GFS_FLAG_DIRICHLET) == 0) return NODATA; FttVector g; gfs_cell_dirichlet_gradient (_cell, v->i, -1, GFS_STATE (_cell)->solid->fv, &g); return gfs_dimensional_value (v, (&g.x)[c]/(_sim->physical_params.L*ftt_cell_size (_cell))); } static double dsx (const gchar * name) { return dsd (name, FTT_X); } static double dsy (const gchar * name) { return dsd (name, FTT_Y); } #if !FTT_2D static double dsz (const gchar * name) { return dsd (name, FTT_Z); } #endif /* 3D */ static double flux (const gchar * name) { g_return_val_if_fail (_cell != NULL, NODATA); if (!GFS_IS_MIXED (_cell)) return 0.; GfsVariable * v = gfs_variable_from_name (GFS_DOMAIN (_sim)->variables, name); if (v == NULL) return 0.; if (v->surface_bc) (* GFS_SURFACE_GENERIC_BC_CLASS (GTS_OBJECT (v->surface_bc)->klass)->bc) (_cell, v->surface_bc); else if (is_velocity (v, GFS_DOMAIN (_sim))) dirichlet_bc (_cell); else /* Neumann */ return 0.; gdouble flux; if ((_cell->flags & GFS_FLAG_DIRICHLET) == 0) flux = GFS_STATE (_cell)->solid->fv; else { GfsSolidVector * s = GFS_STATE (_cell)->solid; FttVector m = {1.,1.,1.}; gfs_domain_solid_metric (GFS_DOMAIN (_sim), _cell, &m); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&s->v.x)[c] = (&m.x)[c]*(s->s[2*c + 1] - s->s[2*c]); flux = gfs_cell_dirichlet_gradient_flux (_cell, v->i, -1, GFS_STATE (_cell)->solid->fv); } return gfs_dimensional_value (v, flux*pow (_sim->physical_params.L*ftt_cell_size (_cell), FTT_DIMENSION - 2.)); } static gboolean overlaps (double x1, double y1, double x2, double y2) { double h = ftt_cell_size (_cell)/2.; FttVector p, min = { G_MAXDOUBLE, G_MAXDOUBLE }, max = { -G_MAXDOUBLE, -G_MAXDOUBLE }; ftt_cell_pos (_cell, &p); FttVector q[4]; q[0] = p; q[0].x += h; q[0].y += h; q[1] = p; q[1].x -= h; q[1].y += h; q[2] = p; q[2].x -= h; q[2].y -= h; q[3] = p; q[3].x += h; q[3].y -= h; gfs_simulation_map_inverse_cell (_sim, q); int i; for (i = 0; i < 4; i++) { if (q[i].x < min.x) min.x = q[i].x; if (q[i].y < min.y) min.y = q[i].y; if (q[i].x > max.x) max.x = q[i].x; if (q[i].y > max.y) max.y = q[i].y; } return (min.x <= x2 && min.y <= y2 && max.x >= x1 && max.y >= y1); } static double mapv (double u, double v, FttComponent c) { FttVector p, q = {u, v, 0.}; g_return_val_if_fail (_cell != NULL, 0.); ftt_cell_pos (_cell, &p); gfs_simulation_map_inverse_vector (_sim, &p, &q); return (&q.x)[c]; } static double mapvx (double u, double v) { return mapv (u, v, FTT_X); } static double mapvy (double u, double v) { return mapv (u, v, FTT_Y); } #endif /* __FUNCTION_H__ */ gerris-snapshot-131206/src/Makefile.in0000644000175100017510000021433612250371210014521 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = gerris2D$(EXEEXT) gerris3D$(EXEEXT) subdir = src DIST_COMMON = $(include_HEADERS) $(pkginclude_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/gerris2D.pc.in $(srcdir)/gerris3D.pc.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = gerris2D.pc gerris3D.pc CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgdatadir)" \ "$(DESTDIR)$(includedir)" "$(DESTDIR)$(pkgincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libgfs2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am__libgfs2D_la_SOURCES_DIST = ftt.c fluid.c variable.c output.c \ solid.c poisson.c advection.c boundary.c mpi_boundary.c \ timestep.c domain.c init.c refine.c event.c simulation.c \ graphic.c adaptive.c source.c tension.c vof.c utils.c ocean.c \ wave.c levelset.c myc.h myc2d.h cartesian.c surface.c \ unstructured.c map.c river.c moving.c balance.c metric.c \ particle.c ftt.h fluid.h variable.h output.h solid.h poisson.h \ advection.h boundary.h mpi_boundary.h timestep.h domain.h \ init.h refine.h event.h simulation.h graphic.h adaptive.h \ source.h tension.h vof.h utils.h ocean.h wave.h levelset.h \ isocube.h cartesian.h surface.h unstructured.h map.h river.h \ moving.h balance.h metric.h particle.h version.h \ open_memstream.c am__objects_1 = @OPEN_MEMSTREAM_TRUE@am__objects_2 = libgfs2D_la-open_memstream.lo am__objects_3 = libgfs2D_la-ftt.lo libgfs2D_la-fluid.lo \ libgfs2D_la-variable.lo libgfs2D_la-output.lo \ libgfs2D_la-solid.lo libgfs2D_la-poisson.lo \ libgfs2D_la-advection.lo libgfs2D_la-boundary.lo \ libgfs2D_la-mpi_boundary.lo libgfs2D_la-timestep.lo \ libgfs2D_la-domain.lo libgfs2D_la-init.lo \ libgfs2D_la-refine.lo libgfs2D_la-event.lo \ libgfs2D_la-simulation.lo libgfs2D_la-graphic.lo \ libgfs2D_la-adaptive.lo libgfs2D_la-source.lo \ libgfs2D_la-tension.lo libgfs2D_la-vof.lo libgfs2D_la-utils.lo \ libgfs2D_la-ocean.lo libgfs2D_la-wave.lo \ libgfs2D_la-levelset.lo libgfs2D_la-cartesian.lo \ libgfs2D_la-surface.lo libgfs2D_la-unstructured.lo \ libgfs2D_la-map.lo libgfs2D_la-river.lo libgfs2D_la-moving.lo \ libgfs2D_la-balance.lo libgfs2D_la-metric.lo \ libgfs2D_la-particle.lo $(am__objects_1) $(am__objects_2) am_libgfs2D_la_OBJECTS = $(am__objects_3) libgfs2D_la_OBJECTS = $(am_libgfs2D_la_OBJECTS) libgfs2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libgfs2D_la_CFLAGS) \ $(CFLAGS) $(libgfs2D_la_LDFLAGS) $(LDFLAGS) -o $@ libgfs3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am__libgfs3D_la_SOURCES_DIST = ftt.c fluid.c variable.c output.c \ solid.c poisson.c advection.c boundary.c mpi_boundary.c \ timestep.c domain.c init.c refine.c event.c simulation.c \ graphic.c adaptive.c source.c tension.c vof.c utils.c ocean.c \ wave.c levelset.c myc.h myc2d.h cartesian.c surface.c \ unstructured.c map.c river.c moving.c balance.c metric.c \ particle.c ftt.h fluid.h variable.h output.h solid.h poisson.h \ advection.h boundary.h mpi_boundary.h timestep.h domain.h \ init.h refine.h event.h simulation.h graphic.h adaptive.h \ source.h tension.h vof.h utils.h ocean.h wave.h levelset.h \ isocube.h cartesian.h surface.h unstructured.h map.h river.h \ moving.h balance.h metric.h particle.h version.h \ open_memstream.c @OPEN_MEMSTREAM_TRUE@am__objects_4 = open_memstream.lo am__objects_5 = ftt.lo fluid.lo variable.lo output.lo solid.lo \ poisson.lo advection.lo boundary.lo mpi_boundary.lo \ timestep.lo domain.lo init.lo refine.lo event.lo simulation.lo \ graphic.lo adaptive.lo source.lo tension.lo vof.lo utils.lo \ ocean.lo wave.lo levelset.lo cartesian.lo surface.lo \ unstructured.lo map.lo river.lo moving.lo balance.lo metric.lo \ particle.lo $(am__objects_1) $(am__objects_4) am_libgfs3D_la_OBJECTS = $(am__objects_5) libgfs3D_la_OBJECTS = $(am_libgfs3D_la_OBJECTS) libgfs3D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgfs3D_la_LDFLAGS) $(LDFLAGS) -o $@ PROGRAMS = $(bin_PROGRAMS) am_gerris2D_OBJECTS = gerris2D-gerris.$(OBJEXT) gerris2D_OBJECTS = $(am_gerris2D_OBJECTS) gerris2D_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(gerris2D_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am_gerris3D_OBJECTS = gerris.$(OBJEXT) gerris3D_OBJECTS = $(am_gerris3D_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libgfs2D_la_SOURCES) $(libgfs3D_la_SOURCES) \ $(gerris2D_SOURCES) $(gerris3D_SOURCES) DIST_SOURCES = $(am__libgfs2D_la_SOURCES_DIST) \ $(am__libgfs3D_la_SOURCES_DIST) $(gerris2D_SOURCES) \ $(gerris3D_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(pkgconfig_DATA) $(pkgdata_DATA) HEADERS = $(include_HEADERS) $(pkginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ AUTOMAKE_OPTIONS = 1.6 AM_CPPFLAGS = -DGFS_MODULES_DIR=\"$(libdir)/gerris\" -DGFS_DATA_DIR=\"$(pkgdatadir)\" INCLUDES = -I$(top_srcdir) -I$(includedir) \ -DG_LOG_DOMAIN=\"Gfs\" $(GTS_CFLAGS) pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gerris2D.pc gerris3D.pc pkgdata_DATA = m4.awk lib_LTLIBRARIES = libgfs2D.la libgfs3D.la BUILT_SOURCES = \ gerris2D.pc \ gerris3D.pc GFS_HDS = \ ftt.h \ fluid.h \ variable.h \ output.h \ solid.h \ poisson.h \ advection.h \ boundary.h \ mpi_boundary.h \ timestep.h \ domain.h \ init.h \ refine.h \ event.h \ simulation.h \ graphic.h \ adaptive.h \ source.h \ tension.h \ vof.h \ utils.h \ ocean.h \ wave.h \ levelset.h \ isocube.h \ cartesian.h \ surface.h \ unstructured.h \ map.h \ river.h \ moving.h \ balance.h \ metric.h \ particle.h \ version.h pkginclude_HEADERS = \ $(GFS_HDS) \ spatial.h \ function.h include_HEADERS = \ gfs.h @OPEN_MEMSTREAM_TRUE@MEMSTREAM = open_memstream.c SRC = \ ftt.c \ fluid.c \ variable.c \ output.c \ solid.c \ poisson.c \ advection.c \ boundary.c \ mpi_boundary.c \ timestep.c \ domain.c \ init.c \ refine.c \ event.c \ simulation.c \ graphic.c \ adaptive.c \ source.c \ tension.c \ vof.c \ utils.c \ ocean.c \ wave.c \ levelset.c \ myc.h \ myc2d.h \ cartesian.c \ surface.c \ unstructured.c \ map.c \ river.c \ moving.c \ balance.c \ metric.c \ particle.c \ $(GFS_HDS) \ $(MEMSTREAM) libgfs3D_la_LDFLAGS = $(NO_UNDEFINED)\ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)\ -release $(LT_RELEASE) -export-dynamic libgfs3D_la_SOURCES = $(SRC) libgfs3D_la_LIBADD = $(GTS_LIBS) libgfs2D_la_LDFLAGS = $(NO_UNDEFINED)\ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)\ -release $(LT_RELEASE) -export-dynamic libgfs2D_la_SOURCES = $(SRC) libgfs2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libgfs2D_la_LIBADD = $(GTS_LIBS) CLEANFILES = $(BUILT_SOURCES) EXTRA_DIST = \ ftt_internal.c \ moving2.c \ open_memstream.c \ verify.h \ m4.awk gerris2D_SOURCES = gerris.c gerris2D_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 gerris2D_LDADD = $(GFS2D_LIBS) gerris2D_DEPENDENCIES = libgfs2D.la gerris3D_SOURCES = gerris.c gerris3D_LDADD = $(GFS3D_LIBS) gerris3D_DEPENDENCIES = libgfs3D.la @DARCS_CONTROLLED_FALSE@DARCS_VERSION = @DARCS_CONTROLLED_TRUE@DARCS_VERSION = darcsversion all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): gerris2D.pc: $(top_builddir)/config.status $(srcdir)/gerris2D.pc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ gerris3D.pc: $(top_builddir)/config.status $(srcdir)/gerris3D.pc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgfs2D.la: $(libgfs2D_la_OBJECTS) $(libgfs2D_la_DEPENDENCIES) $(EXTRA_libgfs2D_la_DEPENDENCIES) $(libgfs2D_la_LINK) -rpath $(libdir) $(libgfs2D_la_OBJECTS) $(libgfs2D_la_LIBADD) $(LIBS) libgfs3D.la: $(libgfs3D_la_OBJECTS) $(libgfs3D_la_DEPENDENCIES) $(EXTRA_libgfs3D_la_DEPENDENCIES) $(libgfs3D_la_LINK) -rpath $(libdir) $(libgfs3D_la_OBJECTS) $(libgfs3D_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list gerris2D$(EXEEXT): $(gerris2D_OBJECTS) $(gerris2D_DEPENDENCIES) $(EXTRA_gerris2D_DEPENDENCIES) @rm -f gerris2D$(EXEEXT) $(gerris2D_LINK) $(gerris2D_OBJECTS) $(gerris2D_LDADD) $(LIBS) gerris3D$(EXEEXT): $(gerris3D_OBJECTS) $(gerris3D_DEPENDENCIES) $(EXTRA_gerris3D_DEPENDENCIES) @rm -f gerris3D$(EXEEXT) $(LINK) $(gerris3D_OBJECTS) $(gerris3D_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adaptive.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/advection.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/balance.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/boundary.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cartesian.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/domain.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fluid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gerris.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gerris2D-gerris.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graphic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/levelset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-adaptive.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-advection.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-balance.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-boundary.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-cartesian.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-domain.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-event.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-fluid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-ftt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-graphic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-init.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-levelset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-map.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-metric.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-moving.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-mpi_boundary.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-ocean.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-open_memstream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-output.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-particle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-poisson.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-refine.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-river.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-simulation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-solid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-source.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-surface.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-tension.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-timestep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-unstructured.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-variable.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-vof.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfs2D_la-wave.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/map.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/metric.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moving.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi_boundary.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ocean.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open_memstream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/output.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/particle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poisson.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/refine.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/river.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simulation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/source.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/surface.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tension.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timestep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unstructured.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/variable.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vof.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wave.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< libgfs2D_la-ftt.lo: ftt.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-ftt.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-ftt.Tpo -c -o libgfs2D_la-ftt.lo `test -f 'ftt.c' || echo '$(srcdir)/'`ftt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-ftt.Tpo $(DEPDIR)/libgfs2D_la-ftt.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ftt.c' object='libgfs2D_la-ftt.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-ftt.lo `test -f 'ftt.c' || echo '$(srcdir)/'`ftt.c libgfs2D_la-fluid.lo: fluid.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-fluid.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-fluid.Tpo -c -o libgfs2D_la-fluid.lo `test -f 'fluid.c' || echo '$(srcdir)/'`fluid.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-fluid.Tpo $(DEPDIR)/libgfs2D_la-fluid.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fluid.c' object='libgfs2D_la-fluid.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-fluid.lo `test -f 'fluid.c' || echo '$(srcdir)/'`fluid.c libgfs2D_la-variable.lo: variable.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-variable.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-variable.Tpo -c -o libgfs2D_la-variable.lo `test -f 'variable.c' || echo '$(srcdir)/'`variable.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-variable.Tpo $(DEPDIR)/libgfs2D_la-variable.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='variable.c' object='libgfs2D_la-variable.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-variable.lo `test -f 'variable.c' || echo '$(srcdir)/'`variable.c libgfs2D_la-output.lo: output.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-output.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-output.Tpo -c -o libgfs2D_la-output.lo `test -f 'output.c' || echo '$(srcdir)/'`output.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-output.Tpo $(DEPDIR)/libgfs2D_la-output.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='output.c' object='libgfs2D_la-output.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-output.lo `test -f 'output.c' || echo '$(srcdir)/'`output.c libgfs2D_la-solid.lo: solid.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-solid.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-solid.Tpo -c -o libgfs2D_la-solid.lo `test -f 'solid.c' || echo '$(srcdir)/'`solid.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-solid.Tpo $(DEPDIR)/libgfs2D_la-solid.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='solid.c' object='libgfs2D_la-solid.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-solid.lo `test -f 'solid.c' || echo '$(srcdir)/'`solid.c libgfs2D_la-poisson.lo: poisson.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-poisson.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-poisson.Tpo -c -o libgfs2D_la-poisson.lo `test -f 'poisson.c' || echo '$(srcdir)/'`poisson.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-poisson.Tpo $(DEPDIR)/libgfs2D_la-poisson.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='poisson.c' object='libgfs2D_la-poisson.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-poisson.lo `test -f 'poisson.c' || echo '$(srcdir)/'`poisson.c libgfs2D_la-advection.lo: advection.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-advection.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-advection.Tpo -c -o libgfs2D_la-advection.lo `test -f 'advection.c' || echo '$(srcdir)/'`advection.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-advection.Tpo $(DEPDIR)/libgfs2D_la-advection.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='advection.c' object='libgfs2D_la-advection.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-advection.lo `test -f 'advection.c' || echo '$(srcdir)/'`advection.c libgfs2D_la-boundary.lo: boundary.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-boundary.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-boundary.Tpo -c -o libgfs2D_la-boundary.lo `test -f 'boundary.c' || echo '$(srcdir)/'`boundary.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-boundary.Tpo $(DEPDIR)/libgfs2D_la-boundary.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boundary.c' object='libgfs2D_la-boundary.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-boundary.lo `test -f 'boundary.c' || echo '$(srcdir)/'`boundary.c libgfs2D_la-mpi_boundary.lo: mpi_boundary.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-mpi_boundary.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-mpi_boundary.Tpo -c -o libgfs2D_la-mpi_boundary.lo `test -f 'mpi_boundary.c' || echo '$(srcdir)/'`mpi_boundary.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-mpi_boundary.Tpo $(DEPDIR)/libgfs2D_la-mpi_boundary.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpi_boundary.c' object='libgfs2D_la-mpi_boundary.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-mpi_boundary.lo `test -f 'mpi_boundary.c' || echo '$(srcdir)/'`mpi_boundary.c libgfs2D_la-timestep.lo: timestep.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-timestep.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-timestep.Tpo -c -o libgfs2D_la-timestep.lo `test -f 'timestep.c' || echo '$(srcdir)/'`timestep.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-timestep.Tpo $(DEPDIR)/libgfs2D_la-timestep.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='timestep.c' object='libgfs2D_la-timestep.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-timestep.lo `test -f 'timestep.c' || echo '$(srcdir)/'`timestep.c libgfs2D_la-domain.lo: domain.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-domain.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-domain.Tpo -c -o libgfs2D_la-domain.lo `test -f 'domain.c' || echo '$(srcdir)/'`domain.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-domain.Tpo $(DEPDIR)/libgfs2D_la-domain.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='domain.c' object='libgfs2D_la-domain.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-domain.lo `test -f 'domain.c' || echo '$(srcdir)/'`domain.c libgfs2D_la-init.lo: init.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-init.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-init.Tpo -c -o libgfs2D_la-init.lo `test -f 'init.c' || echo '$(srcdir)/'`init.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-init.Tpo $(DEPDIR)/libgfs2D_la-init.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='init.c' object='libgfs2D_la-init.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-init.lo `test -f 'init.c' || echo '$(srcdir)/'`init.c libgfs2D_la-refine.lo: refine.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-refine.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-refine.Tpo -c -o libgfs2D_la-refine.lo `test -f 'refine.c' || echo '$(srcdir)/'`refine.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-refine.Tpo $(DEPDIR)/libgfs2D_la-refine.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='refine.c' object='libgfs2D_la-refine.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-refine.lo `test -f 'refine.c' || echo '$(srcdir)/'`refine.c libgfs2D_la-event.lo: event.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-event.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-event.Tpo -c -o libgfs2D_la-event.lo `test -f 'event.c' || echo '$(srcdir)/'`event.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-event.Tpo $(DEPDIR)/libgfs2D_la-event.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='event.c' object='libgfs2D_la-event.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-event.lo `test -f 'event.c' || echo '$(srcdir)/'`event.c libgfs2D_la-simulation.lo: simulation.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-simulation.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-simulation.Tpo -c -o libgfs2D_la-simulation.lo `test -f 'simulation.c' || echo '$(srcdir)/'`simulation.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-simulation.Tpo $(DEPDIR)/libgfs2D_la-simulation.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simulation.c' object='libgfs2D_la-simulation.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-simulation.lo `test -f 'simulation.c' || echo '$(srcdir)/'`simulation.c libgfs2D_la-graphic.lo: graphic.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-graphic.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-graphic.Tpo -c -o libgfs2D_la-graphic.lo `test -f 'graphic.c' || echo '$(srcdir)/'`graphic.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-graphic.Tpo $(DEPDIR)/libgfs2D_la-graphic.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='graphic.c' object='libgfs2D_la-graphic.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-graphic.lo `test -f 'graphic.c' || echo '$(srcdir)/'`graphic.c libgfs2D_la-adaptive.lo: adaptive.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-adaptive.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-adaptive.Tpo -c -o libgfs2D_la-adaptive.lo `test -f 'adaptive.c' || echo '$(srcdir)/'`adaptive.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-adaptive.Tpo $(DEPDIR)/libgfs2D_la-adaptive.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='adaptive.c' object='libgfs2D_la-adaptive.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-adaptive.lo `test -f 'adaptive.c' || echo '$(srcdir)/'`adaptive.c libgfs2D_la-source.lo: source.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-source.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-source.Tpo -c -o libgfs2D_la-source.lo `test -f 'source.c' || echo '$(srcdir)/'`source.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-source.Tpo $(DEPDIR)/libgfs2D_la-source.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source.c' object='libgfs2D_la-source.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-source.lo `test -f 'source.c' || echo '$(srcdir)/'`source.c libgfs2D_la-tension.lo: tension.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-tension.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-tension.Tpo -c -o libgfs2D_la-tension.lo `test -f 'tension.c' || echo '$(srcdir)/'`tension.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-tension.Tpo $(DEPDIR)/libgfs2D_la-tension.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tension.c' object='libgfs2D_la-tension.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-tension.lo `test -f 'tension.c' || echo '$(srcdir)/'`tension.c libgfs2D_la-vof.lo: vof.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-vof.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-vof.Tpo -c -o libgfs2D_la-vof.lo `test -f 'vof.c' || echo '$(srcdir)/'`vof.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-vof.Tpo $(DEPDIR)/libgfs2D_la-vof.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='vof.c' object='libgfs2D_la-vof.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-vof.lo `test -f 'vof.c' || echo '$(srcdir)/'`vof.c libgfs2D_la-utils.lo: utils.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-utils.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-utils.Tpo -c -o libgfs2D_la-utils.lo `test -f 'utils.c' || echo '$(srcdir)/'`utils.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-utils.Tpo $(DEPDIR)/libgfs2D_la-utils.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='utils.c' object='libgfs2D_la-utils.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-utils.lo `test -f 'utils.c' || echo '$(srcdir)/'`utils.c libgfs2D_la-ocean.lo: ocean.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-ocean.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-ocean.Tpo -c -o libgfs2D_la-ocean.lo `test -f 'ocean.c' || echo '$(srcdir)/'`ocean.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-ocean.Tpo $(DEPDIR)/libgfs2D_la-ocean.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ocean.c' object='libgfs2D_la-ocean.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-ocean.lo `test -f 'ocean.c' || echo '$(srcdir)/'`ocean.c libgfs2D_la-wave.lo: wave.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-wave.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-wave.Tpo -c -o libgfs2D_la-wave.lo `test -f 'wave.c' || echo '$(srcdir)/'`wave.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-wave.Tpo $(DEPDIR)/libgfs2D_la-wave.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='wave.c' object='libgfs2D_la-wave.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-wave.lo `test -f 'wave.c' || echo '$(srcdir)/'`wave.c libgfs2D_la-levelset.lo: levelset.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-levelset.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-levelset.Tpo -c -o libgfs2D_la-levelset.lo `test -f 'levelset.c' || echo '$(srcdir)/'`levelset.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-levelset.Tpo $(DEPDIR)/libgfs2D_la-levelset.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='levelset.c' object='libgfs2D_la-levelset.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-levelset.lo `test -f 'levelset.c' || echo '$(srcdir)/'`levelset.c libgfs2D_la-cartesian.lo: cartesian.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-cartesian.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-cartesian.Tpo -c -o libgfs2D_la-cartesian.lo `test -f 'cartesian.c' || echo '$(srcdir)/'`cartesian.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-cartesian.Tpo $(DEPDIR)/libgfs2D_la-cartesian.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cartesian.c' object='libgfs2D_la-cartesian.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-cartesian.lo `test -f 'cartesian.c' || echo '$(srcdir)/'`cartesian.c libgfs2D_la-surface.lo: surface.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-surface.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-surface.Tpo -c -o libgfs2D_la-surface.lo `test -f 'surface.c' || echo '$(srcdir)/'`surface.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-surface.Tpo $(DEPDIR)/libgfs2D_la-surface.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='surface.c' object='libgfs2D_la-surface.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-surface.lo `test -f 'surface.c' || echo '$(srcdir)/'`surface.c libgfs2D_la-unstructured.lo: unstructured.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-unstructured.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-unstructured.Tpo -c -o libgfs2D_la-unstructured.lo `test -f 'unstructured.c' || echo '$(srcdir)/'`unstructured.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-unstructured.Tpo $(DEPDIR)/libgfs2D_la-unstructured.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='unstructured.c' object='libgfs2D_la-unstructured.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-unstructured.lo `test -f 'unstructured.c' || echo '$(srcdir)/'`unstructured.c libgfs2D_la-map.lo: map.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-map.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-map.Tpo -c -o libgfs2D_la-map.lo `test -f 'map.c' || echo '$(srcdir)/'`map.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-map.Tpo $(DEPDIR)/libgfs2D_la-map.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='map.c' object='libgfs2D_la-map.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-map.lo `test -f 'map.c' || echo '$(srcdir)/'`map.c libgfs2D_la-river.lo: river.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-river.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-river.Tpo -c -o libgfs2D_la-river.lo `test -f 'river.c' || echo '$(srcdir)/'`river.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-river.Tpo $(DEPDIR)/libgfs2D_la-river.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='river.c' object='libgfs2D_la-river.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-river.lo `test -f 'river.c' || echo '$(srcdir)/'`river.c libgfs2D_la-moving.lo: moving.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-moving.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-moving.Tpo -c -o libgfs2D_la-moving.lo `test -f 'moving.c' || echo '$(srcdir)/'`moving.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-moving.Tpo $(DEPDIR)/libgfs2D_la-moving.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='moving.c' object='libgfs2D_la-moving.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-moving.lo `test -f 'moving.c' || echo '$(srcdir)/'`moving.c libgfs2D_la-balance.lo: balance.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-balance.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-balance.Tpo -c -o libgfs2D_la-balance.lo `test -f 'balance.c' || echo '$(srcdir)/'`balance.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-balance.Tpo $(DEPDIR)/libgfs2D_la-balance.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='balance.c' object='libgfs2D_la-balance.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-balance.lo `test -f 'balance.c' || echo '$(srcdir)/'`balance.c libgfs2D_la-metric.lo: metric.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-metric.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-metric.Tpo -c -o libgfs2D_la-metric.lo `test -f 'metric.c' || echo '$(srcdir)/'`metric.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-metric.Tpo $(DEPDIR)/libgfs2D_la-metric.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='metric.c' object='libgfs2D_la-metric.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-metric.lo `test -f 'metric.c' || echo '$(srcdir)/'`metric.c libgfs2D_la-particle.lo: particle.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-particle.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-particle.Tpo -c -o libgfs2D_la-particle.lo `test -f 'particle.c' || echo '$(srcdir)/'`particle.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-particle.Tpo $(DEPDIR)/libgfs2D_la-particle.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='particle.c' object='libgfs2D_la-particle.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-particle.lo `test -f 'particle.c' || echo '$(srcdir)/'`particle.c libgfs2D_la-open_memstream.lo: open_memstream.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -MT libgfs2D_la-open_memstream.lo -MD -MP -MF $(DEPDIR)/libgfs2D_la-open_memstream.Tpo -c -o libgfs2D_la-open_memstream.lo `test -f 'open_memstream.c' || echo '$(srcdir)/'`open_memstream.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libgfs2D_la-open_memstream.Tpo $(DEPDIR)/libgfs2D_la-open_memstream.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='open_memstream.c' object='libgfs2D_la-open_memstream.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgfs2D_la_CFLAGS) $(CFLAGS) -c -o libgfs2D_la-open_memstream.lo `test -f 'open_memstream.c' || echo '$(srcdir)/'`open_memstream.c gerris2D-gerris.o: gerris.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gerris2D_CFLAGS) $(CFLAGS) -MT gerris2D-gerris.o -MD -MP -MF $(DEPDIR)/gerris2D-gerris.Tpo -c -o gerris2D-gerris.o `test -f 'gerris.c' || echo '$(srcdir)/'`gerris.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/gerris2D-gerris.Tpo $(DEPDIR)/gerris2D-gerris.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gerris.c' object='gerris2D-gerris.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gerris2D_CFLAGS) $(CFLAGS) -c -o gerris2D-gerris.o `test -f 'gerris.c' || echo '$(srcdir)/'`gerris.c gerris2D-gerris.obj: gerris.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gerris2D_CFLAGS) $(CFLAGS) -MT gerris2D-gerris.obj -MD -MP -MF $(DEPDIR)/gerris2D-gerris.Tpo -c -o gerris2D-gerris.obj `if test -f 'gerris.c'; then $(CYGPATH_W) 'gerris.c'; else $(CYGPATH_W) '$(srcdir)/gerris.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/gerris2D-gerris.Tpo $(DEPDIR)/gerris2D-gerris.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gerris.c' object='gerris2D-gerris.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gerris2D_CFLAGS) $(CFLAGS) -c -o gerris2D-gerris.obj `if test -f 'gerris.c'; then $(CYGPATH_W) 'gerris.c'; else $(CYGPATH_W) '$(srcdir)/gerris.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) install-binPROGRAMS: install-libLTLIBRARIES installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-pkgconfigDATA \ install-pkgdataDATA install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \ uninstall-libLTLIBRARIES uninstall-pkgconfigDATA \ uninstall-pkgdataDATA uninstall-pkgincludeHEADERS .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libLTLIBRARIES clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-pkgconfigDATA install-pkgdataDATA \ install-pkgincludeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-includeHEADERS \ uninstall-libLTLIBRARIES uninstall-pkgconfigDATA \ uninstall-pkgdataDATA uninstall-pkgincludeHEADERS gerris2D.pc: gerris2D.pc.in gerris3D.pc: gerris3D.pc.in domain.c: version.h version.h: $(DARCS_VERSION) darcsversion: sh darcsversion.sh # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/src/adaptive.h0000644000175100017510000001140312250371171014416 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __ADAPTIVE_H__ #define __ADAPTIVE_H__ #include "simulation.h" #include "event.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ void gfs_cell_coarse_init (FttCell * cell, GfsDomain * domain); void gfs_adapt_stats_init (GfsAdaptStats * s); void gfs_adapt_stats_update (GfsAdaptStats * s); gboolean gfs_simulation_adapt (GfsSimulation * simulation); void gfs_domain_reshape (GfsDomain * domain, guint depth); /* GfsAdapt: Header */ typedef struct _GfsAdapt GfsAdapt; struct _GfsAdapt { /*< private >*/ GfsEvent parent; gboolean active; /*< public >*/ GfsFunction * minlevel, * maxlevel; guint mincells, maxcells; gdouble cmax, weight, cfactor; GfsVariable * c; GtsKeyFunc cost; }; #define GFS_ADAPT(obj) GTS_OBJECT_CAST (obj,\ GfsAdapt,\ gfs_adapt_class ()) #define GFS_IS_ADAPT(obj) (gts_object_is_from_class (obj,\ gfs_adapt_class ())) GfsEventClass * gfs_adapt_class (void); /* GfsAdaptVorticity: Header */ typedef struct _GfsAdaptVorticity GfsAdaptVorticity; struct _GfsAdaptVorticity { /*< private >*/ GfsAdapt parent; GfsVariable ** u; gdouble maxa; /*< public >*/ }; #define GFS_ADAPT_VORTICITY(obj) GTS_OBJECT_CAST (obj,\ GfsAdaptVorticity,\ gfs_adapt_vorticity_class ()) #define GFS_IS_ADAPT_VORTICITY(obj) (gts_object_is_from_class (obj,\ gfs_adapt_vorticity_class ())) GfsEventClass * gfs_adapt_vorticity_class (void); /* GfsAdaptStreamlineCurvature: Header */ #define GFS_IS_ADAPT_STREAMLINE_CURVATURE(obj) (gts_object_is_from_class (obj,\ gfs_adapt_streamline_curvature_class ())) GfsEventClass * gfs_adapt_streamline_curvature_class (void); /* GfsAdaptFunction: Header */ typedef struct _GfsAdaptFunction GfsAdaptFunction; struct _GfsAdaptFunction { /*< private >*/ GfsAdapt parent; /*< public >*/ GfsFunction * f; }; #define GFS_ADAPT_FUNCTION(obj) GTS_OBJECT_CAST (obj,\ GfsAdaptFunction,\ gfs_adapt_function_class ()) #define GFS_IS_ADAPT_FUNCTION(obj) (gts_object_is_from_class (obj,\ gfs_adapt_function_class ())) GfsEventClass * gfs_adapt_function_class (void); /* GfsAdaptGradient: Header */ typedef struct _GfsAdaptGradient GfsAdaptGradient; struct _GfsAdaptGradient { /*< private >*/ GfsAdaptFunction parent; gdouble dimension; /*< public >*/ GfsVariable * v; }; #define GFS_ADAPT_GRADIENT(obj) GTS_OBJECT_CAST (obj,\ GfsAdaptGradient,\ gfs_adapt_gradient_class ()) #define GFS_IS_ADAPT_GRADIENT(obj) (gts_object_is_from_class (obj,\ gfs_adapt_gradient_class ())) GfsEventClass * gfs_adapt_gradient_class (void); /* GfsAdaptError: Header */ typedef struct _GfsAdaptError GfsAdaptError; struct _GfsAdaptError { /*< private >*/ GfsAdaptGradient parent; GfsVariable * dv[FTT_DIMENSION]; FttComponent c; /*< public >*/ GfsVariable * v; }; #define GFS_ADAPT_ERROR(obj) GTS_OBJECT_CAST (obj,\ GfsAdaptError,\ gfs_adapt_error_class ()) #define GFS_IS_ADAPT_ERROR(obj) (gts_object_is_from_class (obj,\ gfs_adapt_error_class ())) GfsEventClass * gfs_adapt_error_class (void); /* GfsAdaptThickness: Header */ typedef struct _GfsAdaptThickness GfsAdaptThickness; struct _GfsAdaptThickness { /*< private >*/ GfsAdapt parent; /*< public >*/ GfsVariable * v, * c; }; #define GFS_ADAPT_THICKNESS(obj) GTS_OBJECT_CAST (obj,\ GfsAdaptThickness,\ gfs_adapt_thickness_class ()) #define GFS_IS_ADAPT_THICKNESS(obj) (gts_object_is_from_class (obj,\ gfs_adapt_thickness_class ())) GfsEventClass * gfs_adapt_thickness_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __ADAPTIVE_H__ */ gerris-snapshot-131206/src/solid.h0000644000175100017510000000611412250371171013736 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __SOLID_H__ #define __SOLID_H__ #include #include "domain.h" #include "event.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ enum { GFS_STATUS_UNDEFINED = 0, GFS_STATUS_SOLID = 1, GFS_STATUS_FLUID = 2 }; void gfs_cell_fluid (FttCell * cell); gboolean gfs_solid_is_thin (FttCell * cell, GfsGenericSurface * s); gboolean gfs_set_2D_solid_fractions_from_surface (FttCell * cell, GfsGenericSurface * s); guint gfs_init_solid_fractions_leaves (GfsDomain * domain, GSList * i, GfsVariable * status); void gfs_init_solid_fractions_from_children (GfsDomain * domain, gboolean destroy_solid, FttCellCleanupFunc cleanup, gpointer data, GfsVariable * status); guint gfs_domain_init_solid_fractions (GfsDomain * domain, GSList * i, gboolean destroy_solid, FttCellCleanupFunc cleanup, gpointer data, GfsVariable * status); void gfs_cell_init_solid_fractions_from_children (FttCell * cell); gboolean gfs_cell_check_solid_fractions (FttCell * root); void gfs_domain_init_fraction (GfsDomain * domain, GfsGenericSurface * s, GfsVariable * c); void gfs_cell_cm (const FttCell * cell, FttVector * cm); void gfs_solid_normal (const FttCell * cell, FttVector * n); void gfs_face_ca (const FttCellFace * face, FttVector * ca); void gfs_solid_coarse_fine (FttCell * parent, GfsDomain * domain); /* GfsSolid: Header */ typedef struct _GfsSolid GfsSolid; struct _GfsSolid { /*< private >*/ GfsEvent parent; /*< public >*/ GfsGenericSurface * s; }; #define GFS_SOLID(obj) GTS_OBJECT_CAST (obj,\ GfsSolid,\ gfs_solid_class ()) #define GFS_IS_SOLID(obj) (gts_object_is_from_class (obj,\ gfs_solid_class ())) GfsEventClass * gfs_solid_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __SOLID_H__ */ gerris-snapshot-131206/src/tension.h0000644000175100017510000000775012250371171014312 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __TENSION_H__ #define __TENSION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "source.h" /* GfsSourceTensionGeneric: Header */ typedef struct _GfsSourceTensionGeneric GfsSourceTensionGeneric; struct _GfsSourceTensionGeneric { /*< private >*/ GfsSourceVelocity parent; /*< public >*/ GfsVariable * c; GfsFunction * sigma; }; #define GFS_SOURCE_TENSION_GENERIC(obj) GTS_OBJECT_CAST (obj,\ GfsSourceTensionGeneric,\ gfs_source_tension_generic_class ()) #define GFS_IS_SOURCE_TENSION_GENERIC(obj) (gts_object_is_from_class (obj,\ gfs_source_tension_generic_class ())) GfsSourceGenericClass * gfs_source_tension_generic_class (void); /* GfsSourceTensionCSS: Header */ typedef struct _GfsSourceTensionCSS GfsSourceTensionCSS; struct _GfsSourceTensionCSS { /*< private >*/ GfsSourceTensionGeneric parent; GfsVariable * g[3]; /*< public >*/ GfsVariable * t[FTT_DIMENSION]; }; #define GFS_SOURCE_TENSION_CSS(obj) GTS_OBJECT_CAST (obj,\ GfsSourceTensionCSS,\ gfs_source_tension_css_class ()) #define GFS_IS_SOURCE_TENSION_CSS(obj) (gts_object_is_from_class (obj,\ gfs_source_tension_css_class ())) GfsSourceGenericClass * gfs_source_tension_css_class (void); /* GfsSourceTension: Header */ typedef struct _GfsSourceTension GfsSourceTension; struct _GfsSourceTension { /*< private >*/ GfsSourceTensionGeneric parent; /*< public >*/ GfsVariable * k; }; #define GFS_SOURCE_TENSION(obj) GTS_OBJECT_CAST (obj,\ GfsSourceTension,\ gfs_source_tension_class ()) #define GFS_IS_SOURCE_TENSION(obj) (gts_object_is_from_class (obj,\ gfs_source_tension_class ())) GfsSourceGenericClass * gfs_source_tension_class (void); void gfs_source_tension_coefficients (GfsSourceTension * s, GfsDomain * domain, GfsFunction * alpha); /* GfsVariableCurvature: header */ typedef struct _GfsVariableCurvature GfsVariableCurvature; struct _GfsVariableCurvature { /*< private >*/ GfsVariable parent; /*< public >*/ GfsVariable * f, * kmax; }; #define GFS_VARIABLE_CURVATURE(obj) GTS_OBJECT_CAST (obj,\ GfsVariableCurvature,\ gfs_variable_curvature_class ()) #define GFS_IS_VARIABLE_CURVATURE(obj) (gts_object_is_from_class (obj,\ gfs_variable_curvature_class ())) GfsVariableClass * gfs_variable_curvature_class (void); /* GfsVariablePosition: header */ typedef struct _GfsVariablePosition GfsVariablePosition; struct _GfsVariablePosition { /*< private >*/ GfsVariableCurvature parent; /*< public >*/ FttComponent c; gdouble ref; }; #define GFS_VARIABLE_POSITION(obj) GTS_OBJECT_CAST (obj,\ GfsVariablePosition,\ gfs_variable_position_class ()) #define GFS_IS_VARIABLE_POSITION(obj) (gts_object_is_from_class (obj,\ gfs_variable_position_class ())) GfsVariableClass * gfs_variable_position_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __TENSION_H__ */ gerris-snapshot-131206/src/boundary.c0000644000175100017510000016353112250371171014451 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Boundary conditions. */ #include #include #include "config.h" #include "boundary.h" #include "simulation.h" #include "adaptive.h" #include "vof.h" static FttVector rpos[FTT_NEIGHBORS] = { #if FTT_2D {1.,0.,0.}, {-1.,0.,0.}, {0.,1.,0.}, {0.,-1.,0.} #else /* FTT_3D */ {1.,0.,0.}, {-1.,0.,0.}, {0.,1.,0.}, {0.,-1.,0.}, {0.,0.,1.}, {0.,0.,-1.} #endif /* FTT_3D */ }; /** * Default symmetry boundary condition. * \beginobject{GfsBc} */ static void symmetry (FttCellFace * f, GfsBc * b) { if (b->v->component == f->d/2 && !b->v->even) GFS_VALUE (f->cell, b->v) = - GFS_VALUE (f->neighbor, b->v); else GFS_VALUE (f->cell, b->v) = GFS_VALUE (f->neighbor, b->v); } static void set_stencil_neighbor (FttCellFace * f, GfsBc * b, gdouble w) { GFS_DOUBLE_TO_POINTER (GFS_VALUE (f->cell, b->lp->neighbor)) = f->neighbor; GFS_VALUE (f->cell, b->lp->neighborw) = w; } static void symmetry_stencil (FttCellFace * f, GfsBc * b) { set_stencil_neighbor (f, b, (b->v->component == f->d/2 && !b->v->even) ? -1. : 1.); } static void face_symmetry (FttCellFace * f, GfsBc * b) { if (b->v->component == f->d/2 && !b->v->even) GFS_STATE (f->cell)->f[f->d].v = GFS_STATE (f->neighbor)->f[FTT_OPPOSITE_DIRECTION (f->d)].v = 0.; else if (GFS_IS_VARIABLE_TRACER_VOF (b->v)) GFS_STATE (f->cell)->f[f->d].v = GFS_VALUE (f->neighbor, b->v); else GFS_STATE (f->cell)->f[f->d].v = GFS_STATE (f->neighbor)->f[FTT_OPPOSITE_DIRECTION (f->d)].v; } static void bc_write (GtsObject * o, FILE * fp) { g_assert (GFS_BC (o)->v); fprintf (fp, "%s %s", o->klass->info.name, GFS_BC (o)->v->name); } static void bc_read (GtsObject ** o, GtsFile * fp) { GfsBc * bc = GFS_BC (*o); g_assert (bc->b); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (klass)"); return; } gts_file_next_token (fp); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (v)"); return; } bc->v = gfs_variable_from_name (gfs_box_domain (bc->b->box)->variables, fp->token->str); if (bc->v == NULL) gts_file_error (fp, "unknown variable `%s'", fp->token->str); else gts_file_next_token (fp); } static void gfs_bc_class_init (GtsObjectClass * klass) { klass->write = bc_write; klass->read = bc_read; } static void gfs_bc_init (GfsBc * object) { object->bc = (FttFaceTraverseFunc) symmetry; object->homogeneous_bc = (FttFaceTraverseFunc) symmetry; object->homogeneous_bc_stencil = (FttFaceTraverseFunc) symmetry_stencil; object->face_bc = (FttFaceTraverseFunc) face_symmetry; } GfsBcClass * gfs_bc_class (void) { static GfsBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_bc_info = { "GfsBc", sizeof (GfsBc), sizeof (GfsBcClass), (GtsObjectClassInitFunc) gfs_bc_class_init, (GtsObjectInitFunc) gfs_bc_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_object_class ()), &gfs_bc_info); } return klass; } /** * gfs_bc_new: * @k: a #GfsBcClass. * @v: a variable associated with the BC or %NULL. * @extra: * * Returns: a new #GfsBc. */ GfsBc * gfs_bc_new (GfsBcClass * k, GfsVariable * v, gboolean extra) { GfsBc * b; g_return_val_if_fail (k != NULL, NULL); b = GFS_BC (gts_object_new (GTS_OBJECT_CLASS (k))); if (v) gfs_object_simulation_set (b, v->domain); b->v = v; b->extra = extra; return b; } /** \endobject{GfsBc} */ /** * Generic class for a boundary condition taking a parameter. * \beginobject{GfsBcValue} */ static void bc_value_write (GtsObject * o, FILE * fp) { if (GTS_OBJECT_CLASS (gfs_bc_value_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_bc_value_class ())->parent_class->write) (o, fp); if (GFS_BC_VALUE (o)->val) gfs_function_write (GFS_BC_VALUE (o)->val, fp); } static void bc_value_read (GtsObject ** o, GtsFile * fp) { GfsBcValue * bc = GFS_BC_VALUE (*o); if (GTS_OBJECT_CLASS (gfs_bc_value_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_bc_value_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; gfs_function_read (GFS_BC_VALUE (*o)->val, gfs_box_domain (GFS_BC (bc)->b->box), fp); } static void bc_value_destroy (GtsObject * o) { gts_object_destroy (GTS_OBJECT (GFS_BC_VALUE (o)->val)); (* GTS_OBJECT_CLASS (gfs_bc_value_class ())->parent_class->destroy) (o); } static void gfs_bc_value_class_init (GtsObjectClass * klass) { klass->write = bc_value_write; klass->read = bc_value_read; klass->destroy = bc_value_destroy; } static void gfs_bc_value_init (GfsBcValue * bc) { bc->val = gfs_function_new (gfs_function_class (), 0.); } GfsBcClass * gfs_bc_value_class (void) { static GfsBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_bc_value_info = { "GfsBcValue", sizeof (GfsBcValue), sizeof (GfsBcClass), (GtsObjectClassInitFunc) gfs_bc_value_class_init, (GtsObjectInitFunc) gfs_bc_value_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_bc_class ()), &gfs_bc_value_info); } return klass; } static GfsBc * gfs_bc_value_new (GfsBcClass * k, GfsVariable * v, GfsFunction * val, gboolean extra) { GfsBcValue * bc = GFS_BC_VALUE (gfs_bc_new (k, v, extra)); if (val != NULL) { gts_object_destroy (GTS_OBJECT (bc->val)); bc->val = val; } return GFS_BC (bc); } /** \endobject{GfsBcValue} */ /** * Dirichlet boundary condition. * \beginobject{GfsBcDirichlet} */ static void dirichlet (FttCellFace * f, GfsBc * b) { GFS_VALUE (f->cell, b->v) = 2.*gfs_function_face_value (GFS_BC_VALUE (b)->val, f) - GFS_VALUE (f->neighbor, b->v); } static void dirichlet_vof (FttCellFace * f, GfsBc * b) { GFS_VALUE (f->cell, b->v) = gfs_function_face_value (GFS_BC_VALUE (b)->val, f); } static void homogeneous_dirichlet (FttCellFace * f, GfsBc * b) { GFS_VALUE (f->cell, b->v) = - GFS_VALUE (f->neighbor, b->v); } static void homogeneous_dirichlet_stencil (FttCellFace * f, GfsBc * b) { set_stencil_neighbor (f, b, -1.); } static void face_dirichlet (FttCellFace * f, GfsBc * b) { GFS_STATE (f->cell)->f[f->d].v = GFS_STATE (f->neighbor)->f[FTT_OPPOSITE_DIRECTION (f->d)].v = gfs_function_face_value (GFS_BC_VALUE (b)->val, f); } static void bc_dirichlet_read (GtsObject ** o, GtsFile * fp) { GfsBc * bc = GFS_BC (*o); if (GTS_OBJECT_CLASS (gfs_bc_dirichlet_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_bc_dirichlet_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; gfs_function_set_units (GFS_BC_VALUE (bc)->val, bc->v->units); if (GFS_IS_VARIABLE_TRACER_VOF (bc->v)) bc->bc = (FttFaceTraverseFunc) dirichlet_vof; } static void gfs_bc_dirichlet_init (GfsBc * object) { object->bc = (FttFaceTraverseFunc) dirichlet; object->homogeneous_bc = (FttFaceTraverseFunc) homogeneous_dirichlet; object->homogeneous_bc_stencil = (FttFaceTraverseFunc) homogeneous_dirichlet_stencil; object->face_bc = (FttFaceTraverseFunc) face_dirichlet; } static void gfs_bc_dirichlet_class_init (GtsObjectClass * klass) { klass->read = bc_dirichlet_read; } GfsBcClass * gfs_bc_dirichlet_class (void) { static GfsBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_bc_dirichlet_info = { "GfsBcDirichlet", sizeof (GfsBcValue), sizeof (GfsBcClass), (GtsObjectClassInitFunc) gfs_bc_dirichlet_class_init, (GtsObjectInitFunc) gfs_bc_dirichlet_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_bc_value_class ()), &gfs_bc_dirichlet_info); } return klass; } /** \endobject{GfsBcDirichlet} */ /** * Neumann boundary condition. * \beginobject{GfsBcNeumann} */ static void neumann (FttCellFace * f, GfsBc * b) { GFS_VALUE (f->cell, b->v) = GFS_VALUE (f->neighbor, b->v) + gfs_function_face_value (GFS_BC_VALUE (b)->val, f) *ftt_cell_size (f->cell); } static void homogeneous_neumann (FttCellFace * f, GfsBc * b) { GFS_VALUE (f->cell, b->v) = GFS_VALUE (f->neighbor, b->v); } static void homogeneous_neumann_stencil (FttCellFace * f, GfsBc * b) { set_stencil_neighbor (f, b, 1.); } static void face_neumann (FttCellFace * f, GfsBc * b) { GFS_STATE (f->cell)->f[f->d].v = GFS_VALUE (f->neighbor, b->v) + gfs_function_face_value (GFS_BC_VALUE (b)->val, f) *ftt_cell_size (f->cell)/2.; } static void bc_neumann_read (GtsObject ** o, GtsFile * fp) { GfsBc * bc = GFS_BC (*o); if (GTS_OBJECT_CLASS (gfs_bc_neumann_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_bc_neumann_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; gfs_function_set_units (GFS_BC_VALUE (bc)->val, bc->v->units - 1.); } static void gfs_bc_neumann_init (GfsBc * object) { object->bc = (FttFaceTraverseFunc) neumann; object->homogeneous_bc = (FttFaceTraverseFunc) homogeneous_neumann; object->homogeneous_bc_stencil = (FttFaceTraverseFunc) homogeneous_neumann_stencil; object->face_bc = (FttFaceTraverseFunc) face_neumann; } static void gfs_bc_neumann_class_init (GtsObjectClass * klass) { klass->read = bc_neumann_read; } GfsBcClass * gfs_bc_neumann_class (void) { static GfsBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_bc_neumann_info = { "GfsBcNeumann", sizeof (GfsBcValue), sizeof (GfsBcClass), (GtsObjectClassInitFunc) gfs_bc_neumann_class_init, (GtsObjectInitFunc) gfs_bc_neumann_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_bc_value_class ()), &gfs_bc_neumann_info); } return klass; } /** \endobject{GfsBcNeumann} */ /** * Contact angle boundary condition. * \beginobject{GfsBcAngle} */ static void bc_angle_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_bc_angle_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (!GFS_IS_VARIABLE_TRACER_VOF_HEIGHT (GFS_BC (*o)->v)) gts_file_error (fp, "expecting a GfsVariableTracerVOFHeight"); gfs_function_set_units (GFS_BC_VALUE (*o)->val, 0.); } static void gfs_bc_angle_init (GfsBc * object) { /* use zero for Neumann condition for the VOF tracer */ object->bc = (FttFaceTraverseFunc) homogeneous_neumann; } static void gfs_bc_angle_class_init (GtsObjectClass * klass) { klass->read = bc_angle_read; } GfsBcClass * gfs_bc_angle_class (void) { static GfsBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsBcAngle", sizeof (GfsBcValue), sizeof (GfsBcClass), (GtsObjectClassInitFunc) gfs_bc_angle_class_init, (GtsObjectInitFunc) gfs_bc_angle_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_bc_neumann_class ()), &info); } return klass; } /** \endobject{GfsBcAngle} */ /** * Navier boundary condition. * \beginobject{GfsBcNavier} */ static void navier (FttCellFace * f, GfsBc * b) { gdouble h = ftt_cell_size (f->cell); gdouble lambda = gfs_function_face_value (GFS_BC_NAVIER (b)->lambda, f); GFS_VALUE (f->cell, b->v) = (2.*gfs_function_face_value (GFS_BC_VALUE (b)->val, f)*h - (h - 2.*lambda)*GFS_VALUE (f->neighbor, b->v))/(h + 2.*lambda); } static void face_navier (FttCellFace * f, GfsBc * b) { gdouble h = ftt_cell_size (f->cell); gdouble lambda = gfs_function_face_value (GFS_BC_NAVIER (b)->lambda, f); GFS_STATE (f->cell)->f[f->d].v = GFS_STATE (f->neighbor)->f[FTT_OPPOSITE_DIRECTION (f->d)].v = (gfs_function_face_value (GFS_BC_VALUE (b)->val, f)*h + 2.*lambda*GFS_VALUE (f->neighbor, b->v))/(h + 2.*lambda); } static void bc_navier_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_bc_navier_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_bc_navier_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsBcNavier * bc = GFS_BC_NAVIER (*o); if (bc->lambda == NULL) bc->lambda = gfs_function_new (gfs_function_class (), 0.); gfs_function_set_units (bc->lambda, 1.); gfs_function_read (bc->lambda, gfs_box_domain (GFS_BC (bc)->b->box), fp); } static void bc_navier_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_bc_navier_class ())->parent_class->write) (o, fp); if (GFS_BC_NAVIER (o)->lambda) gfs_function_write (GFS_BC_NAVIER (o)->lambda, fp); } static void gfs_bc_navier_init (GfsBc * object) { object->bc = (FttFaceTraverseFunc) navier; object->homogeneous_bc = (FttFaceTraverseFunc) homogeneous_dirichlet; object->face_bc = (FttFaceTraverseFunc) face_navier; } static void gfs_bc_navier_class_init (GtsObjectClass * klass) { klass->read = bc_navier_read; klass->write = bc_navier_write; } GfsBcClass * gfs_bc_navier_class (void) { static GfsBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_bc_navier_info = { "GfsBcNavier", sizeof (GfsBcNavier), sizeof (GfsBcClass), (GtsObjectClassInitFunc) gfs_bc_navier_class_init, (GtsObjectInitFunc) gfs_bc_navier_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_bc_value_class ()), &gfs_bc_navier_info); } return klass; } /** \endobject{GfsBcNavier} */ /** * One of the boundaries of a #GfsBox. * \beginobject{GfsBoundary} */ static void insert_bc (GfsVariable * v, GtsObject * o, GHashTable * unique) { g_hash_table_insert (unique, o, o); } static void gfs_boundary_destroy (GtsObject * object) { GfsBoundary * boundary = GFS_BOUNDARY (object); GfsDomain * domain = gfs_box_domain (boundary->box); if (domain) gfs_domain_forget_boundary (domain, boundary); if (boundary->root) { if (domain == NULL) /* domain has been destroyed */ ftt_cell_destroy (boundary->root, NULL, NULL); else ftt_cell_destroy (boundary->root, (FttCellCleanupFunc) gfs_cell_cleanup, domain); } boundary->box->neighbor[FTT_OPPOSITE_DIRECTION (boundary->d)] = NULL; gts_object_destroy (GTS_OBJECT (boundary->default_bc)); if (boundary->bc) { GHashTable * unique = g_hash_table_new (NULL, NULL); /* make sure that the pointers are unique before destroying them */ g_hash_table_foreach (boundary->bc, (GHFunc) insert_bc, unique); g_hash_table_foreach (unique, (GHFunc) gts_object_destroy, NULL); g_hash_table_destroy (unique); g_hash_table_destroy (boundary->bc); } (* GTS_OBJECT_CLASS (gfs_boundary_class ())->parent_class->destroy) (object); } static void match (FttCell * cell, GfsBoundary * boundary) { FttCell * neighbor = ftt_cell_neighbor (cell, boundary->d); FttCell * parent = ftt_cell_parent (cell); guint level = ftt_cell_level (cell); cell->flags |= GFS_FLAG_BOUNDARY; if (parent && GFS_CELL_IS_GRADIENT_BOUNDARY (parent)) cell->flags |= GFS_FLAG_GRADIENT_BOUNDARY; if (neighbor == NULL || ftt_cell_level (neighbor) < level) { if (FTT_CELL_IS_ROOT (cell)) { g_assert (cell == boundary->root); boundary->root = NULL; } ftt_cell_destroy (cell, (FttCellCleanupFunc) gfs_cell_cleanup, gfs_box_domain (boundary->box)); boundary->changed = TRUE; return; } if (ftt_cell_level (neighbor) == level) { GfsSolidVector * s = GFS_STATE (neighbor)->solid; if (s && s->s[FTT_OPPOSITE_DIRECTION (boundary->d)] == 0.) { if (FTT_CELL_IS_ROOT (cell)) { g_assert (cell == boundary->root); boundary->root = NULL; } ftt_cell_destroy (cell, (FttCellCleanupFunc) gfs_cell_cleanup, gfs_box_domain (boundary->box)); boundary->changed = TRUE; return; } if (s) { FttDirection d; FttComponent c; GfsSolidVector * t; if (GFS_STATE (cell)->solid == NULL) GFS_STATE (cell)->solid = g_malloc0 (sizeof (GfsSolidVector)); t = GFS_STATE (cell)->solid; t->a = s->a; for (d = 0; d < FTT_NEIGHBORS; d++) if (d/2 == boundary->d/2) t->s[d] = s->s[FTT_OPPOSITE_DIRECTION (d)]; else t->s[d] = s->s[d]; for (c = 0; c < FTT_DIMENSION; c++) if (c == boundary->d/2) { FttVector p1, p2; ftt_cell_pos (cell, &p1); ftt_cell_pos (neighbor, &p2); (&t->cm.x)[c] = (&p1.x)[c] + (&p2.x)[c] - (&s->cm.x)[c]; (&t->ca.x)[c] = (&p1.x)[c] + (&p2.x)[c] - (&s->ca.x)[c]; } else { (&t->cm.x)[c] = (&s->cm.x)[c]; (&t->ca.x)[c] = (&s->ca.x)[c]; } } else if (GFS_STATE (cell)->solid != NULL) { g_free (GFS_STATE (cell)->solid); GFS_STATE (cell)->solid = NULL; } if (FTT_CELL_IS_LEAF (cell) && !FTT_CELL_IS_LEAF (neighbor)) { GfsDomain * domain = gfs_box_domain (boundary->box); ftt_cell_refine_single (cell, domain->cell_init, domain->cell_init_data); boundary->changed = TRUE; } } else g_assert_not_reached (); if (!FTT_CELL_IS_LEAF (cell)) level++; if (level > boundary->depth) boundary->depth = level; } static void boundary_match (GfsBoundary * boundary) { if (boundary->root == NULL) { GfsBox * box = boundary->box; GfsDomain * domain = gfs_box_domain (box); boundary->root = ftt_cell_new ((FttCellInitFunc) gfs_cell_init, domain); FTT_ROOT_CELL (boundary->root)->parent = box; ftt_cell_set_level (boundary->root, ftt_cell_level (box->root)); ftt_cell_set_neighbor_match (boundary->root, box->root, boundary->d, (FttCellInitFunc) gfs_cell_init, domain); FttVector pos; ftt_cell_pos (box->root, &pos); gdouble size = ftt_cell_size (box->root); FttDirection d = FTT_OPPOSITE_DIRECTION (boundary->d); pos.x += rpos[d].x*size; pos.y += rpos[d].y*size; pos.z += rpos[d].z*size; ftt_cell_set_pos (boundary->root, &pos); } guint l = ftt_cell_level (boundary->root); boundary->changed = FALSE; boundary->depth = l; while (boundary->root && l <= boundary->depth) { ftt_cell_traverse_boundary (boundary->root, boundary->d, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, l, (FttCellTraverseFunc) match, boundary); l++; } if (boundary->root && boundary->changed) ftt_cell_flatten (boundary->root, boundary->d, (FttCellCleanupFunc) gfs_cell_cleanup, gfs_box_domain (boundary->box)); } static void is_extra (GfsVariable * v, GfsBc * bc, gboolean * extra) { if (bc->extra) *extra = TRUE; } static void write_extra (GfsVariable * v, GfsBc * bc, FILE * fp) { if (bc->extra) { if(GTS_OBJECT (bc)->klass->write) { (* GTS_OBJECT (bc)->klass->write) (GTS_OBJECT (bc), fp); fputc ('\n', fp); } } } static void gfs_boundary_write (GtsObject * o, FILE * fp) { GfsBoundary * b = GFS_BOUNDARY (o); gboolean any_extra = FALSE; if (GTS_OBJECT_CLASS (gfs_boundary_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_boundary_class ())->parent_class->write) (o, fp); g_hash_table_foreach (b->bc, (GHFunc) is_extra, &any_extra); if (any_extra) { fputs (" {\n", fp); g_hash_table_foreach (b->bc, (GHFunc) write_extra, fp); fputc ('}', fp); } } static gboolean boundary_read_extra_bc (GfsBoundary * b, GtsFile * fp) { gboolean ret = FALSE; if (fp->type != '{') return ret; fp->scope_max++; gts_file_next_token (fp); while (fp->type != GTS_ERROR && fp->type != '}') { if (fp->type == '\n') { gts_file_next_token (fp); continue; } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a keyword"); return ret; } else { GtsObjectClass * klass = gfs_object_class_from_name (fp->token->str); GtsObject * object; if (klass == NULL) { gts_file_error (fp, "unknown keyword `%s'", fp->token->str); return ret; } else if (!gts_object_class_is_from_class (klass, gfs_bc_class ())) { gts_file_error (fp, "`%s' is not a GfsBc", fp->token->str); return ret; } object = gts_object_new (klass); g_assert (klass->read); GFS_BC (object)->b = b; GFS_BC (object)->extra = TRUE; (* klass->read) (&object, fp); if (fp->type == GTS_ERROR) { gts_object_destroy (object); return ret; } gfs_boundary_add_bc (b, GFS_BC (object)); ret = TRUE; } } if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return ret; } fp->scope_max--; gts_file_next_token (fp); return ret; } static void gfs_boundary_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_boundary_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_boundary_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsBoundary * b = GFS_BOUNDARY (*o); GfsVariable ** v = gfs_domain_velocity (gfs_box_domain (b->box)); if (v) gfs_boundary_add_bc (b, gfs_bc_value_new (gfs_bc_dirichlet_class (), v[b->d/2], NULL, FALSE)); boundary_read_extra_bc (GFS_BOUNDARY (*o), fp); } static void gfs_boundary_class_init (GfsBoundaryClass * klass) { klass->match = boundary_match; GTS_OBJECT_CLASS (klass)->write = gfs_boundary_write; GTS_OBJECT_CLASS (klass)->read = gfs_boundary_read; GTS_OBJECT_CLASS (klass)->destroy = gfs_boundary_destroy; } static void gfs_boundary_init (GfsBoundary * b) { b->type = GFS_BOUNDARY_CENTER_VARIABLE; b->bc = g_hash_table_new (g_str_hash, g_str_equal); gfs_boundary_set_default_bc (b, gfs_bc_new (gfs_bc_class (), NULL, FALSE)); } GfsBoundaryClass * gfs_boundary_class (void) { static GfsBoundaryClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_boundary_info = { "GfsBoundary", sizeof (GfsBoundary), sizeof (GfsBoundaryClass), (GtsObjectClassInitFunc) gfs_boundary_class_init, (GtsObjectInitFunc) gfs_boundary_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (gts_object_class (), &gfs_boundary_info); } return klass; } /** * gfs_boundary_new: * @klass: a #GfsBoundaryClass. * @box: a #GfsBox. * @d: a direction. * * Creates a new boundary of type @klass for @box in direction @d. * * This function fails if @box has already a boundary in direction @d. * * Returns: a new #GfsBoundary. */ GfsBoundary * gfs_boundary_new (GfsBoundaryClass * klass, GfsBox * box, FttDirection d) { GfsBoundary * boundary; g_return_val_if_fail (box != NULL, NULL); g_return_val_if_fail (d < FTT_NEIGHBORS, NULL); g_return_val_if_fail (box->neighbor[d] == NULL, NULL); boundary = GFS_BOUNDARY (gts_object_new (GTS_OBJECT_CLASS (klass))); boundary->box = box; box->neighbor[d] = GTS_OBJECT (boundary); boundary->d = FTT_OPPOSITE_DIRECTION (d); if (box->root) boundary_match (boundary); return boundary; } /** * gfs_boundary_update: * @boundary: a #GfsBoundary. * * Calls the @update() method of @boundary. */ void gfs_boundary_update (GfsBoundary * boundary) { g_return_if_fail (boundary != NULL); if (GFS_BOUNDARY_CLASS (GTS_OBJECT (boundary)->klass)->update) (* GFS_BOUNDARY_CLASS (GTS_OBJECT (boundary)->klass)->update) (boundary); } /** * gfs_boundary_send: * @boundary: a #GfsBoundary. * * Calls the @send() method of @boundary. */ void gfs_boundary_send (GfsBoundary * boundary) { g_return_if_fail (boundary != NULL); if (GFS_BOUNDARY_CLASS (GTS_OBJECT (boundary)->klass)->send) (* GFS_BOUNDARY_CLASS (GTS_OBJECT (boundary)->klass)->send) (boundary); } /** * gfs_boundary_receive: * @boundary: a #GfsBoundary. * @flags: the traversal flags. * @max_depth: the maximum depth of the traversal. * * Calls the @receive() method of @boundary. */ void gfs_boundary_receive (GfsBoundary * boundary, FttTraverseFlags flags, gint max_depth) { g_return_if_fail (boundary != NULL); if (GFS_BOUNDARY_CLASS (GTS_OBJECT (boundary)->klass)->receive) (* GFS_BOUNDARY_CLASS (GTS_OBJECT (boundary)->klass)->receive) (boundary, flags, max_depth); } /** * gfs_boundary_synchronize: * @boundary: a #GfsBoundary. * * Calls the @synchronize() method of @boundary. */ void gfs_boundary_synchronize (GfsBoundary * boundary) { g_return_if_fail (boundary != NULL); if (GFS_BOUNDARY_CLASS (GTS_OBJECT (boundary)->klass)->synchronize) (* GFS_BOUNDARY_CLASS (GTS_OBJECT (boundary)->klass)->synchronize) (boundary); } /** * gfs_boundary_lookup: * @b: a #GfsBoundary. * @v: a #GfsVariable. * * Returns: the #GfsBc associated with @b and @v. */ GfsBc * gfs_boundary_lookup_bc (GfsBoundary * b, GfsVariable * v) { GfsBc * bv; g_return_val_if_fail (b != NULL, NULL); g_return_val_if_fail (v != NULL, NULL); if (!v->name || !(bv = g_hash_table_lookup (b->bc, v->name))) { if (v->default_bc) { bv = v->default_bc; bv->b = b; } else bv = b->default_bc; bv->v = v; } return bv; } /** * gfs_boundary_set_default_bc: * @b: a #GfsBoundary. * @bc: a #GfsBc. * * Sets the default boundary condition for @b to @bc. */ void gfs_boundary_set_default_bc (GfsBoundary * b, GfsBc * bc) { g_return_if_fail (b != NULL); g_return_if_fail (bc != NULL); g_return_if_fail (bc->b == NULL || bc->b == b); if (b->default_bc) gts_object_destroy (GTS_OBJECT (b->default_bc)); b->default_bc = bc; bc->b = b; } /** * gfs_variable_set_default_bc: * @v: a #GfVariable. * @bc: a #GfsBc. * * Sets the default boundary condition for @v to @bc. */ void gfs_variable_set_default_bc (GfsVariable * v, GfsBc * bc) { g_return_if_fail (v != NULL); g_return_if_fail (bc != NULL); g_return_if_fail (bc->v == NULL || bc->v == v); if (v->default_bc) gts_object_destroy (GTS_OBJECT (v->default_bc)); v->default_bc = bc; bc->v = v; } /** * gfs_boundary_add_bc: * @b: a #GfsBoundary. * @bc: a #GfsBc. * * Adds boundary condition @bc to @b. */ void gfs_boundary_add_bc (GfsBoundary * b, GfsBc * bc) { GfsBc * old; g_return_if_fail (b != NULL); g_return_if_fail (bc != NULL); g_return_if_fail (bc->v != NULL); g_return_if_fail (bc->v->name != NULL); g_return_if_fail (bc->b == NULL || bc->b == b); old = g_hash_table_lookup (b->bc, bc->v->name); if (!old || !old->extra) { if (old) gts_object_destroy (GTS_OBJECT (old)); g_hash_table_insert (b->bc, bc->v->name, bc); bc->b = b; } else gts_object_destroy (GTS_OBJECT (bc)); } /** \endobject{GfsBoundary} */ /** * Constant inflow boundary. * \beginobject{GfsBoundaryInflowConstant} */ static GtsColor inflow_color (GtsObject * o) { GtsColor c = { 0., 0., 1. }; /* blue */ return c; } static void inflow_constant_write (GtsObject * o, FILE * fp) { if (GTS_OBJECT_CLASS (gfs_boundary_inflow_constant_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_boundary_inflow_constant_class ())->parent_class->write) (o, fp); gfs_function_write (GFS_BOUNDARY_INFLOW_CONSTANT (o)->un, fp); } static void inflow_constant_read (GtsObject ** o, GtsFile * fp) { GfsBoundary * b = GFS_BOUNDARY (*o); FttComponent c; GfsFunction * un = GFS_BOUNDARY_INFLOW_CONSTANT (*o)->un; GfsVariable ** v; if (GTS_OBJECT_CLASS (gfs_boundary_inflow_constant_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_boundary_inflow_constant_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; gfs_function_read (un, gfs_box_domain (b->box), fp); gfs_function_set_units (un, 1.); v = gfs_domain_velocity (gfs_box_domain (b->box)); for (c = 0; c < FTT_DIMENSION; c++) if (c == b->d/2) gfs_boundary_add_bc (b, gfs_bc_value_new (gfs_bc_dirichlet_class (), v[c], un, FALSE)); else gfs_boundary_add_bc (b, gfs_bc_value_new (gfs_bc_dirichlet_class (), v[c], NULL, FALSE)); } static void gfs_boundary_inflow_constant_class_init (GtsObjectClass * klass) { klass->read = inflow_constant_read; klass->write = inflow_constant_write; klass->color = inflow_color; } static void gfs_boundary_inflow_constant_init (GfsBoundaryInflowConstant * object) { object->un = gfs_function_new (gfs_function_class (), 0.); } GfsBoundaryInflowConstantClass * gfs_boundary_inflow_constant_class (void) { static GfsBoundaryInflowConstantClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_boundary_inflow_constant_info = { "GfsBoundaryInflowConstant", sizeof (GfsBoundaryInflowConstant), sizeof (GfsBoundaryInflowConstantClass), (GtsObjectClassInitFunc) gfs_boundary_inflow_constant_class_init, (GtsObjectInitFunc) gfs_boundary_inflow_constant_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_boundary_class ()), &gfs_boundary_inflow_constant_info); } return klass; } /** \endobject{GfsBoundaryInflowConstant} */ /** * Outflow boundary. * \beginobject{GfsBoundaryOutflow} */ static GtsColor outflow_color (GtsObject * o) { GtsColor c = { 0., 1., 0. }; /* green */ return c; } static void outflow_read (GtsObject ** o, GtsFile * fp) { GfsBoundary * b = GFS_BOUNDARY (*o); GfsDomain * domain; GfsVariable ** v; if (GTS_OBJECT_CLASS (gfs_boundary_outflow_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_boundary_outflow_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; domain = gfs_box_domain (b->box); v = gfs_domain_velocity (domain); gfs_boundary_add_bc (b, gfs_bc_value_new (gfs_bc_neumann_class (), v[b->d/2], NULL, FALSE)); gfs_boundary_add_bc (b, gfs_bc_value_new (gfs_bc_dirichlet_class (), gfs_variable_from_name (domain->variables, "P"), NULL, FALSE)); } static void gfs_boundary_outflow_class_init (GfsBoundaryClass * klass) { GTS_OBJECT_CLASS (klass)->read = outflow_read; GTS_OBJECT_CLASS (klass)->color = outflow_color; } GfsBoundaryOutflowClass * gfs_boundary_outflow_class (void) { static GfsBoundaryOutflowClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_boundary_outflow_info = { "GfsBoundaryOutflow", sizeof (GfsBoundary), sizeof (GfsBoundaryOutflowClass), (GtsObjectClassInitFunc) gfs_boundary_outflow_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_boundary_class ()), &gfs_boundary_outflow_info); } return klass; } /** \endobject{GfsBoundaryOutflow} */ /** * * \beginobject{GfsBoundaryGradient} */ static GtsColor gradient_color (GtsObject * o) { GtsColor c = { 1., 1., 0. }; /* red-green */ return c; } static void set_gradient_boundary (FttCell * cell) { cell->flags |= GFS_FLAG_GRADIENT_BOUNDARY; } static void gradient_read (GtsObject ** o, GtsFile * fp) { GfsBoundary * b = GFS_BOUNDARY (*o); if (GTS_OBJECT_CLASS (gfs_boundary_gradient_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_boundary_gradient_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; ftt_cell_traverse (b->root, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) set_gradient_boundary, NULL); } static void gfs_boundary_gradient_class_init (GfsBoundaryClass * klass) { GTS_OBJECT_CLASS (klass)->read = gradient_read; GTS_OBJECT_CLASS (klass)->color = gradient_color; } GfsBoundaryClass * gfs_boundary_gradient_class (void) { static GfsBoundaryClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_boundary_gradient_info = { "GfsBoundaryGradient", sizeof (GfsBoundary), sizeof (GfsBoundaryClass), (GtsObjectClassInitFunc) gfs_boundary_gradient_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_boundary_class ()), &gfs_boundary_gradient_info); } return klass; } /** \endobject{GfsBoundaryGradient} */ /** * Periodic boundary. * \beginobject{GfsBoundaryPeriodic} */ static void boundary_periodic_destroy (GtsObject * object) { GfsBoundaryPeriodic * boundary = GFS_BOUNDARY_PERIODIC (object); g_array_free (boundary->sndbuf, TRUE); g_array_free (boundary->rcvbuf, TRUE); (* GTS_OBJECT_CLASS (gfs_boundary_periodic_class ())->parent_class->destroy) (object); } static void boundary_periodic_read (GtsObject ** object, GtsFile * fp) { boundary_periodic_destroy (*object); } static void center_periodic (FttCellFace * face, GfsBc * b) { GfsBoundaryPeriodic * boundary_periodic = GFS_BOUNDARY_PERIODIC (b->b); g_assert (boundary_periodic->sndcount < boundary_periodic->sndbuf->len); g_assert (ftt_face_type (face) == FTT_FINE_FINE); g_assert (!FTT_CELL_IS_LEAF (face->cell) || FTT_CELL_IS_LEAF (face->neighbor)); g_array_index (boundary_periodic->sndbuf, gdouble, boundary_periodic->sndcount++) = GFS_VALUE (face->neighbor, b->v); } static void face_periodic (FttCellFace * face, GfsBc * b) { GfsBoundaryPeriodic * boundary_periodic = GFS_BOUNDARY_PERIODIC (b->b); g_assert (boundary_periodic->sndcount < boundary_periodic->sndbuf->len); g_array_index (boundary_periodic->sndbuf, gdouble, boundary_periodic->sndcount++) = GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].v; } static void boundary_size (FttCell * cell, guint * count) { (*count)++; } static void set_buffers_size (GfsBoundaryPeriodic * boundary) { guint count = 0; ftt_cell_traverse (GFS_BOUNDARY (boundary)->root, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) boundary_size, &count); g_array_set_size (boundary->rcvbuf, count); g_array_set_size (boundary->sndbuf, count); } static void boundary_tree (FttCell * cell, GfsBoundaryPeriodic * boundary) { gdouble is_leaf = FTT_CELL_IS_LEAF (cell); if (boundary->sndcount == boundary->sndbuf->len) g_array_append_val (boundary->sndbuf, is_leaf); else g_array_index (boundary->sndbuf, gdouble, boundary->sndcount) = is_leaf; boundary->sndcount++; if (!is_leaf) { FttCellChildren child; guint i, n; n = ftt_cell_children_direction (cell, GFS_BOUNDARY (boundary)->d, &child); for (i = 0; i < n; i++) { /* fixme: using a gdouble to store (and MPI transfer) a boolean is wasteful... */ gdouble is_destroyed = (child.c[i] == NULL); if (boundary->sndcount == boundary->sndbuf->len) g_array_append_val (boundary->sndbuf, is_destroyed); else g_array_index (boundary->sndbuf, gdouble, boundary->sndcount) = is_destroyed; boundary->sndcount++; } for (i = 0; i < n; i++) if (child.c[i]) boundary_tree (child.c[i], boundary); } } static void periodic_match (GfsBoundary * boundary) { (* gfs_boundary_class ()->match) (boundary); g_assert (GFS_BOUNDARY_PERIODIC (boundary)->sndcount == 0); if (boundary->root) boundary_tree (boundary->root, GFS_BOUNDARY_PERIODIC (boundary)); } static void send (GfsBoundary * bb) { GfsBoundaryPeriodic * boundary = GFS_BOUNDARY_PERIODIC (bb); g_assert (boundary->matching); GfsBoundaryPeriodic * matching = GFS_BOUNDARY_PERIODIC (boundary->matching->neighbor[boundary->d]); g_assert (GFS_IS_BOUNDARY_PERIODIC (matching)); g_assert (boundary->sndcount <= boundary->sndbuf->len); if (GFS_BOUNDARY (boundary)->type == GFS_BOUNDARY_MATCH_VARIABLE) { if (boundary->sndcount > matching->rcvbuf->len) g_array_set_size (matching->rcvbuf, boundary->sndcount); } memcpy (matching->rcvbuf->data, boundary->sndbuf->data, boundary->sndcount*sizeof (gdouble)); } static void center_update (FttCell * cell, GfsBoundaryPeriodic * boundary) { g_assert (boundary->rcvcount < boundary->rcvbuf->len); GFS_VALUE (cell, GFS_BOUNDARY (boundary)->v) = g_array_index (boundary->rcvbuf, gdouble, boundary->rcvcount++); } static void face_update (FttCellFace * face, GfsBoundaryPeriodic * boundary) { g_assert (boundary->rcvcount < boundary->rcvbuf->len); GFS_STATE (face->cell)->f[face->d].v = g_array_index (boundary->rcvbuf, gdouble, boundary->rcvcount++); } static void match_ignore (GfsBoundaryPeriodic * boundary) { gboolean is_leaf; g_assert (boundary->rcvcount < boundary->rcvbuf->len); is_leaf = g_array_index (boundary->rcvbuf, gdouble, boundary->rcvcount++); if (!is_leaf) { gboolean is_destroyed[FTT_CELLS/2]; guint i; for (i = 0; i < FTT_CELLS/2; i++) { g_assert (boundary->rcvcount < boundary->rcvbuf->len); is_destroyed[i] = g_array_index (boundary->rcvbuf, gdouble, boundary->rcvcount++); } for (i = 0; i < FTT_CELLS/2; i++) if (!is_destroyed[i]) match_ignore (boundary); } } static void match_update (FttCell * cell, GfsBoundaryPeriodic * boundary) { gboolean is_leaf; g_assert (boundary->rcvcount < boundary->rcvbuf->len); is_leaf = g_array_index (boundary->rcvbuf, gdouble, boundary->rcvcount++); if (!is_leaf) { GfsDomain * domain = gfs_box_domain (GFS_BOUNDARY (boundary)->box); FttCellChildren child; gboolean is_destroyed[FTT_CELLS/2]; guint i, n; if (FTT_CELL_IS_LEAF (cell)) { FttCell * neighbor = ftt_cell_neighbor (cell, GFS_BOUNDARY (boundary)->d); g_assert (neighbor); ftt_cell_refine_single (cell, domain->cell_init, domain->cell_init_data); if (FTT_CELL_IS_LEAF (neighbor)) ftt_cell_refine_single (neighbor, domain->cell_init, domain->cell_init_data); /* what about solid fractions? */ GFS_BOUNDARY (boundary)->changed = TRUE; } n = ftt_cell_children_direction (cell, GFS_BOUNDARY (boundary)->d, &child); for (i = 0; i < n; i++) { g_assert (boundary->rcvcount < boundary->rcvbuf->len); is_destroyed[i] = g_array_index (boundary->rcvbuf, gdouble, boundary->rcvcount++); if (is_destroyed[i] && child.c[i]) { ftt_cell_destroy (child.c[i], (FttCellCleanupFunc) gfs_cell_cleanup, domain); child.c[i] = NULL; GFS_BOUNDARY (boundary)->changed = TRUE; } } for (i = 0; i < n; i++) if (!is_destroyed[i]) { if (child.c[i]) match_update (child.c[i], boundary); else match_ignore (boundary); } } } static void receive (GfsBoundary * bb, FttTraverseFlags flags, gint max_depth) { GfsBoundaryPeriodic * boundary = GFS_BOUNDARY_PERIODIC (bb); boundary->rcvcount = 0; switch (GFS_BOUNDARY (boundary)->type) { case GFS_BOUNDARY_FACE_VARIABLE: ftt_face_traverse_boundary (GFS_BOUNDARY (boundary)->root, GFS_BOUNDARY (boundary)->d, FTT_PRE_ORDER, flags, max_depth, (FttFaceTraverseFunc) face_update, boundary); break; case GFS_BOUNDARY_MATCH_VARIABLE: match_update (GFS_BOUNDARY (boundary)->root, boundary); ftt_cell_flatten (GFS_BOUNDARY (boundary)->root, GFS_BOUNDARY (boundary)->d, (FttCellCleanupFunc) gfs_cell_cleanup, gfs_box_domain (GFS_BOUNDARY (boundary)->box)); break; default: ftt_cell_traverse (GFS_BOUNDARY (boundary)->root, FTT_PRE_ORDER, flags, max_depth, (FttCellTraverseFunc) center_update, boundary); } } static void synchronize (GfsBoundary * bb) { GfsBoundaryPeriodic * boundary = GFS_BOUNDARY_PERIODIC (bb); boundary->sndcount = 0; if (bb->type == GFS_BOUNDARY_MATCH_VARIABLE) set_buffers_size (boundary); } static GtsColor periodic_color (GtsObject * o) { GtsColor c = { 1., 0., 0. }; /* red */ return c; } static void gfs_boundary_periodic_class_init (GfsBoundaryClass * klass) { GfsBoundaryClass * parent_class = GFS_BOUNDARY_CLASS (klass); parent_class->match = periodic_match; parent_class->send = send; parent_class->receive = receive; parent_class->synchronize = synchronize; GTS_OBJECT_CLASS (klass)->color = periodic_color; GTS_OBJECT_CLASS (klass)->destroy = boundary_periodic_destroy; GTS_OBJECT_CLASS (klass)->read = boundary_periodic_read; } static void gfs_boundary_periodic_init (GfsBoundaryPeriodic * boundary) { GfsBc * b = GFS_BOUNDARY (boundary)->default_bc; b->bc = (FttFaceTraverseFunc) center_periodic; b->homogeneous_bc = (FttFaceTraverseFunc) center_periodic; b->face_bc = (FttFaceTraverseFunc) face_periodic; boundary->sndbuf = g_array_new (FALSE, FALSE, sizeof (gdouble)); boundary->rcvbuf = g_array_new (FALSE, FALSE, sizeof (gdouble)); boundary->sndcount = boundary->rcvcount = 0; boundary->rotate = 0.; } GfsBoundaryClass * gfs_boundary_periodic_class (void) { static GfsBoundaryClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_boundary_periodic_info = { "GfsBoundaryPeriodic", sizeof (GfsBoundaryPeriodic), sizeof (GfsBoundaryClass), (GtsObjectClassInitFunc) gfs_boundary_periodic_class_init, (GtsObjectInitFunc) gfs_boundary_periodic_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_boundary_class ()), &gfs_boundary_periodic_info); } return klass; } /** * gfs_boundary_periodic_new: * @klass: a #GfsBoundaryClass. * @box: a #GfsBox. * @d: a #FttDirection. * @matching: a #GfsBox. * * Returns: a new #GfsBoundaryPeriodic connecting @box with @matching in direction @d. */ GfsBoundaryPeriodic * gfs_boundary_periodic_new (GfsBoundaryClass * klass, GfsBox * box, FttDirection d, GfsBox * matching) { GfsBoundaryPeriodic * boundary; boundary = GFS_BOUNDARY_PERIODIC (gfs_boundary_new (klass, box, d)); set_buffers_size (boundary); boundary->matching = matching; boundary->d = FTT_OPPOSITE_DIRECTION (d); return boundary; } static void center_periodic_rotate (FttCellFace * face, GfsBc * b) { GfsBoundaryPeriodic * boundary_periodic = GFS_BOUNDARY_PERIODIC (b->b); g_assert (boundary_periodic->sndcount < boundary_periodic->sndbuf->len); g_assert (ftt_face_type (face) == FTT_FINE_FINE); g_assert (!FTT_CELL_IS_LEAF (face->cell) || FTT_CELL_IS_LEAF (face->neighbor)); if (b->v->component < 2) { /* 2D-vector-rotation only */ FttComponent c = FTT_ORTHOGONAL_COMPONENT (b->v->component); g_assert (b->v->vector[c]); g_array_index (boundary_periodic->sndbuf, gdouble, boundary_periodic->sndcount++) = b->v->orientation*(b->v->even ? 1. : boundary_periodic->rotate)* GFS_VALUE (face->neighbor, b->v->vector[c]); } else g_array_index (boundary_periodic->sndbuf, gdouble, boundary_periodic->sndcount++) = GFS_VALUE (face->neighbor, b->v); } static void face_periodic_rotate (FttCellFace * face, GfsBc * b) { GfsBoundaryPeriodic * boundary_periodic = GFS_BOUNDARY_PERIODIC (b->b); g_assert (boundary_periodic->sndcount < boundary_periodic->sndbuf->len); FttDirection d = FTT_OPPOSITE_DIRECTION (face->d); if (b->v->component < 2) { /* 2D-vector-rotation only */ FttComponent c = FTT_ORTHOGONAL_COMPONENT (b->v->component); g_assert (d < 4); g_assert (b->v->domain->has_rotated_bc); g_assert (b->v->face[c][d]); g_array_index (boundary_periodic->sndbuf, gdouble, boundary_periodic->sndcount++) = (2.*c - 1.)*boundary_periodic->rotate*GFS_VALUE (face->neighbor, b->v->face[c][d]); } else g_array_index (boundary_periodic->sndbuf, gdouble, boundary_periodic->sndcount++) = GFS_STATE (face->neighbor)->f[d].v; } /** * gfs_boundary_periodic_rotate: * @boundary: a #GfsBoundaryPeriodic. * @rotate: a #FttDirection. * @orientation: the orientation (+1 or -1). * * Rotates #boundary according to @rotate and @orientation. */ void gfs_boundary_periodic_rotate (GfsBoundaryPeriodic * boundary, FttDirection rotate, gdouble orientation) { g_return_if_fail (boundary != NULL); boundary->d = rotate; boundary->rotate = orientation; gfs_box_domain (GFS_BOUNDARY (boundary)->box)->has_rotated_bc = TRUE; GfsBc * b = GFS_BOUNDARY (boundary)->default_bc; b->bc = b->homogeneous_bc = (FttFaceTraverseFunc) center_periodic_rotate; b->face_bc = (FttFaceTraverseFunc) face_periodic_rotate; } /** * gfs_boundary_periodic_rotate_new: * @klass: a #GfsBoundaryClass. * @box: a #GfsBox. * @d: a #FttDirection. * @matching: a #GfsBox. * @rotate: a #FttDirection. * @orientation: the orientation (+1 or -1). * * Returns: a new "rotated" #GfsBoundaryPeriodic connecting @box in * direction @d with @matching in direction @rotate, oriented using * @orientation. */ GfsBoundaryPeriodic * gfs_boundary_periodic_rotate_new (GfsBoundaryClass * klass, GfsBox * box, FttDirection d, GfsBox * matching, FttDirection rotate, gdouble orientation) { GfsBoundaryPeriodic * boundary; boundary = gfs_boundary_periodic_new (klass, box, d, matching); gfs_boundary_periodic_rotate (boundary, rotate, orientation); return boundary; } /** \endobject{GfsBoundaryPeriodic} */ /** * Link between #GfsBox. * \beginobject{GfsGEdge} */ static void gfs_gedge_write (GtsObject * object, FILE * fp) { fprintf (fp, " %s", ftt_direction_name [GFS_GEDGE (object)->d]); if (GFS_GEDGE (object)->rotate < FTT_NEIGHBORS) fprintf (fp, " %s", ftt_direction_name [GFS_GEDGE (object)->rotate]); } static void gfs_gedge_read (GtsObject ** o, GtsFile * fp) { GfsGEdge * e = GFS_GEDGE (*o); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (direction)"); return; } e->d = ftt_direction_from_name (fp->token->str); if (e->d >= FTT_NEIGHBORS) { gts_file_error (fp, "unknown direction `%s'", fp->token->str); e->d = 0; return; } gts_file_next_token (fp); if (fp->type == GTS_STRING) { e->rotate = ftt_direction_from_name (fp->token->str); if (e->rotate >= FTT_NEIGHBORS) { gts_file_error (fp, "unknown direction `%s'", fp->token->str); e->rotate = -1; return; } gts_file_next_token (fp); } } static void gfs_gedge_class_init (GtsObjectClass * klass) { klass->write = gfs_gedge_write; klass->read = gfs_gedge_read; } static void gfs_gedge_init (GfsGEdge * object) { object->d = object->rotate = FTT_NEIGHBORS; } GfsGEdgeClass * gfs_gedge_class (void) { static GfsGEdgeClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_gedge_info = { "GfsGEdge", sizeof (GfsGEdge), sizeof (GfsGEdgeClass), (GtsObjectClassInitFunc) gfs_gedge_class_init, (GtsObjectInitFunc) gfs_gedge_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_gedge_class ()), &gfs_gedge_info); } return klass; } /** * gfs_gedge_link_boxes: * @edge: a #GfsGEdge. * * Links the two boxes connected by @edge. The boxes are set as their * respective neighbors in the direction defined by @edge (note that * their relative positions are not set). */ void gfs_gedge_link_boxes (GfsGEdge * edge) { GfsBox * b1, * b2; g_return_if_fail (edge != NULL); g_return_if_fail (GTS_GEDGE (edge)->n1 != NULL); g_return_if_fail (GTS_GEDGE (edge)->n2 != NULL); g_return_if_fail (edge->d >= 0 && edge->d < FTT_NEIGHBORS); b1 = GFS_BOX (GTS_GEDGE (edge)->n1); b2 = GFS_BOX (GTS_GEDGE (edge)->n2); g_return_if_fail (b1->neighbor[edge->d] == NULL); if (edge->rotate < FTT_NEIGHBORS) { g_return_if_fail (b2->neighbor[edge->rotate] == NULL); gfs_boundary_periodic_rotate_new (gfs_boundary_periodic_class (), b1, edge->d, b2, edge->rotate, 1.); gfs_boundary_periodic_rotate_new (gfs_boundary_periodic_class (), b2, edge->rotate, b1, edge->d, -1.); } else { g_return_if_fail (b2->neighbor[FTT_OPPOSITE_DIRECTION (edge->d)] == NULL); GtsObject * periodic = GTS_OBJECT (b1); gdouble * p1 = &FTT_ROOT_CELL (b1->root)->pos.x; gdouble * p2 = &FTT_ROOT_CELL (b2->root)->pos.x; gdouble sign = edge->d % 2 ? 1. : -1.; FttComponent c = edge->d/2; if (p1[c] != G_MAXDOUBLE && p2[c] != G_MAXDOUBLE && sign*(p2[c] - p1[c]) > 0.) periodic = GTS_OBJECT (b2); else while (periodic && GFS_IS_BOX (periodic) && GFS_BOX (periodic) != b2) periodic = GFS_BOX (periodic)->neighbor[FTT_OPPOSITE_DIRECTION (edge->d)]; if (GFS_BOX (periodic) == b2) { gfs_boundary_periodic_new (gfs_boundary_periodic_class (), b1, edge->d, b2); gfs_boundary_periodic_new (gfs_boundary_periodic_class (), b2, FTT_OPPOSITE_DIRECTION (edge->d), b1); } else { GfsDomain * domain = gfs_box_domain (b1); if (domain->pid < 0 || b1->pid == b2->pid) ftt_cell_set_neighbor (b1->root, b2->root, edge->d, (FttCellInitFunc) gfs_cell_init, domain); b1->neighbor[edge->d] = GTS_OBJECT (b2); b2->neighbor[FTT_OPPOSITE_DIRECTION (edge->d)] = GTS_OBJECT (b1); } } } /** * gfs_gedge_new: * @klass: a #GfsGEdgeClass. * @b1: a #GfsBox. * @b2: another #GfsBox. * @d: a direction. * * Returns: a new #GfsGEdge linking @b1 to @b2 in direction @d. The * boxes then need to be linked using gfs_gedge_link_boxes(). */ GfsGEdge * gfs_gedge_new (GfsGEdgeClass * klass, GfsBox * b1, GfsBox * b2, FttDirection d) { GfsGEdge * edge; g_return_val_if_fail (klass != NULL, NULL); g_return_val_if_fail (b1 != NULL, NULL); g_return_val_if_fail (b2 != NULL, NULL); g_return_val_if_fail (d >= 0 && d < FTT_NEIGHBORS, NULL); edge = GFS_GEDGE (gts_gedge_new (GTS_GEDGE_CLASS (klass), GTS_GNODE (b1), GTS_GNODE (b2))); edge->d = d; return edge; } /** \endobject{GfsGEdge} */ /** * The box making up a #GfsDomain. * \beginobject{GfsBox} */ static void gfs_box_destroy (GtsObject * object) { GfsBox * box = GFS_BOX (object); FttDirection d; if (box->root) { GfsDomain * domain = gfs_box_domain (box); if (domain == NULL) /* domain has been destroyed */ ftt_cell_destroy (box->root, NULL, NULL); else ftt_cell_destroy (box->root, (FttCellCleanupFunc) gfs_cell_cleanup, domain); } for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) gts_object_destroy (box->neighbor[d]); else if (GFS_IS_BOX (box->neighbor[d])) { g_assert (GFS_BOX (box->neighbor[d])->neighbor[FTT_OPPOSITE_DIRECTION (d)] == GTS_OBJECT (box)); GFS_BOX (box->neighbor[d])->neighbor[FTT_OPPOSITE_DIRECTION (d)] = NULL; } (* GTS_OBJECT_CLASS (gfs_box_class ())->parent_class->destroy) (object); } static void box_size (FttCell * cell, guint * size) { (*size)++; } static void gfs_box_write (GtsObject * object, FILE * fp) { GfsBox * box = GFS_BOX (object); FttVector pos; FttDirection d; guint size = 0; GfsDomain * domain = gfs_box_domain (box); ftt_cell_traverse (box->root, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) box_size, &size); ftt_cell_pos (box->root, &pos); fprintf (fp, "%s { id = %u pid = %d size = %u x = %g y = %g z = %g", object->klass->info.name, box->id, box->pid, size, pos.x, pos.y, pos.z); for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) { fprintf (fp, " %s = %s", ftt_direction_name[d], box->neighbor[d]->klass->info.name); if (box->neighbor[d]->klass->write) (* box->neighbor[d]->klass->write) (box->neighbor[d], fp); } fputs (" }", fp); if (domain != NULL && domain->max_depth_write > -2) { fputs (" {\n", fp); if (domain->binary) ftt_cell_write_binary (box->root, domain->max_depth_write, fp, (FttCellWriteFunc) gfs_cell_write_binary, domain->variables_io); else ftt_cell_write (box->root, domain->max_depth_write, fp, (FttCellWriteFunc) gfs_cell_write, domain->variables_io); fputc ('}', fp); } } static void gfs_box_read (GtsObject ** o, GtsFile * fp) { GfsBox * b = GFS_BOX (*o); GtsObjectClass * klass; gboolean class_changed = FALSE; FttVector pos = {0., 0., 0.}; GtsFileVariable var[] = { {GTS_UINT, "id", TRUE, &b->id}, {GTS_INT, "pid", TRUE, &b->pid}, {GTS_UINT, "size", TRUE, &b->size}, {GTS_DOUBLE, "x", TRUE, &pos.x}, {GTS_DOUBLE, "y", TRUE, &pos.y}, {GTS_DOUBLE, "z", TRUE, &pos.z}, {GTS_FILE, "right", TRUE}, {GTS_FILE, "left", TRUE}, {GTS_FILE, "top", TRUE}, {GTS_FILE, "bottom", TRUE}, #if (!FTT_2D) {GTS_FILE, "front", TRUE}, {GTS_FILE, "back", TRUE}, #endif /* 3D */ {GTS_NONE} }; GtsFileVariable * v; gfloat weight; GfsDomain * domain = GTS_OBJECT (*o)->reserved; if (domain == NULL) { g_assert (GTS_SLIST_CONTAINEE (b)->containers && !GTS_SLIST_CONTAINEE (b)->containers->next); domain = GFS_DOMAIN (GTS_SLIST_CONTAINEE (b)->containers->data); } else gts_container_add (GTS_CONTAINER (domain), GTS_CONTAINEE (b)); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (GfsBoxClass)"); return; } klass = gfs_object_class_from_name (fp->token->str); if (klass == NULL) { gts_file_error (fp, "unknown class `%s'", fp->token->str); return; } if (!gts_object_class_is_from_class (klass, gfs_box_class ())) { gts_file_error (fp, "`%s' is not a GfsBox", fp->token->str); return; } if (klass != (*o)->klass) { *o = gts_object_new (klass); gts_object_destroy (GTS_OBJECT (b)); b = GFS_BOX (*o); gts_container_add (GTS_CONTAINER (domain), GTS_CONTAINEE (b)); class_changed = TRUE; } gts_file_next_token (fp); g_assert (b->root == NULL); b->root = ftt_cell_new ((FttCellInitFunc) gfs_cell_init, domain); weight = gts_gnode_weight (GTS_GNODE (b)); gts_file_assign_start (fp, var); if (fp->type == GTS_ERROR) return; while ((v = gts_file_assign_next (fp, var))) if (v->type == GTS_FILE) { GtsObjectClass * boundary_class = gfs_object_class_from_name (fp->token->str); GtsObject * boundary; if (boundary_class == NULL) { gts_file_error (fp, "unknown class `%s'", fp->token->str); return; } if (!gts_object_class_is_from_class (boundary_class, gfs_boundary_class ())) { gts_file_error (fp, "`%s' is not a GfsBoundary", fp->token->str); return; } boundary = GTS_OBJECT (gfs_boundary_new (GFS_BOUNDARY_CLASS (boundary_class), b, ftt_direction_from_name (v->name))); gts_file_next_token (fp); if (boundary_class->read) (* boundary_class->read) (&boundary, fp); } if (fp->type == '{') { FttCell * root; fp->scope_max++; if (domain->binary) { if (gts_file_getc (fp) != '\n') { gts_file_error (fp, "expecting a newline"); return; } root = ftt_cell_read_binary (fp, (FttCellReadFunc) gfs_cell_read_binary, domain); if (fp->type == GTS_ERROR) return; gts_file_next_token (fp); } else { gts_file_first_token_after (fp, '\n'); root = ftt_cell_read (fp, (FttCellReadFunc) gfs_cell_read, domain); } fp->scope_max--; if (domain->pid >= 0 && b->pid != domain->pid) /* ignore data of boxes belonging to other PEs */ ftt_cell_destroy (root, (FttCellCleanupFunc) gfs_cell_cleanup, domain); else { ftt_cell_destroy (b->root, (FttCellCleanupFunc) gfs_cell_cleanup, domain); b->root = root; FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (b->neighbor[d])) { GfsBoundary * boundary = GFS_BOUNDARY (b->neighbor[d]); ftt_cell_set_neighbor_match (boundary->root, b->root, boundary->d, (FttCellInitFunc) gfs_cell_init, domain); } } if (fp->type == GTS_ERROR) return; if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } gts_file_next_token (fp); } FTT_ROOT_CELL (b->root)->parent = b; if (ftt_cell_level (b->root) != domain->rootlevel) { FttDirection d; ftt_cell_set_level (b->root, domain->rootlevel); for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (b->neighbor[d])) ftt_cell_set_level (GFS_BOUNDARY (b->neighbor[d])->root, domain->rootlevel); } if (var[3].set || var[4].set || var[5].set) { gdouble size = ftt_cell_size (b->root); FttDirection d; ftt_cell_set_pos (b->root, &pos); for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (b->neighbor[d])) { FttVector bpos = pos; bpos.x += rpos[d].x*size; bpos.y += rpos[d].y*size; bpos.z += rpos[d].z*size; ftt_cell_set_pos (GFS_BOUNDARY (b->neighbor[d])->root, &bpos); } } else /* position is not set */ FTT_ROOT_CELL (b->root)->pos.x = G_MAXDOUBLE; /* updates weight of domain */ GTS_WGRAPH (domain)->weight += gts_gnode_weight (GTS_GNODE (b)) - weight; if (class_changed && klass->read) (* klass->read) (o, fp); } static gfloat gfs_box_weight (GtsGNode * node) { GfsBox * box = GFS_BOX (node); if (box->size >= 0) return box->size; else { guint size = 0; if (box->root) ftt_cell_traverse (box->root, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) box_size, &size); return size; } } static void gfs_box_class_init (GfsBoxClass * klass) { GTS_GNODE_CLASS (klass)->weight = gfs_box_weight; GTS_OBJECT_CLASS (klass)->destroy = gfs_box_destroy; GTS_OBJECT_CLASS (klass)->write = gfs_box_write; GTS_OBJECT_CLASS (klass)->read = gfs_box_read; } static void gfs_box_init (GfsBox * box) { static guint id = 1; box->id = id++; box->pid = -1; box->size = -1; } GfsBoxClass * gfs_box_class (void) { static GfsBoxClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_box_info = { "GfsBox", sizeof (GfsBox), sizeof (GfsBoxClass), (GtsObjectClassInitFunc) gfs_box_class_init, (GtsObjectInitFunc) gfs_box_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_gnode_class ()), &gfs_box_info); } return klass; } GfsBox * gfs_box_new (GfsBoxClass * klass) { GfsBox * object; object = GFS_BOX (gts_object_new (GTS_OBJECT_CLASS (klass))); return object; } /** \endobject{GfsBox} */ gerris-snapshot-131206/src/graphic.c0000644000175100017510000017271712250371171014251 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Graphical utility functions. */ #ifdef HAVE_CONFIG_H # include "config.h" # ifdef HAVE_MPI # include # endif #endif #include #include #include #include "config.h" #include "graphic.h" #include "solid.h" #include "variable.h" #include "version.h" #include "init.h" #if !FTT_2D # include "isocube.h" #endif /* 3D */ typedef struct { GPtrArray * colors; gboolean reversed; } Colormap; static GtsColor * color_new (gdouble r, gdouble g, gdouble b) { GtsColor * c = g_malloc (sizeof (GtsColor)); c->r = r; c->g = g; c->b = b; return c; } static void color_destroy (GtsColor * color) { g_return_if_fail (color != NULL); g_free (color); } static Colormap * colormap_jet (void) { Colormap * cmap = g_malloc (sizeof (Colormap)); gint i; cmap->reversed = FALSE; cmap->colors = g_ptr_array_new (); for (i = 0; i < 127; i++) { gdouble r = i <= 46 ? 0. : i >= 111 ? -0.03125*(i - 111) + 1. : i >= 78 ? 1. : 0.03125*(i - 46); gdouble g = i <= 14 || i >= 111 ? 0. : i >= 79 ? -0.03125*(i - 111) : i <= 46 ? 0.03125*(i - 14) : 1.; gdouble b = i >= 79 ? 0. : i >= 47 ? -0.03125*(i - 79) : i <= 14 ? 0.03125*(i - 14) + 1.: 1.; g_ptr_array_add (cmap->colors, color_new (r, g, b)); } return cmap; } static void colormap_destroy (Colormap * colormap) { guint i; g_return_if_fail (colormap != NULL); for (i = 0; i < colormap->colors->len; i++) color_destroy (colormap->colors->pdata[i]); g_ptr_array_free (colormap->colors, TRUE); g_free (colormap); } static GtsColor colormap_color (Colormap * cmap, gdouble val) { GtsColor c = {1., 1., 1.}, * c1, * c2; guint i, n; gdouble coef; g_return_val_if_fail (cmap != NULL, c); if (val > 1.0) val = 1.0; else if (val < 0.0) val = 0.0; if (cmap->reversed) val = 1.0 - val; n = cmap->colors->len; if (n == 0) return c; if (n == 1) return *((GtsColor *)cmap->colors->pdata[0]); i = floor ((gdouble)val*(gdouble)(n - 1)); if (i == n - 1) return *((GtsColor *)cmap->colors->pdata[cmap->colors->len - 1]); coef = val*(gdouble)(n - 1) - (gdouble)i; c1 = cmap->colors->pdata[i]; c2 = cmap->colors->pdata[i+1]; c.r = c1->r + coef*(c2->r - c1->r); c.g = c1->g + coef*(c2->g - c1->g); c.b = c1->b + coef*(c2->b - c1->b); return c; } /* VertexCellFace: Header */ typedef struct _VertexCellFace VertexCellFace; struct _VertexCellFace { /*< private >*/ GtsVertex parent; /*< public >*/ guint index; FttCell * cell; FttCellFace face; }; #define VERTEX_CELL_FACE(obj) GTS_OBJECT_CAST (obj,\ VertexCellFace,\ vertex_cell_face_class ()) /* VertexCellFace: Object */ static GtsVertexClass * vertex_cell_face_class (void) { static GtsVertexClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo vertex_cell_face_info = { "VertexCellFace", sizeof (VertexCellFace), sizeof (GtsVertexClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_vertex_class ()), &vertex_cell_face_info); } return klass; } static void triangulate (FttCell * cell, gpointer * data) { GtsSurface * s = data[0]; GfsVariable * var = data[1]; GtsVertex * v; FttVector pos; if (var && var->centered) ftt_cell_pos (cell, &pos); else gfs_cell_cm (cell, &pos); v = gts_vertex_new (s->vertex_class, pos.x, pos.y, pos.z); if (var) { GtsMatrix * transform = data[2]; gdouble * z = data[3]; GfsNorm * norm = data[4]; gts_point_transform (GTS_POINT (v), transform); GTS_POINT (v)->z = *z + GFS_VALUE (cell, var)/(norm->infty*1000.); } g_assert (gts_delaunay_add_vertex (s, v, NULL) == NULL); VERTEX_CELL_FACE (v)->cell = cell; } static void triangulate_face (FttCell * cell, gpointer * data) { GtsSurface * s = data[0]; GfsVariable * var = data[1]; FttDirection * d = data[5]; GtsVertex * v; FttVector pos; FttCellFace face; face.cell = cell; face.d = *d; face.neighbor = ftt_cell_neighbor (cell, face.d); ftt_face_pos (&face, &pos); v = gts_vertex_new (s->vertex_class, pos.x, pos.y, pos.z); if (var) { GtsMatrix * transform = data[2]; gdouble * z = data[3]; GfsNorm * norm = data[4]; gts_point_transform (GTS_POINT (v), transform); if (face.neighbor) GTS_POINT (v)->z = *z + gfs_face_interpolated_value_generic (&face, var)/(norm->infty*1000.); else GTS_POINT (v)->z = *z + GFS_VALUE (cell, var)/(norm->infty*1000.); } g_assert (gts_delaunay_add_vertex (s, v, NULL) == NULL); VERTEX_CELL_FACE (v)->face = face; } static void add_long_segment (GtsSegment * s, GSList ** list) { FttCell * c1 = VERTEX_CELL_FACE (s->v1)->cell ? VERTEX_CELL_FACE (s->v1)->cell : VERTEX_CELL_FACE (s->v1)->face.cell; FttCell * c2 = VERTEX_CELL_FACE (s->v2)->cell ? VERTEX_CELL_FACE (s->v2)->cell : VERTEX_CELL_FACE (s->v2)->face.cell; gdouble s1 = ftt_cell_size (c1); gdouble s2 = ftt_cell_size (c2); gdouble size = MIN (s1, s2); if (gts_point_distance2 (GTS_POINT (s->v1), GTS_POINT (s->v2)) > 16.*size*size) *list = g_slist_prepend (*list, s); } void gfs_write_gts (GfsDomain * domain, GfsVariable * v, FttTraverseFlags flags, gint level, GtsBBox * box, FILE * fp) { GtsSurface * s; GtsVertex * v1, * v2, * v3; GtsEdge * e1, * e2, * e3; gpointer data[6]; GtsMatrix * transform, * inv; gdouble z = 0.; GfsNorm norm; GSList * long_segments = NULL; g_return_if_fail (domain != NULL); #if (!FTT_2D) g_return_if_fail (box != NULL); #endif /* 3D */ g_return_if_fail (fp != NULL); v1 = gts_vertex_new (gts_vertex_class (), -100., -100., 0.); v2 = gts_vertex_new (gts_vertex_class (), 100., -100., 0.); v3 = gts_vertex_new (gts_vertex_class (), 0., 100., 0.); e1 = gts_edge_new (gts_edge_class (), v1, v2); e2 = gts_edge_new (gts_edge_class (), v2, v3); e3 = gts_edge_new (gts_edge_class (), v3, v1); s = gts_surface_new (gts_surface_class (), gts_face_class (), gts_edge_class (), vertex_cell_face_class ()); gts_surface_add_face (s, gts_face_new (gts_face_class (), e1, e2, e3)); norm = gfs_domain_norm_variable (domain, v, NULL, flags, level, NULL, NULL); if (norm.infty == 0.) norm.infty = 1.; #if FTT_2D transform = gts_matrix_identity (NULL); #else /* 3D */ if (box->x2 - box->x1 < box->z2 - box->z1 && box->x2 - box->x1 < box->y2 - box->y1) { z = box->x2 = box->x1 = (box->x2 + box->x1)/2. + 1e-30; transform = gts_matrix_new (0., 1., 0., 0., 0., 0., 1., 0., 1., 0., 0., 0., 0., 0., 0., 0.); } else if (box->y2 - box->y1 < box->z2 - box->z1 && box->y2 - box->y1 < box->x2 - box->x1) { z = box->y2 = box->y1 = (box->y2 + box->y1)/2. + 1e-30; transform = gts_matrix_new (0., 0., 1., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.); } else { z = box->z2 = box->z1 = (box->z2 + box->z1)/2. + 1e-30; transform = gts_matrix_new (1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.); } #endif /* 3D */ data[0] = s; data[1] = v; data[2] = transform; data[3] = &z; data[4] = &norm; if (box == NULL) { FttDirection d; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) triangulate, data); data[5] = &d; for (d = 0; d < FTT_NEIGHBORS; d++) gfs_domain_cell_traverse_boundary (domain, d, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) triangulate_face, data); } else gfs_domain_cell_traverse_box (domain, box, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) triangulate, data); gts_allow_floating_vertices = TRUE; gts_object_destroy (GTS_OBJECT (v1)); gts_object_destroy (GTS_OBJECT (v2)); gts_object_destroy (GTS_OBJECT (v3)); gts_allow_floating_vertices = FALSE; gts_surface_foreach_edge (s, (GtsFunc) add_long_segment, &long_segments); gts_allow_floating_edges = TRUE; g_slist_foreach (long_segments, (GFunc) gts_object_destroy, NULL); gts_allow_floating_edges = FALSE; g_slist_free (long_segments); inv = gts_matrix3_inverse (transform); gts_matrix_destroy (transform); transform = inv; gts_surface_foreach_vertex (s, (GtsFunc) gts_point_transform, transform); gts_surface_write (s, fp); gts_object_destroy (GTS_OBJECT (s)); gts_matrix_destroy (transform); } static void extent (FttCell * cell, gpointer * data) { FttVector * min = data[0]; FttVector * max = data[1]; FttVector pos; ftt_cell_pos (cell, &pos); if (pos.x > max->x) max->x = pos.x; if (pos.y > max->y) max->y = pos.y; if (pos.z > max->z) max->z = pos.z; if (pos.x < min->x) min->x = pos.x; if (pos.y < min->y) min->y = pos.y; if (pos.z < min->z) min->z = pos.z; } static void iso_func (gdouble ** a, GtsCartesianGrid g, guint k, gpointer * data) { GfsDomain * domain = data[0]; guint * level = data[1], i, j; GfsVariable * v = data[2]; FttVector p; fprintf (stderr, "\rslice %4d/%d", k + 1, g.nz); p.z = g.z; for (i = 0, p.x = g.x; i < g.nx; i++, p.x += g.dx) for (j = 0, p.y = g.y; j < g.ny; j++, p.y += g.dy) { FttCell * cell = gfs_domain_locate (domain, p, *level, NULL); if (cell == NULL) a[i][j] = 0.; else a[i][j] = gfs_interpolate (cell, p, v); } } GtsSurface * gfs_isosurface (GfsDomain * domain, GfsVariable * v, gdouble val, gint level) { FttVector cmax = { - G_MAXDOUBLE, - G_MAXDOUBLE, - G_MAXDOUBLE }; FttVector cmin = { G_MAXDOUBLE, G_MAXDOUBLE, G_MAXDOUBLE }; guint depth; GtsCartesianGrid g; gpointer data[3]; GtsSurface * s; g_return_val_if_fail (domain != NULL, NULL); g_return_val_if_fail (v != NULL, NULL); if (level < 0) depth = gfs_domain_depth (domain); else depth = level; data[0] = &cmin; data[1] = &cmax; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, depth, (FttCellTraverseFunc) extent, data); if (cmin.x == G_MAXDOUBLE) return NULL; g.dx = g.dy = g.dz = ftt_level_size (depth); g.x = cmin.x; g.y = cmin.y; g.z = cmin.z; g.nx = (cmax.x - cmin.x)/g.dx + 1; g.ny = (cmax.y - cmin.y)/g.dy + 1; g.nz = (cmax.z - cmin.z)/g.dz + 1; s = gts_surface_new (gts_surface_class (), gts_face_class (), gts_edge_class (), gts_vertex_class ()); data[0] = domain; data[1] = &depth; data[2] = v; gts_isosurface_cartesian (s, g, (GtsIsoCartesianFunc) iso_func, data, val); return s; } static void write_gnuplot (FttCell * cell, gpointer * data) { FILE * fp = data[0]; GfsVariable * v = data[1]; GtsBBox * bbox = data[2]; FttVector pos; if (v->centered) ftt_cell_pos (cell, &pos); else gfs_cell_cm (cell, &pos); if (bbox == NULL || (pos.x >= bbox->x1 && pos.x <= bbox->x2 && pos.y >= bbox->y1 && pos.y <= bbox->y2 && pos.z >= bbox->z1 && pos.z <= bbox->z2)) { gfs_simulation_map_inverse (GFS_SIMULATION (v->domain), &pos); fprintf (fp, "%g %g %g %g\n", pos.x, pos.y, pos.z, GFS_VALUE (cell, v)); } } void gfs_write_gnuplot (GfsDomain * domain, GfsVariable * v, FttTraverseFlags flags, gint level, GtsBBox * bbox, FILE * fp) { gpointer data[3]; g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); data[0] = fp; data[1] = v; data[2] = bbox; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) write_gnuplot, data); } typedef struct { guchar r, g, b; } Color; typedef struct { FttVector min; guint width, height, size; guchar * buf, *** data; } Image; static Image * image_new (FttVector min, FttVector max, guint size) { Image * im = g_malloc0 (sizeof (Image)); guint i; im->min = min; im->size = size; im->width = (max.x - min.x)*size; im->height = (max.y - min.y)*size; im->buf = g_malloc0 (sizeof (guchar)*3*im->width*im->height); im->data = g_malloc (sizeof (guchar **)*im->height); for (i = 0; i < im->height; i++) { guint j; im->data[i] = g_malloc (sizeof (guchar *)*im->width); for (j = 0; j < im->width; j++) im->data[i][j] = &im->buf[3*(i*im->width + j)]; } return im; } static void image_write (Image * im, FILE * fp) { fprintf (fp, "P6\n" "# File generated by gerris using 2D libgfs version %s (%s)\n" "# Origin: %d %d\n" "%u %u 255\n", GFS_VERSION, GFS_BUILD_VERSION, (gint) (im->min.x*im->size), (gint) (im->min.y*im->size), im->width, im->height); fwrite (im->buf, sizeof (guchar), 3*im->width*im->height, fp); } static void image_destroy (Image * im) { guint i; for (i = 0; i < im->height; i++) g_free (im->data[i]); g_free (im->data); g_free (im->buf); g_free (im); } static void image_draw_square (Image * im, FttVector * p1, FttVector * p2, Color c) { gint i1, j1, i2, j2, i, j; i1 = (p1->x - im->min.x)*im->size; i2 = (p2->x - im->min.x)*im->size; j1 = (p1->y - im->min.y)*im->size; j2 = (p2->y - im->min.y)*im->size; j1 = im->height - 1 - j1; j2 = im->height - 1 - j2; for (i = i1; i <= i2; i++) for (j = j2; j <= j1; j++) if (i >= 0 && i < im->width && j >= 0 && j < im->height) { im->data[j][i][0] = c.r; im->data[j][i][1] = c.g; im->data[j][i][2] = c.b; } } static void write_image_square (FttCell * cell, gpointer * data) { Colormap * colormap = data[0]; gdouble * min = data[1]; gdouble * max = data[2]; GfsVariable * v = data[3]; Image * image = data[4]; FttVector * lambda = data[5]; FttVector p; GtsColor fc = { 0., 0., 0. }; /* nodata = black */ if (GFS_HAS_DATA (cell, v)) fc = colormap_color (colormap, (GFS_VALUE (cell, v) - *min)/(*max - *min)); Color c; gdouble size = ftt_cell_size (cell)/2.; FttVector p1, p2; ftt_cell_pos (cell, &p); c.r = fc.r*255; c.g = fc.g*255; c.b = fc.b*255; p1.x = (p.x - size)/lambda->x + 1e-9; p1.y = (p.y - size)/lambda->y + 1e-9; p2.x = (p.x + size)/lambda->x - 1e-9; p2.y = (p.y + size)/lambda->y - 1e-9; image_draw_square (image, &p1, &p2, c); } static void max_extent (FttCell * cell, FttVector extent[2]) { gdouble h = ftt_cell_size (cell)/2.; FttVector pos; ftt_cell_pos (cell, &pos); if (pos.x - h < extent[0].x) extent[0].x = pos.x - h; if (pos.y - h < extent[0].y) extent[0].y = pos.y - h; if (pos.z - h < extent[0].z) extent[0].z = pos.z - h; if (pos.x + h > extent[1].x) extent[1].x = pos.x + h; if (pos.y + h > extent[1].y) extent[1].y = pos.y + h; if (pos.z + h > extent[1].z) extent[1].z = pos.z + h; } static gboolean cell_condition (FttCell * cell, gpointer condition) { return gfs_function_value (condition, cell); } void gfs_write_ppm (GfsDomain * domain, GfsFunction * condition, GfsVariable * v, gdouble min, gdouble max, FttTraverseFlags flags, gint level, FILE * fp, gboolean parallel) { Colormap * colormap; guint depth, size = 1; Image * image; FttVector extent[2] = {{ G_MAXDOUBLE, G_MAXDOUBLE, G_MAXDOUBLE }, { - G_MAXDOUBLE, - G_MAXDOUBLE, - G_MAXDOUBLE }}; gpointer data[6]; g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); if (min == max) max = min + 1.; if (level < 0) depth = gfs_domain_depth (domain); else depth = level; while (depth-- > 0) size *= 2; if (condition) { gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse_condition (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) max_extent, extent, cell_condition, condition); gfs_restore_fpe_for_function (condition); } else gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) max_extent, extent); gfs_all_reduce (domain, extent[0].x, MPI_DOUBLE, MPI_MIN); gfs_all_reduce (domain, extent[0].y, MPI_DOUBLE, MPI_MIN); gfs_all_reduce (domain, extent[1].x, MPI_DOUBLE, MPI_MAX); gfs_all_reduce (domain, extent[1].y, MPI_DOUBLE, MPI_MAX); if (extent[0].x == G_MAXDOUBLE) return; extent[0].x /= domain->lambda.x; extent[0].y /= domain->lambda.y; extent[1].x /= domain->lambda.x; extent[1].y /= domain->lambda.y; colormap = colormap_jet (); image = image_new (extent[0], extent[1], size); data[0] = colormap; data[1] = &min; data[2] = &max; data[3] = v; data[4] = image; data[5] = &domain->lambda; if (condition) { gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse_condition (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) write_image_square, data, cell_condition, condition); gfs_restore_fpe_for_function (condition); } else gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) write_image_square, data); #ifdef HAVE_MPI if (!parallel && domain->pid >= 0) { if (domain->pid == 0) { Image * im = image_new (extent[0], extent[1], size); int n, np; MPI_Comm_size (MPI_COMM_WORLD, &np); for (n = 1; n < np; n++) { MPI_Status status; MPI_Recv (im->buf, 3*image->width*image->height, MPI_BYTE, n, 0, MPI_COMM_WORLD, &status); int i, j; for (i = 0; i < im->height; i++) for (j = 0; j < im->width; j++) if (im->data[i][j][0] || im->data[i][j][1] || im->data[i][j][2]) { image->data[i][j][0] = im->data[i][j][0]; image->data[i][j][1] = im->data[i][j][1]; image->data[i][j][2] = im->data[i][j][2]; } } image_destroy (im); image_write (image, fp); } else if (domain->pid > 0) MPI_Send (image->buf, 3*image->width*image->height, MPI_BYTE, 0, 0, MPI_COMM_WORLD); } else #endif image_write (image, fp); image_destroy (image); colormap_destroy (colormap); } #define NODATA -9999 typedef struct { FttVector min; gdouble cellsize; guint width, height; gfloat * buf, ** data; } Grid; static Grid * grid_new (FttVector min, FttVector max, FttVector step) { Grid * im = g_malloc0 (sizeof (Grid)); guint i; im->min = min; im->cellsize = MIN (step.x, step.y); im->width = (max.x - min.x)/im->cellsize; im->height = (max.y - min.y)/im->cellsize; im->buf = g_malloc (sizeof (gfloat)*im->width*im->height); for (i = 0; i < im->height*im->width; i++) im->buf[i] = NODATA; im->data = g_malloc (sizeof (gfloat *)*im->height); for (i = 0; i < im->height; i++) im->data[i] = &im->buf[i*im->width]; return im; } static void grid_write (Grid * im, FILE * fp) { fprintf (fp, "ncols\t\t%d\n" "nrows\t\t%d\n" "xllcorner\t%f\n" "yllcorner\t%f\n" "cellsize\t%.10f\n" "nodata_value\t%d\n", im->width, im->height, im->min.x, im->min.y, im->cellsize, NODATA); guint i, j; for (i = 0; i < im->height; i++) for (j = 0; j < im->width; j++) fprintf (fp, "%g ", im->data[i][j]); } static void grid_destroy (Grid * im) { g_free (im->data); g_free (im->buf); g_free (im); } static void max_physical_extent (FttCell * cell, gpointer * data) { FttVector * extent = data[0]; GfsSimulation * sim = data[1]; gdouble h = ftt_cell_size (cell)/2.; FttVector p, max = { -G_MAXDOUBLE, -G_MAXDOUBLE, -G_MAXDOUBLE }, min = { G_MAXDOUBLE, G_MAXDOUBLE, G_MAXDOUBLE }; ftt_cell_pos (cell, &p); double x, y; for (x = -1; x <= 1.; x += 2.) for (y = -1; y <= 1.; y += 2.) { FttVector c = p; c.x += x*h; c.y += y*h; gfs_simulation_map_inverse (sim, &c); int i; for (i = 0; i < FTT_DIMENSION; i++) { if ((&c.x)[i] > (&max.x)[i]) (&max.x)[i] = (&c.x)[i]; if ((&c.x)[i] < (&min.x)[i]) (&min.x)[i] = (&c.x)[i]; } } int i; for (i = 0; i < 2; i++) { if ((&max.x)[i] > (&extent[1].x)[i]) (&extent[1].x)[i] = (&max.x)[i]; if ((&min.x)[i] < (&extent[0].x)[i]) (&extent[0].x)[i] = (&min.x)[i]; if ((&max.x)[i] - (&min.x)[i] < (&extent[2].x)[i]) (&extent[2].x)[i] = (&max.x)[i] - (&min.x)[i]; } } void gfs_write_grd (GfsSimulation * sim, GfsFunction * condition, GfsVariable * v, FttTraverseFlags flags, gint level, FILE * fp, gboolean parallel, gboolean interpolate) { g_return_if_fail (sim != NULL); g_return_if_fail (fp != NULL); GfsDomain * domain = GFS_DOMAIN (sim); FttVector extent[3] = {{ G_MAXDOUBLE, G_MAXDOUBLE, G_MAXDOUBLE }, { - G_MAXDOUBLE, - G_MAXDOUBLE, - G_MAXDOUBLE }, { G_MAXDOUBLE, G_MAXDOUBLE, G_MAXDOUBLE }}; gpointer data[2] = { extent, sim }; if (condition) { gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse_condition (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) max_physical_extent, data, cell_condition, condition); gfs_restore_fpe_for_function (condition); } else gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) max_physical_extent, data); gfs_all_reduce (domain, extent[0].x, MPI_DOUBLE, MPI_MIN); gfs_all_reduce (domain, extent[0].y, MPI_DOUBLE, MPI_MIN); gfs_all_reduce (domain, extent[1].x, MPI_DOUBLE, MPI_MAX); gfs_all_reduce (domain, extent[1].y, MPI_DOUBLE, MPI_MAX); gfs_all_reduce (domain, extent[2].x, MPI_DOUBLE, MPI_MIN); gfs_all_reduce (domain, extent[2].y, MPI_DOUBLE, MPI_MIN); if (extent[0].x == G_MAXDOUBLE) return; Grid * grid = grid_new (extent[0], extent[1], extent[2]); int i, j; for (i = 0; i < grid->width; i++) for (j = 0; j < grid->height; j++) { FttVector p = { grid->min.x + (0.5 + i)*grid->cellsize, grid->min.y + grid->height*grid->cellsize - (0.5 + j)*grid->cellsize, 0. }; gfs_simulation_map (sim, &p); FttCell * cell = gfs_domain_locate (domain, p, level, NULL); if (cell && GFS_HAS_DATA (cell, v)) grid->data[j][i] = interpolate ? gfs_interpolate (cell, p, v) : GFS_VALUE (cell, v); } #ifdef HAVE_MPI if (!parallel && domain->pid >= 0) { if (domain->pid == 0) { Grid * im = grid_new (extent[0], extent[1], extent[2]); int n, np; MPI_Comm_size (MPI_COMM_WORLD, &np); for (n = 1; n < np; n++) { MPI_Status status; MPI_Recv (im->buf, grid->width*grid->height, MPI_FLOAT, n, 0, MPI_COMM_WORLD, &status); int i, j; for (i = 0; i < im->height; i++) for (j = 0; j < im->width; j++) if (im->data[i][j] != NODATA) grid->data[i][j] = im->data[i][j]; } grid_destroy (im); grid_write (grid, fp); } else if (domain->pid > 0) MPI_Send (grid->buf, grid->width*grid->height, MPI_FLOAT, 0, 0, MPI_COMM_WORLD); } else #endif grid_write (grid, fp); grid_destroy (grid); } static gint gfs_combine_close (FILE ** f, Image ** im, gint n, gint ret) { guint i; for (i = 0; i < n; i++) { if (f[i]) fclose (f[i]); if (im[i]) image_destroy (im[i]); } g_free (f); g_free (im); return ret; } static gint get_newline (FILE * fp) { gint c; c = fgetc (fp); while (c != EOF && c != '\n') c = fgetc (fp); return c; } gint gfs_combine_ppm (gchar ** fname, guint nname, FILE * fp) { FILE ** f; guint i; Image ** image; g_return_val_if_fail (fname != NULL, 0); g_return_val_if_fail (fp != NULL, 0); f = g_malloc0 (nname*sizeof (FILE *)); image = g_malloc0 (nname*sizeof (Image *)); for (i = 0; i < nname; i++) { f[i] = fopen (fname[i], "r"); if (f[i] == NULL) return gfs_combine_close (f, image, nname, i); } while (TRUE) { gint x0 = G_MAXINT, y0 = G_MAXINT, x1 = - G_MAXINT, y1 = - G_MAXINT; FttVector min, max; Image * combo; for (i = 0; i < nname; i++) { gchar s[80]; gint x, y; gint h, w; guint status; status = fscanf (f[i], "%79s", s); if (status != 1 && feof (f[i])) return gfs_combine_close (f, image, nname, -1); if (status != 1 || strcmp (s, "P6") || get_newline (f[i]) == EOF || get_newline (f[i]) == EOF || fscanf (f[i], "%*s %79s %d %d", s, &x, &y) != 3 || strcmp (s, "Origin:") || fscanf (f[i], "%d %d", &w, &h) != 2) return gfs_combine_close (f, image, nname, i); if (x < x0) x0 = x; if (y < y0) y0 = y; if (x + w > x1) x1 = x + w; if (y + h > y1) y1 = y + h; min.x = x; min.y = y; max.x = x + w; max.y = y + h; if (image[i] != NULL) image_destroy (image[i]); image[i] = image_new (min, max, 1); if (get_newline (f[i]) == EOF || fread (image[i]->buf, sizeof (guchar), 3*image[i]->width*image[i]->height, f[i]) != 3*image[i]->width*image[i]->height) return gfs_combine_close (f, image, nname, i); } min.x = x0; min.y = y0; max.x = x1; max.y = y1; combo = image_new (min, max, 1); for (i = 0; i < nname; i++) { guint x, y; for (y = 0; y < image[i]->height; y++) for (x = 0; x < image[i]->width; x++) { gint x1 = x + image[i]->min.x - combo->min.x; gint y1 = y + combo->min.y + combo->height - image[i]->min.y - image[i]->height; guchar r = image[i]->data[y][x][0]; guchar g = image[i]->data[y][x][1]; guchar b = image[i]->data[y][x][2]; if (r || g || b) { combo->data[y1][x1][0] = r; combo->data[y1][x1][1] = g; combo->data[y1][x1][2] = b; } } } image_write (combo, fp); image_destroy (combo); } gfs_combine_close (f, image, nname, 0); } static void write_square (FttCell * cell, gpointer * data) { Colormap * colormap = data[0]; gdouble * min = data[1]; gdouble * max = data[2]; GfsVariable * v = data[3]; FILE * fp = data[4]; FttVector p; GtsColor c; gdouble size = ftt_cell_size (cell)/2.; ftt_cell_pos (cell, &p); c = colormap_color (colormap, (GFS_VALUE (cell, v) - *min)/(*max - *min)); #if FTT_2D fprintf (fp, "OFF 4 1 4\n" "%g %g 0\n%g %g 0\n%g %g 0\n%g %g 0\n" "5 0 1 2 3 0 %g %g %g\n", p.x - size, p.y - size, p.x + size, p.y - size, p.x + size, p.y + size, p.x - size, p.y + size, c.r, c.g, c.b); #else /* FTT_3D */ fprintf (fp, "OFF 8 6 12\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "4 3 2 1 0 %g %g %g\n" "4 4 5 6 7 %g %g %g\n" "4 2 3 7 6 %g %g %g\n" "4 0 1 5 4 %g %g %g\n" "4 0 4 7 3 %g %g %g\n" "4 1 2 6 5 %g %g %g\n", p.x - size, p.y - size, p.z - size, p.x + size, p.y - size, p.z - size, p.x + size, p.y + size, p.z - size, p.x - size, p.y + size, p.z - size, p.x - size, p.y - size, p.z + size, p.x + size, p.y - size, p.z + size, p.x + size, p.y + size, p.z + size, p.x - size, p.y + size, p.z + size, c.r, c.g, c.b, c.r, c.g, c.b, c.r, c.g, c.b, c.r, c.g, c.b, c.r, c.g, c.b, c.r, c.g, c.b); #endif /* FTT_3D */ } void gfs_write_squares (GfsDomain * domain, GfsVariable * v, gdouble min, gdouble max, FttTraverseFlags flags, gint level, GtsBBox * bbox, FILE * fp) { Colormap * colormap; gpointer data[5]; g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); if (min == max) max = min + 1.; fputs ("LIST{\n", fp); colormap = colormap_jet (); data[0] = colormap; data[1] = &min; data[2] = &max; data[3] = v; data[4] = fp; if (bbox == NULL) gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) write_square, data); else gfs_domain_cell_traverse_box (domain, bbox, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) write_square, data); fputs ("}\n", fp); colormap_destroy (colormap); } static void write_mac (FttCellFace * face, gpointer * data) { gdouble * scale = data[0]; FILE * fp = data[1]; GtsBBox * bbox = data[2]; FttVector p; ftt_face_pos (face, &p); if (bbox == NULL || (p.x >= bbox->x1 && p.x <= bbox->x2 && p.y >= bbox->y1 && p.y <= bbox->y2 && p.z >= bbox->z1 && p.z <= bbox->z2)) { FttVector f = {0., 0., 0.}; gdouble un = GFS_FACE_NORMAL_VELOCITY (face)*(*scale); FttComponent c = face->d/2; switch (c) { case FTT_X: f.x = un; break; case FTT_Y: f.y = un; break; #if (!FTT_2D) case FTT_Z: f.z = un; break; #endif /* not FTT_2D */ default: g_assert_not_reached (); } fprintf (fp, "%g %g %g\n%g %g %g\n%g %g %g\n\n", p.x + f.x - (f.x - f.y/2.)/5., p.y + f.y - (f.x/2. + f.y)/5., p.z + f.z, p.x + f.x, p.y + f.y, p.z + f.z, p.x + f.x - (f.x + f.y/2.)/5., p.y + f.y + (f.x/2. - f.y)/5., p.z + f.z); fprintf (fp, "%g %g %g\n%g %g %g\n\n", p.x, p.y, p.z, p.x + f.x, p.y + f.y, p.z + f.z); } } void gfs_write_mac_velocity (GfsDomain * domain, gdouble scale, FttTraverseFlags flags, gint level, GtsBBox * bbox, FILE * fp) { gpointer data[3]; GfsNorm norm; g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); norm = gfs_domain_norm_velocity (domain, flags, level); scale = norm.infty > 0. ? ftt_level_size (level < 0 ? gfs_domain_depth (domain) : level)* scale/norm.infty : scale; data[0] = &scale; data[1] = fp; data[2] = bbox; gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, flags, level, (FttFaceTraverseFunc) write_mac, data); } void gfs_draw_cells (FttCell * cell, FttTraverseFlags flags, gint level, FILE * fp) { g_return_if_fail (cell != NULL); g_return_if_fail (fp != NULL); fprintf (fp, "LIST {\n"); ftt_cell_traverse (cell, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) ftt_cell_draw, fp); fprintf (fp, "}\n"); } void gfs_draw_levels (FttCell * cell, FILE * fp) { guint l, depth; g_return_if_fail (cell != NULL); g_return_if_fail (fp != NULL); depth = ftt_cell_depth (cell); for (l = 0; l <= depth; l++) { fprintf (fp, "(geometry \"level %d\" { = ", l); gfs_draw_cells (cell, FTT_TRAVERSE_LEVEL, l, fp); fputs ("})\n", fp); } } static void draw_box_boundaries (GfsBox * box, FILE * fp) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { GtsObject * o = box->neighbor[d]; if (GFS_IS_BOUNDARY (o)) { if (o->klass->color) { GtsColor c = (* o->klass->color) (o); #if FTT_2D fprintf (fp, "appearance { material { edgecolor %g %g %g } }\n", c.r, c.g, c.b); #else /* 3D */ fprintf (fp, "appearance { material { ambient %g %g %g diffuse %g %g %g } }\n", c.r, c.g, c.b, c.r, c.g, c.b); #endif /* 3D */ } fputs ("LIST {\n", fp); ftt_face_traverse_boundary (box->root, d, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) ftt_face_draw, fp); fputs ("}\n", fp); } else if (GFS_IS_BOX (o) && box->pid != GFS_BOX (o)->pid) { #if FTT_2D fputs ("appearance { material { edgecolor 1 0 0 } }\n", fp); #else /* 3D */ fputs ("appearance { material { ambient 1 0 0 diffuse 1 0 0 } }\n", fp); #endif /* 3D */ fputs ("LIST {\n", fp); ftt_face_traverse_boundary (box->root, d, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) ftt_face_draw, fp); fputs ("}\n", fp); } } } /** * gfs_draw_boundary_conditions: * @domain: a fluid domain. * @fp: a file pointer. * * Outputs in @fp an OOGL (geomview) representation of the boundary * conditions of the domain. */ void gfs_draw_boundary_conditions (GfsDomain * domain, FILE * fp) { g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); fputs ("(geometry \"conditions\" = \n" "LIST {\n", fp); #if FTT_2D fputs ("appearance { linewidth 2 }\n", fp); #endif /* 2D */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) draw_box_boundaries, fp); fputs ("})\n", fp); } static void draw_boundary_face (FttCell * cell, FILE * fp) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { FttCellFace face = ftt_cell_face (cell, d); if (ftt_face_type (&face) == FTT_BOUNDARY) ftt_face_draw (&face, fp); } } /** * gfs_draw_solid_boundaries: * @domain: a fluid domain. * @fp: a file pointer. * * Outputs in @fp an OOGL (geomview) representation of the solid boundaries * of the domain. */ void gfs_draw_solid_boundaries (GfsDomain * domain, FILE * fp) { g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); fputs ("(geometry \"solid\" = {\n", fp); #if FTT_2D fputs ("appearance { linewidth 2 }\n", fp); #endif /* 2D */ fputs ("LIST{\n", fp); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) draw_boundary_face, fp); fputs ("}})\n", fp); } static void count_face (FttCell * cell, guint * count) { if (FTT_CELL_IS_LEAF (cell)) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { FttCellFace face = ftt_cell_face (cell, d); if (ftt_face_type (&face) == FTT_FINE_COARSE && face.cell == cell) (*count)++; } } } static void draw_face (FttCell * cell, FILE * fp) { if (FTT_CELL_IS_LEAF (cell)) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { FttCellFace face = ftt_cell_face (cell, d); if (ftt_face_type (&face) == FTT_FINE_COARSE && face.cell == cell) ftt_face_draw (&face, fp); } } } /** * gfs_draw_refined_boundaries: * @domain: a fluid domain. * @fp: a file pointer. * * Outputs in @fp an OOGL (geomview) representation of the boundaries * of the refined domains. */ void gfs_draw_refined_boundaries (GfsDomain * domain, FILE * fp) { guint depth, level; g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); depth = gfs_domain_depth (domain); for (level = 1; level <= depth; level++) { guint count = 0; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, level, (FttCellTraverseFunc) count_face, &count); if (count > 0) { fprintf (fp, "(geometry \"refine_%u_%u\" = \n", level - 1, level); fputs ("LIST{\n", fp); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, level, (FttCellTraverseFunc) draw_face, fp); fputs ("}\n)\n", fp); } } } static gpointer color_data[5]; static GtsColor variable_color (GtsObject * o) { GfsDomain * domain = color_data[0]; GfsVariable * v = color_data[1]; Colormap * colormap = color_data[2]; gdouble * min = color_data[3]; gdouble * max = color_data[4]; FttCell * cell; GtsPoint * p = GTS_POINT (o); FttVector pos; gdouble val; GtsColor c; pos.x = p->x; pos.y = p->y; pos.z = p->z; cell = gfs_domain_locate (domain, pos, -1, NULL); if (cell) { val = gfs_interpolate (cell, pos, v); c = colormap_color (colormap, (val - *min)/(*max - *min)); } else c.r = c.g = c.b = 1.; return c; } void gfs_draw_surface (GfsDomain * domain, GtsSurface * s, GfsVariable * v, gdouble min, gdouble max, FILE * fp) { GtsColor (*old_color) (GtsObject *); Colormap * colormap; g_return_if_fail (domain != NULL); g_return_if_fail (s != NULL); g_return_if_fail (fp != NULL); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) v->fine_coarse, v); if (min == max) max = min + 1.; colormap = colormap_jet (); old_color = GTS_OBJECT_CLASS (s->vertex_class)->color; GTS_OBJECT_CLASS (s->vertex_class)->color = variable_color; color_data[0] = domain; color_data[1] = v; color_data[2] = colormap; color_data[3] = &min; color_data[4] = &max; gts_surface_write_oogl (s, fp); GTS_OBJECT_CLASS (s->vertex_class)->color = old_color; colormap_destroy (colormap); } /* GtsColoredVertex: Header */ typedef struct _GtsColoredVertex GtsColoredVertex; struct _GtsColoredVertex { /*< private >*/ GtsVertex parent; /*< public >*/ GtsColor c; }; #define GTS_COLORED_VERTEX(obj) GTS_OBJECT_CAST (obj,\ GtsColoredVertex,\ gts_colored_vertex_class ()) #define GTS_IS_COLORED_VERTEX(obj) (gts_object_is_from_class (obj,\ gts_colored_vertex_class ())) GtsVertexClass * gts_colored_vertex_class (void); /* GtsColoredVertex: Object */ static void gts_colored_vertex_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gts_colored_vertex_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gts_colored_vertex_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (c.r)"); return; } GTS_COLORED_VERTEX (*o)->c.r = atof (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (c.g)"); return; } GTS_COLORED_VERTEX (*o)->c.g = atof (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (c.b)"); return; } GTS_COLORED_VERTEX (*o)->c.b = atof (fp->token->str); gts_file_next_token (fp); } static void gts_colored_vertex_write (GtsObject * o, FILE * fp) { if (GTS_OBJECT_CLASS (gts_colored_vertex_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gts_colored_vertex_class ())->parent_class->write) (o, fp); fprintf (fp, " %g %g %g", GTS_COLORED_VERTEX (o)->c.r, GTS_COLORED_VERTEX (o)->c.g, GTS_COLORED_VERTEX (o)->c.b); } static GtsColor gts_colored_vertex_color (GtsObject * o) { return GTS_COLORED_VERTEX (o)->c; } static void gts_colored_vertex_class_init (GtsVertexClass * klass) { GTS_OBJECT_CLASS (klass)->read = gts_colored_vertex_read; GTS_OBJECT_CLASS (klass)->write = gts_colored_vertex_write; GTS_OBJECT_CLASS (klass)->color = gts_colored_vertex_color; } static void gts_colored_vertex_init (GtsColoredVertex * object) { object->c.r = object->c.g = object->c.b = 1.; } GtsVertexClass * gts_colored_vertex_class (void) { static GtsVertexClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gts_colored_vertex_info = { "GtsColoredVertex", sizeof (GtsColoredVertex), sizeof (GtsVertexClass), (GtsObjectClassInitFunc) gts_colored_vertex_class_init, (GtsObjectInitFunc) gts_colored_vertex_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_vertex_class ()), >s_colored_vertex_info); } return klass; } /* GfsVertex: Header */ typedef struct _GfsVertex GfsVertex; struct _GfsVertex { /*< private >*/ GtsColoredVertex parent; /*< public >*/ gdouble v; }; #define GFS_VERTEX(obj) GTS_OBJECT_CAST (obj,\ GfsVertex,\ gfs_vertex_class ()) #define GFS_IS_VERTEX(obj) (gts_object_is_from_class (obj,\ gfs_vertex_class ())) GtsPointClass * gfs_vertex_class (void); /* GfsVertex: Object */ static void gfs_vertex_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gts_colored_vertex_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gts_colored_vertex_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (v)"); return; } GFS_VERTEX (*o)->v = atof (fp->token->str); gts_file_next_token (fp); } static void gfs_vertex_write (GtsObject * o, FILE * fp) { if (GTS_OBJECT_CLASS (gts_colored_vertex_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gts_colored_vertex_class ())->parent_class->write) (o, fp); fprintf (fp, " %g", GFS_VERTEX (o)->v); } static void gfs_vertex_class_init (GtsPointClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_vertex_read; GTS_OBJECT_CLASS (klass)->write = gfs_vertex_write; } GtsPointClass * gfs_vertex_class (void) { static GtsPointClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_vertex_info = { "GfsVertex", sizeof (GfsVertex), sizeof (GtsVertexClass), (GtsObjectClassInitFunc) gfs_vertex_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_colored_vertex_class ()), &gfs_vertex_info); } return klass; } /* GfsTwistedVertex: Header */ typedef struct _GfsTwistedVertex GfsTwistedVertex; struct _GfsTwistedVertex { /*< private >*/ GfsVertex parent; /*< public >*/ gdouble theta; }; #define GFS_TWISTED_VERTEX(obj) GTS_OBJECT_CAST (obj,\ GfsTwistedVertex,\ gfs_twisted_vertex_class ()) #define GFS_IS_TWISTED_VERTEX(obj) (gts_object_is_from_class (obj,\ gfs_twisted_vertex_class ())) GtsPointClass * gfs_twisted_vertex_class (void); /* GfsTwistedVertex: Object */ static void gfs_twisted_vertex_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_twisted_vertex_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_twisted_vertex_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (theta)"); return; } GFS_TWISTED_VERTEX (*o)->theta = atof (fp->token->str); gts_file_next_token (fp); } static void gfs_twisted_vertex_write (GtsObject * o, FILE * fp) { if (GTS_OBJECT_CLASS (gfs_twisted_vertex_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_twisted_vertex_class ())->parent_class->write) (o, fp); fprintf (fp, " %g", GFS_TWISTED_VERTEX (o)->theta); } static void gfs_twisted_vertex_class_init (GtsPointClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_twisted_vertex_read; GTS_OBJECT_CLASS (klass)->write = gfs_twisted_vertex_write; } GtsPointClass * gfs_twisted_vertex_class (void) { static GtsPointClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_twisted_vertex_info = { "GfsTwistedVertex", sizeof (GfsTwistedVertex), sizeof (GtsVertexClass), (GtsObjectClassInitFunc) gfs_twisted_vertex_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_vertex_class ()), &gfs_twisted_vertex_info); } return klass; } static void matrix_transpose (GtsMatrix * m) { guint i, j; for (i = 1; i < 3; i++) for (j = 0; j < i; j++) { gdouble t = m[i][j]; m[i][j] = m[j][i]; m[j][i] = t; } } static void base (GtsMatrix * b, GtsPoint * p1, GtsPoint * p2) { GtsVector x, y; x[0] = b[0][0]; x[1] = b[1][0]; x[2] = b[2][0]; gts_vector_init (b[2], p2, p1); gts_vector_normalize (b[2]); gts_vector_cross (y, b[2], x); if (gts_vector_norm (y) > 1e-2) { b[1][0] = y[0]; b[1][1] = y[1]; b[1][2] = y[2]; gts_vector_normalize (b[1]); } gts_vector_cross (b[0], b[1], b[2]); gts_vector_normalize (b[0]); matrix_transpose (b); } static void edge_list (GtsMatrix * b, GtsPoint * o, GSList * profile, GtsSurface * s, GtsEdge ** e, guint ne) { guint i; GtsVertex * vold = NULL; GtsVertex * vfirst = NULL; gboolean colored = FALSE; GtsMatrix * c; if (GTS_IS_COLORED_VERTEX (o) && gts_object_class_is_from_class (GTS_OBJECT_CLASS (s->vertex_class), GTS_OBJECT_CLASS (gts_colored_vertex_class ()))) colored = TRUE; if (GFS_IS_TWISTED_VERTEX (o)) { gdouble t = GFS_TWISTED_VERTEX (o)->theta; gdouble sint = sin (t), cost = cos (t); GtsMatrix * r = gts_matrix_new (cost, -sint, 0., 0., sint, cost, 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.); c = gts_matrix_product (b, r); gts_matrix_destroy (r); } else c = gts_matrix_new (b[0][0], b[0][1], b[0][2], 0., b[1][0], b[1][1], b[1][2], 0., b[2][0], b[2][1], b[2][2], 0., 0., 0., 0., 0.); for (i = 0; i <= ne && profile; i++, profile = profile->next) { GtsPoint * p = profile->data; GtsVertex * v = gts_vertex_new (s->vertex_class, p->x, p->y, 0.); if (colored) GTS_COLORED_VERTEX (v)->c = GTS_COLORED_VERTEX (o)->c; gts_point_transform (GTS_POINT (v), c); GTS_POINT (v)->x += o->x; GTS_POINT (v)->y += o->y; GTS_POINT (v)->z += o->z; if (vold != NULL) e[i-1] = gts_edge_new (s->edge_class, vold, v); vold = v; if (!vfirst) vfirst = v; } if (i <= ne && vold) e[i-1] = gts_edge_new (s->edge_class, vold, vfirst); gts_matrix_destroy (c); } static void add_face (GtsSurface * s, GtsEdge ** e1, GtsEdge ** e2, guint ne) { guint i; for (i = 0; i < ne; i++) { GtsVertex * v1 = GTS_SEGMENT (e1[i])->v1; GtsVertex * v2 = GTS_SEGMENT (e2[i])->v1; GtsVertex * v3 = GTS_SEGMENT (e2[i])->v2; GtsVertex * v4 = GTS_SEGMENT (e1[i])->v2; GtsEdge * e3 = gts_edge_new (s->edge_class, v1, v3); GtsEdge * e4 = GTS_EDGE (gts_vertices_are_connected (v1, v2)); GtsEdge * e5 = GTS_EDGE (gts_vertices_are_connected (v3, v4)); if (e4 == NULL) e4 = gts_edge_new (s->edge_class, v1, v2); if (e5 == NULL) e5 = gts_edge_new (s->edge_class, v3, v4); gts_surface_add_face (s, gts_face_new (s->face_class, e4, e2[i], e3)); gts_surface_add_face (s, gts_face_new (s->face_class, e3, e5, e1[i])); } } static GList * next_far_enough (GList * p, gdouble size) { GtsPoint * ps; GList * pf = NULL; if (p == NULL) return NULL; ps = p->data; p = p->next; size *= size; while (p && !pf) { if (gts_point_distance2 (ps, p->data) > size) pf = p; p = p->next; } return pf; } void gfs_extrude_profile (GtsSurface * s, GSList * profile, gboolean closed, GList * path) { GtsMatrix * r; GtsPoint * p0, * p1, * p2; GtsEdge ** e1, ** e2, ** tmp; GtsBBox * bb; gdouble size; guint ne; g_return_if_fail (s != NULL); g_return_if_fail (profile != NULL); g_return_if_fail (path != NULL); bb = gts_bbox_points (gts_bbox_class (), profile); size = bb->x2 - bb->x1; if (bb->y2 - bb->y1 > size) size = bb->y2 - bb->y1; gts_object_destroy (GTS_OBJECT (bb)); size /= 4.; p0 = path->data; path = next_far_enough (path, size); if (path == NULL) return; p1 = path->data; r = gts_matrix_identity (NULL); ne = closed ? g_slist_length (profile) : g_slist_length (profile) - 1; e1 = g_malloc (sizeof (GtsEdge *)*ne); e2 = g_malloc (sizeof (GtsEdge *)*ne); base (r, p0, p1); edge_list (r, p0, profile, s, e1, ne); do { path = next_far_enough (path, size); p2 = path ? path->data : NULL; if (p2) base (r, p0, p2); else base (r, p0, p1); edge_list (r, p1, profile, s, e2, ne); add_face (s, e1, e2, ne); tmp = e1; e1 = e2; e2 = tmp; p0 = p1; p1 = p2; } while (p1); g_free (e1); g_free (e2); gts_matrix_destroy (r); } static gdouble triangle_area (FttVector p1, FttVector p2, FttVector p3) { GtsVector v1, v2, a; v1[0] = p2.x - p1.x; v1[1] = p2.y - p1.y; v1[2] = p2.z - p1.z; v2[0] = p3.x - p2.x; v2[1] = p3.y - p2.y; v2[2] = p3.z - p2.z; gts_vector_cross (a, v1, v2); return gts_vector_norm (a)/2.; } static gdouble circumcircle_radius (FttVector p1, FttVector p2, FttVector p3) { gdouble area = triangle_area (p1, p2, p3); if (area == 0.) return G_MAXDOUBLE; else { GtsVector a, b, c; gts_vector_init (a, &p1, &p2); gts_vector_init (b, &p2, &p3); gts_vector_init (c, &p3, &p1); return gts_vector_norm (a)*gts_vector_norm (b)*gts_vector_norm (c)/area; } } static GSList * circle_profile (GtsPointClass * klass, gdouble radius, guint np) { GSList * lp = NULL; guint i; for (i = 0; i < np; i++) { gdouble a = 2.*M_PI*i/(gdouble) np; lp = g_slist_prepend (lp, gts_point_new (klass, radius*cos (a), radius*sin(a), 0.)); } return lp; } static GSList * ribbon_profile (GtsPointClass * klass, gdouble half_width) { GSList * lp = NULL; lp = g_slist_prepend (lp, gts_point_new (klass, 0., -half_width, 0.)); lp = g_slist_prepend (lp, gts_point_new (klass, 0., half_width, 0.)); return lp; } #if (!FTT_2D) static void vorticity_vector (FttCell * cell, gpointer * data) { gdouble size = ftt_cell_size (cell); GfsVariable ** g = data[0]; GfsVariable ** v = data[1]; GFS_VALUE (cell, g[0]) = (gfs_center_gradient (cell, FTT_Y, v[2]->i) - gfs_center_gradient (cell, FTT_Z, v[1]->i))/size; GFS_VALUE (cell, g[1]) = (gfs_center_gradient (cell, FTT_Z, v[0]->i) - gfs_center_gradient (cell, FTT_X, v[2]->i))/size; GFS_VALUE (cell, g[2]) = (gfs_center_gradient (cell, FTT_X, v[1]->i) - gfs_center_gradient (cell, FTT_Y, v[0]->i))/size; } #endif /* 3D */ static gdouble interpolated_velocity (FttCell * cell, FttVector p, GfsVariable ** U, gdouble direction, FttVector * u) { FttComponent c; gdouble nu = 0.; gdouble (* interpolate) (FttCell *, FttVector, GfsVariable * v) = GFS_IS_MIXED (cell) ? gfs_mixed_cell_interpolate : gfs_interpolate; for (c = 0; c < FTT_DIMENSION; c++) { (&u->x)[c] = direction* (*interpolate) (cell, p, U[c]); nu += (&u->x)[c]*(&u->x)[c]; } return nu; } static GList * grow_curve (GfsDomain * domain, GfsVariable ** U, FttVector p, GfsVariable * var, gdouble min, gdouble max, gboolean twist, GList * path, gdouble direction, gboolean (* stop) (FttCell *, GList *, gpointer), gpointer data) { FttCell * cell; gdouble delta = 0.2; GtsPoint * oldp = NULL; FttVector p1, p2; gdouble cost = 0., theta = 0.; gdouble maxcost = 4e-9; guint nstep = 0, nmax = 10000; GtsPointClass * path_class = gfs_vertex_class (); Colormap * colormap = NULL; if (min < max) colormap = colormap_jet (); #if (!FTT_2D) GfsVariable * vort[FTT_DIMENSION]; if (twist) { FttComponent c; gpointer data[2]; path_class = GTS_POINT_CLASS (gfs_twisted_vertex_class ()); for (c = 0; c < FTT_DIMENSION; c++) vort[c] = gfs_temporary_variable (domain); gfs_variable_set_vector (vort, FTT_DIMENSION); data[0] = vort; data[1] = U; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) vorticity_vector, data); for (c = 0; c < FTT_DIMENSION; c++) gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) vort[c]->fine_coarse, vort[c]); } #else /* 2D */ twist = FALSE; #endif /* 2D */ p1 = p2 = p; while ((cell = gfs_domain_locate (domain, p, -1, NULL)) != NULL && circumcircle_radius (p1, p2, p) > ftt_cell_size (cell) && nmax--) { gdouble h = delta*ftt_cell_size (cell); FttVector u; FttComponent c; gdouble nu = 0.; cost += triangle_area (p1, p2, p); p1 = p2; p2 = p; if (oldp == NULL || cost > maxcost) { oldp = gts_point_new (path_class, p.x, p.y, p.z); if (var) GFS_VERTEX (oldp)->v = gfs_interpolate (cell, p, var); if (colormap) GTS_COLORED_VERTEX (oldp)->c = colormap_color (colormap, (GFS_VERTEX (oldp)->v - min)/(max - min)); if (twist) GFS_TWISTED_VERTEX (oldp)->theta = theta; path = g_list_prepend (path, oldp); if (stop != NULL && (* stop) (cell, path, data)) break; cost = 0.; nstep = 0; } nu = interpolated_velocity (cell, p, U, direction, &u); if (nu > 0) { FttVector p1 = p; FttCell * cell1; nu = 2.*sqrt (nu); for (c = 0; c < FTT_DIMENSION; c++) (&p1.x)[c] += h*(&u.x)[c]/nu; cell1 = gfs_domain_locate (domain, p1, -1, NULL); if (!cell1) break; nu = interpolated_velocity (cell1, p1, U, direction, &u); } else break; if (nu > 0. && nstep++ < nmax) { FttVector p1; p1 = p; nu = sqrt (nu); for (c = 0; c < FTT_DIMENSION; c++) ((gdouble *) &p)[c] += h*((gdouble *) &u)[c]/nu; #if (!FTT_2D) if (twist) { GtsVector rot; GtsVector dx; dx[0] = p1.x - p.x; dx[1] = p1.y - p.y; dx[2] = p1.z - p.z; for (c = 0; c < FTT_DIMENSION; c++) rot[c] = gfs_interpolate (cell, p1, vort[c]); theta += gts_vector_scalar (rot, dx)/nu; } #endif /* 3D */ } else break; } if (oldp && (p2.x != oldp->x || p2.y != oldp->y || p2.z != oldp->z)) { cell = gfs_domain_locate (domain, p2, -1, NULL); if (cell) { oldp = gts_point_new (path_class, p2.x, p2.y, p2.z); if (var) GFS_VERTEX (oldp)->v = gfs_interpolate (cell, p2, var); if (twist) GFS_TWISTED_VERTEX (oldp)->theta = theta; path = g_list_prepend (path, oldp); } } if (colormap) colormap_destroy (colormap); #if (!FTT_2D) if (twist) { FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) gts_object_destroy (GTS_OBJECT (vort[c])); } #endif /* 3D */ return direction > 0. ? g_list_reverse (path) : path; } GList * gfs_streamline_new (GfsDomain * domain, GfsVariable ** U, FttVector p, GfsVariable * var, gdouble min, gdouble max, gboolean twist, gboolean (* stop) (FttCell *, GList *, gpointer), gpointer data) { GList * i, * path; g_return_val_if_fail (domain != NULL, NULL); g_return_val_if_fail (U != NULL, NULL); i = grow_curve (domain, U, p, var, min, max, twist, NULL, 1., stop, data); path = g_list_remove_link (i, i); if (i != NULL) gts_object_destroy (i->data); g_list_free_1 (i); path = grow_curve (domain, U, p, var, min, max, twist, path, -1., stop, data); return path; } void gfs_streamline_write (GList * stream, FILE * fp) { g_return_if_fail (fp != NULL); fprintf (fp, "GfsStreamline %u\n", g_list_length (stream)); while (stream) { (* GTS_OBJECT (stream->data)->klass->write) (stream->data, fp); fputc ('\n', fp); stream = stream->next; } } GList * gfs_streamline_read (GtsFile * fp) { GList * stream = NULL; guint n = 0, nv; g_return_val_if_fail (fp != NULL, NULL); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (GfsStreamline)"); return NULL; } gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (number of vertices)"); return NULL; } nv = atoi (fp->token->str); gts_file_first_token_after (fp, '\n'); while (fp->type != GTS_ERROR && n < nv) { GtsObject * o = gts_object_new (GTS_OBJECT_CLASS (gfs_twisted_vertex_class ())); (*o->klass->read) (&o, fp); gts_file_first_token_after (fp, '\n'); stream = g_list_prepend (stream, o); n++; } if (fp->type == GTS_ERROR) { g_list_free (stream); return NULL; } return stream; } void gfs_streamline_draw (GList * stream, FILE * fp) { guint n = g_list_length (stream); g_return_if_fail (fp != NULL); fprintf (fp, "VECT 1 %u 0 %u 0\n", n, n); while (stream) { fprintf (fp, "%g %g %g\n", GTS_POINT (stream->data)->x, GTS_POINT (stream->data)->y, GTS_POINT (stream->data)->z); stream = stream->next; } } void gfs_streamline_destroy (GList * stream) { g_list_foreach (stream, (GFunc) gts_object_destroy, NULL); g_list_free (stream); } void gfs_draw_stream_cylinder (GfsDomain * domain, FttVector p, gdouble radius, GfsVariable * var, gdouble min, gdouble max, FILE * fp) { GSList * profile; GList * path; GtsSurface * s; g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); s = gts_surface_new (gts_surface_class (), gts_face_class (), gts_edge_class (), min < max ? gts_colored_vertex_class () : gts_vertex_class ()); path = gfs_streamline_new (domain, gfs_domain_velocity (domain), p, var, min, max, FALSE, NULL, NULL); profile = circle_profile (gts_point_class (), radius, 10); gfs_extrude_profile (s, profile, TRUE, path); gts_surface_write_oogl (s, fp); gts_object_destroy (GTS_OBJECT (s)); gfs_streamline_destroy (path); g_slist_foreach (profile, (GFunc) gts_object_destroy, NULL); g_slist_free (profile); } void gfs_draw_stream_ribbon (GfsDomain * domain, FttVector p, gdouble half_width, GfsVariable * var, gdouble min, gdouble max, FILE * fp) { GList * path; GSList * profile; GtsSurface * s; g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); s = gts_surface_new (gts_surface_class (), gts_face_class (), gts_edge_class (), min < max ? gts_colored_vertex_class () : gts_vertex_class ()); path = gfs_streamline_new (domain, gfs_domain_velocity (domain), p, var, min, max, TRUE, NULL, NULL); profile = ribbon_profile (gts_point_class (), half_width); gfs_extrude_profile (s, profile, FALSE, path); gts_surface_write_oogl (s, fp); gts_object_destroy (GTS_OBJECT (s)); gfs_streamline_destroy (path); g_slist_foreach (profile, (GFunc) gts_object_destroy, NULL); g_slist_free (profile); } void gfs_draw_streamline (GfsDomain * domain, FttVector p, FILE * fp) { GList * path; g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); path = gfs_streamline_new (domain, gfs_domain_velocity (domain), p, NULL, 0., 0., FALSE, NULL, NULL); gfs_streamline_draw (path, fp); gfs_streamline_destroy (path); } #if !FTT_2D static gdouble point_orientation (FttVector p[3], FttVector * c) { gdouble adx, bdx, cdx; gdouble ady, bdy, cdy; gdouble adz, bdz, cdz; adx = p[0].x - c->x; bdx = p[1].x - c->x; cdx = p[2].x - c->x; ady = p[0].y - c->y; bdy = p[1].y - c->y; cdy = p[2].y - c->y; adz = p[0].z - c->z; bdz = p[1].z - c->z; cdz = p[2].z - c->z; return (adx * (bdy * cdz - bdz * cdy) + bdx * (cdy * adz - cdz * ady) + cdx * (ady * bdz - adz * bdy)); } /** * gfs_plane_cuts_cell: * @plane: three points belonging to the plane. * @cell: a #FttCell. * * Returns: %TRUE if @plane cuts @cell, %FALSE otherwise. */ gboolean gfs_plane_cuts_cell (FttVector plane[3], FttCell * cell) { FttVector o; gdouble h = ftt_cell_size (cell)*SLIGHTLY_LARGER; guint i; g_return_val_if_fail (cell != NULL, FALSE); ftt_cell_pos (cell, &o); o.x -= h/2.; o.y -= h/2.; o.z -= h/2.; for (i = 0; i < 12; i++) { FttVector e, d; gdouble a, b; d.x = o.x + h*edge[i][0].x; d.y = o.y + h*edge[i][0].y; d.z = o.z + h*edge[i][0].z; e.x = o.x + h*edge[i][1].x; e.y = o.y + h*edge[i][1].y; e.z = o.z + h*edge[i][1].z; a = point_orientation (plane, &e); b = point_orientation (plane, &d); if ((a <= 0. && b > 0.) || (a >= 0. && b < 0.)) return TRUE; } return FALSE; } static void cube_plane_intersection (FttCell * cell, FttVector * O, FttVector * n, FttVector p[12], gint orient[12], GfsVariable * var, gdouble v[12], gint max_level) { FttVector o; gdouble h = ftt_cell_size (cell)*SLIGHTLY_LARGER, vc[8]; guint i; if (var) for (i = 0; i < 8; i++) vc[i] = G_MAXDOUBLE; ftt_cell_pos (cell, &o); o.x -= h/2.; o.y -= h/2.; o.z -= h/2.; for (i = 0; i < 12; i++) { FttVector e, d; d.x = o.x + h*edge[i][0].x; d.y = o.y + h*edge[i][0].y; d.z = o.z + h*edge[i][0].z; e.x = o.x + h*edge[i][1].x; e.y = o.y + h*edge[i][1].y; e.z = o.z + h*edge[i][1].z; gdouble den = n->x*(e.x - d.x) + n->y*(e.y - d.y) + n->z*(e.z - d.z); orient[i] = -1; if (fabs (den) > 1e-10) { gdouble t = (n->x*(O->x - d.x) + n->y*(O->y - d.y) + n->z*(O->z - d.z))/den; if (t >= 0. && t < 1.) { p[i].x = d.x + t*(e.x - d.x); p[i].y = d.y + t*(e.y - d.y); p[i].z = d.z + t*(e.z - d.z); orient[i] = (n->x*(e.x - O->x) + n->y*(e.y - O->y) + n->z*(e.z - O->z) > 0.); if (var) { guint j = edge1[i][0]; if (vc[j] == G_MAXDOUBLE) vc[j] = gfs_cell_corner_value (cell, corner[j], var, max_level); d.z = vc[j]; j = edge1[i][1]; if (vc[j] == G_MAXDOUBLE) vc[j] = gfs_cell_corner_value (cell, corner[j], var, max_level); e.z = vc[j]; v[i] = d.z + t*(e.z - d.z); } } } } } /** * gfs_cut_cube_vertices: * @cell: a #FttCell. * @maxlevel: the maximum level to consider (or -1). * @p: a point on the plane. * @n: the normal to the plane. * @v: where to return the vertices coordinates. * @d: where to return the direction. * @var: a #GfsVariable or %NULL. * @val: where to return the values of @var or %NULL. * * Fills @v, @d and @val with the coordinates/values of the vertices, * intersections of @cell with the plane defined by @p and @n. * * The vertices are ordered consistently to define a consistent, * oriented polygon. * * Returns: the number of vertices (0 if the plane does not cut the cell). */ guint gfs_cut_cube_vertices (FttCell * cell, gint maxlevel, FttVector * p, FttVector * n, FttVector v[12], FttDirection d[12], GfsVariable * var, gdouble val[12]) { FttVector a[12]; gdouble vv[12]; gint orient[12]; guint i; g_return_val_if_fail (cell != NULL, 0); g_return_val_if_fail (p != NULL, 0); g_return_val_if_fail (n != NULL, 0); g_return_val_if_fail ((var == NULL && val == NULL) || (var != NULL && val != NULL), 0); cube_plane_intersection (cell, p, n, a, orient, var, vv, maxlevel); for (i = 0; i < 12; i++) { guint nv = 0, e = i; while (orient[e] >= 0) { guint m = 0, * ne = connect[e][orient[e]]; d[nv] = ne[3]; if (var) val[nv] = vv[e]; v[nv++] = a[e]; orient[e] = -1; while (m < 3 && orient[e] < 0) e = ne[m++]; } if (nv > 2) return nv; } return 0; } #endif /* 3D */ gerris-snapshot-131206/src/cartesian.c0000644000175100017510000001755212250371171014600 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2007-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Data defined on Cartesian grids. */ #include #include "cartesian.h" /** * Storage for Cartesian grid data. * \beginobject{GfsCartesianGrid} */ static void cartesian_grid_read (GtsObject ** o, GtsFile * fp) { GfsCartesianGrid * cgd = GFS_CARTESIAN_GRID (*o); guint i, j, size = 1; if (GTS_OBJECT_CLASS (gfs_cartesian_grid_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_cartesian_grid_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; while (fp->type == '\n') gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (N)"); return; } cgd->N = atoi (fp->token->str); gts_file_next_token (fp); cgd->name = g_malloc0 (cgd->N*sizeof (char *)); for (i = 0; i < cgd->N; i++) { if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (name[%d])", i); return; } cgd->name[i] = g_strdup (fp->token->str); gts_file_next_token (fp); } cgd->n = g_malloc (cgd->N*sizeof (guint)); for (i = 0; i < cgd->N; i++) { while (fp->type == '\n') gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (n[%d])", i); return; } cgd->n[i] = atoi (fp->token->str); gts_file_next_token (fp); size *= cgd->n[i]; } cgd->x = g_malloc0 (cgd->N*sizeof (gdouble *)); for (i = 0; i < cgd->N; i++) { cgd->x[i] = g_malloc (cgd->n[i]*sizeof (gdouble)); gdouble last = - G_MAXDOUBLE; for (j = 0; j < cgd->n[i]; j++) { if (fp->type == '\n') gts_file_next_token (fp); if (fp->type != GTS_FLOAT && fp->type != GTS_INT) { gts_file_error (fp, "expecting a number (x[%d][%d])", i, j); return; } cgd->x[i][j] = atof (fp->token->str); if (cgd->x[i][j] < last) { gts_file_error (fp, "coordinates must be in increasing order", i, j); return; } last = cgd->x[i][j]; gts_file_next_token (fp); } } cgd->v = g_malloc (size*sizeof (gdouble)); for (i = 0; i < size; i++) { if (fp->type == '\n') gts_file_next_token (fp); if (fp->type != GTS_FLOAT && fp->type != GTS_INT) { gts_file_error (fp, "expecting a number"); return; } cgd->v[i] = atof (fp->token->str); gts_file_next_token (fp); } } static void cartesian_grid_write (GtsObject * o, FILE * fp) { GfsCartesianGrid * cgd = GFS_CARTESIAN_GRID (o); guint i, j, size = 1; if (GTS_OBJECT_CLASS (gfs_cartesian_grid_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_cartesian_grid_class ())->parent_class->write) (o, fp); for (i = 0; i < cgd->N; i++) size *= cgd->n[i]; fprintf (fp, "%d ", cgd->N); for (i = 0; i < cgd->N; i++) fprintf (fp, "%s ", cgd->name[i]); fputc ('\n', fp); for (i = 0; i < cgd->N; i++) fprintf (fp, "%d\n", cgd->n[i]); for (i = 0; i < cgd->N; i++) for (j = 0; j < cgd->n[i]; j++) fprintf (fp, "%f\n", cgd->x[i][j]); for (i = 0; i < size; i++) fprintf (fp, "%f\n", cgd->v[i]); } static void cartesian_grid_destroy (GtsObject * object) { GfsCartesianGrid * cgd = GFS_CARTESIAN_GRID (object); guint i; if (cgd->name) { for (i = 0; i < cgd->N; i++) g_free (cgd->name[i]); g_free (cgd->name); } g_free (cgd->n); if (cgd->x) { for (i = 0; i < cgd->N; i++) g_free (cgd->x[i]); g_free (cgd->x); } g_free (cgd->v); (* GTS_OBJECT_CLASS (gfs_cartesian_grid_class ())->parent_class->destroy) (object); } static void cartesian_grid_class_init (GtsObjectClass * klass) { /* define new methods and overload inherited methods here */ GTS_OBJECT_CLASS (klass)->read = cartesian_grid_read; GTS_OBJECT_CLASS (klass)->write = cartesian_grid_write; GTS_OBJECT_CLASS (klass)->destroy = cartesian_grid_destroy; } GtsObjectClass * gfs_cartesian_grid_class (void) { static GtsObjectClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsCartesianGrid", sizeof (GfsCartesianGrid), sizeof (GtsObjectClass), (GtsObjectClassInitFunc) cartesian_grid_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_object_class ()), &info); } return klass; } GfsCartesianGrid * gfs_cartesian_grid_new (GtsObjectClass * klass) { GfsCartesianGrid * object; object = GFS_CARTESIAN_GRID (gts_object_new (GTS_OBJECT_CLASS (klass))); return object; } static void slice (GfsCartesianGrid * g, guint p, GfsCartesianGrid * s) { s->N = g->N - 1; s->n = &g->n[1]; s->x = &g->x[1]; guint i; gulong size = 1; for (i = 1; i < g->N; i++) size *= g->n[i]; s->v = &g->v[size*p]; } static gint lookup (GfsCartesianGrid * g, gdouble x) { guint min = 0, max = g->n[0] - 1; if (x < g->x[0][min] || x > g->x[0][max]) return -1; while (max > min + 1) { guint n = (min + max)/2; if (x > g->x[0][n]) min = n; else max = n; } return min; } /** * gfs_cartesian_grid_interpolate: * @g: a Cartesian grid. * @p: a position vector of dimension @g->N. * @val: the interpolated value at position @p. * * Returns: %TRUE if @val has been computed, %FALSE if @p is not * contained within @g. */ gboolean gfs_cartesian_grid_interpolate (GfsCartesianGrid * g, gdouble * p, gdouble * val) { g_return_val_if_fail (g != NULL, FALSE); g_return_val_if_fail (g->N > 0, FALSE); g_return_val_if_fail (p != NULL, FALSE); g_return_val_if_fail (val != NULL, FALSE); gint i = lookup (g, p[0]); if (i < 0) return FALSE; gdouble v1, v2; if (g->N > 1) { GfsCartesianGrid g1; slice (g, i, &g1); if (!gfs_cartesian_grid_interpolate (&g1, &p[1], &v1)) return FALSE; slice (g, i + 1, &g1); if (!gfs_cartesian_grid_interpolate (&g1, &p[1], &v2)) return FALSE; } else { v1 = g->v[i]; v2 = g->v[i + 1]; } g_assert (g->x[0][i + 1] - g->x[0][i] != 0.); *val = v1 + (v2 - v1)*(p[0] - g->x[0][i])/(g->x[0][i + 1] - g->x[0][i]); return TRUE; } /** * gfs_cartesian_grid_read: * @name: a .cgd filename. * @fp: a #GtsFile or %NULL. * * Returns: the #GfsCartesianGrid stored in @name, or %NULL if an * error occured, in which case an error message is set in @fp (if not * %NULL). */ GfsCartesianGrid * gfs_cartesian_grid_read (const gchar * name, GtsFile * fp) { g_return_val_if_fail (name != NULL, NULL); FILE * fptr = fopen (name, "r"); GtsFile * fp1; GfsCartesianGrid * grid; GtsObjectClass * klass; if (fptr == NULL) { if (fp) gts_file_error (fp, "cannot open file `%s'", name); return NULL; } fp1 = gts_file_new (fptr); klass = gfs_cartesian_grid_class (); grid = gfs_cartesian_grid_new (klass); GtsObject * o = GTS_OBJECT (grid); (* klass->read) (&o, fp1); if (fp1->type == GTS_ERROR) { if (fp) gts_file_error (fp, "%s:%d:%d: %s", name, fp1->line, fp1->pos, fp1->error); gts_object_destroy (GTS_OBJECT(grid)); grid = NULL; } gts_file_destroy (fp1); fclose (fptr); return grid; } /** \endobject{GfsCartesianGrid} */ gerris-snapshot-131206/src/variable.c0000644000175100017510000015070612250371171014413 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /** \file * \brief GfsVariable and its descendants. */ #include #include #include #include "variable.h" #include "vof.h" #include "source.h" #include "init.h" /** * Base class for scalar fields. * \beginobject{GfsVariable} */ static void variable_init_domain (GfsVariable * v, GfsDomain * domain) { v->i = gfs_domain_alloc (domain); v->domain = domain; GTS_OBJECT (v)->reserved = domain; } static void gfs_variable_read (GtsObject ** o, GtsFile * fp) { GfsDomain * domain; GfsVariable * v, * old; if (GTS_OBJECT_CLASS (gfs_variable_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_variable_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (name)"); return; } domain = (*o)->reserved; if (gfs_derived_variable_from_name (domain->derived_variables, fp->token->str)) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } v = GFS_VARIABLE (*o); v->name = g_strdup (fp->token->str); gts_file_next_token (fp); if ((old = gfs_variable_from_name (domain->variables, v->name))) { GSList * i; if ((i = g_slist_find (domain->variables_io, old))) i->data = v; domain->variables = g_slist_remove (domain->variables, old); gts_object_destroy (GTS_OBJECT (old)); } variable_init_domain (v, domain); domain->variables = g_slist_append (domain->variables, v); } static void gfs_variable_write (GtsObject * o, FILE * fp) { if (GTS_OBJECT_CLASS (gfs_variable_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_variable_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", GFS_VARIABLE (o)->name); } static void gfs_variable_destroy (GtsObject * object) { GfsVariable * v = GFS_VARIABLE (object); g_free (v->name); g_free (v->description); if (v->sources) gts_object_destroy (GTS_OBJECT (v->sources)); if (v->surface_bc) gts_object_destroy (GTS_OBJECT (v->surface_bc)); if (v->default_bc) gts_object_destroy (GTS_OBJECT (v->default_bc)); if (v->domain) { gfs_domain_free (v->domain, v->i); v->domain->variables = g_slist_remove (v->domain->variables, v); } if (GFS_IS_VARIABLE_TRACER (v)) { FttComponent c; GfsVariableTracer * t = GFS_IS_VARIABLE_TRACER (v); for (c = 0; c < FTT_DIMENSION; c++) if (t->advection.sink[c]) gts_object_destroy (GTS_OBJECT (t->advection.sink[c])); } (* GTS_OBJECT_CLASS (gfs_variable_class ())->parent_class->destroy) (object); } static void gfs_variable_class_init (GtsObjectClass * klass) { klass->read = gfs_variable_read; klass->write = gfs_variable_write; klass->destroy = gfs_variable_destroy; } static void gfs_variable_init (GfsVariable * v) { GFS_EVENT (v)->istep = 1; v->centered = FALSE; v->component = FTT_DIMENSION; v->fine_coarse = (GfsVariableFineCoarseFunc) gfs_get_from_below_intensive; v->coarse_fine = (GfsVariableFineCoarseFunc) gfs_cell_coarse_fine; } GfsVariableClass * gfs_variable_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_info = { "GfsVariable", sizeof (GfsVariable), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) gfs_variable_class_init, (GtsObjectInitFunc) gfs_variable_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_variable_info); } return klass; } /** * gfs_variable_new: * @klass: a #GfsVariableClass. * @domain: a #GfsDomain. * @name: the name of the variable or %NULL. * @description: the variable description or %NULL. * * Returns: a newly allocated #GfsVariable or %NULL if a variable * named @name already exists in @domain. */ GfsVariable * gfs_variable_new (GfsVariableClass * klass, GfsDomain * domain, const gchar * name, const gchar * description) { GfsVariable * v; g_return_val_if_fail (klass != NULL, NULL); g_return_val_if_fail (domain != NULL, NULL); if (name && (gfs_variable_from_name (domain->variables, name) || gfs_derived_variable_from_name (domain->derived_variables, name))) return NULL; v = GFS_VARIABLE (gts_object_new (GTS_OBJECT_CLASS (klass))); if (name) v->name = g_strdup (name); if (description) v->description = g_strdup (description); variable_init_domain (v, domain); return v; } /** * gfs_variable_from_name: * @i: the list of available #GfsVariable. * @name: the name of the variable to find. * * Returns: the #GfsVariable @name or %NULL if this variable name does * not exist. */ GfsVariable * gfs_variable_from_name (GSList * i, const gchar * name) { g_return_val_if_fail (name != NULL, NULL); while (i && (!GFS_VARIABLE (i->data)->name || strcmp (name, GFS_VARIABLE (i->data)->name))) i = i->next; return i ? GFS_VARIABLE (i->data) : NULL; } /** * gfs_variables_from_list: * @i: the list of available #GfsVariable. * @list: a malloc'ed string containing comma separated variable names. * @error: where to return the variable name in case of error. * * Returns: a list of variables or %NULL in case of error, in which * case *@error points to the name of the unknown variable. */ GSList * gfs_variables_from_list (GSList * i, gchar * list, gchar ** error) { gchar * s; GSList * var = NULL; g_return_val_if_fail (i != NULL, NULL); g_return_val_if_fail (error != NULL, NULL); s = strtok (list, ","); while (s) { GfsVariable * v = gfs_variable_from_name (i, s); if (v == NULL) { *error = s; g_slist_free (var); return NULL; } var = g_slist_append (var, v); s = strtok (NULL, ","); } return var; } /** * gfs_variables_swap: * @v1: a #GfsVariable. * @v2: a #GfsVariable. * * Swaps the values of @v1 and @v2, belonging to the same #GfsDomain. */ void gfs_variables_swap (GfsVariable * v1, GfsVariable * v2) { guint i; g_return_if_fail (v1 != NULL); g_return_if_fail (v2 != NULL); g_return_if_fail (v1->domain == v2->domain); i = v1->i; v1->i = v2->i; v2->i = i; } /** * gfs_variable_set_vector: * @v: the components of the vector. * @n: the vector dimension. * * Sets @v[0],...,@v[n-1] as components of a vector quantity. */ void gfs_variable_set_vector (GfsVariable ** v, guint n) { guint i, j; g_return_if_fail (v != NULL); g_return_if_fail (n > 1 && n <= FTT_DIMENSION); for (i = 0; i < n; i++) { g_return_if_fail (v[i] != NULL); v[i]->component = i; for (j = 0; j < n; j++) v[i]->vector[j] = v[j]; } /* for rotated boundary conditions i.e. gfs_boundary_periodic_rotate() */ v[0]->orientation = 1.; v[1]->orientation = -1.; } /** * gfs_variable_set_tensor: * @t: the components of the 2x2 tensor. * * Sets @t[0][0],...,@t[1][1] as components of a tensor. */ void gfs_variable_set_tensor (GfsVariable * t[2][2]) { g_return_if_fail (t != NULL); /* for rotated boundary conditions i.e. gfs_boundary_periodic_rotate() */ t[0][0]->component = 0; t[0][0]->vector[0] = t[0][0]; t[0][0]->vector[1] = t[1][1]; t[0][0]->orientation = + 1.; t[0][0]->even = TRUE; t[1][1]->component = 1; t[1][1]->vector[0] = t[0][0]; t[1][1]->vector[1] = t[1][1]; t[1][1]->orientation = + 1.; t[1][1]->even = TRUE; t[0][1]->component = 0; t[0][1]->vector[0] = t[0][1]; t[0][1]->vector[1] = t[1][0]; t[0][1]->orientation = - 1.; t[0][1]->even = TRUE; t[1][0]->component = 1; t[1][0]->vector[0] = t[0][1]; t[1][0]->vector[1] = t[1][0]; t[1][0]->orientation = - 1.; t[1][0]->even = TRUE; } /** * gfs_variable_clone: * @v: a #GfsVariable. * @name: a name. * * Returns: a new #GfsVariable called @name and clone of @v. */ GfsVariable * gfs_variable_clone (GfsVariable * v, gchar * name) { g_return_val_if_fail (v != NULL, NULL); g_return_val_if_fail (name != NULL, NULL); char * buf; size_t len; FILE * f = open_memstream (&buf, &len); if (f == NULL) g_error ("gfs_variable_clone(): could not open_memstream:\n%s", strerror (errno)); gchar * s = v->name; v->name = name; GtsObject * o = GTS_OBJECT (v); (* o->klass->write) (o, f); fclose (f); v->name = s; GtsFile * fp = gts_file_new_from_buffer (buf, len); GtsObject * clone = gts_object_new (o->klass); gfs_object_simulation_set (clone, gfs_object_simulation (o)); (* o->klass->read) (&clone, fp); if (fp->type == GTS_ERROR) g_error ("gfs_variable_clone:\n%d:%d:%s", fp->line, fp->pos, fp->error); gts_file_destroy (fp); free (buf); GFS_VARIABLE (clone)->units = v->units; GFS_VARIABLE (clone)->fine_coarse = v->fine_coarse; GFS_VARIABLE (clone)->coarse_fine = v->coarse_fine; return GFS_VARIABLE (clone); } /** \endobject{GfsVariable} */ /** * Boolean value consistent with adaptive refinement. * \beginobject{GfsVariableBoolean} */ static void boolean_fine_coarse (FttCell * parent, GfsVariable * v) { FttCellChildren child; gint i; ftt_cell_children (parent, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i] && GFS_VALUE (child.c[i], v) < 0.) { GFS_VALUE (parent, v) = -1.; return; } gfs_get_from_below_intensive (parent, v); } static void boolean_coarse_fine (FttCell * parent, GfsVariable * v) { FttCellChildren child; gdouble val = GFS_VALUE (parent, v); gint i; ftt_cell_children (parent, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) GFS_VALUE (child.c[i], v) = val; } static void variable_boolean_init (GfsVariable * v) { v->fine_coarse = boolean_fine_coarse; v->coarse_fine = boolean_coarse_fine; v->description = g_strdup ("Boolean"); } GfsVariableClass * gfs_variable_boolean_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_boolean_info = { "GfsVariableBoolean", sizeof (GfsVariable), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) variable_boolean_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &gfs_variable_boolean_info); } return klass; } /** \endobject{GfsVariableBoolean} */ /** * Advected scalar fields. * \beginobject{GfsVariableTracer} */ static void variable_tracer_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_variable_tracer_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type == '{') gfs_advection_params_read (&GFS_VARIABLE_TRACER (*o)->advection, fp); if (fp->type != GTS_ERROR && fp->type == '{') g_warning ("%d:%d: specifying diffusion parameters is not done here anymore!", fp->line, fp->pos); } static void variable_tracer_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_variable_tracer_class ())->parent_class->write) (o, fp); fputc (' ', fp); gfs_advection_params_write (&GFS_VARIABLE_TRACER (o)->advection, fp); } static void variable_tracer_class_init (GtsObjectClass * klass) { klass->read = variable_tracer_read; klass->write = variable_tracer_write; } static void variable_tracer_init (GfsVariableTracer * v) { gfs_advection_params_init (&v->advection); v->advection.gradient = gfs_center_van_leer_gradient; v->advection.flux = gfs_face_advection_flux; v->advection.v = GFS_VARIABLE (v); v->advection.fv = NULL; GFS_VARIABLE (v)->description = g_strdup ("Tracer"); } GfsVariableClass * gfs_variable_tracer_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_tracer_info = { "GfsVariableTracer", sizeof (GfsVariableTracer), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_tracer_class_init, (GtsObjectInitFunc) variable_tracer_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &gfs_variable_tracer_info); } return klass; } /** \endobject{GfsVariableTracer} */ /** * \beginobject{GfsVariableResidual} */ static void scale_residual (FttCell * cell, GfsVariable * res) { gdouble size = ftt_cell_size (cell); gdouble dt = GFS_SIMULATION (res->domain)->advection_params.dt; GFS_VALUE (cell, res) *= dt*dt/(size*size); } static gboolean variable_residual_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_variable_class ())->event) (event, sim)) { gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) scale_residual, event); return TRUE; } return FALSE; } static void variable_residual_class_init (GfsEventClass * klass) { klass->event = variable_residual_event; } static void variable_residual_init (GfsVariable * v) { v->description = g_strdup ("Residual of the Poisson equation"); } GfsVariableClass * gfs_variable_residual_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_residual_info = { "GfsVariableResidual", sizeof (GfsVariable), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_residual_class_init, (GtsObjectInitFunc) variable_residual_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &gfs_variable_residual_info); } return klass; } /** \endobject{GfsVariableResidual} */ /** * Spatial filtering. * \beginobject{GfsVariableFiltered} */ static void variable_filtered_read (GtsObject ** o, GtsFile * fp) { GfsVariableFiltered * v = GFS_VARIABLE_FILTERED (*o); GfsDomain * domain; (* GTS_OBJECT_CLASS (gfs_variable_filtered_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (v)"); return; } domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (!(v->v = gfs_variable_from_name (domain->variables, fp->token->str))) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting a number (niter)"); return; } v->niter = atoi (fp->token->str); if (v->niter == 0) { gts_file_error (fp, "niter must be strictly positive"); return; } gts_file_next_token (fp); if (GFS_VARIABLE (v)->description) g_free (GFS_VARIABLE (v)->description); GFS_VARIABLE (v)->description = g_strjoin (" ", "Variable", v->v->name, "filtered", NULL); GFS_VARIABLE (v)->units = v->v->units; } static void variable_filtered_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_variable_filtered_class ())->parent_class->write) (o, fp); fprintf (fp, " %s %d", GFS_VARIABLE_FILTERED (o)->v->name, GFS_VARIABLE_FILTERED (o)->niter); } static void variable_filtered_event_half (GfsEvent * event, GfsSimulation * sim) { guint n = GFS_VARIABLE_FILTERED (event)->niter; GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * v = GFS_VARIABLE (event); gfs_domain_filter (domain, GFS_VARIABLE_FILTERED (event)->v, v); while (--n) gfs_domain_filter (domain, v, NULL); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) v->fine_coarse, v); gfs_domain_bc (domain, FTT_TRAVERSE_NON_LEAFS, -1, v); } static gboolean variable_filtered_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_variable_filtered_class ())->parent_class)->event) (event, sim)) { variable_filtered_event_half (event, sim); return TRUE; } return FALSE; } static void variable_filtered_class_init (GtsObjectClass * klass) { klass->read = variable_filtered_read; klass->write = variable_filtered_write; GFS_EVENT_CLASS (klass)->event = variable_filtered_event; GFS_EVENT_CLASS (klass)->event_half = variable_filtered_event_half; } static void variable_filtered_init (GfsEvent * v) { /* the variable/event may need to be initialised at the start */ v->start = -1; } GfsVariableClass * gfs_variable_filtered_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_filtered_info = { "GfsVariableFiltered", sizeof (GfsVariableFiltered), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_filtered_class_init, (GtsObjectInitFunc) variable_filtered_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &gfs_variable_filtered_info); } return klass; } /** \endobject{GfsVariableFiltered} */ /** * \beginobject{GfsVariableDiagonal} */ static void unity (FttCell * cell, GfsVariable * v) { GFS_VALUE (cell, v) = 1.; } static void variable_diagonal (FttCell * cell, gpointer * data) { GfsVariable * v = data[0]; GfsVariable * tmp = data[1]; GfsGradient g; FttCellNeighbors neighbor; FttCellFace f; GfsGradient ng; GFS_VALUE (cell, tmp) = G_MAXDOUBLE; g.a = g.b = 0.; f.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) { f.neighbor = neighbor.c[f.d]; if (f.neighbor) { gfs_face_weighted_gradient (&f, &ng, tmp->i, -1); g.a += ng.a; g.b += ng.b; } } if (g.a != 0.) GFS_VALUE (cell, v) = g.b/g.a; else GFS_VALUE (cell, v) = G_MAXDOUBLE; GFS_VALUE (cell, tmp) = 1.; } static gboolean variable_diagonal_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_variable_diagonal_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * tmp = gfs_temporary_variable (domain); gpointer data[2]; data[0] = event; data[1] = tmp; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) unity, tmp); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, tmp); gfs_poisson_coefficients (domain, sim->physical_params.alpha, TRUE, TRUE, TRUE); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) variable_diagonal, data); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, GFS_VARIABLE (event)); gts_object_destroy (GTS_OBJECT (tmp)); return TRUE; } return FALSE; } static void variable_diagonal_class_init (GtsObjectClass * klass) { GFS_EVENT_CLASS (klass)->event = variable_diagonal_event; } GfsVariableClass * gfs_variable_diagonal_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_diagonal_info = { "GfsVariableDiagonal", sizeof (GfsVariable), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_diagonal_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &gfs_variable_diagonal_info); } return klass; } /** \endobject{GfsVariableDiagonal} */ /** * Optimising function evaluations . * \beginobject{GfsVariableFunction} */ static void variable_function_destroy (GtsObject * o) { gts_object_destroy (GTS_OBJECT (GFS_VARIABLE_FUNCTION (o)->f)); (* GTS_OBJECT_CLASS (gfs_variable_function_class ())->parent_class->destroy) (o); } static void variable_function_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_variable_function_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsVariableFunction * v = GFS_VARIABLE_FUNCTION (*o); gfs_function_read (v->f, GFS_DOMAIN (gfs_object_simulation (*o)), fp); if (fp->type == GTS_ERROR) return; gfs_function_set_units (v->f, GFS_VARIABLE (*o)->units); } static void variable_function_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_variable_function_class ())->parent_class->write) (o, fp); gfs_function_write (GFS_VARIABLE_FUNCTION (o)->f, fp); } static void variable_function_class_init (GtsObjectClass * klass) { klass->destroy = variable_function_destroy; klass->read = variable_function_read; klass->write = variable_function_write; } static void variable_function_coarse_fine (FttCell * parent, GfsVariable * v) { GfsFunction * f = GFS_VARIABLE_FUNCTION (v)->f; FttCellChildren child; guint n; ftt_cell_children (parent, &child); for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) GFS_VALUE (child.c[n], v) = gfs_function_value (f, child.c[n]); } static void variable_function_init (GfsVariableFunction * v) { GFS_VARIABLE (v)->coarse_fine = variable_function_coarse_fine; v->f = gfs_function_new (gfs_function_class (), 0.); } GfsVariableClass * gfs_variable_function_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_function_info = { "GfsVariableFunction", sizeof (GfsVariableFunction), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_function_class_init, (GtsObjectInitFunc) variable_function_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &gfs_variable_function_info); } return klass; } /** \endobject{GfsVariableFunction} */ #if FTT_2D /** * Maintaining a velocity field defined by a stream function. * \beginobject{GfsVariableStreamFunction} */ static gdouble face_metric (FttCell * cell, FttDirection d, GfsDomain * domain) { if (domain->face_metric) { FttCellFace f; f.cell = cell; f.d = d; return (* domain->face_metric) (domain, &f); } else return 1.; } static gdouble face_metric_inverse (FttCell * cell, FttDirection d, GfsDomain * domain) { gdouble fm = face_metric (cell, d, domain); /* for degenerate metric e.g. lon-lat */ return fm > 1e-6 ? 1./fm : 0.; } static void init_mac_from_stream_function (FttCell * cell, gdouble psi0, gdouble psi1, gdouble psi2, gdouble psi3, gdouble h, GfsDomain * domain, GfsVariable ** u) { GFS_STATE (cell)->f[0].un = (psi2 - psi1)*face_metric_inverse (cell, 0, domain)/h; GFS_STATE (cell)->f[1].un = (psi3 - psi0)*face_metric_inverse (cell, 1, domain)/h; GFS_STATE (cell)->f[2].un = (psi3 - psi2)*face_metric_inverse (cell, 2, domain)/h; GFS_STATE (cell)->f[3].un = (psi0 - psi1)*face_metric_inverse (cell, 3, domain)/h; GFS_VALUE (cell, u[0]) = (GFS_STATE (cell)->f[0].un + GFS_STATE (cell)->f[1].un)/2.; GFS_VALUE (cell, u[1]) = (GFS_STATE (cell)->f[2].un + GFS_STATE (cell)->f[3].un)/2.; } static void variable_stream_function_coarse_fine (FttCell * parent, GfsVariable * v) { if (GFS_CELL_IS_BOUNDARY (parent)) return; GfsFunction * f = GFS_VARIABLE_FUNCTION (v)->f; FttCellChildren child; ftt_cell_children (parent, &child); FttVector o, p; ftt_cell_pos (parent, &o); gdouble h = ftt_cell_size (parent)/2.; p.x = o.x - h; p.y = o.y - h; gdouble psi0 = gfs_function_spatial_value (f, &p); p.x = o.x + h; p.y = o.y - h; gdouble psi1 = gfs_function_spatial_value (f, &p); p.x = o.x + h; p.y = o.y + h; gdouble psi2 = gfs_function_spatial_value (f, &p); p.x = o.x - h; p.y = o.y + h; gdouble psi3 = gfs_function_spatial_value (f, &p); p.x = o.x; p.y = o.y - h; gdouble psi4 = gfs_function_spatial_value (f, &p); p.x = o.x + h; p.y = o.y; gdouble psi5 = gfs_function_spatial_value (f, &p); p.x = o.x; p.y = o.y + h; gdouble psi6 = gfs_function_spatial_value (f, &p); p.x = o.x - h; p.y = o.y; gdouble psi7 = gfs_function_spatial_value (f, &p); gdouble psi8 = gfs_function_spatial_value (f, &o); GfsVariable ** u = gfs_domain_velocity (v->domain); init_mac_from_stream_function (child.c[0], psi7, psi8, psi6, psi3, h, v->domain, u); init_mac_from_stream_function (child.c[1], psi8, psi5, psi2, psi6, h, v->domain, u); init_mac_from_stream_function (child.c[2], psi0, psi4, psi8, psi7, h, v->domain, u); init_mac_from_stream_function (child.c[3], psi4, psi1, psi5, psi8, h, v->domain, u); guint n; for (n = 0; n < FTT_CELLS; n++) { ftt_cell_pos (child.c[n], &o); GFS_VALUE (child.c[n], v) = gfs_function_spatial_value (f, &o); } } static void variable_stream_function_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_variable_function_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsVariableFunction * v = GFS_VARIABLE_FUNCTION (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (fp->type == GTS_STRING && gfs_variable_from_name (domain->variables, fp->token->str)) { /* variable */ gfs_function_read (v->f, domain, fp); g_assert (gfs_function_get_variable (v->f)); if (fp->type == GTS_ERROR) return; /* fixme: what about the equivalent coarse_fine() method? */ } else { /* spatial function */ gts_object_destroy (GTS_OBJECT (v->f)); v->f = gfs_function_new (gfs_function_spatial_class (), 0.); gfs_function_read (v->f, domain, fp); if (fp->type == GTS_ERROR) return; gfs_function_set_units (v->f, GFS_VARIABLE (*o)->units); GFS_VARIABLE (v)->coarse_fine = variable_stream_function_coarse_fine; } } static void variable_stream_function_fine_coarse (FttCell * cell, GfsVariable * v) { FttCellChildren child; ftt_cell_children (cell, &child); GFS_STATE (cell)->f[0].un = face_metric_inverse (cell, 0, v->domain)/2.* (face_metric (child.c[1], 0, v->domain)*GFS_STATE (child.c[1])->f[0].un + face_metric (child.c[3], 0, v->domain)*GFS_STATE (child.c[3])->f[0].un); GFS_STATE (cell)->f[1].un = face_metric_inverse (cell, 1, v->domain)/2.* (face_metric (child.c[0], 1, v->domain)*GFS_STATE (child.c[0])->f[1].un + face_metric (child.c[2], 1, v->domain)*GFS_STATE (child.c[2])->f[1].un); GFS_STATE (cell)->f[2].un = face_metric_inverse (cell, 2, v->domain)/2.* (face_metric (child.c[0], 2, v->domain)*GFS_STATE (child.c[0])->f[2].un + face_metric (child.c[1], 2, v->domain)*GFS_STATE (child.c[1])->f[2].un); GFS_STATE (cell)->f[3].un = face_metric_inverse (cell, 3, v->domain)/2.* (face_metric (child.c[3], 3, v->domain)*GFS_STATE (child.c[3])->f[3].un + face_metric (child.c[2], 3, v->domain)*GFS_STATE (child.c[2])->f[3].un); GFS_VALUE (cell, v) = (GFS_VALUE (child.c[0], v) + GFS_VALUE (child.c[1], v) + GFS_VALUE (child.c[2], v) + GFS_VALUE (child.c[3], v))/4.; } static void init_streamfunction (FttCell * cell, GfsVariable * v) { GfsFunction * f = GFS_VARIABLE_FUNCTION (v)->f; FttVector o, p; ftt_cell_pos (cell, &o); gdouble h = ftt_cell_size (cell)/2.; p.x = o.x - h; p.y = o.y - h; gdouble psi0 = gfs_function_spatial_value (f, &p); p.x = o.x + h; p.y = o.y - h; gdouble psi1 = gfs_function_spatial_value (f, &p); p.x = o.x + h; p.y = o.y + h; gdouble psi2 = gfs_function_spatial_value (f, &p); p.x = o.x - h; p.y = o.y + h; gdouble psi3 = gfs_function_spatial_value (f, &p); init_mac_from_stream_function (cell, psi0, psi1, psi2, psi3, 2.*h, v->domain, gfs_domain_velocity (v->domain)); } static void init_streamfunction_from_variable (FttCell * cell, GfsVariable * v) { FttDirection d[FTT_DIMENSION]; d[0] = FTT_LEFT; d[1] = FTT_BOTTOM; gdouble psi0 = gfs_cell_corner_value (cell, d, v, -1); d[0] = FTT_RIGHT; d[1] = FTT_BOTTOM; gdouble psi1 = gfs_cell_corner_value (cell, d, v, -1); d[0] = FTT_RIGHT; d[1] = FTT_TOP; gdouble psi2 = gfs_cell_corner_value (cell, d, v, -1); d[0] = FTT_LEFT; d[1] = FTT_TOP; gdouble psi3 = gfs_cell_corner_value (cell, d, v, -1); init_mac_from_stream_function (cell, psi0, psi1, psi2, psi3, ftt_cell_size (cell), v->domain, gfs_domain_velocity (v->domain)); } static gboolean variable_stream_function_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_variable_function_class ())->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * v = gfs_function_get_variable (GFS_VARIABLE_FUNCTION (event)->f); if (v) gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) init_streamfunction_from_variable, v); else gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) init_streamfunction, event); GfsVariable ** u = gfs_domain_velocity (domain); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, u[c]); return TRUE; } return FALSE; } static void variable_stream_function_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->read = variable_stream_function_read; klass->event = variable_stream_function_event; } static void variable_stream_function_init (GfsVariable * v) { v->units = 2.; v->fine_coarse = variable_stream_function_fine_coarse; GFS_EVENT (v)->istep = G_MAXINT/2; } GfsVariableClass * gfs_variable_stream_function_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_stream_function_info = { "GfsVariableStreamFunction", sizeof (GfsVariableFunction), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_stream_function_class_init, (GtsObjectInitFunc) variable_stream_function_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_function_class ()), &gfs_variable_stream_function_info); } return klass; } /** \endobject{GfsVariableStreamFunction} */ #endif /* FTT_2D */ /** * A variable, solution of a Poisson equation. * \beginobject{GfsVariablePoisson} */ static void variable_poisson_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_variable_poisson_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type == '{') gfs_multilevel_params_read (&GFS_VARIABLE_POISSON (*o)->par, fp); } static void variable_poisson_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_variable_poisson_class ())->parent_class->write) (o, fp); fputc (' ', fp); gfs_multilevel_params_write (&GFS_VARIABLE_POISSON (o)->par, fp); } static void has_dirichlet (FttCell * cell, GfsVariable * p) { if (((cell)->flags & GFS_FLAG_DIRICHLET) != 0) p->centered = FALSE; } typedef struct { GfsFunction * f; GfsVariable * div; } DivData; static void rescale_div (FttCell * cell, DivData * p) { gdouble size = ftt_cell_size (cell); gdouble a = size*size*gfs_domain_cell_fraction (p->div->domain, cell); GFS_VALUE (cell, p->div) = gfs_function_value (p->f, cell)*a; } static gboolean variable_poisson_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_variable_class ())->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * dia = gfs_temporary_variable (domain); GfsVariable * div = gfs_temporary_variable (domain); GfsVariable * res = gfs_temporary_variable (domain); GfsVariable * v = GFS_VARIABLE (event); GfsVariablePoisson * pv = GFS_VARIABLE_POISSON (v); gfs_domain_surface_bc (domain, v); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) has_dirichlet, v); DivData p = { GFS_VARIABLE_FUNCTION (event)->f, div }; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) rescale_div, &p); gfs_poisson_coefficients (domain, NULL, FALSE, TRUE, TRUE); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_reset, dia); pv->par.poisson_solve (domain, &pv->par, v, div, res, dia, 1.); if (pv->par.residual.infty > pv->par.tolerance) { g_warning ("VariablePoisson %s: max residual %g > %g", v->name, pv->par.residual.infty, pv->par.tolerance); gfs_multilevel_params_stats_write (&pv->par, stderr); } gts_object_destroy (GTS_OBJECT (dia)); gts_object_destroy (GTS_OBJECT (div)); gts_object_destroy (GTS_OBJECT (res)); return TRUE; } return FALSE; } static void variable_poisson_class_init (GtsObjectClass * klass) { klass->read = variable_poisson_read; klass->write = variable_poisson_write; GFS_EVENT_CLASS (klass)->event = variable_poisson_event; } static void variable_poisson_init (GfsVariable * v) { v->centered = TRUE; v->coarse_fine = (GfsVariableFineCoarseFunc) gfs_cell_coarse_fine; gfs_multilevel_params_init (&GFS_VARIABLE_POISSON (v)->par); } GfsVariableClass * gfs_variable_poisson_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_poisson_info = { "GfsVariablePoisson", sizeof (GfsVariablePoisson), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_poisson_class_init, (GtsObjectInitFunc) variable_poisson_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_function_class ()), &gfs_variable_poisson_info); } return klass; } /** \endobject{GfsVariablePoisson} */ /** * The Laplacian of a function. * \beginobject{GfsVariableLaplacian} */ typedef struct { GfsVariable * lap; GfsFunction * f; GfsVariable * u; } LapData; static void evaluate_function (FttCell * cell, LapData * p) { GFS_VALUE (cell, p->u) = gfs_function_value (p->f, cell); } static void laplacian (FttCell * cell, LapData * p) { GfsGradient g; FttCellNeighbors neighbor; FttCellFace f; GfsGradient ng; g.a = g.b = 0.; f.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) { f.neighbor = neighbor.c[f.d]; if (f.neighbor) { gfs_face_weighted_gradient (&f, &ng, p->u->i, -1); g.a += ng.a; g.b += ng.b; } } gdouble h = ftt_cell_size (cell); GFS_VALUE (cell, p->lap) = (g.b - g.a*GFS_VALUE (cell, p->u))/ (h*h*gfs_domain_cell_fraction (p->lap->domain, cell)); } static gboolean variable_laplacian_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_variable_class ())->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); LapData p = { GFS_VARIABLE (event), GFS_VARIABLE_FUNCTION (event)->f }; p.u = gfs_function_get_variable (p.f); if (p.u == NULL) { p.u = gfs_temporary_variable (domain); gfs_function_set_units (p.f, 0.); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) evaluate_function, &p); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, p.u); } gfs_poisson_coefficients (domain, NULL, TRUE, TRUE, TRUE); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) laplacian, &p); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, p.lap); if (!gfs_function_get_variable (p.f)) gts_object_destroy (GTS_OBJECT (p.u)); return TRUE; } return FALSE; } static void variable_laplacian_class_init (GtsObjectClass * klass) { GFS_EVENT_CLASS (klass)->event = variable_laplacian_event; } static void variable_laplacian_init (GfsVariable * v) { v->units = -2.; v->centered = TRUE; v->coarse_fine = (GfsVariableFineCoarseFunc) gfs_cell_coarse_fine; } GfsVariableClass * gfs_variable_laplacian_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsVariableLaplacian", sizeof (GfsVariableFunction), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_laplacian_class_init, (GtsObjectInitFunc) variable_laplacian_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_function_class ()), &info); } return klass; } /** \endobject{GfsVariableLaplacian} */ /** * How old is this cell?. * \beginobject{GfsVariableAge} */ static void increment_age (FttCell * cell, GfsVariable * v) { GFS_VALUE (cell, v) += 1.; } static gboolean variable_age_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_variable_age_class ())->parent_class)->event) (event, sim)) { gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) increment_age, event); return TRUE; } return FALSE; } static void variable_age_class_init (GtsObjectClass * klass) { GFS_EVENT_CLASS (klass)->event = variable_age_event; } static void none (FttCell * parent, GfsVariable * v) { } static void variable_age_init (GfsVariable * v) { v->fine_coarse = none; v->coarse_fine = none; } GfsVariableClass * gfs_variable_age_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_age_info = { "GfsVariableAge", sizeof (GfsVariable), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_age_class_init, (GtsObjectInitFunc) variable_age_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &gfs_variable_age_info); } return klass; } /** \endobject{GfsVariableAge} */ /** * Averaging along a coordinate direction. * \beginobject{GfsVariableAverage} */ static void variable_average_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_variable_average_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (component)"); return; } gchar s[][2] = {"x", "y", "z"}; GfsVariableAverage * v = GFS_VARIABLE_AVERAGE (*o); for (v->c = 0; v->c < FTT_DIMENSION; v->c++) if (!strcmp (fp->token->str, s[v->c])) break; if (v->c == FTT_DIMENSION) { gts_file_error (fp, "unknown component '%s'", fp->token->str); return; } gts_file_next_token (fp); } static void variable_average_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_variable_average_class ())->parent_class->write) (o, fp); gchar s[][2] = {"x", "y", "z"}; fprintf (fp, " %s", s[GFS_VARIABLE_AVERAGE (o)->c]); } /* see also hydrostatic_pressure() */ static void average (FttCell * cell, GfsVariable * v) { FttDirection d = 2*GFS_VARIABLE_AVERAGE (v)->c + 1; gdouble avg = 0., vol = 0.; GtsFifo * fifo = gts_fifo_new (), * column = gts_fifo_new (); gts_fifo_push (fifo, cell); while ((cell = gts_fifo_pop (fifo))) { double w = gfs_cell_volume (cell, v->domain); vol += w; avg += w*gfs_function_value (GFS_VARIABLE_FUNCTION (v)->f, cell); gts_fifo_push (column, cell); FttCell * neighbor = ftt_cell_neighbor (cell, d); if (neighbor) { if (FTT_CELL_IS_LEAF (neighbor)) { if (ftt_cell_level (neighbor) == ftt_cell_level (cell)) /* neighbor at same level */ gts_fifo_push (fifo, neighbor); else { /* coarser neighbour */ #if 1 g_assert_not_implemented (); #else if (gts_fifo_top (fifo) == NULL) { /* only consider the last fine cell */ FttDirection od = FTT_OPPOSITE_DIRECTION (d); double dp = GFS_STATE (neighbor)->f[od].un*ftt_cell_size (neighbor)/ GFS_STATE (neighbor)->f[od].v; double p = 0.; FttCellChildren child; int i, n = ftt_cell_children_direction (ftt_cell_parent (cell), d, &child); for (i = 0; i < n; i++) p += GFS_VALUE (child.c[i], v); GFS_VALUE (neighbor, v) = p/n - 3.*dp/4.; gts_fifo_push (fifo, neighbor); } #endif } } else { /* finer neighbor */ #if 1 g_assert_not_implemented (); #else FttCellChildren child; int i, n = ftt_cell_children_direction (neighbor, FTT_OPPOSITE_DIRECTION (d), &child); double dp = GFS_STATE (cell)->f[d].un*ftt_cell_size (cell)/GFS_STATE (cell)->f[d].v; double p = GFS_VALUE (cell, v) - 3.*dp/4.; for (i = 0; i < n; i++) { GFS_VALUE (child.c[i], v) = p; gts_fifo_push (fifo, child.c[i]); } #endif } } } gts_fifo_destroy (fifo); if (vol > 0.) avg /= vol; while ((cell = gts_fifo_pop (column))) GFS_VALUE (cell, v) = avg; gts_fifo_destroy (column); } static gboolean variable_average_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_variable_function_class ())->parent_class)->event) (event, sim)) { GfsVariable * v = GFS_VARIABLE (event); GfsVariableAverage * av = GFS_VARIABLE_AVERAGE (v); gfs_domain_cell_traverse_boundary (v->domain, 2*av->c, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) average, av); gfs_domain_bc (v->domain, FTT_TRAVERSE_LEAFS, -1, v); return TRUE; } return FALSE; } static void variable_average_class_init (GtsObjectClass * klass) { klass->read = variable_average_read; klass->write = variable_average_write; GFS_EVENT_CLASS (klass)->event = variable_average_event; } static void variable_average_init (GfsVariable * v) { v->coarse_fine = (GfsVariableFineCoarseFunc) gfs_cell_coarse_fine; } GfsVariableClass * gfs_variable_average_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsVariableAverage", sizeof (GfsVariableAverage), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_average_class_init, (GtsObjectInitFunc) variable_average_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_function_class ()), &info); } return klass; } /** \endobject{GfsVariableAverage} */ /** * The hydrostatic pressure * \beginobject{GfsHydrostaticPressure} */ static FttComponent hydrostatic_component (GfsDomain * domain) { GfsVariable ** u = gfs_domain_velocity (domain); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) if (u[c]->sources) { GSList * i = GTS_SLIST_CONTAINER (u[c]->sources)->items; while (i) { GfsSourceGeneric * s = i->data; if (s->face_value) return c; i = i->next; } } return FTT_DIMENSION; } static void hydrostatic_pressure_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_hydrostatic_pressure_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsHydrostaticPressure * ph = GFS_HYDROSTATIC_PRESSURE (*o); ph->c = hydrostatic_component (GFS_VARIABLE (*o)->domain); if (ph->c == FTT_DIMENSION) { gts_file_error (fp, "could not find any velocity sources"); return; } GFS_VARIABLE (*o)->units = 2.; } static gboolean hydrostatic_pressure_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_variable_class ())->event) (event, sim)) { gfs_hydrostatic_pressure_update (GFS_HYDROSTATIC_PRESSURE (event), sim->physical_params.alpha); return TRUE; } return FALSE; } static void hydrostatic_pressure_class_init (GtsObjectClass * klass) { klass->read = hydrostatic_pressure_read; GFS_EVENT_CLASS (klass)->event = hydrostatic_pressure_event; } static void hydrostatic_pressure_init (GfsVariable * v) { GFS_EVENT (v)->start = -1; v->coarse_fine = (GfsVariableFineCoarseFunc) gfs_cell_coarse_fine; } GfsVariableClass * gfs_hydrostatic_pressure_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsHydrostaticPressure", sizeof (GfsHydrostaticPressure), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) hydrostatic_pressure_class_init, (GtsObjectInitFunc) hydrostatic_pressure_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &info); } return klass; } static void hydrostatic_pressure (FttCell * cell, GfsVariable * v) { FttDirection d = 2*GFS_HYDROSTATIC_PRESSURE (v)->c + 1; GtsFifo * fifo = gts_fifo_new (); GFS_VALUE (cell, v) = 0.; gts_fifo_push (fifo, cell); while ((cell = gts_fifo_pop (fifo))) { FttCell * neighbor = ftt_cell_neighbor (cell, d); if (neighbor) { if (FTT_CELL_IS_LEAF (neighbor)) { if (ftt_cell_level (neighbor) == ftt_cell_level (cell)) { /* neighbor at same level */ double dp = GFS_STATE (cell)->f[d].un*ftt_cell_size (cell)/GFS_STATE (cell)->f[d].v; GFS_VALUE (neighbor, v) = GFS_VALUE (cell, v) - dp; gts_fifo_push (fifo, neighbor); } else { /* coarser neighbour */ if (gts_fifo_top (fifo) == NULL) { /* only consider the last fine cell */ FttDirection od = FTT_OPPOSITE_DIRECTION (d); double dp = GFS_STATE (neighbor)->f[od].un*ftt_cell_size (neighbor)/ GFS_STATE (neighbor)->f[od].v; double p = 0.; FttCellChildren child; int i, n = ftt_cell_children_direction (ftt_cell_parent (cell), d, &child); for (i = 0; i < n; i++) p += GFS_VALUE (child.c[i], v); GFS_VALUE (neighbor, v) = p/n - 3.*dp/4.; gts_fifo_push (fifo, neighbor); } } } else { /* finer neighbor */ FttCellChildren child; int i, n = ftt_cell_children_direction (neighbor, FTT_OPPOSITE_DIRECTION (d), &child); double dp = GFS_STATE (cell)->f[d].un*ftt_cell_size (cell)/GFS_STATE (cell)->f[d].v; double p = GFS_VALUE (cell, v) - 3.*dp/4.; for (i = 0; i < n; i++) { GFS_VALUE (child.c[i], v) = p; gts_fifo_push (fifo, child.c[i]); } } } } gts_fifo_destroy (fifo); } /** * gfs_hydrostatic_pressure_update: * @p: a #GfsHydrostaticPressure. * @alpha: the reciprocal of density or %NULL. * * Updates the hydrostatic pressure field @p. Note that face * velocities are also reset. */ void gfs_hydrostatic_pressure_update (GfsHydrostaticPressure * p, GfsFunction * alpha) { g_return_if_fail (p != NULL); GfsVariable * v = GFS_VARIABLE (p); gfs_domain_face_traverse (v->domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL); gfs_velocity_face_sources (v->domain, gfs_domain_velocity (v->domain), 1., NULL, NULL); gfs_poisson_coefficients (v->domain, alpha, TRUE, TRUE, TRUE); gfs_domain_cell_traverse_boundary (v->domain, 2*p->c, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) hydrostatic_pressure, p); gfs_domain_bc (v->domain, FTT_TRAVERSE_LEAFS, -1, v); } /** \endobject{GfsHydrostaticPressure} */ /** * Spatially-constant but time-dependent variables. * \beginobject{GfsConstant} */ static void gfs_constant_destroy (GtsObject * object) { if (GFS_CONSTANT (object)->derived) gfs_domain_remove_derived_variable (GFS_DOMAIN (gfs_object_simulation (object)), GFS_CONSTANT (object)->derived->name); (* GTS_OBJECT_CLASS (gfs_constant_class ())->parent_class->destroy) (object); } static gdouble constant_func (FttCell * cell, FttCellFace * face, GfsDomain * domain, GfsConstant * c) { return c->val; } static void gfs_constant_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_constant_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (name)"); return; } GfsDerivedVariableInfo v = { fp->token->str, "Constant", constant_func, *o }; GFS_CONSTANT (*o)->derived = gfs_domain_add_derived_variable (GFS_DOMAIN (gfs_object_simulation (*o)), v); if (!GFS_CONSTANT (*o)->derived) { gts_file_error (fp, "'%s' keyword already used", fp->token->str); return; } gts_file_next_token (fp); } static void gfs_constant_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_constant_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", GFS_CONSTANT (o)->derived->name); } static void gfs_constant_class_init (GtsObjectClass * klass) { klass->destroy = gfs_constant_destroy; klass->read = gfs_constant_read; klass->write = gfs_constant_write; } static void gfs_constant_init (GfsEvent * event) { event->start = -1; event->istep = 1; } GfsEventClass * gfs_constant_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_constant_info = { "GfsConstant", sizeof (GfsConstant), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_constant_class_init, (GtsObjectInitFunc) gfs_constant_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_constant_info); } return klass; } /** \endobject{GfsConstant} */ /** * Compute the spatial sum of a GfsFunction. * \beginobject{GfsSpatialSum} */ static void gfs_spatial_sum_destroy (GtsObject * o) { gts_object_destroy (GTS_OBJECT (GFS_SPATIAL_SUM (o)->v)); (* GTS_OBJECT_CLASS (gfs_spatial_sum_class ())->parent_class->destroy) (o); } static void gfs_spatial_sum_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_spatial_sum_class ())->parent_class->write) (o, fp); gfs_function_write (GFS_SPATIAL_SUM (o)->v, fp); } static void gfs_spatial_sum_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_spatial_sum_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; gfs_function_read (GFS_SPATIAL_SUM (*o)->v, GFS_DOMAIN (gfs_object_simulation (*o)), fp); } static void add (FttCell * cell, GfsSpatialSum * s) { GFS_CONSTANT (s)->val += gfs_cell_volume (cell, GFS_DOMAIN (gfs_object_simulation (s)))* gfs_function_value (s->v, cell); } static gboolean gfs_spatial_sum_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_spatial_sum_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GFS_CONSTANT (event)->val = 0.; gfs_catch_floating_point_exceptions (); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) add, event); gfs_restore_fpe_for_function (GFS_SPATIAL_SUM (event)->v); gfs_all_reduce (domain, GFS_CONSTANT (event)->val, MPI_DOUBLE, MPI_SUM); GFS_CONSTANT (event)->val *= pow (sim->physical_params.L, FTT_DIMENSION); return TRUE; } return FALSE; } static void gfs_spatial_sum_class_init (GtsObjectClass * klass) { klass->read = gfs_spatial_sum_read; klass->write = gfs_spatial_sum_write; klass->destroy = gfs_spatial_sum_destroy; GFS_EVENT_CLASS (klass)->event = gfs_spatial_sum_event; } static void gfs_spatial_sum_init (GfsSpatialSum * object) { object->v = gfs_function_new (gfs_function_class (), 0.); } GfsEventClass * gfs_spatial_sum_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_spatial_sum_info = { "GfsSpatialSum", sizeof (GfsSpatialSum), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_spatial_sum_class_init, (GtsObjectInitFunc) gfs_spatial_sum_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_constant_class ()), &gfs_spatial_sum_info); } return klass; } /** \endobject{GfsSpatialSum} */ /** * Derived variables. * \beginobject{GfsDerivedVariable} */ static void gfs_derived_variable_destroy (GtsObject * object) { g_free (GFS_DERIVED_VARIABLE (object)->name); g_free (GFS_DERIVED_VARIABLE (object)->description); (* GTS_OBJECT_CLASS (gfs_derived_variable_class ())->parent_class->destroy) (object); } static void gfs_derived_variable_class_init (GtsObjectClass * klass) { klass->destroy = gfs_derived_variable_destroy; } GtsObjectClass * gfs_derived_variable_class (void) { static GtsObjectClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_derived_variable_info = { "GfsDerivedVariable", sizeof (GfsDerivedVariable), sizeof (GtsObjectClass), (GtsObjectClassInitFunc) gfs_derived_variable_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_object_class ()), &gfs_derived_variable_info); } return klass; } /** * gfs_derived_variable_from_name: * @i: a list of #GfsDerivedVariable. * @name: a name. * * Returns: the #GfsDerivedVariable @name of @list or %NULL. */ GfsDerivedVariable * gfs_derived_variable_from_name (GSList * i, const gchar * name) { g_return_val_if_fail (name != NULL, NULL); while (i) { GfsDerivedVariable * v = i->data; if (!strcmp (v->name, name)) return v; i = i->next; } return NULL; } /** \endobject{GfsDerivedVariable} */ gerris-snapshot-131206/src/source.h0000644000175100017510000002354612250371171014134 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __SOURCE_H__ #define __SOURCE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "event.h" gdouble gfs_variable_mac_source (GfsVariable * v, FttCell * cell); void gfs_domain_variable_centered_sources (GfsDomain * domain, GfsVariable * v, GfsVariable * sv, gdouble dt); GfsVariable * gfs_domain_variable_fluxes (GfsDomain * domain, GfsVariable * v, gdouble dt); /* GfsSourceGeneric: Header */ typedef struct _GfsSourceGeneric GfsSourceGeneric; struct _GfsSourceGeneric { /*< private >*/ GfsEvent parent; /*< public >*/ GfsVariable * v; gdouble (* mac_value) (GfsSourceGeneric *, FttCell *, GfsVariable *); gdouble (* centered_value) (GfsSourceGeneric *, FttCell *, GfsVariable *); gdouble (* face_value) (GfsSourceGeneric *, FttCellFace *, GfsVariable *); void (* flux) (GfsSourceGeneric *, GfsDomain *, GfsVariable *, GfsVariable *, gdouble); }; typedef struct _GfsSourceGenericClass GfsSourceGenericClass; struct _GfsSourceGenericClass { /*< private >*/ GfsEventClass parent_class; /*< public >*/ gdouble (* stability) (GfsSourceGeneric *, GfsSimulation *); }; #define GFS_SOURCE_GENERIC(obj) GTS_OBJECT_CAST (obj,\ GfsSourceGeneric,\ gfs_source_generic_class ()) #define GFS_SOURCE_GENERIC_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsSourceGenericClass,\ gfs_source_generic_class()) #define GFS_IS_SOURCE_GENERIC(obj) (gts_object_is_from_class (obj,\ gfs_source_generic_class ())) GfsSourceGenericClass * gfs_source_generic_class (void); GfsSourceGeneric * gfs_source_find (GfsVariable * v, GfsSourceGenericClass * klass); /* GfsSourceScalar: Header */ typedef struct _GfsSourceScalar GfsSourceScalar; struct _GfsSourceScalar { /*< private >*/ GfsSourceGeneric parent; /*< public >*/ GfsVariable * v; GfsVariable * vector[FTT_DIMENSION]; }; #define GFS_SOURCE_SCALAR(obj) GTS_OBJECT_CAST (obj,\ GfsSourceScalar,\ gfs_source_scalar_class ()) #define GFS_IS_SOURCE_SCALAR(obj) (gts_object_is_from_class (obj,\ gfs_source_scalar_class ())) GfsSourceGenericClass * gfs_source_scalar_class (void); /* GfsSourceVelocity: Header */ typedef struct _GfsSourceVelocity GfsSourceVelocity; struct _GfsSourceVelocity { /*< private >*/ GfsSourceGeneric parent; /*< public >*/ GfsVariable ** v; }; #define GFS_SOURCE_VELOCITY(obj) GTS_OBJECT_CAST (obj,\ GfsSourceVelocity,\ gfs_source_velocity_class ()) #define GFS_IS_SOURCE_VELOCITY(obj) (gts_object_is_from_class (obj,\ gfs_source_velocity_class ())) GfsSourceGenericClass * gfs_source_velocity_class (void); /* GfsSource: Header */ typedef struct _GfsSource GfsSource; struct _GfsSource { /*< private >*/ GfsSourceScalar parent; /*< public >*/ GfsFunction * intensity; GfsFunction * intensity_v[FTT_DIMENSION]; }; #define GFS_SOURCE(obj) GTS_OBJECT_CAST (obj,\ GfsSource,\ gfs_source_class ()) #define GFS_IS_SOURCE(obj) (gts_object_is_from_class (obj,\ gfs_source_class ())) GfsSourceGenericClass * gfs_source_class (void); /* GfsSourceControl: Header */ typedef struct _GfsSourceControl GfsSourceControl; struct _GfsSourceControl { /*< private >*/ GfsSourceScalar parent; gdouble s; /*< public >*/ GfsFunction * intensity; }; #define GFS_SOURCE_CONTROL(obj) GTS_OBJECT_CAST (obj,\ GfsSourceControl,\ gfs_source_control_class ()) #define GFS_IS_SOURCE_CONTROL(obj) (gts_object_is_from_class (obj,\ gfs_source_control_class ())) GfsSourceGenericClass * gfs_source_control_class (void); /* GfsSourceControlField: Header */ typedef struct _GfsSourceControlField GfsSourceControlField; struct _GfsSourceControlField { /*< private >*/ GfsSourceControl parent; GfsVariable * s; /*< public >*/ gdouble tau; gint level; }; #define GFS_SOURCE_CONTROL_FIELD(obj) GTS_OBJECT_CAST (obj,\ GfsSourceControlField,\ gfs_source_control_field_class ()) #define GFS_IS_SOURCE_CONTROL_FIELD(obj) (gts_object_is_from_class (obj,\ gfs_source_control_field_class ())) GfsSourceGenericClass * gfs_source_control_field_class (void); /* GfsSourceFlux: Header */ typedef struct _GfsSourceFlux GfsSourceFlux; struct _GfsSourceFlux { /*< private >*/ GfsSourceScalar parent; gdouble s; /*< public >*/ GfsFunction * intensity, * fraction; }; #define GFS_SOURCE_FLUX(obj) GTS_OBJECT_CAST (obj,\ GfsSourceFlux,\ gfs_source_flux_class ()) #define GFS_IS_SOURCE_FLUX(obj) (gts_object_is_from_class (obj,\ gfs_source_flux_class ())) GfsSourceGenericClass * gfs_source_flux_class (void); /* GfsDiffusion: Header */ struct _GfsDiffusion { /*< private >*/ GfsEvent parent; /*< public >*/ GfsFunction * val; GfsVariable * mu; GfsVariable * phase; GfsMultilevelParams par; gdouble (* face) (GfsDiffusion *, FttCellFace *); gdouble (* cell) (GfsDiffusion *, FttCell *); }; typedef struct _GfsDiffusionClass GfsDiffusionClass; struct _GfsDiffusionClass { /*< private >*/ GfsEventClass parent_class; /*< public >*/ }; #define GFS_DIFFUSION(obj) GTS_OBJECT_CAST (obj,\ GfsDiffusion,\ gfs_diffusion_class ()) #define GFS_DIFFUSION_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsDiffusionClass,\ gfs_diffusion_class()) #define GFS_IS_DIFFUSION(obj) (gts_object_is_from_class (obj,\ gfs_diffusion_class ())) GfsDiffusionClass * gfs_diffusion_class (void); gdouble gfs_diffusion_face (GfsDiffusion * d, FttCellFace * f); gdouble gfs_diffusion_cell (GfsDiffusion * d, FttCell * cell); /* GfsSourceDiffusion: Header */ struct _GfsSourceDiffusion { /*< private >*/ GfsSourceScalar parent; /*< public >*/ GfsDiffusion * D; GfsVariable * phi; }; #define GFS_SOURCE_DIFFUSION(obj) GTS_OBJECT_CAST (obj,\ GfsSourceDiffusion,\ gfs_source_diffusion_class ()) #define GFS_IS_SOURCE_DIFFUSION(obj) (gts_object_is_from_class (obj,\ gfs_source_diffusion_class ())) GfsSourceGenericClass * gfs_source_diffusion_class (void); gdouble gfs_source_diffusion_face (GfsSourceDiffusion * d, FttCellFace * f); gdouble gfs_source_diffusion_cell (GfsSourceDiffusion * d, FttCell * cell); /* GfsSourceDiffusionExplicit: Header */ typedef struct _GfsSourceDiffusionExplicit GfsSourceDiffusionExplicit; struct _GfsSourceDiffusionExplicit { /*< private >*/ GfsSourceDiffusion parent; /*< public >*/ }; #define GFS_SOURCE_DIFFUSION_EXPLICIT(obj) GTS_OBJECT_CAST (obj,\ GfsSourceDiffusionExplicit,\ gfs_source_diffusion_explicit_class ()) #define GFS_IS_SOURCE_DIFFUSION_EXPLICIT(obj) (gts_object_is_from_class (obj,\ gfs_source_diffusion_explicit_class ())) GfsSourceGenericClass * gfs_source_diffusion_explicit_class (void); /* GfsSourceViscosity: Header */ typedef struct _GfsSourceViscosity GfsSourceViscosity; struct _GfsSourceViscosity { /*< private >*/ GfsSourceDiffusion parent; /*< public >*/ GfsVariable ** v; }; #define GFS_SOURCE_VISCOSITY(obj) GTS_OBJECT_CAST (obj,\ GfsSourceViscosity,\ gfs_source_viscosity_class ()) #define GFS_IS_SOURCE_VISCOSITY(obj) (gts_object_is_from_class (obj,\ gfs_source_viscosity_class ())) GfsSourceGenericClass * gfs_source_viscosity_class (void); /* GfsSourceViscosityExplicit: Header */ #define GFS_IS_SOURCE_VISCOSITY_EXPLICIT(obj) (gts_object_is_from_class (obj,\ gfs_source_viscosity_explicit_class ())) GfsSourceGenericClass * gfs_source_viscosity_explicit_class (void); /* GfsSourceCoriolis: Header */ typedef struct _GfsSourceCoriolis GfsSourceCoriolis; struct _GfsSourceCoriolis { /*< private >*/ GfsSourceVelocity parent; GfsVariable * u[FTT_DIMENSION]; /*< public >*/ GfsFunction * omegaz; /* Coriolis coefficient */ GfsFunction * drag; /* Linear drag coefficient */ gdouble beta; /* "implicitness coefficient" 0.5 CN, 1 backward Euler */ double d[3]; /* Direction of Coriolis rotation vector */ }; #define GFS_SOURCE_CORIOLIS(obj) GTS_OBJECT_CAST (obj,\ GfsSourceCoriolis,\ gfs_source_coriolis_class ()) #define GFS_IS_SOURCE_CORIOLIS(obj) (gts_object_is_from_class (obj,\ gfs_source_coriolis_class ())) GfsSourceGenericClass * gfs_source_coriolis_class (void); void gfs_source_coriolis_implicit (GfsDomain * domain, gdouble dt); GfsSourceCoriolis * gfs_has_source_coriolis (GfsDomain * domain); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __SOURCE_H__ */ gerris-snapshot-131206/src/output.h0000644000175100017510000002345312250371171014171 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __OUTPUT_H__ #define __OUTPUT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "event.h" /* GfsOutput: Header */ typedef struct _GfsOutput GfsOutput; typedef struct _GfsOutputClass GfsOutputClass; typedef struct _GfsOutputFile GfsOutputFile; struct _GfsOutput { GfsEvent parent; GfsOutputFile * file; gchar * format; GSList * formats; gboolean dynamic, parallel, first_call; }; struct _GfsOutputClass { GfsEventClass parent_class; }; #define GFS_OUTPUT(obj) GTS_OBJECT_CAST (obj,\ GfsOutput,\ gfs_output_class ()) #define GFS_OUTPUT_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsOutputClass,\ gfs_output_class()) #define GFS_IS_OUTPUT(obj) (gts_object_is_from_class (obj,\ gfs_output_class ())) GfsOutputClass * gfs_output_class (void); void gfs_output_mute (GfsOutput * output); struct _GfsOutputFile { guint refcount; gchar * name; FILE * fp; gboolean is_pipe; }; GfsOutputFile * gfs_output_file_new (FILE * fp); GfsOutputFile * gfs_output_file_open (const gchar * name, const gchar * mode); void gfs_output_file_close (GfsOutputFile * file); /* GfsOutputTime: Header */ GfsOutputClass * gfs_output_time_class (void); /* GfsOutputProgress: Header */ GfsOutputClass * gfs_output_progress_class (void); /* GfsOutputProjectionStats: Header */ GfsOutputClass * gfs_output_projection_stats_class (void); /* GfsOutputDiffusionStats: Header */ GfsOutputClass * gfs_output_diffusion_stats_class (void); /* GfsOutputSolidStats: Header */ GfsOutputClass * gfs_output_solid_stats_class (void); /* GfsOutputAdaptStats: Header */ GfsOutputClass * gfs_output_adapt_stats_class (void); /* GfsOutputTiming: Header */ GfsOutputClass * gfs_output_timing_class (void); /* GfsOutputBalance: Header */ GfsOutputClass * gfs_output_balance_class (void); /* GfsOutputSolidForce: Header */ typedef struct _GfsOutputSolidForce GfsOutputSolidForce; struct _GfsOutputSolidForce { /*< private >*/ GfsOutput parent; /*< public >*/ GfsFunction * weight; }; #define GFS_OUTPUT_SOLID_FORCE(obj) GTS_OBJECT_CAST (obj,\ GfsOutputSolidForce,\ gfs_output_solid_force_class ()) GfsOutputClass * gfs_output_solid_force_class (void); /* GfsOutputLocation: Header */ typedef struct _GfsOutputLocation GfsOutputLocation; struct _GfsOutputLocation { /*< private >*/ GfsOutput parent; /*< public >*/ GArray * p; gchar * precision, * label; gboolean interpolate; }; #define GFS_OUTPUT_LOCATION(obj) GTS_OBJECT_CAST (obj,\ GfsOutputLocation,\ gfs_output_location_class ()) #define GFS_IS_OUTPUT_LOCATION(obj) (gts_object_is_from_class (obj,\ gfs_output_location_class ())) GfsOutputClass * gfs_output_location_class (void); /* GfsOutputSimulation: Header */ typedef struct _GfsOutputSimulation GfsOutputSimulation; typedef enum { GFS, GFS_TEXT, GFS_VTK, GFS_TECPLOT } GfsOutputSimulationFormat; struct _GfsOutputSimulation { GfsOutput parent; gint max_depth; GSList * var; gboolean binary, solid; gchar * precision; GfsOutputSimulationFormat format; }; #define GFS_OUTPUT_SIMULATION(obj) GTS_OBJECT_CAST (obj,\ GfsOutputSimulation,\ gfs_output_simulation_class ()) #define GFS_OUTPUT_SIMULATION_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsOutputClass,\ gfs_output_simulation_class()) #define GFS_IS_OUTPUT_SIMULATION(obj) (gts_object_is_from_class (obj,\ gfs_output_simulation_class ())) GfsOutputClass * gfs_output_simulation_class (void); /* GfsOutputBoundaries: Header */ GfsOutputClass * gfs_output_boundaries_class (void); /* GfsOutputScalar: Header */ typedef struct _GfsOutputScalar GfsOutputScalar; struct _GfsOutputScalar { /*< private >*/ GfsOutput parent; gboolean autoscale; GfsFunction * f; /*< public >*/ GfsVariable * v; gchar * name; gdouble min, max; gint maxlevel; GfsFunction * condition, * w; gchar * format; }; #define GFS_OUTPUT_SCALAR(obj) GTS_OBJECT_CAST (obj,\ GfsOutputScalar,\ gfs_output_scalar_class ()) #define GFS_IS_OUTPUT_SCALAR(obj) (gts_object_is_from_class (obj,\ gfs_output_scalar_class ())) GfsOutputClass * gfs_output_scalar_class (void); /* GfsOutputScalarNorm: Header */ GfsOutputClass * gfs_output_scalar_norm_class (void); /* GfsOutputScalarStats: Header */ GfsOutputClass * gfs_output_scalar_stats_class (void); /* GfsOutputScalarSum: Header */ GfsOutputClass * gfs_output_scalar_sum_class (void); /* GfsOutputScalarMaxima: Header */ typedef struct _GfsOutputScalarMaxima GfsOutputScalarMaxima; struct _GfsOutputScalarMaxima { /*< private >*/ GfsOutputScalar parent; /*< public >*/ guint N; gdouble * m[4]; }; #define GFS_OUTPUT_SCALAR_MAXIMA(obj) GTS_OBJECT_CAST (obj,\ GfsOutputScalarMaxima,\ gfs_output_scalar_maxima_class ()) #define GFS_IS_OUTPUT_SCALAR_MAXIMA(obj) (gts_object_is_from_class (obj,\ gfs_output_scalar_maxima_class ())) GfsOutputClass * gfs_output_scalar_maxima_class (void); /* GfsOutputScalarHistogram: Header */ typedef struct _GfsOutputScalarHistogram GfsOutputScalarHistogram; struct _GfsOutputScalarHistogram { /*< private >*/ GfsOutputScalar parent; /*< public >*/ gdouble * x, * y, * w, W; GfsFunction * wf, * yf; gdouble last, dt; guint n; }; #define GFS_OUTPUT_SCALAR_HISTOGRAM(obj) GTS_OBJECT_CAST (obj,\ GfsOutputScalarHistogram,\ gfs_output_scalar_histogram_class ()) #define GFS_IS_OUTPUT_SCALAR_HISTOGRAM(obj) (gts_object_is_from_class (obj,\ gfs_output_scalar_histogram_class ())) GfsOutputClass * gfs_output_scalar_histogram_class (void); /* GfsOutputDropletSums: Header */ typedef struct _GfsOutputDropletSums GfsOutputDropletSums; struct _GfsOutputDropletSums { /*< private >*/ GfsOutputScalar parent; /*< public >*/ GfsFunction * c; GfsVariable * tag; }; #define GFS_OUTPUT_DROPLET_SUMS(obj) GTS_OBJECT_CAST (obj,\ GfsOutputDropletSums,\ gfs_output_droplet_sums_class ()) #define GFS_IS_OUTPUT_DROPLET_SUMS(obj) (gts_object_is_from_class (obj,\ gfs_output_droplet_sums_class ())) GfsOutputClass * gfs_output_droplet_sums_class (void); /* GfsOutputErrorNorm: Header */ typedef struct _GfsOutputErrorNorm GfsOutputErrorNorm; struct _GfsOutputErrorNorm { /*< private >*/ GfsOutputScalar parent; GfsVariable * v; /*< public >*/ GfsFunction * s; gboolean unbiased, relative; GfsFunction * w; }; #define GFS_OUTPUT_ERROR_NORM(obj) GTS_OBJECT_CAST (obj,\ GfsOutputErrorNorm,\ gfs_output_error_norm_class ()) #define GFS_IS_OUTPUT_ERROR_NORM(obj) (gts_object_is_from_class (obj,\ gfs_output_error_norm_class ())) GfsOutputClass * gfs_output_error_norm_class (void); /* GfsOutputCorrelation: Header */ GfsOutputClass * gfs_output_correlation_class (void); /* GfsOutputSquares: Header */ #define GFS_IS_OUTPUT_SQUARES(obj) (gts_object_is_from_class (obj,\ gfs_output_squares_class ())) GfsOutputClass * gfs_output_squares_class (void); /* GfsOutputStreamline: Header */ typedef struct _GfsOutputStreamline GfsOutputStreamline; struct _GfsOutputStreamline { /*< private >*/ GfsOutputScalar parent; /*< public >*/ FttVector p; }; #define GFS_OUTPUT_STREAMLINE(obj) GTS_OBJECT_CAST (obj,\ GfsOutputStreamline,\ gfs_output_streamline_class ()) #define GFS_IS_OUTPUT_STREAMLINE(obj) (gts_object_is_from_class (obj,\ gfs_output_streamline_class ())) GfsOutputClass * gfs_output_streamline_class (void); /* GfsOutputParticle: Header */ #define GFS_IS_OUTPUT_PARTICLE(obj) (gts_object_is_from_class (obj,\ gfs_output_particle_class ())) GfsOutputClass * gfs_output_particle_class (void); /* GfsOutputPPM: Header */ #define GFS_IS_OUTPUT_PPM(obj) (gts_object_is_from_class (obj,\ gfs_output_ppm_class ())) GfsOutputClass * gfs_output_ppm_class (void); /* GfsOutputGRD: Header */ #define GFS_IS_OUTPUT_GRD(obj) (gts_object_is_from_class (obj,\ gfs_output_grd_class ())) GfsOutputClass * gfs_output_grd_class (void); /* GfsOutputObject: Header */ typedef struct _GfsOutputObject GfsOutputObject; struct _GfsOutputObject { /*< private >*/ GfsOutput parent; /*< public >*/ GtsObject * object; }; #define GFS_OUTPUT_OBJECT(obj) GTS_OBJECT_CAST (obj,\ GfsOutputObject,\ gfs_output_object_class ()) #define GFS_IS_OUTPUT_OBJECT(obj) (gts_object_is_from_class (obj,\ gfs_output_object_class ())) GfsOutputClass * gfs_output_object_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __OUTPUT_H__ */ gerris-snapshot-131206/src/moving2.c0000644000175100017510000005445312250371171014211 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2005-2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /* * Code only used by second-order moving solid boundaries */ #define SOLD2(c, d) (GFS_VALUE (c, sold2[d])) static void sold2_fine_init (FttCell * parent, GfsVariable * v) { FttCellChildren child; guint n; ftt_cell_children (parent, &child); for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) GFS_VALUE (child.c[n], v) = 1.; } static int cell_is_corner (FttCell * cell) { FttDirection d, d1, d2; gdouble norm; FttCellNeighbors neighbors; FttVector n1, n2; g_assert (cell); ftt_cell_neighbors (cell,&neighbors); d1 = d2 = -1; if (!GFS_IS_MIXED(cell)) return 0; for (d = 0; d < FTT_NEIGHBORS; d ++) if (GFS_STATE(cell)->solid->s[d] != 1. && GFS_STATE(cell)->solid->s[d] != 0. && d1 == -1 && d2 == -1) d1 = d; else if (GFS_STATE(cell)->solid->s[d] != 1. && GFS_STATE(cell)->solid->s[d] != 0 && d2 == -1) d2 = d; else if (GFS_STATE(cell)->solid->s[d] != 1. && GFS_STATE(cell)->solid->s[d] != 0.) g_assert_not_reached (); if ( d1 == -1 || d2 == -1) { FttVector pos; ftt_cell_pos (cell,&pos); g_warning ("REA: %f, %f \n", pos.x, pos.y); g_warning ("d1: %i d2: %i \n", d1,d2); g_assert_not_reached (); } gfs_solid_normal (neighbors.c[d1], &n1); norm = sqrt (n1.x*n1.x + n1.y*n1.y); if (norm != 0.) { n1.x /= norm; n1.y /= norm; } gfs_solid_normal (neighbors.c[d2], &n2); norm = sqrt (n2.x*n2.x + n2.y*n2.y); if (norm != 0.) { n2.x /= norm; n2.y /= norm; } if (d1/2 == d2/2) return 0; else { if (neighbors.c[d2]) if ( neighbors.c[d1]) if (GFS_IS_MIXED (neighbors.c[d2]) && GFS_IS_MIXED (neighbors.c[d1])) if (fabs(n1.x*n2.x+n1.y*n2.y) < 0.70) { if (GFS_STATE(neighbors.c[d1])->solid->s[d1] > 0 && GFS_STATE(neighbors.c[d1])->solid->s[d1] < 1) return 1; if (GFS_STATE(neighbors.c[d2])->solid->s[d2] > 0 && GFS_STATE(neighbors.c[d2])->solid->s[d2] < 1) return 1; } return 0; } } static int cell_was_corner (FttCell * cell, GfsVariable * old_solid_v, GfsVariable ** sold2) { FttDirection d, d1, d2; g_assert (cell); d1 = d2 = -1; if (!OLD_SOLID (cell)) return 0; for (d = 0; d < FTT_NEIGHBORS; d ++) if (SOLD2 (cell, d) != 1. && SOLD2 (cell, d) != 0. && d1 == -1 && d2 == -1) d1 = d; else if (SOLD2 (cell, d) != 1. && SOLD2 (cell, d) != 0 && d2 == -1) d2 = d; else if (SOLD2 (cell, d) != 1. && SOLD2 (cell, d) != 0.) g_assert_not_reached (); if (d1/2 == d2/2) return 0; else { FttCellNeighbors neighbors; ftt_cell_neighbors (cell, &neighbors); if (neighbors.c[d1] && neighbors.c[d2]) { FttVector n1, n2; FttComponent c; gdouble norm; for (c = 0; c < FTT_DIMENSION; c++) { (&n1.x)[c] = (SOLD2 (neighbors.c[d1], 2*c + 1) - SOLD2 (neighbors.c[d1], 2*c)); (&n2.x)[c] = (SOLD2 (neighbors.c[d2], 2*c + 1) - SOLD2 (neighbors.c[d2], 2*c)); } norm = sqrt (n1.x*n1.x + n1.y*n1.y); if (norm != 0.) { n1.x /= norm; n1.y /= norm; } norm = sqrt (n2.x*n2.x + n2.y*n2.y); if (norm != 0.) { n2.x /= norm; n2.y /= norm; } if (fabs(n1.x*n2.x+n1.y*n2.y) < 0.70) { if (SOLD2 (neighbors.c[d1], d1) > 0 && SOLD2 (neighbors.c[d1], d1) < 1) return 1.; else if (SOLD2 (neighbors.c[d2], d2) > 0 && SOLD2 (neighbors.c[d2], d2) < 1) return 1; } } return 0; } } static double new_fluid_old_solid (FttCell * cell, FttDirection d1, GfsVariable * old_solid, GfsVariable ** sold2) { FttDirection d; FttCellNeighbors neighbors; double s1, s2; g_assert(cell); s1 = 1.-SOLD2 (cell, d1); ftt_cell_neighbors (cell,&neighbors); for (d = 0; d < 2*FTT_DIMENSION;d++) if (d != 2*(d1/2) && d != 2*(d1/2)+1) if (neighbors.c[d]) if(GFS_IS_MIXED(neighbors.c[d])) if (!cell_is_corner (neighbors.c[d]) && !cell_was_corner (neighbors.c[d], old_solid, sold2)) { if (GFS_STATE(neighbors.c[d])->solid->s[d1] != 1.) { if (SOLD2 (neighbors.c[d], d1) == 0.) { s2 = GFS_STATE(neighbors.c[d])->solid->s[d1]; return s2/(s1+s2); } } } return -1.; } static double new_solid_old_fluid (FttCell * cell, FttDirection d1, GfsVariable * old_solid, GfsVariable ** sold2) { FttDirection d; FttCellNeighbors neighbors; double s1, s2; g_assert(cell); s1 = 1.-GFS_STATE (cell)->solid->s[d1]; ftt_cell_neighbors (cell,&neighbors); for (d = 0; d < 2*FTT_DIMENSION;d++) if (d != 2*(d1/2) && d != 2*(d1/2)+1) if (neighbors.c[d]) if (!cell_is_corner(neighbors.c[d]) && !cell_was_corner(neighbors.c[d], old_solid, sold2)) if (GFS_STATE(neighbors.c[d])->solid) if (GFS_STATE(neighbors.c[d])->solid->s[d1] == 0. && SOLD2 (neighbors.c[d], d1) != 1.) { s2 = SOLD2 (neighbors.c[d], d1); return s1/(s1+s2); } return -1.; } static double new_solid_old_solid (FttCell * cell, FttDirection d1, GfsVariable * old_solid, GfsVariable ** sold2) { FttDirection d; FttCellNeighbors neighbors; double s1, s2; g_assert(cell); s1 = GFS_STATE (cell)->solid->s[d1]; ftt_cell_neighbors (cell,&neighbors); for (d = 0; d < 2*FTT_DIMENSION;d++) if (d != 2*(d1/2) && d != 2*(d1/2)+1) if (neighbors.c[d] && !cell_is_corner(neighbors.c[d]) && !cell_was_corner(neighbors.c[d], old_solid, sold2)) { if ((GFS_IS_MIXED(neighbors.c[d]) && GFS_STATE(neighbors.c[d])->solid->s[d1] == 1.) || !GFS_IS_MIXED(neighbors.c[d])) { if (SOLD2 (neighbors.c[d], d1) != 1.){ s2 = 1.-SOLD2 (neighbors.c[d], d1); return s1/(s1+s2); } } else if ((GFS_STATE(cell)->solid->s[d1] == 0. && GFS_IS_MIXED(neighbors.c[d])) ) { s1 = SOLD2 (cell, d1); s2 = 1.-GFS_STATE(neighbors.c[d])->solid->s[d1]; return s2/(s1+s2); } } return -1.; } static void second_order_face_fractions (FttCell * cell, GfsSimulationMoving * sim) { #ifndef FTT_2D /* 3D */ g_assert_not_implemented (); #endif GfsVariable * old_solid_v = sim->old_solid; GfsVariable ** sold2 = sim->sold2; gdouble dt1, dt2, dto1, dto2, s1, s2; gint d1, d2, d, do1, do2; FttCellNeighbors neighbors; dt1 = dt2 = dto1 = dto2 = -2; d1 = d2 = do1 = do2 = -1; s1 = s2 = -1; g_assert(cell); ftt_cell_neighbors (cell,&neighbors); if (!OLD_SOLID (cell) && !GFS_IS_MIXED(cell)) return; if (!OLD_SOLID (cell)) { FttDirection c; OLD_SOLID (cell) = g_malloc0 (sizeof (GfsSolidVector)); OLD_SOLID (cell)->a = 1.; for (c = 0; c < FTT_NEIGHBORS; c++) OLD_SOLID (cell)->s[c] = 1.; } /* Find directions of intersection */ if (GFS_IS_MIXED(cell)) for (d = 0; d < FTT_NEIGHBORS; d ++) { if (GFS_STATE(cell)->solid->s[d] != 1. && GFS_STATE(cell)->solid->s[d] != 0. && d1 == -1 && d2 == -1) d1 = d; else if (GFS_STATE(cell)->solid->s[d] != 1. && GFS_STATE(cell)->solid->s[d] != 0 && d2 == -1) d2 = d; else if (GFS_STATE(cell)->solid->s[d] != 1. && GFS_STATE(cell)->solid->s[d] != 0.) g_assert_not_reached (); } for (d = 0; d < FTT_NEIGHBORS; d ++) { if (SOLD2 (cell, d) != 1. && SOLD2 (cell, d) != 0. && do1 == -1 && do2 == -1) do1 = d; else if (SOLD2 (cell, d) != 1. && SOLD2 (cell, d) != 0 && do2 == -1) do2 = d; else if (SOLD2 (cell, d) != 1. && SOLD2 (cell, d) != 0.) g_assert_not_reached (); } /* Treats easy cases */ if (d1 != -1 && d1 == do1) OLD_SOLID (cell)->s[d1] = SOLD2 (cell, d1); if (d2 != -1 && d2 == do2) OLD_SOLID (cell)->s[d2] = SOLD2 (cell, d2); if (d1 == do1 && d2 == do2) return; /* Finds timescale for d1/do1 */ if (d1 != -1) { if (SOLD2 (cell, d1) == 1.) { dt1 = new_solid_old_fluid (cell, d1, old_solid_v, sold2); if (dt1 == -1) if (neighbors.c[d1]){ FttDirection dop = ftt_opposite_direction[d1]; dt1 = new_solid_old_fluid (neighbors.c[d1], dop, old_solid_v, sold2); } } else if (SOLD2 (cell, d1) == 0.){ dt1 = new_solid_old_solid (cell, d1, old_solid_v, sold2); } } if (do1 != -1 && do1 != d1 && do1 != d2) { if (GFS_IS_MIXED(cell) && GFS_STATE(cell)->solid->s[do1] == 0.) dto1 = new_solid_old_solid (cell, do1, old_solid_v, sold2); else dto1 = new_fluid_old_solid (cell, do1, old_solid_v, sold2); } /* Finds timescale for d2/do2 */ if (d2 != -1) { if (SOLD2 (cell, d2) == 1.) { dt2 = new_solid_old_fluid (cell, d2, old_solid_v, sold2); if (dt2 == -1 && neighbors.c[d2]) { FttDirection dop = ftt_opposite_direction[d2]; dt2 = new_solid_old_fluid (neighbors.c[d2], dop, old_solid_v, sold2); } } else if (SOLD2 (cell, d2) == 0.) dt2 = new_solid_old_solid (cell, d2, old_solid_v, sold2); } if (do2 != -1 && do2 != d1 && do2 != d2) { if (GFS_IS_MIXED(cell) && GFS_STATE(cell)->solid->s[do2] == 0.) dto2 = new_solid_old_solid (cell, do2, old_solid_v, sold2); else dto2 = new_fluid_old_solid (cell, do2, old_solid_v, sold2); } /* Uses time-scale from other faces if one is missing */ if (dt1 == -1) { if (dto1 != -2) dt1 = dto1; else if (dt2 != -2) dt1 = dt2; else if (dto2 != -2) dt1 = dto2; } if (dt2 == -1) { if (dt1 != -2) dt2 = dt1; else if (dto2 != -2) dt2 = dto2; else if (dto1 != -2) dt2 = dto1; } if (dto1 == -1) { if (dt1 != -2) dto1 = dt1; else if (dt2 != -2) dto1 = dt2; else if (dto2 != -2) dto1 = dto2; } if (dto2 == -1) { if (dt1 != -2) dto2 = dt1; else if (dt2 != -2) dto2 = dt2; else if (dto1 != -2) dto2 = dto1; } /* Treats cell is corner */ if (dt1 != -2 && dt2 != -2) { if (dt1 != dt2 && d1/2 != d2/2) { if (cell_is_corner (cell)) { if (dt1 < dt2) dt2 = dt1; else dt1 = dt2; }}} /* Treats cell was corner */ if (dto1 != -2 && dto2 != -2 && dto1 != dto2 && do1/2 != do2/2 && cell_was_corner (cell, old_solid_v, sold2)) { if (dto1 < dto2) dto2 = dto1; else dto1 = dto2; } /* Compute the t^n+1/2 contribution of the face */ if (do1 > -1) if (do1 != d1 && do1 != d2) { OLD_SOLID (cell)->s[do1]=SOLD2 (cell, do1)*(1-dto1)+dto1; if (neighbors.c[do1]) if (!OLD_SOLID (neighbors.c[do1]) || !GFS_IS_MIXED(neighbors.c[do1])) { if (!OLD_SOLID (neighbors.c[do1])) { FttDirection c; OLD_SOLID (neighbors.c[do1]) = g_malloc0 (sizeof (GfsSolidVector)); OLD_SOLID (neighbors.c[do1])->a = 1.; for (c = 0; c < FTT_NEIGHBORS; c++) OLD_SOLID (neighbors.c[do1])->s[c] = 1.; } OLD_SOLID (neighbors.c[do1])->s[ftt_opposite_direction[do1]] = SOLD2 (cell, do1)*(1-dto1)+dto1; } } if (do2 > -1) if (do2 != d1 && do2 != d2) { OLD_SOLID (cell)->s[do2]=SOLD2 (cell, do2)*(1-dto2)+dto2; if (neighbors.c[do2]) if (!OLD_SOLID (neighbors.c[do2]) || !GFS_IS_MIXED(neighbors.c[do2])) { if (!OLD_SOLID (neighbors.c[do2])) { FttDirection c; OLD_SOLID (neighbors.c[do2]) = g_malloc0 (sizeof (GfsSolidVector)); OLD_SOLID (neighbors.c[do2])->a = 1.; for (c = 0; c < FTT_NEIGHBORS; c++) OLD_SOLID (neighbors.c[do2])->s[c] = 1.; } OLD_SOLID (neighbors.c[do2])->s[ftt_opposite_direction[do2]] = SOLD2 (cell, do2)*(1-dto2)+dto2; } } if (d1 > -1) { if (SOLD2 (cell, d1) == 0.) OLD_SOLID (cell)->s[d1] = GFS_STATE(cell)->solid->s[d1]*(dt1-1.); else if (SOLD2 (cell, d1) == 1.) OLD_SOLID (cell)->s[d1] = (dt1-1.)*GFS_STATE(cell)->solid->s[d1]+2.-dt1; } if (d2 > -1) { if (SOLD2 (cell, d2) == 0.) OLD_SOLID (cell)->s[d2] = GFS_STATE(cell)->solid->s[d2]*(dt2-1.); else if (SOLD2 (cell, d2) == 1.) OLD_SOLID (cell)->s[d2] = (dt2-1.)*GFS_STATE(cell)->solid->s[d2]+2.-dt2; } if (d1/2 == d2/2 && do1 == -1 && do2 == -1) /* third face has to be treated for the timescale determined on the other faces */ for (d = 0; d < FTT_NEIGHBORS; d ++) if (d/2 != d1/2 && SOLD2 (cell, d) == 0.) OLD_SOLID (cell)->s[d] = -1.+dt1+dt2; if (do1/2 == do2/2 && d1 == -1 && d2 == -1) for (d = 0; d < FTT_NEIGHBORS; d++) if (d/2 != do1/2 && SOLD2 (cell, d) == 0.) OLD_SOLID (cell)->s[d] = -1.+dto1+dto2; } static void set_sold2 (FttCell * cell, GfsSimulationMoving * sim) { GfsVariable * old_solid_v = sim->old_solid; GfsVariable ** sold2 = sim->sold2; FttDirection d; if (OLD_SOLID (cell)) for (d = 0; d < FTT_NEIGHBORS; d++) SOLD2 (cell, d) = OLD_SOLID (cell)->s[d]; else for (d = 0; d < FTT_NEIGHBORS; d++) SOLD2 (cell, d) = 1.; } static void redistribute_old_face_in_merged (FttCell * cell, FttCell * merged, FttDirection d, GfsVariable * old_solid_v) { gint i; gdouble sc, sm; g_assert (cell != NULL); g_assert (merged != NULL); sc = ftt_cell_volume(cell); sm = ftt_cell_volume(merged); if (sc != sm) printf("Face redistribution not implemented yet for adaptive grid \n"); g_assert (sc == sm); for (i = 0; i < FTT_DIMENSION;i++) if (i != d/2) { FttCellNeighbors neighbors; FttVector pos; ftt_cell_pos(cell,&pos); ftt_cell_neighbors (merged,&neighbors); GfsSolidVector * old_solid_merged = OLD_SOLID (merged); if (!old_solid_merged) { FttDirection c; OLD_SOLID (merged) = old_solid_merged = g_malloc0 (sizeof (GfsSolidVector)); old_solid_merged->a = 1.; for (c = 0; c < FTT_NEIGHBORS; c++) old_solid_merged->s[c] = 1.; } old_solid_merged->s[2*i] += OLD_SOLID (cell)->s[2*i]; if (neighbors.c[2*i]) { GfsSolidVector * old_solid = OLD_SOLID (neighbors.c[2*i]); if (!old_solid) { FttDirection c; OLD_SOLID (neighbors.c[2*i]) = old_solid = g_malloc0 (sizeof (GfsSolidVector)); old_solid->a = 1.; for (c = 0; c < FTT_NEIGHBORS; c++) old_solid->s[c] = 1.; } old_solid->s[ftt_opposite_direction[2*i]] += OLD_SOLID (cell)->s[2*i]; } old_solid_merged->s[2*i+1] += OLD_SOLID (cell)->s[2*i+1]; if (neighbors.c[2*i+1]) { GfsSolidVector * old_solid = OLD_SOLID (neighbors.c[2*i+1]); if (!old_solid) { FttDirection c; OLD_SOLID (neighbors.c[2*i+1]) = old_solid = g_malloc0 (sizeof (GfsSolidVector)); old_solid->a = 1.; for (c = 0; c < FTT_NEIGHBORS; c++) old_solid->s[c] = 1.; } old_solid->s[ftt_opposite_direction[2*i+1]] += OLD_SOLID (cell)->s[2*i+1]; } } } static void redistribute_old_face (FttCell * cell, FttCell * merged, GfsVariable * old_solid) { FttCellNeighbors neighbors; FttDirection d; ftt_cell_neighbors (cell,&neighbors); for (d = 0; d< FTT_NEIGHBORS; d++) if (neighbors.c[d]) redistribute_old_face_in_merged (cell, neighbors.c[d], d, old_solid); } static double face_fraction_half (const FttCellFace * face, const GfsAdvectionParams * par) { GfsVariable * old_solid_v = GFS_SIMULATION_MOVING (par->v->domain)->old_solid; if (face->cell && OLD_SOLID (face->cell)) return OLD_SOLID (face->cell)->s[face->d]; return 1.; } /* see gfs_face_advection_flux() for the initial implementation with static boundaries */ static void moving_face_advection_flux (const FttCellFace * face, const GfsAdvectionParams * par) { gdouble flux; /* fixme: what's up with face mapping? */ flux = face_fraction_half (face, par)*GFS_FACE_NORMAL_VELOCITY (face)*par->dt* gfs_face_upwinded_value (face, GFS_FACE_UPWINDING, NULL)/ftt_cell_size (face->cell); if (!FTT_FACE_DIRECT (face)) flux = - flux; GFS_VALUE (face->cell, par->fv) -= flux; switch (ftt_face_type (face)) { case FTT_FINE_FINE: GFS_VALUE (face->neighbor, par->fv) += flux; break; case FTT_FINE_COARSE: GFS_VALUE (face->neighbor, par->fv) += flux/FTT_CELLS; break; default: g_assert_not_reached (); } } /* see gfs_face_velocity_advection_flux() for the initial implementation with static boundaries */ static void moving_face_velocity_advection_flux (const FttCellFace * face, const GfsAdvectionParams * par) { gdouble flux; FttComponent c = par->v->component; g_return_if_fail (c >= 0 && c < FTT_DIMENSION); /* fixme: what's up with face mapping? */ flux = face_fraction_half (face, par)*GFS_FACE_NORMAL_VELOCITY (face)* par->dt/ftt_cell_size (face->cell); #if 0 if (c == face->d/2) /* normal component */ flux *= GFS_FACE_NORMAL_VELOCITY (face); else /* tangential component */ #else flux *= gfs_face_upwinded_value (face, par->upwinding, par->u) /* pressure correction */ - gfs_face_interpolated_value (face, par->g[c]->i)*par->dt/2.; #endif if (!FTT_FACE_DIRECT (face)) flux = - flux; GFS_VALUE (face->cell, par->fv) -= flux; switch (ftt_face_type (face)) { case FTT_FINE_FINE: GFS_VALUE (face->neighbor, par->fv) += flux; break; case FTT_FINE_COARSE: GFS_VALUE (face->neighbor, par->fv) += flux/FTT_CELLS; break; default: g_assert_not_reached (); } } static void swap_fractions (FttCell * cell, GfsVariable * old_solid_v) { FttDirection c; g_assert (cell); if (FTT_CELL_IS_LEAF(cell)) { if (OLD_SOLID (cell)) { GfsSolidVector * solid_old = OLD_SOLID (cell); if (GFS_STATE (cell)->solid) { GfsSolidVector * solid = GFS_STATE (cell)->solid; OLD_SOLID (cell)->merged = GFS_STATE (cell)->solid->merged; for (c = 0; c < 2*FTT_DIMENSION; c++) if (solid->s[c] == 0.) solid_old->s[c] = 0; else solid_old->s[c] = (solid_old->s[c]+solid->s[c])/2. ; } else { OLD_SOLID (cell)->merged = NULL; for (c = 0; c < 2*FTT_DIMENSION; c++) solid_old->s[c] = (solid_old->s[c]+1.)/2. ; } } else if (GFS_STATE (cell)->solid) { GfsSolidVector * solid = GFS_STATE (cell)->solid; GfsSolidVector * solid_old = OLD_SOLID (cell) = g_malloc0 (sizeof (GfsSolidVector)); OLD_SOLID (cell)->a= 1.; OLD_SOLID (cell)->merged = GFS_STATE (cell)->solid->merged; for (c = 0; c < 2*FTT_DIMENSION; c++) solid_old->s[c] = 1.; for (c = 0; c < 2*FTT_DIMENSION; c++) if (solid->s[c] == 0.) solid_old->s[c] = 0; else solid_old->s[c] = (solid_old->s[c]+solid->s[c])/2. ; } } if (OLD_SOLID (cell)) { if (GFS_STATE(cell)->solid) { GfsSolidVector * tmp = OLD_SOLID (cell); OLD_SOLID (cell)->merged = GFS_STATE (cell)->solid->merged; OLD_SOLID (cell) = GFS_STATE(cell)->solid; GFS_STATE(cell)->solid = tmp; tmp = NULL; } else { OLD_SOLID (cell)->merged = NULL; GFS_STATE(cell)->solid = OLD_SOLID (cell); OLD_SOLID (cell) = NULL; } } else if (GFS_STATE(cell)->solid) { OLD_SOLID (cell) = GFS_STATE(cell)->solid; GFS_STATE(cell)->solid = NULL; } /* Check for negative fractions and fix */ if (GFS_STATE(cell)->solid) for (c = 0; c < 2*FTT_DIMENSION; c++) if (GFS_STATE(cell)->solid->s[c] < 0.) { if (OLD_SOLID (cell)) if (OLD_SOLID (cell)->s[c] >= 0.) GFS_STATE(cell)->solid->s[c] = OLD_SOLID (cell)->s[c]; else GFS_STATE(cell)->solid->s[c] = 1.; else GFS_STATE(cell)->solid->s[c] = 0.; } if (OLD_SOLID (cell)) for (c = 0; c < 2*FTT_DIMENSION; c++) if (OLD_SOLID (cell)->s[c] < 0.){ if (GFS_STATE(cell)->solid) if (GFS_STATE(cell)->solid->s[c] >= 0.) OLD_SOLID (cell)->s[c] = GFS_STATE(cell)->solid->s[c]; else OLD_SOLID (cell)->s[c] = 1.; else OLD_SOLID (cell)->s[c] = 0.; } } static void old_solid_fractions_from_children (FttCell * cell) { if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren child; guint i; ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) old_solid_fractions_from_children (child.c[i]); gfs_cell_init_solid_fractions_from_children (cell); } } static void foreach_box (GfsBox * box, gpointer data) { old_solid_fractions_from_children (box->root); } static void swap_face_fractions (GfsSimulation * sim) { GfsDomain * domain = GFS_DOMAIN (sim); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) swap_fractions, GFS_SIMULATION_MOVING (sim)->old_solid); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) foreach_box, NULL); } static void swap_fractions_back (FttCell * cell, GfsVariable * old_solid_v) { if (OLD_SOLID (cell)) if (GFS_STATE(cell)->solid) { GfsSolidVector * tmp = OLD_SOLID (cell); OLD_SOLID (cell) = GFS_STATE(cell)->solid; GFS_STATE(cell)->solid = tmp; tmp = NULL; } else { GFS_STATE(cell)->solid = OLD_SOLID (cell); OLD_SOLID (cell) = NULL; } else if (GFS_STATE(cell)->solid) { OLD_SOLID (cell) = GFS_STATE(cell)->solid; GFS_STATE(cell)->solid = NULL; } } static void swap_face_fractions_back (GfsSimulation * sim) { gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) swap_fractions_back, GFS_SIMULATION_MOVING (sim)->old_solid); } static void moving_divergence_distribution_second_order (GSList * merged, DivergenceData * p) { if (merged->next != NULL && merged->next->data != merged->data) { gdouble total_volume = 0., total_div = 0.; GfsVariable * old_solid_v = GFS_SIMULATION_MOVING (p->domain)->old_solid; GSList * i = merged; while (i) { FttCell * cell = i->data; g_assert (FTT_CELL_IS_LEAF (cell)); gdouble a = OLD_SOLID (cell) ? OLD_SOLID (cell)->a : 1.; total_volume += a*ftt_cell_volume (cell); total_div += GFS_VALUE (cell, p->div); i = i->next; } total_div /= total_volume; i = merged; while (i) { FttCell * cell = i->data; gdouble a = OLD_SOLID (cell) ? OLD_SOLID (cell)->a : 1.; GFS_VALUE (cell, p->div) = total_div*a*ftt_cell_volume (cell); i = i->next; } } } gerris-snapshot-131206/src/ftt.h0000644000175100017510000005534412250371171013432 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __FTT_H__ #define __FTT_H__ #include #include #include #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define FTT_MAINTAINER "s.popinet@gmail.com" #if FTT_2D # define FTT_CELLS 4 #else /* FTT_3D */ # define FTT_CELLS 8 #endif /* FTT_3D */ typedef struct _FttCell FttCell; typedef struct _FttCellFace FttCellFace; typedef struct _FttCellNeighbors FttCellNeighbors; typedef struct _FttCellChildren FttCellChildren; typedef struct _FttVector FttVector; struct _FttVector { gdouble x, y, z; }; #if FTT_2D # define ftt_vector_norm(v) (sqrt((v)->x*(v)->x + (v)->y*(v)->y)) # define ftt_vector_distance(v1,v2) (sqrt(((v1)->x-(v2)->x)*((v1)->x-(v2)->x) + \ ((v1)->y-(v2)->y)*((v1)->y-(v2)->y))) #else /* 3D */ # define ftt_vector_norm(v) (sqrt((v)->x*(v)->x + (v)->y*(v)->y + (v)->z*(v)->z)) # define ftt_vector_distance(v1,v2) (sqrt(((v1)->x-(v2)->x)*((v1)->x-(v2)->x) + \ ((v1)->y-(v2)->y)*((v1)->y-(v2)->y) + \ ((v1)->z-(v2)->z)*((v1)->z-(v2)->z))) #endif /* 3D */ typedef enum { FTT_TRAVERSE_LEAFS = 1 << 0, FTT_TRAVERSE_NON_LEAFS = 1 << 1, FTT_TRAVERSE_LEVEL = 1 << 2, FTT_TRAVERSE_BOUNDARY_FACES = 1 << 3, FTT_TRAVERSE_DESTROYED = 1 << 4, FTT_TRAVERSE_ALL = FTT_TRAVERSE_LEAFS | FTT_TRAVERSE_NON_LEAFS } FttTraverseFlags; typedef enum { FTT_PRE_ORDER, FTT_POST_ORDER } FttTraverseType; typedef enum { FTT_RIGHT = 0, FTT_LEFT, FTT_TOP, FTT_BOTTOM, #if (!FTT_2D) FTT_FRONT, FTT_BACK, #endif /* FTT_3D */ FTT_NEIGHBORS } FttDirection; #define FTT_NEIGHBORS_2D (FTT_BOTTOM + 1) #define FTT_CELLS_DIRECTION(d) (FTT_CELLS/2) GTS_C_VAR gchar * ftt_direction_name[FTT_NEIGHBORS]; /* defined in ftt.c */ typedef enum { FTT_X = 0, FTT_Y, #if (!FTT_2D) FTT_Z, #endif /* FTT_3D */ FTT_DIMENSION, FTT_XY, #if FTT_2D FTT_XYZ = FTT_XY #else /* FTT_3D */ FTT_XYZ #endif /* FTT_3D */ } FttComponent; typedef enum { FTT_FLAG_ID = 7, FTT_FLAG_DESTROYED = 1 << 3, FTT_FLAG_LEAF = 1 << 4, /* used only for I/O operations */ FTT_FLAG_TRAVERSED = FTT_FLAG_LEAF, /* used for face traversal */ FTT_FLAG_USER = 5 /* user flags start here */ } FttCellFlags; typedef void (* FttCellTraverseFunc) (FttCell * cell, gpointer data); typedef void (* FttCellInitFunc) (FttCell * cell, gpointer data); struct _FttCellNeighbors { /* right, left, top, bottom, front, back */ FttCell * c[FTT_NEIGHBORS]; }; struct _FttCellChildren { FttCell * c[FTT_CELLS]; }; struct _FttCell { /*< public >*/ guint flags; gpointer data; /*< private >*/ struct _FttOct * parent, * children; }; struct _FttRootCell { FttCell cell; FttCellNeighbors neighbors; FttVector pos; guint level; gpointer parent; }; struct _FttOct { guint level; FttCell * parent; FttCellNeighbors neighbors; FttVector pos; FttCell cell[FTT_CELLS]; }; struct _FttCellFace { FttCell * cell, * neighbor; FttDirection d; }; #define FTT_ROOT_CELL(c) ((struct _FttRootCell *) c) #define FTT_CELL_ID(c) ((c)->flags & FTT_FLAG_ID) #define FTT_CELL_IS_LEAF(c) ((c)->children == NULL) #define FTT_CELL_IS_ROOT(c) ((c)->parent == NULL) #define FTT_CELL_IS_DESTROYED(c) (((c)->flags & FTT_FLAG_DESTROYED) != 0) typedef enum { FTT_BOUNDARY, FTT_FINE_FINE, FTT_FINE_COARSE } FttFaceType; #define FTT_FACE_DIRECT(f) ((f)->d % 2 == 0) #define FTT_FACE_REVERSE(dst, src) \ ((dst)->cell = (src)->neighbor,\ (dst)->neighbor = (src)->cell,\ (dst)->d = FTT_OPPOSITE_DIRECTION((src)->d)) GTS_C_VAR gint ftt_opposite_direction[FTT_NEIGHBORS]; #define FTT_OPPOSITE_DIRECTION(d) (ftt_opposite_direction[d]) #define FTT_ORTHOGONAL_COMPONENT(c) (((c) + 1) % FTT_DIMENSION) #ifdef G_DISABLE_ASSERT #define g_assert_not_implemented() #else /* !G_DISABLE_ASSERT */ #ifdef __GNUC__ #define g_assert_not_implemented() G_STMT_START{ \ g_log (G_LOG_DOMAIN, \ G_LOG_LEVEL_ERROR, \ "file %s: line %d (%s): not implemented (yet)", \ __FILE__, \ __LINE__, \ __PRETTY_FUNCTION__); }G_STMT_END #else /* !__GNUC__ */ #define g_assert_not_implemented() G_STMT_START{ \ g_log (G_LOG_DOMAIN, \ G_LOG_LEVEL_ERROR, \ "file %s: line %d: not implemented (yet)", \ __FILE__, \ __LINE__); }G_STMT_END #endif /* __GNUC__ */ #endif /* !G_DISABLE_ASSERT */ FttCell * ftt_cell_new (FttCellInitFunc init, gpointer data); #define ftt_cell_level(c) ((c)->parent ?\ (c)->parent->level + 1 :\ ((struct _FttRootCell *) c)->level) #define ftt_cell_parent(c) ((c)->parent ?\ (c)->parent->parent : NULL) #define ftt_cell_dz(c) (1.) /** * ftt_level_size: * @level: a guint. * * Returns: the size of a cell of level @level. */ static inline gdouble ftt_level_size (guint level) { gdouble size = 1.; while (level) { size /= 2.; level--; } return size; } /** * ftt_cell_size: * @cell: a #FttCell. * * Returns: the size of @cell. */ static inline gdouble ftt_cell_size (const FttCell * cell) { g_return_val_if_fail (cell != NULL, 0.); return ftt_level_size (ftt_cell_level (cell)); } /** * ftt_cell_volume: * @cell: a #FttCell. * * Returns: the volume (area in 2D) of @cell. */ static inline gdouble ftt_cell_volume (const FttCell * cell) { gdouble size; g_return_val_if_fail (cell != NULL, 0.); size = ftt_level_size (ftt_cell_level (cell)); #if FTT_2D return size*size; #else /* FTT_3D */ return size*size*size; #endif /* FTT_3D */ } /** * ftt_cell_children: * @cell: a #FttCell. * @children: a #FttCellChildren. * * Fills @children with the children of @cell. * * This function fails if @cell is a leaf. */ static inline void ftt_cell_children (const FttCell * cell, FttCellChildren * children) { struct _FttOct * oct; guint i; g_return_if_fail (cell != NULL); g_return_if_fail (!FTT_CELL_IS_LEAF (cell)); g_return_if_fail (children != NULL); oct = cell->children; for (i = 0; i < FTT_CELLS; i++) children->c[i] = FTT_CELL_IS_DESTROYED (&(oct->cell[i])) ? NULL : &(oct->cell[i]); } /** * ftt_cell_children_direction: * @cell: a #FttCell. * @d: a direction. * @children: a #FttCellChildren. * * Fills @children with the children (2 in 2D, 4 in 3D) * of @cell in direction @d. * * This function fails if @cell is a leaf. * * Returns: the number of children in direction @d. */ static inline guint ftt_cell_children_direction (const FttCell * cell, FttDirection d, FttCellChildren * children) { struct _FttOct * oct; guint i; #if FTT_2D static gint index[FTT_NEIGHBORS_2D][FTT_CELLS/2] = {{1, 3}, {0, 2}, {0, 1}, {2, 3}}; #else /* FTT_3D */ static gint index[FTT_NEIGHBORS][FTT_CELLS/2] = {{1, 3, 5, 7}, {0, 2, 4, 6}, {0, 1, 4, 5}, {2, 3, 6, 7}, {0, 1, 2, 3}, {4, 5, 6, 7}}; #endif /* FTT_3D */ g_return_val_if_fail (cell != NULL, 0); g_return_val_if_fail (!FTT_CELL_IS_LEAF (cell), 0); g_return_val_if_fail (d < FTT_NEIGHBORS, 0); g_return_val_if_fail (children != NULL, 0); oct = cell->children; for (i = 0; i < FTT_CELLS/2; i++) children->c[i] = FTT_CELL_IS_DESTROYED (&(oct->cell[index[d][i]])) ? NULL : &(oct->cell[index[d][i]]); return FTT_CELLS/2; } /** * ftt_cell_child_corner: * @cell: a #FttCell. * @d: a set of perpendicular directions. * * This function fails if @cell is a leaf. * * Returns: the children of @cell in the corner defined by directions @d. */ static inline FttCell * ftt_cell_child_corner (const FttCell * cell, FttDirection d[FTT_DIMENSION]) { #if FTT_2D static gint index[FTT_NEIGHBORS_2D][FTT_NEIGHBORS_2D] = { {-1,-1,1,3}, {-1,-1,0,2}, {1,0,-1,-1}, {3,2,-1,-1} }; gint i; g_return_val_if_fail (cell != NULL, NULL); g_return_val_if_fail (!FTT_CELL_IS_LEAF (cell), NULL); g_return_val_if_fail (d[0] < FTT_NEIGHBORS, NULL); g_return_val_if_fail (d[1] < FTT_NEIGHBORS, NULL); i = index[d[0]][d[1]]; #else /* FTT_3D */ static gint index[FTT_NEIGHBORS][FTT_NEIGHBORS][FTT_NEIGHBORS] = { {{-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,1,5},{-1,-1,-1,-1,3,7}, {-1,-1,1,3,-1,-1},{-1,-1,5,7,-1,-1}}, {{-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,0,4},{-1,-1,-1,-1,2,6}, {-1,-1,0,2,-1,-1},{-1,-1,4,6,-1,-1}}, {{-1,-1,-1,-1,1,5},{-1,-1,-1,-1,0,4}, {-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1}, {1,0,-1,-1,-1,-1},{5,4,-1,-1,-1,-1}}, {{-1,-1,-1,-1,3,7},{-1,-1,-1,-1,2,6}, {-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1}, {3,2,-1,-1,-1,-1},{7,6,-1,-1,-1,-1}}, {{-1,-1,1,3,-1,-1},{-1,-1,0,2,-1,-1}, {1,0,-1,-1,-1,-1},{3,2,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1}}, {{-1,-1,5,7,-1,-1},{-1,-1,4,6,-1,-1}, {5,4,-1,-1,-1,-1},{7,6,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1}}, }; gint i; g_return_val_if_fail (cell != NULL, NULL); g_return_val_if_fail (!FTT_CELL_IS_LEAF (cell), NULL); g_return_val_if_fail (d[0] < FTT_NEIGHBORS, NULL); g_return_val_if_fail (d[1] < FTT_NEIGHBORS, NULL); g_return_val_if_fail (d[2] < FTT_NEIGHBORS, NULL); i = index[d[0]][d[1]][d[2]]; #endif /* FTT_3D */ g_return_val_if_fail (i >= 0, NULL); return FTT_CELL_IS_DESTROYED (&(cell->children->cell[i])) ? NULL: &(cell->children->cell[i]); } /** * ftt_cell_neighbors_not_cached: * @cell: a #FttCell. * @neighbors: a #FttCellNeighbors. * * Fills @neighbors with the neighbors of @cell (does not use saved * values even if available). */ static inline void ftt_cell_neighbors_not_cached (const FttCell * cell, FttCellNeighbors * neighbors) { static gint neighbor_index[FTT_NEIGHBORS][FTT_CELLS] #if FTT_2D = {{1,-1,3,-3}, {-2,0,-4,2}, {-3,-4,0,1}, {2,3,-1,-2}}; #else /* FTT_3D */ = {{1,-1,3,-3,5,-5,7,-7}, {-2,0,-4,2,-6,4,-8,6}, {-3,-4,0,1,-7,-8,4,5}, {2,3,-1,-2,6,7,-5,-6}, {-5,-6,-7,-8,0,1,2,3}, {4,5,6,7,-1,-2,-3,-4}}; #endif /* FTT_3D */ guint n, d; struct _FttOct * parent; g_return_if_fail (cell != NULL); g_return_if_fail (neighbors != NULL); if (FTT_CELL_IS_ROOT (cell)) { memcpy (neighbors, &((struct _FttRootCell *) cell)->neighbors, sizeof (FttCellNeighbors)); return; } parent = cell->parent; n = FTT_CELL_ID (cell); for (d = 0; d < FTT_NEIGHBORS; d++) { gint nn = neighbor_index[d][n]; FttCell * c; if (nn >= 0) /* neighbor belongs to same Oct */ c = &(parent->cell[nn]); else { /* neighbor belongs to neighboring Cell or Oct */ c = parent->neighbors.c[d]; if (c != NULL && c->children != NULL) c = &(c->children->cell[- nn - 1]); } if (c == NULL || FTT_CELL_IS_DESTROYED (c)) neighbors->c[d] = NULL; else neighbors->c[d] = c; } } /** * ftt_cell_neighbor_not_cached: * @cell: a #FttCell. * @d: a direction. * * Returns: the neighbor of @cell in direction @d or %NULL if @cell * has no neighbor in this direction (does not use saved values even * if available). */ static inline FttCell * ftt_cell_neighbor_not_cached (const FttCell * cell, FttDirection d) { static gint neighbor_index[FTT_NEIGHBORS][FTT_CELLS] #if FTT_2D = {{1,-1,3,-3}, {-2,0,-4,2}, {-3,-4,0,1}, {2,3,-1,-2}}; #else /* FTT_3D */ = {{1,-1,3,-3,5,-5,7,-7}, {-2,0,-4,2,-6,4,-8,6}, {-3,-4,0,1,-7,-8,4,5}, {2,3,-1,-2,6,7,-5,-6}, {-5,-6,-7,-8,0,1,2,3}, {4,5,6,7,-1,-2,-3,-4}}; #endif /* FTT_3D */ gint n; FttCell * c; g_return_val_if_fail (cell != NULL, NULL); g_return_val_if_fail (d < FTT_NEIGHBORS, NULL); if (FTT_CELL_IS_ROOT (cell)) return ((struct _FttRootCell *) cell)->neighbors.c[d]; n = neighbor_index[d][FTT_CELL_ID (cell)]; if (n >= 0) /* neighbor belongs to same Oct */ c = &(cell->parent->cell[n]); else { /* neighbor belongs to neighboring Cell or Oct */ c = cell->parent->neighbors.c[d]; if (c != NULL && c->children != NULL) c = &(c->children->cell[- n - 1]); } if (c == NULL || FTT_CELL_IS_DESTROYED (c)) return NULL; else return c; } /** * ftt_cell_neighbors: * @cell: a #FttCell. * @neighbors: a #FttCellNeighbors. * * Fills @neighbors with the neighbors of @cell. */ static inline void ftt_cell_neighbors (const FttCell * cell, FttCellNeighbors * neighbors) { g_return_if_fail (cell != NULL); g_return_if_fail (neighbors != NULL); if (!FTT_CELL_IS_LEAF (cell) && neighbors != &cell->children->neighbors) { memcpy (neighbors, &cell->children->neighbors, sizeof (FttCellNeighbors)); return; } ftt_cell_neighbors_not_cached (cell, neighbors); } /** * ftt_cell_neighbor: * @cell: a #FttCell. * @d: a direction. * * Returns: the neighbor of @cell in direction @d or %NULL if @cell * has no neighbor in this direction. */ static inline FttCell * ftt_cell_neighbor (const FttCell * cell, FttDirection d) { g_return_val_if_fail (cell != NULL, NULL); g_return_val_if_fail (d < FTT_NEIGHBORS, NULL); if (!FTT_CELL_IS_LEAF (cell)) return cell->children->neighbors.c[d]; return ftt_cell_neighbor_not_cached (cell, d); } /** * ftt_cell_face: * @cell: a #FttCell. * @d: a direction. * * Returns: the face of @cell in direction @d. */ static inline FttCellFace ftt_cell_face (FttCell * cell, FttDirection d) { FttCellFace f; f.cell = cell; f.neighbor = ftt_cell_neighbor (cell, d); f.d = d; return f; } /** * ftt_face_type: * @face: a #FttCellFace. * * Returns: the type of @face. */ static inline FttFaceType ftt_face_type (const FttCellFace * face) { g_return_val_if_fail (face != NULL, 0); if (face->neighbor == NULL) return FTT_BOUNDARY; if (ftt_cell_level (face->cell) > ftt_cell_level (face->neighbor)) return FTT_FINE_COARSE; g_assert (ftt_cell_level (face->cell) == ftt_cell_level (face->neighbor)); return FTT_FINE_FINE; } /** * ftt_cell_neighbor_is_brother: * @cell: a #FttCell. * @d: a #FttDirection. * * Returns: %TRUE if a (potential) neighbor of @cell in direction @d * and @cell would have the same parent, %FALSE otherwise. */ static inline gboolean ftt_cell_neighbor_is_brother (FttCell * cell, FttDirection d) { static gboolean b[FTT_CELLS][FTT_NEIGHBORS] = { #if FTT_2D {1,0,0,1}, {0,1,0,1}, {1,0,1,0}, {0,1,1,0} #else /* 3D */ {1,0,0,1,0,1}, {0,1,0,1,0,1}, {1,0,1,0,0,1}, {0,1,1,0,0,1}, {1,0,0,1,1,0}, {0,1,0,1,1,0}, {1,0,1,0,1,0}, {0,1,1,0,1,0} #endif /* 3D */ }; g_return_val_if_fail (cell != NULL, FALSE); if (FTT_CELL_IS_ROOT (cell)) return FALSE; return b[FTT_CELL_ID (cell)][d]; } guint ftt_cell_depth (const FttCell * root); void ftt_cell_set_neighbor (FttCell * root, FttCell * neighbor, FttDirection d, FttCellInitFunc init, gpointer init_data); void ftt_cell_set_neighbor_match (FttCell * root, FttCell * neighbor, FttDirection d, FttCellInitFunc init, gpointer init_data); void ftt_cell_relative_pos (const FttCell * cell, FttVector * pos); void ftt_cell_pos (const FttCell * cell, FttVector * pos); void ftt_corner_relative_pos (const FttCell * cell, FttDirection d[FTT_DIMENSION], FttVector * pos); void ftt_corner_pos (const FttCell * cell, FttDirection d[FTT_DIMENSION], FttVector * pos); void ftt_face_pos (const FttCellFace * face, FttVector * pos); void ftt_cell_set_pos (FttCell * root, const FttVector * pos); void ftt_cell_set_level (FttCell * root, guint level); void ftt_cell_draw (const FttCell * cell, FILE * fp); void ftt_face_draw (const FttCellFace * face, FILE * fp); gboolean ftt_cell_check (const FttCell * cell); typedef gboolean (* FttCellRefineFunc) (FttCell * cell, gpointer data); void ftt_cell_refine (FttCell * root, FttCellRefineFunc refine, gpointer refine_data, FttCellInitFunc init, gpointer init_data); void ftt_cell_refine_single (FttCell * cell, FttCellInitFunc init, gpointer init_data); gboolean ftt_refine_corner (const FttCell * cell); void ftt_cell_traverse (FttCell * root, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data); void ftt_cell_traverse_condition (FttCell * root, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data, gboolean (* condition) (FttCell *, gpointer), gpointer cdata); void ftt_cell_traverse_box (FttCell * root, GtsBBox * box, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data); void ftt_cell_traverse_boundary (FttCell * root, FttDirection d, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data); typedef void (* FttFaceTraverseFunc) (FttCellFace * face, gpointer data); void ftt_face_traverse (FttCell * root, FttComponent c, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttFaceTraverseFunc func, gpointer data); void ftt_face_traverse_boundary (FttCell * root, FttDirection d, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttFaceTraverseFunc func, gpointer data); FttCell * ftt_cell_locate (FttCell * root, FttVector target, gint max_depth); gdouble ftt_cell_point_distance2_min (FttCell * cell, GtsPoint * p); void ftt_cell_point_distance2_internal (FttCell * root, GtsPoint * p, gdouble d, gdouble (* distance2) (FttCell *, GtsPoint *, gpointer), gpointer data, FttCell ** closest, gdouble * dmin); gdouble ftt_cell_point_distance2 (FttCell * root, GtsPoint * p, gdouble (* distance2) (FttCell *, GtsPoint *, gpointer), gpointer data, FttCell ** closest); void ftt_cell_bbox (const FttCell * cell, GtsBBox * bb); typedef void (* FttCellCopyFunc) (const FttCell * from, FttCell * to, gpointer data); FttCell * ftt_cell_copy (const FttCell * root, FttCellCopyFunc copy, gpointer data); typedef void (* FttCellWriteFunc) (const FttCell * cell, FILE * fp, gpointer data); void ftt_cell_write (const FttCell * root, gint max_depth, FILE * fp, FttCellWriteFunc write, gpointer data); void ftt_cell_write_binary (const FttCell * root, gint max_depth, FILE * fp, FttCellWriteFunc write, gpointer data); typedef void (* FttCellReadFunc) (FttCell * cell, GtsFile * fp, gpointer data); FttCell * ftt_cell_read (GtsFile * fp, FttCellReadFunc read, gpointer data); FttCell * ftt_cell_read_binary (GtsFile * fp, FttCellReadFunc read, gpointer data); typedef void (* FttCellCleanupFunc) (FttCell * cell, gpointer data); void ftt_cell_destroy (FttCell * cell, FttCellCleanupFunc cleanup, gpointer data); void ftt_cell_destroy_root (FttCell * root, FttCellChildren * children, FttCellCleanupFunc cleanup, gpointer data); void ftt_cell_flatten (FttCell * root, FttDirection d, FttCellCleanupFunc cleanup, gpointer data); typedef gboolean (* FttCellCoarsenFunc) (FttCell * cell, gpointer data); gboolean ftt_cell_coarsen (FttCell * root, FttCellCoarsenFunc coarsen, gpointer coarsen_data, FttCellCleanupFunc cleanup, gpointer cleanup_data); FttDirection ftt_direction_from_name (const gchar * name); struct _FttCellTraverse { FttCell ** cells; FttCell ** current; }; typedef struct _FttCellTraverse FttCellTraverse; FttCellTraverse * ftt_cell_traverse_new (FttCell * root, FttTraverseType order, FttTraverseFlags flags, gint max_depth); void ftt_cell_traverse_rewind (FttCellTraverse * t); void ftt_cell_traverse_destroy (FttCellTraverse * t); static inline FttCell * ftt_cell_traverse_next (FttCellTraverse * t) { g_return_val_if_fail (t != NULL, NULL); return *(t->current++); } #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __FTT_H__ */ gerris-snapshot-131206/src/m4.awk0000644000175100017510000000164612250371171013504 00000000000000function replace_params(s, b, i) { for (i in b) gsub(b[i], "($" i ")", s); return s; } BEGIN { print prefix "changecom()" prefix "dnl"; } { if ($1 == "GfsDefine" || $1 == "Define") { macro = $2; split("", b); # delete b # if we could use gawk, we could do ... # if (match(macro, /(.+)\((.+)\)/, a)) { # macro = a[1]; # split(a[2],b,","); # } # but for portability we need to do ... if (match(macro, /.+\(/)) { a[1] = substr(macro, RSTART, RLENGTH - 1); last = substr(macro, RSTART + RLENGTH); if (match(last, /.+\)/)) { a[2] = substr(last, RSTART, RLENGTH - 1); macro = a[1]; split(a[2],b,","); } } printf (prefix "define(`%s',`%s", macro, replace_params($3, b)); for (i = 4; i <= NF; i++) printf (" %s", replace_params($i, b)); printf ("')\n"); } else if ($1 == "GfsInclude" || $1 == "Include") printf (prefix "include(%s)\n", $2); else print $0; } gerris-snapshot-131206/src/isocube.h0000644000175100017510000001005212250371171014251 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2004 National Institute of Water and Atmospheric * Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /* isocube adapted from GTS (see gts/src/iso.c and gts/doc/isocube.fig) */ static guint edge1[12][2] = { {0, 4}, {1, 5}, {3, 7}, {2, 6}, {0, 2}, {1, 3}, {5, 7}, {4, 6}, {0, 1}, {4, 5}, {6, 7}, {2, 3} }; static FttVector vertex[8] = { {0.,0.,0.},{0.,0.,1.},{0.,1.,0.},{0.,1.,1.}, {1.,0.,0.},{1.,0.,1.},{1.,1.,0.},{1.,1.,1.} }; static guint face[6][4][2] = { {{7,0},{10,0},{6,1},{9,1}}, /* right */ {{4,0},{11,0},{5,1},{8,1}}, /* left */ {{3,0},{10,0},{2,1},{11,1}},/* top */ {{0,0},{9,0},{1,1},{8,1}}, /* bottom */ {{1,0},{6,0},{2,1},{5,1}}, /* front */ {{0,0},{7,0},{3,1},{4,1}} /* back */ }; static guint face_v[6][4] = { {4,6,7,5},/* right */ {0,2,3,1},/* left */ {2,6,7,3},/* top */ {0,4,5,1},/* bottom */ {1,5,7,3},/* front */ {0,4,6,2} /* back */ }; static FttVector edge[12][2] = { {{0.,0.,0.},{1.,0.,0.}},{{0.,0.,1.},{1.,0.,1.}},{{0.,1.,1.},{1.,1.,1.}},{{0.,1.,0.},{1.,1.,0.}}, {{0.,0.,0.},{0.,1.,0.}},{{0.,0.,1.},{0.,1.,1.}},{{1.,0.,1.},{1.,1.,1.}},{{1.,0.,0.},{1.,1.,0.}}, {{0.,0.,0.},{0.,0.,1.}},{{1.,0.,0.},{1.,0.,1.}},{{1.,1.,0.},{1.,1.,1.}},{{0.,1.,0.},{0.,1.,1.}} }; static guint connectv[12][2][4] = { {{4, 5, 1, 0}, {0, 2, 6, 4}}, /* 0 */ {{5, 7, 3, 1}, {1, 0, 4, 5}}, /* 1 */ {{7, 6, 2, 3}, {3, 1, 5, 7}}, /* 2 */ {{6, 4, 0, 2}, {2, 3, 7, 6}}, /* 3 */ {{2, 6, 4, 0}, {0, 1, 3, 2}}, /* 4 */ {{3, 2, 0, 1}, {1, 5, 7, 3}}, /* 5 */ {{7, 3, 1, 5}, {5, 4, 6, 7}}, /* 6 */ {{6, 7, 5, 4}, {4, 0, 2, 6}}, /* 7 */ {{1, 3, 2, 0}, {0, 4, 5, 1}}, /* 8 */ {{5, 1, 0, 4}, {4, 6, 7, 5}}, /* 9 */ {{7, 5, 4, 6}, {6, 2, 3, 7}}, /* 10 */ {{3, 7, 6, 2}, {2, 0, 1, 3}} /* 11 */ }; static FttVector cvertex[8] = { {0., 0., 0.}, {0., 0., 1.}, {0., 1., 0.}, {0., 1., 1.}, {1., 0., 0.}, {1., 0., 1.}, {1., 1., 0.}, {1., 1., 1.} }; #if FTT_2D # define NCORNERS 4 static FttDirection corner[4][2] = { {FTT_LEFT, FTT_BOTTOM}, {FTT_RIGHT, FTT_BOTTOM}, {FTT_RIGHT, FTT_TOP}, {FTT_LEFT, FTT_TOP} }; #else /* 3D */ # define NCORNERS 8 /* first index is the edge number, second index is the edge orientation (0 or 1), third index are the edges which this edge may connect to in order and the corresponding face direction */ static guint connect[12][2][4] = { {{9, 1, 8, FTT_BOTTOM}, {4, 3, 7, FTT_BACK}}, /* 0 */ {{6, 2, 5, FTT_FRONT}, {8, 0, 9, FTT_BOTTOM}}, /* 1 */ {{10, 3, 11, FTT_TOP}, {5, 1, 6, FTT_FRONT}}, /* 2 */ {{7, 0, 4, FTT_BACK}, {11, 2, 10, FTT_TOP}}, /* 3 */ {{3, 7, 0, FTT_BACK}, {8, 5, 11, FTT_LEFT}}, /* 4 */ {{11, 4, 8, FTT_LEFT}, {1, 6, 2, FTT_FRONT}}, /* 5 */ {{2, 5, 1, FTT_FRONT}, {9, 7, 10, FTT_RIGHT}}, /* 6 */ {{10, 6, 9, FTT_RIGHT}, {0, 4, 3, FTT_BACK}}, /* 7 */ {{5, 11, 4, FTT_LEFT}, {0, 9, 1, FTT_BOTTOM}}, /* 8 */ {{1, 8, 0, FTT_BOTTOM}, {7, 10, 6, FTT_RIGHT}}, /* 9 */ {{6, 9, 7, FTT_RIGHT}, {3, 11, 2, FTT_TOP}}, /* 10 */ {{2, 10, 3, FTT_TOP}, {4, 8, 5, FTT_LEFT}} /* 11 */ }; static FttDirection corner[8][3] = { {FTT_LEFT, FTT_BOTTOM, FTT_BACK}, {FTT_LEFT, FTT_BOTTOM, FTT_FRONT}, {FTT_LEFT, FTT_TOP, FTT_BACK}, {FTT_LEFT, FTT_TOP, FTT_FRONT}, {FTT_RIGHT, FTT_BOTTOM, FTT_BACK}, {FTT_RIGHT, FTT_BOTTOM, FTT_FRONT}, {FTT_RIGHT, FTT_TOP, FTT_BACK}, {FTT_RIGHT, FTT_TOP, FTT_FRONT} }; #endif /* 3D */ #define SLIGHTLY_LARGER 1.001 gerris-snapshot-131206/src/spatial.h0000644000175100017510000000351612250371171014264 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __SPATIAL_H__ #define __SPATIAL_H__ /* When modifying this file, please also update the documentation at: * http://gfs.sourceforge.net/wiki/index.php/GfsSurface */ #define intersection(a,b) MAX(a, b) #define union(a,b) MIN(a, b) #define difference(a,b) MAX(a, -(b)) #define X _x #define Y _y #define Z _z #define rx _x #define ry _y #define rz _z static double _x = 0., _y = 0., _z = 0.; static double ellipse (double xc, double yc, double a, double b) { g_return_val_if_fail (a != 0. && b != 0., 0.); return (_x - xc)*(_x - xc)/(a*a) + (_y - yc)*(_y - yc)/(b*b) - 1.; } static double sphere (double xc, double yc, double zc, double r) { return (_x - xc)*(_x - xc) + (_y - yc)*(_y - yc) + (_z - zc)*(_z - zc) - r*r; } static double cube (double xc, double yc, double zc, double h) { double vmax = (_x - xc)*(_x - xc) - h*h/4.; double v = (_y - yc)*(_y - yc) - h*h/4.; if (v > vmax) vmax = v; v = (_z - zc)*(_z - zc) - h*h/4.; if (v > vmax) vmax = v; return vmax; } #endif /* __SPATIAL_H__ */ gerris-snapshot-131206/src/graphic.h0000644000175100017510000001113312250371171014236 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __GRAPHIC_H__ #define __GRAPHIC_H__ #include "simulation.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ void gfs_write_gts (GfsDomain * domain, GfsVariable * v, FttTraverseFlags flags, gint level, GtsBBox * box, FILE * fp); GtsSurface * gfs_isosurface (GfsDomain * domain, GfsVariable * v, gdouble val, gint level); void gfs_write_gnuplot (GfsDomain * domain, GfsVariable * v, FttTraverseFlags flags, gint level, GtsBBox * bbox, FILE * fp); void gfs_write_ppm (GfsDomain * domain, GfsFunction * condition, GfsVariable * v, gdouble min, gdouble max, FttTraverseFlags flags, gint level, FILE * fp, gboolean parallel); void gfs_write_grd (GfsSimulation * sim, GfsFunction * condition, GfsVariable * v, FttTraverseFlags flags, gint level, FILE * fp, gboolean parallel, gboolean interpolate); gint gfs_combine_ppm (gchar ** fname, guint nname, FILE * fp); void gfs_write_squares (GfsDomain * domain, GfsVariable * v, gdouble min, gdouble max, FttTraverseFlags flags, gint level, GtsBBox * bbox, FILE * fp); void gfs_write_mac_velocity (GfsDomain * domain, gdouble scale, FttTraverseFlags flags, gint level, GtsBBox * bbox, FILE * fp); void gfs_draw_cells (FttCell * cell, FttTraverseFlags flags, gint level, FILE * fp); void gfs_draw_boundary_conditions (GfsDomain * domain, FILE * fp); void gfs_draw_solid_boundaries (GfsDomain * domain, FILE * fp); void gfs_draw_refined_boundaries (GfsDomain * domain, FILE * fp); void gfs_draw_levels (FttCell * cell, FILE * fp); void gfs_draw_surface (GfsDomain * domain, GtsSurface * s, GfsVariable * v, gdouble min, gdouble max, FILE * fp); void gfs_extrude_profile (GtsSurface * s, GSList * profile, gboolean closed, GList * path); GList * gfs_streamline_new (GfsDomain * domain, GfsVariable ** U, FttVector p, GfsVariable * var, gdouble min, gdouble max, gboolean twist, gboolean (* stop) (FttCell *, GList *, gpointer), gpointer data); void gfs_streamline_write (GList * stream, FILE * fp); GList * gfs_streamline_read (GtsFile * fp); void gfs_streamline_draw (GList * stream, FILE * fp); void gfs_streamline_destroy (GList * stream); void gfs_draw_stream_cylinder (GfsDomain * domain, FttVector p, gdouble radius, GfsVariable * var, gdouble min, gdouble max, FILE * fp); void gfs_draw_stream_ribbon (GfsDomain * domain, FttVector p, gdouble radius, GfsVariable * var, gdouble min, gdouble max, FILE * fp); void gfs_draw_streamline (GfsDomain * domain, FttVector p, FILE * fp); gboolean gfs_plane_cuts_cell (FttVector plane[3], FttCell * cell); guint gfs_cut_cube_vertices (FttCell * cell, gint maxlevel, FttVector * p, FttVector * n, FttVector v[12], FttDirection d[12], GfsVariable * var, gdouble val[12]); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __GRAPHIC_H__ */ gerris-snapshot-131206/src/verify.h0000644000175100017510000002313212250371171014127 00000000000000/* Compile-time assert-like macros. Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc. 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 . */ /* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ #ifndef _GL_VERIFY_H # define _GL_VERIFY_H /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11. This is supported by GCC 4.6.0 and later, in C mode, and its use here generates easier-to-read diagnostics when verify (R) fails. Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11. This will likely be supported by future GCC versions, in C++ mode. Use this only with GCC. If we were willing to slow 'configure' down we could also use it with other compilers, but since this affects only the quality of diagnostics, why bother? */ # if (4 < __GNUC__ || (__GNUC__ == 4 && 6 <= __GNUC_MINOR__)) && !defined __cplusplus # define _GL_HAVE__STATIC_ASSERT 1 # endif /* The condition (99 < __GNUC__) is temporary, until we know about the first G++ release that supports static_assert. */ # if (99 < __GNUC__) && defined __cplusplus # define _GL_HAVE_STATIC_ASSERT 1 # endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. If _Static_assert works, verify (R) uses it directly. Similarly, _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct that is an operand of sizeof. The code below uses several ideas for C++ compilers, and for C compilers that do not support _Static_assert: * The first step is ((R) ? 1 : -1). Given an expression R, of integral or boolean or floating-point type, this yields an expression of integral type, whose value is later verified to be constant and nonnegative. * Next this expression W is wrapped in a type struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: W; }. If W is negative, this yields a compile-time error. No compiler can deal with a bit-field of negative size. One might think that an array size check would have the same effect, that is, that the type struct { unsigned int dummy[W]; } would work as well. However, inside a function, some compilers (such as C++ compilers and GNU C) allow local parameters and variables inside array size expressions. With these compilers, an array size check would not properly diagnose this misuse of the verify macro: void function (int n) { verify (n < 0); } * For the verify macro, the struct _gl_verify_type will need to somehow be embedded into a declaration. To be portable, this declaration must declare an object, a constant, a function, or a typedef name. If the declared entity uses the type directly, such as in struct dummy {...}; typedef struct {...} dummy; extern struct {...} *dummy; extern void dummy (struct {...} *); extern struct {...} *dummy (void); two uses of the verify macro would yield colliding declarations if the entity names are not disambiguated. A workaround is to attach the current line number to the entity name: #define _GL_CONCAT0(x, y) x##y #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) extern struct {...} * _GL_CONCAT (dummy, __LINE__); But this has the problem that two invocations of verify from within the same macro would collide, since the __LINE__ value would be the same for both invocations. (The GCC __COUNTER__ macro solves this problem, but is not portable.) A solution is to use the sizeof operator. It yields a number, getting rid of the identity of the type. Declarations like extern int dummy [sizeof (struct {...})]; extern void dummy (int [sizeof (struct {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; can be repeated. * Should the implementation use a named struct or an unnamed struct? Which of the following alternatives can be used? extern int dummy [sizeof (struct {...})]; extern int dummy [sizeof (struct _gl_verify_type {...})]; extern void dummy (int [sizeof (struct {...})]); extern void dummy (int [sizeof (struct _gl_verify_type {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; In the second and sixth case, the struct type is exported to the outer scope; two such declarations therefore collide. GCC warns about the first, third, and fourth cases. So the only remaining possibility is the fifth case: extern int (*dummy (void)) [sizeof (struct {...})]; * GCC warns about duplicate declarations of the dummy function if -Wredundant-decls is used. GCC 4.3 and later have a builtin __COUNTER__ macro that can let us generate unique identifiers for each dummy function, to suppress this warning. * This implementation exploits the fact that older versions of GCC, which do not support _Static_assert, also do not warn about the last declaration mentioned above. * GCC warns if -Wnested-externs is enabled and verify() is used within a function body; but inside a function, you can always arrange to use verify_expr() instead. * In C++, any struct definition inside sizeof is invalid. Use a template type to work around the problem. */ /* Concatenate two preprocessor tokens. */ # define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) # define _GL_CONCAT0(x, y) x##y /* _GL_COUNTER is an integer, preferably one that changes each time we use it. Use __COUNTER__ if it works, falling back on __LINE__ otherwise. __LINE__ isn't perfect, but it's better than a constant. */ # if defined __COUNTER__ && __COUNTER__ != __COUNTER__ # define _GL_COUNTER __COUNTER__ # else # define _GL_COUNTER __LINE__ # endif /* Generate a symbol with the given prefix, making it unique if possible. */ # define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) /* Verify requirement R at compile-time, as an integer constant expression that returns 1. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. */ # define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) # ifdef __cplusplus # if !GNULIB_defined_struct__gl_verify_type template struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: w; }; # define GNULIB_defined_struct__gl_verify_type 1 # endif # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ _gl_verify_type<(R) ? 1 : -1> # elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { \ _Static_assert (R, DIAGNOSTIC); \ int _gl_dummy; \ } # else # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } # endif /* Verify requirement R at compile-time, as a declaration without a trailing ';'. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. Unfortunately, unlike C11, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ # ifdef _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY _Static_assert # else # define _GL_VERIFY(R, DIAGNOSTIC) \ extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] # endif /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ # ifdef _GL_STATIC_ASSERT_H # if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert # define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) # endif # if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert # define static_assert _Static_assert /* C11 requires this #define. */ # endif # endif /* @assert.h omit start@ */ /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. There are two macros, since no single macro can be used in all contexts in C. verify_true (R) is for scalar contexts, including integer constant expression contexts. verify (R) is for declaration contexts, e.g., the top level. */ /* Verify requirement R at compile-time, as an integer constant expression. Return 1. This is equivalent to verify_expr (R, 1). verify_true is obsolescent; please use verify_expr instead. */ # define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") /* Verify requirement R at compile-time. Return the value of the expression E. */ # define verify_expr(R, E) \ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) /* Verify requirement R at compile-time, as a declaration without a trailing ';'. */ # define verify(R) _GL_VERIFY (R, "verify (" #R ")") /* @assert.h omit end@ */ #endif gerris-snapshot-131206/src/particle.h0000644000175100017510000000264312250371171014432 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __PARTICLE_H__ #define __PARTICLE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "event.h" /* Particle: header */ typedef struct _GfsParticle GfsParticle; struct _GfsParticle { GfsEvent parent; FttVector pos; guint id; }; #define GFS_PARTICLE(obj) GTS_OBJECT_CAST (obj,\ GfsParticle,\ gfs_particle_class ()) #define GFS_IS_PARTICLE(obj) (gts_object_is_from_class (obj,\ gfs_particle_class ())) GfsEventClass * gfs_particle_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __PARTICLE_H__ */ gerris-snapshot-131206/src/utils.c0000644000175100017510000016736512250371171013777 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief GfsFunction and various utility functions. */ #include #include #include #include #include #include #include #include #include #include #include #include #include "config.h" #include "solid.h" #include "simulation.h" #include "cartesian.h" /* * get_tmp_file based on the mkstemp implementation from the GNU C library. * Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc. */ typedef gint (*GTmpFileCallback) (gchar *, gint, gint); static gint get_tmp_file (gchar *tmpl, GTmpFileCallback f, int flags, int mode) { char *XXXXXX; int count, fd; static const char letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; static const int NLETTERS = sizeof (letters) - 1; glong value; GTimeVal tv; static int counter = 0; g_return_val_if_fail (tmpl != NULL, -1); /* find the last occurrence of "XXXXXX" */ XXXXXX = g_strrstr (tmpl, "XXXXXX"); if (!XXXXXX || strncmp (XXXXXX, "XXXXXX", 6)) { errno = EINVAL; return -1; } /* Get some more or less random data. */ g_get_current_time (&tv); value = (tv.tv_usec ^ tv.tv_sec) + getpid () + counter++; for (count = 0; count < 100; value += 7777, ++count) { glong v = value; /* Fill in the random bits. */ XXXXXX[0] = letters[v % NLETTERS]; v /= NLETTERS; XXXXXX[1] = letters[v % NLETTERS]; v /= NLETTERS; XXXXXX[2] = letters[v % NLETTERS]; v /= NLETTERS; XXXXXX[3] = letters[v % NLETTERS]; v /= NLETTERS; XXXXXX[4] = letters[v % NLETTERS]; v /= NLETTERS; XXXXXX[5] = letters[v % NLETTERS]; fd = f (tmpl, flags, mode); if (fd >= 0) return fd; else if (errno != EEXIST) /* Any other error will apply also to other names we might * try, and there are 2^32 or so of them, so give up now. */ return -1; } /* We got out of the loop because we ran out of combinations to try. */ errno = EEXIST; return -1; } #if !HAVE_G_MKDTEMP /* we could use mkdtemp() but we don't trust some implementations (e.g. on AIX) */ static gint wrap_mkdir (gchar *tmpl, int flags G_GNUC_UNUSED, int mode) { return mkdir (tmpl, mode); } gchar * g_mkdtemp (gchar * tmpl) { if (get_tmp_file (tmpl, wrap_mkdir, 0, 0700) == -1) return NULL; else return tmpl; } #endif /* !HAVE_G_MKDTEMP */ static gint wrap_mkfifo (gchar *tmpl, int flags G_GNUC_UNUSED, int mode) { return mkfifo (tmpl, mode); } /** * gfs_mkftemp: * @tmpl: template FIFO name * * Creates a temporary FIFO. See the mkfifo() documentation * on most UNIX-like systems. * * Returns: A pointer to @tmpl, which has been modified * to hold the directory name. In case of errors, %NULL is * returned and %errno will be set. */ gchar * gfs_mkftemp (gchar * tmpl) { if (get_tmp_file (tmpl, wrap_mkfifo, 0, 0600) == -1) return NULL; else return tmpl; } /** * gfs_template: * * Returns: the template for a temporary file name. */ gchar * gfs_template (void) { gchar * tmpdir = getenv ("TMPDIR"); return tmpdir ? g_strconcat (tmpdir, "/gfsXXXXXX", NULL) : g_strdup ("/tmp/gfsXXXXXX"); } /** * gfs_object_clone: * @object: the #GtsObject to clone. * @clone: the clone of @object. * * Makes @clone the clone of @object using the write() and read() * methods of @object. */ void gfs_object_clone (GtsObject * object, GtsObject * clone) { g_return_if_fail (object != NULL); g_return_if_fail (clone != NULL); g_return_if_fail (gts_object_class_is_from_class (clone->klass, object->klass)); char * buf; size_t len; FILE * fp = open_memstream (&buf, &len); if (fp == NULL) g_error ("open_memstream: %s", strerror (errno)); (* object->klass->write) (object, fp); fclose (fp); GtsFile * gfp = gts_file_new_from_buffer (buf, len); (* object->klass->read) (&clone, gfp); g_assert (gfp->type != GTS_ERROR); gts_file_destroy (gfp); free (buf); } /** * @c: a character. * @s: a string. * * Returns: %TRUE if @c belongs to @s, %FALSE otherwise. */ gboolean gfs_char_in_string (char c, const char * s) { if (s == NULL) return FALSE; while (*s != '\0') if (*(s++) == c) return TRUE; return FALSE; } /** * gfs_file_statement: * @fp: a #GtsFile. * * Reads the next brackets-delimited ({...}) statemement in @fp, * including all comments. * * Returns: a newly allocated string containing the text of the next * statement in @fp, or %NULL if an error occured in which case * @fp->error is set. */ gchar * gfs_file_statement (GtsFile * fp) { g_return_val_if_fail (fp != NULL, NULL); if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return NULL; } GString * s = g_string_new (""); gchar empty[] = "", * comments = fp->comments; fp->comments = empty; guint scope = fp->scope_max; gint c = gts_file_getc (fp); while (c != EOF && fp->scope > scope) { g_string_append_c (s, c); c = gts_file_getc (fp); } fp->comments = comments; if (fp->scope != scope) { gts_file_error (fp, "parse error"); g_string_free (s, TRUE); return NULL; } gchar * ret = s->str; g_string_free (s, FALSE); return ret; } typedef gdouble (* GfsFunctionFunc) (const FttCell * cell, const FttCellFace * face, GfsSimulation * sim, GfsVariable ** var, GfsDerivedVariable ** dvar); typedef gdouble (* GfsFunctionDerivedFunc) (const FttCell * cell, const FttCellFace * face, GfsSimulation * sim, gpointer data); /** * Global functions. * \beginobject{GfsGlobal} */ struct _GfsGlobal { /*< private >*/ GtsObject parent; /*< public >*/ gchar * s; guint line; gboolean appended; }; static void global_destroy (GtsObject * object) { g_free (GFS_GLOBAL (object)->s); (* gfs_global_class ()->parent_class->destroy) (object); } static void global_write (GtsObject * object, FILE * fp) { fprintf (fp, "%s {", object->klass->info.name); fputs (GFS_GLOBAL (object)->s, fp); fputs ("}\n", fp); } static void global_read (GtsObject ** object, GtsFile * fp) { GfsGlobal * global = GFS_GLOBAL (*object); GtsObjectClass * klass; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (GfsGlobalClass)"); return; } klass = gfs_object_class_from_name (fp->token->str); if (klass == NULL) { gts_file_error (fp, "unknown class `%s'", fp->token->str); return; } if (!gts_object_class_is_from_class (klass, gfs_global_class ())) { gts_file_error (fp, "`%s' is not a GfsGlobal", fp->token->str); return; } gts_file_next_token (fp); global->line = fp->line; g_free (global->s); if ((global->s = gfs_file_statement (fp))) gts_file_next_token (fp); } static void gfs_global_class_init (GtsObjectClass * klass) { klass->destroy = global_destroy; klass->read = global_read; klass->write = global_write; } GtsObjectClass * gfs_global_class (void) { static GtsObjectClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_global_info = { "GfsGlobal", sizeof (GfsGlobal), sizeof (GtsObjectClass), (GtsObjectClassInitFunc) gfs_global_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_object_class ()), &gfs_global_info); } return klass; } static void gfs_global_append (GfsGlobal * g, GString * s) { g_string_append_printf (s, "#line %d \"GfsGlobal\"\n", g->line); g_string_append (s, g->s); g->appended = TRUE; g_string_append_c (s, '\n'); } /* GfsModule: Header */ typedef struct _GfsModule GfsModule; struct _GfsModule { gchar * key; guint id; GModule * module; GSList * l; /* list of GfsFunctions */ }; /* GfsFunction: Header */ struct _GfsFunction { GtsObject parent; GString * expr; gboolean isexpr; GfsModule * module; GfsFunctionFunc f; gchar * sname; GtsSurface * s; GfsCartesianGrid * g; guint index[4]; GfsVariable * v; GfsDerivedVariable * dv; gdouble val; gboolean spatial, constant, nomap; gdouble units; GfsVariable ** var; GfsDerivedVariable ** dvar; }; /** \endobject{GfsGlobal} */ /* GfsModule: object */ static gchar * function_key (const GfsFunction * f) { GString * s = g_string_new (f->expr->str); if (f->spatial) g_string_append (s, "spatial"); else if (f->constant) g_string_append (s, "constant"); GfsSimulation * sim = gfs_object_simulation (f); GSList * i = sim->globals; while (i) { g_string_append (s, GFS_GLOBAL (i->data)->s); i = i->next; } gchar * key = s->str; g_string_free (s, FALSE); return key; } static gchar * find_identifier (const gchar * s, const gchar * i) { gchar * f = strstr (s, i); static gchar allowed[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_1234567890"; while (f) { if (gfs_char_in_string (f[strlen(i)], allowed) || (f > s && gfs_char_in_string (f[-1], allowed))) f = strstr (++f, i); else return f; } return NULL; } /* source code for functions pending compilation */ static GString * pending_functions = NULL; static guint n_pending_functions = 0; /* append source code for @f to pending compilations */ static void append_pending_function (const GfsFunction * f, guint line, guint id) { GfsSimulation * sim = gfs_object_simulation (f); GfsDomain * domain = GFS_DOMAIN (sim); GSList * lv = NULL, * ldv = NULL, * i; if (!pending_functions) { pending_functions = g_string_new ("#include \n" "#include \n" "#include \n" "#include \n" "#include \n" "#include \n" "typedef double (* Func) (const FttCell * cell,\n" " const FttCellFace * face,\n" " GfsSimulation * sim,\n" " gpointer data);\n"); g_slist_foreach (sim->globals, (GFunc) gfs_global_append, pending_functions); } else { i = sim->globals; while (i) { if (!GFS_GLOBAL (i->data)->appended) gfs_global_append (i->data, pending_functions); i = i->next; } } if (f->spatial) g_string_append_printf (pending_functions, "\ndouble f%u (double x, double y, double z, double t) {\n" " _x = x; _y = y; _z = z;\n", id); else if (f->constant) g_string_append_printf (pending_functions, "\ndouble f%u (void) {\n", id); else { g_string_append_printf (pending_functions, "char * variables%u[] = {", id); i = domain->variables; while (i) { if (GFS_VARIABLE (i->data)->name && find_identifier (f->expr->str, GFS_VARIABLE (i->data)->name)) { lv = g_slist_prepend (lv, i->data); g_string_append_printf (pending_functions, "\"%s\", ", GFS_VARIABLE (i->data)->name); } i = i->next; } g_string_append (pending_functions, "NULL};\n"); lv = g_slist_reverse (lv); g_string_append_printf (pending_functions, "char * dvariables%u[] = {", id); i = domain->derived_variables; while (i) { GfsDerivedVariable * v = i->data; if (find_identifier (f->expr->str, v->name)) { ldv = g_slist_prepend (ldv, v); g_string_append_printf (pending_functions, "\"%s\", ", v->name); } i = i->next; } g_string_append (pending_functions, "NULL};\n"); ldv = g_slist_reverse (ldv); g_string_append_printf (pending_functions, "\ndouble f%u (FttCell * cell, FttCellFace * face,\n" " GfsSimulation * sim, GfsVariable ** var,\n" " GfsDerivedVariable ** dvar) {\n" " _sim = sim; _cell = cell;\n", id); if (lv || ldv) { GSList * i = lv; while (i) { GfsVariable * v = i->data; g_string_append_printf (pending_functions, " double %s;\n", v->name); i = i->next; } i = ldv; while (i) { GfsDerivedVariable * v = i->data; g_string_append_printf (pending_functions, " double %s;\n", v->name); i = i->next; } if (lv) { int index = 0; g_string_append (pending_functions, " if (cell) {\n"); i = lv; while (i) { GfsVariable * v = i->data; g_string_append_printf (pending_functions, " %s = gfs_dimensional_value (var[%d], GFS_VALUE (cell, var[%d]));\n", v->name, index, index); i = i->next; index++; } g_string_append (pending_functions, " } else {\n"); i = lv; index = 0; while (i) { GfsVariable * v = i->data; g_string_append_printf (pending_functions, " %s = gfs_dimensional_value (var[%d],\n" " gfs_face_interpolated_value_generic (face, var[%d]));\n", v->name, index, index); i = i->next; index++; } g_string_append (pending_functions, " }\n"); g_slist_free (lv); } if (ldv) { i = ldv; int index = 0; while (i) { GfsDerivedVariable * v = i->data; g_string_append_printf (pending_functions, " %s = (* (Func) dvar[%d]->func) (cell, face, sim, dvar[%d]->data);\n", v->name, index, index); i = i->next; index++; } g_slist_free (ldv); } } } g_string_append_printf (pending_functions, "#line %d \"GfsFunction\"\n", line); if (f->isexpr) g_string_append_printf (pending_functions, "return %s;\n}\n", f->expr->str); else { gchar * s = f->expr->str; guint len = strlen (s); g_assert (s[0] == '{' && s[len-1] == '}'); s[len-1] = '\0'; g_string_append_printf (pending_functions, "%s\n}\n", &s[1]); s[len-1] = '}'; } } static GHashTable * get_function_cache (void) { static GHashTable * function_cache = NULL; if (!function_cache) function_cache = g_hash_table_new (g_str_hash, g_str_equal); return function_cache; } static void link_module (GfsFunction * f) { g_assert (f->module); GModule * module = f->module->module; g_assert (module); guint id = f->module->id; gchar * name = g_strdup_printf ("f%u", id); g_assert (g_module_symbol (module, name, (gpointer) &f->f)); g_free (name); if (f->constant) { f->val = (* f->f) (NULL, NULL, NULL, NULL, NULL); f->f = NULL; if (f->expr) g_string_free (f->expr, TRUE); f->expr = NULL; } else if (!f->spatial) { char ** variables; name = g_strdup_printf ("variables%u", id); g_assert (g_module_symbol (module, name, (gpointer) &variables)); g_free (name); char ** s = variables; int n = 0; while (*s) { n++; s++; } if (n > 0) { f->var = g_malloc (n*sizeof (GfsVariable *)); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (f)); s = variables; n = 0; while (*s) { g_assert ((f->var[n] = gfs_variable_from_name (domain->variables, *s))); n++; s++; } } name = g_strdup_printf ("dvariables%u", id); g_assert (g_module_symbol (module, name, (gpointer) &variables)); g_free (name); s = variables; n = 0; while (*s) { n++; s++; } if (n > 0) { f->dvar = g_malloc (n*sizeof (GfsDerivedVariable *)); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (f)); s = variables; n = 0; while (*s) { g_assert ((f->dvar[n] = gfs_derived_variable_from_name (domain->derived_variables, *s))); n++; s++; } } } } static void gfs_module_ref (GfsModule * m, GfsFunction * f) { f->module = m; m->l = g_slist_prepend (m->l, f); if (m->module) link_module (f); } static void gfs_module_unref (GfsModule * m, GfsFunction * f) { m->l = g_slist_remove (m->l, f); /* modules are kept "forever" in case they come up again e.g. during dynamic load-balancing */ } static gboolean lookup_function (GfsFunction * f) { GHashTable * function_cache = get_function_cache (); gchar * key = function_key (f); GfsModule * module = g_hash_table_lookup (function_cache, key); g_free (key); if (module) { gfs_module_ref (module, f); return TRUE; } return FALSE; } static void gfs_module_new (GfsFunction * f, guint line) { if (!lookup_function (f)) { GfsModule * m = g_malloc0 (sizeof (GfsModule)); m->key = function_key (f); m->id = n_pending_functions++; g_hash_table_insert (get_function_cache (), m->key, m); append_pending_function (f, line, m->id); gfs_module_ref (m, f); } } static double current_time (void) { GTimeVal r; g_get_current_time (&r); return r.tv_sec + 1e-6*r.tv_usec; } static GModule * compile (GtsFile * fp, const gchar * dirname, const gchar * finname) { GModule * module = NULL; gfs_debug ("starting compilation"); double start = current_time (); char pwd[512]; g_assert (getcwd (pwd, 512)); GString * build_command = g_string_new (""); g_string_printf (build_command, "cd %s && %s/build_function " #if FTT_2D "gerris2D" #else /* 3D */ "gerris3D" #endif " \"%s\"" , dirname, GFS_DATA_DIR, pwd); g_string_append (build_command, " > log 2>&1"); gint status = system (build_command->str); g_string_free (build_command, TRUE); if (WIFSIGNALED (status) && (WTERMSIG (status) == SIGINT || WTERMSIG (status) == SIGQUIT)) status = SIGQUIT; else if (status == -1 || WEXITSTATUS (status) != 0) { gchar * errname = g_strconcat (dirname, "/log", NULL); FILE * ferr = fopen (errname, "r"); g_free (errname); gchar * needle; GString * msg = g_string_new (""); gint c; while ((c = fgetc (ferr)) != EOF) g_string_append_c (msg, c); fclose (ferr); while ((needle = strstr (msg->str, "GfsFunction:"))) g_string_erase (msg, needle - msg->str, strlen ("GfsFunction:")); gts_file_error (fp, "error compiling expression\n%s", msg->str); g_string_free (msg, TRUE); status = SIGABRT; } else { gchar * mname = g_strconcat (dirname, "/module.so", NULL); gchar * path = g_module_build_path (GFS_MODULES_DIR, mname); module = g_module_open (path, 0); g_free (path); if (module == NULL) module = g_module_open (mname, 0); if (module == NULL) gts_file_error (fp, "cannot load module: %s", g_module_error ()); g_free (mname); } #if 1 gchar * cleanup = g_strconcat ("rm -r -f ", dirname, NULL); gint status1 = system (cleanup); g_free (cleanup); if (status1 == -1 || WEXITSTATUS (status1) != 0) g_warning ("error when cleaning up %s", dirname); #else g_warning ("not cleaning up %s", dirname); #endif gfs_debug ("compilation completed in %g s", current_time () - start); return module; } static void update_module (gchar * key, GfsModule * m, GModule * module) { if (m->module == NULL) { m->module = module; g_slist_foreach (m->l, (GFunc) link_module, module); } } /** * gfs_pending_functions_compilation: * @fp: a #GtsFile. * * Compiles and links pending #GfsFunction definitions. * * Compilation errors are reported in @fp. */ void gfs_pending_functions_compilation (GtsFile * fp) { g_return_if_fail (fp != NULL); if (pending_functions && fp->type != GTS_ERROR) { gchar * dirname = gfs_template (); if (g_mkdtemp (dirname) == NULL) { gts_file_error (fp, "cannot create temporary directory\n%s", strerror (errno)); g_free (dirname); return; } gchar * finname = g_strdup_printf ("%s/function.c", dirname); FILE * fin = fopen (finname, "w"); fputs (pending_functions->str, fin); fclose (fin); GModule * module = compile (fp, dirname, finname); if (module) g_hash_table_foreach (get_function_cache (), (GHFunc) update_module, module); /* note that if there is an error in some pending functions (i.e. fp->type == GTS_ERROR) something needs to be done to fix this (e.g. abort the whole thing). */ g_string_free (pending_functions, TRUE); pending_functions = NULL; n_pending_functions = 0; g_free (dirname); g_free (finname); } } /** * Numerical constants and expressions. * \beginobject{GfsFunction} */ static GtsSurface * read_surface (gchar * name, GtsFile * fp) { FILE * fptr = fopen (name, "r"); GtsSurface * s; GtsFile * fp1; if (fptr == NULL) { gts_file_error (fp, "cannot open file `%s'", name); return NULL; } fp1 = gts_file_new (fptr); s = gts_surface_new (gts_surface_class (), gts_face_class (), gts_edge_class (), gts_vertex_class ()); if (gts_surface_read (s, fp1)) { gts_file_error (fp, "%s:%d:%d: %s", name, fp1->line, fp1->pos, fp1->error); gts_object_destroy (GTS_OBJECT (s)); s = NULL; } gts_file_destroy (fp1); fclose (fptr); return s; } #define INDEX_T 6 static gboolean fit_index_dimension (GfsCartesianGrid * grid, guint * val, GtsFile * fp) { guint i, j; gchar * list[INDEX_T + 2] = {"x", "y", "z", "rx", "ry", "rz", "t", NULL}; if (grid->N > 4) { gts_file_error (fp, "Cartesian grids can only use four dimensions or less"); return FALSE; } for (i = 0; i < grid->N; i++) { gchar ** name = list; j = 0; while (*name != NULL && strcmp (*name, grid->name[i])) { name++; j++; } if (!name) { gts_file_error (fp, "unknown Cartesian grid index `%s'", grid->name[i]); return FALSE; } val[i] = j; } return TRUE; } static gboolean cgd_is_spatial (GfsFunction * f) { guint i; for (i = 0; i < f->g->N; i++) if (f->index[i] < INDEX_T) return TRUE; return FALSE; } static gdouble interpolated_cgd (const GfsFunction * f, const FttVector * r) { gdouble vector[4]; gdouble val; guint i; FttVector p = *r; gboolean mapped = FALSE; for (i = 0; i < f->g->N; i++) if (f->index[i] < 3) { /* x,y,z */ if (!mapped) { gfs_simulation_map_inverse (gfs_object_simulation (f), &p); mapped = TRUE; } vector[i] = (&p.x)[f->index[i]]; } else if (f->index[i] < 6) /* rx,ry,rz */ vector[i] = (&r->x)[f->index[i] - 3]; else { /* t */ g_assert (f->index[i] == INDEX_T); vector[i] = gfs_object_simulation (f)->time.t; } if (!gfs_cartesian_grid_interpolate (f->g, vector, &val)) return 0.; return val; } /** * gfs_function_expression: * @fp: a #GtsFile. * @is_expression: a pointer to a boolean or %NULL. * * Reads the expression (in which case @is_expression is set to %TRUE) * or function from @fp. * * Returns: a newly allocated GString containing the result or %NULL * in case of error. */ GString * gfs_function_expression (GtsFile * fp, gboolean * is_expression) { GString * expr = NULL; g_return_val_if_fail (fp != NULL, NULL); if (is_expression) *is_expression = TRUE; if (fp->type == '{') { gchar * s = gfs_file_statement (fp); if (fp->type == GTS_ERROR) return NULL; expr = g_string_new ("{"); g_string_append (expr, s); g_free (s); g_string_append_c (expr, '}'); if (is_expression) *is_expression = FALSE; return expr; } else { static gchar spaces[] = " \t\f\r"; static gchar operators[] = "+-*/%<>=&^|?:!"; gboolean is_constant = (fp->type == GTS_INT || fp->type == GTS_FLOAT); gint c, scope = 0; gchar * s; gchar empty[] = "", * comments = fp->comments; fp->comments = empty; expr = g_string_new (fp->token->str); s = expr->str; while (*s != '\0') { if (*s == '(') scope++; else if (*s == ')') scope--; s++; } if (fp->next_token != '\0') c = fp->next_token; else { if (fp->type != '(') c = ' '; else c = gts_file_getc (fp); } if (strlen (expr->str) == 1 && gfs_char_in_string (expr->str[0], operators)) while (c != EOF && gfs_char_in_string (c, spaces)) { g_string_append_c (expr, c); c = gts_file_getc (fp); } while (c != EOF) { if (gfs_char_in_string (c, "{}\n")) { fp->next_token = c; break; } else if (scope > 0) { while (c != EOF && scope > 0) { if (c == '(') scope++; else if (c == ')') scope--; g_string_append_c (expr, c); c = gts_file_getc (fp); } } else if (gfs_char_in_string (c, spaces)) { while (c != EOF && gfs_char_in_string (c, spaces)) { g_string_append_c (expr, c); c = gts_file_getc (fp); } if (c == '(') { if (is_constant) { fp->next_token = c; break; } scope++; g_string_append_c (expr, c); c = gts_file_getc (fp); } else { if (!gfs_char_in_string (c, operators)) { fp->next_token = c; break; } is_constant = FALSE; g_string_append_c (expr, c); c = gts_file_getc (fp); while (c != EOF && gfs_char_in_string (c, spaces)) { g_string_append_c (expr, c); c = gts_file_getc (fp); } } } else if (gfs_char_in_string (c, operators)) { is_constant = FALSE; g_string_append_c (expr, c); c = gts_file_getc (fp); while (c != EOF && gfs_char_in_string (c, spaces)) { g_string_append_c (expr, c); c = gts_file_getc (fp); } } else { is_constant = FALSE; if (c == '(') scope++; else if (c == ')') scope--; if (scope < 0) { fp->next_token = c; break; } g_string_append_c (expr, c); c = gts_file_getc (fp); } } g_strchomp (expr->str); fp->comments = comments; return expr; } } static void function_read (GtsObject ** o, GtsFile * fp) { GfsFunction * f = GFS_FUNCTION (*o); GfsSimulation * sim; GfsDomain * domain; if (GTS_OBJECT_CLASS (gfs_function_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_function_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; sim = gfs_object_simulation (*o); domain = GFS_DOMAIN (sim); if (fp->type != GTS_INT && fp->type != GTS_FLOAT && fp->type != GTS_STRING && fp->type != '(' && fp->type != '{') { gts_file_error (fp, "expecting an expression (val)"); return; } if (fp->type == GTS_STRING && !f->spatial && !f->constant && strlen (fp->token->str) > 3) { if (!strcmp (&(fp->token->str[strlen (fp->token->str) - 4]), ".gts")) { if ((f->s = read_surface (fp->token->str, fp)) == NULL) return; f->sname = g_strdup (fp->token->str); gts_file_next_token (fp); return; } else if (!strcmp (&(fp->token->str[strlen (fp->token->str) - 4]), ".cgd")) { if ((f->g = gfs_cartesian_grid_read (fp->token->str, fp)) == NULL) return; if (!fit_index_dimension (f->g, f->index, fp)) return; f->sname = g_strdup (fp->token->str); gts_file_next_token (fp); return; } } if ((f->expr = gfs_function_expression (fp, &f->isexpr)) == NULL) return; if (f->isexpr) { if (fp->type == GTS_INT || fp->type == GTS_FLOAT) { if (!strcmp (fp->token->str, f->expr->str)) { f->val = atof (fp->token->str); f->constant = TRUE; gts_file_next_token (fp); return; } } else if (fp->type == GTS_STRING && !f->spatial && !f->constant) { if ((f->v = gfs_variable_from_name (domain->variables, f->expr->str)) || (f->dv = gfs_derived_variable_from_name (domain->derived_variables, f->expr->str))) { gts_file_next_token (fp); return; } } } gfs_module_new (f, fp->line); if (fp->type == GTS_ERROR) return; gts_file_next_token (fp); } static void function_write (GtsObject * o, FILE * fp) { GfsFunction * f = GFS_FUNCTION (o); if (GTS_OBJECT_CLASS (gfs_function_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_function_class ())->parent_class->write) (o, fp); if (f->expr) fprintf (fp, " %s", f->expr->str); else if (f->v) fprintf (fp, " %s", f->v->name); else if (f->s || f->g) fprintf (fp, " %s", f->sname); else fprintf (fp, " %g", f->val); } static void function_destroy (GtsObject * object) { GfsFunction * f = GFS_FUNCTION (object); if (f->module) gfs_module_unref (f->module, f); if (f->expr) g_string_free (f->expr, TRUE); if (f->s) { gts_object_destroy (GTS_OBJECT (f->s)); g_free (f->sname); } if (f->g) { gts_object_destroy (GTS_OBJECT (f->g)); g_free (f->sname); } g_free (f->var); g_free (f->dvar); (* GTS_OBJECT_CLASS (gfs_function_class ())->parent_class->destroy) (object); } static void gfs_function_class_init (GfsFunctionClass * klass) { GTS_OBJECT_CLASS (klass)->read = function_read; GTS_OBJECT_CLASS (klass)->write = function_write; GTS_OBJECT_CLASS (klass)->destroy = function_destroy; } GfsFunctionClass * gfs_function_class (void) { static GfsFunctionClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_function_info = { "GfsFunction", sizeof (GfsFunction), sizeof (GfsFunctionClass), (GtsObjectClassInitFunc) gfs_function_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_object_class ()), &gfs_function_info); } return klass; } /** * gfs_function_new: * @klass: a #GfsFunctionClass. * @val: a value. * * Returns: a new #GfsFunction with constant value @val. */ GfsFunction * gfs_function_new (GfsFunctionClass * klass, gdouble val) { GfsFunction * object; object = GFS_FUNCTION (gts_object_new (GTS_OBJECT_CLASS (klass))); object->val = val; return object; } GfsFunction * gfs_function_new_from_variable (GfsFunctionClass * klass, GfsVariable * v) { GfsFunction * object; g_return_val_if_fail (v != NULL, NULL); object = GFS_FUNCTION (gts_object_new (GTS_OBJECT_CLASS (klass))); object->v = v; return object; } /** * gfs_function_set_units: * @f: a #GfsFunction. * @units: the units of @f. * * Sets the units of @f. */ void gfs_function_set_units (GfsFunction * f, gdouble units) { g_return_if_fail (f != NULL); f->units = units; } static gdouble interpolated_value (GfsFunction * f, FttVector * p) { GtsPoint q; GtsFace * t; gfs_simulation_map_inverse (gfs_object_simulation (f), p); q.x = p->x; q.y = p->y; t = gts_point_locate (&q, f->s, NULL); if (t == NULL) return 0.; gts_triangle_interpolate_height (GTS_TRIANGLE (t), &q); return q.z; } /** * gfs_function_description: * @f: a #GfsFunction. * @truncate: whether to truncate long descriptions. * * Returns: a newly allocated string describing @f. */ gchar * gfs_function_description (GfsFunction * f, gboolean truncate) { gchar * s; g_return_val_if_fail (f != NULL, NULL); if (f->s) s = g_strdup (f->sname); else if (f->v) s = g_strdup (f->v->name); else if (f->expr) { s = g_strdup (f->expr->str); if (truncate) { gchar * c = s; guint n = 0; while (*c != '\0' && !isspace (*c)) c++; while (*c != '\0' && n < 3) { *c = '.'; c++; n++; } *c = '\0'; } } else s = g_strdup_printf ("%g", f->val); return s; } static gdouble adimensional_value (GfsFunction * f, gdouble v) { gdouble L; if (v == GFS_NODATA || f->units == 0. || (L = gfs_object_simulation (f)->physical_params.L) == 1.) return v; return v*pow (L, - f->units); } /** * gfs_function_value: * @f: a #GfsFunction. * @cell: a #FttCell or %NULL. * * Returns: the value of function @f in @cell. */ gdouble gfs_function_value (GfsFunction * f, FttCell * cell) { g_return_val_if_fail (f != NULL, 0.); g_assert (!pending_functions); gdouble dimensional; if (f->s) { FttVector p; gfs_cell_cm (cell, &p); dimensional = interpolated_value (f, &p); } else if (f->g) { FttVector p = {0.,0.,0.}; if (cgd_is_spatial (f)) gfs_cell_cm (cell, &p); dimensional = interpolated_cgd (f, &p); } else if (f->v) dimensional = gfs_dimensional_value (f->v, GFS_VALUE (cell, f->v)); else if (f->dv) dimensional = (* (GfsFunctionDerivedFunc) f->dv->func) (cell, NULL, gfs_object_simulation (f), f->dv->data); else if (f->f) dimensional = (* f->f) (cell, NULL, gfs_object_simulation (f), f->var, f->dvar); else dimensional = f->val; return adimensional_value (f, dimensional); } /** * gfs_function_face_value: * @f: a #GfsFunction. * @fa: a #FttCellFace. * * Returns: the value of function @f at the center of face @fa. */ gdouble gfs_function_face_value (GfsFunction * f, FttCellFace * fa) { g_return_val_if_fail (f != NULL, 0.); g_return_val_if_fail (fa != NULL, 0.); g_assert (!pending_functions); gdouble dimensional; if (f->s) { FttVector p; ftt_face_pos (fa, &p); dimensional = interpolated_value (f, &p); } else if (f->g) { FttVector p = {0.,0.,0.}; if (cgd_is_spatial (f)) ftt_face_pos (fa, &p); dimensional = interpolated_cgd (f, &p); } else if (f->v) dimensional = gfs_dimensional_value (f->v, gfs_face_interpolated_value_generic (fa, f->v)); else if (f->dv) dimensional = (* (GfsFunctionDerivedFunc) f->dv->func) (NULL, fa, gfs_object_simulation (f), f->dv->data); else if (f->f) dimensional = (* f->f) (NULL, fa, gfs_object_simulation (f), f->var, f->dvar); else dimensional = f->val; return adimensional_value (f, dimensional); } /** * gfs_function_set_constant_value: * @f: a #GfsFunction. * @val: the value. * * Sets the value of the constant function @f to @val. */ void gfs_function_set_constant_value (GfsFunction * f, gdouble val) { g_return_if_fail (f != NULL); g_return_if_fail (!f->f && !f->s && !f->v && !f->dv); f->val = val; f->constant = TRUE; } /** * gfs_function_get_constant_value: * @f: a #GfsFunction. * * Returns: the value of function @f if @f is constant, G_MAXDOUBLE * otherwise. */ gdouble gfs_function_get_constant_value (GfsFunction * f) { g_return_val_if_fail (f != NULL, G_MAXDOUBLE); g_assert (!pending_functions); if (f->f || f->s || f->v || f->dv) return G_MAXDOUBLE; else return adimensional_value (f, f->val); } /** * gfs_function_is_constant: * @f: a #GfsFunction. * * Returns: %TRUE if @f is a constant, %FALSE otherwise. */ gboolean gfs_function_is_constant (const GfsFunction * f) { g_return_val_if_fail (f != NULL, FALSE); return f->constant; } /** * gfs_function_get_variable: * @f: a #GfsFunction. * * Returns: the variable containing the value of @f if @f is a simple * variable, NULL otherwise. */ GfsVariable * gfs_function_get_variable (GfsFunction * f) { g_return_val_if_fail (f != NULL, NULL); return f->v; } /** * gfs_function_read: * @f: a #GfsFunction. * @domain: a #GfsDomain. * @fp: a #GtsFile. * * Calls the read() method of @f. */ void gfs_function_read (GfsFunction * f, gpointer domain, GtsFile * fp) { GtsObject * o = (GtsObject *) f; g_return_if_fail (f != NULL); g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); GTS_OBJECT (f)->reserved = domain; (* GTS_OBJECT (f)->klass->read) (&o, fp); } /** * gfs_function_write: * @f: a #GfsFunction. * @fp: a file pointer. * * Calls the write() method of @f. */ void gfs_function_write (GfsFunction * f, FILE * fp) { g_return_if_fail (f != NULL); g_return_if_fail (fp != NULL); (* GTS_OBJECT (f)->klass->write) (GTS_OBJECT (f), fp); } /** \endobject{GfsFunction} */ /** * Functions of (x,y,z,t). * \beginobject{GfsFunctionSpatial} */ static void gfs_function_spatial_init (GfsFunction * f) { f->spatial = TRUE; } GfsFunctionClass * gfs_function_spatial_class (void) { static GfsFunctionClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_function_info = { "GfsFunctionSpatial", sizeof (GfsFunction), sizeof (GfsFunctionClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) gfs_function_spatial_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_function_class ()), &gfs_function_info); } return klass; } /** * gfs_function_spatial_value: * @f: a #GfsFunction. * @p: a #FttVector. * * Returns: the value of function @f at location @p. */ gdouble gfs_function_spatial_value (GfsFunction * f, const FttVector * p) { g_return_val_if_fail (f != NULL, 0.); g_return_val_if_fail (GFS_IS_FUNCTION_SPATIAL (f), 0.); g_return_val_if_fail (p != NULL, 0.); g_assert (!pending_functions); gdouble dimensional; if (f->f) { GfsSimulation * sim = gfs_object_simulation (f); FttVector q = *p; if (!f->nomap) gfs_simulation_map_inverse (sim, &q); dimensional = (* (GfsFunctionSpatialFunc) f->f) (q.x, q.y, q.z, sim->time.t); } else dimensional = f->val; return adimensional_value (f, dimensional); } GfsFunction * gfs_function_spatial_new (GfsFunctionClass * klass, GfsFunctionSpatialFunc func) { GfsFunction * object; g_return_val_if_fail (func != NULL, NULL); object = GFS_FUNCTION (gts_object_new (GTS_OBJECT_CLASS (klass))); object->f = (GfsFunctionFunc) func; return object; } /** \endobject{GfsFunctionSpatial} */ /** * Abstract class for coordinate transformations. * \beginobject{GfsFunctionMap} */ static void gfs_function_map_init (GfsFunction * f) { f->nomap = TRUE; } GfsFunctionClass * gfs_function_map_class (void) { static GfsFunctionClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_function_info = { "GfsFunctionMap", sizeof (GfsFunction), sizeof (GfsFunctionClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) gfs_function_map_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_function_spatial_class ()), &gfs_function_info); } return klass; } /** \endobject{GfsFunctionMap} */ /** * Symbolic constants. * \beginobject{GfsFunctionConstant} */ static void gfs_function_constant_init (GfsFunction * f) { f->constant = TRUE; } GfsFunctionClass * gfs_function_constant_class (void) { static GfsFunctionClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_function_info = { "GfsFunctionConstant", sizeof (GfsFunction), sizeof (GfsFunctionClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) gfs_function_constant_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_function_class ()), &gfs_function_info); } return klass; } /** * gfs_read_constant: * @fp: a #GtsFile. * @domain: a #GfsDomain. * * Reads a constant value from @fp. * * Returns: the value of the constant or G_MAXDOUBLE if an error * occured. */ gdouble gfs_read_constant (GtsFile * fp, gpointer domain) { g_return_val_if_fail (fp != NULL, G_MAXDOUBLE); g_return_val_if_fail (domain != NULL, G_MAXDOUBLE); GfsFunction * f = gfs_function_new (gfs_function_constant_class (), 0.); gfs_function_read (f, domain, fp); gfs_pending_functions_compilation (fp); if (fp->type == GTS_ERROR) return G_MAXDOUBLE; gdouble val = gfs_function_get_constant_value (f); gts_object_destroy (GTS_OBJECT (f)); if (val == G_MAXDOUBLE) gts_file_error (fp, "expecting a constant"); return val; } /** \endobject{GfsFunctionConstant} */ /** * gfs_object_class_from_name: * @name: the name of the class. * * Looks for a class called @name. If none is found append the "Gfs" * prefix and look again. * * Returns: the class or %NULL if none was found. */ GtsObjectClass * gfs_object_class_from_name (const gchar * name) { GtsObjectClass * klass; g_return_val_if_fail (name != NULL, NULL); if ((klass = gts_object_class_from_name (name))) return klass; /* for backward parameter file compatibility */ if (!strcmp (name, "GtsSurfaceFile")) return GTS_OBJECT_CLASS (gfs_solid_class ()); gchar * ename = g_strconcat ("Gfs", name, NULL); klass = gts_object_class_from_name (ename); g_free (ename); return klass; } static void eigsrt (gdouble d[FTT_DIMENSION], gdouble v[FTT_DIMENSION][FTT_DIMENSION]) { gint k, j, i; gdouble p; for (i = 0; i < FTT_DIMENSION - 1; i++) { p = d[k = i]; for (j = i + 1; j < FTT_DIMENSION; j++) if (d[j] >= p) p = d[k = j]; if (k != i) { d[k] = d[i]; d[i] = p; for (j = 0; j < FTT_DIMENSION; j++) { p = v[j][i]; v[j][i] = v[j][k]; v[j][k] = p; } } } } #define ROTATE(a,i,j,k,l) {g=a[i][j];h=a[k][l];a[i][j]=g-s*(h+g*tau);a[k][l]=h+s*(g-h*tau);} /** * gfs_eigenvalues: * @a: a symmetric matrix. * @d: a vector. * @v: another matrix. * * Fills @d (resp. @v) with the eigenvalues (resp. eigenvectors) of * matrix @a. */ void gfs_eigenvalues (gdouble a[FTT_DIMENSION][FTT_DIMENSION], gdouble d[FTT_DIMENSION], gdouble v[FTT_DIMENSION][FTT_DIMENSION]) { gint j, iq, ip, i; gdouble tresh, theta, tau, t, sm, s, h, g, c, b[FTT_DIMENSION], z[FTT_DIMENSION]; for (ip = 0; ip < FTT_DIMENSION; ip++) { for (iq = 0; iq < FTT_DIMENSION; iq++) v[ip][iq] = 0.0; v[ip][ip] = 1.0; } for (ip = 0; ip < FTT_DIMENSION; ip++) { b[ip] = d[ip] = a[ip][ip]; z[ip] = 0.0; } for (i = 1; i <= 50; i++) { sm = 0.0; for (ip = 0; ip < FTT_DIMENSION - 1; ip++) { for (iq = ip + 1; iq < FTT_DIMENSION; iq++) sm += fabs (a[ip][iq]); } if (sm == 0.0) { eigsrt (d, v); return; } if (i < 4) tresh = 0.2*sm/(FTT_DIMENSION*FTT_DIMENSION); else tresh = 0.0; for (ip = 0; ip < FTT_DIMENSION - 1; ip++) { for (iq = ip + 1; iq < FTT_DIMENSION; iq++) { g = 100.0*fabs (a[ip][iq]); if (i > 4 && fabs(d[ip]) + g == fabs(d[ip]) && fabs(d[iq]) + g == fabs(d[iq])) a[ip][iq] = 0.0; else if (fabs (a[ip][iq]) > tresh) { h = d[iq] - d[ip]; if (fabs(h) + g == fabs(h)) t = a[ip][iq]/h; else { theta = 0.5*h/a[ip][iq]; t = 1.0/(fabs (theta) + sqrt (1.0 + theta*theta)); if (theta < 0.0) t = -t; } c = 1.0/sqrt (1 + t*t); s = t*c; tau = s/(1.0 + c); h = t*a[ip][iq]; z[ip] -= h; z[iq] += h; d[ip] -= h; d[iq] += h; a[ip][iq] = 0.0; for (j = 0; j <= ip - 1; j++) ROTATE (a, j, ip, j, iq); for (j = ip + 1; j <= iq - 1; j++) ROTATE (a, ip, j, j, iq); for (j = iq + 1; j < FTT_DIMENSION; j++) ROTATE(a, ip, j, iq, j); for (j = 0; j < FTT_DIMENSION; j++) ROTATE(v, j, ip, j, iq); } } } for (ip = 0; ip < FTT_DIMENSION; ip++) { b[ip] += z[ip]; d[ip] = b[ip]; z[ip] = 0.0; } } /* Too many iterations */ for (i = 0; i < FTT_DIMENSION; i++) { for (j = 0; j < FTT_DIMENSION; j++) fprintf (stderr, "%10.3g ", a[i][j]); fprintf (stderr, "\n"); } g_assert_not_reached (); } /** * gfs_matrix_inverse: * @m: a square matrix. * @n: size of the matrix. * @pivmin: the minimum value of the pivoting coefficient. * * Replaces @m with its inverse. * * Returns: 0. if the inversion encounters a pivot coefficient smaller * than or equal to @pivmin (i.e. @m is non-invertible), the minimum * absolute value of the pivoting coefficient otherwise. */ gdouble gfs_matrix_inverse (gdouble ** m, guint n, gdouble pivmin) { gint * indxc, * indxr, * ipiv; gint i, icol = 0, irow = 0, j, k, l, ll; gdouble big, dum, pivinv, temp, minpiv = G_MAXDOUBLE; g_return_val_if_fail (m != NULL, 0.); g_return_val_if_fail (pivmin >= 0., 0.); indxc = g_malloc (sizeof (gint)*n); indxr = g_malloc (sizeof (gint)*n); ipiv = g_malloc (sizeof (gint)*n); #define SWAP(a,b) {temp=(a);(a)=(b);(b)=temp;} for (j = 0; j < n; j++) ipiv[j] = -1; for (i = 0; i < n; i++) { big = 0.0; for (j = 0; j < n; j++) if (ipiv[j] != 0) for (k = 0; k < n; k++) { if (ipiv[k] == -1) { if (fabs (m[j][k]) >= big) { big = fabs (m[j][k]); irow = j; icol = k; } } } ipiv[icol]++; if (irow != icol) for (l = 0; l < n; l++) SWAP (m[irow][l], m[icol][l]); indxr[i] = irow; indxc[i] = icol; if (fabs (m[icol][icol]) <= pivmin) { g_free (indxc); g_free (indxr); g_free (ipiv); return 0.; } if (fabs (m[icol][icol]) < minpiv) minpiv = fabs (m[icol][icol]); pivinv = 1.0/m[icol][icol]; m[icol][icol] = 1.0; for (l = 0; l < n; l++) m[icol][l] *= pivinv; for (ll = 0; ll < n; ll++) if (ll != icol) { dum = m[ll][icol]; m[ll][icol] = 0.0; for (l = 0; l < n; l++) m[ll][l] -= m[icol][l]*dum; } } for (l = n - 1; l >= 0; l--) { if (indxr[l] != indxc[l]) for (k = 0; k < n; k++) SWAP (m[k][indxr[l]], m[k][indxc[l]]); } g_free (indxc); g_free (indxr); g_free (ipiv); return minpiv; } /** * gfs_matrix_new: * @n: the size of the matrix. * @p: the size of the matrix. * @size: the size of the matrix elements. * * The matrix elements are initialised to zero. * * Returns: a newly allocated matrix. */ gpointer gfs_matrix_new (guint n, guint p, guint size) { guint i; gpointer * m; gchar * a; g_return_val_if_fail (n > 0, NULL); g_return_val_if_fail (p > 0, NULL); g_return_val_if_fail (size > 0, NULL); m = g_malloc (n*sizeof (gpointer)); a = g_malloc0 (n*p*size); for (i = 0; i < n; i++) m[i] = a + i*p*size; return m; } /** * gfs_matrix_free: * @m: a matrix allocated with gfs_matrix_new(). * * Frees the memory occupied by @m. */ void gfs_matrix_free (gpointer m) { g_return_if_fail (m != NULL); g_free (((gpointer *) m)[0]); g_free (m); } /** * gfs_clock_new: * * Returns: a new #GfsClock. */ GfsClock * gfs_clock_new (void) { GfsClock * t = g_malloc (sizeof (GfsClock)); t->start = -1; t->started = FALSE; return t; } /** * gfs_clock_start: * @t: a #GfsClock. * * Starts clock @t. */ void gfs_clock_start (GfsClock * t) { struct tms tm; g_return_if_fail (t != NULL); g_return_if_fail (!t->started); if (times (&tm) == (clock_t) -1) g_warning ("cannot read clock"); t->start = tm.tms_utime; t->started = TRUE; } /** * gfs_clock_stop: * @t: a #GfsClock. * * Stops clock @t. */ void gfs_clock_stop (GfsClock * t) { struct tms tm; g_return_if_fail (t != NULL); g_return_if_fail (t->started); if (times (&tm) == (clock_t) -1) g_warning ("cannot read clock"); t->stop = tm.tms_utime; t->started = FALSE; } /** * gfs_clock_elapsed: * @t: a #GfsClock. * * Returns: the time elapsed in seconds since @t was started. */ gdouble gfs_clock_elapsed (GfsClock * t) { g_return_val_if_fail (t != NULL, 0.); g_return_val_if_fail (t->start >= 0, 0.); if (t->started == FALSE) return (t->stop - t->start)/(gdouble) sysconf (_SC_CLK_TCK); else { struct tms tm; if (times (&tm) == (clock_t) -1) g_warning ("cannot read clock"); return (tm.tms_utime - t->start)/(gdouble) sysconf (_SC_CLK_TCK); } } /** * gfs_clock_destroy: * @t: a #GfsClock. * * Destroys the clock, freeing the memory allocated for it. */ void gfs_clock_destroy (GfsClock * t) { g_return_if_fail (t != NULL); g_free (t); } /** * gfs_union_open: * @fp: a file pointer. * @rank: the rank of the current parallel process. * @file: a #GfsUnionFile. * * Opens a "parallel" file which serialises multiple parallel (write) * accesses to the file pointed to by @fp. * * This file must be closed with gfs_union_close(). * * Returns: a "parallel" file pointer associated with @fp. */ FILE * gfs_union_open (FILE * fp, int rank, GfsUnionFile * file) { g_return_val_if_fail (fp != NULL, NULL); g_return_val_if_fail (file != NULL, NULL); if (rank <= 0) /* master */ return fp; else { /* slaves */ #ifdef HAVE_MPI MPI_Status status; int pe; MPI_Recv (&pe, 1, MPI_INT, 0, rank, MPI_COMM_WORLD, &status); g_assert (rank == pe); #endif /* HAVE_MPI */ file->fp = open_memstream (&file->buf, &file->len); if (file->fp == NULL) g_error ("gfs_union_open(): could not open_memstream:\n%s", strerror (errno)); return file->fp; } } /** * gfs_union_close: * @fp: a file pointer. * @rank: the rank of the current parallel process. * @file: a #GfsUnionFile returned by a call to gfs_union_open(). * * Closes a "parallel" file previously opened using gfs_union_open(). */ void gfs_union_close (FILE * fp, int rank, GfsUnionFile * file) { g_return_if_fail (fp != NULL); g_return_if_fail (file != NULL); if (rank == 0) { /* master */ #ifdef HAVE_MPI int pe, npe; MPI_Comm_size (MPI_COMM_WORLD, &npe); for (pe = 1; pe < npe; pe++) { MPI_Send (&pe, 1, MPI_INT, pe, pe, MPI_COMM_WORLD); MPI_Status status; long length; MPI_Recv (&length, 1, MPI_LONG, pe, pe, MPI_COMM_WORLD, &status); /* fprintf (stderr, "receiving %ld bytes from PE %d\n", length, pe); */ if (length > 0) { char * buf = g_malloc (length); MPI_Recv (buf, length, MPI_BYTE, pe, pe + 1, MPI_COMM_WORLD, &status); int rcvcount; MPI_Get_count (&status, MPI_BYTE, &rcvcount); fwrite (buf, 1, rcvcount, fp); g_free (buf); } } #endif /* HAVE_MPI */ } else if (rank > 0) { /* slaves */ fclose (file->fp); long length = file->len; #ifdef HAVE_MPI MPI_Send (&length, 1, MPI_LONG, 0, rank, MPI_COMM_WORLD); if (length > 0) MPI_Send (file->buf, length, MPI_BYTE, 0, rank + 1, MPI_COMM_WORLD); #endif /* HAVE_MPI */ if (length > 0) g_free (file->buf); } } static GfsFormat * format_new (const gchar * s, guint len, GfsFormatType t) { GfsFormat * f = g_malloc (sizeof (GfsFormat)); f->s = g_strndup (s, len); f->t = t; return f; } static void format_destroy (GfsFormat * f) { g_free (f->s); g_free (f); } /** * gfs_format_new: * @format: a string. * @fp: a #GtsFile or %NULL. * @dynamic: set to %TRUE if the format is time-dependent. * @parallel: set to %TRUE if the format is PID-dependent. * * If @fp is not %NULL and and error occurs, an error message is set * in @fp. * * Returns: a list of #GfsFormat composing @format. */ GSList * gfs_format_new (const gchar * format, GtsFile * fp, gboolean * dynamic, gboolean * parallel) { g_return_val_if_fail (format != NULL, NULL); GSList * formats = NULL; const gchar * c, * start; guint len; start = c = format; while (*c != '\0') { if (*c == '%') { const gchar * startf = c, * prev = c; len = startf - start; if (len > 0) formats = g_slist_prepend (formats, format_new (start, len, GFS_NONE_FORMAT)); len = 1; c++; while (*c != '\0' && !gfs_char_in_string (*c, "diouxXeEfFgGaAcsCSpn%")) { prev = c; c++; len++; } len++; if (*c == '%') formats = g_slist_prepend (formats, format_new ("%", 1, GFS_NONE_FORMAT)); else if (gfs_char_in_string (*c, "diouxXc")) { if (*prev == 'l') { formats = g_slist_prepend (formats, format_new (startf, len, GFS_ITER_FORMAT)); if (dynamic) *dynamic = TRUE; } else { formats = g_slist_prepend (formats, format_new (startf, len, GFS_PID_FORMAT)); if (parallel) *parallel = TRUE; } } else if (gfs_char_in_string (*c, "eEfFgGaA")) { formats = g_slist_prepend (formats, format_new (startf, len, GFS_TIME_FORMAT)); if (dynamic) *dynamic = TRUE; } else { if (fp) gts_file_error (fp, "unknown conversion specifier `%c' of format `%s'", *c, format); return NULL; } start = c; start++; } c++; } len = c - start; if (len > 0) formats = g_slist_prepend (formats, format_new (start, len, GFS_NONE_FORMAT)); formats = g_slist_reverse (formats); return formats; } /** * gfs_format_destroy: * @f: a list of #GfsFormat. * * Frees all memory allocated for @f. */ void gfs_format_destroy (GSList * f) { g_slist_foreach (f, (GFunc) format_destroy, NULL); g_slist_free (f); } /** * gfs_format_string: * @format: a GSList of #GfsFormat. * @pid: the PID. * @niter: number of iterations done in the simulation. * @time: simulation time. * * Returns: a newly-allocated string (file name) built from the * GfsFormat contained in GSList. It typically includes informations * on the PID, the time and/or the number of iterations done in the * simulation. */ gchar * gfs_format_string (GSList * format, gint pid, guint niter, gdouble time) { gchar * s = g_strdup (""); while (format) { GfsFormat * f = format->data; gchar * s1, * s2 = NULL; switch (f->t) { case GFS_NONE_FORMAT: s2 = g_strconcat (s, f->s, NULL); break; case GFS_PID_FORMAT: s1 = g_strdup_printf (f->s, pid); s2 = g_strconcat (s, s1, NULL); g_free (s1); break; case GFS_ITER_FORMAT: s1 = g_strdup_printf (f->s, niter); s2 = g_strconcat (s, s1, NULL); g_free (s1); break; case GFS_TIME_FORMAT: s1 = g_strdup_printf (f->s, time); s2 = g_strconcat (s, s1, NULL); g_free (s1); break; default: g_assert_not_reached (); } g_free (s); s = s2; format = format->next; } return s; } /** * gfs_format_time_value: * @format: a list of #GfsFormat. * @string: a string formatted according to @format. * * Returns: the value of the time or iteration contained in @s or * %G_MAXDOUBLE if @s is not formatted according to @format. * */ gdouble gfs_format_time_value (GSList * format, const gchar * string) { gdouble val = G_MAXDOUBLE, tmp; g_return_val_if_fail (string != NULL, val); gchar * copy = g_strdup (string), * s = copy; while (format) { GfsFormat * f = format->data; gchar * c, c1; switch (f->t) { case GFS_NONE_FORMAT: c = f->s; while (*c != '\0' && *c == *s) { c++; s++; } if (*c != '\0') { g_free (copy); return val; } break; case GFS_ITER_FORMAT: c = s; while (gfs_char_in_string (*s, "0123456789")) s++; c1 = *s; *s = '\0'; tmp = atoi (c); *s = c1; if (val != G_MAXDOUBLE && tmp != val) { g_free (copy); return G_MAXDOUBLE; } val = tmp; break; case GFS_TIME_FORMAT: c = s; while (gfs_char_in_string (*s, "0123456789eE-+.")) s++; c1 = *s; *s = '\0'; tmp = atof (c); *s = c1; if (val != G_MAXDOUBLE && tmp != val) { g_free (copy); return G_MAXDOUBLE; } val = tmp; break; default: g_assert_not_reached (); } format = format->next; } g_free (copy); return val; } /** * gfs_cell_message: * @cell: a #FttCell. * @format: a string format. * ...: arguments for format. * * Logs a message preceded by the pointer, position and level of @cell. */ void gfs_cell_message (const FttCell * cell, const gchar * format, ...) { g_return_if_fail (cell != NULL); g_return_if_fail (format != NULL); FttVector p; ftt_cell_pos (cell, &p); gchar * s = g_strdup_printf ("%p:(%g,%g,%g):%d", cell, p.x, p.y, p.z, ftt_cell_level (cell)); va_list ap; va_start (ap, format); gchar * s1 = g_strdup_vprintf (format, ap); g_message ("%s\n%s", s, s1); g_free (s); g_free (s1); } static gboolean GfsDebug = FALSE; /** * gfs_debug: * @format: a string format. * ...: arguments for format. * * Logs a debugging message (only when gfs_debug_enabled() is set to * %TRUE). */ void gfs_debug (const gchar * format, ...) { if (GfsDebug) { g_return_if_fail (format != NULL); va_list ap; va_start (ap, format); g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, ap); } } /** * gfs_debug_enabled: * @enabled: whether to enable debug message logging. * * Enables or disables debug message logging (see also gfs_debug()). */ void gfs_debug_enabled (gboolean enabled) { GfsDebug = enabled; } /** * gfs_read_vector: * @fp: a #GtsFile. * @component: an array of vector component names. * * Reads a vector from @fp and fills @component. Note that the * component strings need to be freed after use. * * Returns: %TRUE if all vector components have been read, %FALSE * otherwise, in which case the error is reported in @fp. */ gboolean gfs_read_vector (GtsFile * fp, gchar * component[FTT_DIMENSION]) { g_return_val_if_fail (fp != NULL, FALSE); g_return_val_if_fail (component != NULL, FALSE); if (fp->type != '(') { gts_file_error (fp, "expecting an opening bracket '('"); return FALSE; } gint c = gts_file_getc (fp), parlevel = 0, n = 0; GString * s = g_string_new (""); while ((parlevel > 0 || c != ')') && c != EOF) { if (c == ',' && parlevel == 0) { /* end of component */ if (n == FTT_DIMENSION) { gts_file_error (fp, "too many vector components"); gint i; for (i = 0; i < n; i++) g_free (component[i]); g_string_free (s, TRUE); return FALSE; } component[n++] = s->str; g_string_free (s, FALSE); s = g_string_new (""); } else { /* expression */ g_string_append_c (s, c); if (c == '(' || c == '[' || c == '{') parlevel++; else if (c == ')' || c == ']' || c == '}') parlevel--; } c = gts_file_getc (fp); } if (c != ')') { gts_file_error (fp, "parse error (missing closing bracket ')'?)"); gint i; for (i = 0; i < n; i++) g_free (component[i]); g_string_free (s, TRUE); return FALSE; } if (n != FTT_DIMENSION - 1) { gts_file_error (fp, "not enough vector components"); gint i; for (i = 0; i < n; i++) g_free (component[i]); g_string_free (s, TRUE); return FALSE; } component[n++] = s->str; g_string_free (s, FALSE); gts_file_next_token (fp); return TRUE; } /** * gfs_read_variable_vector: * @fp: a #GtsFile. * @vector: an array of vector component variables. * @domain: the #GfsDomain to which @vector belongs. * * Reads a vector from @fp and fills @vector. * * Returns: %TRUE if all vector components have been read, %FALSE * otherwise, in which case the error is reported in @fp. */ gboolean gfs_read_variable_vector (GtsFile * fp, GfsVariable * vector[FTT_DIMENSION], GfsDomain * domain) { g_return_val_if_fail (fp != NULL, FALSE); g_return_val_if_fail (vector != NULL, FALSE); g_return_val_if_fail (domain != NULL, FALSE); gchar * component[FTT_DIMENSION]; if (!gfs_read_vector (fp, component)) return FALSE; gint i; gboolean status = TRUE; for (i = 0; i < FTT_DIMENSION && status; i++) { if (!(vector[i] = gfs_variable_from_name (domain->variables, component[i]))) { gts_file_error (fp, "unknown variable '%s'", component[i]); status = FALSE; } else if (vector[i]->component != i) { gts_file_error (fp, "variable '%s' is not the correct vector component", component[i]); status = FALSE; } } for (i = 0; i < FTT_DIMENSION; i++) g_free (component[i]); return status; } /** * gfs_read_function_vector: * @fp: a #GtsFile. * @vector: an array of vector component variables. * @function: an array of vector component #GfsFunction corresponding * to @vector. * @sim: the #GfsSimulation to which @vector belongs. * * Reads a vector from @fp and fills @vector. * * Returns: %TRUE if all vector components have been read, %FALSE * otherwise, in which case the error is reported in @fp. */ gboolean gfs_read_function_vector (GtsFile * fp, GfsVariable * vector[FTT_DIMENSION], GfsFunction * function[FTT_DIMENSION], gpointer sim) { g_return_val_if_fail (fp != NULL, FALSE); g_return_val_if_fail (vector != NULL, FALSE); g_return_val_if_fail (function != NULL, FALSE); g_return_val_if_fail (sim != NULL, FALSE); gchar * component[FTT_DIMENSION]; if (!gfs_read_vector (fp, component)) return FALSE; gboolean status = TRUE; gint i; for (i = 0; i < FTT_DIMENSION && status; i++) { function[i] = gfs_function_new (gfs_function_class (), 0.); gfs_function_set_units (function[i], vector[i]->units); GtsFile * fp1 = gts_file_new_from_string (component[i]); gfs_function_read (function[i], sim, fp1); if (fp1->type == GTS_ERROR) { gts_file_error (fp, "%s", fp1->error); gint j; for (j = 0; j <= i; j++) { gts_object_destroy (GTS_OBJECT (function[i])); function[i] = NULL; } status = FALSE; } gts_file_destroy (fp1); } for (i = 0; i < FTT_DIMENSION; i++) g_free (component[i]); return status; } gerris-snapshot-131206/src/utils.h0000644000175100017510000002513512250371171013770 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __UTILS_H__ #define __UTILS_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #include #include "ftt.h" #ifdef HAVE_CONFIG_H # include "config.h" # ifdef HAVE_MPI # include # define gfs_all_reduce(domain, p, type, op) { \ if ((domain)->pid >= 0) { \ union { int a; float b; double c;} global; \ MPI_Allreduce (&(p), &global, 1, type, op, MPI_COMM_WORLD); \ memcpy (&(p), &global, sizeof (p)); \ } \ } # define gfs_error(pid, ...) { \ int rank; \ MPI_Comm_rank (MPI_COMM_WORLD, &rank); \ if (rank == (pid)) \ fprintf (stderr, __VA_ARGS__); \ else if ((pid) < 0) { \ int size; \ MPI_Comm_size (MPI_COMM_WORLD, &size); \ if (size > 1) { \ char name[MPI_MAX_PROCESSOR_NAME]; \ MPI_Get_processor_name (name, &size); \ fprintf (stderr, "PE %d (%s): ", rank, name); \ } \ fprintf (stderr, __VA_ARGS__); \ } \ } # else /* doesn't HAVE_MPI */ /* gfs_all_reduce() defaults to nothing without MPI */ # define gfs_all_reduce(domain, p, type, op) # define gfs_error(pid, ...) fprintf(stderr, __VA_ARGS__) # endif /* doesn't HAVE_MPI */ #endif /* HAVE_CONFIG_H */ #if !HAVE_G_MKDTEMP gchar * g_mkdtemp (gchar * tmpl); #endif #if !HAVE_OPEN_MEMSTREAM FILE * open_memstream (char **buf, size_t *len); #endif #ifndef M_PI # define M_PI 3.14159265358979323846 #endif #define GFS_DOUBLE_TO_POINTER(d) (*((gpointer *) &(d))) #define GFS_NODATA G_MAXDOUBLE #define GFS_HAS_DATA(cell,v) (GFS_VALUE (cell, v) != GFS_NODATA) gchar * gfs_mkftemp (gchar * tmpl); gchar * gfs_template (void); gboolean gfs_char_in_string (char c, const char * s); gchar * gfs_file_statement (GtsFile * fp); void gfs_object_clone (GtsObject * object, GtsObject * clone); /* GfsGlobal: Header */ typedef struct _GfsGlobal GfsGlobal; #define GFS_GLOBAL(obj) GTS_OBJECT_CAST (obj,\ GfsGlobal,\ gfs_global_class ()) #define GFS_IS_GLOBAL(obj) (gts_object_is_from_class (obj,\ gfs_global_class ())) GtsObjectClass * gfs_global_class (void); /* GfsFunction: Header */ typedef struct _GfsFunction GfsFunction; typedef struct _GfsFunctionClass GfsFunctionClass; struct _GfsFunctionClass { GtsObjectClass parent_class; }; #define GFS_FUNCTION(obj) GTS_OBJECT_CAST (obj,\ GfsFunction,\ gfs_function_class ()) #define GFS_FUNCTION_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsFunctionClass,\ gfs_function_class()) #define GFS_IS_FUNCTION(obj) (gts_object_is_from_class (obj,\ gfs_function_class ())) GfsFunctionClass * gfs_function_class (void); GfsFunction * gfs_function_new (GfsFunctionClass * klass, gdouble val); GfsFunction * gfs_function_new_from_variable (GfsFunctionClass * klass, GfsVariable * v); void gfs_function_set_units (GfsFunction * f, gdouble units); gchar * gfs_function_description (GfsFunction * f, gboolean truncate); gdouble gfs_function_face_value (GfsFunction * f, FttCellFace * fa); gdouble gfs_function_value (GfsFunction * f, FttCell * cell); void gfs_function_set_constant_value (GfsFunction * f, gdouble val); gdouble gfs_function_get_constant_value (GfsFunction * f); gboolean gfs_function_is_constant (const GfsFunction * f); GfsVariable * gfs_function_get_variable (GfsFunction * f); void gfs_function_read (GfsFunction * f, gpointer domain, GtsFile * fp); void gfs_function_write (GfsFunction * f, FILE * fp); GString * gfs_function_expression (GtsFile * fp, gboolean * is_expression); void gfs_pending_functions_compilation (GtsFile * fp); /* GfsFunctionSpatial: Header */ #define GFS_IS_FUNCTION_SPATIAL(obj) (gts_object_is_from_class (obj,\ gfs_function_spatial_class ())) typedef gdouble (* GfsFunctionSpatialFunc) (double x, double y, double z, double t); GfsFunctionClass * gfs_function_spatial_class (void); GfsFunction * gfs_function_spatial_new (GfsFunctionClass * klass, GfsFunctionSpatialFunc func); gdouble gfs_function_spatial_value (GfsFunction * f, const FttVector * p); /* GfsFunctionMap: Header */ #define GFS_IS_FUNCTION_MAP(obj) (gts_object_is_from_class (obj,\ gfs_function_map_class ())) GfsFunctionClass * gfs_function_map_class (void); /* GfsFunctionConstant: Header */ #define GFS_IS_FUNCTION_CONSTANT(obj) (gts_object_is_from_class (obj,\ gfs_function_constant_class ())) GfsFunctionClass * gfs_function_constant_class (void); gdouble gfs_read_constant (GtsFile * fp, gpointer domain); GtsObjectClass * gfs_object_class_from_name (const gchar * name); void gfs_eigenvalues (gdouble a[FTT_DIMENSION][FTT_DIMENSION], gdouble d[FTT_DIMENSION], gdouble v[FTT_DIMENSION][FTT_DIMENSION]); gdouble gfs_matrix_inverse (gdouble ** m, guint n, gdouble pivmin); gpointer gfs_matrix_new (guint n, guint p, guint size); void gfs_matrix_free (gpointer m); typedef struct { gboolean started; glong start, stop; } GfsClock; GfsClock * gfs_clock_new (void); void gfs_clock_start (GfsClock * t); void gfs_clock_stop (GfsClock * t); gdouble gfs_clock_elapsed (GfsClock * t); void gfs_clock_destroy (GfsClock * t); typedef struct { FILE * fp; char * buf; size_t len; } GfsUnionFile; FILE * gfs_union_open (FILE * fp, int rank, GfsUnionFile * file); void gfs_union_close (FILE * fp, int rank, GfsUnionFile * file); /* GfsFormat: Header */ typedef struct _GfsFormat GfsFormat; typedef enum { GFS_ITER_FORMAT, GFS_TIME_FORMAT, GFS_PID_FORMAT, GFS_NONE_FORMAT } GfsFormatType; struct _GfsFormat { gchar * s; GfsFormatType t; }; GSList * gfs_format_new (const gchar * format, GtsFile * fp, gboolean * dynamic, gboolean * parallel); void gfs_format_destroy (GSList * f); gchar * gfs_format_string (GSList * format, gint pid, guint niter, gdouble time); gdouble gfs_format_time_value (GSList * format, const gchar * string); void gfs_cell_message (const FttCell * cell, const gchar *format, ...); void gfs_debug (const gchar * format, ...); void gfs_debug_enabled (gboolean enabled); gboolean gfs_read_vector (GtsFile * fp, gchar * component[FTT_DIMENSION]); gboolean gfs_read_variable_vector (GtsFile * fp, GfsVariable * vector[FTT_DIMENSION], GfsDomain * domain); gboolean gfs_read_function_vector (GtsFile * fp, GfsVariable * vector[FTT_DIMENSION], GfsFunction * function[FTT_DIMENSION], gpointer sim); /* The code below redefines the g_assert() macros so that they behave consistently between Glib versions. In particular, we want to be able to add error handlers. */ #undef g_assert #undef g_assert_not_reached #ifdef G_DISABLE_ASSERT #define g_assert(expr) G_STMT_START{ (void)0; }G_STMT_END #define g_assert_not_reached() G_STMT_START{ (void)0; }G_STMT_END #else /* !G_DISABLE_ASSERT */ #ifdef __GNUC__ #define g_assert(expr) G_STMT_START{ \ if G_LIKELY(expr) { } else { \ g_log (G_LOG_DOMAIN, \ G_LOG_LEVEL_ERROR, \ "file %s: line %d (%s): assertion failed: (%s)", \ __FILE__, \ __LINE__, \ __PRETTY_FUNCTION__, \ #expr); \ abort ();} }G_STMT_END #define g_assert_not_reached() G_STMT_START{ \ g_log (G_LOG_DOMAIN, \ G_LOG_LEVEL_ERROR, \ "file %s: line %d (%s): should not be reached", \ __FILE__, \ __LINE__, \ __PRETTY_FUNCTION__); \ abort (); }G_STMT_END #else /* !__GNUC__ */ #define g_assert(expr) G_STMT_START{ \ if (expr) { } else \ g_log (G_LOG_DOMAIN, \ G_LOG_LEVEL_ERROR, \ "file %s: line %d: assertion failed: (%s)", \ __FILE__, \ __LINE__, \ #expr); }G_STMT_END #define g_assert_not_reached() G_STMT_START{ \ g_log (G_LOG_DOMAIN, \ G_LOG_LEVEL_ERROR, \ "file %s: line %d: should not be reached", \ __FILE__, \ __LINE__); }G_STMT_END #endif /* __GNUC__ */ #endif /* !G_DISABLE_ASSERT */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __UTILS_H__ */ gerris-snapshot-131206/src/refine.c0000644000175100017510000003670612250371171014101 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Static mesh refinement. */ #include #include "refine.h" #include "solid.h" #include "adaptive.h" #include "init.h" /** * Simple definition of the refinement levels. * \beginobject{GfsRefine} */ static gboolean refine_maxlevel (FttCell * cell, GfsFunction * maxlevel) { return (ftt_cell_level (cell) < gfs_function_value (maxlevel, cell)); } static void refine_box (GfsBox * box, GfsFunction * maxlevel) { ftt_cell_refine (box->root, (FttCellRefineFunc) refine_maxlevel, maxlevel, (FttCellInitFunc) gfs_cell_fine_init, gfs_box_domain (box)); } static void gfs_refine_refine (GfsRefine * refine, GfsSimulation * sim) { gfs_catch_floating_point_exceptions (); gts_container_foreach (GTS_CONTAINER (sim), (GtsFunc) refine_box, refine->maxlevel); gfs_restore_fpe_for_function (refine->maxlevel); } static void gfs_refine_destroy (GtsObject * o) { gts_object_destroy (GTS_OBJECT (GFS_REFINE (o)->maxlevel)); (* GTS_OBJECT_CLASS (gfs_refine_class ())->parent_class->destroy) (o); } static void gfs_refine_write (GtsObject * object, FILE * fp) { fprintf (fp, "%s", object->klass->info.name); gfs_function_write (GFS_REFINE (object)->maxlevel, fp); } static void gfs_refine_read (GtsObject ** o, GtsFile * fp) { GfsRefine * refine = GFS_REFINE (*o); GtsObjectClass * klass; gboolean class_changed = FALSE; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (GfsRefineClass)"); return; } klass = gfs_object_class_from_name (fp->token->str); if (klass == NULL) { gts_file_error (fp, "unknown class `%s'", fp->token->str); return; } if (!gts_object_class_is_from_class (klass, gfs_refine_class ())) { gts_file_error (fp, "`%s' is not a GfsRefine", fp->token->str); return; } if (klass != (*o)->klass) { *o = gts_object_new (klass); gts_object_destroy (GTS_OBJECT (refine)); refine = GFS_REFINE (*o); class_changed = TRUE; } gts_file_next_token (fp); gfs_function_read (refine->maxlevel, gfs_object_simulation (refine), fp); if (fp->type == GTS_ERROR) return; if (class_changed && fp->type != '\n' && klass->read) (* klass->read) (o, fp); } static void gfs_refine_class_init (GfsRefineClass * klass) { klass->refine = gfs_refine_refine; GTS_OBJECT_CLASS (klass)->destroy = gfs_refine_destroy; GTS_OBJECT_CLASS (klass)->write = gfs_refine_write; GTS_OBJECT_CLASS (klass)->read = gfs_refine_read; } static void gfs_refine_init (GfsRefine * object) { object->maxlevel = gfs_function_new (gfs_function_class (), 1.); } GfsRefineClass * gfs_refine_class (void) { static GfsRefineClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_refine_info = { "GfsRefine", sizeof (GfsRefine), sizeof (GfsRefineClass), (GtsObjectClassInitFunc) gfs_refine_class_init, (GtsObjectInitFunc) gfs_refine_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_slist_containee_class ()), &gfs_refine_info); } return klass; } GfsRefine * gfs_refine_new (GfsRefineClass * klass) { GfsRefine * object; object = GFS_REFINE (gts_object_new (GTS_OBJECT_CLASS (klass))); return object; } /** \endobject{GfsRefine} */ /** * Refine embedded solid surfaces. * \beginobject{GfsRefineSolid} */ typedef struct _GfsRefineSolid GfsRefineSolid; struct _GfsRefineSolid { GfsRefine parent; GfsDerivedVariable * v; }; #define GFS_REFINE_SOLID(obj) GTS_OBJECT_CAST (obj,\ GfsRefineSolid,\ gfs_refine_solid_class ()) static void refine_solid_destroy (GtsObject * object) { gfs_domain_remove_derived_variable (GFS_DOMAIN (gfs_object_simulation (object)), "SolidCurvature"); (* GTS_OBJECT_CLASS (gfs_refine_solid_class ())->parent_class->destroy) (object); } typedef struct { GtsSurface * s; gdouble kappa; } KappaData; static void max_kappa (GtsVertex * v, KappaData * d) { GtsVector Kh; if (gts_vertex_mean_curvature_normal (v, d->s, Kh)) { gdouble kappa = gts_vector_norm (Kh)/(FTT_DIMENSION - 1); if (kappa > d->kappa) d->kappa = kappa; } } static gdouble solid_curvature (FttCell * cell, FttCellFace * face, GfsDomain * domain, GfsGenericSurface * s) { KappaData d; d.kappa = gfs_solid_is_thin (cell, s) ? 1./ftt_cell_size (cell) : 0.; d.s = GFS_SURFACE (s)->s; gts_surface_foreach_vertex (d.s, (GtsFunc) max_kappa, &d); return d.kappa; } static void refine_solid_read (GtsObject ** o, GtsFile * fp) { GfsRefineSolid * refine = GFS_REFINE_SOLID (*o); GfsDerivedVariableInfo v = { "SolidCurvature", "curvature of the solid boundary", solid_curvature }; refine->v = gfs_domain_add_derived_variable (GFS_DOMAIN (gfs_object_simulation (*o)), v); if (!refine->v) { gts_file_error (fp, "derived variable `SolidCurvature' already defined"); return; } (* GTS_OBJECT_CLASS (gfs_refine_solid_class ())->parent_class->read) (o, fp); } typedef struct { GfsRefine * refine; GfsDomain * domain; GfsGenericSurface * surface; } RefineCut; static void refine_cut_cell (FttCell * cell, GfsGenericSurface * s, RefineCut * p) { GTS_OBJECT (s)->reserved = p->surface; GFS_REFINE_SOLID (p->refine)->v->data = s; if (ftt_cell_level (cell) < gfs_function_value (p->refine->maxlevel, cell)) ftt_cell_refine_single (cell, p->domain->cell_init, p->domain->cell_init_data); GFS_REFINE_SOLID (p->refine)->v->data = NULL; } static void refine_implicit_cell (FttCell * cell, RefineCut * p) { guint maxlevel = gfs_function_value (p->refine->maxlevel, cell); if (ftt_cell_level (cell) < maxlevel && gfs_cell_is_cut (cell, p->surface, FALSE, maxlevel)) ftt_cell_refine_single (cell, p->domain->cell_init, p->domain->cell_init_data); } static void gfs_refine_solid_refine (GfsRefine * refine, GfsSimulation * sim) { if (sim->solids) { RefineCut p; p.refine = refine; p.domain = GFS_DOMAIN (sim); GSList * i = sim->solids->items; while (i) { p.surface = GFS_SOLID (i->data)->s; gfs_catch_floating_point_exceptions (); if (GFS_SURFACE (p.surface)->s) gfs_domain_traverse_cut (GFS_DOMAIN (sim), p.surface, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseCutFunc) refine_cut_cell, &p); else gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) refine_implicit_cell, &p); gfs_restore_fpe_for_function (refine->maxlevel); i = i->next; } } } static void gfs_refine_solid_class_init (GfsRefineClass * klass) { klass->refine = gfs_refine_solid_refine; GTS_OBJECT_CLASS (klass)->destroy = refine_solid_destroy; GTS_OBJECT_CLASS (klass)->read = refine_solid_read; } GfsRefineClass * gfs_refine_solid_class (void) { static GfsRefineClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_refine_solid_info = { "GfsRefineSolid", sizeof (GfsRefineSolid), sizeof (GfsRefineClass), (GtsObjectClassInitFunc) gfs_refine_solid_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_refine_class ()), &gfs_refine_solid_info); } return klass; } /** \endobject{GfsRefineSolid} */ /** * Refine cells cut by a surface. * \beginobject{GfsRefineSurface} */ static void refine_surface_destroy (GtsObject * object) { GfsRefineSurface * d = GFS_REFINE_SURFACE (object); gts_object_destroy (GTS_OBJECT (d->surface)); (* GTS_OBJECT_CLASS (gfs_refine_surface_class ())->parent_class->destroy) (object); } static void refine_surface_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_refine_surface_class ())->parent_class->write) (o, fp); gfs_generic_surface_write (GFS_REFINE_SURFACE (o)->surface, gfs_object_simulation (o), fp); } static void refine_surface_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_refine_surface_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; gfs_generic_surface_read (GFS_REFINE_SURFACE (*o)->surface, gfs_object_simulation (*o), fp); } static void gfs_refine_surface_refine (GfsRefine * refine, GfsSimulation * sim) { RefineCut p; p.refine = refine; p.domain = GFS_DOMAIN (sim); p.surface = GFS_REFINE_SURFACE (refine)->surface; if (GFS_SURFACE (p.surface)->twod) { if (GFS_SURFACE (p.surface)->s) gfs_domain_traverse_cut_2D (GFS_DOMAIN (sim), GFS_REFINE_SURFACE (refine)->surface, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseCutFunc) refine_cut_cell, &p); else g_assert_not_implemented (); } else { if (GFS_SURFACE (p.surface)->s) gfs_domain_traverse_cut (GFS_DOMAIN (sim), GFS_REFINE_SURFACE (refine)->surface, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseCutFunc) refine_cut_cell, &p); else gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) refine_implicit_cell, &p); } } static void gfs_refine_surface_class_init (GfsRefineClass * klass) { klass->refine = gfs_refine_surface_refine; GTS_OBJECT_CLASS (klass)->destroy = refine_surface_destroy; GTS_OBJECT_CLASS (klass)->write = refine_surface_write; GTS_OBJECT_CLASS (klass)->read = refine_surface_read; } static void refine_surface_init (GfsRefineSurface * r) { r->surface = GFS_GENERIC_SURFACE (gts_object_new (GTS_OBJECT_CLASS (gfs_surface_class ()))); } GfsRefineClass * gfs_refine_surface_class (void) { static GfsRefineClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_refine_surface_info = { "GfsRefineSurface", sizeof (GfsRefineSurface), sizeof (GfsRefineClass), (GtsObjectClassInitFunc) gfs_refine_surface_class_init, (GtsObjectInitFunc) refine_surface_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_refine_class ()), &gfs_refine_surface_info); } return klass; } /** \endobject{GfsRefineSurface} */ /** * Refine cells as a function of the distance from a surface. * \beginobject{GfsRefineDistance} */ static void refine_distance_destroy (GtsObject * object) { GfsRefineDistance * d = GFS_REFINE_DISTANCE (object); if (d->stree) gts_bb_tree_destroy (d->stree, TRUE); gfs_domain_remove_derived_variable (GFS_DOMAIN (gfs_object_simulation (object)), "Distance"); (* GTS_OBJECT_CLASS (gfs_refine_distance_class ())->parent_class->destroy) (object); } static gdouble cell_distance (FttCell * cell, FttCellFace * face, GfsSimulation * sim, GfsRefineDistance * refine) { FttVector pos; gdouble h = GFS_DIAGONAL*ftt_cell_size (cell), d; GtsPoint p; ftt_cell_pos (cell, &pos); p.x = pos.x; p.y = pos.y; p.z = pos.z; d = gts_bb_tree_point_distance (refine->stree, &p, (GtsBBoxDistFunc) gts_point_triangle_distance, NULL); return d > h ? d - h : 0.; } static void refine_distance_read (GtsObject ** o, GtsFile * fp) { GfsDerivedVariableInfo v = { "Distance", "distance to the surface", cell_distance }; v.data = *o; if (!gfs_domain_add_derived_variable (GFS_DOMAIN (gfs_object_simulation (*o)), v)) { gts_file_error (fp, "derived variable `Distance' already defined"); return; } (* GTS_OBJECT_CLASS (gfs_refine_distance_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GtsSurface * s = GFS_SURFACE (GFS_REFINE_SURFACE (*o)->surface)->s; if (!s) { gts_file_error (fp, "RefineDistance only works with GTS surfaces"); return; } GFS_REFINE_DISTANCE (*o)->stree = gts_bb_tree_surface (s); } static void gfs_refine_distance_class_init (GfsRefineClass * klass) { klass->refine = gfs_refine_refine; GTS_OBJECT_CLASS (klass)->destroy = refine_distance_destroy; GTS_OBJECT_CLASS (klass)->read = refine_distance_read; } GfsRefineClass * gfs_refine_distance_class (void) { static GfsRefineClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_refine_distance_info = { "GfsRefineDistance", sizeof (GfsRefineDistance), sizeof (GfsRefineClass), (GtsObjectClassInitFunc) gfs_refine_distance_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_refine_surface_class ()), &gfs_refine_distance_info); } return klass; } /** \endobject{GfsRefineDistance} */ /** * * \beginobject{GfsRefineHeight} */ static void refine_height_destroy (GtsObject * object) { gfs_domain_remove_derived_variable (GFS_DOMAIN (gfs_object_simulation (object)), "Height"); (* GTS_OBJECT_CLASS (gfs_refine_height_class ())->parent_class->destroy) (object); } static gdouble interpolated_value (GtsSurface * s, FttVector * p) { GtsPoint q; GtsFace * t; q.x = p->x; q.y = p->y; t = gts_point_locate (&q, s, NULL); if (t == NULL) { g_warning ("cannot locate point (%g,%g)", p->x, p->y); return 0.; } gts_triangle_interpolate_height (GTS_TRIANGLE (t), &q); return q.z; } static gdouble cell_height (FttCell * cell, FttCellFace * face, GfsSimulation * sim, GfsRefineSurface * refine) { FttVector pos; ftt_cell_pos (cell, &pos); return interpolated_value (GFS_SURFACE (refine->surface)->s, &pos); } static void refine_height_read (GtsObject ** o, GtsFile * fp) { GfsDerivedVariableInfo v = { "Height", "vertical distance to the surface", cell_height }; v.data = *o; if (!gfs_domain_add_derived_variable (GFS_DOMAIN (gfs_object_simulation (*o)), v)) { gts_file_error (fp, "derived variable `Height' already defined"); return; } (* GTS_OBJECT_CLASS (gfs_refine_height_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (!GFS_SURFACE (GFS_REFINE_SURFACE (*o)->surface)->s) { gts_file_error (fp, "RefineHeight only works with GTS surfaces"); return; } } static void gfs_refine_height_class_init (GfsRefineClass * klass) { klass->refine = gfs_refine_refine; GTS_OBJECT_CLASS (klass)->destroy = refine_height_destroy; GTS_OBJECT_CLASS (klass)->read = refine_height_read; } GfsRefineClass * gfs_refine_height_class (void) { static GfsRefineClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_refine_height_info = { "GfsRefineHeight", sizeof (GfsRefineSurface), sizeof (GfsRefineClass), (GtsObjectClassInitFunc) gfs_refine_height_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_refine_surface_class ()), &gfs_refine_height_info); } return klass; } /** \endobject{GfsRefineHeight} */ gerris-snapshot-131206/src/event.h0000644000175100017510000002423212250371171013746 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __EVENT_H__ #define __EVENT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include typedef struct _GfsEvent GfsEvent; typedef struct _GfsEventClass GfsEventClass; struct _GfsEvent { GtsSListContainee parent; gdouble t, start, end, step; guint i, istart, iend, istep; guint n; gboolean end_event, realised, redo; gchar * name; }; typedef struct _GfsSimulation GfsSimulation; struct _GfsEventClass { GtsSListContaineeClass parent_class; gboolean (* event) (GfsEvent * event, GfsSimulation * sim); void (* post_event) (GfsEvent * event, GfsSimulation * sim); void (* event_half) (GfsEvent * event, GfsSimulation * sim); }; #include "simulation.h" #define GFS_EVENT(obj) GTS_OBJECT_CAST (obj,\ GfsEvent,\ gfs_event_class ()) #define GFS_EVENT_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsEventClass,\ gfs_event_class()) #define GFS_IS_EVENT(obj) (gts_object_is_from_class (obj,\ gfs_event_class ())) GfsEventClass * gfs_event_class (void); GfsEvent * gfs_event_new (GfsEventClass * klass); void gfs_event_set (GfsEvent * e, gdouble start, gdouble end, gdouble step, gint istart, gint iend, gint istep); void gfs_event_init (GfsEvent * event, GfsSimulation * sim); void gfs_event_do (GfsEvent * event, GfsSimulation * sim); void gfs_event_redo (GfsEvent * event, GfsSimulation * sim); gdouble gfs_event_next (GfsEvent * event, GfsSimulation * sim); void gfs_event_half_do (GfsEvent * event, GfsSimulation * sim); #define gfs_event_is_repetitive(e) ((e)->step < G_MAXDOUBLE || (e)->istep < G_MAXINT) /* GfsGenericInit: Header */ typedef struct _GfsEvent GfsGenericInit; typedef struct _GfsEventClass GfsGenericInitClass; #define GFS_IS_GENERIC_INIT(obj) (gts_object_is_from_class (obj,\ gfs_generic_init_class ())) GfsEventClass * gfs_generic_init_class (void); /* GfsInit: Header */ typedef struct _GfsInit GfsInit; struct _GfsInit { /*< private >*/ GfsGenericInit parent; GSList * f; }; #define GFS_INIT(obj) GTS_OBJECT_CAST (obj,\ GfsInit,\ gfs_init_class ()) #define GFS_IS_INIT(obj) (gts_object_is_from_class (obj,\ gfs_init_class ())) GfsGenericInitClass * gfs_init_class (void); /* GfsInitMask: Header */ typedef struct _GfsInitMask GfsInitMask; struct _GfsInitMask { /*< private >*/ GfsGenericInit parent; GSList * masked_boxes; /*< public >*/ GfsFunction * mask; }; #define GFS_INIT_MASK(obj) GTS_OBJECT_CAST (obj,\ GfsInitMask,\ gfs_init_mask_class ()) #define GFS_IS_INIT_MASK(obj) (gts_object_is_from_class (obj,\ gfs_init_mask_class ())) GfsGenericInitClass * gfs_init_mask_class (void); /* GfsInitFlowConstant: Header */ GfsEventClass * gfs_init_flow_constant_class (void); /* GfsInitVorticity: Header */ typedef struct _GfsInitVorticity GfsInitVorticity; struct _GfsInitVorticity { /*< private >*/ GfsGenericInit parent; GfsVariable * vort, ** u; #if FTT_2D GfsVariable * stream; #else GfsVariable * stream[3]; #endif /*< public >*/ GfsFunction * f; #if !FTT_2D GfsFunction * fv[3]; #endif }; #define GFS_INIT_VORTICITY(obj) GTS_OBJECT_CAST (obj,\ GfsInitVorticity,\ gfs_init_vorticity_class ()) #define GFS_IS_INIT_VORTICITY(obj) (gts_object_is_from_class (obj,\ gfs_init_vorticity_class ())) GfsGenericInitClass * gfs_init_vorticity_class (void); /* GfsEventSum: Header */ typedef struct _GfsEventSum GfsEventSum; struct _GfsEventSum { GfsEvent parent; GfsFunction * v; GfsVariable * sv; FttCellTraverseFunc sum; gdouble last, dt; }; #define GFS_EVENT_SUM(obj) GTS_OBJECT_CAST (obj,\ GfsEventSum,\ gfs_event_sum_class ()) #define GFS_IS_EVENT_SUM(obj) (gts_object_is_from_class (obj,\ gfs_event_sum_class ())) GfsEventClass * gfs_event_sum_class (void); /* GfsEventSumDirection: Header */ typedef struct _GfsEventSumDirection GfsEventSumDirection; struct _GfsEventSumDirection { GfsEventSum parent; FttDirection d; }; #define GFS_EVENT_SUM_DIRECTION(obj) GTS_OBJECT_CAST (obj,\ GfsEventSumDirection,\ gfs_event_sum_direction_class ()) #define GFS_IS_EVENT_SUM_DIRECTION(obj) (gts_object_is_from_class (obj,\ gfs_event_sum_direction_class ())) GfsEventClass * gfs_event_sum_direction_class (void); /* GfsEventHarmonic: Header */ typedef struct _GfsEventHarmonic GfsEventHarmonic; struct _GfsEventHarmonic { GfsEvent parent; GArray * omega; GfsVariable * v, * z, * e, ** A, ** B; gdouble * vsin, * vcos, ** M, ** iM, ** Mn, * x, * a; gchar * Aname, * Bname; gboolean invertible; }; #define GFS_EVENT_HARMONIC(obj) GTS_OBJECT_CAST (obj,\ GfsEventHarmonic,\ gfs_event_harmonic_class ()) #define GFS_IS_EVENT_HARMONIC(obj) (gts_object_is_from_class (obj,\ gfs_event_harmonic_class ())) GfsEventClass * gfs_event_harmonic_class (void); /* GfsEventStop: Header */ typedef struct _GfsEventStop GfsEventStop; struct _GfsEventStop { GfsEvent parent; GfsVariable * v, * oldv, * diff; gdouble last, max; gboolean relative; }; #define GFS_EVENT_STOP(obj) GTS_OBJECT_CAST (obj,\ GfsEventStop,\ gfs_event_stop_class ()) #define GFS_IS_EVENT_STOP(obj) (gts_object_is_from_class (obj,\ gfs_event_stop_class ())) GfsEventClass * gfs_event_stop_class (void); /* GfsEventScript: Header */ FILE * gfs_popen (GfsSimulation * sim, const char * command, const char * type); typedef struct _GfsEventScript GfsEventScript; struct _GfsEventScript { GfsEvent parent; gchar * script; }; #define GFS_EVENT_SCRIPT(obj) GTS_OBJECT_CAST (obj,\ GfsEventScript,\ gfs_event_script_class ()) #define GFS_IS_EVENT_SCRIPT(obj) (gts_object_is_from_class (obj,\ gfs_event_script_class ())) #define GFS_EVENT_SCRIPT_STOP 64 GfsEventClass * gfs_event_script_class (void); /* GfsInitFraction: Header */ typedef struct _GfsInitFraction GfsInitFraction; struct _GfsInitFraction { /*< private >*/ GfsGenericInit parent; GfsVariable * c; GfsGenericSurface * surface; }; typedef struct _GfsInitFractionClass GfsInitFractionClass; struct _GfsInitFractionClass { /*< private >*/ GfsGenericInitClass parent_class; /*< public >*/ }; #define GFS_INIT_FRACTION(obj) GTS_OBJECT_CAST (obj,\ GfsInitFraction,\ gfs_init_fraction_class ()) #define GFS_INIT_FRACTION_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsInitFractionClass,\ gfs_init_fraction_class()) #define GFS_IS_INIT_FRACTION(obj) (gts_object_is_from_class (obj,\ gfs_init_fraction_class ())) GfsInitFractionClass * gfs_init_fraction_class (void); /* GfsRemoveDroplets: Header */ typedef struct _GfsRemoveDroplets GfsRemoveDroplets; struct _GfsRemoveDroplets { /*< private >*/ GfsEvent parent; GfsVariable * v; /*< public >*/ GfsFunction * fc; GfsVariable * c; gint min; gdouble val; }; #define GFS_REMOVE_DROPLETS(obj) GTS_OBJECT_CAST (obj,\ GfsRemoveDroplets,\ gfs_remove_droplets_class ()) #define GFS_IS_REMOVE_DROPLETS(obj) (gts_object_is_from_class (obj,\ gfs_remove_droplets_class ())) GfsEventClass * gfs_remove_droplets_class (void); /* GfsRemovePonds: Header */ typedef struct _GfsRemovePonds GfsRemovePonds; struct _GfsRemovePonds { /*< private >*/ GfsGenericInit parent; /*< public >*/ gint min; }; #define GFS_REMOVE_PONDS(obj) GTS_OBJECT_CAST (obj,\ GfsRemovePonds,\ gfs_remove_ponds_class ()) #define GFS_IS_REMOVE_PONDS(obj) (gts_object_is_from_class (obj,\ gfs_remove_ponds_class ())) GfsEventClass * gfs_remove_ponds_class (void); /* GfsEventFilter: Header */ typedef struct _GfsEventFilter GfsEventFilter; struct _GfsEventFilter { /*< private >*/ GfsEvent parent; GfsVariable * tmp; /*< public >*/ GfsVariable * v; gdouble scale; }; #define GFS_EVENT_FILTER(obj) GTS_OBJECT_CAST (obj,\ GfsEventFilter,\ gfs_event_filter_class ()) #define GFS_IS_EVENT_FILTER(obj) (gts_object_is_from_class (obj,\ gfs_event_filter_class ())) GfsEventClass * gfs_event_filter_class (void); /* GfsEventList: Header */ typedef struct _GfsEventList GfsEventList; struct _GfsEventList { /*< private >*/ GfsEvent parent; /*< public >*/ GtsObjectClass * klass; GtsSListContainer * list; }; #define GFS_EVENT_LIST(obj) GTS_OBJECT_CAST (obj,\ GfsEventList,\ gfs_event_list_class ()) #define GFS_IS_EVENT_LIST(obj) (gts_object_is_from_class (obj,\ gfs_event_list_class ())) GfsEventClass * gfs_event_list_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __EVENT_H__ */ gerris-snapshot-131206/src/balance.c0000644000175100017510000002521212250371171014204 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Parallel load-balancing. */ #include "balance.h" #include "mpi_boundary.h" #include "adaptive.h" /** * Dynamic load-balancing. * \beginobject{GfsEventBalance} */ #ifdef HAVE_MPI static void find_neighbors (GfsBox * box, GArray * pe) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY_MPI (box->neighbor[d])) { guint process = GFS_BOUNDARY_MPI (box->neighbor[d])->process; gboolean found = FALSE; gint i; for (i = 0; i < pe->len && !found; i++) if (g_array_index (pe, guint, i) == process) found = TRUE; if (!found) g_array_append_val (pe, process); } } static GArray * neighboring_processors (GfsDomain * domain) { GArray * pe = g_array_new (FALSE, FALSE, sizeof (guint)); if (domain->pid >= 0) gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) find_neighbors, pe); return pe; } static void count (FttCell * cell, int * n) { (*n)++; } #define NITERMAX 100 #define TOL 0.001 typedef struct { guint * pid; /* pid of neighbors */ gdouble * flow; /* flow to neighbors */ guint n; /* number of neighbors */ } BalancingFlow; /* * Computes the "balancing flow" necessary to balance the domain * sizes on all the processes. @average is the average domain size * (i.e. the target domain size). */ static BalancingFlow * balancing_flow_new (GfsDomain * domain, int average) { BalancingFlow * b; b = g_malloc0 (sizeof (BalancingFlow)); GArray * pe = neighboring_processors (domain); if (pe->len == 0) { g_array_free (pe, TRUE); return b; } int size = 0, i; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) count, &size); gdouble rsize = size - average; gdouble * lambda = g_malloc (sizeof (gdouble)*(pe->len + 1)), lambda1, eps = G_MAXDOUBLE; MPI_Request * request = g_malloc (sizeof (MPI_Request)*pe->len); lambda1 = 0.; /* this is Gamma and s from the "double-loop" fix of Johnson, Bickson and Dolev, 2009, equation (6) */ gdouble Gamma = 0.5*pe->len, s = 0.5; gdouble tolerance = MAX (TOL*average, 1.); int niter = NITERMAX; while (niter-- && eps > tolerance) { MPI_Status status; /* Send lambda to all neighbors */ lambda[0] = lambda1; for (i = 0; i < pe->len; i++) MPI_Isend (&(lambda[0]), 1, MPI_DOUBLE, g_array_index (pe, guint , i), domain->pid, MPI_COMM_WORLD, &(request[i])); /* Do one iteration of the "double-loop"-fixed Jacobi method for the (graph)-Poisson equation */ gdouble rhs = rsize; for (i = 0; i < pe->len; i++) { MPI_Recv (&(lambda[i + 1]), 1, MPI_DOUBLE, g_array_index (pe, guint , i), g_array_index (pe, guint , i), MPI_COMM_WORLD, &status); rhs += lambda[i + 1]; } /* update RHS and lambda for "double-loop"-fix */ rsize = (1. - s)*rsize + s*(size - average + Gamma*lambda[0]); lambda1 = rhs/(Gamma + pe->len); eps = fabs (lambda[0] - lambda1); /* synchronize */ for (i = 0; i < pe->len; i++) MPI_Wait (&request[i], &status); gfs_all_reduce (domain, eps, MPI_DOUBLE, MPI_MAX); } g_free (request); if (niter < 0 && domain->pid == 0) g_warning ("balancing_flow(): could not converge after %d iterations", NITERMAX); b->n = pe->len; lambda1 = lambda[0]; for (i = 0; i < b->n; i++) lambda[i] = lambda1 - lambda[i + 1]; b->flow = lambda; b->pid = (guint *) pe->data; g_array_free (pe, FALSE); return b; } static void balancing_flow_destroy (BalancingFlow * b) { g_free (b->pid); g_free (b->flow); g_free (b); } static void reset_box_size (GfsBox * box) { box->size = 0; } typedef struct { GfsBox * box; gint dest, flow, min, neighboring; } BoxData; static void select_neighbouring_box (GfsBox * box, BoxData * b) { if (box->pid != b->dest) { gint neighboring = 0; FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if ((GFS_IS_BOUNDARY_MPI (box->neighbor[d]) && GFS_BOUNDARY_MPI (box->neighbor[d])->process == b->dest) || (GFS_IS_BOX (box->neighbor[d]) && GFS_BOX (box->neighbor[d])->pid == b->dest)) neighboring++; if (neighboring && neighboring >= b->neighboring) { if (box->size == 0) ftt_cell_traverse (box->root, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) count, &box->size); if (neighboring > b->neighboring || fabs (box->size - b->flow) < fabs (b->box->size - b->flow)) { b->box = box; b->neighboring = neighboring; } } } } static void get_pid (GfsBox * box, GArray * pid) { g_assert (box->id > 0 && box->id <= pid->len); g_array_index (pid, guint, box->id - 1) = gfs_box_domain (box)->pid; } static void update_box_pid (GfsBox * box, GArray * pid) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY_MPI (box->neighbor[d])) { guint id = GFS_BOUNDARY_MPI (box->neighbor[d])->id; g_assert (id > 0 && id <= pid->len); GFS_BOUNDARY_MPI (box->neighbor[d])->process = g_array_index (pid, guint, id - 1); } } #endif /* HAVE_MPI */ static void gfs_event_balance_write (GtsObject * o, FILE * fp) { GfsEventBalance * s = GFS_EVENT_BALANCE (o); if (GTS_OBJECT_CLASS (gfs_event_balance_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_event_balance_class ())->parent_class->write) (o, fp); fprintf (fp, " %g", s->max); } static void gfs_event_balance_read (GtsObject ** o, GtsFile * fp) { GfsEventBalance * s = GFS_EVENT_BALANCE (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (s)); if (GTS_OBJECT_CLASS (gfs_event_balance_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_event_balance_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; s->max = gfs_read_constant (fp, domain); } static gboolean gfs_event_balance_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_balance_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsEventBalance * s = GFS_EVENT_BALANCE (event); GtsRange size, boundary, mpiwait; gfs_domain_stats_balance (domain, &size, &boundary, &mpiwait); if (size.max/size.min > 1. + s->max) { #ifdef HAVE_MPI BalancingFlow * balance = balancing_flow_new (domain, size.mean); GPtrArray * request = g_ptr_array_new (); int modified = FALSE; int i; /* Send boxes */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) reset_box_size, NULL); guint nb = gts_container_size (GTS_CONTAINER (domain)); for (i = 0; i < balance->n; i++) if (balance->flow[i] > 0.) { /* largest subdomain */ /* we need to find the list of boxes which minimizes |\sum n_i - n| where n_i is the size of box i. This is known in combinatorial optimisation as a "knapsack problem". */ GSList * l = NULL; BoxData b; b.flow = balance->flow[i]; b.dest = balance->pid[i]; while (b.flow > 0 && nb > 1) { b.box = NULL; b.neighboring = 0; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) select_neighbouring_box, &b); if (b.box && b.box->size <= 2*b.flow) { l = g_slist_prepend (l, b.box); b.box->pid = b.dest; b.flow -= b.box->size; nb--; modified = TRUE; } else b.flow = 0; } g_ptr_array_add (request, gfs_send_boxes (domain, l, balance->pid[i])); g_slist_free (l); } /* Receive boxes */ for (i = 0; i < balance->n; i++) if (balance->flow[i] < 0.) { /* smallest subdomain */ GSList * l = gfs_receive_boxes (domain, balance->pid[i]); g_slist_free (l); } /* Synchronize */ for (i = 0; i < request->len; i++) gfs_wait (g_ptr_array_index (request, i)); g_ptr_array_free (request, TRUE); balancing_flow_destroy (balance); /* Reshape */ gfs_all_reduce (domain, modified, MPI_INT, MPI_MAX); if (modified) { /* Updates the pid associated with each box */ guint nb = gts_container_size (GTS_CONTAINER (domain)); gfs_all_reduce (domain, nb, MPI_UNSIGNED, MPI_SUM); GArray * pid = g_array_new (FALSE, TRUE, sizeof (guint)); g_array_set_size (pid, nb); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) get_pid, pid); #if MPI_VERSION == 2 MPI_Allreduce (MPI_IN_PLACE, pid->data, nb, MPI_UNSIGNED, MPI_MAX, MPI_COMM_WORLD); #else /* MPI-1 does not have the MPI_IN_PLACE option */ GArray * recv = g_array_new (FALSE, TRUE, sizeof (guint)); g_array_set_size (recv, nb); MPI_Allreduce (pid->data, recv->data, nb, MPI_UNSIGNED, MPI_MAX, MPI_COMM_WORLD); g_array_free (pid, TRUE); pid = recv; #endif /* MPI-1 */ /* pid[id] now contains the current pid of box with index id */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) update_box_pid, pid); g_array_free (pid, TRUE); gfs_domain_reshape (domain, gfs_domain_depth (domain)); /* applies BCs again in case a BC on one variable depends on another variable */ GSList * i = domain->variables; while (i) { gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, i->data); i = i->next; } } #else /* not HAVE_MPI */ g_assert_not_reached (); #endif /* not HAVE_MPI */ } return TRUE; } return FALSE; } static void gfs_event_balance_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_event_balance_read; GTS_OBJECT_CLASS (klass)->write = gfs_event_balance_write; GFS_EVENT_CLASS (klass)->event = gfs_event_balance_event; } GfsEventClass * gfs_event_balance_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_event_balance_info = { "GfsEventBalance", sizeof (GfsEventBalance), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_event_balance_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_event_balance_info); } return klass; } /** \endobject{GfsEventBalance} */ gerris-snapshot-131206/src/version.h0000644000175100017510000000030312250371271014304 00000000000000/* version.h * * This is a generated file. Please modify 'darcsversion.sh' */ #ifndef GFSVERSION_H #define GFSVERSION_H #define GFS_BUILD_VERSION "131206-155120" #endif /* GFSVERSION_H */ gerris-snapshot-131206/src/map.c0000644000175100017510000003232612250371171013400 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Coordinates transformations. */ #include "map.h" /** * Coordinates transformations. * \beginobject{GfsMap} */ static void gfs_map_read (GtsObject ** o, GtsFile * fp) { GfsMap * map = GFS_MAP (*o); GtsObjectClass * klass; gboolean class_changed = FALSE; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (GfsMapClass)"); return; } klass = gfs_object_class_from_name (fp->token->str); if (klass == NULL) { gts_file_error (fp, "unknown class `%s'", fp->token->str); return; } if (!gts_object_class_is_from_class (klass, gfs_map_class ())) { gts_file_error (fp, "`%s' is not a GfsMap", fp->token->str); return; } if (klass != (*o)->klass) { *o = gts_object_new (klass); gts_object_destroy (GTS_OBJECT (map)); map = GFS_MAP (*o); class_changed = TRUE; } gts_file_next_token (fp); } static void gfs_map_write (GtsObject * o, FILE * fp) { fprintf (fp, " %s", o->klass->info.name); } static void gfs_map_class_init (GfsMapClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_map_read; GTS_OBJECT_CLASS (klass)->write = gfs_map_write; } static void not_implemented (GfsMap * map, const FttVector * src, FttVector * dest) { g_assert_not_implemented (); } static double evaluate (GfsMap * map, const FttVector * x, const FttVector * rhs, FttVector * f) { gdouble delta = 0.; (* map->inverse) (map, x, f); int i; for (i = 0; i < 3; i++) { (&f->x)[i] -= (&rhs->x)[i]; delta += (&f->x)[i]*(&f->x)[i]; } return delta; } #define DELTA 1e-6 #define NMAX 100 static void jacobian (GfsMap * map, const FttVector * x, const FttVector * rhs, FttVector * f, GtsMatrix * J) { int i, j; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) { FttVector df, dx = *x; (&dx.x)[j] += DELTA; (* map->inverse) (map, &dx, &df); J[i][j] = ((&df.x)[i] - (&rhs->x)[i] - (&f->x)[i])/DELTA; } } static void map_transform (GfsMap * map, const FttVector * src, FttVector * dest) { FttVector f, rhs = *src; GtsMatrix J[4]; int n = 0; /* use multidimensional Newton iterations to invert map(dest) = src */ *dest = *src; /* use src as initial guess */ gdouble delta = evaluate (map, dest, &rhs, &f); while (delta > 1e-12 && n < NMAX) { jacobian (map, dest, &rhs, &f, J); GtsMatrix * iJ = gts_matrix3_inverse (J); if (!iJ) { gts_matrix_print (J, stderr); g_assert_not_reached (); } int i, j; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) (&dest->x)[i] -= iJ[i][j]*(&f.x)[j]; gts_matrix_destroy (iJ); delta = evaluate (map, dest, &rhs, &f); n++; } g_assert (n < NMAX); } static void normalized_jacobian (GfsMap * map, const FttVector * p, GtsMatrix * J) { FttVector f, rhs = {0., 0., 0.}; evaluate (map, p, &rhs, &f); jacobian (map, p, &rhs, &f, J); /* normalize */ int i, j; for (i = 0; i < 3; i++) { gdouble h = 0.; for (j = 0; j < 3; j++) h += J[j][i]*J[j][i]; h = sqrt (h); for (j = 0; j < 3; j++) J[j][i] /= h; } } static void map_inverse_vector (GfsMap * map, const FttVector * p, const FttVector * src, FttVector * dest) { GtsMatrix J[4]; normalized_jacobian (map, p, J); FttVector src1 = *src; /* in case src and dest are identical */ int i, j; for (i = 0; i < 3; i++) { (&dest->x)[i] = 0.; for (j = 0; j < 3; j++) (&dest->x)[i] += (&src1.x)[j]*J[i][j]; } } static void map_transform_vector (GfsMap * map, const FttVector * p, const FttVector * src, FttVector * dest) { GtsMatrix J[4]; normalized_jacobian (map, p, J); GtsMatrix * iJ = gts_matrix3_inverse (J); if (!iJ) { gts_matrix_print (J, stderr); g_assert_not_reached (); } FttVector src1 = *src; /* in case src and dest are identical */ int i, j; for (i = 0; i < 3; i++) { (&dest->x)[i] = 0.; for (j = 0; j < 3; j++) (&dest->x)[i] += (&src1.x)[j]*iJ[i][j]; } gts_matrix_destroy (iJ); } static void inverse_cell (GfsMap * map, const FttVector * src, FttVector * dest) { gint i; for (i = 0; i < 4; i++) (* map->inverse) (map, &(src[i]), &(dest[i])); } static void gfs_map_init (GfsMap * map) { map->inverse = not_implemented; map->transform = map_transform; map->inverse_vector = map_inverse_vector; map->transform_vector = map_transform_vector; map->inverse_cell = inverse_cell; } GfsMapClass * gfs_map_class (void) { static GfsMapClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_map_info = { "GfsMap", sizeof (GfsMap), sizeof (GfsMapClass), (GtsObjectClassInitFunc) gfs_map_class_init, (GtsObjectInitFunc) gfs_map_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_slist_containee_class ()), &gfs_map_info); } return klass; } /** \endobject{GfsMap} */ /** * * \beginobject{GfsMapFunction} */ static void gfs_map_function_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_map_function_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != '{') { gts_file_error (fp, "expecting a parameter block"); return; } GfsMapFunction * m = GFS_MAP_FUNCTION (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (m)); GtsFileVariable var[] = { {GTS_OBJ, "x", TRUE, &m->x}, {GTS_OBJ, "y", TRUE, &m->y}, {GTS_OBJ, "z", TRUE, &m->z}, {GTS_NONE} }; FttComponent c; for (c = 0; c < 3; c++) gfs_object_simulation_set ((&m->x)[c], domain); gts_file_assign_variables (fp, var); for (c = 0; c < 3; c++) if (!var[c].set) { gts_object_destroy (GTS_OBJECT ((&m->x)[c])); (&m->x)[c] = NULL; } if (fp->type == GTS_ERROR) return; } static void gfs_map_function_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_map_function_class ())->parent_class->write) (o, fp); GfsMapFunction * m = GFS_MAP_FUNCTION (o); fputs (" {", fp); FttComponent c; static gchar name[3][2] = {"x", "y", "z"}; for (c = 0; c < 3; c++) if ((&m->x)[c]) { fprintf (fp, "\n %s = ", name[c]); gfs_function_write ((&m->x)[c], fp); } fputs ("\n }", fp); } static void gfs_map_function_destroy (GtsObject * o) { GfsMapFunction * m = GFS_MAP_FUNCTION (o); FttComponent c; for (c = 0; c < 3; c++) if ((&m->x)[c]) gts_object_destroy (GTS_OBJECT ((&m->x)[c])); (* GTS_OBJECT_CLASS (gfs_map_function_class ())->parent_class->destroy) (o); } static void gfs_map_function_class_init (GfsMapClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_map_function_read; GTS_OBJECT_CLASS (klass)->write = gfs_map_function_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_map_function_destroy; } static void map_function_inverse (GfsMap * map, const FttVector * src, FttVector * dest) { GfsMapFunction * m = GFS_MAP_FUNCTION (map); gdouble L = gfs_object_simulation (m)->physical_params.L; FttVector src1; FttComponent c; for (c = 0; c < 3; c++) (&src1.x)[c] = (&src->x)[c]*L; for (c = 0; c < 3; c++) if ((&m->x)[c]) (&dest->x)[c] = gfs_function_spatial_value ((&m->x)[c], &src1)/L; else (&dest->x)[c] = (&src->x)[c]; } static void gfs_map_function_init (GfsMapFunction * m) { GFS_MAP (m)->inverse = map_function_inverse; m->x = gfs_function_new (gfs_function_map_class (), 1.); m->y = gfs_function_new (gfs_function_map_class (), 1.); m->z = gfs_function_new (gfs_function_map_class (), 1.); } GfsMapClass * gfs_map_function_class (void) { static GfsMapClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_map_function_info = { "GfsMapFunction", sizeof (GfsMapFunction), sizeof (GfsMapClass), (GtsObjectClassInitFunc) gfs_map_function_class_init, (GtsObjectInitFunc) gfs_map_function_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_map_class ()), &gfs_map_function_info); } return klass; } /** \endobject{GfsMapFunction} */ /** * Isometric coordinates transformations. * \beginobject{GfsMapTransform} */ static void gfs_map_transform_destroy (GtsObject * o) { gts_matrix_destroy (GFS_MAP_TRANSFORM (o)->m); gts_matrix_destroy (GFS_MAP_TRANSFORM (o)->im); (* GTS_OBJECT_CLASS (gfs_map_transform_class ())->parent_class->destroy) (o); } static void gfs_map_transform_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_map_transform_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsMapTransform * map = GFS_MAP_TRANSFORM (*o); GtsFileVariable var[] = { {GTS_DOUBLE, "tx", TRUE, &map->translate[0]}, {GTS_DOUBLE, "ty", TRUE, &map->translate[1]}, {GTS_DOUBLE, "tz", TRUE, &map->translate[2]}, {GTS_DOUBLE, "rx", TRUE, &map->rotate[0]}, {GTS_DOUBLE, "ry", TRUE, &map->rotate[1]}, {GTS_DOUBLE, "rz", TRUE, &map->rotate[2]}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (map->rotate[0] != 0.) { /* rotate around x-axis */ gdouble angle = map->rotate[0]*M_PI/180.; gdouble cosa = cos (angle), sina = sin (angle); GtsMatrix * rot = gts_matrix_identity (NULL); rot[1][1] = cosa; rot[1][2] = -sina; rot[2][1] = sina; rot[2][2] = cosa; GtsMatrix * p = gts_matrix_product (map->m, rot); gts_matrix_destroy (rot); gts_matrix_destroy (map->m); map->m = p; } if (map->rotate[1] != 0.) { /* rotate around y-axis */ gdouble angle = map->rotate[1]*M_PI/180.; gdouble cosa = cos (angle), sina = sin (angle); GtsMatrix * rot = gts_matrix_identity (NULL); rot[0][0] = cosa; rot[0][2] = sina; rot[2][0] = -sina; rot[2][2] = cosa; GtsMatrix * p = gts_matrix_product (map->m, rot); gts_matrix_destroy (rot); gts_matrix_destroy (map->m); map->m = p; } if (map->rotate[2] != 0.) { /* rotate around z-axis */ gdouble angle = map->rotate[2]*M_PI/180.; gdouble cosa = cos (angle), sina = sin (angle); GtsMatrix * rot = gts_matrix_identity (NULL); rot[0][0] = cosa; rot[0][1] = -sina; rot[1][0] = sina; rot[1][1] = cosa; GtsMatrix * p = gts_matrix_product (map->m, rot); gts_matrix_destroy (rot); gts_matrix_destroy (map->m); map->m = p; } gdouble L = gfs_object_simulation (map)->physical_params.L; map->m[0][3] += map->translate[0]/L; map->m[1][3] += map->translate[1]/L; map->m[2][3] += map->translate[2]/L; gts_matrix_destroy (map->im); map->im = gts_matrix_inverse (map->m); } static void gfs_map_transform_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_map_transform_class ())->parent_class->write) (o, fp); GfsMapTransform * map = GFS_MAP_TRANSFORM (o); fputs (" {\n", fp); if (gts_vector_norm (map->translate) > 0.) fprintf (fp, " tx = %g ty = %g tz = %g\n", map->translate[0], map->translate[1], map->translate[2]); if (gts_vector_norm (map->rotate) > 0.) fprintf (fp, " rx = %g ry = %g rz = %g\n", map->rotate[0], map->rotate[1], map->rotate[2]); fputc ('}', fp); } static void gfs_map_transform_class_init (GtsObjectClass * klass) { klass->destroy = gfs_map_transform_destroy; klass->read = gfs_map_transform_read; klass->write = gfs_map_transform_write; } static void map_transform_transform (GfsMap * map, const FttVector * src, FttVector * dest) { GtsPoint p; p.x = src->x; p.y = src->y; p.z = src->z; gts_point_transform (&p, GFS_MAP_TRANSFORM (map)->im); dest->x = p.x; dest->y = p.y; dest->z = p.z; } static void map_transform_inverse (GfsMap * map, const FttVector * src, FttVector * dest) { GtsPoint p; p.x = src->x; p.y = src->y; p.z = src->z; gts_point_transform (&p, GFS_MAP_TRANSFORM (map)->m); dest->x = p.x; dest->y = p.y; dest->z = p.z; } static void gfs_map_transform_init (GfsMap * map) { map->transform = map_transform_transform; map->inverse = map_transform_inverse; GFS_MAP_TRANSFORM (map)->m = gts_matrix_identity (NULL); GFS_MAP_TRANSFORM (map)->im = gts_matrix_identity (NULL); } GfsMapClass * gfs_map_transform_class (void) { static GfsMapClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_map_transform_info = { "GfsMapTransform", sizeof (GfsMapTransform), sizeof (GfsMapClass), (GtsObjectClassInitFunc) gfs_map_transform_class_init, (GtsObjectInitFunc) gfs_map_transform_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_map_class ()), &gfs_map_transform_info); } return klass; } /** \endobject{GfsMapTransform} */ gerris-snapshot-131206/src/vof.h0000644000175100017510000001430412250371171013416 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __VOF_H__ #define __VOF_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "advection.h" #include "variable.h" #define GFS_IS_FULL(f) ((f) == 0. || (f) == 1.) gdouble gfs_line_area (const FttVector * m, gdouble alpha); void gfs_line_center (const FttVector * m, gdouble alpha, gdouble a, FttVector * p); gdouble gfs_line_area_center (const FttVector * m, gdouble alpha, FttVector * p); gdouble gfs_line_alpha (const FttVector * m, gdouble c); #if FTT_2D # define gfs_plane_volume gfs_line_area # define gfs_plane_alpha gfs_line_alpha # define gfs_plane_center gfs_line_center # define gfs_plane_area_center gfs_line_area_center #else /* 3D */ gdouble gfs_plane_volume (const FttVector * m, gdouble alpha); gdouble gfs_plane_alpha (const FttVector * m, gdouble c); void gfs_plane_center (const FttVector * m, gdouble alpha, gdouble a, FttVector * p); gdouble gfs_plane_area_center (const FttVector * m, gdouble alpha, FttVector * p); #endif /* 3D */ void gfs_youngs_gradient (FttCell * cell, GfsVariable * v, FttVector * g); /* GfsVariableTracerVOF: header */ typedef struct _GfsVariableTracerVOF GfsVariableTracerVOF; typedef struct _GfsVariableTracerVOFClass GfsVariableTracerVOFClass; struct _GfsVariableTracerVOF { /*< private >*/ GfsVariableTracer parent; /* a list of GfsVariableVOFConcentration associated with this VOF tracer */ GtsSListContainer * concentrations; /*< public >*/ GfsVariable * m[FTT_DIMENSION], * alpha; }; struct _GfsVariableTracerVOFClass { /*< private >*/ GfsVariableClass parent_class; /*< public >*/ void (* update) (GfsVariable * v, GfsDomain * domain); }; #define GFS_VARIABLE_TRACER_VOF(obj) GTS_OBJECT_CAST (obj,\ GfsVariableTracerVOF,\ gfs_variable_tracer_vof_class ()) #define GFS_VARIABLE_TRACER_VOF_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsVariableTracerVOFClass,\ gfs_variable_tracer_vof_class()) #define GFS_IS_VARIABLE_TRACER_VOF(obj) (gts_object_is_from_class (obj,\ gfs_variable_tracer_vof_class ())) GfsVariableTracerVOFClass * gfs_variable_tracer_vof_class (void); /* GfsVariableVOFConcentration: header */ typedef struct _GfsVariableVOFConcentration GfsVariableVOFConcentration; struct _GfsVariableVOFConcentration { /*< private >*/ GfsVariableTracer parent; /*< public >*/ GfsVariableTracerVOF * vof; }; #define GFS_VARIABLE_VOF_CONCENTRATION(obj) GTS_OBJECT_CAST (obj,\ GfsVariableVOFConcentration,\ gfs_variable_vof_concentration_class ()) #define GFS_IS_VARIABLE_VOF_CONCENTRATION(obj) (gts_object_is_from_class (obj,\ gfs_variable_vof_concentration_class ())) GfsVariableClass * gfs_variable_vof_concentration_class (void); /* GfsVariableTracerVOFHeight: header */ typedef struct _GfsVariableTracerVOFHeight GfsVariableTracerVOFHeight; struct _GfsVariableTracerVOFHeight { /*< private >*/ GfsVariableTracerVOF parent; /*< public >*/ GfsVariable * hb[FTT_DIMENSION], * ht[FTT_DIMENSION]; }; #define GFS_VARIABLE_TRACER_VOF_HEIGHT(obj) GTS_OBJECT_CAST (obj,\ GfsVariableTracerVOFHeight,\ gfs_variable_tracer_vof_height_class ()) #define GFS_IS_VARIABLE_TRACER_VOF_HEIGHT(obj) (gts_object_is_from_class (obj,\ gfs_variable_tracer_vof_height_class ())) GfsVariableTracerVOFClass * gfs_variable_tracer_vof_height_class (void); void gfs_tracer_vof_advection (GfsDomain * domain, GfsAdvectionParams * par); gdouble gfs_vof_face_value (const FttCellFace * face, GfsVariableTracerVOF * t); gdouble gfs_vof_face_fraction (const FttCellFace * face, GfsVariableTracerVOF * t); guint gfs_vof_facet (FttCell * cell, GfsVariableTracerVOF * t, FttVector * p, FttVector * m); gdouble gfs_vof_facet_distance2 (FttCell * cell, GfsVariableTracerVOF * t, GtsPoint * p); gdouble gfs_vof_center (FttCell * cell, GfsVariableTracerVOF * t, FttVector * p); gdouble gfs_vof_plane_interpolate (FttCell * cell, FttVector * p, guint level, GfsVariableTracerVOF * t, FttVector * m); gdouble gfs_vof_interpolate (FttCell * cell, FttVector * p, guint level, GfsVariableTracerVOF * t); gdouble gfs_height_curvature (FttCell * cell, GfsVariableTracerVOF * t, gdouble * kmax); gboolean gfs_curvature_along_direction (FttCell * cell, GfsVariableTracerVOFHeight * t, FttComponent c, gdouble * kappa, gdouble * kmax); gdouble gfs_height_curvature_new (FttCell * cell, GfsVariableTracerVOFHeight * t, gdouble * kmax); gdouble gfs_fit_curvature (FttCell * cell, GfsVariableTracerVOF * t, gdouble * kmax); gdouble gfs_vof_correctness (FttCell * cell, GfsVariableTracerVOF * t); GfsVariable * gfs_closest_height (FttCell * cell, GfsVariableTracerVOFHeight * t, FttComponent c, gdouble * orientation); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __VOF_H__ */ gerris-snapshot-131206/src/simulation.h0000644000175100017510000001311412250371171015006 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __SIMULATION_H__ #define __SIMULATION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "domain.h" #include "timestep.h" #ifndef __EVENT_H__ typedef struct _GfsSimulation GfsSimulation; #endif typedef struct _GfsSimulationClass GfsSimulationClass; typedef struct _GfsTime GfsTime; typedef struct _GfsPhysicalParams GfsPhysicalParams; typedef struct _GfsAdaptStats GfsAdaptStats; struct _GfsTime { gdouble t, start, end; guint i, istart, iend; gdouble dtmax; }; struct _GfsPhysicalParams { gdouble L, g; GfsFunction * alpha; }; struct _GfsAdaptStats { guint removed, created; GtsRange cmax; GtsRange ncells; gint depth_increase; }; struct _GfsSimulation { GfsDomain parent; GfsTime time; GfsPhysicalParams physical_params; GfsMultilevelParams projection_params; GfsMultilevelParams approx_projection_params; GfsAdvectionParams advection_params; GtsSListContainer * refines; GtsSListContainer * adapts; GfsAdaptStats adapts_stats; GtsSListContainer * events, * maps; GSList * modules, * globals, * preloaded_modules; GtsSListContainer * solids; guint thin; gboolean output_solid; gdouble tnext; GfsVariable * u0[FTT_DIMENSION]; }; struct _GfsSimulationClass { GfsDomainClass parent_class; void (* run) (GfsSimulation *); gdouble (* cfl) (GfsSimulation *); }; #define GFS_SIMULATION(obj) GTS_OBJECT_CAST (obj,\ GfsSimulation,\ gfs_simulation_class ()) #define GFS_SIMULATION_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsSimulationClass,\ gfs_simulation_class()) #define GFS_IS_SIMULATION(obj) (gts_object_is_from_class (obj,\ gfs_simulation_class ())) void gfs_advance_tracers (GfsSimulation * sim, gdouble dt); GfsSimulationClass * gfs_simulation_class (void); GfsSimulation * gfs_simulation_new (GfsSimulationClass * klass); void gfs_simulation_init (GfsSimulation * sim); void gfs_simulation_write (GfsSimulation * sim, gint max_depth, FILE * fp); void gfs_simulation_union_write (GfsSimulation * sim, gint max_depth, FILE * fp); GfsSimulation * gfs_simulation_read (GtsFile * fp); GSList * gfs_simulation_get_solids (GfsSimulation * sim); guint gfs_check_solid_fractions (GfsDomain * domain); void gfs_simulation_refine (GfsSimulation * sim); void gfs_simulation_set_timestep (GfsSimulation * sim); void gfs_simulation_map (GfsSimulation * sim, FttVector * p); void gfs_simulation_map_inverse (GfsSimulation * sim, FttVector * p); void gfs_simulation_map_vector (GfsSimulation * sim, const FttVector * p, FttVector * v); void gfs_simulation_map_inverse_vector (GfsSimulation * sim, const FttVector * p, FttVector * v); void gfs_simulation_map_inverse_cell (GfsSimulation * sim, FttVector p[4]); gdouble gfs_dimensional_value (GfsVariable * v, gdouble val); gboolean gfs_variable_is_dimensional (GfsVariable * v); void gfs_time_init (GfsTime * t); void gfs_time_write (GfsTime * t, FILE * fp); void gfs_time_read (GfsTime * t, GtsFile * fp); void gfs_physical_params_init (GfsPhysicalParams * p); void gfs_physical_params_write (GfsPhysicalParams * p, FILE * fp); void gfs_physical_params_read (GfsPhysicalParams * p, GfsDomain * domain, GtsFile * fp); void gfs_simulation_run (GfsSimulation * sim); #define gfs_object_simulation(o) GFS_SIMULATION(GTS_OBJECT (o)->reserved) #define gfs_object_simulation_set(o,s) (GTS_OBJECT (o)->reserved = (s)) /* GfsAdvection: Header */ GfsSimulationClass * gfs_advection_class (void); /* GfsPoisson: Header */ #define GFS_IS_POISSON(obj) (gts_object_is_from_class (obj, gfs_poisson_class ())) GfsSimulationClass * gfs_poisson_class (void); /* GfsAxi: Header */ #define GFS_IS_AXI(obj) (gts_object_is_from_class (obj, gfs_axi_class ())) GfsSimulationClass * gfs_axi_class (void); /* GfsAdvectionAxi: Header */ #define GFS_IS_ADVECTION_AXI(obj) (gts_object_is_from_class (obj,\ gfs_advection_axi_class ())) GfsSimulationClass * gfs_advection_axi_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __SIMULATION_H__ */ gerris-snapshot-131206/src/solid.c0000644000175100017510000012342312250371171013734 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Solid boundaries. */ #include #include #include #include "solid.h" #include "vof.h" #include "variable.h" /** * gfs_cell_fluid: * @cell: a #FttCell. * * Sets @cell and all its descendants as full fluid cells. */ void gfs_cell_fluid (FttCell * cell) { g_return_if_fail (cell != NULL); if (GFS_STATE (cell)->solid) { g_free (GFS_STATE (cell)->solid); GFS_STATE (cell)->solid = NULL; } if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren child; guint i; ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) gfs_cell_fluid (child.c[i]); } } typedef struct { GtsPoint p[4]; GfsSegment s[4]; } CellFace; static void face_fractions (CellFace * f, GfsSolidVector * solid, FttVector * h) { static guint etod[] = { 3, 0, 2, 1 }; guint k, m; gboolean ins; guint o = 0; GtsPoint r[2]; gdouble a, x0 = f->p[0].x, y0 = f->p[0].y; solid->a = 0.; solid->cm.x = solid->cm.y = solid->cm.z = 0.; solid->ca.z = 0.; for (m = 0; m < 4 && f->s[m].n == 0; m++); ins = f->s[m].inside < 0; for (k = m; k < m + 4; k++) { guint i = k % 4, i1 = (i + 1) % 4; gdouble x1 = f->p[i].x - x0, y1 = f->p[i].y - y0, x2 = f->p[i1].x - x0, y2 = f->p[i1].y - y0; if (f->s[i].n > 0) { g_assert (ins == (f->s[i].inside < 0)); solid->s[etod[i]] = ins ? f->s[i].x : 1. - f->s[i].x; r[o].x = x1 + f->s[i].x*(x2 - x1); r[o].y = y1 + f->s[i].x*(y2 - y1); if (ins) { x2 = r[o].x; y2 = r[o].y; } else { x1 = r[o].x; y1 = r[o].y; } solid->a += (x1 + x2)*(y2 - y1); solid->cm.x += (x1 - x2)*(2.*(x1*y1 + x2*y2) + x1*y2 + x2*y1); solid->cm.y += (y2 - y1)*(2.*(x1*y1 + x2*y2) + x1*y2 + x2*y1); o++; if (o == 2) { o = 0; if (ins) { x1 = r[1].x; y1 = r[1].y; x2 = r[0].x; y2 = r[0].y; } else { x1 = r[0].x; y1 = r[0].y; x2 = r[1].x; y2 = r[1].y; } solid->a += (x1 + x2)*(y2 - y1); solid->cm.x += (x1 - x2)*(2.*(x1*y1 + x2*y2) + x1*y2 + x2*y1); solid->cm.y += (y2 - y1)*(2.*(x1*y1 + x2*y2) + x1*y2 + x2*y1); solid->ca.x = (x1 + x2)/2.; solid->ca.y = (y1 + y2)/2.; } ins = !ins; } else if (ins) { solid->s[etod[i]] = 1.; solid->a += (x1 + x2)*(y2 - y1); solid->cm.x += (x1 - x2)*(2.*(x1*y1 + x2*y2) + x1*y2 + x2*y1); solid->cm.y += (y2 - y1)*(2.*(x1*y1 + x2*y2) + x1*y2 + x2*y1); } else solid->s[etod[i]] = 0.; } a = solid->a < 0. ? 0. : solid->a/(2.*h->x*h->y); solid->ca.x += x0; solid->ca.y += y0; if (a > 1e-4) { solid->cm.x = x0 + solid->cm.x/(3.*solid->a); solid->cm.y = y0 + solid->cm.y/(3.*solid->a); } else { guint n = 0; solid->cm.x = solid->cm.y = 0.; for (m = 0; m < 4 && f->s[m].n == 0; m++); ins = f->s[m].inside < 0; for (k = m; k < m + 4; k++) { guint i = k % 4, i1 = (i + 1) % 4; gdouble x1 = f->p[i].x - x0, y1 = f->p[i].y - y0, x2 = f->p[i1].x - x0, y2 = f->p[i1].y - y0; if (f->s[i].n > 0) { gdouble x = x1 + f->s[i].x*(x2 - x1); gdouble y = y1 + f->s[i].x*(y2 - y1); g_assert (ins == (f->s[i].inside < 0)); solid->cm.x += x; solid->cm.y += y; n++; if (ins) { solid->cm.x += x1; solid->cm.y += y1; n++; } ins = !ins; } else if (ins) { solid->cm.x += x1; solid->cm.y += y1; n++; } } g_assert (n > 0); solid->cm.x = x0 + solid->cm.x/n; solid->cm.y = y0 + solid->cm.y/n; } solid->a = a; } static void face_new (CellFace * f, FttCell * cell, GfsGenericSurface * s, FttVector * h) { FttVector p; guint i; ftt_cell_pos (cell, &p); f->p[0].x = p.x - h->x/2.; f->p[0].y = p.y - h->y/2.; f->p[0].z = 0.; f->p[1].x = p.x + h->x/2.; f->p[1].y = p.y - h->y/2.; f->p[1].z = 0.; f->p[2].x = p.x + h->x/2.; f->p[2].y = p.y + h->y/2.; f->p[2].z = 0.; f->p[3].x = p.x - h->x/2.; f->p[3].y = p.y + h->y/2.; f->p[3].z = 0.; for (i = 0; i < 4; i++) { f->s[i].E = &f->p[i]; f->s[i].D = &f->p[(i + 1) % 4]; gfs_surface_segment_intersection (s, cell, &f->s[i]); } } static gboolean solid_face_is_thin (CellFace * f) { guint odd = 0, even = 0, i; for (i = 0; i < 4; i++) if (f->s[i].n) { if (f->s[i].n % 2 != 0) odd++; else even++; } if (odd == 2 && even == 1) { for (i = 0; i < 4; i++) if (f->s[i].n % 2 != 0 && f->s[(i + 2) % 4].n % 2 != 0) return FALSE; return TRUE; } return (odd > 2 || even > 1); } /** * gfs_set_2D_solid_fractions_from_surface: * @cell: a #FttCell. * @s: a #GfsGenericSurface. * * Sets the 2D volume fractions of @cell cut by @s. * * Returns: %TRUE if the cell is thin, %FALSE otherwise; */ gboolean gfs_set_2D_solid_fractions_from_surface (FttCell * cell, GfsGenericSurface * s) { GfsSolidVector * solid; FttVector h; CellFace f; guint i, n1 = 0; gboolean thin = FALSE; g_return_val_if_fail (cell != NULL, FALSE); g_return_val_if_fail (s != NULL, FALSE); h.x = h.y = ftt_cell_size (cell); face_new (&f, cell, s, &h); for (i = 0; i < 4; i++) if (f.s[i].n % 2 != 0) { f.s[i].x /= f.s[i].n; n1++; } else f.s[i].n = 0; solid = GFS_STATE (cell)->solid; switch (n1) { case 0: break; case 4: thin = TRUE; /* fall through */ case 2: { if (!solid) GFS_STATE (cell)->solid = solid = g_malloc0 (sizeof (GfsSolidVector)); face_fractions (&f, solid, &h); if (solid->a == 1.) { g_free (solid); GFS_STATE (cell)->solid = NULL; } break; } default: { FttVector p; ftt_cell_pos (cell, &p); g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "the surface may not be closed (n1 = %d)\n" "at (%g,%g,%g)", n1, p.x, p.y, p.z); } } return thin; } typedef struct { gboolean destroy_solid; FttCellCleanupFunc cleanup; gpointer data; GfsVariable * status; guint thin; GSList * solid_boxes; } InitSolidParams; static gboolean thin_cell_is_solid (FttCell * cell) { gdouble sum = 0.; FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) sum += GFS_STATE (cell)->solid->s[d]; return (sum < FTT_NEIGHBORS/2); } static void deal_with_thin_cell (FttCell * cell, InitSolidParams * p) { cell->flags |= GFS_FLAG_THIN; if (thin_cell_is_solid (cell)) GFS_VALUE (cell, p->status) = GFS_STATUS_SOLID; else { GfsSolidVector * solid = GFS_STATE (cell)->solid; FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) solid->s[d] = (solid->s[d] > 0.5); solid->a = 1.; ftt_cell_pos (cell, &solid->cm); solid->ca = solid->cm; } } #if FTT_2D /* 2D */ static void set_solid_fractions_from_surface (FttCell * cell, GfsGenericSurface * s, InitSolidParams * p) { if (gfs_set_2D_solid_fractions_from_surface (cell, s)) { p->thin++; deal_with_thin_cell (cell, p); } else if (GFS_STATE (cell)->solid && GFS_STATE (cell)->solid->a == 0.) GFS_VALUE (cell, p->status) = GFS_STATUS_SOLID; } /** * gfs_solid_is_thin: * @cell: a #FttCell. * @s: a #GfsGenericSurface. * * @s is "thin" relative to @cell if the miminum distance between * non-connected faces of @s cutting @cell is smaller than the size of * @cell (see doc/figures/thin.fig). * * Returns: %TRUE if @s is a thin surface, %FALSE otherwise. */ gboolean gfs_solid_is_thin (FttCell * cell, GfsGenericSurface * s) { CellFace f; FttVector h; g_return_val_if_fail (cell != NULL, FALSE); g_return_val_if_fail (s != NULL, FALSE); h.x = h.y = ftt_cell_size (cell); face_new (&f, cell, s, &h); return solid_face_is_thin (&f); } #else /* 3D */ #include "isocube.h" typedef struct { GtsPoint p[8]; GfsSegment s[12]; } CellCube; static void rotate (CellFace * f, FttVector * h, FttComponent c) { guint i; switch (c) { case FTT_X: for (i = 0; i < 4; i++) { f->p[i].x = f->p[i].y; f->p[i].y = f->p[i].z; } h->x = h->y; h->y = h->z; break; case FTT_Y: for (i = 0; i < 4; i++) f->p[i].y = f->p[i].z; h->y = h->z; break; case FTT_Z: break; default: g_assert_not_reached (); } } static void cell_size (FttCell * cell, FttVector * h) { h->x = h->y = ftt_cell_size (cell); h->z = h->x; } /* Returns: the number of closed loops for the given isocube * * Fixme: this algorithm is not correct in general. This has no * consequence for this particular application because we also check * that the isosurface is "planar" together with use of topology() in * set_solid_fractions_from_surface3D(), however this is important in * general. * * The bug is triggered for certain configurations of "non-planar" * isosurfaces. */ static guint topology (CellCube * cube) { guint l, nl = 0; gboolean used[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; for (l = 0; l < 12; l++) { guint nv = 0, e = l, cut = cube->s[e].n % 2; while (cut && !used[e]) { guint m = 0, * ne = connect[e][cube->s[e].inside > 0]; nv++; used[e] = TRUE; cut = 0; while (m < 3 && !cut) { e = ne[m++]; cut = cube->s[e].n % 2; } } if (nv > 2) nl++; } return nl; } static void cube_new (CellCube * cube, FttCell * cell, GfsGenericSurface * s, FttVector * o, FttVector * h) { guint i; for (i = 0; i < FTT_DIMENSION; i++) (&o->x)[i] -= (&h->x)[i]/2.; for (i = 0; i < 8; i++) { /* for each vertex of the cube */ cube->p[i].x = o->x + h->x*vertex[i].x; cube->p[i].y = o->y + h->y*vertex[i].y; cube->p[i].z = o->z + h->z*vertex[i].z; } for (i = 0; i < 12; i++) { cube->s[i].E = &cube->p[edge1[i][0]]; cube->s[i].D = &cube->p[edge1[i][1]]; gfs_surface_segment_intersection (s, cell, &cube->s[i]); } } static void set_solid_fractions_from_surface (FttCell * cell, GfsGenericSurface * surface, InitSolidParams * p) { GfsSolidVector * solid = GFS_STATE (cell)->solid; CellCube cube; FttVector o, ca = {0., 0., 0.}, h; guint i, n1 = 0; gint inside[8] = {0,0,0,0,0,0,0,0}; gboolean planar = TRUE; ftt_cell_pos (cell, &o); cell_size (cell, &h); cube_new (&cube, cell, surface, &o, &h); for (i = 0; i < 12; i++) { /* for each edge of the cube */ GfsSegment * s = &cube.s[i]; if (cube.s[i].n % 2 != 0) { /* only for odd number of intersections */ guint j = edge1[i][0], k = edge1[i][1]; /* intersection vertex position is the average of all the n[i] intersections */ s->x /= s->n; /* average of all intersections */ ca.x += (1. - s->x)*cube.p[j].x + s->x*cube.p[k].x; ca.y += (1. - s->x)*cube.p[j].y + s->x*cube.p[k].y; ca.z += (1. - s->x)*cube.p[j].z + s->x*cube.p[k].z; g_assert (inside[j] == 0 || inside[j] == s->inside); g_assert (inside[k] == 0 || inside[k] == - s->inside); inside[j] = s->inside; inside[k] = - s->inside; n1++; } else s->n = 0; } if (n1 == 0) { /* no intersections */ if (solid) { g_free (solid); GFS_STATE (cell)->solid = NULL; } return; } if (!solid) GFS_STATE (cell)->solid = solid = g_malloc0 (sizeof (GfsSolidVector)); /* compute face fractions */ for (i = 0; i < FTT_NEIGHBORS; i++) { CellFace f; guint j, n2; n2 = 0; for (j = 0; j < 4; j++) { /* initialise face i */ GfsSegment * s = &cube.s[face[i][j][0]]; f.p[j] = cube.p[face_v[i][j]]; f.s[j].n = s->n; if (f.s[j].n) n2++; if (face[i][j][1]) { f.s[j].x = 1. - s->x; f.s[j].inside = - s->inside; } else { f.s[j].x = s->x; f.s[j].inside = s->inside; } } switch (n2) { case 0: { /* the face is not cut */ gint ins = 0; /* checks whether the face vertices are inside or outside */ for (j = 0; j < 4; j++) { gint k = inside[face_v[i][j]]; if (k) { g_assert (ins == 0 || ins == k); ins = k; } } g_assert (ins != 0); solid->s[i] = ins > 0 ? 0. : 1.; break; } case 4: planar = FALSE; /* fall through */ case 2: { /* the face is cut 2 or 4 times */ GfsSolidVector sol; FttVector h1; h1 = h; rotate (&f, &h1, i/2); face_fractions (&f, &sol, &h1); solid->s[i] = sol.a; break; } default: { FttVector p; ftt_cell_pos (cell, &p); g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "the surface may not be closed (n2 = %d)\n" "at (%g,%g,%g)", n2, p.x, p.y, p.z); } } } /* now compute cell fraction, center of area, center of mass */ ca.x /= n1; ca.y /= n1; ca.z /= n1; solid->ca = ca; if (planar && topology (&cube) == 1) { FttVector m; gdouble alpha, n = 0.; gboolean sym[FTT_DIMENSION]; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) { (&ca.x)[c] = ((&ca.x)[c] - (&o.x)[c])/(&h.x)[c]; (&m.x)[c] = solid->s[2*c + 1] - solid->s[2*c]; if ((&m.x)[c] < 0.) { (&m.x)[c] = - (&m.x)[c]; (&ca.x)[c] = 1. - (&ca.x)[c]; sym[c] = TRUE; } else sym[c] = FALSE; n += (&m.x)[c]; } if (n == 0.) { /* this is a fluid or solid cell */ for (c = 1; c < FTT_NEIGHBORS; c++) g_assert (solid->s[c] == solid->s[0]); if (solid->s[0] == 1.) { /* fluid */ g_free (solid); GFS_STATE (cell)->solid = NULL; return; } else { /* solid */ solid->a = 0.; solid->cm.x = solid->cm.y = solid->cm.z = 0.; } } else { m.x /= n; m.y /= n; m.z /= n; alpha = m.x*ca.x + m.y*ca.y + m.z*ca.z; solid->a = gfs_plane_volume (&m, alpha); gfs_plane_center (&m, alpha, solid->a, &solid->cm); } for (c = 0; c < FTT_DIMENSION; c++) (&solid->cm.x)[c] = (&o.x)[c] + (sym[c] ? 1. - (&solid->cm.x)[c] : (&solid->cm.x)[c])*(&h.x)[c]; } else { /* this is a "thin" cell */ p->thin++; deal_with_thin_cell (cell, p); } if (solid->a == 0.) GFS_VALUE (cell, p->status) = GFS_STATUS_SOLID; } /** * gfs_solid_is_thin: * @cell: a #FttCell. * @s: a #GfsGenericSurface. * * @s is "thin" relative to @cell if the miminum distance between * non-connected faces of @s cutting @cell is smaller than the size of * @cell (see doc/figures/thin.fig). * * Returns: %TRUE if @s is a thin surface, %FALSE otherwise. */ gboolean gfs_solid_is_thin (FttCell * cell, GfsGenericSurface * s) { CellCube cube; FttVector o, h; guint i; g_return_val_if_fail (cell != NULL, FALSE); g_return_val_if_fail (s != NULL, FALSE); ftt_cell_pos (cell, &o); cell_size (cell, &h); cube_new (&cube, cell, s, &o, &h); for (i = 0; i < FTT_NEIGHBORS; i++) { CellFace f; guint j; for (j = 0; j < 4; j++) f.s[j].n = cube.s[face[i][j][0]].n; if (solid_face_is_thin (&f)) return TRUE; } return (topology (&cube) > 1); } #endif /* 3D */ static gdouble solid_sa (GfsSolidVector * s) { gdouble sa2 = 0.; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) { gdouble n = s->s[2*c] - s->s[2*c + 1]; sa2 += n*n; } return sqrt (sa2); } /** * gfs_cell_init_solid_fractions_from_children: * @cell: a #FttCell. * * Uses the values of the solid fractions of the children of @cell to * compute the values of its solid fractions. * * This function fails if @cell is a leaf of the cell tree. */ void gfs_cell_init_solid_fractions_from_children (FttCell * cell) { FttCellChildren child; guint i, j; gdouble w = 0., wa = 0.; gboolean cell_is_solid = TRUE; gboolean cell_is_mixed = FALSE; FttVector cm = { 0., 0., 0.}; FttVector ca = { 0., 0., 0.}; g_return_if_fail (cell != NULL); g_return_if_fail (!FTT_CELL_IS_LEAF (cell)); ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { if (GFS_IS_FLUID (child.c[i])) { FttVector p; w += 1.; ftt_cell_pos (child.c[i], &p); cm.x += p.x; cm.y += p.y; cm.z += p.z; cell_is_solid = FALSE; } else { GfsSolidVector * solid = GFS_STATE (child.c[i])->solid; gdouble sa = solid_sa (solid) + 1e-9; w += solid->a; wa += sa; cm.x += solid->cm.x*solid->a; cm.y += solid->cm.y*solid->a; cm.z += solid->cm.z*solid->a; ca.x += solid->ca.x*sa; ca.y += solid->ca.y*sa; ca.z += solid->ca.z*sa; cell_is_mixed = TRUE; } } if (cell_is_mixed) { GfsSolidVector * solid = GFS_STATE (cell)->solid; if (solid == NULL) GFS_STATE (cell)->solid = solid = g_malloc0 (sizeof (GfsSolidVector)); solid->a = w/FTT_CELLS; g_assert (wa > 0.); solid->ca.x = ca.x/wa; solid->ca.y = ca.y/wa; solid->ca.z = ca.z/wa; if (w > 0.) { solid->cm.x = cm.x/w; solid->cm.y = cm.y/w; solid->cm.z = cm.z/w; } else ftt_cell_pos (cell, &solid->cm); for (i = 0; i < FTT_NEIGHBORS; i++) { guint n = ftt_cell_children_direction (cell, i, &child); w = 0.; for (j = 0; j < n; j++) if (child.c[j]) w += GFS_IS_FLUID (child.c[j]) ? 1. : GFS_STATE (child.c[j])->solid->s[i]; solid->s[i] = w/n; } } else { /* !cell_is_mixed */ if (GFS_STATE (cell)->solid) { g_free (GFS_STATE (cell)->solid); GFS_STATE (cell)->solid = NULL; } g_assert (!cell_is_solid); } } static void push_leaf (GtsFifo * fifo, FttCell * cell, FttDirection d, gdouble a, GfsVariable * status) { if (FTT_CELL_IS_LEAF (cell)) { if (!GFS_IS_MIXED (cell) && GFS_VALUE (cell, status) == GFS_STATUS_UNDEFINED) { GFS_VALUE (cell, status) = a; gts_fifo_push (fifo, cell); } } else { FttCellChildren child; guint i, n; n = ftt_cell_children_direction (cell, FTT_OPPOSITE_DIRECTION (d), &child); for (i = 0; i < n; i++) if (child.c[i] && !GFS_IS_MIXED (child.c[i]) && GFS_VALUE (child.c[i], status) == GFS_STATUS_UNDEFINED) { g_assert (FTT_CELL_IS_LEAF (child.c[i])); GFS_VALUE (child.c[i], status) = a; gts_fifo_push (fifo, child.c[i]); } } } static void paint_leaf (GtsFifo * fifo, gdouble a, GfsVariable * status) { FttCell * cell; while ((cell = gts_fifo_pop (fifo))) { FttDirection i; FttCellNeighbors n; ftt_cell_neighbors (cell, &n); for (i = 0; i < FTT_NEIGHBORS; i++) if (n.c[i] && !GFS_CELL_IS_BOUNDARY (n.c[i])) push_leaf (fifo, n.c[i], i, a, status); } } static void paint_mixed_leaf (FttCell * cell, GfsVariable * status) { if (GFS_IS_MIXED (cell)) { GfsSolidVector * solid = GFS_STATE (cell)->solid; GtsFifo * fifo; FttCell * n; FttDirection i; fifo = gts_fifo_new (); for (i = 0; i < FTT_NEIGHBORS; i++) if ((n = ftt_cell_neighbor (cell, i)) && !GFS_CELL_IS_BOUNDARY (n)) { if (solid->s[i] == 0. || solid->s[i] == 1.) { push_leaf (fifo, n, i, solid->s[i] + 1., status); paint_leaf (fifo, solid->s[i] + 1., status); } else if (!FTT_CELL_IS_LEAF (n)) { FttCellChildren child; guint j, k; gdouble w = 0.; k = ftt_cell_children_direction (n, FTT_OPPOSITE_DIRECTION (i), &child); for (j = 0; j < k; j++) if (child.c[j]) w += GFS_IS_FLUID (child.c[j]) ? 1. : GFS_STATE (child.c[j])->solid->s[FTT_OPPOSITE_DIRECTION (i)]; if (w/k <= 0. || w/k >= 1.) g_warning ("file %s: line %d (%s): w/k=%g solid->s[%d]=%g", __FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, w/k, i, solid->s[i]); solid->s[i] = w/k; } } gts_fifo_destroy (fifo); } } static void solid_fractions_from_children (FttCell * cell, InitSolidParams * p) { if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren child; guint i; ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) solid_fractions_from_children (child.c[i], p); if (FTT_CELL_IS_LEAF (cell)) /* all the children have been destroyed i.e. the cell is solid */ GFS_VALUE (cell, p->status) = GFS_STATUS_SOLID; else { gfs_cell_init_solid_fractions_from_children (cell); GFS_VALUE (cell, p->status) = GFS_STATUS_UNDEFINED; if (!p->destroy_solid && !GFS_IS_MIXED (cell)) { ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { if (GFS_VALUE (cell, p->status) == GFS_STATUS_UNDEFINED) GFS_VALUE (cell, p->status) = GFS_VALUE (child.c[i], p->status); else g_assert (GFS_VALUE (cell, p->status) == GFS_VALUE (child.c[i], p->status)); } } } } if (p->destroy_solid && GFS_VALUE (cell, p->status) == GFS_STATUS_SOLID && !FTT_CELL_IS_ROOT (cell)) ftt_cell_destroy (cell, p->cleanup, p->data); } static void foreach_box (GfsBox * box, InitSolidParams * p) { solid_fractions_from_children (box->root, p); if (p->destroy_solid && GFS_VALUE (box->root, p->status) == GFS_STATUS_SOLID) p->solid_boxes = g_slist_prepend (p->solid_boxes, box); } static void match_fractions (FttCell * cell, GfsVariable * status) { if (GFS_IS_MIXED (cell)) { FttCellNeighbors neighbor; GfsSolidVector * solid = GFS_STATE (cell)->solid; FttDirection d; ftt_cell_neighbors (cell, &neighbor); for (d = 0; d < FTT_NEIGHBORS; d++) if (neighbor.c[d] && !GFS_CELL_IS_BOUNDARY (neighbor.c[d])) { if (!FTT_CELL_IS_LEAF (neighbor.c[d])) { FttCellChildren child; FttDirection od = FTT_OPPOSITE_DIRECTION (d); guint i, n = ftt_cell_children_direction (neighbor.c[d], od, &child); gdouble s = 0.; g_assert (GFS_VALUE (neighbor.c[d], status) != 1.); for (i = 0; i < n; i++) if (child.c[i] && GFS_VALUE (child.c[i], status) != 1.) s += GFS_IS_MIXED (child.c[i]) ? GFS_STATE (child.c[i])->solid->s[od] : 1.; solid->s[d] = s/n; } else if (GFS_VALUE (neighbor.c[d], status) != GFS_STATUS_SOLID) { if (!GFS_IS_MIXED (neighbor.c[d])) solid->s[d] = 1.; else if (neighbor.c[d]->flags & GFS_FLAG_THIN) solid->s[d] = GFS_STATE (neighbor.c[d])->solid->s[FTT_OPPOSITE_DIRECTION (d)]; } else /* neighbor.c[d] is a solid cell */ solid->s[d] = 0.; } } } /** * gfs_init_solid_fractions_leaves: * @domain: a #GfsDomain. * @i: a list of #GfsSolids. * @status: a temporary variable or %NULL. * * Initializes the solid fractions of the leaf cells of @domain. * * Returns: the number of thin cells. */ guint gfs_init_solid_fractions_leaves (GfsDomain * domain, GSList * i, GfsVariable * status) { InitSolidParams p; g_return_val_if_fail (domain != NULL, 0); p.status = status ? status : gfs_temporary_variable (domain); p.thin = 0; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_reset, p.status); while (i) { gfs_domain_traverse_cut (domain, GFS_SOLID (i->data)->s, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseCutFunc) set_solid_fractions_from_surface, &p); i = i->next; } gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) paint_mixed_leaf, p.status); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) match_fractions, p.status); if (status == NULL) gts_object_destroy (GTS_OBJECT (p.status)); return p.thin; } /** * gfs_init_solid_fractions_from_children: * @domain: a #GfsDomain. * @destroy_solid: controls what to do with solid cells. * @cleanup: a #FttCellCleanupFunc or %NULL. * @data: user data to pass to @cleanup. * @status: the status variable. * * Initializes the solid fractions of the non-leaf cells of @domain * using the values of the leaf cells. * * If @destroy_solid is set to %TRUE, the cells entirely contained in * the solid are destroyed using @cleanup as cleanup function. */ void gfs_init_solid_fractions_from_children (GfsDomain * domain, gboolean destroy_solid, FttCellCleanupFunc cleanup, gpointer data, GfsVariable * status) { InitSolidParams p; g_return_if_fail (domain != NULL); g_return_if_fail (status != NULL); p.destroy_solid = destroy_solid; p.cleanup = cleanup; p.data = data; p.status = status; p.solid_boxes = NULL; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) foreach_box, &p); g_slist_foreach (p.solid_boxes, (GFunc) gts_object_destroy, NULL); g_slist_free (p.solid_boxes); if (p.solid_boxes) { gfs_locate_array_destroy (domain->array); domain->array = gfs_locate_array_new (domain); } } /** * gfs_domain_init_solid_fractions: * @domain: a #GfsDomain. * @i: a list of #GfsSolids. * @destroy_solid: controls what to do with solid cells. * @cleanup: a #FttCellCleanupFunc or %NULL. * @data: user data to pass to @cleanup. * @status: a temporary variable or %NULL. * * Initializes the solid fractions of all the cells of @domain. * * If @destroy_solid is set to %TRUE, the cells entirely contained in * the solid are destroyed using @cleanup as cleanup function. * * Returns: the number of thin cells. */ guint gfs_domain_init_solid_fractions (GfsDomain * domain, GSList * i, gboolean destroy_solid, FttCellCleanupFunc cleanup, gpointer data, GfsVariable * status) { GfsVariable * status1; g_return_val_if_fail (domain != NULL, 0); status1 = status ? status : gfs_temporary_variable (domain); guint thin = gfs_init_solid_fractions_leaves (domain, i, status1); gfs_init_solid_fractions_from_children (domain, destroy_solid, cleanup, data, status1); if (status == NULL) gts_object_destroy (GTS_OBJECT (status1)); return thin; } static gboolean check_area_fractions (const FttCell * root) { guint i, level; FttCellNeighbors neighbor; gboolean ret = TRUE; GfsSolidVector * solid; level = ftt_cell_level (root); ftt_cell_neighbors (root, &neighbor); solid = GFS_STATE (root)->solid; if (solid) { GtsBBox bb; ftt_cell_bbox (root, &bb); if (!gts_bbox_point_is_inside (&bb, &solid->cm)) { g_warning ("file %s: line %d (%s): cm (%g,%g,%g)/%d is not inside cell [(%g,%g,%g),(%g,%g,%g)]", __FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, solid->cm.x, solid->cm.y, solid->cm.z, ftt_cell_level (root), bb.x1, bb.y1, bb.z1, bb.x2, bb.y2, bb.z2); ret = FALSE; g_assert_not_reached (); } if (!gts_bbox_point_is_inside (&bb, &solid->ca)) { g_warning ("file %s: line %d (%s): ca (%g,%g,%g)/%d is not inside cell [(%g,%g,%g),(%g,%g,%g)]", __FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, solid->ca.x, solid->ca.y, solid->ca.z, ftt_cell_level (root), bb.x1, bb.y1, bb.z1, bb.x2, bb.y2, bb.z2); ret = FALSE; g_assert_not_reached (); } } for (i = 0; i < FTT_NEIGHBORS; i++) if (neighbor.c[i]) { GfsSolidVector * nsolid = GFS_STATE (neighbor.c[i])->solid; FttDirection oi = FTT_OPPOSITE_DIRECTION (i); if (ftt_cell_level (neighbor.c[i]) == level) { if (GFS_IS_FLUID (root)) { if (!GFS_IS_FLUID (neighbor.c[i])) { if (1. - nsolid->s[oi] >= 1e-10) { FttVector p; ftt_cell_pos (root, &p); g_warning ("file %s: line %d (%s): (%g,%g,%g)/%d: s[%d]: %g", __FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, p.x, p.y, p.z, ftt_cell_level (root), oi, nsolid->s[oi]); ret = FALSE; } nsolid->s[oi] = 1.; } } else if (GFS_IS_MIXED (neighbor.c[i])) { if (fabs (solid->s[i] - nsolid->s[oi]) >= 1e-10) { FttVector p; ftt_cell_pos (root, &p); g_warning ("file %s: line %d (%s): (%g,%g,%g)/%d: s[%d]: %g neighbor->s[%d]: %g", __FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, p.x, p.y, p.z, ftt_cell_level (root), i, solid->s[i], oi, nsolid->s[oi]); ret = FALSE; } nsolid->s[oi] = solid->s[i]; } else { if (1. - solid->s[i] >= 1e-10) { FttVector p; ftt_cell_pos (root, &p); g_warning ("file %s: line %d (%s): (%g,%g,%g)/%d: s[%d]: %g", __FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, p.x, p.y, p.z, ftt_cell_level (root), i, solid->s[i]); ret = FALSE; } solid->s[i] = 1.; } } else { /* fine/coarse boundary */ g_assert (ftt_cell_level (neighbor.c[i]) == level - 1); if (GFS_IS_FLUID (neighbor.c[i])) { if (GFS_IS_MIXED (root)) { if (1. - solid->s[i] >= 1e-10) { FttVector p; ftt_cell_pos (root, &p); g_warning ("file %s: line %d (%s): (%g,%g,%g)/%d: s[%d]: %g", __FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, p.x, p.y, p.z, ftt_cell_level (root), i, solid->s[i]); ret = FALSE; } solid->s[i] = 1.; } } else if (nsolid->s[oi] == 0.) { g_assert (GFS_IS_MIXED (root)); if (solid->s[i] >= 1e-10) { FttVector p; ftt_cell_pos (root, &p); g_warning ("file %s: line %d (%s): (%g,%g,%g)/%d: s[%d]: %g", __FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, p.x, p.y, p.z, ftt_cell_level (root), i, solid->s[i]); ret = FALSE; } solid->s[i] = 0.; } } } if (!FTT_CELL_IS_LEAF (root)) { FttCellChildren child; ftt_cell_children (root, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i] && !check_area_fractions (child.c[i])) ret = FALSE; } return ret; } static void check_solid_fractions (FttCell * cell, gboolean * ret) { FttCellChildren children; guint n; ftt_cell_children (cell, &children); if (!GFS_IS_MIXED (cell)) { for (n = 0; n < FTT_CELLS; n++) if (children.c[n] && GFS_IS_MIXED (children.c[n])) { g_warning ("file %s: line %d (%s): children[%d] is mixed (%g)" " parent is not", __FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, n, GFS_STATE (children.c[n])->solid->a); *ret = FALSE; } } else { gdouble a = 0.; for (n = 0; n < FTT_CELLS; n++) if (children.c[n]) { if (GFS_IS_MIXED (children.c[n])) a += GFS_STATE (children.c[n])->solid->a; else a += 1.; } a /= FTT_CELLS; if (fabs (GFS_STATE (cell)->solid->a - a) >= 1e-10) { g_warning ("file %s: line %d (%s): children->a: %g parent->a: %g", __FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, a, GFS_STATE (cell)->solid->a); *ret = FALSE; } } } /** * gfs_cell_check_solid_fractions: * @root: the root #FttCell of the cell tree to check. * * Checks the consistency of the solid fractions of each cell of the * cell tree relative to the neighboring solid fractions. * * Returns: %TRUE if the solid fractions are consistent, %FALSE otherwise. */ gboolean gfs_cell_check_solid_fractions (FttCell * root) { gboolean ret = TRUE; g_return_val_if_fail (root != NULL, FALSE); ftt_cell_traverse (root, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) check_solid_fractions, &ret); return ret & check_area_fractions (root); } static void save_solid (FttCell * cell, GfsVariable * c) { GFS_DOUBLE_TO_POINTER (GFS_VALUE (cell, c)) = GFS_STATE (cell)->solid; GFS_STATE (cell)->solid = NULL; } static void restore_solid (FttCell * cell, gpointer * data) { GfsVariable * status = data[0]; GfsVariable * c = data[1]; GfsSolidVector * solid = GFS_STATE (cell)->solid; GFS_STATE (cell)->solid = GFS_DOUBLE_TO_POINTER (GFS_VALUE (cell, c)); if (solid) { GFS_VALUE (cell, c) = solid->a; g_free (solid); } else { g_assert (GFS_VALUE (cell, status) == GFS_STATUS_SOLID || GFS_VALUE (cell, status) == GFS_STATUS_FLUID); GFS_VALUE (cell, c) = GFS_VALUE (cell, status) - 1.; } } static void set_status (FttCell * cell, gpointer * data) { GfsVariable * status = data[0]; gdouble * val = data[2]; GFS_VALUE (cell, status) = *val; } static void check_status (GfsBox * box, gpointer * data) { GfsVariable * status = data[0]; if (!GFS_IS_MIXED (box->root) && GFS_VALUE (box->root, status) == GFS_STATUS_UNDEFINED) { GfsGenericSurface * s = data[1]; FttVector pos; ftt_cell_pos (box->root, &pos); gdouble val = gfs_surface_point_is_inside (s, &pos) > 0 ? GFS_STATUS_FLUID : GFS_STATUS_SOLID; data[2] = &val; ftt_cell_traverse (box->root, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) set_status, data); } } /** * gfs_domain_init_fraction: * @domain: a #GfsDomain. * @s: a surface defining the interface boundary. * @c: a #GfsVariable. * * Initializes the fraction @c of the interface @s contained in all * the cells of @domain. */ void gfs_domain_init_fraction (GfsDomain * domain, GfsGenericSurface * s, GfsVariable * c) { gpointer data[3]; GfsVariable * status; g_return_if_fail (domain != NULL); g_return_if_fail (s != NULL); g_return_if_fail (c != NULL); status = gfs_temporary_variable (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) save_solid, c); GfsSolid tmp; tmp.s = s; GSList * l = g_slist_prepend (NULL, &tmp); gfs_domain_init_solid_fractions (domain, l, FALSE, NULL, NULL, status); g_slist_free (l); data[0] = status; data[1] = s; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) check_status, data); data[1] = c; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) restore_solid, data); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, c); gts_object_destroy (GTS_OBJECT (status)); } /** * gfs_cell_cm: * @cell: a #FttCell. * @cm: a #FttVector. * * Fills @cm with the coordinates of the center of mass of @cell. */ void gfs_cell_cm (const FttCell * cell, FttVector * cm) { g_return_if_fail (cell != NULL); g_return_if_fail (cm != NULL); if (GFS_IS_MIXED (cell)) *cm = GFS_STATE (cell)->solid->cm; else ftt_cell_pos (cell, cm); } /** * gfs_solid_normal: * @cell: a #FttCell. * @n: a #FttVector. * * Fills @n with the components of the average unit normal to the * fraction of solid boundary contained in @cell, multiplied by the * area of the fraction of solid boundary contained in @cell. */ void gfs_solid_normal (const FttCell * cell, FttVector * n) { GfsSolidVector * s; g_return_if_fail (cell != NULL); g_return_if_fail (n != NULL); if ((s = GFS_STATE (cell)->solid)) { FttComponent c; #if (FTT_2D) n->z = 0.; #endif /* 2D */ for (c = 0; c < FTT_DIMENSION; c++) (&n->x)[c] = (s->s[2*c + 1] - s->s[2*c]); } else n->x = n->y = n->z = 0.; } /** * gfs_face_ca: * @face: a #FttCellFace. * @ca: a #FttVector. * * Fills @ca with the coordinates of the center of area of @face. */ void gfs_face_ca (const FttCellFace * face, FttVector * ca) { gdouble f; g_return_if_fail (face != NULL); g_return_if_fail (ca != NULL); ftt_face_pos (face, ca); if ((f = GFS_FACE_FRACTION (face)) < 1.) { GfsSolidVector * s = GFS_STATE (face->cell)->solid; gdouble h = ftt_cell_size (face->cell); #if FTT_2D FttComponent cp = FTT_ORTHOGONAL_COMPONENT (face->d/2); (&ca->x)[cp] += (s->s[2*cp] > s->s[2*cp + 1]) ? (1. - f)/2.*h : (f - 1.)/2.*h; #else /* 3D */ static guint perpendicular[FTT_DIMENSION][2] = { {FTT_Y, FTT_Z}, {FTT_Z, FTT_X}, {FTT_X, FTT_Y} }; FttComponent c0 = face->d/2; FttComponent c1 = perpendicular[c0][0]; FttComponent c2 = perpendicular[c0][1]; gboolean s1, s2; FttVector m, p; gdouble n, alpha; m.x = s->s[2*c1 + 1] - s->s[2*c1]; m.y = s->s[2*c2 + 1] - s->s[2*c2]; s1 = (m.x < 0.); s2 = (m.y < 0.); m.x = fabs (m.x); m.y = fabs (m.y); n = m.x + m.y; if (n > 0.) { m.x /= n; m.y /= n; alpha = gfs_line_alpha (&m, f); gfs_line_center (&m, alpha, f, &p); if (s1) p.x = 1. - p.x; if (s2) p.y = 1. - p.y; (&ca->x)[c1] += (p.x - 0.5)*h; (&ca->x)[c2] += (p.y - 0.5)*h; } #endif /* 3D */ } } #if !FTT_2D static void outer_fractions_coarse_fine (FttCell * parent, FttDirection d) { GfsSolidVector * solid = GFS_STATE (parent)->solid; FttComponent c1 = d < 4 ? 2 : 0, c2 = d < 2 || d > 3 ? 1 : 0; gdouble nm; FttVector m; m.x = solid->s[2*c1 + 1] - solid->s[2*c1]; nm = fabs (m.x); m.y = solid->s[2*c2 + 1] - solid->s[2*c2]; nm += fabs (m.y); if (nm > 0.) { m.x /= nm; m.y /= nm; } else m.x = 1.; gdouble alpha = gfs_line_alpha (&m, solid->s[d]); gdouble ss = 0.; FttCellChildren child; guint i, n = ftt_cell_children_direction (parent, d, &child); for (i = 0; i < n; i++) if (child.c[i]) { if (GFS_IS_MIXED (child.c[i])) { GfsSolidVector * s = GFS_STATE (child.c[i])->solid; gdouble alpha1 = alpha; FttVector p; ftt_cell_relative_pos (child.c[i], &p); alpha1 -= m.x*(0.25 + (&p.x)[c1]); alpha1 -= m.y*(0.25 + (&p.x)[c2]); s->s[d] = gfs_line_area (&m, 2.*alpha1); ss += s->s[d]; } else ss += 1.; } /* fixme: this should not happen * It happens in configurations where children cells are not cut by * the VOF approximation but should have non-zero surface * fractions */ if (fabs (solid->s[d] - ss/n) > 1e-5) g_warning ("inconsistent surface fractions %d %f %f %f\n", d, solid->s[d], ss/n, fabs (solid->s[d] - ss/n)); } #endif /* 3D */ /** * gfs_solid_coarse_fine: * @parent: a mixed #FttCell with children. * @domain: a #GfsDomain. * * Fills the solid properties of the children of @parent. * Destroys all children entirely contained in the solid. */ void gfs_solid_coarse_fine (FttCell * parent, GfsDomain * domain) { g_return_if_fail (parent); g_return_if_fail (domain); g_return_if_fail (GFS_IS_MIXED (parent)); g_return_if_fail (!FTT_CELL_IS_LEAF (parent)); GfsSolidVector * solid = GFS_STATE (parent)->solid; FttVector m; FttComponent c; gdouble n = 0; for (c = 0; c < FTT_DIMENSION; c++) { (&m.x)[c] = solid->s[2*c + 1] - solid->s[2*c]; n += fabs ((&m.x)[c]); } if (n > 0.) for (c = 0; c < FTT_DIMENSION; c++) (&m.x)[c] /= n; else m.x = 1.; gdouble alpha = gfs_plane_alpha (&m, solid->a); gdouble h = ftt_cell_size (parent)/2.; guint level = ftt_cell_level (parent) + 1; FttCellChildren child; guint i; ftt_cell_children (parent, &child); for (i = 0; i < FTT_CELLS; i++) { gdouble alpha1 = alpha; FttVector p; ftt_cell_relative_pos (child.c[i], &p); for (c = 0; c < FTT_DIMENSION; c++) alpha1 -= (&m.x)[c]*(0.25 + (&p.x)[c]); if (GFS_STATE (child.c[i])->solid) { g_free (GFS_STATE (child.c[i])->solid); GFS_STATE (child.c[i])->solid = NULL; } gdouble a = gfs_plane_volume (&m, 2.*alpha1); if (a > 0. && a < 1.) { GfsSolidVector * s = GFS_STATE (child.c[i])->solid = g_malloc (sizeof (GfsSolidVector)); s->a = a; ftt_cell_pos (child.c[i], &p); gfs_plane_center (&m, 2.*alpha1, a, &s->cm); gfs_plane_area_center (&m, 2.*alpha1, &s->ca); for (c = 0; c < FTT_DIMENSION; c++) { (&s->cm.x)[c] = (&p.x)[c] + h*((&s->cm.x)[c] - 0.5); (&s->ca.x)[c] = (&p.x)[c] + h*((&s->ca.x)[c] - 0.5); } FttDirection d; FttCellNeighbors n; ftt_cell_neighbors (child.c[i], &n); for (d = 0; d < FTT_NEIGHBORS; d++) if (!n.c[d]) s->s[d] = 0.; else if (GFS_IS_MIXED (n.c[d]) && ftt_cell_level (n.c[d]) == level) s->s[d] = GFS_STATE (n.c[d])->solid->s[FTT_OPPOSITE_DIRECTION (d)]; else if (!ftt_cell_neighbor_is_brother (child.c[i], d) && GFS_IS_FLUID (n.c[d])) s->s[d] = 1.; else { #if FTT_2D gdouble f; FttComponent c1 = d > 1, c2 = !c1; if ((&m.x)[c2] == 0.) f = 0.; else { f = (2.*alpha1 - (&m.x)[c1]*!(d % 2))/(&m.x)[c2]; if (f < 0.) f = 0.; else if (f > 1.) f = 1.; if ((&m.x)[c2] < 0.) f = 1. - f; } s->s[d] = f; #else /* 3D */ /* only initialises "inner" fractions */ if (ftt_cell_neighbor_is_brother (child.c[i], d)) { FttComponent c1 = (d/2 + 1) % 3, c2 = (d/2 + 2) % 3; FttVector mp; mp.x = (&m.x)[c1]; mp.y = (&m.x)[c2]; s->s[d] = gfs_line_area (&mp, d % 2 ? 2.*alpha1 : 2.*alpha1 - (&m.x)[d/2]); } #endif /* 3D */ } } else if (a == 0.) ftt_cell_destroy (child.c[i], (FttCellCleanupFunc) gfs_cell_cleanup, domain); } #if !FTT_2D FttCellNeighbors neighbor; FttDirection d; ftt_cell_neighbors (parent, &neighbor); for (d = 0; d < FTT_NEIGHBORS; d++) if (neighbor.c[d] && FTT_CELL_IS_LEAF (neighbor.c[d]) && !GFS_IS_FLUID (neighbor.c[d])) outer_fractions_coarse_fine (parent, d); #endif /* 3D */ } /** * Solid boundaries. * \beginobject{GfsSolid} */ static void gfs_solid_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_solid_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; gfs_generic_surface_read (GFS_SOLID (*o)->s, gfs_object_simulation (*o), fp); } static void gfs_solid_write (GtsObject * o, FILE * fp) { GfsSimulation * sim = gfs_object_simulation (o); if (sim->output_solid) { (* GTS_OBJECT_CLASS (gfs_solid_class ())->parent_class->write) (o, fp); gfs_generic_surface_write (GFS_SOLID (o)->s, sim, fp); } } static void gfs_solid_destroy (GtsObject * object) { gts_object_destroy (GTS_OBJECT (GFS_SOLID (object)->s)); (* GTS_OBJECT_CLASS (gfs_solid_class ())->parent_class->destroy) (object); } static void gfs_solid_class_init (GtsObjectClass * klass) { klass->read = gfs_solid_read; klass->write = gfs_solid_write; klass->destroy = gfs_solid_destroy; } static void gfs_solid_init (GfsSolid * object) { object->s = GFS_GENERIC_SURFACE (gts_object_new (GTS_OBJECT_CLASS (gfs_surface_class ()))); GFS_EVENT (object)->istep = G_MAXINT/2; } GfsEventClass * gfs_solid_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_solid_info = { "GfsSolid", sizeof (GfsSolid), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_solid_class_init, (GtsObjectInitFunc) gfs_solid_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_solid_info); } return klass; } /** \endobject{GfsSolid} */ gerris-snapshot-131206/src/river.h0000644000175100017510000000762612250371171013764 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __RIVER_H__ #define __RIVER_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "source.h" #include "refine.h" /* GfsLayers: Header */ typedef struct _GfsLayers GfsLayers; struct _GfsLayers { /*< private >*/ GfsRefine parent; /*< public >*/ int nl; }; #define GFS_LAYERS(obj) GTS_OBJECT_CAST (obj,\ GfsLayers,\ gfs_layers_class ()) #define GFS_IS_LAYERS(obj) (gts_object_is_from_class (obj,\ gfs_layers_class ())) GtsObjectClass * gfs_layers_class (void); /* GfsRiver: Header */ typedef struct _GfsRiver GfsRiver; struct _GfsRiver { /*< private >*/ GfsSimulation parent; gdouble * uL, * uR, * f, cfl; /*< public >*/ GfsVariable ** v, ** v1, * zb, * h, * qx, * qy; GfsVariable ** dv[FTT_DIMENSION]; GfsVariable ** flux, ** massflux; gdouble * dz; int l, nlayers, nvar, nt; gdouble g, dt; GfsCenterGradient gradient; guint time_order; gdouble dry; void (* scheme) (const GfsRiver * r, const gdouble * uL, const gdouble * uR, gdouble * f); GfsFunction * nu, * dut, * k; gboolean variable_density; }; #define GFS_RIVER(obj) GTS_OBJECT_CAST (obj,\ GfsRiver,\ gfs_river_class ()) #define GFS_IS_RIVER(obj) (gts_object_is_from_class (obj,\ gfs_river_class ())) GfsSimulationClass * gfs_river_class (void); /* GfsBcSubcritical: Header */ #define GFS_IS_BC_SUBCRITICAL(obj) (gts_object_is_from_class (obj,\ gfs_bc_subcritical_class ())) GfsBcClass * gfs_bc_subcritical_class (void); /* GfsDischargeElevation: Header */ typedef struct _GfsDischargeElevation GfsDischargeElevation; struct _GfsDischargeElevation { /*< private >*/ GfsConstant parent; GfsVariable * P; gdouble flow; /*< public >*/ GfsFunction * Q, * profile; gdouble tolerance; }; #define GFS_DISCHARGE_ELEVATION(obj) GTS_OBJECT_CAST (obj,\ GfsDischargeElevation,\ gfs_discharge_elevation_class ()) #define GFS_IS_DISCHARGE_ELEVATION(obj) (gts_object_is_from_class (obj,\ gfs_discharge_elevation_class ())) GfsEventClass * gfs_discharge_elevation_class (void); /* GfsSourcePipe: Header */ typedef struct _GfsSourcePipe GfsSourcePipe; struct _GfsSourcePipe { /*< private >*/ GfsSourceGeneric parent; FttCell * scell, * ecell; gdouble Q; /*< public >*/ double (* flow_rate) (double z1, double h1, /* terrain elevation and flow depth at inlet */ double z2, double h2, /* terrain elevation and flow depth at outlet */ double l, /* pipe length */ double g, /* acceleration of gravity */ GfsSourcePipe * p); FttVector start, end; gdouble diameter; }; #define GFS_SOURCE_PIPE(obj) GTS_OBJECT_CAST (obj,\ GfsSourcePipe,\ gfs_source_pipe_class ()) #define GFS_IS_SOURCE_PIPE(obj) (gts_object_is_from_class (obj,\ gfs_source_pipe_class ())) GfsSourceGenericClass * gfs_source_pipe_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __RIVER_H__ */ gerris-snapshot-131206/src/tension.c0000644000175100017510000007754712250371171014320 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Surface tension. */ #include #include #include "tension.h" #include "vof.h" #include "levelset.h" #include "init.h" /** * Generic surface tension class. * \beginobject{GfsSourceTensionGeneric} */ static void gfs_source_tension_generic_destroy (GtsObject * o) { gts_object_destroy (GTS_OBJECT (GFS_SOURCE_TENSION_GENERIC (o)->sigma)); (* GTS_OBJECT_CLASS (gfs_source_tension_generic_class ())->parent_class->destroy) (o); } static void gfs_source_tension_generic_read (GtsObject ** o, GtsFile * fp) { GfsSourceTensionGeneric * s = GFS_SOURCE_TENSION_GENERIC (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); (* GTS_OBJECT_CLASS (gfs_source_tension_generic_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable (C)"); return; } if ((s->c = gfs_variable_from_name (domain->variables, fp->token->str)) == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); gfs_function_read (s->sigma, domain, fp); if (fp->type == GTS_ERROR) return; gfs_function_set_units (s->sigma, 3.); } static void gfs_source_tension_generic_write (GtsObject * o, FILE * fp) { GfsSourceTensionGeneric * t = GFS_SOURCE_TENSION_GENERIC (o); (* GTS_OBJECT_CLASS (gfs_source_tension_generic_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", t->c->name); gfs_function_write (t->sigma, fp); } typedef struct { gdouble amin, amax; guint depth; gdouble sigma; GfsSourceTensionGeneric * t; GfsFunction * alpha; GfsVariable * c; } StabilityParams; static void interface_level (FttCell * cell, StabilityParams * p) { guint level = ftt_cell_level (cell); if (level > p->depth && GFS_VALUE (cell, p->c) > 1e-3 && GFS_VALUE (cell, p->c) < 1. - 1.e-3) { p->depth = level; /* fixme: this may not work for a variable surface tension coefficient */ p->sigma = gfs_function_value (p->t->sigma, cell); } } static void min_max_alpha (FttCell * cell, StabilityParams * p) { interface_level (cell, p); if (p->alpha) { gdouble a = gfs_function_value (p->alpha, cell); if (a < p->amin) p->amin = a; if (a > p->amax) p->amax = a; } } static gdouble gfs_source_tension_generic_stability (GfsSourceGeneric * s, GfsSimulation * sim) { GfsSourceTensionGeneric * t = GFS_SOURCE_TENSION_GENERIC (s); gdouble h; StabilityParams p = { G_MAXDOUBLE, -G_MAXDOUBLE, 0 }; p.alpha = sim->physical_params.alpha; p.c = t->c; p.t = t; p.sigma = 0.; gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) min_max_alpha, &p); if (gfs_restore_floating_point_exceptions ()) { gchar * c = g_strconcat ("\n", gfs_function_description (t->sigma, FALSE), NULL); if (p.alpha) c = g_strconcat (c, "\n", gfs_function_description (p.alpha, FALSE), NULL); /* fixme: memory leaks */ g_message ("floating-point exception in user-defined function(s):%s", c); exit (1); } if (p.sigma == 0.) /* no interface */ return G_MAXDOUBLE; h = ftt_level_size (p.depth); if (p.alpha) { gdouble rhom = (1./p.amin + 1./p.amax)/2.; return sqrt (rhom*h*h*h/(M_PI*p.sigma)); } else return sqrt (h*h*h/(M_PI*p.sigma)); } static void gfs_source_tension_generic_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = gfs_source_tension_generic_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_source_tension_generic_read; GTS_OBJECT_CLASS (klass)->write = gfs_source_tension_generic_write; klass->stability = gfs_source_tension_generic_stability; } static void gfs_source_tension_generic_init (GfsSourceTensionGeneric * t) { t->sigma = gfs_function_new (gfs_function_class (), 0.); } GfsSourceGenericClass * gfs_source_tension_generic_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_source_tension_generic_info = { "GfsSourceTensionGeneric", sizeof (GfsSourceTensionGeneric), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) gfs_source_tension_generic_class_init, (GtsObjectInitFunc) gfs_source_tension_generic_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_velocity_class ()), &gfs_source_tension_generic_info); } return klass; } /** \endobject{GfsSourceTensionGeneric} */ /** * Continuum Surface Stress surface tension formulation. * \beginobject{GfsSourceTensionCSS} */ static void gfs_source_tension_css_read (GtsObject ** o, GtsFile * fp) { GfsSourceTensionCSS * s = GFS_SOURCE_TENSION_CSS (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); FttComponent c; (* GTS_OBJECT_CLASS (gfs_source_tension_css_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; for (c = 0; c < FTT_DIMENSION; c++) { static gchar * name[3] = {"_Tx", "_Ty", "_Tz"}; if ((s->t[c] = gfs_variable_from_name (domain->variables, name[c])) == NULL) s->t[c] = gfs_domain_add_variable (domain, name[c], NULL); } } static void foreach_cell_normal (FttCell * cell, GfsSourceTensionCSS * s) { FttVector n; gdouble nn = 0.; gdouble sigh = gfs_function_value (GFS_SOURCE_TENSION_GENERIC (s)->sigma, cell) /ftt_cell_size (cell); FttComponent c; gfs_youngs_gradient (cell, GFS_SOURCE_TENSION_GENERIC (s)->c, &n); for (c = 0; c < FTT_DIMENSION; c++) nn += (&n.x)[c]*(&n.x)[c]; nn = sqrt (nn + 1e-50); GFS_VALUE (cell, s->g[0]) = sigh*n.x*n.x/nn; GFS_VALUE (cell, s->g[1]) = sigh*n.y*n.y/nn; GFS_VALUE (cell, s->g[2]) = sigh*n.x*n.y/nn; } static void foreach_cell_tension_css (FttCell * cell, GfsSourceTensionCSS * s) { gdouble h = ftt_cell_size (cell); FttVector nx, ny, nxy; GfsSimulation * sim = gfs_object_simulation (s); gdouble alpha = sim->physical_params.alpha ? gfs_function_value (sim->physical_params.alpha, cell) : 1.; gfs_youngs_gradient (cell, s->g[0], &nx); gfs_youngs_gradient (cell, s->g[1], &ny); gfs_youngs_gradient (cell, s->g[2], &nxy); GFS_VALUE (cell, s->t[0]) = alpha*(ny.x - nxy.y)/h; GFS_VALUE (cell, s->t[1]) = alpha*(nx.y - nxy.x)/h; } static gboolean gfs_source_tension_css_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_source_tension_css_class ())->parent_class)->event) (event, sim)) { GfsSourceTensionCSS * s = GFS_SOURCE_TENSION_CSS (event); guint i; #if (!FTT_2D) g_assert_not_implemented (); #endif for (i = 0; i < 3; i++) s->g[i] = gfs_temporary_variable (GFS_DOMAIN (sim)); gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) foreach_cell_normal, event); /* fixme: boundary conditions for normal */ gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) foreach_cell_tension_css, event); for (i = 0; i < 3; i++) gts_object_destroy (GTS_OBJECT (s->g[i])); return TRUE; } return FALSE; } static gdouble gfs_source_tension_css_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { return GFS_VALUE (cell, GFS_SOURCE_TENSION_CSS (s)->t[v->component]); } static void gfs_source_tension_css_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_source_tension_css_read; GFS_EVENT_CLASS (klass)->event = gfs_source_tension_css_event; } static void gfs_source_tension_css_init (GfsSourceGeneric * s) { s->centered_value = gfs_source_tension_css_value; } GfsSourceGenericClass * gfs_source_tension_css_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_source_tension_css_info = { "GfsSourceTensionCSS", sizeof (GfsSourceTensionCSS), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) gfs_source_tension_css_class_init, (GtsObjectInitFunc) gfs_source_tension_css_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_tension_generic_class ()), &gfs_source_tension_css_info); } return klass; } /** \endobject{GfsSourceTensionCSS} */ /** * Balanced Continuum Surface Force surface tension formulation. * \beginobject{GfsSourceTension} */ static void gfs_source_tension_read (GtsObject ** o, GtsFile * fp) { GfsSourceTension * s = GFS_SOURCE_TENSION (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); (* GTS_OBJECT_CLASS (gfs_source_tension_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable (Kappa)"); return; } if ((s->k = gfs_variable_from_name (domain->variables, fp->token->str)) == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); if (GFS_IS_VARIABLE_POSITION (s->k)) gfs_function_set_units (GFS_SOURCE_TENSION_GENERIC (s)->sigma, 1.); } static void gfs_source_tension_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_source_tension_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", GFS_SOURCE_TENSION (o)->k->name); } static gdouble gfs_source_tension_stability (GfsSourceGeneric * s, GfsSimulation * sim) { if (GFS_IS_VARIABLE_POSITION (GFS_SOURCE_TENSION (s)->k)) { /* reduced gravity */ StabilityParams p = { G_MAXDOUBLE, -G_MAXDOUBLE, 0 }; p.c = GFS_SOURCE_TENSION_GENERIC (s)->c; p.t = GFS_SOURCE_TENSION_GENERIC (s); p.sigma = 0.; gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) interface_level, &p); return p.sigma > 0. ? sqrt (ftt_level_size (p.depth)/fabs (p.sigma)) : G_MAXDOUBLE; } else /* surface tension */ return gfs_source_tension_generic_stability (s, sim); } static void gfs_source_tension_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_source_tension_read; GTS_OBJECT_CLASS (klass)->write = gfs_source_tension_write; klass->stability = gfs_source_tension_stability; } GfsSourceGenericClass * gfs_source_tension_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_source_tension_info = { "GfsSourceTension", sizeof (GfsSourceTension), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) gfs_source_tension_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_tension_generic_class ()), &gfs_source_tension_info); } return klass; } /** \endobject{GfsSourceTension} */ /** * Curvature of an interface. * \beginobject{GfsVariableCurvature} */ static void variable_curvature_destroy (GtsObject * o) { if (GFS_VARIABLE_CURVATURE (o)->kmax) gts_object_destroy (GTS_OBJECT (GFS_VARIABLE_CURVATURE (o)->kmax)); (* GTS_OBJECT_CLASS (gfs_variable_curvature_class ())->parent_class->destroy) (o); } static void curvature_coarse_fine (FttCell * parent, GfsVariable * v) { FttCellChildren child; guint n; ftt_cell_children (parent, &child); for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) GFS_VALUE (child.c[n], v) = GFS_VALUE (parent, v); } static void curvature_fine_coarse (FttCell * parent, GfsVariable * v) { FttCellChildren child; gdouble val = 0., sa = 0.; guint i; ftt_cell_children (parent, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i] && GFS_HAS_DATA (child.c[i], v)) { val += GFS_VALUE (child.c[i], v); sa += 1.; } if (sa > 0.) GFS_VALUE (parent, v) = val/sa; else GFS_VALUE (parent, v) = GFS_NODATA; } static void variable_curvature_read (GtsObject ** o, GtsFile * fp) { GfsVariableCurvature * v = GFS_VARIABLE_CURVATURE (*o); GfsDomain * domain; (* GTS_OBJECT_CLASS (gfs_variable_curvature_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (fraction or distance)"); return; } domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (!(v->f = gfs_variable_from_name (domain->variables, fp->token->str))) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } g_free (GFS_VARIABLE (v)->description); GFS_VARIABLE (v)->description = NULL; if (GFS_IS_VARIABLE_TRACER (v->f)) { if (!GFS_IS_VARIABLE_TRACER_VOF (v->f)) { gts_file_error (fp, "variable `%s' is not a VOF tracer", fp->token->str); return; } GFS_VARIABLE (v)->description = g_strjoin (" ", "Curvature of the interface defined by tracer", v->f->name, NULL); gts_file_next_token (fp); if (fp->type == GTS_STRING) { v->kmax = gfs_domain_get_or_add_variable (domain, fp->token->str, "Maximum curvature"); if (v->kmax) { v->kmax->coarse_fine = curvature_coarse_fine; v->kmax->fine_coarse = curvature_fine_coarse; gts_file_next_token (fp); } else if (!GFS_IS_VARIABLE_POSITION (v)) { gts_file_error (fp, "`%s' is a reserved variable name", fp->token->str); return; } } } else if (GFS_IS_VARIABLE_DISTANCE (v->f)) { GFS_VARIABLE (v)->description = g_strjoin (" ", "Curvature of the interface defined by distance", v->f->name, NULL); gts_file_next_token (fp); } else { gts_file_error (fp, "variable `%s' is neither a tracer nor a distance", fp->token->str); return; } GFS_VARIABLE (v)->units = -1.; if (v->kmax) v->kmax->units = -1.; } static void variable_curvature_write (GtsObject * o, FILE * fp) { GfsVariableCurvature * v = GFS_VARIABLE_CURVATURE (o); (* GTS_OBJECT_CLASS (gfs_variable_curvature_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", v->f->name); if (v->kmax) fprintf (fp, " %s", v->kmax->name); } static void height_curvature (FttCell * cell, GfsVariable * v) { GfsVariable * t = GFS_VARIABLE_CURVATURE (v)->f; GfsVariable * kmax = GFS_VARIABLE_CURVATURE (v)->kmax; gdouble f = GFS_VALUE (cell, t); if (GFS_IS_FULL (f)) { GFS_VALUE (cell, v) = GFS_NODATA; if (kmax) GFS_VALUE (cell, kmax) = GFS_NODATA; } else { if (kmax) { gdouble k; GFS_VALUE (cell, v) = gfs_height_curvature (cell, GFS_VARIABLE_TRACER_VOF (t), &k); GFS_VALUE (cell, kmax) = k; } else GFS_VALUE (cell, v) = gfs_height_curvature (cell, GFS_VARIABLE_TRACER_VOF (t), NULL); } } static void fit_curvature (FttCell * cell, GfsVariable * v) { GfsVariable * t = GFS_VARIABLE_CURVATURE (v)->f; gdouble f = GFS_VALUE (cell, t); if (!GFS_IS_FULL (f) && !GFS_HAS_DATA (cell, v)) { GfsVariable * kmax = GFS_VARIABLE_CURVATURE (v)->kmax; if (kmax) { gdouble k; GFS_VALUE (cell, v) = gfs_fit_curvature (cell, GFS_VARIABLE_TRACER_VOF (t), &k); GFS_VALUE (cell, kmax) = k; } else GFS_VALUE (cell, v) = gfs_fit_curvature (cell, GFS_VARIABLE_TRACER_VOF (t), NULL); } } typedef struct { GfsVariable * v, * f, * tmp; } DiffuseParms; #define FMIN 0.01 static void diffuse_kmax (FttCell * cell, DiffuseParms * p) { gdouble f = GFS_VALUE (cell, p->f); if (GFS_HAS_DATA (cell, p->v) && f*(1. - f) > FMIN*(1. - FMIN)) GFS_VALUE (cell, p->tmp) = GFS_VALUE (cell, p->v); else { FttCellNeighbors neighbor; gdouble sa = 0., s = 0.; FttDirection d; ftt_cell_neighbors (cell, &neighbor); for (d = 0; d < FTT_NEIGHBORS; d++) if (neighbor.c[d] && GFS_HAS_DATA (neighbor.c[d], p->v)) { gdouble f = GFS_VALUE (neighbor.c[d], p->f); if (f*(1. - f) > FMIN*(1. - FMIN)) { f *= 1. - f; s += f*GFS_VALUE (neighbor.c[d], p->v); sa += f; } } if (sa > 0.) GFS_VALUE (cell, p->tmp) = s/sa; else GFS_VALUE (cell, p->tmp) = GFS_VALUE (cell, p->v); } } static void diffuse (FttCell * cell, DiffuseParms * p) { if (GFS_HAS_DATA (cell, p->v)) GFS_VALUE (cell, p->tmp) = GFS_VALUE (cell, p->v); else { FttCellNeighbors neighbor; gdouble sa = 0., s = 0.; FttDirection d; ftt_cell_neighbors (cell, &neighbor); for (d = 0; d < FTT_NEIGHBORS; d++) if (neighbor.c[d] && GFS_HAS_DATA (neighbor.c[d], p->v)) { s += GFS_VALUE (neighbor.c[d], p->v); sa += 1.; } if (sa > 0.) GFS_VALUE (cell, p->tmp) = s/sa; else GFS_VALUE (cell, p->tmp) = GFS_NODATA; } } static void variable_curvature_diffuse (GfsVariable * v, GfsVariable * f, GfsSimulation * sim, guint n) { GfsDomain * domain = GFS_DOMAIN (sim); FttCellTraverseFunc diff = f ? (FttCellTraverseFunc) diffuse_kmax : (FttCellTraverseFunc) diffuse; DiffuseParms p; p.v = v; p.f = f; p.tmp = gfs_temporary_variable (domain); while (n--) { gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, diff, &p); gfs_variables_swap (p.v, p.tmp); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) p.v->fine_coarse, p.v); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, p.v); } gts_object_destroy (GTS_OBJECT (p.tmp)); } static void variable_curvature_from_fraction (GfsEvent * event, GfsSimulation * sim) { GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * kmax = GFS_VARIABLE_CURVATURE (event)->kmax; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) height_curvature, event); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) GFS_VARIABLE (event)->fine_coarse, event); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, GFS_VARIABLE (event)); if (kmax) { gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) kmax->fine_coarse, kmax); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, kmax); variable_curvature_diffuse (kmax, GFS_VARIABLE_CURVATURE (event)->f, sim, 1); } variable_curvature_diffuse (GFS_VARIABLE (event), NULL, sim, 1); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) fit_curvature, event); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) GFS_VARIABLE (event)->fine_coarse, event); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, GFS_VARIABLE (event)); if (kmax) { gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) kmax->fine_coarse, kmax); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, kmax); variable_curvature_diffuse (kmax, GFS_VARIABLE_CURVATURE (event)->f, sim, 1); } variable_curvature_diffuse (GFS_VARIABLE (event), NULL, sim, 1); } static void normal (FttCell * cell, gpointer * data) { GfsVariable ** nv = data[0]; GfsVariable * d = GFS_VARIABLE_CURVATURE (data[1])->f; GtsVector n = { 0., 0., 0. }; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) n[c] = gfs_center_gradient (cell, c, d->i); gts_vector_normalize (n); for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (cell, nv[c]) = n[c]; } static void distance_curvature (FttCell * cell, gpointer * data) { GfsVariable ** nv = data[0]; gdouble kappa = 0.; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) kappa += gfs_center_gradient (cell, c, nv[c]->i); GFS_VALUE (cell, nv[FTT_DIMENSION]) = kappa/ftt_cell_size (cell); } static void interface_curvature (FttCell * cell, gpointer * data) { GfsVariable * v = data[1]; GfsVariableCurvature * k = GFS_VARIABLE_CURVATURE (v); gdouble f = GFS_VALUE (cell, GFS_VARIABLE_DISTANCE (k->f)->v); if (GFS_IS_FULL (f)) GFS_VALUE (cell, v) = GFS_NODATA; else { GfsVariable ** nv = data[0]; gdouble h = ftt_cell_size (cell)/2.; FttCell * target = cell; FttComponent c; FttVector p; ftt_cell_pos (cell, &p); for (c = 0; c < FTT_DIMENSION; c++) { gdouble delta = GFS_VALUE (cell, k->f)*GFS_VALUE (cell, nv[c]); (&p.x)[c] -= delta; if (fabs (delta) > h) target = NULL; } if (!target) target = gfs_domain_locate (v->domain, p, -1, NULL); GFS_VALUE (cell, v) = gfs_interpolate (target, p, nv[FTT_DIMENSION]); } } static void variable_curvature_from_distance (GfsEvent * event, GfsSimulation * sim) { GfsVariable * n[FTT_DIMENSION + 1]; GfsDomain * domain = GFS_DOMAIN (sim); gpointer data[2]; FttComponent c; if (GFS_IS_AXI (sim)) g_assert_not_implemented (); for (c = 0; c < FTT_DIMENSION + 1; c++) n[c] = gfs_temporary_variable (domain); gfs_variable_set_vector (n, FTT_DIMENSION); data[0] = n; data[1] = event; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) normal, data); for (c = 0; c < FTT_DIMENSION; c++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, n[c]); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) distance_curvature, data); gfs_domain_copy_bc (domain, FTT_TRAVERSE_LEAFS, -1, GFS_VARIABLE (event), n[FTT_DIMENSION]); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) interface_curvature, data); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) GFS_VARIABLE (event)->fine_coarse, event); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, GFS_VARIABLE (event)); for (c = 0; c < FTT_DIMENSION + 1; c++) gts_object_destroy (GTS_OBJECT (n[c])); variable_curvature_diffuse (GFS_VARIABLE (event), NULL, sim, 2); } typedef struct { GfsVariableCurvature * k; FttComponent c; GfsVariable * max; } CurvatureData; static gboolean is_interfacial (FttCell * cell, gpointer data) { GfsVariable * f = data; return (GFS_VALUE (cell, f) > 0. && GFS_VALUE (cell, f) < 1.); } static void set_undefined (FttCell * cell, CurvatureData * p) { GFS_VALUE (cell, GFS_VARIABLE (p->k)) = GFS_NODATA; GFS_VALUE (cell, p->max) = -1.; } static void set_curvature (FttCell * cell, gdouble kappa, gdouble kmax, CurvatureData * p) { GfsVariableTracerVOF * u = GFS_VARIABLE_TRACER_VOF (p->k->f); if (fabs (GFS_VALUE (cell, u->m[p->c])) > GFS_VALUE (cell, p->max)) { GFS_VALUE (cell, GFS_VARIABLE (p->k)) = kappa; GFS_VALUE (cell, p->max) = fabs (GFS_VALUE (cell, u->m[p->c])); if (p->k->kmax) GFS_VALUE (cell, p->k->kmax) = kmax; } } static void propagate_curvature (FttCell * cell, gdouble kappa, gdouble kmax, CurvatureData * p) { GfsVariableTracerVOFHeight * t = GFS_VARIABLE_TRACER_VOF_HEIGHT (p->k->f); GfsVariable * hv = gfs_closest_height (cell, t, p->c, NULL); g_assert (hv); guint level = ftt_cell_level (cell); FttDirection d; for (d = 2*p->c; d <= 2*p->c + 1; d++) { FttCell * n = ftt_cell_neighbor (cell, d); while (n && ftt_cell_level (n) == level && is_interfacial (n, p->k->f) && gfs_closest_height (n, t, p->c, NULL) == hv) { set_curvature (n, kappa, kmax, p); n = ftt_cell_neighbor (n, d); } } } static void height_curvature_max (FttCell * cell, CurvatureData * p) { GfsVariableTracerVOFHeight * t = GFS_VARIABLE_TRACER_VOF_HEIGHT (p->k->f); gdouble kappa, kmax; if (gfs_curvature_along_direction (cell, t, p->c, &kappa, &kmax)) { set_curvature (cell, kappa, kmax, p); propagate_curvature (cell, kappa, kmax, p); } } static void remaining_curvatures (FttCell * cell, GfsVariable * v) { if (!GFS_HAS_DATA (cell, v)) { GfsVariableTracerVOFHeight * t = GFS_VARIABLE_TRACER_VOF_HEIGHT (GFS_VARIABLE_CURVATURE (v)->f); GfsVariable * kmax = GFS_VARIABLE_CURVATURE (v)->kmax; if (kmax) { gdouble k; GFS_VALUE (cell, v) = gfs_height_curvature_new (cell, t, &k); GFS_VALUE (cell, kmax) = k; } else GFS_VALUE (cell, v) = gfs_height_curvature_new (cell, t, NULL); } } static gboolean variable_curvature_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_variable_curvature_class ())->parent_class)->event) (event, sim)) { if (GFS_IS_VARIABLE_TRACER_VOF_HEIGHT (GFS_VARIABLE_CURVATURE (event)->f)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * kmax = GFS_VARIABLE_CURVATURE (event)->kmax; CurvatureData p; p.k = GFS_VARIABLE_CURVATURE (event); p.max = gfs_temporary_variable (domain); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) set_undefined, &p); for (p.c = 0; p.c < FTT_DIMENSION; p.c++) gfs_domain_cell_traverse_condition (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) height_curvature_max, &p, is_interfacial, GFS_VARIABLE_CURVATURE (event)->f); gts_object_destroy (GTS_OBJECT (p.max)); gfs_domain_cell_traverse_condition (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) remaining_curvatures, event, is_interfacial, GFS_VARIABLE_CURVATURE (event)->f); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) GFS_VARIABLE (event)->fine_coarse, event); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, GFS_VARIABLE (event)); if (kmax) { gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) kmax->fine_coarse, kmax); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, kmax); variable_curvature_diffuse (kmax, GFS_VARIABLE_CURVATURE (event)->f, sim, 1); } variable_curvature_diffuse (GFS_VARIABLE (event), NULL, sim, 1); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) fit_curvature, event); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) GFS_VARIABLE (event)->fine_coarse, event); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, GFS_VARIABLE (event)); if (kmax) { gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) kmax->fine_coarse, kmax); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, kmax); variable_curvature_diffuse (kmax, GFS_VARIABLE_CURVATURE (event)->f, sim, 1); } variable_curvature_diffuse (GFS_VARIABLE (event), NULL, sim, 1); } else if (GFS_IS_VARIABLE_TRACER (GFS_VARIABLE_CURVATURE (event)->f)) variable_curvature_from_fraction (event, sim); else /* distance */ variable_curvature_from_distance (event, sim); return TRUE; } return FALSE; } static void variable_curvature_class_init (GtsObjectClass * klass) { klass->destroy = variable_curvature_destroy; klass->read = variable_curvature_read; klass->write = variable_curvature_write; GFS_EVENT_CLASS (klass)->event = variable_curvature_event; } static void variable_curvature_init (GfsVariable * v) { v->coarse_fine = curvature_coarse_fine; v->fine_coarse = curvature_fine_coarse; v->units = -1.; } GfsVariableClass * gfs_variable_curvature_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_curvature_info = { "GfsVariableCurvature", sizeof (GfsVariableCurvature), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_curvature_class_init, (GtsObjectInitFunc) variable_curvature_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &gfs_variable_curvature_info); } return klass; } /** \endobject{GfsVariableCurvature} */ /** * Coordinates of a VOF interface. * \beginobject{GfsVariablePosition} */ static void variable_position_read (GtsObject ** o, GtsFile * fp) { GfsVariablePosition * v = GFS_VARIABLE_POSITION (*o); (* GTS_OBJECT_CLASS (gfs_variable_position_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (component)"); return; } if (!strcmp (fp->token->str, "x")) v->c = FTT_X; else if (!strcmp (fp->token->str, "y")) v->c = FTT_Y; #if !FTT_2D else if (!strcmp (fp->token->str, "z")) v->c = FTT_Z; #endif /* 3D */ else { gts_file_error (fp, "`%s' is not a valid component", fp->token->str); return; } if (GFS_VARIABLE (v)->description) g_free (GFS_VARIABLE (v)->description); GFS_VARIABLE (v)->description = g_strjoin (" ", fp->token->str, "coordinate of the interface defined by tracer", GFS_VARIABLE_CURVATURE (v)->f->name, NULL); GFS_VARIABLE (v)->units = 1.; gts_file_next_token (fp); if (fp->type != '\n') /* fixme: mapping? */ v->ref = gfs_read_constant (fp, gfs_object_simulation (*o)); } static void variable_position_write (GtsObject * o, FILE * fp) { GfsVariablePosition * v = GFS_VARIABLE_POSITION (o); (* GTS_OBJECT_CLASS (gfs_variable_position_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", v->c == FTT_X ? "x" : v->c == FTT_Y ? "y" : "z"); if (v->ref != 0.) fprintf (fp, " %g", v->ref); } static void position (FttCell * cell, GfsVariable * v) { FttVector p; if (gfs_vof_center (cell, GFS_VARIABLE_TRACER_VOF (GFS_VARIABLE_CURVATURE (v)->f), &p)) GFS_VALUE (cell, v) = (&p.x)[GFS_VARIABLE_POSITION (v)->c] - GFS_VARIABLE_POSITION (v)->ref; else GFS_VALUE (cell, v) = GFS_NODATA; } static gboolean variable_position_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_variable_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); gfs_domain_timer_start (domain, "variable_position"); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) position, event); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) GFS_VARIABLE (event)->fine_coarse, event); gfs_domain_bc (domain, FTT_TRAVERSE_ALL, -1, GFS_VARIABLE (event)); variable_curvature_diffuse (GFS_VARIABLE (event), NULL, sim, 2); gfs_domain_timer_stop (domain, "variable_position"); return TRUE; } return FALSE; } static void variable_position_class_init (GtsObjectClass * klass) { klass->read = variable_position_read; klass->write = variable_position_write; GFS_EVENT_CLASS (klass)->event = variable_position_event; } static void variable_position_init (GfsVariable * v) { v->units = 1.; } GfsVariableClass * gfs_variable_position_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_position_info = { "GfsVariablePosition", sizeof (GfsVariablePosition), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_position_class_init, (GtsObjectInitFunc) variable_position_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_curvature_class ()), &gfs_variable_position_info); } return klass; } /** \endobject{GfsVariablePosition} */ gerris-snapshot-131206/src/Makefile.am0000644000175100017510000000503412250371171014507 00000000000000## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = 1.6 AM_CPPFLAGS = -DGFS_MODULES_DIR=\"$(libdir)/gerris\" -DGFS_DATA_DIR=\"$(pkgdatadir)\" INCLUDES = -I$(top_srcdir) -I$(includedir) \ -DG_LOG_DOMAIN=\"Gfs\" $(GTS_CFLAGS) gerris2D.pc: gerris2D.pc.in gerris3D.pc: gerris3D.pc.in pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gerris2D.pc gerris3D.pc pkgdata_DATA = m4.awk lib_LTLIBRARIES = libgfs2D.la libgfs3D.la BUILT_SOURCES= \ gerris2D.pc \ gerris3D.pc GFS_HDS = \ ftt.h \ fluid.h \ variable.h \ output.h \ solid.h \ poisson.h \ advection.h \ boundary.h \ mpi_boundary.h \ timestep.h \ domain.h \ init.h \ refine.h \ event.h \ simulation.h \ graphic.h \ adaptive.h \ source.h \ tension.h \ vof.h \ utils.h \ ocean.h \ wave.h \ levelset.h \ isocube.h \ cartesian.h \ surface.h \ unstructured.h \ map.h \ river.h \ moving.h \ balance.h \ metric.h \ particle.h \ version.h pkginclude_HEADERS = \ $(GFS_HDS) \ spatial.h \ function.h include_HEADERS = \ gfs.h if OPEN_MEMSTREAM MEMSTREAM = open_memstream.c endif SRC = \ ftt.c \ fluid.c \ variable.c \ output.c \ solid.c \ poisson.c \ advection.c \ boundary.c \ mpi_boundary.c \ timestep.c \ domain.c \ init.c \ refine.c \ event.c \ simulation.c \ graphic.c \ adaptive.c \ source.c \ tension.c \ vof.c \ utils.c \ ocean.c \ wave.c \ levelset.c \ myc.h \ myc2d.h \ cartesian.c \ surface.c \ unstructured.c \ map.c \ river.c \ moving.c \ balance.c \ metric.c \ particle.c \ $(GFS_HDS) \ $(MEMSTREAM) domain.c: version.h libgfs3D_la_LDFLAGS = $(NO_UNDEFINED)\ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)\ -release $(LT_RELEASE) -export-dynamic libgfs3D_la_SOURCES = $(SRC) libgfs3D_la_LIBADD = $(GTS_LIBS) libgfs2D_la_LDFLAGS = $(NO_UNDEFINED)\ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)\ -release $(LT_RELEASE) -export-dynamic libgfs2D_la_SOURCES = $(SRC) libgfs2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libgfs2D_la_LIBADD = $(GTS_LIBS) CLEANFILES = $(BUILT_SOURCES) EXTRA_DIST = \ ftt_internal.c \ moving2.c \ open_memstream.c \ verify.h \ m4.awk bin_PROGRAMS = gerris2D gerris3D gerris2D_SOURCES = gerris.c gerris2D_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 gerris2D_LDADD = $(GFS2D_LIBS) gerris2D_DEPENDENCIES = libgfs2D.la gerris3D_SOURCES = gerris.c gerris3D_LDADD = $(GFS3D_LIBS) gerris3D_DEPENDENCIES = libgfs3D.la if DARCS_CONTROLLED DARCS_VERSION = darcsversion else DARCS_VERSION = endif version.h: $(DARCS_VERSION) darcsversion: sh darcsversion.sh gerris-snapshot-131206/src/metric.h0000644000175100017510000001172612250371171014114 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __METRIC_H__ #define __METRIC_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "map.h" /* GfsGenericMetric: Header */ #define GFS_IS_GENERIC_METRIC(obj) (gts_object_is_from_class (obj,\ gfs_generic_metric_class ())) GfsEventClass * gfs_generic_metric_class (void); /* GfsVariableMetric: Header */ #define GFS_IS_VARIABLE_METRIC(obj) (gts_object_is_from_class (obj,\ gfs_variable_metric_class ())) GfsVariableClass * gfs_variable_metric_class (void); /* GfsStoredMetric: Header */ typedef struct _GfsStoredMetric GfsStoredMetric; struct _GfsStoredMetric { /*< private >*/ GfsVariable parent; GfsMap * map; /*< public >*/ GfsVariable * h[4], * e; GfsMapClass * map_class; }; #define GFS_STORED_METRIC(obj) GTS_OBJECT_CAST (obj,\ GfsStoredMetric,\ gfs_stored_metric_class ()) #define GFS_IS_STORED_METRIC(obj) (gts_object_is_from_class (obj,\ gfs_stored_metric_class ())) GfsVariableClass * gfs_stored_metric_class (void); /* GfsMetric: Header */ typedef struct _GfsMetric GfsMetric; struct _GfsMetric { /*< private >*/ GfsStoredMetric parent; /*< public >*/ GfsFunction * x, * y, * z; }; #define GFS_METRIC(obj) GTS_OBJECT_CAST (obj,\ GfsMetric,\ gfs_metric_class ()) #define GFS_IS_METRIC(obj) (gts_object_is_from_class (obj,\ gfs_metric_class ())) GfsVariableClass * gfs_metric_class (void); /* GfsMetricCubed: Header */ typedef struct _GfsMetricCubed GfsMetricCubed; struct _GfsMetricCubed { /*< private >*/ GfsStoredMetric parent; /*< public >*/ gint level; }; #define GFS_METRIC_CUBED(obj) GTS_OBJECT_CAST (obj,\ GfsMetricCubed,\ gfs_metric_cubed_class ()) #define GFS_IS_METRIC_CUBED(obj) (gts_object_is_from_class (obj,\ gfs_metric_cubed_class ())) GfsVariableClass * gfs_metric_cubed_class (void); /* GfsMetricLonLat: Header */ typedef struct _GfsMetricLonLat GfsMetricLonLat; struct _GfsMetricLonLat { /*< private >*/ GfsVariable parent; /*< public >*/ GfsVariable * h2, * h3; gdouble r; }; #define GFS_METRIC_LON_LAT(obj) GTS_OBJECT_CAST (obj,\ GfsMetricLonLat,\ gfs_metric_lon_lat_class ()) #define GFS_IS_METRIC_LON_LAT(obj) (gts_object_is_from_class (obj,\ gfs_metric_lon_lat_class ())) GfsVariableClass * gfs_metric_lon_lat_class (void); /* GfsMetricStretch: Header */ typedef struct _GfsMetricStretch GfsMetricStretch; struct _GfsMetricStretch { /*< private >*/ GfsEvent parent; /*< public >*/ gdouble sx, sy, sz; }; #define GFS_METRIC_STRETCH(obj) GTS_OBJECT_CAST (obj,\ GfsMetricStretch,\ gfs_metric_stretch_class ()) #define GFS_IS_METRIC_STRETCH(obj) (gts_object_is_from_class (obj,\ gfs_metric_stretch_class ())) GfsEventClass * gfs_metric_stretch_class (void); /* GfsMetricCubed1: Header */ GfsVariableClass * gfs_metric_cubed1_class (void); /* GfsMetricVariable: Header */ typedef struct _GfsMetricVariable GfsMetricVariable; struct _GfsMetricVariable { /*< private >*/ GfsStoredMetric parent; /*< public >*/ GfsVariable * x[3]; }; #define GFS_METRIC_VARIABLE(obj) GTS_OBJECT_CAST (obj,\ GfsMetricVariable,\ gfs_metric_variable_class ()) #define GFS_IS_METRIC_VARIABLE(obj) (gts_object_is_from_class (obj,\ gfs_metric_variable_class ())) GfsVariableClass * gfs_metric_variable_class (void); /* GfsMetricLaplace: Header */ typedef struct _GfsMetricLaplace GfsMetricLaplace; struct _GfsMetricLaplace { /*< private >*/ GfsMetricVariable parent; /*< public >*/ gboolean conformal, spherical; }; #define GFS_METRIC_LAPLACE(obj) GTS_OBJECT_CAST (obj,\ GfsMetricLaplace,\ gfs_metric_laplace_class ()) #define GFS_IS_METRIC_LAPLACE(obj) (gts_object_is_from_class (obj,\ gfs_metric_laplace_class ())) GfsVariableClass * gfs_metric_laplace_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __METRIC_H__ */ gerris-snapshot-131206/src/fluid.h0000644000175100017510000002705412250371171013735 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __FLUID_H__ #define __FLUID_H__ #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "ftt.h" typedef struct _GfsVariable GfsVariable; typedef struct _GfsDerivedVariable GfsDerivedVariable; typedef struct _GfsDomain GfsDomain; typedef struct _GfsStateVector GfsStateVector; typedef struct _GfsSolidVector GfsSolidVector; typedef struct _GfsFaceStateVector GfsFaceStateVector; struct _GfsFaceStateVector { gdouble un; gdouble v; }; struct _GfsStateVector { /* temporary face variables */ GfsFaceStateVector f[FTT_NEIGHBORS]; /* solid boundaries */ GfsSolidVector * solid; gdouble place_holder; }; struct _GfsSolidVector { gdouble s[FTT_NEIGHBORS]; gdouble a, fv; FttCell * merged; FttVector cm, ca, v; }; typedef enum { GFS_FLAG_USED = 1 << FTT_FLAG_USER, GFS_FLAG_BOUNDARY = 1 << (FTT_FLAG_USER + 1), GFS_FLAG_DIRICHLET = 1 << (FTT_FLAG_USER + 2), GFS_FLAG_GRADIENT_BOUNDARY = 1 << (FTT_FLAG_USER + 3), GFS_FLAG_PERMANENT = 1 << (FTT_FLAG_USER + 4), GFS_FLAG_THIN = 1 << (FTT_FLAG_USER + 5), GFS_FLAG_USER = FTT_FLAG_USER + 6 /* user flags start here */ } GfsFlags; #define GFS_STATE(cell) ((GfsStateVector *) (cell)->data) #define GFS_VALUEI(cell, index) ((&GFS_STATE (cell)->place_holder)[index]) #define GFS_FACE_NORMAL_VELOCITY(fa)\ (GFS_STATE ((fa)->cell)->f[(fa)->d].un) #define GFS_FACE_NORMAL_VELOCITY_LEFT(fa)\ (GFS_STATE ((fa)->cell)->f[(fa)->d].un) #define GFS_FACE_NORMAL_VELOCITY_RIGHT(fa)\ (GFS_STATE ((fa)->neighbor)->f[FTT_OPPOSITE_DIRECTION ((fa)->d)].un) #define GFS_FACE_FRACTION(fa) (GFS_IS_MIXED ((fa)->cell) ?\ GFS_STATE ((fa)->cell)->solid->s[(fa)->d] : 1.) #define GFS_FACE_FRACTION_LEFT(fa) GFS_FACE_FRACTION(fa) #define GFS_FACE_FRACTION_RIGHT(fa) (GFS_IS_MIXED ((fa)->neighbor) ?\ GFS_STATE ((fa)->neighbor)->solid->s[FTT_OPPOSITE_DIRECTION ((fa)->d)] : 1.) #define GFS_IS_FLUID(cell) ((cell) != NULL &&\ GFS_STATE (cell)->solid == NULL) #define GFS_IS_MIXED(cell) ((cell) != NULL &&\ GFS_STATE (cell)->solid != NULL) #define GFS_CELL_IS_BOUNDARY(cell) (((cell)->flags & GFS_FLAG_BOUNDARY) != 0) #define GFS_CELL_IS_PERMANENT(cell) (((cell)->flags & GFS_FLAG_PERMANENT) != 0) #define GFS_CELL_IS_GRADIENT_BOUNDARY(cell) (((cell)->flags & GFS_FLAG_GRADIENT_BOUNDARY) != 0) FttCellFace gfs_cell_face (FttCell * cell, FttDirection d); void gfs_cell_cleanup (FttCell * cell, GfsDomain * domain); void gfs_cell_reset (FttCell * cell, GfsVariable * v); void gfs_face_reset (FttCellFace * face, GfsVariable * v); void gfs_get_from_below_intensive (FttCell * cell, const GfsVariable * v); void gfs_cell_coarse_fine (FttCell * cell, GfsVariable * v); gdouble gfs_neighbor_value (const FttCellFace * face, guint v, gdouble * x); gdouble gfs_face_interpolated_value (const FttCellFace * face, guint v); gdouble gfs_face_interpolated_value_generic (const FttCellFace * face, const GfsVariable * v); gdouble gfs_face_weighted_interpolated_value (const FttCellFace * face, guint v); typedef gdouble (* GfsCenterGradient) (FttCell * cell, FttComponent c, guint v); gdouble gfs_center_gradient (FttCell * cell, FttComponent c, guint v); void gfs_cm_gradient (FttCell * cell, GfsVariable * v, FttVector * g); void gfs_center_gradient_stencil (FttCell * cell, FttComponent c, guint v); gdouble gfs_center_van_leer_gradient (FttCell * cell, FttComponent c, guint v); gdouble gfs_center_minmod_gradient (FttCell * cell, FttComponent c, guint v); gdouble gfs_center_superbee_gradient (FttCell * cell, FttComponent c, guint v); gdouble gfs_center_sweby_gradient (FttCell * cell, FttComponent c, guint v); gdouble gfs_center_regular_gradient (FttCell * cell, FttComponent c, GfsVariable * v); gdouble gfs_center_regular_2nd_derivative (FttCell * cell, FttComponent c, GfsVariable * v); typedef struct _GfsGradient GfsGradient; struct _GfsGradient { gdouble a, b; }; void gfs_face_gradient (const FttCellFace * face, GfsGradient * g, guint v, gint max_level); void gfs_face_weighted_gradient (const FttCellFace * face, GfsGradient * g, guint v, gint max_level); void gfs_face_weighted_gradient_2D (const FttCellFace * face, GfsGradient * g, guint v, gint max_level); void gfs_face_cm_gradient (const FttCellFace * face, GfsGradient * g, guint v, gint max_level); void gfs_face_cm_weighted_gradient (const FttCellFace * face, GfsGradient * g, guint v, gint max_level); void gfs_cell_dirichlet_gradient (FttCell * cell, guint v, gint max_level, gdouble v0, FttVector * grad); void gfs_mixed_cell_gradient (FttCell * cell, GfsVariable * v, FttVector * g); gdouble gfs_cell_dirichlet_gradient_flux (FttCell * cell, guint v, gint max_level, gdouble v0); gdouble gfs_cell_dirichlet_value (FttCell * cell, GfsVariable * v, gint max_level); gdouble gfs_mixed_cell_interpolate (FttCell * cell, FttVector p, GfsVariable * v); void gfs_normal_divergence (FttCell * cell, GfsVariable * v); void gfs_normal_divergence_2D (FttCell * cell, GfsVariable * v); gdouble gfs_divergence (FttCell * cell, GfsVariable ** v); gdouble gfs_vorticity (FttCell * cell, GfsVariable ** v); gdouble gfs_vector_norm (FttCell * cell, GfsVariable ** v); gdouble gfs_vector_norm2 (FttCell * cell, GfsVariable ** v); gdouble gfs_vector_lambda2 (FttCell * cell, GfsVariable ** v); void gfs_pressure_force (FttCell * cell, GfsVariable * p, FttVector * f); GtsRange gfs_stats_variable (FttCell * root, GfsVariable * v, FttTraverseFlags flags, gint max_depth); typedef struct _GfsNorm GfsNorm; struct _GfsNorm { gdouble bias, first, second, infty, w; }; void gfs_norm_init (GfsNorm * n); void gfs_norm_reset (GfsNorm * n); void gfs_norm_add (GfsNorm * n, gdouble val, gdouble weight); void gfs_norm_update (GfsNorm * n); GfsNorm gfs_norm_variable (FttCell * root, GfsVariable * v, FttTraverseFlags flags, gint max_depth); void gfs_cell_traverse_mixed (FttCell * root, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseFunc func, gpointer data); void gfs_cell_corner_values (FttCell * cell, GfsVariable * v, gint max_level, gdouble f[4*(FTT_DIMENSION - 1)]); gdouble gfs_interpolate_from_corners (FttCell * cell, FttVector p, gdouble * f); gdouble gfs_interpolate (FttCell * cell, FttVector p, GfsVariable * v); void gfs_interpolate_stencil (FttCell * cell, GfsVariable * v); void ftt_cell_refine_corners (FttCell * cell, FttCellInitFunc init, gpointer data); gdouble gfs_center_curvature (FttCell * cell, FttComponent c, guint v); gdouble gfs_streamline_curvature (FttCell * cell, GfsVariable ** v); void gfs_shear_strain_rate_tensor (FttCell * cell, GfsVariable ** u, gdouble t[FTT_DIMENSION][FTT_DIMENSION]); gdouble gfs_2nd_principal_invariant (FttCell * cell, GfsVariable ** u); typedef struct { #if FTT_2D FttCell * c[7]; gdouble w[7]; #else /* 3D */ FttCell * c[29]; gdouble w[29]; #endif /* 3D */ guint n; } GfsInterpolator; void gfs_cell_corner_interpolator (FttCell * cell, FttDirection d[FTT_DIMENSION], gint max_level, gboolean centered, GfsInterpolator * inter); gdouble gfs_cell_corner_value (FttCell * cell, FttDirection * d, GfsVariable * v, gint max_level); /* GfsStencil: Header */ typedef struct _GfsLinearProblem GfsLinearProblem; typedef struct _GfsStencil GfsStencil; struct _GfsStencil { GArray * coeff; /* doubles */ GArray * id; /* ints */ }; GfsStencil * gfs_stencil_new (FttCell * cell, GfsLinearProblem * lp, gdouble coeff); void gfs_stencil_add_element (GfsStencil * stencil, FttCell * cell, GfsLinearProblem * lp, gdouble coeff); void gfs_stencil_destroy (GfsStencil * stencil); void gfs_face_weighted_gradient_stencil (const FttCellFace * face, GfsGradient * g, gint max_level, GfsLinearProblem * lp, GfsStencil * stencil); void gfs_face_cm_weighted_gradient_stencil (const FttCellFace * face, GfsGradient * g, gint max_level, GfsLinearProblem * lp, GfsStencil * stencil); gdouble gfs_cell_dirichlet_gradient_flux_stencil (FttCell * cell, gint max_level, gdouble v0, GfsLinearProblem * lp, GfsStencil * stencil); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __FLUID_H__ */ gerris-snapshot-131206/src/myc.h0000644000175100017510000001024412250371171013413 00000000000000#define NOT_ZERO 1.e-30 /*-----------------------------------------------------* *MYC - Mixed Youngs and Central Scheme * *-----------------------------------------------------*/ /* Known problems: the index [1][1][1], i.e. the central cell in the block, never occurs: neither in the central scheme nor in Youngs' method. Therefore an isolated droplet will have a normal with all components to zero. I took care of the division-by-zero issue, but not of this one. Ruben */ static void mycs(double c[3][3][3],double mxyz[3]) { double m1,m2,m[4][3],t0,t1,t2; int cn; /* write the plane as: sgn(mx) X = my Y + mz Z + alpha m00 X = m01 Y + m02 Z + alpha */ m1 = c[0][1][0] + c[0][1][2] + c[0][0][1] + c[0][2][1] + c[0][1][1]; m2 = c[2][1][0] + c[2][1][2] + c[2][0][1] + c[2][2][1] + c[2][1][1]; m[0][0] = m1 > m2 ? 1. : -1.; m1 = c[0][0][1]+ c[2][0][1]+ c[1][0][1]; m2 = c[0][2][1]+ c[2][2][1]+ c[1][2][1]; m[0][1] = 0.5*(m1-m2); m1 = c[0][1][0]+ c[2][1][0]+ c[1][1][0]; m2 = c[0][1][2]+ c[2][1][2]+ c[1][1][2]; m[0][2] = 0.5*(m1-m2); /* write the plane as: sgn(my) Y = mx X + mz Z + alpha m11 Y = m10 X + m12 Z + alpha */ m1 = c[0][0][1] + c[0][2][1] + c[0][1][1]; m2 = c[2][0][1] + c[2][2][1] + c[2][1][1]; m[1][0] = 0.5*(m1-m2); m1 = c[1][0][0] + c[1][0][2] + c[2][0][1] + c[0][0][1] + c[1][0][1]; m2 = c[1][2][0] + c[1][2][2] + c[2][2][1] + c[0][2][1] + c[1][2][1]; m[1][1] = m1 > m2 ? 1. : -1.; m1 = c[1][0][0]+ c[1][1][0]+ c[1][2][0]; m2 = c[1][0][2]+ c[1][1][2]+ c[1][2][2]; m[1][2] = 0.5*(m1-m2); /* write the plane as: sgn(mz) Z = mx X + my Y + alpha m22 Z = m20 X + m21 Y + alpha */ m1 = c[0][1][0]+ c[0][1][2]+ c[0][1][1]; m2 = c[2][1][0]+ c[2][1][2]+ c[2][1][1]; m[2][0] = 0.5*(m1-m2); m1 = c[1][0][0]+ c[1][0][2]+ c[1][0][1]; m2 = c[1][2][0]+ c[1][2][2]+ c[1][2][1]; m[2][1] = 0.5*(m1-m2); m1 = c[0][1][0] + c[2][1][0] + c[1][0][0] + c[1][2][0] + c[1][1][0]; m2 = c[0][1][2] + c[2][1][2] + c[1][0][2] + c[1][2][2] + c[1][1][2]; m[2][2] = m1 > m2 ? 1. : -1.; /* normalize each set (mx,my,mz): |mx|+|my|+|mz| = 1 */ t0 = fabs(m[0][0]) + fabs(m[0][1]) + fabs(m[0][2]); m[0][0] /= t0; m[0][1] /= t0; m[0][2] /= t0; t0 = fabs(m[1][0]) + fabs(m[1][1]) + fabs(m[1][2]); m[1][0] /= t0; m[1][1] /= t0; m[1][2] /= t0; t0 = fabs(m[2][0]) + fabs(m[2][1]) + fabs(m[2][2]); m[2][0] /= t0; m[2][1] /= t0; m[2][2] /= t0; /* choose among the three central scheme */ t0 = fabs(m[0][0]); t1 = fabs(m[1][1]); t2 = fabs(m[2][2]); cn = 0; if (t1 > t0) { t0 = t1; cn = 1; } if (t2 > t0) cn = 2; /* Youngs-CIAM scheme */ m1 = c[0][0][0] + c[0][2][0] + c[0][0][2] + c[0][2][2] + 2.*(c[0][0][1] + c[0][2][1] + c[0][1][0] + c[0][1][2]) + 4.*c[0][1][1]; m2 = c[2][0][0] + c[2][2][0] + c[2][0][2] + c[2][2][2] + 2.*(c[2][0][1] + c[2][2][1] + c[2][1][0] + c[2][1][2]) + 4.*c[2][1][1]; m[3][0] = m1-m2; m1 = c[0][0][0] + c[0][0][2] + c[2][0][0] + c[2][0][2] + 2.*( c[0][0][1] + c[2][0][1] + c[1][0][0] + c[1][0][2]) + 4.*c[1][0][1]; m2 = c[0][2][0] + c[0][2][2] + c[2][2][0] + c[2][2][2] + 2.*(c[0][2][1] + c[2][2][1] + c[1][2][0] + c[1][2][2]) + 4.*c[1][2][1]; m[3][1] = m1-m2; m1 = c[0][0][0] + c[0][2][0] + c[2][0][0] + c[2][2][0] + 2.*(c[0][1][0] + c[2][1][0] + c[1][0][0] + c[1][2][0]) + 4.*c[1][1][0]; m2 = c[0][0][2] + c[0][2][2] + c[2][0][2] + c[2][2][2] + 2.*(c[0][1][2] + c[2][1][2] + c[1][0][2] + c[1][2][2]) + 4.*c[1][1][2]; m[3][2] = m1-m2; /* normalize the set (mx,my,mz): |mx|+|my|+|mz| = 1 */ t0 = fabs(m[3][0]) + fabs(m[3][1]) + fabs(m[3][2]) + NOT_ZERO; m[3][0] /= t0; m[3][1] /= t0; m[3][2] /= t0; /* choose between the previous choice and Youngs-CIAM */ t0 = fabs (m[3][0]); t1 = fabs (m[3][1]); t2 = fabs (m[3][2]); if (t1 > t0) t0 = t1; if (t2 > t0) t0 = t2; if (fabs(m[cn][cn]) > t0) cn = 3; /* components of the normal vector */ mxyz[0] = m[cn][0]; mxyz[1] = m[cn][1]; mxyz[2] = m[cn][2]; return; } gerris-snapshot-131206/src/unstructured.c0000644000175100017510000004507612250371171015400 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2008 National Institute of Water and Atmospheric * Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Conversion to unstructured mesh formats. */ #include "unstructured.h" #include "variable.h" #include "config.h" #include "version.h" #include "graphic.h" #include "solid.h" #define NV (4*(FTT_DIMENSION - 1)) static void reset_pointers (FttCell * cell, GfsVariable ** v) { guint i; for (i = 0; i < NV; i++) GFS_DOUBLE_TO_POINTER (GFS_VALUE (cell, v[i])) = NULL; } typedef struct { FttCell * cell; guint i, index; } Vertex; /* Using VTK convention */ static FttDirection d[NV][FTT_DIMENSION] = { #if FTT_2D {FTT_LEFT,FTT_BOTTOM}, {FTT_RIGHT,FTT_BOTTOM}, {FTT_LEFT,FTT_TOP}, {FTT_RIGHT,FTT_TOP}, #else /* 3D */ {FTT_LEFT,FTT_BOTTOM,FTT_BACK}, {FTT_RIGHT,FTT_BOTTOM,FTT_BACK}, {FTT_LEFT,FTT_TOP,FTT_BACK}, {FTT_RIGHT,FTT_TOP,FTT_BACK}, {FTT_LEFT,FTT_BOTTOM,FTT_FRONT}, {FTT_RIGHT,FTT_BOTTOM,FTT_FRONT}, {FTT_LEFT,FTT_TOP,FTT_FRONT}, {FTT_RIGHT,FTT_TOP,FTT_FRONT} #endif /* 3D */ }; static void vertex_pos (Vertex * v, FttVector * p, GfsSimulation * sim) { ftt_corner_pos (v->cell, d[v->i], p); gfs_simulation_map_inverse (sim, p); } static float vertex_value (Vertex * vertex, GfsVariable * v, gint max_depth) { return gfs_dimensional_value (v, gfs_cell_corner_value (vertex->cell, d[vertex->i], v, max_depth)); } typedef struct { GfsVariable ** v; GfsDomain * domain; GSList * vertices; gint max_depth; guint size, index; } AllocParams; static void allocate_vertices (FttCell * cell, AllocParams * par) { static gint dx[NV][FTT_DIMENSION] = { #if FTT_2D {-1,-1}, {1,-1}, {-1,1}, {1,1}, #else /* 3D */ {-1,-1,-1}, {1,-1,-1}, {-1,1,-1}, {1,1,-1}, {-1,-1,1}, {1,-1,1}, {-1,1,1}, {1,1,1} #endif /* 3D */ }; gdouble h = ftt_cell_size (cell)/128.; guint i; for (i = 0; i < NV; i++) if (GFS_DOUBLE_TO_POINTER (GFS_VALUE (cell, par->v[i])) == NULL) { Vertex * vertex = g_malloc (par->size); vertex->i = i; vertex->cell = cell; vertex->index = par->index++; GFS_DOUBLE_TO_POINTER (GFS_VALUE (cell, par->v[i])) = vertex; par->vertices = g_slist_prepend (par->vertices, vertex); FttVector p; ftt_corner_pos (cell, d[i], &p); FttCell * neighbor[NV]; guint j; for (j = 0; j < NV; j++) if (i != j) { FttVector q; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&q.x)[c] = (&p.x)[c] - dx[j][c]*h; FttCell * n = gfs_domain_locate (par->domain, q, par->max_depth, NULL); if (n) { guint k; for (k = 0; k < j && n; k++) if (n == neighbor[k]) { /* T-junction */ #if DEBUG fprintf (stderr, "tj: %g %g %g %g %g %g\n", p.x, p.y, p.z, q.x, q.y, q.z); #endif neighbor[k] = n = NULL; } } neighbor[j] = n; } else neighbor[j] = NULL; for (j = 0; j < NV; j++) if (neighbor[j]) { g_assert (GFS_DOUBLE_TO_POINTER (GFS_VALUE (neighbor[j], par->v[j])) == NULL); GFS_DOUBLE_TO_POINTER (GFS_VALUE (neighbor[j], par->v[j])) = vertex; } } } static GSList * allocate_domain_vertices (GfsDomain * domain, gint max_depth, GfsVariable * v[NV], guint size) { g_return_val_if_fail (size >= sizeof (Vertex), NULL); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, max_depth, (FttCellTraverseFunc) reset_pointers, v); AllocParams par; par.v = v; par.domain = domain; par.max_depth = max_depth; par.size = size; par.vertices = NULL; par.index = 0; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, max_depth, (FttCellTraverseFunc) allocate_vertices, &par); return g_slist_reverse (par.vertices); } #if DEBUG static void print_pos (Vertex * v) { FttVector p; ftt_corner_pos (v->cell, d[v->i], &p); fprintf (stderr, "v: %g %g %g\n", p.x, p.y, p.z); } #endif /* DEBUG */ #if DEBUG static void draw_vertices (FttCell * cell, GfsVariable ** v) { guint i; FttVector c; ftt_cell_pos (cell, &c); for (i = 0; i < NV; i++) { Vertex * vertex = GFS_DOUBLE_TO_POINTER (GFS_VALUE (cell, v[i])); FttVector p; ftt_corner_pos (vertex->cell, d[vertex->i], &p); fprintf (stderr, "vp: %g %g\nvp: %g %g\nvp: \n", c.x, c.y, p.x, p.y); } } #endif /* DEBUG */ typedef struct { FILE * fp; GfsVariable ** v; } WriteParams; static void write_element (FttCell * cell, WriteParams * par) { fprintf (par->fp, "%d", NV); guint i; for (i = 0; i < NV; i++) { Vertex * v = GFS_DOUBLE_TO_POINTER (GFS_VALUE (cell, par->v[i])); fprintf (par->fp, " %d", v->index); } fputc ('\n', par->fp); } static void cell_count (FttCell * cell, guint * count) { (*count)++; } static guint local_domain_size (GfsDomain * domain, gint max_depth) { guint n = 0; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, max_depth, (FttCellTraverseFunc) cell_count, &n); return n; } /** * gfs_domain_write_vtk: * @domain: a #GfsDomain. * @max_depth: the maximum depth to consider. * @variables: a list of #GfsVariable to output. * @precision: the formatting string for converting float to ASCII. * @fp: a file pointer. * * Writes in @fp a VTK-formatted representation of @domain and of the * corresponding variables in the given list. */ void gfs_domain_write_vtk (GfsDomain * domain, gint max_depth, GSList * variables, const gchar * precision, FILE * fp) { g_return_if_fail (domain != NULL); g_return_if_fail (precision != NULL); g_return_if_fail (fp != NULL); GfsVariable * v[NV]; guint i; for (i = 0; i < NV; i++) v[i] = gfs_temporary_variable (domain); GSList * vertices = allocate_domain_vertices (domain, max_depth, v, sizeof (Vertex)); /* header */ fprintf (fp, "# vtk DataFile Version 2.0\n" "Gerris simulation version %s (%s)\n" "ASCII\n" "DATASET UNSTRUCTURED_GRID\n" "\n", GFS_VERSION, GFS_BUILD_VERSION); /* vertices */ guint nv = g_slist_length (vertices); fprintf (fp, "POINTS %d float\n", nv); gchar * format = g_strdup_printf ("%s %s %s\n", precision, precision, precision); GSList * j = vertices; while (j) { FttVector p; vertex_pos (j->data, &p, GFS_SIMULATION (domain)); fprintf (fp, format, p.x, p.y, p.z); j = j->next; } g_free (format); fputc ('\n', fp); /* elements */ guint n_cells = local_domain_size (domain, max_depth); fprintf (fp, "CELLS %d %d\n", n_cells, n_cells*(NV + 1)); WriteParams par; par.v = v; par.fp = fp; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, max_depth, (FttCellTraverseFunc) write_element, &par); fprintf (fp, "\nCELL_TYPES %d\n",n_cells); for (i = 0; i < n_cells; i++) { #if FTT_2D fputs ("8\n", fp); #else fputs ("11\n", fp); #endif } fputc ('\n', fp); #if DEBUG fprintf (stderr, "vertices: %d\n", g_slist_length (vertices)); g_slist_foreach (vertices, (GFunc) print_pos, NULL); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, max_depth, (FttCellTraverseFunc) draw_vertices, v); #endif /* DEBUG */ /* write scalar fields */ if (variables) { gchar * format = g_strdup_printf ("%s\n", precision); fprintf (fp, "POINT_DATA %d\n", nv); GSList * i = variables; while (i) { GfsVariable * v = i->data; fprintf (fp, "SCALARS %s float\nLOOKUP_TABLE default\n", v->name); GSList * j = vertices; while (j) { Vertex * vertex = j->data; fprintf (fp, format, vertex_value (vertex, v, max_depth)); j = j->next; } fputc ('\n', fp); i = i->next; } g_free (format); } /* cleanup */ g_slist_foreach (vertices, (GFunc) g_free, NULL); g_slist_free (vertices); for (i = 0; i < NV; i++) gts_object_destroy (GTS_OBJECT (v[i])); } static void write_tecplot_element (FttCell * cell, WriteParams * par) { static guint tecplot_index[NV] = { #if FTT_2D 0, 1, 3, 2 #else /* 3D */ 0, 1, 3, 2, 4, 5, 7, 6 #endif /* 3D */ }; guint i; for (i = 0; i < NV; i++) { Vertex * v = GFS_DOUBLE_TO_POINTER (GFS_VALUE (cell, par->v[tecplot_index[i]])); fprintf (par->fp, "%d ", v->index + 1); } fputc ('\n', par->fp); } /** * gfs_domain_write_tecplot: * @domain: a #GfsDomain. * @max_depth: the maximum depth to consider. * @variables: a list of #GfsVariable to output. * @precision: the formatting string for converting float to ASCII. * @fp: a file pointer. * * Writes in @fp a Tecplot-formatted representation of @domain and of the * corresponding variables in the given list. */ void gfs_domain_write_tecplot (GfsDomain * domain, gint max_depth, GSList * variables, const gchar * precision, FILE * fp) { g_return_if_fail (domain != NULL); g_return_if_fail (precision != NULL); g_return_if_fail (fp != NULL); GfsVariable * v[NV]; guint i; for (i = 0; i < NV; i++) v[i] = gfs_temporary_variable (domain); GSList * vertices = allocate_domain_vertices (domain, max_depth, v, sizeof (Vertex)); /* header */ fprintf (fp, " TITLE = \"Gerris simulation version %s (%s)\"\n", GFS_VERSION, GFS_BUILD_VERSION); fputs (FTT_DIMENSION == 2 ? " VARIABLES = \"X\", \"Y\"" : " VARIABLES = \"X\", \"Y\", \"Z\"", fp); GSList * j = variables; while (j) { GfsVariable * v = j->data; fprintf (fp, ", \"%s\"", v->name); j = j->next; } fputc ('\n', fp); guint nv = g_slist_length (vertices); guint n_cells = local_domain_size (domain, max_depth); fprintf (fp, " ZONE N=%i, E=%i, F=FEPOINT, ", nv, n_cells); fputs (FTT_DIMENSION == 2 ? "ET=QUADRILATERAL\n" : "ET=BRICK\n", fp); /* vertices and scalar data */ gchar * xyzformat = #if FTT_2D g_strdup_printf ("%s %s", precision, precision); #else g_strdup_printf ("%s %s %s", precision, precision, precision); #endif gchar * format = g_strdup_printf (" %s", precision); j = vertices; while (j) { Vertex * vertex = j->data; FttVector p; vertex_pos (vertex, &p, GFS_SIMULATION (domain)); fprintf (fp, xyzformat, p.x, p.y, p.z); GSList * k = variables; while (k) { fprintf (fp, format, vertex_value (vertex, k->data, max_depth)); k = k->next; } fputc ('\n', fp); j = j->next; } g_free (format); g_free (xyzformat); /* elements */ WriteParams par; par.v = v; par.fp = fp; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, max_depth, (FttCellTraverseFunc) write_tecplot_element, &par); /* cleanup */ g_slist_foreach (vertices, (GFunc) g_free, NULL); g_slist_free (vertices); for (i = 0; i < NV; i++) gts_object_destroy (GTS_OBJECT (v[i])); } #if !FTT_2D /* gfs_domain_write_tecplot_surface */ typedef struct { FttCell * cell; /* cell */ guint nnodes; /* number of nodes (3 or 4) */ FttVector node[4]; /* node coordinates */ } WallFace; typedef struct { GfsDomain * domain; GSList * wallfaces; guint nnodes_total; } AllocateFacesParams; static void allocate_wallfaces (FttCell * cell, AllocateFacesParams * par) { if (!GFS_IS_MIXED (cell)) return; GfsSolidVector * s = GFS_STATE (cell)->solid; FttVector normal; /* solid normal */ gfs_solid_normal (cell, &normal); gts_vector_normalize (&normal.x); FttDirection d[12]; /* array of node coordinates for a cut face */ FttVector nodecutface[FTT_DIMENSION*(FTT_DIMENSION - 1) + 1]; guint inode, inode2, jnode_max_sintheta = 0, nnodes = gfs_cut_cube_vertices (cell, -1, &s->ca, &normal, nodecutface, d, NULL, NULL); g_assert (nnodes <= 6); guint nnodecutface = nnodes; if (nnodecutface > 3) { /* reorder faces if necessary */ /* Tecplot can think that opposite vertices of the quadrilateral surface element are connected. This may result in ugly X-shaped surface elements. Reorder the array of node if necessary, using bubble sort, to maximize the sine of the angle between the vector from each intersection point to the cell center and the vector from this point to the next point in the array */ FttVector facecenter = {s->ca.x, s->ca.y, s->ca.z}; guint i_switchnodes = 0; /* counter to avoid infinite loop */ gboolean switchnodes = FALSE; /* logical variable used to reorder cut face nodes */ do { i_switchnodes++; for (inode = 0; inode < nnodecutface; inode++) { FttVector node = nodecutface[inode]; /* face node coordinates */ FttVector diff1 = {facecenter.x - node.x, facecenter.y - node.y, facecenter.z - node.z}; gdouble length_diff1 = ftt_vector_norm (&diff1); gdouble max_sintheta = 0.; /* cycle through all other nodes (jnode) where cut face intersects cell edges */ for (inode2 = 1; inode2 < nnodecutface; inode2++) { gint jnode = (inode + inode2)%nnodecutface; FttVector diff2 = {nodecutface[jnode].x - node.x, nodecutface[jnode].y - node.y, nodecutface[jnode].z - node.z}; gdouble length_diff2 = ftt_vector_norm (&diff2); gdouble sintheta = ((diff1.y*diff2.z - diff1.z*diff2.y)*normal.x + (diff1.z*diff2.x - diff1.x*diff2.z)*normal.y + (diff1.x*diff2.y - diff1.y*diff2.x)*normal.z)/ (length_diff1*length_diff2); if (sintheta > max_sintheta) { max_sintheta = sintheta; jnode_max_sintheta = jnode; } } /* terminate if cannot find positive angle between cut face nodes */ g_assert (max_sintheta != 0.); inode2 = (inode + 1)%nnodecutface; if (jnode_max_sintheta != inode2) { node = nodecutface[jnode_max_sintheta]; nodecutface[jnode_max_sintheta] = nodecutface[inode2]; nodecutface[inode2] = node; switchnodes = TRUE; } } /* inode-loop */ } while (switchnodes && i_switchnodes < 1000); /* avoid infinite loop */ } /* reorder faces if necessary */ /* If there are more than 4 points in the array, divide the cut face into a quadrilateral face and either a quadrilateral or triangular face */ /* assign data to nodeinfo array, increment number of wall faces and number of nodes */ if (nnodecutface <= 4) { WallFace * face = g_malloc (sizeof (WallFace)); for (inode = 0; inode < nnodecutface; inode++) face->node[inode] = nodecutface[inode]; face->cell = cell; face->nnodes = nnodecutface; par->nnodes_total += nnodecutface; par->wallfaces = g_slist_append (par->wallfaces, face); } else { /* cut face must be divided into 2 quadrilateral/triangular faces */ /* first face is quadrilateral */ WallFace * face1 = g_malloc (sizeof (WallFace)); for (inode = 0; inode < 4; inode++) face1->node[inode] = nodecutface[inode]; face1->cell = cell; face1->nnodes = 4; par->wallfaces = g_slist_append (par->wallfaces, face1); par->nnodes_total += 4; /* second face is triangular if nnodecutface=5; otherwise quadrilateral */ WallFace * face2 = g_malloc (sizeof (WallFace)); nnodecutface -= 2; for (inode = 0; inode < nnodecutface; inode++) face2->node[inode] = nodecutface[(inode + 3)%(nnodecutface + 2)]; face2->cell = cell; face2->nnodes = nnodecutface; par->wallfaces = g_slist_append (par->wallfaces, face2); par->nnodes_total += nnodecutface; } /* cut face must be divided into 2 quadrilateral/triangular faces */ } /** * gfs_domain_write_tecplot_surface: * @domain: a #GfsDomain. * @max_depth: the maximum depth to consider. * @variables: a list of #GfsVariable to output. * @precision: the formatting string for converting float to ASCII. * @fp: a file pointer. * * Writes in @fp a Tecplot-formatted representation of the solid * surface of @domain and of the corresponding variables in the given * list. */ void gfs_domain_write_tecplot_surface (GfsDomain * domain, gint max_depth, GSList * variables, const gchar * precision, FILE * fp) { g_return_if_fail (domain != NULL); g_return_if_fail (precision != NULL); g_return_if_fail (fp != NULL); GSList * j; AllocateFacesParams par = {domain, NULL, 0}; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, max_depth, (FttCellTraverseFunc) allocate_wallfaces, &par); #if 0 /* include header for standalone event */ fprintf (fp, " TITLE = \"Gerris simulation version %s (%s)\"\n", GFS_VERSION, GFS_BUILD_VERSION); fputs (FTT_DIMENSION == 2 ? " VARIABLES = 'X', 'Y'" : " VARIABLES = 'X', 'Y', 'Z'", fp); j = variables; while (j) { GfsVariable * v = j->data; fprintf (fp, ", '%s'", v->name); j = j->next; } fputc ('\n', fp); #endif /* include header for standalone event */ guint inode, nwallfaces = g_slist_length (par.wallfaces); fprintf (fp, " ZONE T=\"WALL DATA\", N=%i, E=%i, F=FEPOINT, ", par.nnodes_total, nwallfaces); fputs ("ET=QUADRILATERAL\n", fp); /* nodes and scalar data */ gchar * xyzformat = #if FTT_2D g_strdup_printf ("%s %s", precision, precision); #else g_strdup_printf ("%s %s %s", precision, precision, precision); #endif gchar * format = g_strdup_printf (" %s", precision); j = par.wallfaces; while (j) { WallFace * face = j->data; FttCell * cell = face->cell; for (inode = 0; inode < face->nnodes; inode++) { FttVector * node = &face->node[inode]; fprintf (fp, xyzformat, node->x, node->y, node->z); GSList * k = variables; while (k) { GfsVariable * v = k->data; /* write out cell values; can use interpolate for more precise data representation */ fprintf (fp, format, GFS_VALUE (cell, v)); k = k->next; } fputc ('\n', fp); } j = j->next; } g_free (format); g_free (xyzformat); /* output node connectivity information */ inode = 1; j = par.wallfaces; while (j) { WallFace * face = j->data; if (face->nnodes == 4) fprintf (fp, "%d %d %d %d\n", inode, inode + 1, inode + 2, inode + 3); else /* triangular face */ fprintf (fp, "%d %d %d %d\n", inode, inode + 1, inode + 2, inode + 2); inode += face->nnodes; j = j->next; } /* cleanup */ g_slist_foreach (par.wallfaces, (GFunc) g_free, NULL); g_slist_free (par.wallfaces); } #endif /* gfs_domain_write_tecplot_surface */ gerris-snapshot-131206/src/domain.c0000644000175100017510000042025712250371171014076 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Spatial domain. */ #include #include #include #include #include #include "domain.h" #include "advection.h" #include "source.h" #include "solid.h" #include "adaptive.h" #include "mpi_boundary.h" #include "metric.h" #include "version.h" #include "init.h" #include "config.h" /* GfsLocateArray: Object */ static void locate_index (FttVector * p, GfsLocateArray * a, gint i[FTT_DIMENSION]) { gint c; for (c = 0; c < FTT_DIMENSION; c++) i[c] = floor (((&p->x)[c] - a->min[c])/a->h); } static void root_bounds (FttCell * root, GfsLocateArray * a) { FttVector p; ftt_cell_pos (root, &p); gint i; for (i = 0; i < FTT_DIMENSION; i++) { if ((&p.x)[i] + a->h/2. > a->max[i]) a->max[i] = (&p.x)[i] + a->h/2.; if ((&p.x)[i] - a->h/2. < a->min[i]) a->min[i] = (&p.x)[i] - a->h/2.; } } static void box_bounds (GfsBox * box, GfsLocateArray * a) { root_bounds (box->root, a); FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) root_bounds (GFS_BOUNDARY (box->neighbor[d])->root, a); } static gint locate_linear_index (FttVector * p, GfsLocateArray * a) { gint i[FTT_DIMENSION], index = 0, c; locate_index (p, a, i); for (c = 0; c < FTT_DIMENSION; c++) { if (i[c] < 0 || i[c] >= a->n[c]) return -1; index = index*a->n[c] + i[c]; } return index; } static void box_index (GfsBox * b, GfsLocateArray * a) { FttVector p; ftt_cell_pos (b->root, &p); gint i = locate_linear_index (&p, a); g_assert (i >= 0); g_assert (!a->root[i]); a->root[i] = g_slist_prepend (NULL, b); FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (b->neighbor[d])) { GfsBoundary * boundary = GFS_BOUNDARY (b->neighbor[d]); ftt_cell_pos (boundary->root, &p); gint i = locate_linear_index (&p, a); g_assert (i >= 0); a->root[i] = g_slist_prepend (a->root[i], boundary); } } /** * @domain: a #GfsDomain. * * Creates a rectangular array for fast location of which GfsBox * contains a given point. * * Returns: a new #GfsLocateArray. */ GfsLocateArray * gfs_locate_array_new (GfsDomain * domain) { g_return_val_if_fail (domain != NULL, NULL); GfsLocateArray * a = g_malloc (sizeof (GfsLocateArray)); guint i; a->h = ftt_level_size (domain->rootlevel); for (i = 0; i < FTT_DIMENSION; i++) { a->min[i] = G_MAXDOUBLE; a->max[i] = - G_MAXDOUBLE; } gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_bounds, a); guint size = 1; for (i = 0; i < FTT_DIMENSION; i++) { g_assert (a->max[i] > a->min[i]); a->n[i] = ceil ((a->max[i] - a->min[i])/a->h - 0.5); size *= a->n[i]; } a->root = g_malloc0 (size*sizeof (GSList *)); a->size = size; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_index, a); return a; } /** * @a: a #GfsLocateArray. * @p: a #FttVector. * * Returns: a list of objects containing @p or %NULL. */ GSList * gfs_locate_array_locate (GfsLocateArray * a, FttVector * p) { g_return_val_if_fail (a != NULL, NULL); g_return_val_if_fail (p != NULL, NULL); gint i = locate_linear_index (p, a); return i < 0 ? NULL : a->root[i]; } /** * @a: a #GfsLocateArray. * * Frees the memory allocated to @a. */ void gfs_locate_array_destroy (GfsLocateArray * a) { if (a) { gint i; for (i = 0; i < a->size; i++) g_slist_free (a->root[i]); g_free (a->root); g_free (a); } } /** * Spatial domain. * \beginobject{GfsDomain} */ static void domain_write (GtsObject * o, FILE * fp) { GfsDomain * domain = GFS_DOMAIN (o); if (GTS_OBJECT_CLASS (gfs_domain_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_domain_class ())->parent_class->write) (o, fp); fputs (" { ", fp); if (domain->rootlevel != 0) fprintf (fp, "rootlevel = %u ", domain->rootlevel); if (domain->refpos.x != 0.) fprintf (fp, "x = %g ", domain->refpos.x); if (domain->refpos.y != 0.) fprintf (fp, "y = %g ", domain->refpos.y); if (domain->refpos.z != 0.) fprintf (fp, "z = %g ", domain->refpos.z); if (domain->lambda.x != 1.) fprintf (fp, "lx = %g ", domain->lambda.x); if (domain->lambda.y != 1.) fprintf (fp, "ly = %g ", domain->lambda.y); if (domain->lambda.z != 1.) fprintf (fp, "lz = %g ", domain->lambda.z); fprintf (fp, "version = %d ", atoi (GFS_BUILD_VERSION)); if (!domain->overlap) fputs ("overlap = 0 ", fp); if (domain->max_depth_write > -2) { GSList * i = domain->variables_io; if (i != NULL) { fprintf (fp, "variables = %s", GFS_VARIABLE (i->data)->name); i = i->next; while (i) { fprintf (fp, ",%s", GFS_VARIABLE (i->data)->name); i = i->next; } fputc (' ', fp); } } if (domain->binary != FALSE) fprintf (fp, "binary = 1 "); fputc ('}', fp); } static void domain_read (GtsObject ** o, GtsFile * fp) { GfsDomain * domain = GFS_DOMAIN (*o); GtsFileVariable var[] = { {GTS_UINT, "rootlevel", TRUE}, {GTS_DOUBLE, "x", TRUE}, {GTS_DOUBLE, "y", TRUE}, {GTS_DOUBLE, "z", TRUE}, {GTS_DOUBLE, "lx", TRUE}, {GTS_DOUBLE, "ly", TRUE}, {GTS_DOUBLE, "lz", TRUE}, {GTS_STRING, "variables", TRUE}, {GTS_INT, "binary", TRUE}, {GTS_INT, "version", TRUE}, {GTS_INT, "overlap", TRUE}, {GTS_NONE} }; gchar * variables = NULL; if (GTS_OBJECT_CLASS (gfs_domain_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_domain_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; domain->version = -1; var[0].data = &domain->rootlevel; var[1].data = &domain->refpos.x; var[2].data = &domain->refpos.y; var[3].data = &domain->refpos.z; var[4].data = &domain->lambda.x; var[5].data = &domain->lambda.y; var[6].data = &domain->lambda.z; var[7].data = &variables; var[8].data = &domain->binary; var[9].data = &domain->version; var[10].data = &domain->overlap; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) { g_free (variables); return; } if (var[4].set || var[5].set || var[6].set) g_warning ("the (lx,ly,lz) parameters are obsolete, please use GfsMetricStretch instead"); #if FTT_2D if (var[3].set) { gts_file_variable_error (fp, var, "z", "unknown identifier `z'"); return; } if (var[6].set) { gts_file_variable_error (fp, var, "lz", "unknown identifier `lz'"); return; } #endif if (var[4].set && domain->lambda.x <= 0.) { gts_file_variable_error (fp, var, "lx", "lx must be strictly positive"); return; } if (var[5].set && domain->lambda.y <= 0.) { gts_file_variable_error (fp, var, "ly", "ly must be strictly positive"); return; } if (var[6].set && domain->lambda.z <= 0.) { gts_file_variable_error (fp, var, "lz", "lz must be strictly positive"); return; } if (variables != NULL) { gchar * variables1, * s; variables1 = g_strdup (variables); s = strtok (variables1, ","); while (s) { gfs_domain_add_variable (domain, s, NULL); s = strtok (NULL, ","); } g_free (variables1); domain->variables_io = gfs_variables_from_list (domain->variables, variables, &s); g_free (variables); } } static void box_set_pos (GfsBox * box, FttVector * pos, FttDirection dold) { FttVector p; static FttVector rpos[FTT_NEIGHBORS] = { #if FTT_2D {1.,0.,0.}, {-1.,0.,0.}, {0.,1.,0.}, {0.,-1.,0.} #else /* FTT_3D */ {1.,0.,0.}, {-1.,0.,0.}, {0.,1.,0.}, {0.,-1.,0.}, {0.,0.,1.}, {0.,0.,-1.} #endif /* FTT_3D */ }; static FttDirection id[FTT_NEIGHBORS][FTT_NEIGHBORS] = { #if FTT_2D {0,1,2,3}, {1,0,3,2}, {2,3,1,0}, {3,2,0,1}, #else /* 3D */ {0,1,2,3,5,4}, {1,0,3,2,4,5}, {2,3,1,0,5,4}, {3,2,0,1,4,5}, {4,5,2,3,0,1}, {5,4,3,2,1,0} #endif /* 3D */ }; ftt_cell_pos (box->root, &p); if (p.x != G_MAXDOUBLE) /* position already set */ return; FttDirection i; gdouble size; size = ftt_cell_size (box->root); ftt_cell_set_pos (box->root, pos); for (i = 0; i < FTT_NEIGHBORS; i++) { FttDirection d = id[dold][i]; p.x = pos->x + rpos[d].x*size; p.y = pos->y + rpos[d].y*size; p.z = pos->z + rpos[d].z*size; if (GFS_IS_BOX (box->neighbor[d])) box_set_pos (GFS_BOX (box->neighbor[d]), &p, d); else if (GFS_IS_BOUNDARY (box->neighbor[d])) ftt_cell_set_pos (GFS_BOUNDARY (box->neighbor[d])->root, &p); } } static void set_ref_pos (GfsBox * box, FttVector * pos) { if (box->id == 1) box_set_pos (box, pos, FTT_RIGHT); } static void pid_max (GfsBox * box, gint * np) { if (box->pid > *np) *np = box->pid; } typedef struct { GSList * removed; gint pid; } RemovedData; static void removed_list (GfsBox * box, RemovedData * p) { if (box->pid != p->pid) p->removed = g_slist_prepend (p->removed, box); else { FttDirection d; GfsBox * matching; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY_PERIODIC (box->neighbor[d]) && !GFS_IS_BOUNDARY_MPI (box->neighbor[d]) && (matching = GFS_BOUNDARY_PERIODIC (box->neighbor[d])->matching)->pid != p->pid) { GfsBoundaryPeriodic * b = GFS_BOUNDARY_PERIODIC (box->neighbor[d]); FttDirection rotate = b->d; gdouble orientation = b->rotate; gts_object_destroy (GTS_OBJECT (b)); b = GFS_BOUNDARY_PERIODIC (gfs_boundary_mpi_new (gfs_boundary_mpi_class (), box, d, matching->pid, matching->id)); if (orientation != 0.) gfs_boundary_periodic_rotate (b, rotate, orientation); } } } static void mpi_links (GfsBox * box, GfsDomain * domain) { FttDirection d; GtsObject * neighbor[FTT_NEIGHBORS]; gint pid = box->pid; gint id = box->id; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOX (box->neighbor[d]) && GFS_BOX (box->neighbor[d])->pid == domain->pid) neighbor[d] = box->neighbor[d]; else neighbor[d] = NULL; gts_object_destroy (GTS_OBJECT (box)); for (d = 0; d < FTT_NEIGHBORS; d++) if (neighbor[d]) gfs_boundary_mpi_new (gfs_boundary_mpi_class (), GFS_BOX (neighbor[d]), FTT_OPPOSITE_DIRECTION (d), pid, id); } static void add_id (GfsBox * box, GPtrArray * ids) { if (box->id > ids->len) g_ptr_array_set_size (ids, box->id); g_ptr_array_index (ids, box->id - 1) = box; } static GPtrArray * box_ids (GfsDomain * domain) { GPtrArray * ids = g_ptr_array_new (); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) add_id, ids); return ids; } static void convert_boundary_mpi_into_edges (GfsBox * box, GPtrArray * ids) { gint pid = gfs_box_domain (box)->pid; FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY_MPI (box->neighbor[d])) { GfsBoundaryMpi * b = GFS_BOUNDARY_MPI (box->neighbor[d]); GfsBox * nbox; if (b->id >= 0 && b->id <= ids->len && (nbox = g_ptr_array_index (ids, b->id - 1))) { FttDirection nd = GFS_BOUNDARY_PERIODIC (b)->d; if (!GFS_IS_BOUNDARY_MPI (nbox->neighbor[nd])) g_warning ("!GFS_IS_BOUNDARY_MPI (nbox->neighbor[nd])"); else { GfsBoundaryMpi * nb = GFS_BOUNDARY_MPI (nbox->neighbor[nd]); if (box->id != nb->id) g_warning ("box->id != nb->id"); else { int rotate = GFS_BOUNDARY_PERIODIC (b)->rotate; gts_object_destroy (GTS_OBJECT (b)); gts_object_destroy (GTS_OBJECT (nb)); GfsGEdge * edge; if (nd == FTT_OPPOSITE_DIRECTION (d)) /* standard edge */ edge = gfs_gedge_new (gfs_gedge_class (), box, nbox, d); else { /* rotated edge */ g_assert (rotate); if (rotate > 0) { edge = gfs_gedge_new (gfs_gedge_class (), box, nbox, d); edge->rotate = nd; } else { edge = gfs_gedge_new (gfs_gedge_class (), nbox, box, nd); edge->rotate = d; } } gfs_gedge_link_boxes (edge); } } } } if (pid >= 0) box->pid = pid; } static void domain_post_read (GfsDomain * domain, GtsFile * fp) { gts_graph_foreach_edge (GTS_GRAPH (domain), (GtsFunc) gfs_gedge_link_boxes, NULL); domain->np = 0; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) pid_max, &domain->np); #ifdef HAVE_MPI if (domain->pid >= 0) { /* Multiple PEs, make sure we have the max pid over all the boxes, in case each process loads a different file */ int npmax; MPI_Allreduce (&domain->np, &npmax, 1, MPI_INT, MPI_MAX, MPI_COMM_WORLD); domain->np = npmax; } #endif /* HAVE_MPI */ domain->np++; /* number of PEs according to pids */ if (domain->np > 1 && domain->pid >= 0) { /* Multiple PEs */ RemovedData p = { NULL, domain->pid }; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) set_ref_pos, &domain->refpos); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) removed_list, &p); #ifdef HAVE_MPI int comm_size; MPI_Comm_size (MPI_COMM_WORLD, &comm_size); if (domain->np != comm_size) { g_slist_free (p.removed); gts_file_error (fp, "it would be valid if one or %d PE were used", domain->np); return; } #endif /* HAVE_MPI */ g_slist_foreach (p.removed, (GFunc) mpi_links, domain); g_slist_free (p.removed); } else { /* Single PE */ /* Create array for fast linking of ids to GfsBox pointers */ GPtrArray * ids = box_ids (domain); /* Convert GfsBoundaryMpi into graph edges */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) convert_boundary_mpi_into_edges, ids); g_ptr_array_free (ids, TRUE); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) set_ref_pos, &domain->refpos); } gfs_domain_match (domain); gfs_locate_array_destroy (domain->array); domain->array = gfs_locate_array_new (domain); domain->version = atoi (GFS_BUILD_VERSION); } static void free_pair (gpointer key, gpointer value) { g_free (key); g_free (value); } static void cleanup_each_box (GfsBox * box, GfsDomain * domain) { /* this is a necessary check when using graph partitioning */ if (g_slist_length (GTS_SLIST_CONTAINEE (box)->containers) == 1) { ftt_cell_traverse (box->root, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_cleanup, domain); FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) ftt_cell_traverse (GFS_BOUNDARY (box->neighbor[d])->root, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_cleanup, domain); } } static void domain_destroy (GtsObject * o) { GfsDomain * domain = GFS_DOMAIN (o); GSList * i; gfs_clock_destroy (domain->timer); g_timer_destroy (domain->clock); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) cleanup_each_box, domain); i = domain->variables; while (i) { GSList * next = i->next; gts_object_destroy (i->data); i = next; } g_assert (domain->variables == NULL); g_slist_foreach (domain->derived_variables, (GFunc) gts_object_destroy, NULL); g_slist_free (domain->derived_variables); domain->derived_variables = NULL; g_array_free (domain->allocated, TRUE); g_hash_table_foreach (domain->timers, (GHFunc) free_pair, NULL); g_hash_table_destroy (domain->timers); g_slist_free (domain->variables_io); gfs_locate_array_destroy (domain->array); domain->array = NULL; g_hash_table_destroy (domain->objects); g_ptr_array_free (domain->sorted, TRUE); domain->sorted = NULL; (* GTS_OBJECT_CLASS (gfs_domain_class ())->parent_class->destroy) (o); } static void add_item (gpointer item, GPtrArray * a) { g_ptr_array_add (a, item); } static int compare_boxes (const void * p1, const void * p2) { GfsBox * b1 = *(GfsBox **)p1; GfsBox * b2 = *(GfsBox **)p2; /* the check below is necessary when using graph partitioning */ if (GFS_IS_BOX (b1) && GFS_IS_BOX (b2)) return b1->id < b2->id ? -1 : 1; else return 0; } static void domain_foreach (GtsContainer * c, GtsFunc func, gpointer data) { GPtrArray * a = GFS_DOMAIN (c)->sorted; if (a == NULL) /* domain is being destroyed */ (* GTS_CONTAINER_CLASS (GTS_OBJECT_CLASS (gfs_domain_class ())->parent_class)->foreach) (c, func, data); else { if (GFS_DOMAIN (c)->dirty) { g_ptr_array_set_size (a, 0); (* GTS_CONTAINER_CLASS (GTS_OBJECT_CLASS (gfs_domain_class ())->parent_class)->foreach) (c, (GtsFunc) add_item, a); qsort (a->pdata, a->len, sizeof (gpointer), compare_boxes); GFS_DOMAIN (c)->dirty = FALSE; } guint i; for (i = 0; i < a->len; i++) (* func) (a->pdata[i], data); } } static void domain_add (GtsContainer * c, GtsContainee * i) { (* GTS_CONTAINER_CLASS (GTS_OBJECT_CLASS (gfs_domain_class ())->parent_class)->add) (c, i); GFS_DOMAIN (c)->dirty = TRUE; } static void domain_remove (GtsContainer * c, GtsContainee * i) { (* GTS_CONTAINER_CLASS (GTS_OBJECT_CLASS (gfs_domain_class ())->parent_class)->remove) (c, i); GFS_DOMAIN (c)->dirty = TRUE; } static void domain_class_init (GfsDomainClass * klass) { GTS_OBJECT_CLASS (klass)->read = domain_read; GTS_OBJECT_CLASS (klass)->write = domain_write; GTS_OBJECT_CLASS (klass)->destroy = domain_destroy; GTS_CONTAINER_CLASS (klass)->foreach = domain_foreach; GTS_CONTAINER_CLASS (klass)->add = domain_add; GTS_CONTAINER_CLASS (klass)->remove = domain_remove; klass->post_read = domain_post_read; } static void domain_init (GfsDomain * domain) { domain->pid = -1; #ifdef HAVE_MPI int size; MPI_Comm_size (MPI_COMM_WORLD, &size); if (size > 1) MPI_Comm_rank (MPI_COMM_WORLD, &domain->pid); #endif /* HAVE_MPI */ domain->clock = g_timer_new (); domain->timer = gfs_clock_new (); domain->timers = g_hash_table_new (g_str_hash, g_str_equal); gts_range_init (&domain->size); domain->profile_bc = FALSE; gts_range_init (&domain->mpi_messages); gts_range_init (&domain->mpi_wait); domain->rootlevel = 0; domain->refpos.x = domain->refpos.y = domain->refpos.z = 0.; domain->lambda.x = domain->lambda.y = domain->lambda.z = 1.; domain->allocated = g_array_new (FALSE, TRUE, sizeof (gboolean)); domain->variables = NULL; domain->variables_io = NULL; domain->max_depth_write = -1; domain->cell_init = (FttCellInitFunc) gfs_cell_fine_init; domain->cell_init_data = domain; domain->version = atoi (GFS_BUILD_VERSION); domain->overlap = TRUE; domain->objects = g_hash_table_new (g_str_hash, g_str_equal); domain->np = 1; domain->sorted = g_ptr_array_new (); domain->dirty = TRUE; domain->projections = NULL; } GfsDomainClass * gfs_domain_class (void) { static GfsDomainClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_domain_info = { "GfsDomain", sizeof (GfsDomain), sizeof (GfsDomainClass), (GtsObjectClassInitFunc) domain_class_init, (GtsObjectInitFunc) domain_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_wgraph_class ()), &gfs_domain_info); } return klass; } typedef struct { FttTraverseFlags flags; gint max_depth; GfsVariable * v, * v1; FttComponent c; GfsLinearProblem * lp; } BcData; static void box_bc (GfsBox * box, BcData * p) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); GfsBc * bc = gfs_boundary_lookup_bc (b, p->v); if (bc) { b->v = p->v1; b->type = GFS_BOUNDARY_CENTER_VARIABLE; gfs_boundary_update (b); bc->v = p->v1; ftt_face_traverse_boundary (b->root, b->d, FTT_PRE_ORDER, p->flags, p->max_depth, bc->bc, bc); bc->v = p->v; gfs_boundary_send (b); } } } static void direction_face_bc (GtsObject * neighbor, GfsVariable * v) { if (GFS_IS_BOUNDARY (neighbor)) { GfsBoundary * b = GFS_BOUNDARY (neighbor); GfsBc * bc = gfs_boundary_lookup_bc (b, v); if (bc) { b->v = v; b->type = GFS_BOUNDARY_CENTER_VARIABLE; ftt_face_traverse_boundary (b->root, b->d, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, bc->face_bc, bc); b->type = GFS_BOUNDARY_FACE_VARIABLE; gfs_boundary_send (b); } } } static void box_face_bc (GfsBox * box, BcData * p) { if (p->c == FTT_XYZ) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) direction_face_bc (box->neighbor[d], p->v); } else { direction_face_bc (box->neighbor[2*p->c], p->v); direction_face_bc (box->neighbor[2*p->c + 1], p->v); } } static void box_receive_bc (GfsBox * box, BcData * r) { if (r->c == FTT_XYZ) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { FttDirection od = FTT_OPPOSITE_DIRECTION (d); if (GFS_IS_BOUNDARY (box->neighbor[od])) gfs_boundary_receive (GFS_BOUNDARY (box->neighbor[od]), r->flags, r->max_depth); } } else { if (GFS_IS_BOUNDARY (box->neighbor[2*r->c + 1])) gfs_boundary_receive (GFS_BOUNDARY (box->neighbor[2*r->c + 1]), r->flags, r->max_depth); if (GFS_IS_BOUNDARY (box->neighbor[2*r->c])) gfs_boundary_receive (GFS_BOUNDARY (box->neighbor[2*r->c]), r->flags, r->max_depth); } } static void box_match (GfsBox * box) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) { GfsBoundary * boundary = GFS_BOUNDARY (box->neighbor[d]); g_assert (GFS_BOUNDARY_CLASS (box->neighbor[d]->klass)->match); boundary->type = GFS_BOUNDARY_MATCH_VARIABLE; (* GFS_BOUNDARY_CLASS (box->neighbor[d]->klass)->match) (boundary); if (!boundary->root) { gts_object_destroy (GTS_OBJECT (boundary)); box->neighbor[d] = NULL; } else gfs_boundary_send (boundary); } } static void box_synchronize (GfsBox * box, FttComponent * c) { if (*c == FTT_XYZ) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) gfs_boundary_synchronize (GFS_BOUNDARY (box->neighbor[d])); } else { if (GFS_IS_BOUNDARY (box->neighbor[2*(*c)])) gfs_boundary_synchronize (GFS_BOUNDARY (box->neighbor[2*(*c)])); if (GFS_IS_BOUNDARY (box->neighbor[2*(*c) + 1])) gfs_boundary_synchronize (GFS_BOUNDARY (box->neighbor[2*(*c) + 1])); } } /** * gfs_domain_copy_bc: * @domain: a #GfsDomain. * @flags: the traversal flags. * @max_depth: the maximum depth of the traversal. * @v: a #GfsVariable. * @v1: another #GfsVariable. * * Apply the boundary conditions of variable @v in @domain to variable @v1. */ void gfs_domain_copy_bc (GfsDomain * domain, FttTraverseFlags flags, gint max_depth, GfsVariable * v, GfsVariable * v1) { BcData b = { flags, max_depth, v, v1, FTT_XYZ}; g_return_if_fail (domain != NULL); g_return_if_fail (v != NULL); g_return_if_fail (v1 != NULL); if (domain->profile_bc) gfs_domain_timer_start (domain, "bc"); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_bc, &b); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_receive_bc, &b); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_synchronize, &b.c); if (domain->profile_bc) gfs_domain_timer_stop (domain, "bc"); } /** * gfs_domain_bc: * @domain: a #GfsDomain. * @flags: the traversal flags. * @max_depth: the maximum depth of the traversal. * @v: a #GfsVariable. * * Apply the boundary conditions in @domain for variable @v. */ void gfs_domain_bc (GfsDomain * domain, FttTraverseFlags flags, gint max_depth, GfsVariable * v) { g_return_if_fail (domain != NULL); g_return_if_fail (v != NULL); gfs_domain_copy_bc (domain, flags, max_depth, v, v); } static void box_homogeneous_bc (GfsBox * box, BcData * p) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); GfsBc * bc = gfs_boundary_lookup_bc (b, p->v); if (bc) { b->v = p->v1; bc->v = p->v1; b->type = GFS_BOUNDARY_CENTER_VARIABLE; ftt_face_traverse_boundary (b->root, b->d, FTT_PRE_ORDER, p->flags, p->max_depth, bc->homogeneous_bc, bc); bc->v = p->v; gfs_boundary_send (b); } } } static void box_homogeneous_bc_stencil (GfsBox * box, BcData * p) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d]) && !GFS_IS_BOUNDARY_PERIODIC (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); GfsBc * bc = gfs_boundary_lookup_bc (b, p->v); if (bc) { b->v = p->v1; bc->v = p->v1; b->type = GFS_BOUNDARY_CENTER_VARIABLE; bc->lp = p->lp; ftt_face_traverse_boundary (b->root, b->d, FTT_PRE_ORDER, p->flags, p->max_depth, bc->homogeneous_bc_stencil, bc); bc->v = p->v; gfs_boundary_send (b); } } } /** * gfs_domain_homogeneous_bc: * @domain: a #GfsDomain. * @flags: the traversal flags. * @max_depth: the maximum depth of the traversal. * @ov: a #GfsVariable. * @v: a #GfsVariable of which @ov is an homogeneous version. * * Apply the boundary conditions in @domain for variable @ov using the * homogeneous version of the boundary condititons for @v. */ void gfs_domain_homogeneous_bc (GfsDomain * domain, FttTraverseFlags flags, gint max_depth, GfsVariable * ov, GfsVariable * v) { BcData b = { flags, max_depth, v, ov, FTT_XYZ}; g_return_if_fail (domain != NULL); g_return_if_fail (ov != NULL); g_return_if_fail (v != NULL); if (domain->profile_bc) gfs_domain_timer_start (domain, "bc"); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_homogeneous_bc, &b); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_receive_bc, &b); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_synchronize, &b.c); if (domain->profile_bc) gfs_domain_timer_stop (domain, "bc"); } /** * gfs_domain_homogeneous_bc_stencil: * @domain: a #GfsDomain. * @flags: the traversal flags. * @max_depth: the maximum depth of the traversal. * @ov: a #GfsVariable. * @v: a #GfsVariable of which @ov is an homogeneous version. * @lp: a #GfsLinearProblem in which to store the stencil. * * Gets the stencils corresponding to the homogeneous boundary * conditions in @domain for variable @v. */ void gfs_domain_homogeneous_bc_stencil (GfsDomain * domain, FttTraverseFlags flags, gint max_depth, GfsVariable * ov, GfsVariable * v, GfsLinearProblem * lp) { BcData b = { flags, max_depth, v, ov, FTT_XYZ, lp }; g_return_if_fail (domain != NULL); g_return_if_fail (v != NULL); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_homogeneous_bc_stencil, &b); } typedef struct { FttCellTraverseFunc func; gpointer data; FttTraverseType order; FttTraverseFlags flags; gint max_depth; } TraverseData; typedef struct { TraverseData t; BcData b; } TraverseBcData; static void update_mpi_cell (FttCell * cell, TraverseData * p) { if ((cell->flags & GFS_FLAG_USED) == 0) { (* p->func) (cell, p->data); cell->flags |= GFS_FLAG_USED; } } static void update_other_cell (FttCell * cell, TraverseData * p) { if ((cell->flags & GFS_FLAG_USED) != 0) cell->flags &= ~GFS_FLAG_USED; else (* p->func) (cell, p->data); } static void update_mpi_boundaries (GfsBox * box, TraverseBcData * p) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY_MPI (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); GfsBc * bc = gfs_boundary_lookup_bc (b, p->b.v); if (bc) { ftt_cell_traverse_boundary (box->root, d, p->t.order, p->t.flags, p->t.max_depth, (FttCellTraverseFunc) update_mpi_cell, p); b->v = p->b.v1; bc->v = p->b.v1; b->type = GFS_BOUNDARY_CENTER_VARIABLE; ftt_face_traverse_boundary (b->root, b->d, FTT_PRE_ORDER, p->b.flags, p->b.max_depth, bc->bc, bc); bc->v = p->b.v; gfs_boundary_send (b); } } } static void update_other_homogeneous_boundaries (GfsBox * box, BcData * p) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d]) && !GFS_IS_BOUNDARY_MPI (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); GfsBc * bc = gfs_boundary_lookup_bc (b, p->v); if (bc) { b->v = p->v1; bc->v = p->v1; b->type = GFS_BOUNDARY_CENTER_VARIABLE; ftt_face_traverse_boundary (b->root, b->d, FTT_PRE_ORDER, p->flags, p->max_depth, bc->homogeneous_bc, bc); bc->v = p->v; gfs_boundary_send (b); } } } /** * gfs_traverse_and_homogeneous_bc: * @domain: a #GfsDomain. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * @ov: a #GfsVariable. * @v: a #GfsVariable of which @ov is an homogeneous version. * * For serial runs, this is identical to calling: * * gfs_domain_cell_traverse (domain, order, flags, max_depth, func, data); * gfs_domain_homogeneous_bc (domain, flags, max_depth, ov, v); * * For parallel runs, the communications needed to apply the boundary * conditions are overlapped with the calls to @func in the bulk of * the domain. */ void gfs_traverse_and_homogeneous_bc (GfsDomain * domain, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data, GfsVariable * ov, GfsVariable * v) { g_return_if_fail (domain != NULL); if (domain->pid < 0 || !domain->overlap) { gfs_domain_cell_traverse (domain, order, flags, max_depth, func, data); gfs_domain_homogeneous_bc (domain, flags, max_depth, ov, v); } else { TraverseBcData d = { { func, data, order, flags, max_depth }, { flags, max_depth, v, ov, FTT_XYZ } }; /* Update and send MPI boundary values */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) update_mpi_boundaries, &d); /* Update bulk of domain and other boundaries */ gfs_domain_cell_traverse (domain, order, flags, max_depth, (FttCellTraverseFunc) update_other_cell, &d); /* Apply homogeneous BC on other boundaries */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) update_other_homogeneous_boundaries, &d.b); /* Receive and synchronize */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_receive_bc, &d.b); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_synchronize, &d.b.c); } } static void update_other_boundaries (GfsBox * box, BcData * p) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d]) && !GFS_IS_BOUNDARY_MPI (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); GfsBc * bc = gfs_boundary_lookup_bc (b, p->v); if (bc) { b->v = p->v1; bc->v = p->v1; b->type = GFS_BOUNDARY_CENTER_VARIABLE; ftt_face_traverse_boundary (b->root, b->d, FTT_PRE_ORDER, p->flags, p->max_depth, bc->bc, bc); bc->v = p->v; gfs_boundary_send (b); } } } /** * gfs_traverse_and_bc: * @domain: a #GfsDomain. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * @v: a #GfsVariable. * @v1: another #GfsVariable. * * For serial runs, this is identical to calling: * * gfs_domain_cell_traverse (domain, order, flags, max_depth, func, data); * gfs_domain_copy_bc (domain, flags, max_depth, v, v1); * * For parallel runs, the communications needed to apply the boundary * conditions are overlapped with the calls to @func in the bulk of * the domain. */ void gfs_traverse_and_bc (GfsDomain * domain, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data, GfsVariable * v, GfsVariable * v1) { g_return_if_fail (domain != NULL); if (domain->pid < 0 || !domain->overlap) { gfs_domain_cell_traverse (domain, order, flags, max_depth, func, data); gfs_domain_copy_bc (domain, flags, max_depth, v, v1); } else { TraverseBcData d = { { func, data, order, flags, max_depth }, { flags, max_depth, v, v1, FTT_XYZ } }; /* Update and send MPI boundary values */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) update_mpi_boundaries, &d); /* Update bulk of domain and other boundaries */ gfs_domain_cell_traverse (domain, order, flags, max_depth, (FttCellTraverseFunc) update_other_cell, &d); /* Apply BC on other boundaries */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) update_other_boundaries, &d.b); /* Receive and synchronize */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_receive_bc, &d.b); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_synchronize, &d.b.c); } } /** * gfs_domain_face_bc: * @domain: a #GfsDomain. * @c: a component. * @v: a #GfsVariable. * * Apply the boundary conditions on the faces of @domain for variable @v. */ void gfs_domain_face_bc (GfsDomain * domain, FttComponent c, GfsVariable * v) { BcData b = { FTT_TRAVERSE_LEAFS, -1, v, v, c }; g_return_if_fail (domain != NULL); g_return_if_fail (c == FTT_XYZ || (c >= 0 && c < FTT_DIMENSION)); g_return_if_fail (v != NULL); if (domain->profile_bc) gfs_domain_timer_start (domain, "face_bc"); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_face_bc, &b); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_receive_bc, &b); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_synchronize, &b.c); if (domain->profile_bc) gfs_domain_timer_stop (domain, "face_bc"); } static void box_changed (GfsBox * box, gboolean * changed) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) *changed |= GFS_BOUNDARY (box->neighbor[d])->changed; } static void refine_cell_corner (FttCell * cell, GfsDomain * domain) { if (FTT_CELL_IS_LEAF (cell) && ftt_refine_corner (cell)) ftt_cell_refine_single (cell, domain->cell_init, domain->cell_init_data); } static void box_depth (GfsBox * box, guint * depth) { guint d = ftt_cell_depth (box->root); if (d > *depth) *depth = d; } static gboolean domain_match (GfsDomain * domain) { BcData b = { FTT_TRAVERSE_LEAFS, -1, NULL, NULL, FTT_XYZ }; gboolean changed = FALSE; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_match, NULL); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_receive_bc, &b); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_synchronize, &b.c); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_changed, &changed); if (changed) { gint l; guint depth = 0; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_depth, &depth); for (l = depth - 2; l >= 0; l--) gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, l, (FttCellTraverseFunc) refine_cell_corner, domain); } gfs_all_reduce (domain, changed, MPI_INT, MPI_MAX); return changed; } /** * gfs_domain_match: * @domain: a #GfsDomain. * * Match the boundaries of @domain. */ void gfs_domain_match (GfsDomain * domain) { g_return_if_fail (domain != NULL); if (domain->profile_bc) gfs_domain_timer_start (domain, "match"); while (domain_match (domain)); if (domain->profile_bc) gfs_domain_timer_stop (domain, "match"); } /** * gfs_domain_forget_boundary: * @domain: a #GfsDomain. * @boundary: a #GfsBoundary belonging to @domain. * * Makes @domain permanently ignore @boundary when performing * "locate()" queries. */ void gfs_domain_forget_boundary (GfsDomain * domain, GfsBoundary * boundary) { g_return_if_fail (domain != NULL); g_return_if_fail (boundary != NULL); g_return_if_fail (gfs_box_domain (boundary->box) == domain); GfsLocateArray * a = domain->array; if (a == NULL) return; gint i; for (i = 0; i < a->size; i++) a->root[i] = g_slist_remove (a->root[i], boundary); } static void dirichlet_bc (FttCell * cell) { cell->flags |= GFS_FLAG_DIRICHLET; GFS_STATE (cell)->solid->fv = 0.; } static void neumann_bc (FttCell * cell) { cell->flags &= ~GFS_FLAG_DIRICHLET; GFS_STATE (cell)->solid->fv = 0.; } static gboolean is_velocity (GfsVariable * v, GfsDomain * domain) { FttComponent c; GfsVariable ** u = gfs_domain_velocity (domain); for (c = 0; c < FTT_DIMENSION; c++) if (v == u[c]) return TRUE; return FALSE; } /** * gfs_domain_surface_bc: * @domain: a #GfsDomain. * @v: a #GfsVariable. * * Apply boundary conditions for variable @v on embedded surfaces. */ void gfs_domain_surface_bc (GfsDomain * domain, GfsVariable * v) { g_return_if_fail (domain != NULL); g_return_if_fail (v != NULL); if (v->surface_bc) gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, (FttCellTraverseFunc) GFS_SURFACE_GENERIC_BC_CLASS (GTS_OBJECT (v->surface_bc)->klass)->bc, v->surface_bc); else if (is_velocity (v, domain)) gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, (FttCellTraverseFunc) dirichlet_bc, NULL); else gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, (FttCellTraverseFunc) neumann_bc, NULL); } static void box_traverse (GfsBox * box, TraverseData * d) { ftt_cell_traverse (box->root, d->order, d->flags, d->max_depth, d->func, d->data); } /** * gfs_domain_cell_traverse: * @domain: a #GfsDomain. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Traverses the cell trees of @domain. Calls the given function for * each cell visited. */ void gfs_domain_cell_traverse (GfsDomain * domain, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data) { TraverseData d = { func, data, order, flags, max_depth }; g_return_if_fail (domain != NULL); g_return_if_fail (func != NULL); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_traverse, &d); } static void cell_traverse_add (FttCell * cell, GPtrArray * a) { g_ptr_array_add (a, cell); } /** * gfs_domain_cell_traverse_new: * @domain: a #GfsDomain. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * * Returns: a new #FttCellTraverse. */ FttCellTraverse * gfs_domain_cell_traverse_new (GfsDomain * domain, FttTraverseType order, FttTraverseFlags flags, gint max_depth) { g_return_val_if_fail (domain != NULL, NULL); GPtrArray * a = g_ptr_array_new (); gfs_domain_cell_traverse (domain, order, flags, max_depth, (FttCellTraverseFunc) cell_traverse_add, a); g_ptr_array_add (a, NULL); FttCellTraverse * t = g_malloc (sizeof (FttCellTraverse)); t->current = t->cells = (FttCell **) a->pdata; g_ptr_array_free (a, FALSE); return t; } /** * gfs_domain_traverse_layers: * @domain: a #GfsDomain. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Traverses the leaf cells of @domain for each layer. Calls the given * function for each cell visited. * * By default it is identical to gfs_domain_traverse_leaves() but can * be overloaded for specific (layered) domains. */ void gfs_domain_traverse_layers (GfsDomain * domain, FttCellTraverseFunc func, gpointer data) { g_return_if_fail (domain != NULL); g_return_if_fail (func != NULL); if (domain->traverse_layers) (* domain->traverse_layers) (domain, func, data); else gfs_domain_traverse_leaves (domain, func, data); } static void box_traverse_box (GfsBox * box, gpointer * datum) { FttTraverseType * order = datum[0]; FttTraverseFlags * flags = datum[1]; gint * max_depth = datum[2]; FttCellTraverseFunc func = (FttCellTraverseFunc) datum[3]; gpointer data = datum[4]; GtsBBox * bb = datum[5]; ftt_cell_traverse_box (box->root, bb, *order, *flags, *max_depth, func, data); } /** * gfs_domain_cell_traverse_box: * @domain: a #GfsDomain. * @box: a #GtsBBox. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Traverses the cell trees of @domain. Calls the given function for * each cell visited. Only the cells overlapping with @box are visited. */ void gfs_domain_cell_traverse_box (GfsDomain * domain, GtsBBox * box, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data) { gpointer datum[6]; datum[0] = ℴ datum[1] = &flags; datum[2] = &max_depth; datum[3] = func; datum[4] = data; datum[5] = box; g_return_if_fail (domain != NULL); g_return_if_fail (box != NULL); g_return_if_fail (func != NULL); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_traverse_box, datum); } static void box_traverse_condition (GfsBox * box, gpointer * datum) { FttTraverseType * order = datum[0]; FttTraverseFlags * flags = datum[1]; gint * max_depth = datum[2]; FttCellTraverseFunc func = (FttCellTraverseFunc) datum[3]; gpointer data = datum[4]; gboolean (* condition) (FttCell *, gpointer) = datum[5]; gpointer cdata = datum[6]; ftt_cell_traverse_condition (box->root, *order, *flags, *max_depth, func, data, condition, cdata); } /** * gfs_domain_cell_traverse_condition: * @domain: a #GfsDomain. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * @condition: the condition. * @cdata: user data to pass to @condition. * * Traverses the cell trees of @domain. Calls the given function for * each cell visited. * * Traversal of any branch of the tree is stopped whenever @condition * is not verified. */ void gfs_domain_cell_traverse_condition (GfsDomain * domain, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data, gboolean (* condition) (FttCell *, gpointer), gpointer cdata) { gpointer datum[7]; datum[0] = ℴ datum[1] = &flags; datum[2] = &max_depth; datum[3] = func; datum[4] = data; datum[5] = condition; datum[6] = cdata; g_return_if_fail (domain != NULL); g_return_if_fail (func != NULL); g_return_if_fail (condition != NULL); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_traverse_condition, datum); } static void traverse_mixed (GfsBox * box, TraverseData * d) { gfs_cell_traverse_mixed (box->root, d->order, d->flags, d->func, d->data); } /** * gfs_domain_traverse_mixed: * @domain: a #GfsDomain. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Calls @func for each mixed cell of @domain. */ void gfs_domain_traverse_mixed (GfsDomain * domain, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseFunc func, gpointer data) { TraverseData d = { func, data, order, flags, -1 }; g_return_if_fail (domain != NULL); g_return_if_fail (func != NULL); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) traverse_mixed, &d); } typedef struct { FttCellTraverseCutFunc func; gpointer data; FttTraverseType order; FttTraverseFlags flags; GfsGenericSurface * s; } TraverseCut; static void traverse_cut (GfsBox * box, TraverseCut * p) { gfs_cell_traverse_cut (box->root, p->s, p->order, p->flags, p->func, p->data); } /** * gfs_domain_traverse_cut: * @domain: a #GfsDomain. * @s: a #GfsGenericSurface. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Calls @func for each cell of @domain cut by @s. */ void gfs_domain_traverse_cut (GfsDomain * domain, GfsGenericSurface * s, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseCutFunc func, gpointer data) { TraverseCut p = { func, data, order, flags, s }; g_return_if_fail (domain != NULL); g_return_if_fail (s != NULL); g_return_if_fail (func != NULL); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) traverse_cut, &p); } static void traverse_cut_2D (GfsBox * box, TraverseCut * p) { gfs_cell_traverse_cut_2D (box->root, p->s, p->order, p->flags, p->func, p->data); } /** * gfs_domain_traverse_cut_2D: * @domain: a #GfsDomain. * @s: a #GfsGenericSurface. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Calls @func for each cell of @domain cut by @s. * * The cells are flattened in the z-direction. */ void gfs_domain_traverse_cut_2D (GfsDomain * domain, GfsGenericSurface * s, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseCutFunc func, gpointer data) { TraverseCut p = { func, data, order, flags, s }; g_return_if_fail (domain != NULL); g_return_if_fail (s != NULL); g_return_if_fail (func != NULL); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) traverse_cut_2D, &p); } /** * gfs_domain_depth: * @domain: a #GfsDomain. * * Returns: the maximum depth of the cell trees of @domain. This * function is global i.e. it returns the maximum depth over all the * processes (for parallel execution). */ guint gfs_domain_depth (GfsDomain * domain) { guint depth = 0; g_return_val_if_fail (domain != NULL, 0); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_depth, &depth); gfs_all_reduce (domain, depth, MPI_UNSIGNED, MPI_MAX); return depth; } #include "ftt_internal.c" /** * gfs_domain_face_traverse: * @domain: a #GfsDomain. * @c: only the faces orthogonal to this component will be traversed - one of * %FTT_X, %FTT_Y, (%FTT_Z), %FTT_XYZ. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children and faces are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCellFace. * @data: user data to pass to @func. * * Traverses a @domain. Calls the given function for each face * of the cells of the domain. * * If %FTT_TRAVERSE_BOUNDARY_FACES is not set in @flags, only * "double-sided" faces are traversed i.e. the @neighbor field of the * face is never %NULL. */ void gfs_domain_face_traverse (GfsDomain * domain, FttComponent c, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttFaceTraverseFunc func, gpointer data) { FttDirection d; gpointer datum[6]; gboolean check = FALSE; gboolean boundary_faces; g_return_if_fail (domain != NULL); g_return_if_fail (c >= FTT_X && c <= FTT_XYZ); g_return_if_fail (func != NULL); boundary_faces = ((flags & FTT_TRAVERSE_BOUNDARY_FACES) != 0); datum[1] = &max_depth; datum[2] = func; datum[3] = data; datum[4] = ✓ datum[5] = &boundary_faces; if (c == FTT_XYZ) { if (boundary_faces) { check = TRUE; gfs_domain_cell_traverse (domain, order, flags, max_depth, (FttCellTraverseFunc) traverse_all_faces, datum); } else { gfs_domain_cell_traverse (domain, order, flags, max_depth, (FttCellTraverseFunc) traverse_all_direct_faces, datum); datum[0] = &d; check = TRUE; for (d = 1; d < FTT_NEIGHBORS; d += 2) gfs_domain_cell_traverse_boundary (domain, d, order, flags, max_depth, (FttCellTraverseFunc) traverse_face, datum); } } else if (c == FTT_XY) { gfs_domain_face_traverse (domain, FTT_X, order, flags, max_depth, func, data); gfs_domain_face_traverse (domain, FTT_Y, order, flags, max_depth, func, data); } else { if (boundary_faces) { check = TRUE; datum[0] = &c; gfs_domain_cell_traverse (domain, order, flags, max_depth, (FttCellTraverseFunc) traverse_face_component, datum); } else { d = 2*c; datum[0] = &d; gfs_domain_cell_traverse (domain, order, flags, max_depth, (FttCellTraverseFunc) traverse_face_direction, datum); d = 2*c + 1; check = TRUE; gfs_domain_cell_traverse_boundary (domain, d, order, flags, max_depth, (FttCellTraverseFunc) traverse_face, datum); } } gfs_domain_cell_traverse (domain, order, flags, max_depth, (FttCellTraverseFunc) reset_flag, NULL); } static void cell_traverse_boundary (GfsBox * box, gpointer * datum) { FttDirection * d = datum[0]; if (!GFS_IS_BOX (box->neighbor[*d])) { FttTraverseType * order = datum[1]; FttTraverseFlags * flags = datum[2]; gint * max_depth = datum[3]; FttCellTraverseFunc func = (FttCellTraverseFunc) datum[4]; gpointer data = datum[5]; ftt_cell_traverse_boundary (box->root, *d, *order, *flags, *max_depth, func, data); } } /** * gfs_domain_cell_traverse_boundary: * @domain: a #GfsDomain. * @d: the direction of the boundary to traverse. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Traverses the boundary of a domain in direction @d. Calls the given * function for each cell visited. */ void gfs_domain_cell_traverse_boundary (GfsDomain * domain, FttDirection d, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data) { gpointer datum[6]; datum[0] = &d; datum[1] = ℴ datum[2] = &flags; datum[3] = &max_depth; datum[4] = func; datum[5] = data; g_return_if_fail (domain != NULL); g_return_if_fail (d < FTT_NEIGHBORS); g_return_if_fail (func != NULL); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) cell_traverse_boundary, datum); } static void add_stats (const FttCell * cell, gpointer * data) { GtsRange * s = data[0]; gdouble v = GFS_VALUE (cell, GFS_VARIABLE (data[1])); if (v != GFS_NODATA) gts_range_add_value (s, v); } #ifdef HAVE_MPI static void range_reduce (void * i, void * o, int * len, MPI_Datatype * type) { gdouble * in = (gdouble *) i; gdouble * inout = (gdouble *) o; g_assert (*len == 5); if (in[0] < inout[0]) /* min */ inout[0] = in[0]; if (in[1] > inout[1]) /* max */ inout[1] = in[1]; inout[2] += in[2]; /* sum */ inout[3] += in[3]; /* sum2 */ inout[4] += in[4]; /* n */ } static void domain_range_reduce (GfsDomain * domain, GtsRange * s) { if (domain->pid >= 0) { double in[5]; double out[5] = { G_MAXDOUBLE, - G_MAXDOUBLE, 0., 0., 0. }; MPI_Op op; MPI_Op_create (range_reduce, TRUE, &op); in[0] = s->min; in[1] = s->max; in[2] = s->sum; in[3] = s->sum2; in[4] = s->n; MPI_Allreduce (in, out, 5, MPI_DOUBLE, op, MPI_COMM_WORLD); MPI_Op_free (&op); s->min = out[0]; s->max = out[1]; s->sum = out[2]; s->sum2 = out[3]; s->n = out[4]; } } #else /* not HAVE_MPI */ static void domain_range_reduce (GfsDomain * domain, GtsRange * s) { } #endif /* HAVE_MPI */ /** * gfs_domain_stats_variable: * @domain: the domain to obtain statistics from. * @v: a #GfsVariable. * @flags: which types of cells are to be visited. * @max_depth: maximum depth of the traversal. * @condition: a condition or %NULL. * @cdata: user data to pass to @condition. * * Traverses the domain defined by @domain using * gfs_domain_cell_traverse() and gathers statistics about variable * @v. * * Only cells veryfing @condition are taken into account (if * @condition is not %NULL). See also * gfs_domain_cell_traverse_condition(). * * Returns: a #GtsRange containing the statistics about @v. */ GtsRange gfs_domain_stats_variable (GfsDomain * domain, GfsVariable * v, FttTraverseFlags flags, gint max_depth, gboolean (* condition) (FttCell *, gpointer), gpointer cdata) { GtsRange s; gpointer data[2]; g_return_val_if_fail (domain != NULL, s); g_return_val_if_fail (v != NULL, s); gts_range_init (&s); data[0] = &s; data[1] = v; if (condition) gfs_domain_cell_traverse_condition (domain, FTT_PRE_ORDER, flags, max_depth, (FttCellTraverseFunc) add_stats, data, condition, cdata); else gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, max_depth, (FttCellTraverseFunc) add_stats, data); domain_range_reduce (domain, &s); gts_range_update (&s); return s; } static void add_stats_solid (FttCell * cell, GtsRange * s) { gts_range_add_value (s, GFS_STATE (cell)->solid->a); } /** * gfs_domain_stats_solid: * @domain: the domain to obtain statistics from. * * Traverses the domain defined by @domain using gfs_domain_traverse_mixed() * and gathers statistics about the solid volume fraction in mixed cells. * * Returns: statistics about the solid volume fraction @a in mixed cells. */ GtsRange gfs_domain_stats_solid (GfsDomain * domain) { GtsRange s; g_return_val_if_fail (domain != NULL, s); gts_range_init (&s); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) add_stats_solid, &s); domain_range_reduce (domain, &s); gts_range_update (&s); return s; } static void add_stats_merged (GSList * m, gpointer * data) { GtsRange * solid = data[0]; GtsRange * number = data[1]; gdouble a = 0.; guint n = 0; while (m) { FttCell * c = m->data; a += GFS_IS_MIXED (c) ? GFS_STATE (c)->solid->a : 1.; n++; m = m->next; } if (n > 1 || a < 1.) gts_range_add_value (solid, a); if (n > 1) gts_range_add_value (number, n); } /** * gfs_domain_stats_merged: * @domain: the domain to obtain statistics from. * @solid: #GtsRange in which to return stats for the total solid * volume fraction of merged cells. * @number: #GtsRange in which to return stats for the number of cells * used per merged cell. * * Traverses the domain defined by @domain using * gfs_domain_traverse_merged() and gathers statistics about the total * solid volume fraction of merged cells and the number of cells used * per merged cell. */ void gfs_domain_stats_merged (GfsDomain * domain, GtsRange * solid, GtsRange * number) { gpointer data[2]; g_return_if_fail (domain != NULL); g_return_if_fail (solid != NULL); g_return_if_fail (number != NULL); gts_range_init (solid); gts_range_init (number); data[0] = solid; data[1] = number; gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) add_stats_merged, data); domain_range_reduce (domain, solid); domain_range_reduce (domain, number); gts_range_update (solid); gts_range_update (number); } static void cell_count (FttCell * cell, guint * count) { (*count)++; } #define BPID(b) (gfs_box_domain (b)->pid >= 0 && (b)->pid > 0 ? (b)->pid : 0) static void box_count (GfsBox * b, GArray * a) { guint count = 0, pid = BPID(b); ftt_cell_traverse (b->root, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) cell_count, &count); if (pid >= a->len) g_array_set_size (a, pid + 1); g_array_index (a, guint, pid) += count; } static void boundary_size (GfsBox * box, GArray * a) { FttDirection d; guint count = 0; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY_MPI (box->neighbor[d]) || (GFS_IS_BOX (box->neighbor[d]) && GFS_BOX (box->neighbor[d])->pid != box->pid)) ftt_cell_traverse_boundary (box->root, d, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) cell_count, &count); g_array_index (a, guint, BPID (box)) += count; } /** * gfs_domain_stats_balance: * @domain: the domain to obtain statistics from. * @size: #GtsRange in which to return stats for the total size of the domain. * @boundary: #GtsRange in which to return stats for the size of the parallel * boundaries of the domain. * @mpiwait: #GtsRange in which to return stats for the average time spend * waiting for MPI calls in each PE. * * Gathers statistics about the sizes of the domains, their parallel * boundaries and the execution time on each PE. */ void gfs_domain_stats_balance (GfsDomain * domain, GtsRange * size, GtsRange * boundary, GtsRange * mpiwait) { g_return_if_fail (domain != NULL); g_return_if_fail (size != NULL); g_return_if_fail (boundary != NULL); g_return_if_fail (mpiwait != NULL); gts_range_init (size); gts_range_init (boundary); gts_range_init (mpiwait); if (domain->timestep.n > 0) gts_range_add_value (mpiwait, domain->mpi_wait.sum/domain->timestep.n); GArray * a = g_array_new (FALSE, TRUE, sizeof (guint)); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_count, a); guint i; for (i = 0; i < a->len; i++) { guint v = g_array_index (a, guint, i); if (v > 0) { gts_range_add_value (size, v); g_array_index (a, guint, i) = 0; } } gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) boundary_size, a); for (i = 0; i < a->len; i++) { guint v = g_array_index (a, guint, i); if (v > 0) gts_range_add_value (boundary, v); } domain_range_reduce (domain, size); domain_range_reduce (domain, boundary); domain_range_reduce (domain, mpiwait); g_array_free (a, TRUE); gts_range_update (size); gts_range_update (boundary); gts_range_update (mpiwait); } static void add_norm (const FttCell * cell, gpointer * data) { GfsNorm * n = data[0]; GfsVariable * v = data[1]; gfs_norm_add (n, GFS_VALUE (cell, v), gfs_cell_volume (cell, v->domain)); } static void add_norm_weighted (FttCell * cell, gpointer * data) { GfsNorm * n = data[0]; GfsVariable * v = data[1]; GfsFunction * w = data[2]; gfs_norm_add (n, GFS_VALUE (cell, v), gfs_cell_volume (cell, v->domain)* gfs_function_value (w, cell)); } #ifdef HAVE_MPI static void norm_reduce (void * i, void * o, int * len, MPI_Datatype * type) { gdouble * in = (gdouble *) i; gdouble * inout = (gdouble *) o; g_assert (*len == 5); inout[0] += in[0]; /* bias */ inout[1] += in[1]; /* first */ inout[2] += in[2]; /* second */ if (in[3] > inout[3]) /* infty */ inout[3] = in[3]; inout[4] += in[4]; /* w */ } static void domain_norm_reduce (GfsDomain * domain, GfsNorm * n) { if (domain->pid >= 0) { double in[5]; double out[5] = { 0., 0., 0., - G_MAXDOUBLE, 0. }; MPI_Op op; MPI_Op_create (norm_reduce, TRUE, &op); in[0] = n->bias; in[1] = n->first; in[2] = n->second; in[3] = n->infty; in[4] = n->w; MPI_Allreduce (in, out, 5, MPI_DOUBLE, op, MPI_COMM_WORLD); MPI_Op_free (&op); n->bias = out[0]; n->first = out[1]; n->second = out[2]; n->infty = out[3]; n->w = out[4]; } } #else /* not HAVE_MPI */ static void domain_norm_reduce (GfsDomain * domain, GfsNorm * n) { } #endif /* not HAVE_MPI */ /** * gfs_domain_norm_variable: * @domain: the domain to obtain norm from. * @v: a #GfsVariable. * @w: a #GfsFunction or %NULL. * @flags: which types of cells are to be visited. * @max_depth: maximum depth of the traversal. * @condition: a condition or %NULL. * @cdata: user data to pass to @condition. * * Traverses the domain defined by @domain using gfs_domain_cell_traverse() * and gathers norm statistics about variable @v. * * The norm is weighted by the volume of each cell times the value of * function @w (if @w is not %NULL). * * Only cells veryfing @condition are taken into account (if * @condition is not %NULL). See also * gfs_domain_cell_traverse_condition(). * * Returns: a #GfsNorm containing the norm statistics about @v. */ GfsNorm gfs_domain_norm_variable (GfsDomain * domain, GfsVariable * v, GfsFunction * w, FttTraverseFlags flags, gint max_depth, gboolean (* condition) (FttCell *, gpointer), gpointer cdata) { GfsNorm n; gpointer data[3]; g_return_val_if_fail (domain != NULL, n); g_return_val_if_fail (v != NULL, n); gfs_norm_init (&n); data[0] = &n; data[1] = v; data[2] = w; FttCellTraverseFunc func = w != NULL ? (FttCellTraverseFunc) add_norm_weighted : (FttCellTraverseFunc) add_norm; if (w) gfs_catch_floating_point_exceptions (); if (condition) gfs_domain_cell_traverse_condition (domain, FTT_PRE_ORDER, flags, max_depth, (FttCellTraverseFunc) func, data, condition, cdata); else gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, max_depth, (FttCellTraverseFunc) func, data); if (w) gfs_restore_fpe_for_function (w); domain_norm_reduce (domain, &n); gfs_norm_update (&n); return n; } typedef struct { GfsVariable * res; gdouble bias; GfsNorm n; } ResData; static void add_norm_residual (const FttCell * cell, ResData * p) { GfsDomain * domain = p->res->domain; gdouble a = domain->cell_metric ? (* domain->cell_metric) (domain, cell) : 1.; gdouble size = ftt_cell_size (cell); gfs_norm_add (&p->n, GFS_VALUE (cell, p->res)/(a*size*size), 1.); p->bias += GFS_VALUE (cell, p->res); } /** * gfs_domain_norm_residual: * @domain: the domain to obtain the norm from. * @flags: which types of cells are to be visited. * @max_depth: maximum depth of the traversal. * @dt: the time step. * @res: the residual. * * Traverses the domain defined by @domain using gfs_domain_cell_traverse() * and gathers norm statistics about the volume weighted relative residual * (i.e. the sum of the residual over the volume defined by each cell * divided by the total volume of the cell). * * Returns: a #GfsNorm containing the norm statistics about the volume * weighted relative residual. */ GfsNorm gfs_domain_norm_residual (GfsDomain * domain, FttTraverseFlags flags, gint max_depth, gdouble dt, GfsVariable * res) { ResData p = { res, 0. }; g_return_val_if_fail (domain != NULL, p.n); g_return_val_if_fail (res != NULL, p.n); gfs_norm_init (&p.n); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, max_depth, (FttCellTraverseFunc) add_norm_residual, &p); domain_norm_reduce (domain, &p.n); gfs_all_reduce (domain, p.bias, MPI_DOUBLE, MPI_SUM); gfs_norm_update (&p.n); dt *= dt; p.n.bias = p.bias*dt; p.n.first *= dt; p.n.second *= dt; p.n.infty *= dt; return p.n; } /** * gfs_domain_velocity: * @domain: a #GfsDomain. * * Returns: the components of the velocity vector for @domain or %NULL. */ GfsVariable ** gfs_domain_velocity (GfsDomain * domain) { FttComponent c; static gchar name[][2] = {"U","V","W"}; g_return_val_if_fail (domain != NULL, NULL); for (c = 0; c < FTT_DIMENSION; c++) { GfsVariable * v = gfs_variable_from_name (domain->variables, name[c]); if (v == NULL) return NULL; domain->velocity[c] = v; } return domain->velocity; } static void add_norm_velocity (FttCell * cell, gpointer * data) { GfsVariable ** u = data[0]; GfsNorm * n = data[1]; gfs_norm_add (n, gfs_vector_norm (cell, u), gfs_cell_volume (cell, u[0]->domain)); } /** * gfs_domain_norm_velocity: * @domain: the domain to obtain the norm from. * @flags: which types of cells are to be visited. * @max_depth: maximum depth of the traversal. * * Traverses the domain defined by @domain using gfs_domain_cell_traverse() * and gathers norm statistics about velocity. * * Returns: a #GfsNorm containing the norm statistics about the velocity. */ GfsNorm gfs_domain_norm_velocity (GfsDomain * domain, FttTraverseFlags flags, gint max_depth) { GfsNorm n; gpointer data[2]; g_return_val_if_fail (domain != NULL, n); gfs_norm_init (&n); data[0] = gfs_domain_velocity (domain); data[1] = &n; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, max_depth, (FttCellTraverseFunc) add_norm_velocity, data); domain_norm_reduce (domain, &n); gfs_norm_update (&n); return n; } /** * gfs_domain_read: * @fp: a #GtsFile. * * Reads the graph nodes (#GfsBox) and edges and the * corresponding boundaries (#GfsBoundaryMpi if necessary) defined in * @fp. * * Returns: the #GfsDomain or %NULL if an error occured, in which case * the corresponding @fp fields (@pos and @error) are set. */ GfsDomain * gfs_domain_read (GtsFile * fp) { GfsDomain * domain; g_return_val_if_fail (fp != NULL, NULL); if (!(domain = GFS_DOMAIN (gts_graph_read (fp)))) return NULL; (* GFS_DOMAIN_CLASS (GTS_OBJECT (domain)->klass)->post_read) (domain, fp); if (fp->type == GTS_ERROR) { gts_object_destroy (GTS_OBJECT (domain)); return NULL; } return domain; } typedef struct { GSList * boxlist; guint bid; gboolean one_box_per_pe; gint pid; GfsVariable * newboxp; GfsDomain * domain; } SplitPar; static void box_split (GfsBox * box, SplitPar * p) { guint refid = FTT_DIMENSION == 2 ? 2 : 6; FttCellChildren child; FttDirection d; guint i; GfsDomain * domain = gfs_box_domain (box); p->boxlist = g_slist_prepend (p->boxlist, box); if (FTT_CELL_IS_LEAF (box->root)) ftt_cell_refine_single (box->root, (FttCellInitFunc) gfs_cell_init, domain); ftt_cell_children (box->root, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { GfsBox * newbox = GFS_BOX (gts_object_new (GTS_OBJECT (box)->klass)); GTS_OBJECT (newbox)->reserved = domain; if (p->one_box_per_pe) newbox->pid = (p->pid)++; else newbox->pid = box->pid; if (box->id == 1 && i == refid) newbox->id = 1; else newbox->id = (p->bid)++; GFS_DOUBLE_TO_POINTER (GFS_VALUE (child.c[i], p->newboxp)) = newbox; if (FTT_CELL_IS_LEAF (child.c[i])) ftt_cell_refine_single (child.c[i], (FttCellInitFunc) gfs_cell_init, domain); } for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) { GfsBoundary * boundary = GFS_BOUNDARY (box->neighbor[d]); GfsBoundaryClass * klass = GFS_BOUNDARY_CLASS (GTS_OBJECT (boundary)->klass); ftt_cell_destroy (boundary->root, (FttCellCleanupFunc) gfs_cell_cleanup, domain); boundary->root = NULL; ftt_cell_children_direction (box->root, d, &child); for (i = 0; i < FTT_CELLS/2; i++) if (child.c[i]) { GfsBox * newbox = GFS_DOUBLE_TO_POINTER (GFS_VALUE (child.c[i], p->newboxp)); GtsObject * newboundary = GTS_OBJECT (gfs_boundary_new (klass, newbox, d)); if (GFS_IS_BOUNDARY_PERIODIC (newboundary)) { GFS_BOUNDARY_PERIODIC (newboundary)->matching = GFS_BOUNDARY_PERIODIC (boundary)->matching; GFS_BOUNDARY_PERIODIC (newboundary)->d = GFS_BOUNDARY_PERIODIC (boundary)->d; } else gfs_object_clone (GTS_OBJECT (boundary), GTS_OBJECT (newboundary)); } gts_object_destroy (GTS_OBJECT (boundary)); box->neighbor[d] = NULL; } } static GtsGEdge * node_is_linked (GtsGNode * n1, GtsGNode * n2, FttDirection d) { GSList * i = GTS_SLIST_CONTAINER (n1)->items; while (i) { if (GTS_GNODE_NEIGHBOR (n1, i->data) == n2 && GFS_GEDGE (i->data)->d == d) return i->data; i = i->next; } return NULL; } static void box_link (GfsBox * box, SplitPar * p) { FttCellChildren child; guint i; ftt_cell_children (box->root, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { GfsBox * newbox = GFS_DOUBLE_TO_POINTER (GFS_VALUE (child.c[i], p->newboxp)); FttDirection d; g_assert (newbox); gts_container_add (GTS_CONTAINER (p->domain), GTS_CONTAINEE (newbox)); for (d = 0; d < FTT_NEIGHBORS; d++) if (newbox->neighbor[d] != NULL && GFS_IS_BOUNDARY_PERIODIC (newbox->neighbor[d])) { GfsBox * matching = GFS_BOUNDARY_PERIODIC (newbox->neighbor[d])->matching; static gint match[FTT_CELLS][FTT_NEIGHBORS] = { #if FTT_2D { -1, 1, 2, -1 }, { 0, -1, 3, -1 }, { -1, 3, -1, 0 }, { 2, -1, -1, 1 } #else /* 3D */ { -1, 1, 2, -1, 4, -1 }, { 0, -1, 3, -1, 5, -1 }, { -1, 3, -1, 0, 6, -1 }, { 2, -1, -1, 1, 7, -1 }, { -1, 5, 6, -1, -1, 0 }, { 4, -1, 7, -1, -1, 1 }, { -1, 7, -1, 4, -1, 2 }, { 6, -1, -1, 5, -1, 3 }, #endif /* 3D */ }; gint ci = match[FTT_CELL_ID (child.c[i])][d]; g_assert (ci >= 0); FttCellChildren neighbors; ftt_cell_children (matching->root, &neighbors); FttCell * neighbor = neighbors.c[ci]; g_assert (neighbor); GfsBox * newbox1 = GFS_DOUBLE_TO_POINTER (GFS_VALUE (neighbor, p->newboxp)); g_assert (newbox1); GFS_BOUNDARY_PERIODIC (newbox->neighbor[d])->matching = newbox1; if (!node_is_linked (GTS_GNODE (newbox1), GTS_GNODE (newbox), FTT_OPPOSITE_DIRECTION (d))) { GfsGEdge * edge = GFS_GEDGE (gts_gedge_new (GTS_GRAPH (p->domain)->edge_class, GTS_GNODE (newbox), GTS_GNODE (newbox1))); edge->d = d; } } else if (newbox->neighbor[d] == NULL) { FttCell * neighbor = ftt_cell_neighbor (child.c[i], d); if (neighbor) { GfsBox * newbox1 = GFS_DOUBLE_TO_POINTER (GFS_VALUE (neighbor, p->newboxp)); FttDirection od = FTT_OPPOSITE_DIRECTION (d); GfsGEdge * edge; g_assert (newbox1); newbox->neighbor[d] = GTS_OBJECT (newbox1); g_assert (newbox1->neighbor[od] == NULL); newbox1->neighbor[od] = GTS_OBJECT (newbox); edge = GFS_GEDGE (gts_gedge_new (GTS_GRAPH (p->domain)->edge_class, GTS_GNODE (newbox), GTS_GNODE (newbox1))); edge->d = d; } } } } static void box_destroy (GfsBox * box, GfsVariable * newboxp) { GfsBox * newbox[FTT_CELLS]; FttCellChildren child; guint i; ftt_cell_children (box->root, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) newbox[i] = GFS_DOUBLE_TO_POINTER (GFS_VALUE (child.c[i], newboxp)); else newbox[i] = NULL; ftt_cell_destroy_root (box->root, &child, (FttCellCleanupFunc) gfs_cell_cleanup, gfs_box_domain (box)); box->root = NULL; for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { newbox[i]->root = child.c[i]; FTT_ROOT_CELL (newbox[i]->root)->parent = newbox[i]; } gts_object_destroy (GTS_OBJECT (box)); } static void get_ref_pos (GfsBox * box, FttVector * pos) { if (box->id == 1) ftt_cell_pos (box->root, pos); } /** * gfs_domain_split: * @domain: a #GfsDomain. * @one_box_per_pe: if %TRUE each new box created is assigned to a * different process, otherwise the newly created box inherits the pid * of its parent. * * Splits each box of @domain into its (4 in 2D, 8 in 3D) * children. The corresponding newly created boxes are added to the * graph and the parent boxes are destroyed. */ void gfs_domain_split (GfsDomain * domain, gboolean one_box_per_pe) { SplitPar p; g_return_if_fail (domain != NULL); p.newboxp = gfs_temporary_variable (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, 1, (FttCellTraverseFunc) gfs_cell_reset, p.newboxp); p.boxlist = NULL; p.bid = 2; p.pid = 0; p.one_box_per_pe = one_box_per_pe; p.domain = domain; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_split, &p); g_slist_foreach (p.boxlist, (GFunc) box_link, &p); g_slist_foreach (p.boxlist, (GFunc) box_destroy, p.newboxp); g_slist_free (p.boxlist); gts_object_destroy (GTS_OBJECT (p.newboxp)); gfs_domain_match (domain); domain->rootlevel++; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) get_ref_pos, &domain->refpos); } /** * gfs_domain_locate: * @domain: a #GfsDomain. * @target: position of the point to look for. * @max_depth: maximum depth to consider (-1 means no restriction, see below for -2). * @where: a pointer to a #GfsBox or %NULL. * * Locates the cell of @domain containing @target. This is done * efficiently in log(n) operations by using the topology of the cell * trees. * * If @max_depth is set to -2, the finest cell containing @target is * returned. This cell is not necessarily a leaf-cell in contrast to * the case where @max_depth is set to -1. * * If @where is not %NULL it is filled with the #GfsBox containing the * cell. * * Returns: a #FttCell of @domain containing (boundary included) the * point defined by @target or %NULL if @target is not contained in * any cell of @domain. */ FttCell * gfs_domain_locate (GfsDomain * domain, FttVector target, gint max_depth, GfsBox ** where) { g_return_val_if_fail (domain != NULL, NULL); g_return_val_if_fail (domain->array != NULL, NULL); GSList * b = gfs_locate_array_locate (domain->array, &target); if (b && GFS_IS_BOX (b->data)) { if (where) *where = b->data; return ftt_cell_locate (GFS_BOX (b->data)->root, target, max_depth); } return NULL; } /** * gfs_domain_boundary_locate: * @domain: a #GfsDomain. * @target: position of the point to look for. * @max_depth: maximum depth to consider (-1 means no restriction). * @where: a pointer to a #GtsObject. * * Locates the cell of @domain or of its boundary containing @target. * * If @where is not %NULL it is filled with the #GtsObject (either a * #GfsBox or a #GfsBoundary) containing the cell. * * Returns: a #FttCell of @domain or of its boundary containing the * point defined by @target or %NULL if @target is not contained in * any cell of @domain or of its boundary. */ FttCell * gfs_domain_boundary_locate (GfsDomain * domain, FttVector target, gint max_depth, GtsObject ** where) { g_return_val_if_fail (domain != NULL, NULL); g_return_val_if_fail (domain->array != NULL, NULL); GSList * b = gfs_locate_array_locate (domain->array, &target); if (!b) return NULL; if (GFS_IS_BOX (b->data)) { if (where) *where = b->data; return ftt_cell_locate (GFS_BOX (b->data)->root, target, max_depth); } else while (b) { g_assert (GFS_IS_BOUNDARY (b->data)); FttCell * cell = ftt_cell_locate (GFS_BOUNDARY (b->data)->root, target, max_depth); if (cell && GFS_CELL_IS_BOUNDARY (cell)) { if (where) *where = b->data; return cell; } b = b->next; } return NULL; } static void box_distance2 (GfsBox * box, GPtrArray * a) { g_ptr_array_add (a, box); } static void bubble_sort (GPtrArray * a, gdouble * d) { guint i, j; for (i = 0; i < a->len - 1; i++) for (j = 0; j < a->len - 1 - i; j++) if (d[j+1] < d[j]) { gdouble tmp = d[j]; gpointer data = a->pdata[j]; d[j] = d[j+1]; d[j+1] = tmp; a->pdata[j] = a->pdata[j+1]; a->pdata[j+1] = data; } } /** * gfs_domain_cell_point_distance2: * @domain: a #GfsDomain. * @p: a #GtsPoint. * @distance2: the squared distance function. * @data: user data to pass to @distance2. * @closest: where to return the closest cell or %NULL. * * For non-leafs cells @distance2 must return a lower-bound for the * minimum distance (using for example ftt_cell_point_distance2_min()). * * Returns: the square of the minimum distance measured according to * @distance2 between @p and a leaf cell of @domain. */ gdouble gfs_domain_cell_point_distance2 (GfsDomain * domain, GtsPoint * p, gdouble (* distance2) (FttCell *, GtsPoint *, gpointer), gpointer data, FttCell ** closest) { gdouble dmin = G_MAXDOUBLE; GPtrArray * a; gdouble * d; guint i; g_return_val_if_fail (domain != NULL, dmin); g_return_val_if_fail (p != NULL, dmin); g_return_val_if_fail (distance2 != NULL, dmin); if (closest) *closest = NULL; a = g_ptr_array_new (); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_distance2, a); d = g_malloc (sizeof (gdouble)*a->len); for (i = 0; i < a->len; i++) d[i] = (* distance2) (GFS_BOX (a->pdata[i])->root, p, data); bubble_sort (a, d); for (i = 0; i < a->len; i++) if (d[i] < dmin) ftt_cell_point_distance2_internal (GFS_BOX (a->pdata[i])->root, p, d[i], distance2, data, closest, &dmin); g_free (d); g_ptr_array_free (a, TRUE); return dmin; } /** * gfs_domain_advect_point: * @domain: a #GfsDomain. * @p: a #FttVector. * @dt: the time step. * * Updates the coordinates of point @p at time t + @dt using the * velocity field defined by @domain. * * If @p is not contained within @domain, the coordinates are unchanged. */ void gfs_domain_advect_point (GfsDomain * domain, FttVector * p, gdouble dt) { FttCell * cell; FttVector p0, p1; FttComponent c; GfsVariable ** u; g_return_if_fail (domain != NULL); g_return_if_fail (p != NULL); p0 = p1 = *p; cell = gfs_domain_locate (domain, p0, -1, NULL); if (cell == NULL) return; u = gfs_domain_velocity (domain); for (c = 0; c < FTT_DIMENSION; c++) (&p1.x)[c] += dt*gfs_interpolate (cell, p0, u[c])/2.; cell = gfs_domain_locate (domain, p1, -1, NULL); if (cell == NULL) return; for (c = 0; c < FTT_DIMENSION; c++) (&p->x)[c] += dt*gfs_interpolate (cell, p1, u[c]); } static void count (FttCell * cell, guint * n) { (*n)++; } /** * gfs_domain_size: * @domain: a #GfsDomain. * @flags: which types of cells are to be visited. * @max_depth: maximum depth of the traversal. * * Returns: the number of cells of @domain traversed using @flags and * @max_depth. */ guint gfs_domain_size (GfsDomain * domain, FttTraverseFlags flags, gint max_depth) { guint n = 0; g_return_val_if_fail (domain != NULL, 0); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, max_depth, (FttCellTraverseFunc) count, &n); gfs_all_reduce (domain, n, MPI_UNSIGNED, MPI_SUM); return n; } typedef struct { gdouble cfl; GfsVariable ** v; GfsDomain * domain; } CflData; static void minimum_mac_cfl (FttCellFace * face, CflData * p) { gdouble un = GFS_STATE (face->cell)->f[face->d].un; gdouble length = ftt_cell_size (face->cell); if (p->domain->cell_metric) { gdouble fm = (* p->domain->face_metric) (p->domain, face); if (fm <= 0.) /* e.g. Axi metric on the axis */ return; length *= (* p->domain->cell_metric) (p->domain, face->cell)/fm; } if (un != 0.) { gdouble cflu = length/fabs (un); if (cflu*cflu < p->cfl) p->cfl = cflu*cflu; } FttComponent c = face->d/2; if (p->v[c]->sources) { gdouble g = 0.; GSList * i = GTS_SLIST_CONTAINER (p->v[c]->sources)->items; while (i) { GfsSourceGeneric * s = i->data; if (s->face_value) g += (* s->face_value) (s, face, p->v[c]); i = i->next; } if (g != 0.) { gdouble cflg = 2.*length/fabs (g); if (cflg < p->cfl) p->cfl = cflg; } } } static void minimum_cfl (FttCell * cell, CflData * p) { gdouble length = ftt_cell_size (cell); if (p->domain->cell_metric) length *= (* p->domain->cell_metric) (p->domain, cell); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) { gdouble fm; if (p->domain->face_metric) { FttCellFace f; f.cell = cell; f.d = 2*c; gdouble fm1 = (* p->domain->face_metric) (p->domain, &f); f.d = 2*c + 1; gdouble fm2 = (* p->domain->face_metric) (p->domain, &f); fm = MAX (fm1, fm2); } else fm = 1.; if (GFS_VALUE (cell, p->v[c]) != 0.) { gdouble cflu = length/fabs (fm*GFS_VALUE (cell, p->v[c])); if (cflu*cflu < p->cfl) p->cfl = cflu*cflu; } if (p->v[c]->sources) { gdouble g = gfs_variable_mac_source (p->v[c], cell); if (g != 0.) { gdouble cflg = 2.*length/fabs (fm*g); if (cflg < p->cfl) p->cfl = cflg; } } } } /** * gfs_domain_cfl: * @domain: a #GfsDomain. * @flags: which types of cells are to be visited. * @max_depth: maximum depth of the traversal. * * Returns: the minimum over the cells of @domain (traversed using * @flags and @max_depth) of the time scale defined by the size of the * cell and the norm of either the local velocity or the local * acceleration. */ gdouble gfs_domain_cfl (GfsDomain * domain, FttTraverseFlags flags, gint max_depth) { CflData p; g_return_val_if_fail (domain != NULL, 0.); p.cfl = G_MAXDOUBLE; p.v = gfs_domain_velocity (domain); p.domain = domain; gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, flags, max_depth, (FttFaceTraverseFunc) minimum_mac_cfl, &p); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, max_depth, (FttCellTraverseFunc) minimum_cfl, &p); gfs_all_reduce (domain, p.cfl, MPI_DOUBLE, MPI_MIN); return sqrt (p.cfl); } /** * gfs_cell_init: * @cell: a #FttCell. * @domain: a #GfsDomain containing @cell. * * Allocates the memory for fluid state data associated to @cell or its children. */ void gfs_cell_init (FttCell * cell, GfsDomain * domain) { g_return_if_fail (cell != NULL); g_return_if_fail (domain != NULL); if (FTT_CELL_IS_LEAF (cell)) { g_return_if_fail (cell->data == NULL); cell->data = g_malloc0 (gfs_domain_variables_size (domain)); } else { FttCellChildren child; guint n; ftt_cell_children (cell, &child); for (n = 0; n < FTT_CELLS; n++) { g_return_if_fail (child.c[n]->data == NULL); child.c[n]->data = g_malloc0 (gfs_domain_variables_size (domain)); } if (GFS_CELL_IS_BOUNDARY (cell)) for (n = 0; n < FTT_CELLS; n++) child.c[n]->flags |= GFS_FLAG_BOUNDARY; } } /** * gfs_cell_reinit: * @cell: a #FttCell. * @domain: a #GfsDomain containing @cell. * * Re-allocates the memory for fluid state data associated to @cell. */ void gfs_cell_reinit (FttCell * cell, GfsDomain * domain) { g_return_if_fail (cell != NULL); g_return_if_fail (cell->data != NULL); g_return_if_fail (domain != NULL); cell->data = g_realloc (cell->data, gfs_domain_variables_size (domain)); } /** * gfs_cell_fine_init: * @parent: a #FttCell. * @domain: a #GfsDomain containing @parent. * * Initialises the children of @parent. */ void gfs_cell_fine_init (FttCell * parent, GfsDomain * domain) { GSList * i; g_return_if_fail (parent != NULL); g_return_if_fail (!FTT_CELL_IS_LEAF (parent)); g_return_if_fail (domain != NULL); gfs_cell_init (parent, domain); if (!GFS_CELL_IS_BOUNDARY (parent) && GFS_IS_MIXED (parent)) gfs_solid_coarse_fine (parent, domain); /* metric is used by gfs_cell_coarse_fine(), make sure it is initialised first */ i = domain->variables; while (i) { GfsVariable * v = i->data; if (GFS_IS_VARIABLE_METRIC (v)) (* v->coarse_fine) (parent, v); i = i->next; } /* initialise remaining variables */ i = domain->variables; while (i) { GfsVariable * v = i->data; if (!GFS_IS_VARIABLE_METRIC (v)) (* v->coarse_fine) (parent, v); i = i->next; } } /** * gfs_cell_copy: * @from: a #FttCell to copy attributes from. * @to: a #FttCell to copy attributes to. * @domain: the #GfsDomain containing @from. * * Copies the attributes of the fluid cell @from to the fluid cell @to. */ void gfs_cell_copy (const FttCell * from, FttCell * to, GfsDomain * domain) { GfsSolidVector * solid; GfsStateVector * froms, * tos; g_return_if_fail (from != NULL); g_return_if_fail (to != NULL); g_return_if_fail (from != to); g_return_if_fail (domain != NULL); froms = GFS_STATE (from); tos = GFS_STATE (to); if (froms != NULL) { if (tos == NULL) { gfs_cell_init (to, domain); tos = GFS_STATE (to); } solid = tos->solid; memcpy (to->data, from->data, gfs_domain_variables_size (domain)); if (froms->solid == NULL) { if (solid) g_free (solid); } else { tos->solid = solid; *solid = *(froms->solid); } } else if (tos != NULL) gfs_cell_cleanup (to, domain); } /** * gfs_cell_write: * @cell: a #FttCell. * @fp: a file pointer. * @variables: the list of #GfsVariable to be written. * * Writes in @fp the fluid data associated with @cell and described by * @variables. This function is generally used in association with * ftt_cell_write(). */ void gfs_cell_write (const FttCell * cell, FILE * fp, GSList * variables) { g_return_if_fail (cell != NULL); g_return_if_fail (fp != NULL); if (GFS_IS_MIXED (cell)) { GfsStateVector * s = GFS_STATE (cell); guint i; for (i = 0; i < FTT_NEIGHBORS; i++) fprintf (fp, " %g", s->solid->s[i]); fprintf (fp, " %g", s->solid->a); for (i = 0; i < FTT_DIMENSION; i++) fprintf (fp, " %g", (&s->solid->cm.x)[i]); } else fputs (" -1", fp); while (variables) { fprintf (fp, " %g", GFS_VALUE (cell, GFS_VARIABLE (variables->data))); variables = variables->next; } } /** * gfs_cell_read: * @cell: a #FttCell. * @fp: a #GtsFile. * @domain: the #GfsDomain containing @cell. * * Reads from @fp the fluid data associated with @cell and described * by @domain->variables_io. This function is generally used in * association with ftt_cell_read(). */ void gfs_cell_read (FttCell * cell, GtsFile * fp, GfsDomain * domain) { gdouble s0; GfsStateVector * s; GSList * i; g_return_if_fail (cell != NULL); g_return_if_fail (fp != NULL); g_return_if_fail (domain != NULL); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (solid->s[0])"); return; } s0 = atof (fp->token->str); if (s0 < 0. && s0 != -1.) { gts_file_error (fp, "solid->s[0] must be positive"); return; } gts_file_next_token (fp); gfs_cell_init (cell, domain); s = cell->data; if (s0 >= 0.) { guint i; s->solid = g_malloc0 (sizeof (GfsSolidVector)); s->solid->s[0] = s0; for (i = 1; i < FTT_NEIGHBORS; i++) { if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (solid->s[%d])", i); return; } s->solid->s[i] = atof (fp->token->str); gts_file_next_token (fp); } if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (solid->a)"); return; } s->solid->a = atof (fp->token->str); gts_file_next_token (fp); for (i = 0; i < FTT_DIMENSION; i++) { if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (solid->cm[%d])", i); return; } (&s->solid->cm.x)[i] = atof (fp->token->str); gts_file_next_token (fp); } } i = domain->variables_io; while (i) { GfsVariable * v = i->data; if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (%s)", v->name); return; } GFS_VALUE (cell, v) = atof (fp->token->str); gts_file_next_token (fp); i = i->next; } } /** * gfs_cell_write_binary: * @cell: a #FttCell. * @fp: a file pointer. * @variables: the list of #GfsVariable to be written. * * Writes in @fp the fluid data associated with @cell and described by * @variables. This function is generally used in association with * ftt_cell_write_binary(). */ void gfs_cell_write_binary (const FttCell * cell, FILE * fp, GSList * variables) { g_return_if_fail (cell != NULL); g_return_if_fail (fp != NULL); if (GFS_IS_MIXED (cell)) { GfsStateVector * s = GFS_STATE (cell); fwrite (s->solid->s, sizeof (gdouble), FTT_NEIGHBORS, fp); fwrite (&s->solid->a, sizeof (gdouble), 1, fp); fwrite (&s->solid->cm.x, sizeof (gdouble), FTT_DIMENSION, fp); fwrite (&s->solid->ca.x, sizeof (gdouble), FTT_DIMENSION, fp); } else { gdouble a = -1.; fwrite (&a, sizeof (gdouble), 1, fp); } while (variables) { gdouble a = GFS_VALUE (cell, GFS_VARIABLE (variables->data)); fwrite (&a, sizeof (gdouble), 1, fp); variables = variables->next; } } /** * gfs_cell_read_binary: * @cell: a #FttCell. * @fp: a #GtsFile. * @domain: the #GfsDomain containing @cell. * * Reads from @fp the fluid data associated with @cell and described * by @domain->variables_io. This function is generally used in * association with ftt_cell_read_binary(). */ void gfs_cell_read_binary (FttCell * cell, GtsFile * fp, GfsDomain * domain) { gdouble s0; GfsStateVector * s; GSList * i; g_return_if_fail (cell != NULL); g_return_if_fail (fp != NULL); g_return_if_fail (domain != NULL); if (gts_file_read (fp, &s0, sizeof (gdouble), 1) != 1) { gts_file_error (fp, "expecting a number (solid->s[0])"); return; } if (s0 < 0. && s0 != -1.) { gts_file_error (fp, "solid->s[0] must be positive"); return; } gfs_cell_init (cell, domain); s = cell->data; if (s0 >= 0.) { s->solid = g_malloc0 (sizeof (GfsSolidVector)); s->solid->s[0] = s0; if (gts_file_read (fp, &s->solid->s[1], sizeof (gdouble), FTT_NEIGHBORS - 1) != FTT_NEIGHBORS - 1) { gts_file_error (fp, "expecting numbers (solid->s[1..%d])", FTT_NEIGHBORS - 1); return; } if (gts_file_read (fp, &s->solid->a, sizeof (gdouble), 1) != 1) { gts_file_error (fp, "expecting a number (solid->a)"); return; } if (gts_file_read (fp, &s->solid->cm.x, sizeof (gdouble), FTT_DIMENSION) != FTT_DIMENSION) { gts_file_error (fp, "expecting numbers (solid->cm[0..%d])", FTT_DIMENSION - 1); return; } if (domain->version >= 90628 && gts_file_read (fp, &s->solid->ca.x, sizeof (gdouble), FTT_DIMENSION) != FTT_DIMENSION) { gts_file_error (fp, "expecting numbers (solid->ca[0..%d])", FTT_DIMENSION - 1); return; } } i = domain->variables_io; while (i) { GfsVariable * v = i->data; gdouble a; if (gts_file_read (fp, &a, sizeof (gdouble), 1) != 1) { gts_file_error (fp, "expecting a number (%s)", v->name); return; } GFS_VALUE (cell, v) = a; i = i->next; } } static void box_realloc (GfsBox * box, GfsDomain * domain) { FttDirection d; ftt_cell_traverse (box->root, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_reinit, domain); for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) ftt_cell_traverse (GFS_BOUNDARY (box->neighbor[d])->root, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_reinit, domain); } /** * gfs_domain_alloc: * @domain: a #GfsDomain. * * Returns: the index of a memory location newly allocated for each * cell of @domain. */ guint gfs_domain_alloc (GfsDomain * domain) { guint i = 0; g_return_val_if_fail (domain != NULL, -1); while (i < domain->allocated->len && g_array_index (domain->allocated, gboolean, i)) i++; if (i == domain->allocated->len) { g_array_set_size (domain->allocated, domain->allocated->len + 1); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_realloc, domain); } g_array_index (domain->allocated, gboolean, i) = TRUE; return i; } /** * gfs_domain_free: * @domain: a #GfsDomain. * @i: a memory location index previously allocated using gfs_domain_alloc(). * * Frees the memory location of @domain defined by @i. */ void gfs_domain_free (GfsDomain * domain, guint i) { g_return_if_fail (domain != NULL); g_return_if_fail (i < domain->allocated->len); g_return_if_fail (g_array_index (domain->allocated, gboolean, i)); g_array_index (domain->allocated, gboolean, i) = FALSE; } /** * gfs_domain_add_variable: * @domain: a #GfsDomain. * @name: the name of the variable to add or %NULL. * @description: the variable description or %NULL. * * Adds a new variable @name to @domain. * * Returns: the new variable or %NULL if a variable with the same name * already exists. */ GfsVariable * gfs_domain_add_variable (GfsDomain * domain, const gchar * name, const gchar * description) { GfsVariable * v; g_return_val_if_fail (domain != NULL, NULL); if ((v = gfs_variable_new (gfs_variable_class (), domain, name, description)) == NULL) return NULL; domain->variables = g_slist_append (domain->variables, v); return v; } /** * gfs_domain_get_or_add_variable: * @domain: a #GfsDomain. * @name: the name of the variable to add or get. * @description: the variable description or %NULL. * * Adds a new variable @name to @domain or returns the variable of * @domain with the same name. In either case the description of the * variable name is set to @description (if it is not %NULL). * * Returns: the new or already existing variable or %NULL if @name is a * reserved variable name. */ GfsVariable * gfs_domain_get_or_add_variable (GfsDomain * domain, const gchar * name, const gchar * description) { GfsVariable * v; g_return_val_if_fail (domain != NULL, NULL); g_return_val_if_fail (name != NULL, NULL); v = gfs_variable_from_name (domain->variables, name); if (v != NULL) { if (description) { if (v->description) g_free (v->description); v->description = g_strdup (description); } } else v = gfs_domain_add_variable (domain, name, description); return v; } typedef struct { gdouble * f, * m; GfsVariable * v; GfsFunction * weight; GfsSourceDiffusion * d; } Force; static void add_pressure_force (FttCell * cell, Force * f) { gdouble weight = f->weight ? gfs_function_value (f->weight, cell) : 1.; if (weight != 0.) { gdouble * r = &GFS_STATE (cell)->solid->ca.x; FttVector ff, mm; FttComponent c; gfs_pressure_force (cell, f->v, &ff); gts_vector_cross (&mm.x, r, &ff.x); for (c = 0; c < 3; c++) { f->f[c] += weight*(&ff.x)[c]; f->m[c] += weight*(&mm.x)[c]; } } } static GfsSourceDiffusion * source_diffusion (GfsVariable * v) { if (v->sources) { GSList * i = GTS_SLIST_CONTAINER (v->sources)->items; while (i) { GtsObject * o = i->data; if (GFS_IS_SOURCE_DIFFUSION (o)) return GFS_SOURCE_DIFFUSION (o); i = i->next; } } return NULL; } static void add_viscous_force (FttCell * cell, Force * f) { gdouble weight = f->weight ? gfs_function_value (f->weight, cell) : 1.; if (weight != 0.) { gdouble D; GfsSolidVector * s = GFS_STATE (cell)->solid; gdouble * r = &s->ca.x; FttVector ff, mm, n, g; FttComponent c; g_assert (((cell)->flags & GFS_FLAG_DIRICHLET) != 0); gfs_cell_dirichlet_gradient (cell, f->v->i, -1, s->fv, &g); D = - gfs_source_diffusion_cell (f->d, cell); n.x = s->s[1] - s->s[0]; n.y = s->s[3] - s->s[2]; #if FTT_2D ff.z = 0.; switch (f->v->component) { case FTT_X: ff.x = D*(2.*g.x*n.x + g.y*n.y); ff.y = D*g.y*n.x; break; case FTT_Y: ff.x = D*g.x*n.y; ff.y = D*(2.*g.y*n.y + g.x*n.x); break; default: g_assert_not_reached (); } #else /* 3D */ n.z = s->s[5] - s->s[4]; D *= ftt_cell_size (cell); switch (f->v->component) { case FTT_X: ff.x = D*(2.*g.x*n.x + g.y*n.y + g.z*n.z); ff.y = D*g.y*n.x; ff.z = D*g.z*n.x; break; case FTT_Y: ff.y = D*(2.*g.y*n.y + g.x*n.x + g.z*n.z); ff.x = D*g.x*n.y; ff.z = D*g.z*n.y; break; case FTT_Z: ff.z = D*(2.*g.z*n.z + g.x*n.x + g.y*n.y); ff.x = D*g.x*n.z; ff.y = D*g.y*n.z; break; default: g_assert_not_reached (); } #endif /* 3D */ gts_vector_cross (&mm.x, r, &ff.x); for (c = 0; c < 3; c++) { f->f[c] += weight*(&ff.x)[c]; f->m[c] += weight*(&mm.x)[c]; } } } /** * gfs_domain_solid_force: * @domain: a #GfsDomain. * @pf: a #FttVector. * @vf: a #FttVector. * @pm: a #FttVector. * @vm: a #FttVector. * @weight: an optional weight. * * Fills @pf and @vf (resp. @pm and @vm) with the components of the * net pressure and viscous forces (resp. pressure and viscous * moments) applied by the fluid on the solid surface embedded in * @domain. * * The reference point for the moments is the origin of the coordinate system. */ void gfs_domain_solid_force (GfsDomain * domain, FttVector * pf, FttVector * vf, FttVector * pm, FttVector * vm, GfsFunction * weight) { FttComponent c; GfsVariable ** v; g_return_if_fail (domain != NULL); g_return_if_fail (pf != NULL); g_return_if_fail (vf != NULL); g_return_if_fail (pm != NULL); g_return_if_fail (vm != NULL); if (GFS_IS_AXI (domain)) g_assert_not_implemented (); pf->x = pf->y = pf->z = 0.; pm->x = pm->y = pm->z = 0.; Force f; f.f = (gdouble *) pf; f.m = (gdouble *) pm; f.v = gfs_variable_from_name (domain->variables, "P"); f.weight = weight; if (weight) gfs_catch_floating_point_exceptions (); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) add_pressure_force, &f); if (weight) gfs_restore_fpe_for_function (weight); vf->x = vf->y = vf->z = 0.; vm->x = vm->y = vm->z = 0.; v = gfs_domain_velocity (domain); for (c = 0; c < FTT_DIMENSION; c++) { GfsSourceDiffusion * D = source_diffusion (v[c]); if (D) { gfs_domain_surface_bc (domain, v[c]); f.f = (gdouble *) vf; f.m = (gdouble *) vm; f.v = v[c]; f.d = D; f.weight = weight; if (weight) gfs_catch_floating_point_exceptions (); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) add_viscous_force, &f); if (weight) gfs_restore_fpe_for_function (weight); } } for (c = 0; c < 3; c++) { gfs_all_reduce (domain, (&pf->x)[c], MPI_DOUBLE, MPI_SUM); gfs_all_reduce (domain, (&vf->x)[c], MPI_DOUBLE, MPI_SUM); gfs_all_reduce (domain, (&pm->x)[c], MPI_DOUBLE, MPI_SUM); gfs_all_reduce (domain, (&vm->x)[c], MPI_DOUBLE, MPI_SUM); } } #define THRESHOLD 1e-4 static void tag_cell_fraction (GtsFifo * fifo, FttCell * cell, GfsVariable * c, GfsVariable * v, guint tag) { FttDirection d; FttCellNeighbors n; g_assert (FTT_CELL_IS_LEAF (cell)); ftt_cell_neighbors (cell, &n); for (d = 0; d < FTT_NEIGHBORS; d++) if (n.c[d] && GFS_VALUE (n.c[d], v) == 0. && GFS_VALUE (n.c[d], c) > THRESHOLD) { if (FTT_CELL_IS_LEAF (n.c[d])) { GFS_VALUE (n.c[d], v) = tag; gts_fifo_push (fifo, n.c[d]); } else { FttCellChildren child; FttDirection od = FTT_OPPOSITE_DIRECTION (d); guint i; ftt_cell_children_direction (n.c[d], od, &child); for (i = 0; i < FTT_CELLS/2; i++) if (child.c[i] && GFS_VALUE (child.c[i], v) == 0. && GFS_VALUE (child.c[i], c) > THRESHOLD) { GFS_VALUE (child.c[i], v) = tag; gts_fifo_push (fifo, child.c[i]); } } } } typedef struct { GfsVariable * v, * c; FttDirection d; guint * touch, * tags, tag, tagshift; } TagPar; static void tag_new_fraction_region (FttCell * cell, TagPar * p) { if (GFS_VALUE (cell, p->v) == 0. && GFS_VALUE (cell, p->c) > THRESHOLD) { GtsFifo * fifo = gts_fifo_new (); GFS_VALUE (cell, p->v) = ++p->tag; gts_fifo_push (fifo, cell); while ((cell = gts_fifo_pop (fifo))) tag_cell_fraction (fifo, cell, p->c, p->v, p->tag); gts_fifo_destroy (fifo); } } /* @touch defines the touching connectivity. This function updates @touch with the info that region tagged with @tag1 touches the region tagged with @tag2 */ static void touching_regions (guint tag1, guint tag2, guint * touch) { if (tag2 < tag1) { guint tmp = tag1; tag1 = tag2; tag2 = tmp; } else if (tag2 == tag1) return; guint ntag = touch[tag2]; if (ntag == tag1) return; if (ntag == 0) touch[tag2] = tag1; else { if (tag1 < ntag) touch[tag2] = tag1; touching_regions (tag1, ntag, touch); } } #ifdef HAVE_MPI static void reduce_touching_regions (void * in, void * inout, int * len, MPI_Datatype * type) { guint * ltouch = (guint *) in; guint * gtouch = (guint *) inout; guint i; for (i = 1; i < *len; i++) if (ltouch[i] > 0) touching_regions (i, ltouch[i], gtouch); } static void shift_tags (FttCell * cell, TagPar * p) { if (GFS_VALUE (cell, p->v) > 0.) GFS_VALUE (cell, p->v) += p->tagshift; } #endif /* HAVE_MPI */ static void unify_tag_range (GfsDomain * domain, TagPar * p) { #ifdef HAVE_MPI if (domain->pid >= 0) { int gsize; guint * tags; MPI_Comm_size (MPI_COMM_WORLD, &gsize); tags = g_malloc (sizeof (guint)*gsize); MPI_Allgather (&p->tag, 1, MPI_UNSIGNED, tags, 1, MPI_UNSIGNED, MPI_COMM_WORLD); /* tags[] now contains the p->tag value on each PE */ guint i; p->tag = 0; for (i = 0; i < gsize; i++) p->tag += tags[i]; /* shift tag values to get a single tag space across all PEs */ if (domain->pid > 0) { p->tagshift = 0; for (i = 0; i < domain->pid; i++) p->tagshift += tags[i]; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) shift_tags, p); } g_free (tags); } #endif /* HAVE_MPI */ } static void match_periodic_bc (FttCell * cell, TagPar * p) { guint tag = GFS_VALUE (cell, p->v); if (tag > 0) { FttCell * neighbor = ftt_cell_neighbor (cell, p->d); guint ntag = GFS_VALUE (neighbor, p->v); if (ntag > 0) touching_regions (tag, ntag, p->touch); } } static void match_box_bc (GfsBox * box, TagPar * p) { for (p->d = 0; p->d < FTT_NEIGHBORS; p->d++) if (GFS_IS_BOUNDARY_PERIODIC (box->neighbor[p->d])) ftt_cell_traverse_boundary (box->root, p->d, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) match_periodic_bc, p); } static void fix_touching (FttCell * cell, TagPar * p) { GFS_VALUE (cell, p->v) = p->tags[p->touch[(guint) GFS_VALUE (cell, p->v)]]; } /** * gfs_domain_tag_droplets: * @domain: a #GfsDomain. * @c: the volume fraction. * @tag: a #GfsVariable. * * Fills the @tag variable of the cells of @domain with the (strictly * positive) index of the droplet they belong to. The cells belonging * to the background phase have an index of zero. * * Note that the volume fraction @c must be defined on all levels. * * Returns: the number of droplets. */ guint gfs_domain_tag_droplets (GfsDomain * domain, GfsVariable * c, GfsVariable * tag) { g_return_val_if_fail (domain != NULL, 0); g_return_val_if_fail (c != NULL, 0); g_return_val_if_fail (tag != NULL, 0); TagPar p; gboolean touching = FALSE; p.c = c; p.v = tag; p.tag = 0; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_reset, tag); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) tag_new_fraction_region, &p); /* the rest of the algorithm deals with periodic and parallel BCs */ unify_tag_range (domain, &p); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, tag); p.touch = g_malloc0 ((p.tag + 1)*sizeof (guint)); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) match_box_bc, &p); #ifdef HAVE_MPI if (domain->pid >= 0) { guint * gtouch = g_malloc0 ((p.tag + 1)*sizeof (guint)); MPI_Op op; MPI_Op_create (reduce_touching_regions, FALSE, &op); MPI_Allreduce (p.touch, gtouch, p.tag + 1, MPI_UNSIGNED, op, MPI_COMM_WORLD); MPI_Op_free (&op); g_free (p.touch); p.touch = gtouch; } #endif /* HAVE_MPI */ /* find region with smallest tag touching each region i.e. reduces the chain of touching tags */ guint i, maxtag = 0; for (i = 1; i <= p.tag; i++) { guint touch = p.touch[i]; while (touch > 0) { p.touch[i] = touch; touch = p.touch[touch]; touching = TRUE; } if (p.touch[i] == 0 && i > maxtag) maxtag = i; } /* fix touching regions */ if (touching) { guint ntag = 0; /* fresh tag index */ p.tags = g_malloc ((maxtag + 1)*sizeof (guint)); p.tags[0] = 0; for (i = 1; i <= maxtag; i++) if (p.touch[i] == 0) { /* this region is not touching any other */ p.touch[i] = i; p.tags[i] = ++ntag; } maxtag = ntag; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) fix_touching, &p); g_free (p.tags); } g_free (p.touch); return maxtag; } typedef struct { GfsVariable * tag, * c; guint * sizes; guint n, min; gdouble val; } RemoveDropletsPar; static void compute_droplet_size (FttCell * cell, RemoveDropletsPar * p) { guint i = GFS_VALUE (cell, p->tag); if (i > 0) p->sizes[i - 1]++; } static void reset_small_fraction (FttCell * cell, RemoveDropletsPar * p) { guint i = GFS_VALUE (cell, p->tag); if (i > 0 && p->sizes[i - 1] < p->min) GFS_VALUE (cell, p->c) = p->val; } static int greater (const void * a, const void * b) { return *((guint *)a) > *((guint *)b) ? -1 : 1; } /** * gfs_domain_remove_droplets: * @domain: a #GfsDomain. * @c: a #GfsVariable. * @v: a #GfsVariable. * @min: the minimum size (in cells) of the droplets. * @val: the value used to reset @v. * * Resets the @v variable (using @val) of all the droplets (defined by * the @c variable) smaller than @min cells if @min is positive, or * all the droplets but the -$min largest ones if @min is negative. */ void gfs_domain_remove_droplets (GfsDomain * domain, GfsVariable * c, GfsVariable * v, gint min, gdouble val) { RemoveDropletsPar p; g_return_if_fail (domain != NULL); g_return_if_fail (c != NULL); g_return_if_fail (v != NULL); p.c = c; p.tag = gfs_temporary_variable (domain); p.n = gfs_domain_tag_droplets (domain, c, p.tag); if (p.n > 0 && -min < (gint) p.n) { p.sizes = g_malloc0 (p.n*sizeof (guint)); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_droplet_size, &p); #ifdef HAVE_MPI if (domain->pid >= 0) { guint * sizes = g_malloc0 (p.n*sizeof (guint)); MPI_Allreduce (p.sizes, sizes, p.n, MPI_UNSIGNED, MPI_SUM, MPI_COMM_WORLD); g_free (p.sizes); p.sizes = sizes; } #endif if (min >= 0) p.min = min; else { guint * tmp = g_malloc (p.n*sizeof (guint)); memcpy (tmp, p.sizes, p.n*sizeof (guint)); qsort (tmp, p.n, sizeof (guint), greater); g_assert (-1 - min < p.n); p.min = tmp[-1 - min]; g_free (tmp); } p.c = v; p.val = val; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) reset_small_fraction, &p); g_free (p.sizes); } gts_object_destroy (GTS_OBJECT (p.tag)); } static void tag_cell (GtsFifo * fifo, FttCell * cell, GfsVariable * v, guint tag, guint * size) { FttDirection d; FttCellNeighbors n; GfsSolidVector * solid = GFS_STATE (cell)->solid; g_assert (FTT_CELL_IS_LEAF (cell)); (*size)++; ftt_cell_neighbors (cell, &n); for (d = 0; d < FTT_NEIGHBORS; d++) if (n.c[d] && GFS_VALUE (n.c[d], v) == 0. && !GFS_CELL_IS_BOUNDARY (n.c[d]) && (!solid || solid->s[d] > 0.)) { if (FTT_CELL_IS_LEAF (n.c[d])) { GFS_VALUE (n.c[d], v) = tag; gts_fifo_push (fifo, n.c[d]); } else { FttCellChildren child; FttDirection od = FTT_OPPOSITE_DIRECTION (d); guint i, j; j = ftt_cell_children_direction (n.c[d], od, &child); for (i = 0; i < j; i++) if (child.c[i] && GFS_VALUE (child.c[i], v) == 0. && (!GFS_IS_MIXED (child.c[i]) || GFS_STATE (child.c[i])->solid->s[od] > 0.)) { GFS_VALUE (child.c[i], v) = tag; gts_fifo_push (fifo, child.c[i]); } } } } static void tag_new_region (FttCell * cell, gpointer * data) { GfsVariable * v = data[0]; if (GFS_VALUE (cell, v) == 0.) { GArray * sizes = data[1]; guint size = 0; GtsFifo * fifo = gts_fifo_new (); GFS_VALUE (cell, v) = sizes->len + 1; gts_fifo_push (fifo, cell); while ((cell = gts_fifo_pop (fifo))) tag_cell (fifo, cell, v, sizes->len + 1, &size); g_array_append_val (sizes, size); gts_fifo_destroy (fifo); } } static gboolean remove_small (FttCell * cell, gpointer * data) { if (FTT_CELL_IS_LEAF (cell)) { GArray * sizes = data[0]; GfsVariable * v = data[5]; guint * min = data[1], i = GFS_VALUE (cell, v) - 1.; g_assert (GFS_VALUE (cell, v) > 0.); if (g_array_index (sizes, guint, i) < *min) { if (FTT_CELL_IS_ROOT (cell)) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "root cell belongs to a pond"); else ftt_cell_destroy (cell, data[2], data[3]); return TRUE; } return FALSE; } else { FttCellChildren child; guint i; gboolean changed = FALSE; ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i] && remove_small (child.c[i], data)) changed = TRUE; if (FTT_CELL_IS_LEAF (cell)) { /* all the children have been destroyed i.e. the cell belongs to a small pond */ if (FTT_CELL_IS_ROOT (cell)) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "root cell belongs to a pond"); else ftt_cell_destroy (cell, data[2], data[3]); } else if (changed) gfs_cell_init_solid_fractions_from_children (cell); return changed; } } static void remove_small_box (GfsBox * box, gpointer * data) { gboolean * changed = data[4]; if (remove_small (box->root, data)) *changed = TRUE; } /** * gfs_domain_remove_ponds: * @domain: a #GfsDomain. * @min: the minimum size (in cells) of the ponds. * @cleanup: a #FttCellCleanupFunc or %NULL. * @data: user data to pass to @cleanup. * * Removes all the fluid "ponds" of @domain smaller than @min cells * if @min is positive, or all the ponds but the -@min largest ones * if @min is negative. * * If the domain is modified its boundaries are re"matched" using * gfs_domain_match(). */ void gfs_domain_remove_ponds (GfsDomain * domain, gint min, FttCellCleanupFunc cleanup, gpointer data) { GArray * sizes; gpointer dat[6]; guint minsize; gboolean changed = FALSE; GfsVariable * v; g_return_if_fail (domain != NULL); v = gfs_temporary_variable (domain); sizes = g_array_new (FALSE, FALSE, sizeof (guint)); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_reset, v); dat[0] = v; dat[1] = sizes; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) tag_new_region, dat); g_assert (sizes->len > 0); if (min >= 0) minsize = min; else if (-min >= sizes->len) minsize = 0; else { guint * tmp = g_malloc (sizes->len*sizeof (guint)); memcpy (tmp, sizes->data, sizes->len*sizeof (guint)); qsort (tmp, sizes->len, sizeof (guint), greater); minsize = tmp[-1 - min]; g_free (tmp); } dat[0] = sizes; dat[1] = &minsize; dat[2] = cleanup; dat[3] = data; dat[4] = &changed; dat[5] = v; gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) remove_small_box, dat); g_array_free (sizes, TRUE); gts_object_destroy (GTS_OBJECT (v)); if (changed) gfs_domain_match (domain); } static gboolean tag_speck (FttCell * cell, GfsVariable * v) { if (GFS_VALUE (cell, v) == 0.) { FttDirection d; FttCellNeighbors n; GfsSolidVector * solid = GFS_STATE (cell)->solid; g_assert (FTT_CELL_IS_LEAF (cell)); ftt_cell_neighbors (cell, &n); for (d = 0; d < FTT_NEIGHBORS; d++) if (!n.c[d]) return FALSE; GFS_VALUE (cell, v) = 1.; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_VALUE (n.c[d], v) == 0. && !GFS_CELL_IS_BOUNDARY (n.c[d]) && solid->s[d] > 0. && solid->s[d] < 1.) { g_assert (GFS_IS_MIXED (n.c[d])); if (FTT_CELL_IS_LEAF (n.c[d])) { if (!tag_speck (n.c[d], v)) { GFS_VALUE (cell, v) = 0.; return FALSE; } } else { FttCellChildren child; FttDirection od = FTT_OPPOSITE_DIRECTION (d); guint i; ftt_cell_children_direction (n.c[d], od, &child); for (i = 0; i < FTT_CELLS/2; i++) if (!child.c[i] || (GFS_VALUE (child.c[i], v) == 0 && GFS_IS_MIXED (child.c[i]) && !tag_speck (child.c[i], v))) { GFS_VALUE (cell, v) = 0.; return FALSE; } } } } return TRUE; } static void fill_speck (FttCell * cell, gpointer * data) { GfsVariable * v = data[0]; if (GFS_VALUE (cell, v) == 1.) { gboolean * changed = data[1]; g_free (GFS_STATE (cell)->solid); GFS_STATE (cell)->solid = NULL; *changed = TRUE; } } /** * gfs_domain_remove_specks: * @domain: a #GfsDomain. * * Removes all the solid "specks" of @domain. Solid specks are islands * which do not contain any empty cell. * * Note that the domain's boundaries are not "matched" automatically. */ void gfs_domain_remove_specks (GfsDomain * domain) { gboolean changed = FALSE; GfsVariable * v; gpointer data[2]; g_return_if_fail (domain != NULL); v = gfs_temporary_variable (domain); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, (FttCellTraverseFunc) gfs_cell_reset, v); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) tag_speck, v); data[0] = v; data[1] = &changed; gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) fill_speck, data); gts_object_destroy (GTS_OBJECT (v)); if (changed) gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_init_solid_fractions_from_children, NULL); } /** * gfs_domain_timer_start: * @domain: a #GfsDomain. * @name: the name of the timer. * * Starts timer @name of @domain. If @name does not exist it is * created first. */ void gfs_domain_timer_start (GfsDomain * domain, const gchar * name) { GfsTimer * t; g_return_if_fail (domain != NULL); g_return_if_fail (name != NULL); t = g_hash_table_lookup (domain->timers, name); if (t == NULL) { t = g_malloc (sizeof (GfsTimer)); gts_range_init (&t->r); g_hash_table_insert (domain->timers, g_strdup (name), t); } else g_return_if_fail (t->start < 0.); t->start = gfs_clock_elapsed (domain->timer); gfs_debug ("starting %s at %g", name, t->start); } /** * gfs_domain_timer_stop: * @domain: a #GfsDomain. * @name: the name of the timer. * * Stops timer @name of @domain. This function fails if @name is not a * timer of @domain. */ void gfs_domain_timer_stop (GfsDomain * domain, const gchar * name) { GfsTimer * t; gdouble end; g_return_if_fail (domain != NULL); end = gfs_clock_elapsed (domain->timer); g_return_if_fail (name != NULL); t = g_hash_table_lookup (domain->timers, name); g_return_if_fail (t != NULL); g_return_if_fail (t->start >= 0.); gts_range_add_value (&t->r, end - t->start); gts_range_update (&t->r); gfs_debug ("stopping %s: elapsed: %g", name, end - t->start); t->start = -1.; } static void cell_combine_traverse (FttCell * cell, FttCell * parent, FttCellCombineTraverseFunc inside, gpointer idata, FttCellTraverseFunc outside, gpointer odata) { FttCell * locate; FttVector p; ftt_cell_pos (cell, &p); locate = ftt_cell_locate (parent, p, ftt_cell_level (cell)); if (locate == NULL) { if (outside) ftt_cell_traverse (cell, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, outside, odata); } else { if (FTT_CELL_IS_LEAF (cell)) (* inside) (cell, locate, idata); else { FttCellChildren child; guint i; ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) cell_combine_traverse (child.c[i], locate, inside, idata, outside, odata); } } } static void box_combine_traverse (GfsBox * box, gpointer * data) { FttVector p; FttCell * locate; ftt_cell_pos (box->root, &p); locate = gfs_domain_locate (data[0], p, ftt_cell_level (box->root), NULL); if (locate == NULL) { if (data[3]) ftt_cell_traverse (box->root, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, data[3], data[4]); } else cell_combine_traverse (box->root, locate, data[1], data[2], data[3], data[4]); } /** * gfs_domain_combine_traverse: * @domain1: a #GfsDomain. * @domain2: another #GfsDomain. * @inside: function to call for each pair of cells. * @idata: user data to pass to @inside. * @outside: function to call for cells falling outside of @domain2 or * %NULL. * @odata: user data to pass to @outside. * * Calls @inside for each leaf cell of @domain1 contained in * @domain2. The second cell argument to @inside is set to the cell of * @domain2 containing the first cell argument. * * If @outside is not %NULL it is called for each leaf cell of * @domain1 which is outside of @domain2. */ void gfs_domain_combine_traverse (GfsDomain * domain1, GfsDomain * domain2, FttCellCombineTraverseFunc inside, gpointer idata, FttCellTraverseFunc outside, gpointer odata) { gpointer data[5]; g_return_if_fail (domain1 != NULL); g_return_if_fail (domain2 != NULL); g_return_if_fail (inside != NULL); data[0] = domain2; data[1] = inside; data[2] = idata; data[3] = outside; data[4] = odata; gts_container_foreach (GTS_CONTAINER (domain1), (GtsFunc) box_combine_traverse, data); } /** * gfs_domain_add_derived_variable: * @domain: a #GfsDomain. * @info: the #GfsDerivedVariableInfo. * * Adds a derived variable described by @info to @domain. * * Returns: the #GfsDerivedVariable if the variable was successfully * added to @domain or %NULL if a variable with the same name already * exists. */ GfsDerivedVariable * gfs_domain_add_derived_variable (GfsDomain * domain, GfsDerivedVariableInfo info) { GfsDerivedVariable * v; g_return_val_if_fail (domain != NULL, NULL); if (gfs_variable_from_name (domain->variables, info.name) || gfs_derived_variable_from_name (domain->derived_variables, info.name)) return NULL; v = GFS_DERIVED_VARIABLE (gts_object_new (GTS_OBJECT_CLASS (gfs_derived_variable_class ()))); v->name = g_strdup (info.name); v->description = info.description ? g_strdup (info.description) : NULL; v->func = info.func; v->data = info.data; domain->derived_variables = g_slist_prepend (domain->derived_variables, v); GTS_OBJECT (v)->reserved = domain; return v; } /** * gfs_domain_remove_derived_variable: * @domain: a #GfsDomain. * @name: the name of a #GfsDerivedVariable. * * Removes derived variable @name from @domain. * * Returns: %TRUE if the variable was successfully removed from @domain or * %FALSE if a derived variable with the this name does not exist. */ gboolean gfs_domain_remove_derived_variable (GfsDomain * domain, const gchar * name) { GSList * i; g_return_val_if_fail (domain != NULL, FALSE); g_return_val_if_fail (name != NULL, FALSE); i = domain->derived_variables; while (i) { GfsDerivedVariable * u = i->data; if (!strcmp (u->name, name)) { gts_object_destroy (GTS_OBJECT (u)); domain->derived_variables = g_slist_remove_link (domain->derived_variables, i); g_slist_free (i); return TRUE; } i = i->next; } return FALSE; } typedef struct { FttDirection d; GfsFunction * f; GfsVariable * v; } SumData; static gdouble product (FttCell * cell, GfsFunction * f) { GfsSolidVector * solid = GFS_STATE (cell)->solid; return ftt_cell_volume (cell)*(solid ? solid->a : 1.)*gfs_function_value (f, cell); } static void sum (FttCell * cell, SumData * data) { FttCell * n = ftt_cell_neighbor (cell, data->d); GfsSolidVector * solid = GFS_STATE (cell)->solid; if (!n || GFS_CELL_IS_BOUNDARY (n) || (solid && solid->s[data->d] == 0.)) { gdouble s = 0.; n = cell; do { /* fixme: does not work if the resolution varies along data->d */ g_assert (ftt_cell_level (n) == ftt_cell_level (cell)); s += product (n, data->f); GFS_VALUE (n, data->v) = s; n = ftt_cell_neighbor (n, FTT_OPPOSITE_DIRECTION (data->d)); } while (n && !GFS_CELL_IS_BOUNDARY (n) && (!GFS_IS_MIXED (n) || GFS_STATE (n)->solid->s[data->d] > 0.)); } } /** * gfs_domain_sum: * @domain: a #GfsDomain. * @d: the #FttDirection. * @f: a #GfsFunction. * @v: a #GfsVariable. * * Fills variable @v of each cell of @domain with the sum in direction * @d of the volume-weighted function @f. */ void gfs_domain_sum (GfsDomain * domain, FttDirection d, GfsFunction * f, GfsVariable * v) { SumData data; g_return_if_fail (domain != NULL); g_return_if_fail (d >= 0 && d < FTT_NEIGHBORS); g_return_if_fail (f != NULL); g_return_if_fail (v != NULL); data.d = d; data.f = f; data.v = v; gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) sum, &data); gfs_restore_fpe_for_function (f); } static void filter (FttCell * cell, gpointer * data) { FttDirection d[4*(FTT_DIMENSION - 1)][FTT_DIMENSION] = { #if FTT_2D {FTT_RIGHT, FTT_TOP}, {FTT_RIGHT, FTT_BOTTOM}, {FTT_LEFT, FTT_TOP}, {FTT_LEFT, FTT_BOTTOM} #else {FTT_RIGHT, FTT_TOP, FTT_FRONT}, {FTT_RIGHT, FTT_BOTTOM, FTT_FRONT}, {FTT_LEFT, FTT_TOP, FTT_FRONT}, {FTT_LEFT, FTT_BOTTOM, FTT_FRONT}, {FTT_RIGHT, FTT_TOP, FTT_BACK}, {FTT_RIGHT, FTT_BOTTOM, FTT_BACK}, {FTT_LEFT, FTT_TOP, FTT_BACK}, {FTT_LEFT, FTT_BOTTOM, FTT_BACK} #endif }; guint i; gdouble val = 0.; GfsVariable * a = data[0]; GfsVariable * b = data[1]; for (i = 0; i < 4*(FTT_DIMENSION - 1); i++) val += gfs_cell_corner_value (cell, d[i], a, -1); GFS_VALUE (cell, b) = val/(4*(FTT_DIMENSION - 1)); } /** * gfs_domain_filter: * @domain: a #GfsDomain. * @v: a #GfsVariable. * @fv: the filtered variable or %NULL. * * Apply a "corner-averaging" filter to variable @v on all leaf cells * of @domain. * * If @fv is %NULL, @v is replaced by its filtered value. */ void gfs_domain_filter (GfsDomain * domain, GfsVariable * v, GfsVariable * fv) { g_return_if_fail (domain != NULL); g_return_if_fail (v != NULL); gpointer data[2]; data[0] = v; data[1] = fv ? fv : gfs_temporary_variable (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) filter, data); if (fv == NULL) { gfs_variables_swap (data[0], data[1]); gts_object_destroy (data[1]); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, v); } else gfs_domain_copy_bc (domain, FTT_TRAVERSE_LEAFS, -1, v, fv); } struct _GfsRequest { void * buf; #ifdef HAVE_MPI MPI_Request request[2]; #endif }; /** * gfs_send_objects: * @list: a list of #GtsObject. * @dest: the rank of the destination PE. * * Sends the objects in @list to PE @dest of a parallel simulation. * This is a non-blocking operation which returns a handler which must * be cleared by calling gfs_wait(). * * Note that this functions assumes that the write() method of the * #GtsObject sent begins by writing the object class name. * * Returns: a #GfsRequest. */ GfsRequest * gfs_send_objects (GSList * list, int dest) { #ifdef HAVE_MPI char * buf; size_t len; FILE * fp = open_memstream (&buf, &len); if (fp == NULL) g_error ("gfs_send_objects(): could not open_memstream:\n%s", strerror (errno)); while (list) { GtsObject * object = list->data; g_assert (object->klass->write != NULL); (* object->klass->write) (object, fp); fputc ('\n', fp); list = list->next; } fclose (fp); GfsRequest * r = g_malloc0 (sizeof (GfsRequest)); long length = len; MPI_Isend (&length, 1, MPI_LONG, dest, 0, MPI_COMM_WORLD, &r->request[0]); gfs_debug ("sending %ld bytes to PE %d", length, dest); if (length > 0) { r->buf = buf; MPI_Isend (r->buf, length, MPI_BYTE, dest, 1, MPI_COMM_WORLD, &r->request[1]); } return r; #else /* not HAVE_MPI */ return NULL; #endif /* HAVE_MPI */ } /** * gfs_wait: * @r: a #GfsRequest. * * Waits for completion of and deallocates @r. */ void gfs_wait (GfsRequest * r) { #ifdef HAVE_MPI g_return_if_fail (r != NULL); MPI_Status status; MPI_Wait (&r->request[0], &status); if (r->buf) { MPI_Wait (&r->request[1], &status); free (r->buf); } g_free (r); #endif /* HAVE_MPI */ } /** * gfs_receive_objects: * @domain: a #GfsDomain. * @src: the rank of the source PE. * * Receives a list of #GtsObject from PE @src of a parallel simulation. * * Returns: a list of newly-allocated objects. */ GSList * gfs_receive_objects (GfsDomain * domain, int src) { g_return_val_if_fail (domain != NULL, NULL); #ifdef HAVE_MPI MPI_Status status; long length; MPI_Recv (&length, 1, MPI_LONG, src, 0, MPI_COMM_WORLD, &status); gfs_debug ("receiving %ld bytes from PE %d", length, src); if (length > 0) { char * buf = g_malloc (length); MPI_Recv (buf, length, MPI_BYTE, src, 1, MPI_COMM_WORLD, &status); GtsFile * fp = gts_file_new_from_buffer (buf, length); GSList * list = NULL; while (fp->type == GTS_STRING) { GtsObjectClass * klass = gfs_object_class_from_name (fp->token->str); if (klass == NULL) g_error ("gfs_receive_object():%d:%d: unknown class '%s'", fp->line, fp->pos, fp->token->str); GtsObject * object = gts_object_new (klass); gfs_object_simulation_set (object, domain); g_assert (klass->read); (* klass->read) (&object, fp); if (fp->type == GTS_ERROR) g_error ("gfs_receive_object():%d:%d: %s", fp->line, fp->pos, fp->error); list = g_slist_prepend (list, object); while (fp->type == '\n') gts_file_next_token (fp); } gts_file_destroy (fp); g_free (buf); return list; } #endif /* HAVE_MPI */ return NULL; } static void unlink_box (GfsBox * box, gint * dest) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOX (box->neighbor[d])) { GfsBox * nbox = GFS_BOX (box->neighbor[d]); FttDirection od = FTT_OPPOSITE_DIRECTION (d); nbox->neighbor[od] = NULL; gfs_boundary_mpi_new (gfs_boundary_mpi_class (), nbox, od, *dest, box->id); box->neighbor[d] = NULL; gfs_boundary_mpi_new (gfs_boundary_mpi_class (), box, d, nbox->pid, nbox->id); } else if (GFS_IS_BOUNDARY_PERIODIC (box->neighbor[d]) && !GFS_IS_BOUNDARY_MPI (box->neighbor[d])) { GfsBoundaryPeriodic * boundary = GFS_BOUNDARY_PERIODIC (box->neighbor[d]); g_assert (boundary->matching); GfsBoundaryPeriodic * matching = GFS_BOUNDARY_PERIODIC (boundary->matching->neighbor[boundary->d]); g_assert (GFS_IS_BOUNDARY_PERIODIC (matching)); GfsBox * nbox = GFS_BOUNDARY (matching)->box; FttDirection od = FTT_OPPOSITE_DIRECTION (d); g_assert (nbox->neighbor[od] == GTS_OBJECT (matching)); gts_object_destroy (GTS_OBJECT (matching)); nbox->neighbor[od] = NULL; gfs_boundary_mpi_new (gfs_boundary_mpi_class (), nbox, od, *dest, box->id); gts_object_destroy (GTS_OBJECT (box->neighbor[d])); box->neighbor[d] = NULL; gfs_boundary_mpi_new (gfs_boundary_mpi_class (), box, d, nbox->pid, nbox->id); } } static void setup_binary_IO (GfsDomain * domain) { /* make sure that all the variables are sent */ g_slist_free (domain->variables_io); domain->variables_io = NULL; GSList * i = domain->variables; while (i) { if (GFS_VARIABLE (i->data)->name) domain->variables_io = g_slist_append (domain->variables_io, i->data); i = i->next; } domain->binary = TRUE; } /** * gfs_send_boxes: * @domain: a #GfsDomain. * @boxes: a list of #GfsBox belonging to @domain. * @dest: the destination processor id. * * Send boxes to @dest and removes them from @domain. * This is a non-blocking operation. * * Returns: a #GfsRequest which must be cleared using gfs_wait(). */ GfsRequest * gfs_send_boxes (GfsDomain * domain, GSList * boxes, int dest) { g_return_val_if_fail (domain != NULL, NULL); g_return_val_if_fail (dest != domain->pid, NULL); g_slist_foreach (boxes, (GFunc) unlink_box, &dest); setup_binary_IO (domain); GfsRequest * r = gfs_send_objects (boxes, dest); g_slist_foreach (boxes, (GFunc) gts_object_destroy, NULL); gfs_locate_array_destroy (domain->array); domain->array = gfs_locate_array_new (domain); return r; } /** * gfs_receive_boxes: * @domain: a #GfsDomain. * @src: the source processor id. * * Receive boxes from @src and adds them to @domain. * * Returns: the list of boxes received. */ GSList * gfs_receive_boxes (GfsDomain * domain, int src) { g_return_val_if_fail (domain != NULL, NULL); g_return_val_if_fail (src != domain->pid, NULL); setup_binary_IO (domain); GSList * boxes = gfs_receive_objects (domain, src); if (boxes) { /* Create array for fast linking of ids to GfsBox pointers */ GPtrArray * ids = box_ids (domain); /* Convert internal GfsBoundaryMpi into graph edges */ g_slist_foreach (boxes, (GFunc) convert_boundary_mpi_into_edges, ids); g_ptr_array_free (ids, TRUE); /* Update GfsLocateArray */ gfs_locate_array_destroy (domain->array); domain->array = gfs_locate_array_new (domain); } return boxes; } /** * gfs_object_from_name: * @domain: a #GfsDomain. * @name: the name. * * Returns: the object of @domain called @name or %NULL. */ GtsObject * gfs_object_from_name (GfsDomain * domain, const gchar * name) { g_return_val_if_fail (domain != NULL, NULL); g_return_val_if_fail (name != NULL, NULL); return g_hash_table_lookup (domain->objects, name); } /** \endobject{GfsDomain} */ /** * Projection of a GfsDomain along a coordinate direction. * \beginobject{GfsDomainProjection} */ static void gfs_domain_projection_destroy (GtsObject * o) { GfsDomainProjection * p = GFS_DOMAIN_PROJECTION (o); p->domain->projections = g_slist_remove (p->domain->projections, p); (* GTS_OBJECT_CLASS (gfs_domain_projection_class ())->parent_class->destroy) (o); } static void gfs_domain_projection_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = gfs_domain_projection_destroy; } GfsDomainClass * gfs_domain_projection_class (void) { static GfsDomainClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsDomainProjection", sizeof (GfsDomainProjection), sizeof (GfsDomainClass), (GtsObjectClassInitFunc) gfs_domain_projection_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_domain_class ()), &info); } return klass; } typedef struct { GfsDomainProjection * proj; FttCell * cell; GfsVariable * maxlevel; } ProjData; static gboolean overlap (FttCell * cell1, gpointer data) { ProjData * r = data; FttCell * cell2 = r->cell; if (ftt_cell_level (cell1) < ftt_cell_level (cell2)) { FttCell * tmp = cell2; cell2 = cell1; cell1 = tmp; } FttVector p, q; ftt_cell_pos (cell1, &p); ftt_cell_pos (cell2, &q); gdouble h = ftt_cell_size (cell2)/2.; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) if (c != r->proj->c && ((&p.x)[c] < (&q.x)[c] - h || (&p.x)[c] > (&q.x)[c] + h)) return FALSE; return TRUE; } static void update_maxlevel (FttCell * cell, int * maxlevel) { int level = ftt_cell_level (cell); if (level > *maxlevel) *maxlevel = level; } static void project_refine (FttCell * cell, ProjData * p) { int level = ftt_cell_level (cell), maxlevel = 0; p->cell = cell; gfs_domain_cell_traverse_condition (p->proj->domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, level + 1, (FttCellTraverseFunc) update_maxlevel, &maxlevel, overlap, p); GFS_VALUE (cell, p->maxlevel) = maxlevel; if (FTT_CELL_IS_LEAF (cell)) { if (maxlevel > level) { ftt_cell_refine_single (cell, GFS_DOMAIN (p->proj)->cell_init, GFS_DOMAIN (p->proj)->cell_init_data); ftt_cell_flatten (cell, 2*p->proj->c, (FttCellCleanupFunc) gfs_cell_cleanup, p->proj); } } else ftt_cell_flatten (cell, 2*p->proj->c, (FttCellCleanupFunc) gfs_cell_cleanup, p->proj); } static gboolean finer (FttCell * cell, ProjData * p) { int level = ftt_cell_level (cell); g_assert (level >= GFS_VALUE (cell, p->maxlevel)); return (level > GFS_VALUE (cell, p->maxlevel)); } static void project_coarsen_box (GfsBox * box, ProjData * p) { ftt_cell_coarsen (box->root, (FttCellCoarsenFunc) finer, p, (FttCellCleanupFunc) gfs_cell_cleanup, p->proj); } /** * gfs_domain_projection_reshape: * @proj: a #GfsDomainProjection. * * Updates the mesh for projection @proj. */ void gfs_domain_projection_reshape (GfsDomainProjection * proj) { g_return_if_fail (proj != NULL); ProjData p = { proj }; GfsDomain * domain = GFS_DOMAIN (proj); p.maxlevel = gfs_temporary_variable (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) project_refine, &p); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) project_coarsen_box, &p); gts_object_destroy (GTS_OBJECT (p.maxlevel)); gfs_domain_reshape (domain, gfs_domain_depth (domain)); } /** * gfs_domain_projection_new: * @domain: a #GfsDomain. * @c: the component aligned with the projection direction. * * Returns: a new #GfsDomainProjection, projection of @domain along @c. */ GfsDomainProjection * gfs_domain_projection_new (GfsDomain * domain, FttComponent c) { g_return_val_if_fail (domain != NULL, NULL); g_return_val_if_fail (c < FTT_DIMENSION, NULL); /* clone domain */ char * buf; size_t len; FILE * f = open_memstream (&buf, &len); if (f == NULL) g_error ("gfs_domain_projection_new(): could not open_memstream:\n%s", strerror (errno)); gint depth = domain->max_depth_write; domain->max_depth_write = -2; /* no variables, no cells */ GtsObjectClass * klass = GTS_OBJECT (domain)->klass; GTS_OBJECT (domain)->klass = GTS_OBJECT_CLASS (gfs_domain_projection_class ()); gts_graph_write (GTS_GRAPH (domain), f); GTS_OBJECT (domain)->klass = klass; domain->max_depth_write = depth; fclose (f); GtsFile * fp = gts_file_new_from_buffer (buf, len); GfsDomainProjection * proj = GFS_DOMAIN_PROJECTION (gfs_domain_read (fp)); if (fp->type == GTS_ERROR) g_error ("gfs_domain_projection_new:\n%d:%d:%s", fp->line, fp->pos, fp->error); gts_file_destroy (fp); free (buf); gfs_clock_start (GFS_DOMAIN (proj)->timer); /* project domain */ proj->c = c; proj->domain = domain; domain->projections = g_slist_prepend (domain->projections, proj); gfs_domain_projection_reshape (proj); return proj; } typedef struct { GfsDomainProjection * proj; FttCell * cell; GfsProjectionTraverseFunc func; gpointer data; } ProjectionTraverse; static void apply_func (FttCell * cell, ProjectionTraverse * p) { (* p->func) (p->cell, cell, p->data); } static void traverse_overlapping (FttCell * cell, ProjectionTraverse * p) { p->cell = cell; gfs_domain_cell_traverse_condition (p->proj->domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, ftt_cell_level (cell), (FttCellTraverseFunc) apply_func, p, overlap, p); } /** * gfs_domain_projection_traverse: * @domain: a #GfsDomainProjection. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * For each cell of @domain defined by the traversal flags, traverses * all the overlapping leaf cells of its parent domain. */ void gfs_domain_projection_traverse (GfsDomainProjection * domain, FttTraverseType order, FttTraverseFlags flags, gint max_depth, GfsProjectionTraverseFunc func, gpointer data) { g_return_if_fail (domain != NULL); g_return_if_fail (func != NULL); ProjectionTraverse p = { domain, NULL, func, data }; gfs_domain_cell_traverse (GFS_DOMAIN (domain), order, flags, max_depth, (FttCellTraverseFunc) traverse_overlapping, &p); } /** \endobject{GfsDomainProjection} */ gerris-snapshot-131206/src/advection.h0000644000175100017510000000726212250371171014605 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __ADVECTION_H__ #define __ADVECTION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "domain.h" #include "poisson.h" #define GFS_SMALL 0.5 typedef enum { GFS_GODUNOV, GFS_NONE } GfsAdvectionScheme; typedef enum { GFS_CENTERED_UPWINDING, GFS_FACE_UPWINDING, GFS_NO_UPWINDING, } GfsUpwinding; typedef struct _GfsAdvectionParams GfsAdvectionParams; typedef void (* GfsFaceAdvectionFluxFunc) (const FttCellFace * face, const GfsAdvectionParams * par); typedef void (* GfsMergedTraverseFunc) (GSList * merged, gpointer data); struct _GfsAdvectionParams { gdouble cfl, dt; GfsVariable * v, * fv, ** u, ** g; GfsCenterGradient gradient; gboolean use_centered_velocity; GfsUpwinding upwinding; GfsFaceAdvectionFluxFunc flux; GfsAdvectionScheme scheme; gboolean average, gc; GfsMergedTraverseFunc update; guint moving_order; GfsFunction * sink[FTT_DIMENSION]; gboolean linear; void (* diffusion_solve) (GfsDomain * domain, GfsMultilevelParams * par, GfsVariable * v, GfsVariable * rhs, GfsVariable * rhoc, GfsVariable * axi); }; void gfs_advection_params_init (GfsAdvectionParams * par); void gfs_advection_params_write (GfsAdvectionParams * par, FILE * fp); void gfs_advection_params_read (GfsAdvectionParams * par, GtsFile * fp); void gfs_cell_advected_face_values (FttCell * cell, const GfsAdvectionParams * par); void gfs_cell_non_advected_face_values (FttCell * cell, const GfsAdvectionParams * par); gdouble gfs_face_upwinded_value (const FttCellFace * face, GfsUpwinding upwinding, GfsVariable ** u); void gfs_face_advection_flux (const FttCellFace * face, const GfsAdvectionParams * par); void gfs_face_velocity_advection_flux (const FttCellFace * face, const GfsAdvectionParams * par); void gfs_face_velocity_convective_flux (const FttCellFace * face, const GfsAdvectionParams * par); void gfs_face_advected_normal_velocity (const FttCellFace * face, const GfsAdvectionParams * par); void gfs_face_interpolated_normal_velocity (const FttCellFace * face, GfsVariable ** v); void gfs_face_reset_normal_velocity (const FttCellFace * face); gboolean gfs_cell_is_small (const FttCell * cell); void gfs_set_merged (GfsDomain * domain); void gfs_domain_traverse_merged (GfsDomain * domain, GfsMergedTraverseFunc func, gpointer data); void gfs_advection_update (GSList * merged, const GfsAdvectionParams * par); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __ADVECTION_H__ */ gerris-snapshot-131206/src/gfs.h0000644000175100017510000000276512250371171013413 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __GFS_H__ #define __GFS_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif /* GFS_H */ gerris-snapshot-131206/src/river.c0000644000175100017510000020212212250371171013743 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2008-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /* * Relevant references: * * Saint-Venant: * * [Audusse2005] E. Audusse and M.-O. Bristeau. A well-balanced, * positivity-preserving second-order scheme for shallow-water flows * on unstructured meshes, JCP, 2005, 311-333. * * [Popinet2011] S. Popinet. Quadtree-adaptive tsunami modelling. Ocean Dynamics * 61(9):1261-1285, 2011. * * [An2012] Hyunuk An, Soonyoung Yu. Well-balanced shallow water flow * simulation on quadtree cut cell grids. Advances in Water Resources * 39:60-70, 2012. * * Multi-layer Saint-Venant, constant density: * * [Audusse2011a] E. Audusse, M.-O. Bristeau, B. Perthame and J. Sainte-Marie. A * multilayer Saint-Venant system with mass exchanges for * shallow-water flows. Derivation and numerical * validation. Mathematical Modelling and Numerical analysis, 2011. * * Multi-layer Saint-Venant, variable density: * * [Audusse2011b] E. Audusse, M.-O. Bristeau, M. Pelanti, * J. Sainte-Marie. Approximation of the hydrostatic Navier-Stokes * system for density stratified flows by a multilayer model. Kinetic * interpretation and numerical solution, JCP, 2011. */ /*! \file * \brief GfsRiver model. */ #include #include "river.h" #include "adaptive.h" #include "source.h" #include "solid.h" #include "init.h" /* generalisation of the limited gradients (in fluid.c) to mixed cells */ static gdouble generic_limiter (gdouble r, gdouble beta) { gdouble v1 = MIN (r, beta), v2 = MIN (beta*r, 1.); v1 = MAX (0., v1); return MAX (v1, v2); } static gdouble minmod_limiter (gdouble r) { return generic_limiter (r, 1.); } static gdouble superbee_limiter (gdouble r) { return generic_limiter (r, 2.); } static gdouble sweby_limiter (gdouble r) { return generic_limiter (r, 1.5); } static gdouble center_limited_gradient_full (FttCell * cell, FttComponent c, guint v, gdouble (* limiter) (gdouble)) { FttDirection d = 2*c; FttCellFace f1; gdouble v0; f1 = gfs_cell_face (cell, FTT_OPPOSITE_DIRECTION (d)); v0 = GFS_VALUEI (cell, v); if (f1.neighbor) { FttCellFace f2 = gfs_cell_face (cell, d); if (f2.neighbor) { /* two neighbors */ gdouble x1 = 1., v1, x2 = 1., v2; v1 = gfs_neighbor_value (&f1, v, &x1); v2 = gfs_neighbor_value (&f2, v, &x2); gdouble g; if (v0 == v1) g = 0.; else g = (* limiter) ((v2 - v0)*x1/((v0 - v1)*x2))*(v0 - v1)/x1; return g; } } /* only one or no neighbors */ return 0.; } static gdouble center_limited_gradient (FttCell * cell, FttComponent c, guint v, gdouble (* limiter) (gdouble)) { FttDirection d = 2*c; FttCellFace f1, f2; f1 = gfs_cell_face (cell, FTT_OPPOSITE_DIRECTION (d)); f2 = gfs_cell_face (cell, d); if (!GFS_IS_MIXED (cell) && (!f1.neighbor || !GFS_IS_MIXED (f1.neighbor)) && (!f2.neighbor || !GFS_IS_MIXED (f2.neighbor))) return center_limited_gradient_full (cell, c, v, limiter); gdouble h = ftt_cell_size (cell); FttVector cm; gfs_cell_cm (cell, &cm); gdouble v0 = GFS_VALUEI (cell, v), g = 0.; if (f1.neighbor && f2.neighbor) { /* two neighbors */ gdouble x1, x2; gdouble v1 = gfs_neighbor_value (&f1, v, &x1); gdouble v2 = gfs_neighbor_value (&f2, v, &x2); if (v0 != v1) { FttVector cm1, cm2; gfs_cell_cm (f1.neighbor, &cm1); gfs_cell_cm (f2.neighbor, &cm2); /* fixme: this is not correct at coarse/fine boundaries */ x1 = ((&cm.x)[c] - (&cm1.x)[c])/h; x2 = ((&cm2.x)[c] - (&cm.x)[c])/h; g = (* limiter) ((v2 - v0)*x1/((v0 - v1)*x2))*(v0 - v1)/x1; } } /* mixed cells gradient following Causon et al. (2000) */ if (GFS_IS_MIXED (cell)) { GfsSolidVector * s = GFS_STATE (cell)->solid; FttVector ca = s->ca; FttVector n; gdouble nn; gfs_solid_normal (cell, &n); nn = sqrt (n.x*n.x + n.y*n.y); n.x /= nn; n.y /= nn; /* solid is on the right side of the cell */ if (s->s[2*c] < s->s[2*c + 1]) { if (f1.neighbor) { gdouble vr; /* fixme: this relies on specific indices for U and V. Not recommended. */ if (v == 2) vr = v0 - 2.*(n.x*GFS_VALUEI (cell, 2) + n.y*GFS_VALUEI (cell, 3))*n.x; else if (v == 3) vr = v0 - 2.*(n.x*GFS_VALUEI (cell, 2) + n.y*GFS_VALUEI (cell, 3))*n.y; else return s->s[2*c]*g/s->s[2*c + 1]; gdouble x1, v1 = gfs_neighbor_value (&f1, v, &x1); FttVector cm1; gfs_cell_cm (f1.neighbor, &cm1); /* fixme: this is not correct at coarse/fine boundaries */ x1 = ((&cm.x)[c] - (&cm1.x)[c])/h; gdouble x2 = 2.*((&ca.x)[c] - (&cm.x)[c])/h; gdouble gs = ((v0 - v1)*x2 == 0. || x1 == 0.) ? 0. : (* limiter) ((vr - v0)*x1/((v0 - v1)*x2))*(v0 - v1)/x1; return (s->s[2*c]*g + (s->s[2*c + 1] - s->s[2*c])*gs)/s->s[2*c + 1]; } else return 0; } /* solid is on the left side of the cell */ else if (s->s[2*c] > s->s[2*c + 1]) { if (f2.neighbor) { gdouble vr; /* fixme: this relies on specific indices for U and V. Not recommended. */ if (v == 2) vr = v0 - 2.*(n.x*GFS_VALUEI (cell, 2) + n.y*GFS_VALUEI (cell, 3))*n.x; else if (v == 3) vr = v0 - 2.*(n.x*GFS_VALUEI (cell, 2) + n.y*GFS_VALUEI (cell, 3))*n.y; else return s->s[2*c + 1]*g/s->s[2*c]; gdouble x2, v2 = gfs_neighbor_value (&f2, v, &x2); FttVector cm2; gfs_cell_cm (f2.neighbor, &cm2); /* fixme: this is not correct at coarse/fine boundaries */ gdouble x1 = 2.*((&cm.x)[c] - (&ca.x)[c])/h; x2 = ((&cm2.x)[c] - (&cm.x)[c])/h; gdouble gs = ((v0 - vr)*x2 == 0. || x1 == 0.) ? 0. : (* limiter) ((v2 - v0)*x1/((v0 - vr)*x2))*(v0 - vr)/x1; return (s->s[2*c + 1]*g + (s->s[2*c] - s->s[2*c + 1])*gs)/s->s[2*c]; } else return 0; } } return g; } static gdouble center_minmod_gradient (FttCell * cell, FttComponent c, guint v) { return center_limited_gradient (cell, c, v, minmod_limiter); } static gdouble center_superbee_gradient (FttCell * cell, FttComponent c, guint v) { return center_limited_gradient (cell, c, v, superbee_limiter); } static gdouble center_sweby_gradient (FttCell * cell, FttComponent c, guint v) { return center_limited_gradient (cell, c, v, sweby_limiter); } /** * Solves the Saint-Venant equations. * \beginobject{GfsRiver} */ #define H 0 #define U 1 #define V 2 #define HL 3 #define T(i,l) ((2 + (i))*r->nlayers + 1 + (l)) #define RHO(l) ((2 + r->nt)*r->nlayers + 3*(l) + 1) #define HP(l) ((2 + r->nt)*r->nlayers + 3*(l) + 2) #define HPT(l) ((2 + r->nt)*r->nlayers + 3*(l) + 3) #define ZB (r->nvar) static void flux (const gdouble * u, gdouble g, gdouble * f) { f[H] = u[H]*u[U]; /* h*u */ f[U] = u[H]*(u[U]*u[U] + g*u[H]/2.); /* h*(u*u + g*h/2) */ f[V] = u[H]*u[U]*u[V]; /* h*u*v */ } static gdouble min (gdouble a, gdouble b) { return a < b ? a : b; } static gdouble max (gdouble a, gdouble b) { return a > b ? a : b; } /* * uL: left state vector [h,u,v,zb]. * uR: right state vector. * g: acceleration of gravity. * f: flux vector. * * Fills @f by solving an approximate Riemann problem using the HLLC * scheme. See e.g. Liang, Borthwick, Stelling, IJNMF, 2004. */ static void riemann_hllc (const GfsRiver * r, const gdouble * uL, const gdouble * uR, gdouble * f) { gdouble cL = sqrt (r->g*uL[H]), cR = sqrt (r->g*uR[H]); gdouble ustar = (uL[U] + uR[U])/2. + cL - cR; gdouble cstar = (cL + cR)/2. + (uL[U] - uR[U])/4.; gdouble SL = uL[H] == 0. ? uR[U] - 2.*cR : min (uL[U] - cL, ustar - cstar); gdouble SR = uR[H] == 0. ? uL[U] + 2.*cL : max (uR[U] + cR, ustar + cstar); if (0. <= SL) flux (uL, r->g, f); else if (0. >= SR) flux (uR, r->g, f); else { gdouble fL[3], fR[3]; flux (uL, r->g, fL); flux (uR, r->g, fR); f[H] = (SR*fL[H] - SL*fR[H] + SL*SR*(uR[H] - uL[H]))/(SR - SL); f[U] = (SR*fL[U] - SL*fR[U] + SL*SR*(uR[H]*uR[U] - uL[H]*uL[U]))/(SR - SL); gdouble SM = ((SL*uR[H]*(uR[U] - SR) - SR*uL[H]*(uL[U] - SL))/ (uR[H]*(uR[U] - SR) - uL[H]*(uL[U] - SL))); if (SL <= 0. && 0. <= SM) f[V] = uL[V]*f[H]; else if (SM <= 0. && 0. <= SR) f[V] = uR[V]*f[H]; else { fprintf (stderr, "L: %g %g %g R: %g %g %g\n", uL[H], uL[U], uL[V], uR[H], uR[U], uR[V]); fprintf (stderr, "SL: %g SR: %g SM: %g\n", SL, SR, SM); g_assert_not_reached (); } } } /* * uL: left state vector [h,u,v,zb]. * uR: right state vector. * g: acceleration of gravity. * f: flux vector. * * Fills @f by solving an approximate Riemann problem using the kinetic * scheme. See Audusse2011b and Audusse2005. */ #define SQRT3 1.73205080756888 #define PARENT_TRACER(v) ((v)->vector[0]) /* hack: use vector[0] to store parent tracer */ static double density (GfsRiver * r, int l, const gdouble * u, FttCell * cell) { /* set parent tracer values to values for this level (stored in u) */ GfsSimulation * sim = GFS_SIMULATION (r); for (int i = 0; i < r->nt; i++) GFS_VALUE (cell, PARENT_TRACER (r->v[T(i,l)])) = u[T(i,l)]/sim->physical_params.L; /* evaluate density for this level */ r->l = l; return 1./gfs_function_value (sim->physical_params.alpha, cell); } static void hydrostatic_pressure (GfsRiver * r, double * u, FttCell * cell) { double pa = 0.; /* pressure at the top */ u[HPT(r->nlayers)] = pa; for (int l = r->nlayers - 1; l >= 0; l--) { u[RHO(l)] = density (r, l, u, cell); g_assert (u[RHO(l)] > 0.); double dp = r->g*u[RHO(l)]*u[H]*r->dz[l]; u[HP(l)] = pa + dp/2.; /* midlayer pressure i.e. p_\alpha */ pa += dp; u[HPT(l)] = pa; /* pressure at bottom of layer i.e. p_\alpha-1/2 */ /* Boussinesq */ u[RHO(l)] = 1.; } } static void riemann_kinetic (const GfsRiver * r, const gdouble * uL, const gdouble * uR, gdouble * f) { gdouble * dz = r->dz; f[H] = 0.; int l; for (l = 0; l < r->nlayers; l++) { gdouble ci, Mp, Mm, cig, fHl; if (uL[H] > r->dry) { if (r->variable_density) ci = sqrt (uL[HP(l)]/uL[RHO(l)]); else ci = sqrt (r->g*uL[H]/2.); Mp = MAX (uL[U + 2*l] + ci*SQRT3, 0.); Mm = MAX (uL[U + 2*l] - ci*SQRT3, 0.); if (r->variable_density) cig = dz[l]*uL[H]/(12.*SQRT3*ci); else cig = dz[l]*ci/(6.*r->g*SQRT3); fHl = cig*3.*(Mp*Mp - Mm*Mm); f[U + 3*l] = cig*2.*(Mp*Mp*Mp - Mm*Mm*Mm); } else fHl = f[U + 3*l] = 0.; if (uR[H] > r->dry) { if (r->variable_density) ci = sqrt (uR[HP(l)]/uR[RHO(l)]); else ci = sqrt (r->g*uR[H]/2.); Mp = MIN (uR[U + 2*l] + ci*SQRT3, 0.); Mm = MIN (uR[U + 2*l] - ci*SQRT3, 0.); if (r->variable_density) cig = dz[l]*uR[H]/(12.*SQRT3*ci); else cig = dz[l]*ci/(6.*r->g*SQRT3); fHl += cig*3.*(Mp*Mp - Mm*Mm); f[U + 3*l] += cig*2.*(Mp*Mp*Mp - Mm*Mm*Mm); } f[V + 3*l] = (fHl > 0. ? uL[V + 2*l] : uR[V + 2*l])*fHl; f[HL + 3*l] = fHl; f[H] += fHl; } } typedef struct { FttComponent u; gdouble du; FttComponent v; gdouble dv; } Sym; #define CFL_CLAMP(u, umax) (fabs (u) <= (umax) ? (u) : (u) > 0. ? (umax) : - (umax)) static double left (const GfsRiver * r, const FttCellFace * f, int i, double a) { return GFS_VALUE (f->cell, r->v1[i]) + a*GFS_VALUE (f->cell, r->dv[f->d/2][i]); } static double right (const GfsRiver * r, const FttCellFace * f, int i, double a) { return GFS_VALUE (f->neighbor, r->v1[i]) - a*GFS_VALUE (f->neighbor, r->dv[f->d/2][i]); } static void face_fluxes (FttCellFace * face, GfsRiver * r) { gdouble eta = GFS_VALUE (face->cell, r->v1[H]), etan = GFS_VALUE (face->neighbor, r->v1[H]); if (eta <= r->dry && etan <= r->dry) return; gdouble a = 1., b = 1.; if (GFS_IS_MIXED (face->cell)) { FttVector ca, cm; gfs_face_ca (face, &ca); gfs_cell_cm (face->cell, &cm); FttComponent c = face->d/2; a = fabs (2.*((&ca.x)[c] - (&cm.x)[c])/ftt_cell_size (face->cell)); } if (GFS_IS_MIXED (face->neighbor)) { FttVector ca, cm; gfs_face_ca (face, &ca); /* fixme?: this is not symmetric with the above for face->cell */ gfs_cell_cm (face->neighbor, &cm); FttComponent c = face->d/2; b = fabs (2.*((&ca.x)[c] - (&cm.x)[c])/ftt_cell_size (face->neighbor)); } static Sym sym[4] = { {U, 1., V, 1.}, {U, -1., V, -1.}, {V, 1., U, -1.}, {V, -1., U, 1.} }; Sym * s = &sym[face->d]; gdouble etaL = (eta <= r->dry ? 0. : left (r, face, H, a*s->du)); gdouble zbL = (GFS_VALUE (face->cell, r->zb) + a*s->du*GFS_VALUE (face->cell, r->dv[face->d/2][ZB])); gdouble zbR = (GFS_VALUE (face->neighbor, r->zb) - b*s->du*GFS_VALUE (face->neighbor, r->dv[face->d/2][ZB])); gdouble zbLR = MAX (zbL, zbR); gdouble * uL = r->uL, * uR = r->uR; int l; if (etaL > r->dry) for (l = 0; l < r->nlayers; l++) { gdouble etal = etaL*r->dz[l]; /* ul = uhl/hl */ uL[U + 2*l] = s->du*left (r, face, s->u + 2*l, a*s->du)/etal; /* vl = vhl/hl */ uL[V + 2*l] = s->dv*left (r, face, s->v + 2*l, a*s->du)/etal; /* tl = thl/hl */ for (int i = 0; i < r->nt; i++) uL[T(i,l)] = left (r, face, T(i,l), a*s->du)/etal; } else for (l = 0; l < r->nlayers; l++) { uL[U + 2*l] = uL[V + 2*l] = 0.; for (int i = 0; i < r->nt; i++) uL[T(i,l)] = 0.; /* fixme! */ } uL[H] = MAX (0., etaL + zbL - zbLR); gdouble etaR = (etan <= r->dry ? 0. : right (r, face, H, b*s->du)); /* fixme: this is only first-order accurate for fine/coarse */ if (etaR > r->dry) for (l = 0; l < r->nlayers; l++) { gdouble etal = etaR*r->dz[l]; /* ul = uhl/hl */ uR[U + 2*l] = s->du*right (r, face, s->u + 2*l, b*s->du)/etal; /* vl = vhl/hl */ uR[V + 2*l] = s->dv*right (r, face, s->v + 2*l, b*s->du)/etal; /* tl = thl/hl */ for (int i = 0; i < r->nt; i++) uR[T(i,l)] = right (r, face, T(i,l), a*s->du)/etal; } else for (l = 0; l < r->nlayers; l++) { uR[U + 2*l] = uR[V + 2*l] = 0.; for (int i = 0; i < r->nt; i++) uR[T(i,l)] = 0.; /* fixme! */ } uR[H] = MAX (0., etaR + zbR - zbLR); gdouble h = ftt_cell_size (face->cell); gdouble umax = GFS_SIMULATION (r)->advection_params.cfl*h/r->dt; for (l = 0; l < r->nlayers; l++) { uL[U + 2*l] = CFL_CLAMP (uL[U + 2*l], umax); uR[U + 2*l] = CFL_CLAMP (uR[U + 2*l], umax); uL[V + 2*l] = CFL_CLAMP (uL[V + 2*l], umax); uR[V + 2*l] = CFL_CLAMP (uR[V + 2*l], umax); } gdouble * u, * un; if (r->variable_density) { hydrostatic_pressure (r, uL, face->cell); hydrostatic_pressure (r, uR, face->cell); u = g_malloc ((r->nvar + 3*(r->nlayers + 1))*sizeof (gdouble)); un = g_malloc ((r->nvar + 3*(r->nlayers + 1))*sizeof (gdouble)); u[H] = eta; un[H] = etan; for (l = 0; l < r->nlayers; l++) { gdouble etal = eta*r->dz[l]; gdouble etanl = etan*r->dz[l]; for (int i = 0; i < r->nt; i++) { u[T(i,l)] = etal > 0. ? GFS_VALUE (face->cell, r->v1[T(i,l)])/etal : 0.; /* fixme! */ un[T(i,l)] = etanl > 0. ? GFS_VALUE (face->neighbor, r->v1[T(i,l)])/etanl : 0.; /* fixme! */ } } hydrostatic_pressure (r, u, face->cell); hydrostatic_pressure (r, un, face->cell); } else u = un = NULL; /* Riemann solver */ gdouble * f = r->f; (* r->scheme) (r, uL, uR, f); gdouble dt = gfs_domain_face_fraction (GFS_DOMAIN (r), face)*r->dt/h; GFS_VALUE (face->cell, r->flux[H]) -= dt*f[H]; gdouble nn = (ftt_face_type (face) == FTT_FINE_COARSE ? FTT_CELLS : 1.); GFS_VALUE (face->neighbor, r->flux[H]) += dt*f[H]/nn; gdouble zb = GFS_VALUE (face->cell, r->zb); gdouble zbn = GFS_VALUE (face->neighbor, r->zb); gdouble SbL0, SbR0, SbL, SbR; if (r->variable_density) { /* eq. (89) of Audusse2011b (corrected) */ SbL0 = (uL[HPT(0)] + u[HPT(0)])*(zbLR - zb)/2.; SbR0 = (uR[HPT(0)] + un[HPT(0)])*(zbLR - zbn)/2.; SbL = SbR = 0.; } else { /* constant density */ if (eta <= r->dry) eta = 0.; if (etan <= r->dry) etan = 0.; /* see Audusse2005, equations 4.4 and 5.13 */ /* Slope source term "S_{i,j,p}" and second-order correction for slope source term "Sc_{i,j,p}" of An2012, equations (11) and (12) */ SbL = r->g/2.*(uL[H]*uL[H] - etaL*etaL - (etaL + eta)*(zbL - zb)); SbR = r->g/2.*(uR[H]*uR[H] - etaR*etaR - (etaR + etan)*(zbR - zbn)); SbL0 = SbR0 = 0.; } gdouble G = 0.; for (l = 0; l < r->nlayers; l++) { gdouble dz = r->dz[l]; if (r->variable_density) { /* eq. (84-85) of Audusse2011b (corrected) */ zbLR += (uL[H] + uR[H])*dz/2.; zb += u[H]*dz; zbn += un[H]*dz; /* eq. (89) of Audusse2011b (corrected) */ gdouble SbL = (uL[HPT(l + 1)] + u[HPT(l + 1)])*(zbLR - zb)/2.; gdouble SbR = (uR[HPT(l + 1)] + un[HPT(l + 1)])*(zbLR - zbn)/2.; GFS_VALUE (face->cell, r->flux[s->u + 2*l]) -= s->du*dt*( f[U + 3*l] - SbL + SbL0 ); GFS_VALUE (face->neighbor, r->flux[s->u + 2*l]) += s->du*dt*( f[U + 3*l] - SbR + SbR0 )/nn; SbL0 = SbL; SbR0 = SbR; } else { /* constant density */ GFS_VALUE (face->cell, r->flux[s->u + 2*l]) -= s->du*dt*(f[U + 3*l] - dz*SbL); GFS_VALUE (face->neighbor, r->flux[s->u + 2*l]) += s->du*dt*(f[U + 3*l] - dz*SbR)/nn; } GFS_VALUE (face->cell, r->flux[s->v + 2*l]) -= s->dv*dt*f[V + 3*l]; GFS_VALUE (face->neighbor, r->flux[s->v + 2*l]) += s->dv*dt*f[V + 3*l]/nn; /* mass flux between layers */ G += dt*(f[HL + 3*l] - dz*f[H]); /* eq. (5.109) of Audusse2011a and (75) of Audusse2011b */ if (l < r->nlayers - 1) { GFS_VALUE (face->cell, r->massflux[l]) += G; GFS_VALUE (face->neighbor, r->massflux[l]) -= G/nn; } /* horizontal tracer advection */ for (int i = 0; i < r->nt; i++) { double flux = dt*f[HL + 3*l]; flux *= flux > 0. ? uL[T(i,l)] : uR[T(i,l)]; GFS_VALUE (face->cell, r->flux[T(i,l)]) -= flux; GFS_VALUE (face->neighbor, r->flux[T(i,l)]) += flux/nn; } } if (r->variable_density) { g_free (u); g_free (un); } } static gdouble limited_gradient (const FttCell * cell, const GfsRiver * r, int i0, int i1, int i2, int l, gdouble (* limiter) (gdouble)) { if (l < 1 || l > r->nlayers - 2) return 0.; gdouble v0 = GFS_VALUE (cell, r->v1[i0]); gdouble v1 = GFS_VALUE (cell, r->v1[i1]); if (v0 == v1) return 0.; gdouble x1 = (r->dz[l] + r->dz[l - 1])/(2.*r->dz[l]); gdouble v2 = GFS_VALUE (cell, r->v1[i2]); gdouble x2 = (r->dz[l] + r->dz[l + 1])/(2.*r->dz[l]); return (* limiter) ((v2 - v0)*x1/((v0 - v1)*x2))*(v0 - v1)/x1; } /* fixme: minmod limiter for vertical advection may be too diffusive */ #define limited_gradient_u(l) limited_gradient(cell, r, c+2*(l), c+2*((l)-1), c+2*((l)+1), l, \ minmod_limiter) #define limited_gradient_t(l) limited_gradient(cell, r, T(i,l), T(i,(l)-1), T(i,(l)+1), l, \ minmod_limiter) static void vertical_advection (FttCell * cell, const GfsRiver * r) { double eta = GFS_VALUE (cell, r->v1[H]); if (eta > r->dry) for (int l = 0; l < r->nlayers - 1; l++) { double dz = eta*(r->dz[l] + r->dz[l + 1])/2.; double G = GFS_VALUE (cell, r->massflux[l])/dz; for (FttComponent c = U; c <= V; c++) { double flux = G < 0. ? G*(GFS_VALUE (cell, r->v1[c + 2*l]) + limited_gradient_u (l)/2.) : G*(GFS_VALUE (cell, r->v1[c + 2*(l + 1)]) - limited_gradient_u (l + 1)/2.); GFS_VALUE (cell, r->flux[c + 2*l]) += flux; GFS_VALUE (cell, r->flux[c + 2*(l + 1)]) -= flux; } for (int i = 0; i < r->nt; i++) { double flux = G < 0. ? G*(GFS_VALUE (cell, r->v1[T(i,l)]) + limited_gradient_t (l)/2.) : G*(GFS_VALUE (cell, r->v1[T(i,l + 1)]) - limited_gradient_t (l + 1)/2.); GFS_VALUE (cell, r->flux[T(i,l)]) += flux; GFS_VALUE (cell, r->flux[T(i,l + 1)]) -= flux; } } } static void reset_fluxes (FttCell * cell, const GfsRiver * r) { int i; for (i = 0; i < r->nvar; i++) GFS_VALUE (cell, r->flux[i]) = 0.; for (i = 0; i < r->nlayers - 1; i++) GFS_VALUE (cell, r->massflux[i]) = 0.; } static void solid_boundary_fluxes (FttCell * cell, GfsRiver * r) { gdouble h = ftt_cell_size (cell); GfsSolidVector * s = GFS_STATE (cell)->solid; FttVector cm; gdouble hh = MAX (GFS_VALUE (cell, r->v1[H]), 0.); gfs_cell_cm (cell, &cm); gdouble hs = hh + 2.*((s->ca.x - cm.x)*GFS_VALUE (cell, r->dv[0][H]) + (s->ca.y - cm.y)*GFS_VALUE (cell, r->dv[1][H]))/h; gdouble zbs = 2.*((s->ca.x - cm.x)*GFS_VALUE (cell, r->dv[0][ZB]) + (s->ca.y - cm.y)*GFS_VALUE (cell, r->dv[1][ZB]))/h; gdouble hszbs = r->dt/h*r->g/2.*( /* the normal component of the velocity is zero at the solid boundary. */ hs*hs + /* Second-order correction for slope source term ("Sc_{i,j,s}" of An2012, equation (27) */ (hs + hh)*zbs); FttVector n; gfs_solid_normal (cell, &n); GFS_VALUE (cell, r->flux[U]) -= n.x*hszbs; GFS_VALUE (cell, r->flux[V]) -= n.y*hszbs; } /* Metric source terms (see doc/figures/lonlat.tm) */ static void metric_sources (FttCell * cell, GfsRiver * r) { if (GFS_VALUE (cell, r->v1[H]) > r->dry) { /* fixme: this will probably not work when combined with solids */ GfsDomain * domain = GFS_DOMAIN (r); gdouble fm[FTT_NEIGHBORS], cm; FttCellFace face = { cell }; for (face.d = 0; face.d < FTT_NEIGHBORS; face.d++) fm[face.d] = (* domain->face_metric) (domain, &face); gdouble dh_dl = fm[FTT_RIGHT] - fm[FTT_LEFT]; gdouble dh_dt = fm[FTT_TOP] - fm[FTT_BOTTOM]; cm = (* domain->cell_metric) (domain, cell)*ftt_cell_size (cell); gdouble dldh = cm*GFS_SIMULATION (r)->physical_params.L; gdouble phiu = GFS_VALUE (cell, r->v1[U]), phiv = GFS_VALUE (cell, r->v1[V]); gdouble fG = phiv*dh_dl - phiu*dh_dt; gdouble g = GFS_SIMULATION (r)->physical_params.g; gdouble eta = GFS_VALUE (cell, r->v1[H]); GFS_VALUE (cell, r->v[U]) += r->dt*(g*eta*eta/2.*dh_dl + fG*phiv)/dldh; GFS_VALUE (cell, r->v[V]) += r->dt*(g*eta*eta/2.*dh_dt - fG*phiu)/dldh; } } typedef struct { double * a; /* sub-diagonal indexed from 1..n-1 */ double * b; /* diagonal (destroyed) */ double * c; /* sup-diagonal indexed from 0..n-2 */ double * v; /* rhs (destroyed) */ int n; } Tridiagonal; static void tridiagonal_init (Tridiagonal * t, int n) { t->a = g_malloc (sizeof (double)*n); t->b = g_malloc (sizeof (double)*n); t->c = g_malloc (sizeof (double)*(n - 1)); t->v = g_malloc (sizeof (double)*n); t->n = n; } static void tridiagonal_solve (Tridiagonal * t, double * x) { int n = t->n; double * a = t->a, * b = t->b, * c = t->c, * v = t->v; for (int i = 1; i < n; i++) { double m = a[i]/b[i-1]; b[i] -= m*c[i-1]; v[i] -= m*v[i-1]; } x[n-1] = v[n-1]/b[n-1]; for (int i = n - 2; i >= 0; i--) x[i] = (v[i] - c[i]*x[i+1])/b[i]; } static void tridiagonal_free (Tridiagonal * t) { g_free (t->a); g_free (t->b); g_free (t->c); g_free (t->v); } /* see doc/figures/diffusion.tm */ static void vertical_diffusion (double * u, const double * mu, const double * dz, int N, double dt, double dut, double lambdab, double ub, double k, Tridiagonal * t, /* working array of size N */ double * a) { if (k > 0.) { /* use Navier coefficient k rather than slip length */ lambdab = mu[0]/k; ub = 0.; } for (int l = 0; l < N - 1; l++) a[l] = dt*(mu[l] + mu[l+1])/(dz[l]*(dz[l] + dz[l+1])); a[N-1] = dt*mu[N-1]/(dz[N-1]*dz[N-1]); double am = dt*mu[0]/(dz[0]*dz[0]); t->b[0] = 1. + a[0] + (1. - (2.*lambdab - dz[0])/(2.*lambdab + dz[0]))*am; t->c[0] = - a[0]; t->v[0] = u[0] + 2.*dz[0]/(2.*lambdab + dz[0])*ub*am; for (int l = 1; l < N - 1; l++) { t->a[l] = - a[l-1]; t->b[l] = 1. + a[l] + a[l-1]; t->c[l] = - a[l]; t->v[l] = u[l]; } t->a[N-1] = - a[N-2]; t->b[N-1] = 1. + a[N-2]; t->v[N-1] = u[N-1] + dut*dz[N-1]*a[N-1]; tridiagonal_solve (t, u); } /* bottom friction for a single layer. For more than one layer, bottom friction is a boundary condition for vertical_diffusion() above */ static void bottom_friction (FttCell * cell, GfsRiver * r) { double h = GFS_VALUE (cell, r->v[H]); if (h > r->dry) { double a = 1. + gfs_function_value (r->k, cell)/h*r->dt; GFS_VALUE (cell, r->v[U]) /= a; GFS_VALUE (cell, r->v[V]) /= a; } else GFS_VALUE (cell, r->v[U]) = GFS_VALUE (cell, r->v[V]) = 0.; } static void domain_vertical_diffusion (GfsRiver * r, double dt) { Tridiagonal tri; int n = r->nlayers; tridiagonal_init (&tri, n); double * a = g_malloc (n*sizeof (double)); double * u = g_malloc (n*sizeof (double)); double * mu = g_malloc (n*sizeof (double)); double * dz = g_malloc (n*sizeof (double)); FttCellTraverse * t = gfs_domain_cell_traverse_new (GFS_DOMAIN (r), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1); FttCell * cell; while ((cell = ftt_cell_traverse_next (t))) { double h = GFS_VALUE (cell, r->v[H]); if (h > r->dry) { double nu = gfs_function_value (r->nu, cell); for (int l = 0; l < n; l++) { mu[l] = nu; dz[l] = r->dz[l]*h; u[l] = GFS_VALUE (cell, r->v[U + 2*l])/dz[l]; } double lambdab = 0., ub = 0., dut = r->dut ? gfs_function_value (r->dut, cell) : 0.; double k = r->k ? gfs_function_value (r->k, cell) : 0.; vertical_diffusion (u, mu, dz, n, dt, dut, lambdab, ub, k, &tri, a); for (int l = 0; l < n; l++) { GFS_VALUE (cell, r->v[U + 2*l]) = u[l]*dz[l]; u[l] = GFS_VALUE (cell, r->v[V + 2*l])/dz[l]; } dut = 0.; vertical_diffusion (u, mu, dz, n, dt, dut, lambdab, ub, k, &tri, a); for (int l = 0; l < n; l++) GFS_VALUE (cell, r->v[V + 2*l]) = u[l]*dz[l]; } else for (int l = 0; l < n; l++) { GFS_VALUE (cell, r->v[U + 2*l]) = 0.; GFS_VALUE (cell, r->v[V + 2*l]) = 0.; } } ftt_cell_traverse_destroy (t); g_free (a); g_free (u); g_free (mu); g_free (dz); tridiagonal_free (&tri); } static void advance (GfsRiver * r, gdouble dt) { GfsDomain * domain = GFS_DOMAIN (r); guint i; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) reset_fluxes, r); r->dt = dt; gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) face_fluxes, r); if (r->nlayers > 1) gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) vertical_advection, r); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) solid_boundary_fluxes, domain); if (domain->cell_metric) gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) metric_sources, r); for (i = 0; i < r->nvar; i++) { GfsAdvectionParams par; par.v = r->v[i]; par.fv = r->flux[i]; par.average = FALSE; gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) gfs_advection_update, &par); gfs_domain_variable_centered_sources (domain, par.v, par.v, dt); } if (r->nlayers > 1) { /* also add "global" sources specified through U,V to momentum on each layer */ GfsVariable ** u = gfs_domain_velocity (domain); for (int l = 0; l < r->nlayers; l++) for (FttComponent c = 0; c < 2; c++) gfs_domain_variable_centered_sources (domain, u[c], r->v[U + c + 2*l], dt); /* and "global" sources on tracers */ for (int i = 0; i < r->nt; i++) for (r->l = 0; r->l < r->nlayers; r->l++) gfs_domain_variable_centered_sources (domain, PARENT_TRACER(r->v[T(i,r->l)]), r->v[T(i,r->l)], dt); } gfs_source_coriolis_implicit (domain, dt); if (r->nu) domain_vertical_diffusion (r, dt); else if (r->k) { g_assert (r->nlayers == 1); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) bottom_friction, r); } for (i = 0; i < r->nvar; i++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, r->v[i]); } static void copy (FttCell * cell, const GfsRiver * r) { guint v; for (v = 0; v < r->nvar; v++) GFS_VALUE (cell, r->v1[v]) = GFS_VALUE (cell, r->v[v]); } static void cell_H (FttCell * cell, const GfsRiver * r) { GFS_VALUE (cell, r->h) = GFS_VALUE (cell, r->zb) + GFS_VALUE (cell, r->v[H]); gdouble u = 0., v = 0.; int l; for (l = 0; l < r->nlayers; l++) { u += GFS_VALUE (cell, r->v[U + 2*l]); v += GFS_VALUE (cell, r->v[V + 2*l]); } GFS_VALUE (cell, r->qx) = u; GFS_VALUE (cell, r->qy) = v; } static void cell_gradients (FttCell * cell, const GfsRiver * r) { FttComponent c; guint v; if (GFS_VALUE (cell, r->v[H]) <= r->dry) { for (c = 0; c < FTT_DIMENSION; c++) { for (v = 0; v < r->nvar; v++) GFS_VALUE (cell, r->dv[c][v]) = 0.; GFS_VALUE (cell, r->dv[c][ZB]) = 0.; } } else { /* wet */ for (c = 0; c < FTT_DIMENSION; c++) { for (v = 0; v < r->nvar; v++) GFS_VALUE (cell, r->dv[c][v]) = (* r->gradient) (cell, c, r->v[v]->i)/2.; /* recontruct Zb + eta rather than Zb: see Theorem 3.1 of Audusse et al, 2004 */ GFS_VALUE (cell, r->dv[c][ZB]) = (* r->gradient) (cell, c, r->h->i)/2. - GFS_VALUE (cell, r->dv[c][H]); } } } typedef struct { FttCellTraverseFunc func; FttDirection d; gpointer data; } FaceTraverseData; static void face_traverse (FttCell * cell, FaceTraverseData * p) { FttCell * neighbor = ftt_cell_neighbor (cell, p->d); if (neighbor) (* p->func) (neighbor, p->data); } static void domain_traverse_all_leaves (GfsDomain * domain, FttCellTraverseFunc func, gpointer data) { FaceTraverseData p; gfs_domain_traverse_leaves (domain, func, data); /* now traverses boundary cells */ p.func = func; p.data = data; for (p.d = 0; p.d < FTT_NEIGHBORS; p.d++) gfs_domain_cell_traverse_boundary (domain, p.d, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) face_traverse, &p); } static void dirichlet_p (FttCellFace * f, GfsBc * b) { GFS_VALUE (f->cell, b->v) = gfs_function_face_value (GFS_BC_VALUE (b)->val, f); } static void fix_box_bc (GfsBox * box, GfsRiver * r) { for (FttDirection d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); GfsBc * bc = gfs_boundary_lookup_bc (b, r->v[0]); if (bc && GFS_IS_BC_DIRICHLET (bc)) { /* use first-order Dirichlet BC for P in GfsRiver */ bc->bc = (FttFaceTraverseFunc) dirichlet_p; } if (r->nlayers > 1) { GfsBc * bc = g_hash_table_lookup (b->bc, r->qx->name); if (bc) { /* applies explicit BC on global flux on all layer fluxes which have no explicit BCs */ for (int l = 0; l < r->nlayers; l++) { GfsVariable * v = r->v[U + 2*l]; if (!g_hash_table_lookup (b->bc, v->name)) g_hash_table_insert (b->bc, v->name, bc); } } } } } static void river_run (GfsSimulation * sim) { GfsDomain * domain = GFS_DOMAIN (sim); GfsRiver * r = GFS_RIVER (sim); r->v[ZB] = r->zb = gfs_variable_from_name (domain->variables, "Zb"); r->g = sim->physical_params.g/sim->physical_params.L; r->variable_density = (r->nlayers > 1 && sim->physical_params.alpha != NULL); r->gradient = sim->advection_params.gradient; if (r->gradient == gfs_center_minmod_gradient) r->gradient = center_minmod_gradient; else if (r->gradient == gfs_center_superbee_gradient) r->gradient = center_superbee_gradient; else if (r->gradient == gfs_center_sweby_gradient) r->gradient = center_sweby_gradient; gts_container_foreach (GTS_CONTAINER (r), (GtsFunc) fix_box_bc, r); gfs_simulation_refine (sim); gfs_simulation_init (sim); gfs_simulation_set_timestep (sim); domain_traverse_all_leaves (domain, (FttCellTraverseFunc) cell_H, r); while (sim->time.t < sim->time.end && sim->time.i < sim->time.iend) { gdouble tstart = gfs_clock_elapsed (domain->timer); /* events */ gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); /* update H */ domain_traverse_all_leaves (domain, (FttCellTraverseFunc) cell_H, r); /* gradients */ gfs_domain_timer_start (domain, "gradients"); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) cell_gradients, r); FttComponent c; guint v; for (c = 0; c < FTT_DIMENSION; c++) for (v = 0; v < r->nvar + 1; v++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, r->dv[c][v]); gfs_domain_timer_stop (domain, "gradients"); /* predictor */ domain_traverse_all_leaves (domain, (FttCellTraverseFunc) copy, r); if (r->time_order == 2) { gfs_domain_timer_start (domain, "predictor"); for (v = 0; v < r->nvar; v++) gfs_variables_swap (r->v[v], r->v1[v]); advance (r, sim->advection_params.dt/2.); for (v = 0; v < r->nvar; v++) gfs_variables_swap (r->v[v], r->v1[v]); gfs_domain_timer_stop (domain, "predictor"); } /* corrector */ gfs_domain_timer_start (domain, "corrector"); advance (r, sim->advection_params.dt); gfs_domain_timer_stop (domain, "corrector"); /* update H */ domain_traverse_all_leaves (domain, (FttCellTraverseFunc) cell_H, r); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); gfs_simulation_adapt (sim); sim->time.t = sim->tnext; sim->time.i++; gfs_simulation_set_timestep (sim); gts_range_add_value (&domain->timestep, gfs_clock_elapsed (domain->timer) - tstart); gts_range_update (&domain->timestep); gts_range_add_value (&domain->size, gfs_domain_size (domain, FTT_TRAVERSE_LEAFS, -1)); gts_range_update (&domain->size); } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL); } static gdouble maximum_face_metric (FttCell * cell, GfsDomain * domain, FttComponent c) { if (domain->face_metric) { FttCellFace f; f.cell = cell; f.d = 2*c; gdouble fm1 = (* domain->face_metric) (domain, &f); f.d = 2*c + 1; gdouble fm2 = (* domain->face_metric) (domain, &f); return MAX (fm1, fm2); } else return 1.; } static void minimum_cfl (FttCell * cell, GfsRiver * r) { gdouble h = GFS_VALUE (cell, r->v[H]); if (h > r->dry) { GfsDomain * domain = GFS_DOMAIN (r); gdouble vol = ftt_cell_size (cell); if (domain->cell_metric) vol *= (* domain->cell_metric) (domain, cell); gdouble cg = sqrt (r->g*h); FttComponent c; for (c = FTT_X; c <= FTT_Y; c++) { gdouble fm = maximum_face_metric (cell, domain, c); int l; for (l = 0; l < r->nlayers; l++) { gdouble uh = fabs (GFS_VALUE (cell, r->v[c + 1 + 2*l])); gdouble cfl = vol/(fm*(uh/(r->dz[l]*h) + cg)); if (cfl < r->cfl) r->cfl = cfl; } } } } static gdouble river_cfl (GfsSimulation * sim) { GfsRiver * r = GFS_RIVER (sim); r->cfl = G_MAXDOUBLE; gfs_domain_traverse_leaves (GFS_DOMAIN (sim), (FttCellTraverseFunc) minimum_cfl, r); gfs_all_reduce (GFS_DOMAIN (sim), r->cfl, MPI_DOUBLE, MPI_MIN); return r->cfl; } static void (* default_tracer_read) (GtsObject ** o, GtsFile * fp) = NULL; static void river_tracer_read (GtsObject ** o, GtsFile * fp) { (* default_tracer_read) (o, fp); GfsVariable * v = GFS_VARIABLE (*o); GfsDomain * domain = v->domain; GfsRiver * r = GFS_RIVER (domain); if (fp->type == GTS_ERROR) return; int oldn = r->nvar; r->nvar += r->nlayers; r->v = g_realloc (r->v, (r->nvar + 1)*sizeof (GfsVariable *)); r->v1 = g_realloc (r->v1, r->nvar*sizeof (GfsVariable *)); for (FttComponent c = 0; c < FTT_DIMENSION; c++) r->dv[c] = g_realloc (r->dv[c], (r->nvar + 1)*sizeof (GfsVariable *)); r->dv[0][ZB] = r->dv[0][oldn]; r->dv[1][ZB] = r->dv[1][oldn]; r->flux = g_realloc (r->flux, r->nvar*sizeof (GfsVariable *)); r->uL = g_realloc (r->uL, (r->nvar + 3*(r->nlayers + 1))*sizeof (gdouble)); r->uR = g_realloc (r->uR, (r->nvar + 3*(r->nlayers + 1))*sizeof (gdouble)); v->units += 1.; /* depth-integrated concentration */ if (r->nlayers > 1) for (int l = 0; l < r->nlayers; l++) { gchar * name = g_strdup_printf ("%s%d", v->name, l); gchar * description = g_strdup_printf ("%s for layer %d", v->description, l); r->v[T(r->nt,l)] = gfs_domain_get_or_add_variable (domain, name, description); r->v[T(r->nt,l)]->units = v->units; PARENT_TRACER (r->v[T(r->nt,l)]) = v; g_free (name); g_free (description); } else r->v[T(r->nt,0)] = v; for (int l = 0; l < r->nlayers; l++) { int i = T(r->nt,l); r->v1[i] = gfs_domain_add_variable (domain, NULL, NULL); GfsVariable * v[2]; r->dv[0][i] = v[0] = gfs_domain_add_variable (domain, NULL, NULL); r->dv[1][i] = v[1] = gfs_domain_add_variable (domain, NULL, NULL); gfs_variable_set_vector (v, 2); r->flux[i] = gfs_domain_add_variable (domain, NULL, NULL); } r->nt++; } static void river_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_river_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsRiver * river = GFS_RIVER (*o); if (fp->type == '{') { double dry; gchar * scheme = NULL; if (!river->nu) { river->nu = gfs_function_new (gfs_function_class (), 1.); gfs_function_set_units (river->nu, 2.); gfs_object_simulation_set (river->nu, river); } if (!river->dut) { river->dut = gfs_function_new (gfs_function_class (), 0.); gfs_object_simulation_set (river->dut, river); } if (!river->k) { river->k = gfs_function_new (gfs_function_class (), 0.); gfs_function_set_units (river->k, 1.); gfs_object_simulation_set (river->k, river); } GtsFileVariable var[] = { {GTS_UINT, "time_order", TRUE, &river->time_order}, {GTS_DOUBLE, "dry", TRUE, &dry}, {GTS_STRING, "scheme", TRUE, &scheme}, {GTS_OBJ, "nu", TRUE, &river->nu}, {GTS_OBJ, "dut", TRUE, &river->dut}, {GTS_OBJ, "k", TRUE, &river->k}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; if (var[1].set) river->dry = dry/GFS_SIMULATION (river)->physical_params.L; if (!var[3].set || river->nlayers < 2) { gts_object_destroy (GTS_OBJECT (river->nu)); river->nu = NULL; } if (!var[4].set || river->nlayers < 2) { gts_object_destroy (GTS_OBJECT (river->dut)); river->dut = NULL; } if (var[5].set) { if (river->nlayers > 1 && !river->nu) { gts_file_variable_error (fp, var, "k", "Navier condition requires viscosity to be set"); return; } } else { gts_object_destroy (GTS_OBJECT (river->k)); river->k = NULL; } if (scheme) { if (!strcmp (scheme, "hllc")) { if (river->nlayers > 1) gts_file_error (fp, "HLLC solver can only be used for a single layer"); else river->scheme = riemann_hllc; } else if (!strcmp (scheme, "kinetic")) river->scheme = riemann_kinetic; else gts_file_error (fp, "unknown scheme '%s'", scheme); g_free (scheme); } } GfsSourceCoriolis * s = gfs_has_source_coriolis (GFS_DOMAIN (river)); if (s) s->beta = 1.; /* backward Euler */ } static void river_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_river_class ())->parent_class->write) (o, fp); GfsRiver * river = GFS_RIVER (o); fprintf (fp, " {\n" " time_order = %d\n" " dry = %g\n" " scheme = %s\n", river->time_order, river->dry*GFS_SIMULATION (river)->physical_params.L, river->scheme == riemann_hllc ? "hllc" : "kinetic"); if (river->nu) { fputs (" nu =", fp); gfs_function_write (river->nu, fp); } if (river->dut) { fputs (" dut =", fp); gfs_function_write (river->dut, fp); } if (river->k) { fputs (" k =", fp); gfs_function_write (river->k, fp); } fputs ("\n}", fp); } static void river_destroy (GtsObject * o) { GfsRiver * r = GFS_RIVER (o); g_free (r->v); g_free (r->v1); g_free (r->flux); g_free (r->massflux); g_free (r->uL); g_free (r->uR); g_free (r->f); int i; for (i = 0; i < FTT_DIMENSION; i++) g_free (r->dv[i]); if (r->nu) gts_object_destroy (GTS_OBJECT (r->nu)); if (r->dut) gts_object_destroy (GTS_OBJECT (r->dut)); if (r->k) gts_object_destroy (GTS_OBJECT (r->k)); /* restore the default read() method for tracers */ GTS_OBJECT_CLASS (gfs_variable_tracer_class ())->read = default_tracer_read; (* GTS_OBJECT_CLASS (gfs_river_class ())->parent_class->destroy) (o); } static void river_class_init (GfsSimulationClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = river_destroy; GTS_OBJECT_CLASS (klass)->read = river_read; GTS_OBJECT_CLASS (klass)->write = river_write; klass->run = river_run; klass->cfl = river_cfl; } static gdouble cell_velocity (FttCell * cell, FttCellFace * face, GfsRiver * r) { g_return_val_if_fail (cell != NULL, 0.); gdouble D = GFS_VALUE (cell, r->v[H]); gdouble L = GFS_SIMULATION (r)->physical_params.L; return D > r->dry ? L*gfs_vector_norm (cell, gfs_domain_velocity (GFS_DOMAIN (r)))/D : 0.; } static gdouble cell_velocity2 (FttCell * cell, FttCellFace * face, GfsRiver * r) { g_return_val_if_fail (cell != NULL, 0.); gdouble D = GFS_VALUE (cell, r->v[H]); gdouble L = GFS_SIMULATION (r)->physical_params.L; return D > r->dry ? L*L*gfs_vector_norm2 (cell, gfs_domain_velocity (GFS_DOMAIN (r)))/(D*D) : 0.; } static void momentum_coarse_fine (FttCell * parent, GfsVariable * v) { /* Only initializes momentum when @parent is "deep enough". This assumes that shallow parents have just been submerged. For these shallow cells, childrens' initial momentum defaults to zero. This prevents creating spurious large velocities. */ GfsRiver * r = GFS_RIVER (v->domain); if (GFS_VALUE (parent, r->v[H]) > 2.*r->dry) gfs_cell_coarse_fine (parent, v); } static GfsVariable * massflux (GfsDomain * domain, int l) { gchar * name = g_strdup_printf ("G%d", l); gchar * description = g_strdup_printf ("Mass flux between layer %d and %d", l + 1, l); GfsVariable * v = gfs_domain_get_or_add_variable (domain, name, description); g_free (name); g_free (description); return v; } static void allocate_river (GfsRiver * r, int start, int nl) { r->nlayers = nl; r->dz = g_realloc (r->dz, r->nlayers*sizeof (gdouble)); int l; for (l = 0; l < r->nlayers; l++) r->dz[l] = 1./r->nlayers; r->nvar = 2*r->nlayers + 1; r->v = g_realloc (r->v, (r->nvar + 1)*sizeof (GfsVariable *)); r->v1 = g_realloc (r->v1, r->nvar*sizeof (GfsVariable *)); for (FttComponent c = 0; c < FTT_DIMENSION; c++) r->dv[c] = g_realloc (r->dv[c], (r->nvar + 1)*sizeof (GfsVariable *)); r->dv[0][ZB] = r->dv[0][3]; r->dv[1][ZB] = r->dv[1][3]; r->flux = g_realloc (r->flux, r->nvar*sizeof (GfsVariable *)); r->massflux = g_realloc (r->massflux, (r->nlayers - 1)*sizeof (GfsVariable *)); r->uL = g_realloc (r->uL, (r->nvar + 3*(r->nlayers + 1))*sizeof (gdouble)); r->uR = g_realloc (r->uR, (r->nvar + 3*(r->nlayers + 1))*sizeof (gdouble)); r->f = g_realloc (r->f, (3*r->nlayers + 1)*sizeof (gdouble)); GfsDomain * domain = GFS_DOMAIN (r); if (r->nlayers > 1) r->massflux[0] = massflux (domain, 0); for (l = start; l < r->nlayers; l++) { r->flux[U + 2*l] = gfs_domain_add_variable (domain, NULL, NULL); r->flux[V + 2*l] = gfs_domain_add_variable (domain, NULL, NULL); if (l < r->nlayers - 1) r->massflux[l] = massflux (domain, l); r->v1[U + 2*l] = gfs_domain_add_variable (domain, NULL, NULL); r->v1[V + 2*l] = gfs_domain_add_variable (domain, NULL, NULL); gfs_variable_set_vector (&r->v1[U + 2*l], 2); GfsVariable * tensor[2][2]; r->dv[0][U + 2*l] = tensor[0][0] = gfs_domain_add_variable (domain, NULL, NULL); r->dv[1][U + 2*l] = tensor[0][1] = gfs_domain_add_variable (domain, NULL, NULL); r->dv[0][V + 2*l] = tensor[1][0] = gfs_domain_add_variable (domain, NULL, NULL); r->dv[1][V + 2*l] = tensor[1][1] = gfs_domain_add_variable (domain, NULL, NULL); gfs_variable_set_tensor (tensor); } } static void river_init (GfsRiver * r) { GfsDomain * domain = GFS_DOMAIN (r); gts_object_destroy (GTS_OBJECT (gfs_variable_from_name (domain->variables, "Pmac"))); allocate_river (r, 0, 1); /* one layer by default */ r->v[H] = gfs_variable_from_name (domain->variables, "P"); r->v[H]->units = 1.; g_free (r->v[H]->description); r->v[H]->description = g_strdup ("Fluid depth"); r->v1[H] = gfs_domain_add_variable (domain, NULL, NULL); r->flux[H] = gfs_domain_add_variable (domain, NULL, NULL); r->zb = gfs_domain_add_variable (domain, "Zb", "Bed elevation above datum"); r->zb->units = 1.; r->h = gfs_domain_add_variable (domain, "H", "Elevation above datum (Zb + P)"); r->h->units = 1.; GfsVariable * u[2]; r->dv[0][H] = u[0] = gfs_domain_add_variable (domain, "Px", "x-component of the depth gradient"); r->dv[1][H] = u[1] = gfs_domain_add_variable (domain, "Py", "y-component of the depth gradient"); gfs_variable_set_vector (u, 2); r->dv[0][ZB] = u[0] = gfs_domain_add_variable (domain, "Zbx", "x-component of the bed slope"); r->dv[1][ZB] = u[1] = gfs_domain_add_variable (domain, "Zby", "y-component of the bed slope"); gfs_variable_set_vector (u, 2); GfsVariable * v; r->v[U] = r->qx = v = gfs_variable_from_name (domain->variables, "U"); v->units = 2.; v->face_source = FALSE; g_free (v->description); v->description = g_strdup ("x-component of the (depth-integrated) fluid flux"); v->coarse_fine = momentum_coarse_fine; r->v[V] = r->qy = v = gfs_variable_from_name (domain->variables, "V"); v->units = 2.; v->face_source = FALSE; g_free (v->description); v->description = g_strdup ("y-component of the (depth-integrated) fluid flux"); v->coarse_fine = momentum_coarse_fine; GFS_SIMULATION (r)->advection_params.gradient = gfs_center_minmod_gradient; GFS_SIMULATION (r)->advection_params.cfl = 0.5; GfsDerivedVariable * dv = gfs_derived_variable_from_name (domain->derived_variables, "Velocity"); dv->func = cell_velocity; dv = gfs_derived_variable_from_name (domain->derived_variables, "Velocity2"); dv->func = cell_velocity2; gfs_domain_remove_derived_variable (domain, "Vorticity"); gfs_domain_remove_derived_variable (domain, "Divergence"); gfs_domain_remove_derived_variable (domain, "Lambda2"); gfs_domain_remove_derived_variable (domain, "Curvature"); gfs_domain_remove_derived_variable (domain, "D2"); r->time_order = 2; r->dry = 1e-6; r->scheme = riemann_kinetic; /* overload the default read() method for tracers */ if (!default_tracer_read) { GtsObjectClass * klass = GTS_OBJECT_CLASS (gfs_variable_tracer_class ()); default_tracer_read = klass->read; klass->read = river_tracer_read; } } GfsSimulationClass * gfs_river_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsRiver", sizeof (GfsRiver), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) river_class_init, (GtsObjectInitFunc) river_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), &info); } return klass; } /** \endobject{GfsRiver} */ /** * Add multiple layers. * \beginobject{GfsLayers} */ static void traverse_layers (GfsDomain * domain, FttCellTraverseFunc func, gpointer data) { GfsRiver * r = GFS_RIVER (domain); GfsVariable ** u = gfs_domain_velocity (domain); for (r->l = 0; r->l < r->nlayers; r->l++) { for (int i = 0; i < r->nt; i++) gfs_variables_swap (r->v[T(i,r->l)], PARENT_TRACER (r->v[T(i,r->l)])); for (FttComponent c = 0; c < FTT_DIMENSION; c++) gfs_variables_swap (r->v[U + c + 2*r->l], u[c]); gfs_domain_traverse_leaves (domain, func, data); for (FttComponent c = 0; c < FTT_DIMENSION; c++) gfs_variables_swap (r->v[U + c + 2*r->l], u[c]); for (int i = 0; i < r->nt; i++) gfs_variables_swap (r->v[T(i,r->l)], PARENT_TRACER (r->v[T(i,r->l)])); } } static gdouble cell_sigma (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { GfsRiver * r = GFS_RIVER (sim); g_assert (r->l < r->nlayers); double sigma = r->dz[r->l]/2.; for (int i = 0; i < r->l; i++) sigma += r->dz[i]; return sigma; } static gdouble cell_z (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { GfsRiver * r = GFS_RIVER (sim); double zb = cell ? GFS_VALUE (cell, r->zb) : gfs_face_interpolated_value (face, r->zb->i); double h = cell ? GFS_VALUE (cell, r->v[H]) : gfs_face_interpolated_value (face, r->v[H]->i); return (zb + cell_sigma (cell, face, sim)*h)*sim->physical_params.L; } static void gfs_layers_read (GtsObject ** o, GtsFile * fp) { gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (number of layers)"); return; } GfsLayers * layers = GFS_LAYERS (*o); layers->nl = atoi (fp->token->str); if (layers->nl < 1) { gts_file_error (fp, "number of layers must be > 0)"); return; } gts_file_next_token (fp); /* this is specific to GfsRiver for the moment */ GfsSimulation * sim = gfs_object_simulation (layers); if (!GFS_IS_RIVER (sim)) { gts_file_error (fp, "layering is only valid for GfsRiver"); return; } if (layers->nl < 2) return; GfsRiver * r = GFS_RIVER (sim); GfsDomain * domain = GFS_DOMAIN (r); allocate_river (r, 1, layers->nl); /* allocate (Ul,Vl) in separate loops so that values are contiguous in memory */ for (FttComponent c = 0; c < 2; c++) for (int l = 0; l < r->nlayers; l++) { gchar * name = g_strdup_printf ("%s%d", c ? "V" : "U", l); gchar * description = g_strdup_printf ("%s-component of the fluid flux for layer %d", c ? "y" : "x", l); GfsVariable * v = gfs_domain_get_or_add_variable (domain, name, description); g_free (name); g_free (description); r->v[U + c + 2*l] = v; v->units = 2.; v->coarse_fine = momentum_coarse_fine; } for (int l = 0; l < r->nlayers; l++) { GfsVariable * u[2] = { r->v[U + 2*l], r->v[V + 2*l] }; gfs_variable_set_vector (u, 2); } /* configure layers traversal */ domain->traverse_layers = traverse_layers; GfsDerivedVariable * z = gfs_derived_variable_from_name (domain->derived_variables, "z"); z->func = cell_z; GfsDerivedVariableInfo info = { "sigma", "vertical coordinate", cell_sigma }; gfs_domain_add_derived_variable (domain, info); } static void gfs_layers_write (GtsObject * o, FILE * fp) { fprintf (fp, "%s %d", o->klass->info.name, GFS_LAYERS (o)->nl); } static void gfs_layers_class_init (GtsObjectClass * klass) { GFS_REFINE_CLASS (klass)->refine = NULL; klass->read = gfs_layers_read; klass->write = gfs_layers_write; } static void gfs_layers_init (GfsLayers * l) { l->nl = 1; } GtsObjectClass * gfs_layers_class (void) { static GtsObjectClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsLayers", sizeof (GfsLayers), sizeof (GfsRefineClass), (GtsObjectClassInitFunc) gfs_layers_class_init, (GtsObjectInitFunc) gfs_layers_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_refine_class ()), &info); } return klass; } /** * \endobject{GfsLayers} */ /** * * \beginobject{GfsBcSubcritical} */ static void subcritical (FttCellFace * f, GfsBc * b) { gdouble hb = gfs_function_face_value (GFS_BC_VALUE (b)->val, f); GfsRiver * river = GFS_RIVER (b->v->domain); gdouble hi = GFS_VALUE (f->neighbor, river->v[H]); g_assert (hi >= 0.); GFS_VALUE (f->cell, b->v) = GFS_VALUE (f->neighbor, b->v) + (FTT_FACE_DIRECT (f) ? -1. : 1.)*2.*hi*(sqrt (river->g*hi) - sqrt (river->g*MAX (hb, 0.))); } static void bc_subcritical_read (GtsObject ** o, GtsFile * fp) { GfsBc * bc = GFS_BC (*o); if (GTS_OBJECT_CLASS (gfs_bc_subcritical_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_bc_subcritical_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (!GFS_IS_RIVER (bc->v->domain)) { gts_file_error (fp, "GfsBcSubcritical only makes sense for GfsRiver simulations"); return; } gfs_function_set_units (GFS_BC_VALUE (bc)->val, 1.); } static void gfs_bc_subcritical_init (GfsBc * object) { object->bc = (FttFaceTraverseFunc) subcritical; } static void gfs_bc_subcritical_class_init (GtsObjectClass * klass) { klass->read = bc_subcritical_read; } GfsBcClass * gfs_bc_subcritical_class (void) { static GfsBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_bc_subcritical_info = { "GfsBcSubcritical", sizeof (GfsBcValue), sizeof (GfsBcClass), (GtsObjectClassInitFunc) gfs_bc_subcritical_class_init, (GtsObjectInitFunc) gfs_bc_subcritical_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_bc_value_class ()), &gfs_bc_subcritical_info); } return klass; } /** \endobject{GfsBcSubcritical} */ /** * * \beginobject{GfsDischargeElevation} */ static void discharge_elevation_destroy (GtsObject * o) { gts_object_destroy (GTS_OBJECT (GFS_DISCHARGE_ELEVATION (o)->Q)); gts_object_destroy (GTS_OBJECT (GFS_DISCHARGE_ELEVATION (o)->profile)); (* GTS_OBJECT_CLASS (gfs_discharge_elevation_class ())->parent_class->destroy) (o); } static void discharge_elevation_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_discharge_elevation_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (!GFS_IS_RIVER (domain)) { gts_file_error (fp, "GfsDischargeElevation only makes sense for GfsRiver simulations"); return; } GfsDischargeElevation * bd = GFS_DISCHARGE_ELEVATION (*o); gfs_function_read (bd->Q, domain, fp); if (fp->type == GTS_ERROR) return; if (fp->type != '\n') gfs_function_read (bd->profile, domain, fp); else gfs_object_simulation_set (bd->profile, domain); bd->P = GFS_RIVER (domain)->v[H]; g_free (GFS_CONSTANT (bd)->derived->description); GFS_CONSTANT (bd)->derived->description = g_strdup ("Elevation for a given discharge"); } static void discharge_elevation_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_discharge_elevation_class ())->parent_class->write) (o, fp); gfs_function_write (GFS_DISCHARGE_ELEVATION (o)->Q, fp); if (gfs_function_get_constant_value (GFS_DISCHARGE_ELEVATION (o)->profile) != 0.) gfs_function_write (GFS_DISCHARGE_ELEVATION (o)->profile, fp); } static void boundary_flux (FttCellFace * f, GfsDischargeElevation * b) { gdouble profile = gfs_function_face_value (b->profile, f); if (profile != GFS_NODATA) { GfsRiver * river = GFS_RIVER (gfs_object_simulation (b)); GFS_VALUE (f->cell, river->flux[H]) = 0.; gdouble v1 = GFS_VALUE (f->cell, river->v1[H]); GFS_VALUE (f->cell, river->v1[H]) = MAX (0., profile + GFS_CONSTANT (b)->val - gfs_face_interpolated_value (f, river->zb->i)); gdouble dt = river->dt; river->dt = 1.; face_fluxes (f, river); river->dt = dt; GFS_VALUE (f->cell, river->v1[H]) = v1; double h = ftt_cell_size (f->cell); b->flow -= GFS_VALUE (f->cell, river->flux[H])*h*h; } } static void traverse_dirichlet_boundaries (GfsBox * box, GfsDischargeElevation * bd) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); GfsBc * bc = gfs_boundary_lookup_bc (b, bd->P); if (GFS_IS_BC_DIRICHLET (bc)) ftt_face_traverse_boundary (b->root, b->d, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) boundary_flux, bd); } } static gboolean discharge_elevation_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_discharge_elevation_class ())->parent_class)->event) (event, sim)) { GfsConstant * c = GFS_CONSTANT (event); GfsDischargeElevation * bd = GFS_DISCHARGE_ELEVATION (event); GfsRiver * r = GFS_RIVER (sim); guint v; for (v = 0; v < r->nvar; v++) gfs_variables_swap (r->v[v], r->v1[v]); gfs_catch_floating_point_exceptions (); gdouble Q = gfs_function_value (bd->Q, NULL); gfs_restore_fpe_for_function (bd->Q); gdouble hmax, hmin = 0.; gdouble L = sim->physical_params.L; hmax = c->val*2./L; bd->flow = 0.; c->val = hmax; gts_container_foreach (GTS_CONTAINER (sim), (GtsFunc) traverse_dirichlet_boundaries, bd); gfs_all_reduce (GFS_DOMAIN (sim), bd->flow, MPI_DOUBLE, MPI_SUM); if (Q > bd->flow) hmax = 1.; guint n = 0, nitermin = 4, nitermax = 100; c->val = hmax/2.; do { bd->flow = 0.; gts_container_foreach (GTS_CONTAINER (sim), (GtsFunc) traverse_dirichlet_boundaries, bd); gfs_all_reduce (GFS_DOMAIN (sim), bd->flow, MPI_DOUBLE, MPI_SUM); if (bd->flow > Q) { hmax = c->val; c->val = (c->val + hmin)/2.; } else { hmin = c->val; c->val = (c->val + hmax)/2.; } n++; } while (n < nitermax && (n < nitermin || fabs (Q - bd->flow)/Q > bd->tolerance)); if (n == nitermax) g_warning ("discharge_elevation_event() did not converge after %d iterations: %g", n, fabs (Q - bd->flow)/Q); c->val *= L; /* g_message ("### flow: %g H: %g nitermax: %d\n", bd->flow*pow(L,3), c->val, n); */ for (v = 0; v < r->nvar; v++) gfs_variables_swap (r->v[v], r->v1[v]); return TRUE; } return FALSE; } static void gfs_discharge_elevation_class_init (GtsObjectClass * klass) { klass->destroy = discharge_elevation_destroy; klass->read = discharge_elevation_read; klass->write = discharge_elevation_write; GFS_EVENT_CLASS (klass)->event = discharge_elevation_event; } static void gfs_discharge_elevation_init (GfsDischargeElevation * b) { GFS_EVENT (b)->start = 0.; /* this is not an "Init" event */ b->tolerance = 1e-2; b->Q = gfs_function_new (gfs_function_class (), 0.); gfs_function_set_units (b->Q, 3.); b->profile = gfs_function_new (gfs_function_class (), 0.); gfs_function_set_units (b->profile, 1.); } GfsEventClass * gfs_discharge_elevation_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_discharge_elevation_info = { "GfsDischargeElevation", sizeof (GfsDischargeElevation), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_discharge_elevation_class_init, (GtsObjectInitFunc) gfs_discharge_elevation_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_constant_class ()), &gfs_discharge_elevation_info); } return klass; } /** \endobject{GfsDischargeElevation} */ /** * "Pipe" between two locations. * \beginobject{GfsSourcePipe} */ static gboolean read_position (GtsFile * fp, FttVector * p) { gchar * start[FTT_DIMENSION]; if (!gfs_read_vector (fp, start)) return FALSE; FttComponent c; p->z = 0.; for (c = 0; c < FTT_DIMENSION; c++) { (&p->x)[c] = atof (start[c]); g_free (start[c]); } return TRUE; } static void source_pipe_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_source_pipe_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsSimulation * sim = gfs_object_simulation (*o); if (!GFS_IS_RIVER (sim)) { gts_file_error (fp, "%s only makes sense for GfsRiver simulations", (*o)->klass->info.name); return; } GfsVariable * v = GFS_RIVER (sim)->v[H]; if (v->sources == NULL) v->sources = gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ())); gts_container_add (v->sources, GTS_CONTAINEE (*o)); GfsSourcePipe * p = GFS_SOURCE_PIPE (*o); if (!read_position (fp, &p->start)) return; if (!read_position (fp, &p->end)) return; p->diameter = gfs_read_constant (fp, GFS_DOMAIN (gfs_object_simulation (p))); if (p->diameter == G_MAXDOUBLE) return; } static void source_pipe_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_source_pipe_class ())->parent_class->write) (o, fp); GfsSourcePipe * p = GFS_SOURCE_PIPE (o); fprintf (fp, " (%f,%f) (%f,%f) %f", p->start.x, p->start.y, p->end.x, p->end.y, p->diameter); } #define DQ (1e-4/L3) static double flow_rate_Q (double z1, double h1, double z2, double h2, double l, double g, GfsSourcePipe * p, double a1, double a2, double Q) { double Q1 = (*p->flow_rate) (z1, h1 - Q/a1, z2, h2 + Q/a2, l, g, p); if (Q1 > 0.) Q1 = MIN (Q1, a1*h1); if (Q1 < 0.) Q1 = MAX (Q1, - a2*h2); return Q1; } static gboolean source_pipe_event (GfsEvent * event, GfsSimulation * sim) { if ((* gfs_event_class ()->event) (event, sim)) { GfsSourcePipe * p = GFS_SOURCE_PIPE (event); GfsDomain * domain = GFS_DOMAIN (sim); FttVector start = p->start, end = p->end; gfs_simulation_map (sim, &start); gfs_simulation_map (sim, &end); /* fixme: this won't work in parallel if the ends of the pipe are on different PEs */ p->scell = gfs_domain_locate (domain, start, -1, NULL); p->ecell = gfs_domain_locate (domain, end, -1, NULL); p->Q = 0.; if (p->scell && p->ecell && p->scell != p->ecell) { gdouble L = sim->physical_params.L, g = sim->physical_params.g; GfsVariable * h = GFS_RIVER (sim)->v[H], * zb = GFS_RIVER (sim)->zb; gdouble h1 = MAX (L*GFS_VALUE (p->scell, h), 0.), z1 = L*GFS_VALUE (p->scell, zb); gdouble h2 = MAX (L*GFS_VALUE (p->ecell, h), 0.), z2 = L*GFS_VALUE (p->ecell, zb); /* fixme: the length below does not take into account metric properly (e.g. won't work for MetricLonLat) */ gdouble l = L*sqrt ((start.x - end.x)*(start.x - end.x) + (start.y - end.y)*(start.y - end.y)); gdouble L2 = L*L, L3 = L*L*L; gdouble a1 = L2*gfs_cell_volume (p->scell, GFS_DOMAIN (sim))/sim->advection_params.dt; gdouble a2 = L2*gfs_cell_volume (p->ecell, GFS_DOMAIN (sim))/sim->advection_params.dt; /* secant-bisection root-finding: solves flow_rate(h, l, Q) - Q = 0 for the flow rate Q */ p->Q = (*p->flow_rate) (z1, h1, z2, h2, l, g, p)/L3; gdouble Q1 = p->Q*2.; gdouble v1 = flow_rate_Q (z1, h1, z2, h2, l, g, p, a1, a2, Q1*L3)/L3 - Q1; gdouble Q2 = 0.; gdouble v2 = p->Q; if (fabs (v1) > DQ && fabs (v2) > DQ) { if (v1 > v2) { gdouble v = v1; v1 = v2; v2 = v; v = Q1; Q1 = Q2; Q2 = v; } if (v1*v2 >= 0.) g_warning ("source_pipe_event: v1: %g v2: %g", v1*L3, v2*L3); else { guint nitermax = 1000; gdouble Qb; p->Q = (v1*Q2 - v2*Q1)/(v1 - v2); do { Qb = p->Q; gdouble v = flow_rate_Q (z1, h1, z2, h2, l, g, p, a1, a2, p->Q*L3)/L3 - p->Q; if (v < 0.) { v1 = v; Q1 = p->Q; } else { v2 = v; Q2 = p->Q; } if (v2 > v1) p->Q = (v1*Q2 - v2*Q1)/(v1 - v2); nitermax--; } while (fabs (p->Q - Qb) > DQ && nitermax); if (nitermax == 0) g_warning ("source_pipe_event: failed to converge! %g %g", p->Q*L3, fabs (p->Q - Qb)*L3); } } } return TRUE; } return FALSE; } static void source_pipe_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->read = source_pipe_read; GTS_OBJECT_CLASS (klass)->write = source_pipe_write; GFS_EVENT_CLASS (klass)->event = source_pipe_event; } static gdouble source_pipe_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { GfsSourcePipe * p = GFS_SOURCE_PIPE (s); if (cell == p->scell) return - p->Q/gfs_cell_volume (cell, v->domain); if (cell == p->ecell) return p->Q/gfs_cell_volume (cell, v->domain); return 0.; } /* This is a simplistic flow rate model for a circular pipe. The pipe is assumed to be always fully submerged. */ static double pipe_flow_rate (double z1, double h1, /* terrain elevation and flow depth at inlet */ double z2, double h2, /* terrain elevation and flow depth at outlet */ double l, /* pipe length */ double g, /* acceleration of gravity */ GfsSourcePipe * p) { gdouble r = p->diameter/2.; gdouble A = M_PI*r*r; /* area */ gdouble P = 2.*M_PI*r; /* perimeter */ gdouble Rh = A/P; /* hydraulic radius */ gdouble S = fabs (z1 + h1 - z2 - h2)/l; /* slope */ gdouble n = 0.03; /* Gauckler-Manning coefficient */ /* Gauckler-Manning-Strickler formula for the (signed) flow rate */ return (z1 + h1 > z2 + h2 ? 1. : -1.)*A/n*pow (Rh, 2./3.)*sqrt (S); } static void source_pipe_init (GfsSourceGeneric * s) { s->mac_value = s->centered_value = source_pipe_value; GFS_SOURCE_PIPE (s)->flow_rate = pipe_flow_rate; } GfsSourceGenericClass * gfs_source_pipe_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsSourcePipe", sizeof (GfsSourcePipe), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) source_pipe_class_init, (GtsObjectInitFunc) source_pipe_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_generic_class ()), &info); } return klass; } /** \endobject{GfsSourcePipe} */ gerris-snapshot-131206/src/surface.c0000644000175100017510000005751212250371171014257 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Surfaces. */ #include "simulation.h" #include "surface.h" /** * Abstract class for surfaces (an oriented surface (in 3D) or an * oriented curve (in 2D)). * \beginobject{GfsGenericSurface} */ GfsGenericSurfaceClass * gfs_generic_surface_class (void) { static GfsGenericSurfaceClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_generic_surface_info = { "GfsGenericSurface", sizeof (GtsObject), sizeof (GfsGenericSurfaceClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_object_class ()), &gfs_generic_surface_info); } return klass; } /** * gfs_cell_is_cut: * @cell: a #FttCell. * @s: a #GfsGenericSurface. * @flatten: if set to %TRUE, @cell is flattened in the z direction. * @maxlevel: the maximum (virtual) cell level to consider. * * Returns: a (possibly new) #GfsGenericSurface containing a subset of @s which may * intersect @cell or %NULL if @s does not intersect @cell. */ GfsGenericSurface * gfs_cell_is_cut (FttCell * cell, GfsGenericSurface * s, gboolean flatten, gint maxlevel) { g_return_val_if_fail (cell != NULL, NULL); g_return_val_if_fail (s != NULL, NULL); g_assert (GFS_GENERIC_SURFACE_CLASS (GTS_OBJECT (s)->klass)->cell_is_cut); return (* GFS_GENERIC_SURFACE_CLASS (GTS_OBJECT (s)->klass)->cell_is_cut) (cell, s, flatten, maxlevel); } static void cell_traverse_cut (FttCell * cell, GfsGenericSurface * s, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseCutFunc func, gpointer data, gboolean flatten) { GfsGenericSurface * s1 = gfs_cell_is_cut (cell, s, flatten && FTT_CELL_IS_LEAF (cell), -1); if (s1 == NULL) return; if (order == FTT_PRE_ORDER && (flags == FTT_TRAVERSE_ALL || ((flags & FTT_TRAVERSE_LEAFS) != 0 && FTT_CELL_IS_LEAF (cell)) || ((flags & FTT_TRAVERSE_NON_LEAFS) != 0 && !FTT_CELL_IS_LEAF (cell)))) (* func) (cell, s1, data); if (!FTT_CELL_IS_LEAF (cell)) { struct _FttOct * children = cell->children; guint n; for (n = 0; n < FTT_CELLS; n++) { FttCell * c = &(children->cell[n]); if ((flags & FTT_TRAVERSE_DESTROYED) != 0 || !FTT_CELL_IS_DESTROYED (c)) cell_traverse_cut (c, s1, order, flags, func, data, flatten); } } if (order == FTT_POST_ORDER && (flags == FTT_TRAVERSE_ALL || ((flags & FTT_TRAVERSE_LEAFS) != 0 && FTT_CELL_IS_LEAF (cell)) || ((flags & FTT_TRAVERSE_NON_LEAFS) != 0 && !FTT_CELL_IS_LEAF (cell)))) (* func) (cell, s1, data); if (s1 != s) { if (GFS_IS_SURFACE (s1)) GFS_SURFACE (s1)->bbtree = NULL; gts_object_destroy (GTS_OBJECT (s1)); } } /** * gfs_cell_traverse_cut: * @root: the root #FttCell of the tree to traverse. * @s: a #GfsGenericSurface. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Traverses a cell tree starting at the given root #FttCell. Calls * the given function for each cell cut by @s. */ void gfs_cell_traverse_cut (FttCell * root, GfsGenericSurface * s, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseCutFunc func, gpointer data) { g_return_if_fail (root != NULL); g_return_if_fail (s != NULL); g_return_if_fail (func != NULL); cell_traverse_cut (root, s, order, flags, func, data, FALSE); } /** * gfs_cell_traverse_cut_2D: * @root: the root #FttCell of the tree to traverse. * @s: a #GfsGenericSurface. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Traverses a cell tree starting at the given root #FttCell. Calls * the given function for each cell cut by @s. * * The cells are "flattened" in the z-direction. */ void gfs_cell_traverse_cut_2D (FttCell * root, GfsGenericSurface * s, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseCutFunc func, gpointer data) { g_return_if_fail (root != NULL); g_return_if_fail (s != NULL); g_return_if_fail (func != NULL); cell_traverse_cut (root, s, order, flags, func, data, TRUE); } /** * gfs_generic_surface_read: * @s: a #GfsGenericSurface. * @sim: a #GfsSimulation. * @fp: a #GtsFile. * * Calls the read() method of @s. */ void gfs_generic_surface_read (GfsGenericSurface * s, gpointer sim, GtsFile * fp) { GtsObject * o = (GtsObject *) s; g_return_if_fail (s != NULL); g_return_if_fail (fp != NULL); o->reserved = sim; (* GTS_OBJECT (s)->klass->read) (&o, fp); } /** * gfs_generic_surface_write: * @s: a #GfsGenericSurface. * @sim: a #GfsSimulation. * @fp: a file pointer. * * Calls the write() method of @s. */ void gfs_generic_surface_write (GfsGenericSurface * s, gpointer sim, FILE * fp) { g_return_if_fail (s != NULL); g_return_if_fail (fp != NULL); GTS_OBJECT (s)->reserved = sim; (* GTS_OBJECT (s)->klass->write) (GTS_OBJECT (s), fp); } /** * gfs_surface_segment_intersection: * @s: a #GfsGenericSurface. * @cell: a #FttCell containing @I. * @I: a GfsSegment. * * Fills @I with the intersection of @s and @I. * * Returns: the number of times @s intersects @I. */ guint gfs_surface_segment_intersection (GfsGenericSurface * s, FttCell * cell, GfsSegment * I) { g_return_val_if_fail (s != NULL, 0); g_return_val_if_fail (cell != NULL, 0); g_return_val_if_fail (I != NULL, 0); g_assert (GFS_GENERIC_SURFACE_CLASS (GTS_OBJECT (s)->klass)->segment_intersection); return (* GFS_GENERIC_SURFACE_CLASS (GTS_OBJECT (s)->klass)->segment_intersection) (s, cell, I); } /** * gfs_surface_segment_normal: * @s: a #GfsGenericSurface. * @cell: a #FttCell containing @I. * @I: a GfsSegment. * @n: a #GtsVector. * * Fills @n with the normal to @s at the intersection of @s and @I. */ void gfs_surface_segment_normal (GfsGenericSurface * s, FttCell * cell, GfsSegment * I, GtsVector n) { g_return_if_fail (s != NULL); g_return_if_fail (cell != NULL); g_return_if_fail (I != NULL); g_return_if_fail (I->n > 0); g_return_if_fail (n != NULL); g_assert (GFS_GENERIC_SURFACE_CLASS (GTS_OBJECT (s)->klass)->segment_normal); (* GFS_GENERIC_SURFACE_CLASS (GTS_OBJECT (s)->klass)->segment_normal) (s, cell, I, n); } /** * gfs_surface_point_is_inside: * @s: a #GfsGenericSurface. * @p: a #FttVector. * * Returns: 1 if @p is inside @s, 0 if @p lies on the boundary of @s, * -1 otherwise. */ gint gfs_surface_point_is_inside (GfsGenericSurface * s, FttVector * p) { g_return_val_if_fail (s != NULL, 0); g_return_val_if_fail (p != NULL, 0); g_assert (GFS_GENERIC_SURFACE_CLASS (GTS_OBJECT (s)->klass)->point_is_inside); return (* GFS_GENERIC_SURFACE_CLASS (GTS_OBJECT (s)->klass)->point_is_inside) (s, p); } /** \endobject{GfsGenericSurface} */ /** * A GfsSurface is an oriented surface (in 3D) or an oriented curve (in 2D). * \beginobject{GfsSurface} */ /** * gfs_surface_transformation: * @surface: a #GtsSurface * @rotate: a #GtsVector * @translate: a #GtsVector * @scale: a #GtsVector * @flip: a #gboolean * @matrix: a pointer on a #GtsMatrix * * Translates, rotates, scales and flips @surface. */ void gfs_surface_transformation (GtsSurface * surface, GtsVector rotate, GtsVector translate, GtsVector scale, gboolean flip, GtsMatrix ** matrix) { GtsMatrix * m; gint c; g_return_if_fail (matrix != NULL); m = gts_matrix_translate (NULL, translate); for (c = 2; c >= 0; c--) if (rotate[c] != 0.) { GtsVector r = {0.,0.,0.}; r[c] = 1.; GtsMatrix * mr = gts_matrix_rotate (NULL, r, rotate[c]*M_PI/180.); GtsMatrix * m1 = gts_matrix_product (m, mr); gts_matrix_destroy (m); gts_matrix_destroy (mr); m = m1; } GtsMatrix * ms = gts_matrix_scale (NULL, scale); if (*matrix) gts_matrix_destroy (*matrix); *matrix = gts_matrix_product (m, ms); gts_matrix_destroy (m); gts_matrix_destroy (ms); if (surface) { gts_surface_foreach_vertex (surface, (GtsFunc) gts_point_transform, *matrix); gts_matrix_destroy (*matrix); *matrix = NULL; if (flip) gts_surface_foreach_face (surface, (GtsFunc) gts_triangle_revert, NULL); } else { GtsMatrix * i = gts_matrix_inverse (*matrix); gts_matrix_destroy (*matrix); *matrix = i; } } static void point_map (GtsPoint * p, GfsSimulation * sim) { gfs_simulation_map (sim, (FttVector *) &p->x); } static void surface_read (GtsObject ** o, GtsFile * fp) { GfsSurface * surface = GFS_SURFACE (*o); gboolean dimensional = FALSE, implicit = FALSE; if (fp->type == '(') { /* implicit surface */ gts_file_next_token (fp); if (surface->f) gts_object_destroy (GTS_OBJECT (surface->f)); surface->f = gfs_function_new (gfs_function_spatial_class (), 0.); gfs_function_read (surface->f, gfs_object_simulation (*o), fp); if (fp->type == GTS_ERROR) return; if (fp->type != ')') { gts_file_error (fp, "expecting a closing bracket"); return; } } else if (fp->type == '{') { /* embedded surface */ fp->scope_max++; gts_file_next_token (fp); if (surface->s) gts_object_destroy (GTS_OBJECT (surface->s)); surface->s = gts_surface_new (gts_surface_class (), surface->face_class, surface->edge_class, surface->vertex_class); if (gts_surface_read (surface->s, fp)) return; if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; } else { /* surface file name */ if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (filename)"); return; } FILE * fptr = fopen (fp->token->str, "rt"); if (fptr == NULL) { gts_file_error (fp, "cannot open file `%s'", fp->token->str); return; } GtsFile * fp1 = gts_file_new (fptr); surface->s = gts_surface_new (gts_surface_class (), surface->face_class, surface->edge_class, surface->vertex_class); if (gts_surface_read (surface->s, fp1)) { gts_file_error (fp, "file `%s' is not a valid GTS file\n" "%s:%d:%d: %s", fp->token->str, fp->token->str, fp1->line, fp1->pos, fp1->error); gts_file_destroy (fp1); fclose (fptr); return; } gts_file_destroy (fp1); fclose (fptr); dimensional = TRUE; } gts_file_next_token (fp); if (fp->type == '{') { gdouble scale = 1.; GtsFileVariable var[] = { {GTS_DOUBLE, "rx", TRUE, &surface->rotate[0]}, {GTS_DOUBLE, "ry", TRUE, &surface->rotate[1]}, {GTS_DOUBLE, "rz", TRUE, &surface->rotate[2]}, {GTS_DOUBLE, "sx", TRUE, &surface->scale[0]}, {GTS_DOUBLE, "sy", TRUE, &surface->scale[1]}, {GTS_DOUBLE, "sz", TRUE, &surface->scale[2]}, {GTS_DOUBLE, "tx", TRUE, &surface->translate[0]}, {GTS_DOUBLE, "ty", TRUE, &surface->translate[1]}, {GTS_DOUBLE, "tz", TRUE, &surface->translate[2]}, {GTS_DOUBLE, "scale", TRUE, &scale}, {GTS_INT, "flip", TRUE, &surface->flip}, {GTS_INT, "twod", TRUE, &surface->twod}, {GTS_INT, "implicit", TRUE, &implicit}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; gboolean set = FALSE; guint i; for (i = 0; i < 11 && !set; i++) if (var[i].set) set = TRUE; if (set) { if (var[9].set) { surface->scale[0] *= scale; surface->scale[1] *= scale; surface->scale[2] *= scale; } GtsVector translate; gdouble L = gfs_object_simulation (surface)->physical_params.L; for (i = 0; i < FTT_DIMENSION; i++) translate[i] = surface->translate[i]/L; gfs_surface_transformation (surface->s, surface->rotate, translate, surface->scale, surface->flip, &surface->m); } } if (dimensional) { g_assert (surface->s); gts_surface_foreach_vertex (surface->s, (GtsFunc) point_map, gfs_object_simulation (*o)); } if (surface->s) { if (implicit) surface->bbtree = gts_bb_tree_surface (surface->s); else if (!gts_surface_is_orientable (surface->s)) gts_file_error (fp, "surface is not orientable"); } } static void surface_write (GtsObject * o, FILE * fp) { GfsSurface * surface = GFS_SURFACE (o); if (surface->s) { fputs (" { ", fp); GtsSurface * s = surface->s; if (GFS_DOMAIN (gfs_object_simulation (o))->binary) { gboolean binary = GTS_POINT_CLASS (s->vertex_class)->binary; GTS_POINT_CLASS (s->vertex_class)->binary = TRUE; gts_surface_write (s, fp); GTS_POINT_CLASS (s->vertex_class)->binary = binary; } else gts_surface_write (s, fp); fputc ('}', fp); } else if (surface->f) { fputs (" (", fp); gfs_function_write (surface->f, fp); fputs (" )", fp); } if (surface->m) { fputs (" {\n", fp); if (gts_vector_norm (surface->translate) > 0.) fprintf (fp, " tx = %g ty = %g tz = %g\n", surface->translate[0], surface->translate[1], surface->translate[2]); if (surface->scale[0] != 1. || surface->scale[1] != 1. || surface->scale[2] != 1.) fprintf (fp, " sx = %g sy = %g sz = %g\n", surface->scale[0], surface->scale[1], surface->scale[2]); if (surface->rotate[0] != 0.) fprintf (fp, " rx = %g\n", surface->rotate[0]); if (surface->rotate[1] != 0.) fprintf (fp, " ry = %g\n", surface->rotate[1]); if (surface->rotate[2] != 0.) fprintf (fp, " rz = %g\n", surface->rotate[2]); if (surface->flip) fputs (" flip = 1\n", fp); if (surface->twod) fputs (" twod = 1\n", fp); if (surface->bbtree) fputs (" implicit = 1\n", fp); fputc ('}', fp); } else if (surface->bbtree) fputs (" { implicit = 1 }", fp); else fputs (" {}", fp); } static void surface_destroy (GtsObject * object) { GfsSurface * s = GFS_SURFACE (object); if (s->s) gts_object_destroy (GTS_OBJECT (s->s)); if (s->f) gts_object_destroy (GTS_OBJECT (s->f)); if (s->m) gts_matrix_destroy (s->m); if (s->bbtree) gts_bb_tree_destroy (s->bbtree, TRUE); (* GTS_OBJECT_CLASS (gfs_surface_class ())->parent_class->destroy) (object); } static void face_overlaps_box (GtsTriangle * t, gpointer * data) { GtsBBox * bb = data[0]; GtsSurface ** s1 = data[1]; if (gts_bbox_overlaps_triangle (bb, t)) { if (*s1 == NULL) *s1 = gts_surface_new (gts_surface_class (), gts_face_class (), gts_edge_class (), gts_vertex_class ()); gts_surface_add_face (*s1, GTS_FACE (t)); } } #define SIGN(v) ((v) > 0. ? 1 : (v) < 0. ? -1 : 0) static GfsGenericSurface * cell_is_cut (FttCell * cell, GfsGenericSurface * s1, gboolean flatten, gint maxlevel) { GfsSurface * s = GFS_SURFACE (s1); if (s->f) { if (!FTT_CELL_IS_LEAF (cell)) return GFS_GENERIC_SURFACE (s); FttVector p; gdouble h = ftt_cell_size (cell)/2.; ftt_cell_pos (cell, &p); gint i, j, k = 0, sign = 0, n = 1; i = maxlevel - ftt_cell_level (cell); while (i-- > 0) n *= 2; #if !FTT_2D for (k = - n; k <= n; k += 2) #endif for (i = - n; i <= n; i += 2) for (j = - n; j <= n; j += 2) { GtsPoint o; o.x = p.x + i*h/n; o.y = p.y + j*h/n; o.z = p.z + k*h/n; gdouble v = gfs_surface_implicit_value (s, o); if (sign && sign*SIGN(v) <= 0) return GFS_GENERIC_SURFACE (s); sign = SIGN(v); } return NULL; } else if (s->s) { GtsSurface * s1 = NULL; gpointer data[2]; GtsBBox bb; ftt_cell_bbox (cell, &bb); if (flatten) bb.z1 = bb.z2 = 0.; data[0] = &bb; data[1] = &s1; gts_surface_foreach_face (s->s, (GtsFunc) face_overlaps_box, data); if (s1 == NULL) return NULL; GfsSurface * s2 = GFS_SURFACE (gts_object_new (GTS_OBJECT_CLASS (gfs_surface_class ()))); s2->s = s1; s2->bbtree = s->bbtree; return GFS_GENERIC_SURFACE (s2); } g_assert_not_reached (); return NULL; } static gdouble segment_triangle_intersection (GtsPoint * E, GtsPoint * D, GtsTriangle * t, gboolean * inside) { GtsVertex * vA, * vB, * vC; GtsPoint * A, * B, * C; gint ABCE, ABCD, ADCE, ABDE, BCDE; GtsEdge * AB, * BC, * CA; gdouble a, b; gboolean reversed = FALSE; gts_triangle_vertices_edges (t, NULL, &vA, &vB, &vC, &AB, &BC, &CA); A = GTS_POINT (vA); B = GTS_POINT (vB); C = GTS_POINT (vC); ABCE = gts_point_orientation_3d_sos (A, B, C, E); ABCD = gts_point_orientation_3d_sos (A, B, C, D); if (ABCE < 0 || ABCD > 0) { GtsPoint * tmpp; gint tmp; tmpp = E; E = D; D = tmpp; tmp = ABCE; ABCE = ABCD; ABCD = tmp; reversed = TRUE; } if (ABCE < 0 || ABCD > 0) return -1.; ADCE = gts_point_orientation_3d_sos (A, D, C, E); if (ADCE < 0) return -1.; ABDE = gts_point_orientation_3d_sos (A, B, D, E); if (ABDE < 0) return -1.; BCDE = gts_point_orientation_3d_sos (B, C, D, E); if (BCDE < 0) return -1.; *inside = reversed ? (ABCD < 0) : (ABCE < 0); a = gts_point_orientation_3d (A, B, C, E); b = gts_point_orientation_3d (A, B, C, D); if (a != b) return reversed ? 1. - a/(a - b) : a/(a - b); /* D and E are contained within ABC */ g_assert (a == 0.); return 0.5; } static void triangle_face_intersection (GtsTriangle * t, GfsSegment * I) { gboolean ins; gdouble x = segment_triangle_intersection (I->E, I->D, t, &ins); if (x != -1.) { I->x += x; I->n++; I->inside += ins ? 1 : -1; } } static GtsPoint segment_intersection (GfsSegment * I) { GtsPoint p; p.x = I->E->x + I->x*(I->D->x - I->E->x); p.y = I->E->y + I->x*(I->D->y - I->E->y); p.z = I->E->z + I->x*(I->D->z - I->E->z); /* lines below just to prevent compiler warnings about uninitialised fields */ p.object.flags = 0; p.object.reserved = NULL; p.object.klass = NULL; return p; } static guint surface_segment_intersection (GfsGenericSurface * s1, FttCell * cell, GfsSegment * I) { GfsSurface * s = GFS_SURFACE (s1); I->n = 0; I->x = 0.; I->inside = 0; if (s->f || s->bbtree) { gdouble vE = gfs_surface_implicit_value (s, *I->E); gdouble vD = gfs_surface_implicit_value (s, *I->D); if ((vE > 0. && vD <= 0.) || (vE <= 0. && vD > 0.)) { I->n = 1; I->inside = vE > 0. ? -1 : 1; /* secant-bisection root-finding */ gdouble t, t1, t2, v1, v2; if (vE > vD) { v1 = vD; t1 = 1.; v2 = vE; t2 = 0.; } else { v1 = vE; t1 = 0.; v2 = vD; t2 = 1.; } I->x = (v1*t2 - v2*t1)/(v1 - v2); guint n = 0; gint side = 0; do { t = I->x; gdouble v = gfs_surface_implicit_value (s, segment_intersection (I)); if (v < 0.) { v1 = v; t1 = I->x; if (side == -1) v2 /= 2.; side = -1; } else { v2 = v; t2 = I->x; if (side == +1) v1 /= 2.; side = +1; } if (v2 > v1) I->x = (v1*t2 - v2*t1)/(v1 - v2); n++; } while (fabs (t - I->x) > 1e-5 && n < 100); if (fabs (t - I->x) > 1e-5) g_warning ("gfs_surface_segment_intersection(): convergence could not be reached\n" "after %d iterations, error is %g", n, fabs (t - I->x)); } } else gts_surface_foreach_face (s->s, (GtsFunc) triangle_face_intersection, I); return I->n; } static void surface_normal (GtsTriangle * t, GtsVector n) { GtsVector m; gts_triangle_normal (t, &m[0], &m[1], &m[2]); n[0] -= m[0]; n[1] -= m[1]; n[2] -= m[2]; } static void surface_segment_normal (GfsGenericSurface * s1, FttCell * cell, GfsSegment * I, GtsVector n) { GfsSurface * s = GFS_SURFACE (s1); if (s->f) { FttComponent c; GtsPoint p = segment_intersection (I); for (c = 0; c < FTT_DIMENSION; c++) { GtsPoint p1 = p; (&p1.x)[c] -= 1e-4; gdouble v1 = gfs_surface_implicit_value (s, p1); (&p1.x)[c] += 2e-4; gdouble v2 = gfs_surface_implicit_value (s, p1); n[c] = v2 - v1; } } else { n[0] = n[1] = n[2] = 0.; gts_surface_foreach_face (s->s, (GtsFunc) surface_normal, n); } } static void add_tetrahedron_volume (GtsTriangle * t, gpointer * data) { GtsPoint * p = data[0]; GtsVertex * v1, * v2, * v3; gdouble * vol = data[1]; gts_triangle_vertices (t, &v1, &v2, &v3); *vol += gts_point_orientation_3d (GTS_POINT (v1), GTS_POINT (v2), GTS_POINT (v3), p); } static gint point_is_inside_surface (GfsGenericSurface * s1, FttVector * p) { GfsSurface * s = GFS_SURFACE (s1); GtsPoint q; q.x = p->x; q.y = p->y; q.z = p->z; if (s->f || s->bbtree) { gdouble v = gfs_surface_implicit_value (s, q); return v == 0. ? 0 : v < 0. ? -1 : 1; } else { gdouble vol = 0.; gpointer data[2]; data[0] = &q; data[1] = &vol; gts_surface_foreach_face (s->s, (GtsFunc) add_tetrahedron_volume, data); fprintf (stderr, "vol: %g\n", vol); return vol > 0. ? -1 : 1; } return 0; } static void gfs_surface_class_init (GtsObjectClass * klass) { klass->read = surface_read; klass->write = surface_write; klass->destroy = surface_destroy; GFS_GENERIC_SURFACE_CLASS (klass)->cell_is_cut = cell_is_cut; GFS_GENERIC_SURFACE_CLASS (klass)->segment_intersection = surface_segment_intersection; GFS_GENERIC_SURFACE_CLASS (klass)->segment_normal = surface_segment_normal; GFS_GENERIC_SURFACE_CLASS (klass)->point_is_inside = point_is_inside_surface; } static void gfs_surface_init (GfsSurface * s) { s->scale[0] = 1.; s->scale[1] = 1.; s->scale[2] = 1.; s->flip = FALSE; s->vertex_class = gts_vertex_class (); s->edge_class = gts_edge_class (); s->face_class = gts_face_class (); } GfsGenericSurfaceClass * gfs_surface_class (void) { static GfsGenericSurfaceClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_surface_info = { "GfsSurface", sizeof (GfsSurface), sizeof (GfsGenericSurfaceClass), (GtsObjectClassInitFunc) gfs_surface_class_init, (GtsObjectInitFunc) gfs_surface_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_surface_class ()), &gfs_surface_info); } return klass; } /** * gfs_surface_implicit_value: * @s: an (implicit) #GfsSurface. * @p: a #GtsPoint. * * Returns: the value of the implicit surface a location @p. */ gdouble gfs_surface_implicit_value (GfsSurface * s, GtsPoint p) { g_return_val_if_fail (s != NULL, 0.); g_return_val_if_fail (s->f != NULL || s->bbtree != NULL, 0.); if (s->f) { /* spatial function */ if (s->m) gts_point_transform (&p, s->m); return (s->flip ? -1. : 1.)*gfs_function_spatial_value (s->f, (FttVector *)&p.x) + 1e-20; } else { /* bounding-box tree */ GtsBBox * bbox; gdouble d2 = gts_bb_tree_point_distance (s->bbtree, &p, (GtsBBoxDistFunc) gts_point_triangle_distance2, &bbox); return gts_point_is_inside_surface (&p, s->bbtree, TRUE) ? d2 : - d2; } } /** \endobject{GfsSurface} */ gerris-snapshot-131206/src/cartesian.h0000644000175100017510000000407112250371171014575 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2007 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __CARTESIAN_H__ #define __CARTESIAN_H__ #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* GfsCartesianGrid: Header */ typedef struct _GfsCartesianGrid GfsCartesianGrid; struct _GfsCartesianGrid { /*< private >*/ GtsObject parent; guint N; /* Number of dimensions */ guint * n; /* Size of each dimension */ gdouble ** x; /* Position of each point in the grid */ gdouble * v; /* Data */ gchar ** name; /* Name of each dimension */ /*< public >*/ /* add extra data here (if public) */ }; #define GFS_CARTESIAN_GRID(obj) GTS_OBJECT_CAST (obj,\ GfsCartesianGrid, \ gfs_cartesian_grid_class ()) #define GFS_IS_CARTESIAN_GRID(obj) (gts_object_is_from_class (obj,\ gfs_cartesian_grid_class ())) GtsObjectClass * gfs_cartesian_grid_class (void); GfsCartesianGrid * gfs_cartesian_grid_new (GtsObjectClass * klass); GfsCartesianGrid * gfs_cartesian_grid_read (const gchar * name, GtsFile * fp); gboolean gfs_cartesian_grid_interpolate (GfsCartesianGrid * g, gdouble * p, gdouble * val); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __CARTESIAN_H__ */ gerris-snapshot-131206/src/adaptive.c0000644000175100017510000011564212250371171014423 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Adaptive mesh refinement. */ #include #include #include "adaptive.h" #include "solid.h" #include "init.h" #include "vof.h" #include "graphic.h" /*#define DEBUG*/ /** * gfs_cell_coarse_init: * @cell: a #FttCell. * @domain: a #GfsDomain containing @cell. * * Initialises the variables of @cell using the values of its children * cells. */ void gfs_cell_coarse_init (FttCell * cell, GfsDomain * domain) { GSList * i; g_return_if_fail (cell != NULL); g_return_if_fail (!FTT_CELL_IS_LEAF (cell)); g_return_if_fail (domain != NULL); i = domain->variables; while (i) { GfsVariable * v = i->data; (* v->fine_coarse) (cell, v); i = i->next; } } /** * Base class for adaptive refinement criteria. * \beginobject{GfsAdapt} */ typedef struct { GfsSimulation * sim; guint nc; GtsEHeap * hcoarse, * hfine; gdouble clim; GfsVariable * hcoarsev, * hfinev, * costv, * c; } AdaptParams; static void gfs_adapt_destroy (GtsObject * o) { gts_object_destroy (GTS_OBJECT (GFS_ADAPT (o)->minlevel)); gts_object_destroy (GTS_OBJECT (GFS_ADAPT (o)->maxlevel)); (* GTS_OBJECT_CLASS (gfs_adapt_class ())->parent_class->destroy) (o); } static void none (FttCell * cell, GfsVariable * v) {} static void gfs_adapt_read (GtsObject ** o, GtsFile * fp) { GfsAdapt * a = GFS_ADAPT (*o); if (GTS_OBJECT_CLASS (gfs_adapt_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_adapt_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } fp->scope_max++; gts_file_next_token (fp); while (fp->type != GTS_ERROR && fp->type != '}') { if (fp->type == '\n') { gts_file_next_token (fp); continue; } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a keyword"); return; } else if (!strcmp (fp->token->str, "minlevel")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (a->minlevel, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "maxlevel")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (a->maxlevel, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "mincells")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (mincells)"); return; } a->mincells = atoi (fp->token->str); gts_file_next_token (fp); } else if (!strcmp (fp->token->str, "maxcells")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (maxcells)"); return; } a->maxcells = atoi (fp->token->str); gts_file_next_token (fp); } else if (!strcmp (fp->token->str, "cmax")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); a->cmax = gfs_read_constant (fp, gfs_object_simulation (*o)); if (fp->type == GTS_ERROR) return; } else if (!strcmp (fp->token->str, "weight")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); a->weight = gfs_read_constant (fp, gfs_object_simulation (*o)); if (fp->type == GTS_ERROR) return; } else if (!strcmp (fp->token->str, "cfactor")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); a->cfactor = gfs_read_constant (fp, gfs_object_simulation (*o)); if (fp->type == GTS_ERROR) return; } else if (!strcmp (fp->token->str, "c")) { GfsDomain * domain; gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable name"); return; } domain = GFS_DOMAIN (gfs_object_simulation (*o)); a->c = gfs_domain_get_or_add_variable (domain, fp->token->str, "Adaptive refinement cost"); if (!a->c) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } a->c->fine_coarse = none; gts_file_next_token (fp); } else { gts_file_error (fp, "unknown keyword `%s'", fp->token->str); return; } } if (fp->type == GTS_ERROR) return; if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); /* make sure that adaptivity is applied in gfs_simulation_init() if required */ if (GFS_EVENT (a)->start == 0. || GFS_EVENT (a)->istart == 0) GFS_EVENT (a)->start = -1; } static void gfs_adapt_write (GtsObject * o, FILE * fp) { GfsAdapt * a = GFS_ADAPT (o); if (GTS_OBJECT_CLASS (gfs_adapt_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_adapt_class ())->parent_class->write) (o, fp); fputs (" { minlevel =", fp); gfs_function_write (a->minlevel, fp); fputs (" maxlevel =", fp); gfs_function_write (a->maxlevel, fp); fputc (' ', fp); if (a->mincells > 0) fprintf (fp, "mincells = %u ", a->mincells); if (a->maxcells < G_MAXINT) fprintf (fp, "maxcells = %u ", a->maxcells); if (a->cmax > 0.) fprintf (fp, "cmax = %g ", a->cmax); if (a->weight != 1.) fprintf (fp, "weight = %g ", a->weight); if (a->cfactor != 4.) fprintf (fp, "cfactor = %g ", a->cfactor); if (a->c != NULL) fprintf (fp, "c = %s ", a->c->name); fputc ('}', fp); } static gboolean gfs_adapt_event (GfsEvent * event, GfsSimulation * sim) { if (GFS_ADAPT (event)->cost == NULL) { gts_object_destroy (GTS_OBJECT (event)); return FALSE; } if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_adapt_class ())->parent_class)->event) (event, sim)) { GFS_ADAPT (event)->active = TRUE; return TRUE; } GFS_ADAPT (event)->active = FALSE; return FALSE; } static void save_cost (FttCell * cell, GfsAdapt * a) { GFS_VALUE (cell, a->c) = (* a->cost) (cell, a); } static void gfs_adapt_post_event (GfsEvent * event, GfsSimulation * sim) { GfsAdapt * a = GFS_ADAPT (event); if (a->active && a->c) gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) save_cost, a); } static void gfs_adapt_class_init (GfsEventClass * klass) { klass->event = gfs_adapt_event; klass->post_event = gfs_adapt_post_event; GTS_OBJECT_CLASS (klass)->destroy = gfs_adapt_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_adapt_read; GTS_OBJECT_CLASS (klass)->write = gfs_adapt_write; } static void gfs_adapt_init (GfsAdapt * object) { object->active = FALSE; object->minlevel = gfs_function_new (gfs_function_class (), 0); object->maxlevel = gfs_function_new (gfs_function_class (), 5); object->mincells = 0; object->maxcells = G_MAXINT; object->cmax = 0.; object->weight = 1.; object->cfactor = 4.; object->c = NULL; } GfsEventClass * gfs_adapt_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_adapt_info = { "GfsAdapt", sizeof (GfsAdapt), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_adapt_class_init, (GtsObjectInitFunc) gfs_adapt_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_adapt_info); } return klass; } /** * Adapting cells depending on the local vorticity. * \beginobject{GfsAdaptVorticity} */ static gboolean gfs_adapt_vorticity_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_adapt_vorticity_class ())->parent_class)->event) (event, sim)) { GfsAdaptVorticity * a = GFS_ADAPT_VORTICITY (event); a->u = gfs_domain_velocity (GFS_DOMAIN (sim)); a->maxa = gfs_domain_norm_velocity (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1).infty; return TRUE; } return FALSE; } static void gfs_adapt_vorticity_class_init (GfsEventClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_adapt_vorticity_event; } static gdouble cost_vorticity (FttCell * cell, GfsAdaptVorticity * a) { if (a->maxa <= 0.) return 0.; return fabs (gfs_vorticity (cell, a->u))*ftt_cell_size (cell)/a->maxa; } static void gfs_adapt_vorticity_init (GfsAdaptVorticity * object) { GFS_ADAPT (object)->cost = (GtsKeyFunc) cost_vorticity; } GfsEventClass * gfs_adapt_vorticity_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_adapt_vorticity_info = { "GfsAdaptVorticity", sizeof (GfsAdaptVorticity), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_adapt_vorticity_class_init, (GtsObjectInitFunc) gfs_adapt_vorticity_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_adapt_class ()), &gfs_adapt_vorticity_info); } return klass; } /** \endobject{GfsAdaptVorticity} */ /** * * \beginobject{GfsAdaptStreamlineCurvature} */ static void gfs_adapt_streamline_curvature_init (GfsAdapt * object) { object->cost = (GtsKeyFunc) gfs_streamline_curvature; } GfsEventClass * gfs_adapt_streamline_curvature_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_adapt_streamline_curvature_info = { "GfsAdaptStreamlineCurvature", sizeof (GfsAdapt), sizeof (GfsEventClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) gfs_adapt_streamline_curvature_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_adapt_class ()), &gfs_adapt_streamline_curvature_info); } return klass; } /** \endobject{GfsAdaptStreamlineCurvature} */ /** * Adapting cells depending on the value of a function. * \beginobject{GfsAdaptFunction} */ static void gfs_adapt_function_destroy (GtsObject * o) { gts_object_destroy (GTS_OBJECT (GFS_ADAPT_FUNCTION (o)->f)); (* GTS_OBJECT_CLASS (gfs_adapt_function_class ())->parent_class->destroy) (o); } static void gfs_adapt_function_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_adapt_function_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; gfs_function_read (GFS_ADAPT_FUNCTION (*o)->f, gfs_object_simulation (*o), fp); } static void gfs_adapt_function_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_adapt_function_class ())->parent_class->write) (o, fp); gfs_function_write (GFS_ADAPT_FUNCTION (o)->f, fp); } static void gfs_adapt_function_class_init (GtsObjectClass * klass) { klass->destroy = gfs_adapt_function_destroy; klass->read = gfs_adapt_function_read; klass->write = gfs_adapt_function_write; } static gdouble function_cost (FttCell * cell, GfsAdaptFunction * a) { return gfs_function_value (a->f, cell); } static void gfs_adapt_function_init (GfsAdaptFunction * object) { object->f = gfs_function_new (gfs_function_class (), 0.); GFS_ADAPT (object)->cost = (GtsKeyFunc) function_cost; } GfsEventClass * gfs_adapt_function_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_adapt_function_info = { "GfsAdaptFunction", sizeof (GfsAdaptFunction), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_adapt_function_class_init, (GtsObjectInitFunc) gfs_adapt_function_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_adapt_class ()), &gfs_adapt_function_info); } return klass; } /** \endobject{GfsAdaptFunction} */ /** * Adapting cells depending on the local gradient of a variable. * \beginobject{GfsAdaptGradient} */ static void gfs_adapt_gradient_destroy (GtsObject * o) { if (GFS_ADAPT_GRADIENT (o)->v && !gfs_function_get_variable (GFS_ADAPT_FUNCTION (o)->f)) gts_object_destroy (GTS_OBJECT (GFS_ADAPT_GRADIENT (o)->v)); (* GTS_OBJECT_CLASS (gfs_adapt_gradient_class ())->parent_class->destroy) (o); } static void gfs_adapt_gradient_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_adapt_gradient_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsAdaptGradient * a = GFS_ADAPT_GRADIENT (*o); a->v = gfs_function_get_variable (GFS_ADAPT_FUNCTION (a)->f); if (a->v == NULL) a->v = gfs_temporary_variable (GFS_DOMAIN (gfs_object_simulation (a))); } static void update_f (FttCell * cell, GfsAdaptFunction * a) { GFS_VALUE (cell, GFS_ADAPT_GRADIENT (a)->v) = gfs_function_value (a->f, cell); } static gboolean gfs_adapt_gradient_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_adapt_gradient_class ())->parent_class)->event) (event, sim)) { GfsAdaptGradient * a = GFS_ADAPT_GRADIENT (event); a->dimension = pow (sim->physical_params.L, a->v->units); if (!gfs_function_get_variable (GFS_ADAPT_FUNCTION (event)->f)) { gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) update_f, event); gfs_restore_fpe_for_function (GFS_ADAPT_FUNCTION (event)->f); gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) a->v->fine_coarse, a->v); } gfs_domain_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_ALL, -1, a->v); return TRUE; } return FALSE; } static void gfs_adapt_gradient_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = gfs_adapt_gradient_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_adapt_gradient_read; klass->event = gfs_adapt_gradient_event; } static gdouble gradient_cost (FttCell * cell, GfsAdaptGradient * a) { FttComponent c; gdouble sum2 = 0; gdouble * lambda; lambda = (gdouble *) &GFS_DOMAIN (gfs_object_simulation (a))->lambda; for (c = 0; c < FTT_DIMENSION; c++) { gdouble g = lambda[c]*gfs_center_gradient (cell, c, a->v->i); sum2 += g*g; } return sqrt (sum2)*a->dimension; } static void gfs_adapt_gradient_init (GfsAdaptGradient * object) { GFS_ADAPT (object)->cost = (GtsKeyFunc) gradient_cost; GFS_ADAPT_GRADIENT (object)->dimension = 1.; } GfsEventClass * gfs_adapt_gradient_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_adapt_gradient_info = { "GfsAdaptGradient", sizeof (GfsAdaptGradient), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_adapt_gradient_class_init, (GtsObjectInitFunc) gfs_adapt_gradient_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_adapt_function_class ()), &gfs_adapt_gradient_info); } return klass; } /** \endobject{GfsAdaptGradient} */ /** * Adapting using an a posteriori error estimate. * \beginobject{GfsAdaptError} */ static void gfs_adapt_error_destroy (GtsObject * o) { if (GFS_ADAPT_ERROR (o)->v != GFS_ADAPT (o)->c) gts_object_destroy (GTS_OBJECT (GFS_ADAPT_ERROR (o)->v)); (* GTS_OBJECT_CLASS (gfs_adapt_error_class ())->parent_class->destroy) (o); } static void gfs_adapt_error_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_adapt_error_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GFS_ADAPT_ERROR (*o)->v = GFS_ADAPT (*o)->c ? GFS_ADAPT (*o)->c : gfs_temporary_variable (GFS_DOMAIN (gfs_object_simulation (*o))); GFS_ADAPT_ERROR (*o)->v->coarse_fine = none; GFS_ADAPT_ERROR (*o)->v->fine_coarse = none; } static void compute_gradient (FttCell * cell, GfsAdaptError * a) { GFS_VALUE (cell, a->dv[a->c]) = gfs_center_regular_gradient (cell, a->c, GFS_ADAPT_GRADIENT (a)->v); } static void add_hessian_norm (FttCell * cell, GfsAdaptError * a) { /* off-diagonal */ FttComponent j; for (j = 0; j < FTT_DIMENSION; j++) if (j != a->c) { gdouble g = gfs_center_regular_gradient (cell, j, a->dv[a->c]); GFS_VALUE (cell, a->v) += g*g; } /* diagonal */ gdouble g = gfs_center_regular_2nd_derivative (cell, a->c, GFS_ADAPT_GRADIENT (a)->v); GFS_VALUE (cell, a->v) += g*g; } static void scale (FttCell * cell, GfsAdaptError * a) { GFS_VALUE (cell, a->v) = sqrt (GFS_VALUE (cell, a->v))/8.*GFS_ADAPT_GRADIENT (a)->dimension; } static gboolean gfs_adapt_error_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_adapt_error_class ())->parent_class)->event) (event, sim)) { GfsAdaptError * a = GFS_ADAPT_ERROR (event); GfsDomain * domain = GFS_DOMAIN (sim); gfs_domain_bc (domain, FTT_TRAVERSE_ALL, -1, GFS_ADAPT_GRADIENT (a)->v); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_reset, a->v); for (a->c = 0; a->c < FTT_DIMENSION; a->c++) { a->dv[a->c] = gfs_temporary_variable (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) compute_gradient, a); } gfs_variable_set_vector (a->dv, FTT_DIMENSION); for (a->c = 0; a->c < FTT_DIMENSION; a->c++) { gfs_domain_bc (domain, FTT_TRAVERSE_ALL, -1, a->dv[a->c]); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) add_hessian_norm, a); } gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) scale, a); for (a->c = 0; a->c < FTT_DIMENSION; a->c++) gts_object_destroy (GTS_OBJECT (a->dv[a->c])); return TRUE; } return FALSE; } static void gfs_adapt_error_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = gfs_adapt_error_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_adapt_error_read; GFS_EVENT_CLASS (klass)->event = gfs_adapt_error_event; } static gdouble cost_error (FttCell * cell, GfsAdaptError * a) { return GFS_VALUE (cell, a->v); } static void gfs_adapt_error_init (GfsAdapt * object) { object->cost = (GtsKeyFunc) cost_error; object->cfactor = 2.; } GfsEventClass * gfs_adapt_error_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_adapt_error_info = { "GfsAdaptError", sizeof (GfsAdaptError), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_adapt_error_class_init, (GtsObjectInitFunc) gfs_adapt_error_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_adapt_gradient_class ()), &gfs_adapt_error_info); } return klass; } /** \endobject{GfsAdaptError} */ /** * Adapting cells depending on the local "thickness" of a VOF defined interface. * \beginobject{GfsAdaptThickness} */ static void gfs_adapt_thickness_destroy (GtsObject * o) { if (GFS_ADAPT_THICKNESS (o)->c) gts_object_destroy (GTS_OBJECT (GFS_ADAPT_THICKNESS (o)->c)); (* GTS_OBJECT_CLASS (gfs_adapt_thickness_class ())->parent_class->destroy) (o); } static void gfs_adapt_thickness_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_adapt_thickness_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable name"); return; } GfsAdaptThickness * a = GFS_ADAPT_THICKNESS (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (a)); a->v = gfs_variable_from_name (domain->variables, fp->token->str); if (a->v == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } if (!GFS_IS_VARIABLE_TRACER_VOF_HEIGHT (a->v)) { gts_file_error (fp, "expecting a VariableTracerVOFHeight"); return; } gts_file_next_token (fp); a->c = gfs_domain_add_variable (domain, NULL, NULL); a->c->coarse_fine = none; a->c->fine_coarse = none; } static void gfs_adapt_thickness_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_adapt_thickness_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", GFS_ADAPT_THICKNESS (o)->v->name); } static void update_thickness (FttCell * cell, GfsAdapt * a) { GfsVariable * v = GFS_ADAPT_THICKNESS (a)->c; GfsVariable * f = GFS_ADAPT_THICKNESS (a)->v; if (GFS_VALUE (cell, f) <= 0. || GFS_VALUE (cell, f) >= 1.) GFS_VALUE (cell, v) = G_MAXDOUBLE; else { GfsVariableTracerVOFHeight * t = GFS_VARIABLE_TRACER_VOF_HEIGHT (f); FttCell * parent = ftt_cell_parent (cell); gdouble thickness = (!parent || GFS_VALUE (parent, v) == G_MAXDOUBLE) ? G_MAXDOUBLE : 2.*GFS_VALUE (parent, v); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) if (GFS_HAS_DATA (cell, t->hb[c]) && GFS_HAS_DATA (cell, t->ht[c])) { gdouble d = fabs (GFS_VALUE (cell, t->hb[c]) + GFS_VALUE (cell, t->ht[c])); if (d < thickness) thickness = d; } GFS_VALUE (cell, v) = thickness; } } static gboolean gfs_adapt_thickness_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_adapt_thickness_class ())->parent_class)->event) (event, sim)) { gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) update_thickness, event); return TRUE; } return FALSE; } static void gfs_adapt_thickness_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = gfs_adapt_thickness_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_adapt_thickness_read; GTS_OBJECT_CLASS (klass)->write = gfs_adapt_thickness_write; klass->event = gfs_adapt_thickness_event; } static gdouble thickness_cost (FttCell * cell, GfsAdaptThickness * a) { return GFS_VALUE (cell, a->c) > 0. ? 1./GFS_VALUE (cell, a->c) : G_MAXDOUBLE; } static void gfs_adapt_thickness_init (GfsAdaptThickness * object) { GfsAdapt * a = GFS_ADAPT (object); a->cost = (GtsKeyFunc) thickness_cost; a->cmax = 1./3.; a->cfactor = 1.1; } GfsEventClass * gfs_adapt_thickness_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsAdaptThickness", sizeof (GfsAdaptThickness), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_adapt_thickness_class_init, (GtsObjectInitFunc) gfs_adapt_thickness_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_adapt_class ()), &info); } return klass; } /** \endobject{GfsAdaptThickness} */ static void refine_cell_corner (FttCell * cell, GfsDomain * domain) { if (FTT_CELL_IS_LEAF (cell) && ftt_refine_corner (cell)) ftt_cell_refine_single (cell, domain->cell_init, domain->cell_init_data); } /** * @domain: a #GfsDomain. * @depth: the depth of @domain. * * Force the grading of the tree hierarchy of domain, matches the * boundaries, recomputes merged cells and applies the boundary * conditions for all variables. */ void gfs_domain_reshape (GfsDomain * domain, guint depth) { gint l; g_return_if_fail (domain != NULL); for (l = depth - 2; l >= 0; l--) gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, l, (FttCellTraverseFunc) refine_cell_corner, domain); gfs_domain_match (domain); gfs_set_merged (domain); GSList * i = domain->variables; while (i) { gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, i->data); i = i->next; } i = domain->projections; while (i) { gfs_domain_projection_reshape (i->data); i = i->next; } } #define CELL_COST(cell) (GFS_VALUE (cell, p->costv)) #define CELL_HCOARSE(c) (GFS_DOUBLE_TO_POINTER (GFS_VALUE (c, p->hcoarsev))) #define CELL_HFINE(c) (GFS_DOUBLE_TO_POINTER (GFS_VALUE (c, p->hfinev))) static FttCell * remove_top_coarse (GtsEHeap * h, gdouble * cost, GfsVariable * hcoarse) { FttCell * cell = gts_eheap_remove_top (h, cost); if (cell) GFS_VALUE (cell, hcoarse) = 0.; while (cell && !FTT_CELL_IS_LEAF (cell)) { cell = gts_eheap_remove_top (h, cost); if (cell) GFS_VALUE (cell, hcoarse) = 0.; } return cell; } static FttCell * remove_top_fine (GtsEHeap * h, gdouble * cost, GfsVariable * hfine) { FttCell * cell = gts_eheap_remove_top (h, cost); if (cell) GFS_VALUE (cell, hfine) = 0.; while (cell && ftt_cell_depth (cell) - ftt_cell_level (cell) != 1) { cell = gts_eheap_remove_top (h, cost); if (cell) GFS_VALUE (cell, hfine) = 0.; } return cell; } static gdouble refine_cost (FttCell * cell, GfsSimulation * sim) { GSList * i = sim->adapts->items; gdouble cost = 0.; while (i) { GfsAdapt * a = i->data; if (a->active && a->cost) cost += a->weight*(* a->cost) (cell, a); i = i->next; } return cost; } static void compute_cost (FttCell * cell, AdaptParams * p) { gdouble cost = refine_cost (cell, p->sim); GFS_VALUE (cell, p->hcoarsev) = GFS_VALUE (cell, p->hfinev) = 0.; if (FTT_CELL_IS_LEAF (cell)) CELL_COST (cell) = cost; else { FttCellChildren child; FttCellNeighbors n; guint i, level = ftt_cell_level (cell); FttCell * parent; gdouble cmax = 0.; ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i] && CELL_COST (child.c[i]) > cmax) cmax = CELL_COST (child.c[i]); if (cmax > cost) cost = cmax; if (cost > CELL_COST (cell)) CELL_COST (cell) = cost; ftt_cell_neighbors (cell, &n); for (i = 0; i < FTT_NEIGHBORS; i++) if (n.c[i] && ftt_cell_level (n.c[i]) == level && (parent = ftt_cell_parent (n.c[i])) && cmax > CELL_COST (parent)) CELL_COST (parent) = cmax; } p->nc++; } static void store_cost (FttCell * cell, AdaptParams * p) { GFS_VALUE (cell, p->c) = CELL_COST (cell); } static guint minlevel (FttCell * cell, GfsSimulation * sim) { guint minlevel = 0; GSList * i = sim->adapts->items; while (i) { GfsAdapt * a = i->data; guint l; if (a->active && (l = gfs_function_value (a->minlevel, cell)) > minlevel) minlevel = l; i = i->next; } return minlevel; } static guint maxlevel (FttCell * cell, GfsSimulation * sim) { GSList * i = sim->adapts->items; guint maxlevel = G_MAXINT; while (i) { GfsAdapt * a = i->data; guint l; if (a->active && (l = gfs_function_value (a->maxlevel, cell)) < maxlevel) maxlevel = l; i = i->next; } return maxlevel; } static void fill_heaps (FttCell * cell, AdaptParams * p) { guint level = ftt_cell_level (cell); FttCell * parent = ftt_cell_parent (cell); if (level < maxlevel (cell, p->sim)) GFS_DOUBLE_TO_POINTER (GFS_VALUE (cell, p->hcoarsev)) = gts_eheap_insert_with_key (p->hcoarse, cell, - CELL_COST (cell)); if (parent && !GFS_CELL_IS_PERMANENT (parent) && GFS_VALUE (parent, p->hfinev) == 0. && level > minlevel (parent, p->sim)) GFS_DOUBLE_TO_POINTER (GFS_VALUE (parent, p->hfinev)) = gts_eheap_insert_with_key (p->hfine, parent, CELL_COST (parent)); } static gboolean fine_cell_coarsenable (FttCell * cell, AdaptParams * p) { if (GFS_CELL_IS_BOUNDARY (cell)) return TRUE; if (GFS_CELL_IS_PERMANENT (cell)) return FALSE; if (CELL_COST (cell) >= -p->clim) return FALSE; if (ftt_cell_level (cell) < minlevel (cell, p->sim)) return FALSE; if (ftt_refine_corner (cell)) return FALSE; return TRUE; } static void fine_cell_cleanup (FttCell * cell, AdaptParams * p) { if (!GFS_CELL_IS_BOUNDARY (cell)) { gpointer o; p->nc--; if ((o = CELL_HCOARSE (cell))) gts_eheap_remove (p->hcoarse, o); if ((o = CELL_HFINE (cell))) gts_eheap_remove (p->hfine, o); } gfs_cell_cleanup (cell, GFS_DOMAIN (p->sim)); } static void cell_fine_init (FttCell * cell, AdaptParams * p) { FttCellChildren child; GfsDomain * domain = GFS_DOMAIN (p->sim); guint n; (* domain->cell_init) (cell, domain->cell_init_data); ftt_cell_children (cell, &child); for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) CELL_COST (child.c[n]) = G_MAXDOUBLE; if (!GFS_CELL_IS_BOUNDARY (cell)) p->nc += FTT_CELLS; } static gboolean adapt_global (GfsSimulation * simulation, guint * depth, GfsAdaptStats * s, guint mincells, guint maxcells, GfsVariable * c, gdouble cmax) { GfsDomain * domain = GFS_DOMAIN (simulation); gint l; gdouble ccoarse = 0., cfine = 0.; FttCell * coarse, * fine; gboolean changed = TRUE, global_changed = FALSE; AdaptParams apar; apar.sim = simulation; apar.nc = 0; apar.costv = gfs_temporary_variable (domain); apar.hcoarsev = gfs_temporary_variable (domain); apar.hfinev = gfs_temporary_variable (domain); apar.hcoarse = gts_eheap_new (NULL, NULL); apar.hfine = gts_eheap_new (NULL, NULL); apar.c = c; gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_reset, apar.costv); for (l = *depth; l >= 0; l--) gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, l, (FttCellTraverseFunc) compute_cost, &apar); if (apar.c) gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) store_cost, &apar); gts_eheap_freeze (apar.hcoarse); gts_eheap_freeze (apar.hfine); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) fill_heaps, &apar); gts_eheap_thaw (apar.hcoarse); gts_eheap_thaw (apar.hfine); coarse = remove_top_coarse (apar.hcoarse, &ccoarse, apar.hcoarsev); fine = remove_top_fine (apar.hfine, &cfine, apar.hfinev); #ifdef DEBUG fprintf (stderr, "initial: %g %g %d\n", cfine, -ccoarse, apar.nc); #endif /* DEBUG */ while (changed) { #ifdef DEBUG fprintf (stderr, "%g %g %d\n", cfine, -ccoarse, apar.nc); #endif /* DEBUG */ changed = FALSE; if (fine && ((cfine < -ccoarse && apar.nc > maxcells) || (cfine < cmax && apar.nc >= mincells))) { guint n = apar.nc; apar.clim = MIN (ccoarse, -cmax); ftt_cell_coarsen (fine, (FttCellCoarsenFunc) fine_cell_coarsenable, &apar, (FttCellCleanupFunc) fine_cell_cleanup, &apar); #ifdef DEBUG fprintf (stderr, "coarsen: %d\n", apar.nc); #endif /* DEBUG */ fine = remove_top_fine (apar.hfine, &cfine, apar.hfinev); s->removed += n - apar.nc; changed = global_changed = TRUE; } if (coarse && ((-ccoarse > cfine && apar.nc < mincells) || (-ccoarse > cmax && apar.nc <= maxcells))) { guint level = ftt_cell_level (coarse), n = apar.nc; ftt_cell_refine_corners (coarse, (FttCellInitFunc) cell_fine_init, &apar); ftt_cell_refine_single (coarse, (FttCellInitFunc) cell_fine_init, &apar); if (level + 1 > *depth) *depth = level + 1; #ifdef DEBUG fprintf (stderr, "refine: %d\n", apar.nc); #endif /* DEBUG */ coarse = remove_top_coarse (apar.hcoarse, &ccoarse, apar.hcoarsev); s->created += apar.nc - n; changed = global_changed = TRUE; } } gts_range_add_value (&s->cmax, -ccoarse); gts_range_add_value (&s->ncells, apar.nc); gts_eheap_destroy (apar.hcoarse); gts_eheap_destroy (apar.hfine); gts_object_destroy (GTS_OBJECT (apar.costv)); gts_object_destroy (GTS_OBJECT (apar.hcoarsev)); gts_object_destroy (GTS_OBJECT (apar.hfinev)); return global_changed; } typedef struct { GfsSimulation * sim; guint depth, nc; GfsVariable * r, * c; GfsAdaptStats * s; gboolean changed; } AdaptLocalParams; #define REFINABLE(cell, p) (GFS_VALUE (cell, (p)->r)) #define COARSENABLE(cell, p) (GFS_VALUE (cell, (p)->c)) static gboolean coarsen_cell (FttCell * cell, AdaptLocalParams * p) { if (GFS_CELL_IS_BOUNDARY (cell)) return COARSENABLE (cell, p); if (ftt_refine_corner (cell)) return FALSE; return COARSENABLE (cell, p); } static void cell_cleanup (FttCell * cell, AdaptLocalParams * p) { if (!GFS_CELL_IS_BOUNDARY (cell)) { p->s->removed++; p->nc--; } p->changed = TRUE; gfs_cell_cleanup (cell, GFS_DOMAIN (p->sim)); } static void coarsen_box (GfsBox * box, AdaptLocalParams * p) { ftt_cell_coarsen (box->root, (FttCellCoarsenFunc) coarsen_cell, p, (FttCellCleanupFunc) cell_cleanup, p); } static void local_cell_fine_init (FttCell * parent, AdaptLocalParams * p) { GfsDomain * domain = GFS_DOMAIN (p->sim); (* domain->cell_init) (parent, domain->cell_init_data); if (!GFS_CELL_IS_BOUNDARY (parent)) { p->s->created += FTT_CELLS; p->nc += FTT_CELLS; } } static void refine_cell (FttCell * cell, AdaptLocalParams * p) { if (REFINABLE (cell, p)) { guint level = ftt_cell_level (cell); ftt_cell_refine_corners (cell, (FttCellInitFunc) local_cell_fine_init, p); ftt_cell_refine_single (cell, (FttCellInitFunc) local_cell_fine_init, p); if (level + 1 > p->depth) p->depth = level + 1; p->changed = TRUE; } } static void refine_cell_mark (FttCell * cell, AdaptLocalParams * p) { p->nc++; REFINABLE (cell, p) = FALSE; COARSENABLE (cell, p) = !GFS_CELL_IS_PERMANENT (cell) && !ftt_refine_corner (cell); guint level = ftt_cell_level (cell); GSList * i = p->sim->adapts->items; while (i) { GfsAdapt * a = i->data; if (a->active) { guint minlevel = gfs_function_value (a->minlevel, cell); guint maxlevel = gfs_function_value (a->maxlevel, cell); if (FTT_CELL_IS_LEAF (cell) && (level < minlevel || (level < maxlevel && (* a->cost) (cell, a) > a->cmax))) { REFINABLE (cell, p) = TRUE; COARSENABLE (cell, p) = FALSE; return; } if (level < minlevel || (level < maxlevel && (* a->cost) (cell, a) > a->cmax/a->cfactor)) COARSENABLE (cell, p) = FALSE; } i = i->next; } if (!FTT_CELL_IS_LEAF (cell)) { FttCell * parent = ftt_cell_parent (cell); if (parent) COARSENABLE (parent, p) = FALSE; } } static void check_periodic (FttCellFace * f, AdaptLocalParams * p) { g_assert (ftt_face_type (f) == FTT_FINE_FINE); if (!COARSENABLE (f->cell, p)) COARSENABLE (f->neighbor, p) = FALSE; } static void enforce_periodic (GfsBox * box, AdaptLocalParams * p) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (GFS_IS_BOUNDARY_PERIODIC (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); ftt_face_traverse_boundary (b->root, b->d, FTT_PRE_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttFaceTraverseFunc) check_periodic, p); } } static gboolean adapt_local (GfsSimulation * sim, guint * depth, GfsAdaptStats * s) { GfsDomain * domain = GFS_DOMAIN (sim); AdaptLocalParams p; p.sim = sim; p.depth = *depth; p.r = gfs_temporary_variable (domain); p.c = gfs_temporary_variable (domain); p.s = s; p.nc = 0; p.changed = FALSE; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) refine_cell_mark, &p); gfs_domain_bc (domain, FTT_TRAVERSE_NON_LEAFS, -1, p.c); /* enforce fine/fine faces on periodic/MPI boundaries */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) enforce_periodic, &p); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) refine_cell, &p); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) coarsen_box, &p); gts_object_destroy (GTS_OBJECT (p.r)); gts_object_destroy (GTS_OBJECT (p.c)); *depth = p.depth; gts_range_add_value (&s->ncells, p.nc); return p.changed; } /** * gfs_simulation_adapt: * @simulation: a #GfsSimulation. * * Checks if any mesh adaptation is necessary and adapts the mesh * using an OR combination of all the regular criteria defined in * @simulation->adapts. * * If any one or several criteria are defined as "not" refinements, * the mesh will be refined only if all of this criteria AND any other * regular criterion is verified. * * Returns: %TRUE if the mesh changed, %FALSE otherwise. */ gboolean gfs_simulation_adapt (GfsSimulation * simulation) { gboolean active = FALSE; guint mincells = 0, maxcells = G_MAXINT; GfsDomain * domain; gdouble cmax = 0.; GfsVariable * c = NULL; g_return_val_if_fail (simulation != NULL, FALSE); domain = GFS_DOMAIN (simulation); gfs_domain_timer_start (domain, "adapt"); GSList * i = simulation->adapts->items; while (i) { GfsAdapt * a = i->data; if (a->active) { if (a->maxcells < maxcells) maxcells = a->maxcells; if (a->mincells > mincells) mincells = a->mincells; cmax += a->cmax; active = TRUE; if (a->c) c = a->c; } i = i->next; } gboolean changed = FALSE; if (active) { guint depth = gfs_domain_depth (domain), depth_before = depth; if (maxcells < G_MAXINT) changed = adapt_global (simulation, &depth, &simulation->adapts_stats, mincells, maxcells, c, cmax); else changed = adapt_local (simulation, &depth, &simulation->adapts_stats); gfs_all_reduce (domain, changed, MPI_INT, MPI_MAX); if (changed) { gfs_domain_reshape (domain, depth); gfs_all_reduce (domain, depth, MPI_UNSIGNED, MPI_MAX); simulation->adapts_stats.depth_increase = depth - depth_before; /* hydrostatic pressure */ GSList * i = domain->variables; while (i) { if (GTS_OBJECT (i->data)->klass == GTS_OBJECT_CLASS (gfs_hydrostatic_pressure_class ())) gfs_hydrostatic_pressure_update (i->data, simulation->physical_params.alpha); i = i->next; } } } gfs_domain_timer_stop (domain, "adapt"); return changed; } /** * gfs_adapt_stats_init: * @s: the #GfsAdaptStats. * * Initializes or reset @s. */ void gfs_adapt_stats_init (GfsAdaptStats * s) { g_return_if_fail (s != NULL); s->removed = 0; s->created = 0; gts_range_init (&s->cmax); gts_range_init (&s->ncells); s->depth_increase = 0; } /** * gfs_adapt_stats_update: * @s: the #GfsAdaptStats. * * Updates @s. */ void gfs_adapt_stats_update (GfsAdaptStats * s) { g_return_if_fail (s != NULL); gts_range_update (&s->cmax); gts_range_update (&s->ncells); } /** \endobject{GfsAdapt} */ gerris-snapshot-131206/src/advection.c0000644000175100017510000007316312250371171014603 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Advection scheme. */ #include #include "advection.h" #include "source.h" static gdouble transverse_term (FttCell * cell, gdouble * msize, FttComponent c, const GfsAdvectionParams * par) { GfsStateVector * s = GFS_STATE (cell); gdouble vtan = par->use_centered_velocity ? GFS_VALUE (cell, par->u[c]) : (s->f[2*c].un + s->f[2*c + 1].un)/2.; FttCellFace f; GfsGradient gf; gdouble g; f.d = vtan > 0. ? 2*c + 1 : 2*c; f.cell = cell; f.neighbor = ftt_cell_neighbor (cell, f.d); gfs_face_gradient (&f, &gf, par->v->i, -1); g = gf.b - gf.a*GFS_VALUE (cell, par->v); if (vtan > 0.) g = - g; return par->dt*vtan*g/(2.*msize[c]); } /** * gfs_cell_advected_face_values: * @cell: a #FttCell. * @par: the advection parameters. * * Fills the face variable (@v field of #GfsFaceStateVector) of all the * faces of @cell with the advected value of variable @par->v at time * t + dt/2. */ void gfs_cell_advected_face_values (FttCell * cell, const GfsAdvectionParams * par) { g_return_if_fail (cell != NULL); g_return_if_fail (par != NULL); GfsStateVector * s = GFS_STATE (cell); gdouble size = ftt_cell_size (cell), msize[FTT_DIMENSION]; FttComponent c; if (par->v->domain->scale_metric) for (c = 0; c < FTT_DIMENSION; c++) msize[c] = size*(* par->v->domain->scale_metric) (par->v->domain, cell, c); else for (c = 0; c < FTT_DIMENSION; c++) msize[c] = size; for (c = 0; c < FTT_DIMENSION; c++) { gdouble unorm = par->use_centered_velocity ? par->dt*GFS_VALUE (cell, par->u[c])/msize[c] : par->dt*(s->f[2*c].un + s->f[2*c + 1].un)/(2.*msize[c]); gdouble g = (* par->gradient) (cell, c, par->v->i); gdouble vl = GFS_VALUE (cell, par->v) + MIN ((1. - unorm)/2., 0.5)*g; gdouble vr = GFS_VALUE (cell, par->v) + MAX ((- 1. - unorm)/2., -0.5)*g; gdouble src = par->dt*gfs_variable_mac_source (par->v, cell)/2.; gdouble dv; #if FTT_2D dv = transverse_term (cell, msize, FTT_ORTHOGONAL_COMPONENT (c), par); #else /* FTT_3D */ static FttComponent orthogonal[FTT_DIMENSION][2] = { {FTT_Y, FTT_Z}, {FTT_X, FTT_Z}, {FTT_X, FTT_Y} }; dv = transverse_term (cell, msize, orthogonal[c][0], par); dv += transverse_term (cell, msize, orthogonal[c][1], par); #endif /* FTT_3D */ s->f[2*c].v = vl + src - dv; s->f[2*c + 1].v = vr + src - dv; } } /** * gfs_cell_non_advected_face_values: * @cell: a #FttCell. * @par: the (non)advection parameters. * * Fills the face variable (@v field of #GfsFaceStateVector) of all the * faces of @cell with the non-advected value of variable @par->v at time * t + dt/2. */ void gfs_cell_non_advected_face_values (FttCell * cell, const GfsAdvectionParams * par) { FttComponent c; GfsStateVector * s; g_return_if_fail (cell != NULL); g_return_if_fail (par != NULL); s = GFS_STATE (cell); for (c = 0; c < FTT_DIMENSION; c++) { gdouble g = (* par->gradient) (cell, c, par->v->i); gdouble vl = GFS_VALUE (cell, par->v) + g/2.; gdouble vr = GFS_VALUE (cell, par->v) - g/2.; gdouble src = par->dt*gfs_variable_mac_source (par->v, cell)/2.; s->f[2*c].v = vl + src; s->f[2*c + 1].v = vr + src; } } #if FTT_2D static gdouble interpolate_1D1 (const FttCell * cell, FttDirection dright, FttDirection dup, gdouble x) { FttCell * n; FttDirection dleft; GfsStateVector * s; g_return_val_if_fail (cell != NULL, 0.); dleft = FTT_OPPOSITE_DIRECTION (dright); n = ftt_cell_neighbor (cell, dup); s = GFS_STATE (cell); if (n && !GFS_CELL_IS_BOUNDARY (n)) { gdouble s1 = s->solid ? s->solid->s[dleft] : 1., s2; gdouble v1 = s->f[dleft].v, v2; g_assert (s1 > 0.); /* check for corner refinement violation (topology.fig) */ g_assert (ftt_cell_level (n) == ftt_cell_level (cell)); if (FTT_CELL_IS_LEAF (n)) { v2 = GFS_STATE (n)->f[dleft].v; s2 = GFS_IS_MIXED (n) ? GFS_STATE (n)->solid->s[dleft] : 1.; } else { FttDirection d[FTT_DIMENSION]; d[0] = dleft; d[1] = FTT_OPPOSITE_DIRECTION (dup); n = ftt_cell_child_corner (n, d); if (n) { v2 = GFS_STATE (n)->f[dleft].v; s2 = GFS_IS_MIXED (n) ? GFS_STATE (n)->solid->s[dleft]/2. : 0.5; } else s2 = v2 = 0.; } return s2 > 0. ? (v2*(s1 - 1. + 2.*x) + v1*(s2 + 1. - 2.*x))/(s1 + s2) : v1; } return s->f[dleft].v; } #else /* FTT_3D */ static gdouble interpolate_2D1 (const FttCell * cell, FttDirection dright, FttDirection d1, FttDirection d2, gdouble x, gdouble y) { FttCell * n1, * n2; gdouble x1 = 0., y1 = 1.; gdouble x2 = 1., y2 = 0.; gdouble v0, v1, v2; FttDirection dleft; g_return_val_if_fail (cell != NULL, 0.); /* fixme: this routine does not take into account mixed cells fractions (in contrast to interpolate_1D1 above) */ dleft = FTT_OPPOSITE_DIRECTION (dright); v0 = GFS_STATE (cell)->f[dleft].v; n1 = ftt_cell_neighbor (cell, d1); if (n1 && !GFS_CELL_IS_BOUNDARY (n1)) { /* check for corner refinement violation (topology.fig) */ g_assert (ftt_cell_level (n1) == ftt_cell_level (cell)); if (!FTT_CELL_IS_LEAF (n1)) { FttDirection d[FTT_DIMENSION]; d[0] = FTT_OPPOSITE_DIRECTION (dright); d[1] = FTT_OPPOSITE_DIRECTION (d1); d[2] = d2; if ((n1 = ftt_cell_child_corner (n1, d))) { v1 = GFS_STATE (n1)->f[dleft].v; x1 = 1./4.; y1 = 3./4.; } else v1 = v0; } else v1 = GFS_STATE (n1)->f[dleft].v; } else v1 = v0; n2 = ftt_cell_neighbor (cell, d2); if (n2 && !GFS_CELL_IS_BOUNDARY (n2)) { /* check for corner refinement violation (topology.fig) */ g_assert (ftt_cell_level (n2) == ftt_cell_level (cell)); if (!FTT_CELL_IS_LEAF (n2)) { FttDirection d[FTT_DIMENSION]; d[0] = FTT_OPPOSITE_DIRECTION (dright); d[1] = FTT_OPPOSITE_DIRECTION (d2); d[2] = d1; if ((n2 = ftt_cell_child_corner (n2, d))) { v2 = GFS_STATE (n2)->f[dleft].v; x2 = 3./4.; y2 = 1./4.; } else v2 = v0; } else v2 = GFS_STATE (n2)->f[dleft].v; } else v2 = v0; return ((v1 - v0)*(x*y2 - x2*y) + (v2 - v0)*(x1*y - x*y1))/ (x1*y2 - x2*y1) + v0; } #endif /* FTT_3D */ /** * gfs_face_upwinded_value: * @face: a #FttCellFace. * @upwinding: type of upwinding. * @u: the cell-centered velocity. * * This function assumes that the face variable has been previously * defined using gfs_cell_advected_face_values(). * * Returns: the upwinded value of the face variable. */ gdouble gfs_face_upwinded_value (const FttCellFace * face, GfsUpwinding upwinding, GfsVariable ** u) { gdouble un = 0.; g_return_val_if_fail (face != NULL, 0.); if (GFS_FACE_FRACTION (face) == 0.) return 0.; switch (upwinding) { case GFS_CENTERED_UPWINDING: g_return_val_if_fail (u != NULL, 0.); un = gfs_face_interpolated_value (face, u[face->d/2]->i); break; case GFS_FACE_UPWINDING: un = GFS_FACE_NORMAL_VELOCITY (face); break; case GFS_NO_UPWINDING: break; default: g_assert_not_reached (); } if (!FTT_FACE_DIRECT (face)) un = - un; switch (ftt_face_type (face)) { case FTT_FINE_FINE: return un > 0. ? GFS_STATE (face->cell)->f[face->d].v : un < 0. ? GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].v : (GFS_STATE (face->cell)->f[face->d].v + GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].v)/2.; case FTT_FINE_COARSE: if (un > 0.) return GFS_STATE (face->cell)->f[face->d].v; else { gdouble vcoarse; #if FTT_2D gint dp; static gint perpendicular[FTT_NEIGHBORS_2D][FTT_CELLS] = {{-1, 2, -1, 3}, { 2, -1, 3, -1}, { 1, 0, -1, -1}, {-1, -1, 1, 0}}; #else /* FTT_3D */ gint * dp; static gint perpendicular[FTT_NEIGHBORS][FTT_CELLS][2] = {{{-1,-1},{2,4},{-1,-1},{3,4},{-1,-1},{2,5},{-1,-1},{3,5}}, {{2,4},{-1,-1},{3,4},{-1,-1},{2,5},{-1,-1},{3,5},{-1,-1}}, {{4,1},{4,0},{-1,-1},{-1,-1},{5,1},{5,0},{-1,-1},{-1,-1}}, {{-1,-1},{-1,-1},{4,1},{4,0},{-1,-1},{-1,-1},{5,1},{5,0}}, {{1,2},{0,2},{1,3},{0,3},{-1,-1},{-1,-1},{-1,-1},{-1,-1}}, {{-1,-1},{-1,-1},{-1,-1},{-1,-1},{1,2},{0,2},{1,3},{0,3}}}; #endif /* FTT_3D */ dp = perpendicular[face->d][FTT_CELL_ID (face->cell)]; #if FTT_2D g_assert (dp >= 0); vcoarse = interpolate_1D1 (face->neighbor, face->d, dp, 1./4.); #else /* FTT_3D */ g_assert (dp[0] >= 0 && dp[1] >= 0); vcoarse = interpolate_2D1 (face->neighbor, face->d, dp[0], dp[1], 1./4., 1./4.); #endif /* FTT_3D */ if (un == 0.) return (GFS_STATE (face->cell)->f[face->d].v + vcoarse)/2.; else return vcoarse; } default: g_assert_not_reached (); } return 0.; } /** * gfs_face_advection_flux: * @face: a #FttCellFace. * @par: the advection parameters. * * Adds to variable @par->fv, the value of the (conservative) * advection flux of the face variable through @face. * * This function assumes that the face variable has been previously * defined using gfs_cell_advected_face_values(). */ void gfs_face_advection_flux (const FttCellFace * face, const GfsAdvectionParams * par) { gdouble flux; g_return_if_fail (face != NULL); g_return_if_fail (par != NULL); flux = gfs_domain_face_fraction (par->v->domain, face)*GFS_FACE_NORMAL_VELOCITY (face)*par->dt* gfs_face_upwinded_value (face, GFS_FACE_UPWINDING, NULL)/ftt_cell_size (face->cell); if (!FTT_FACE_DIRECT (face)) flux = - flux; GFS_VALUE (face->cell, par->fv) -= flux; switch (ftt_face_type (face)) { case FTT_FINE_FINE: GFS_VALUE (face->neighbor, par->fv) += flux; break; case FTT_FINE_COARSE: GFS_VALUE (face->neighbor, par->fv) += flux/FTT_CELLS; break; default: g_assert_not_reached (); } } /** * gfs_face_velocity_advection_flux: * @face: a #FttCellFace. * @par: the advection parameters. * * Adds to variable @par->fv, the value of the (conservative) * advection flux through @face of variable @par->v (a component * of the velocity). * * This function assumes that the @g field of the cells sharing @face * are filled with the pressure gradient at time t + dt/2. * * This function also assumes that the face value of @par->v has been * previously defined using gfs_cell_advected_face_values(). */ void gfs_face_velocity_advection_flux (const FttCellFace * face, const GfsAdvectionParams * par) { gdouble flux; FttComponent c; g_return_if_fail (face != NULL); g_return_if_fail (par != NULL); c = par->v->component; g_return_if_fail (c >= 0 && c < FTT_DIMENSION); flux = gfs_domain_face_fraction (par->v->domain, face)*GFS_FACE_NORMAL_VELOCITY (face)*par->dt /ftt_cell_size (face->cell); #if 0 if (c == face->d/2) /* normal component */ flux *= GFS_FACE_NORMAL_VELOCITY (face); else /* tangential component */ #else flux *= gfs_face_upwinded_value (face, par->upwinding, par->u) /* pressure correction */ - gfs_face_interpolated_value (face, par->g[c]->i)*par->dt/2.; #endif if (!FTT_FACE_DIRECT (face)) flux = - flux; GFS_VALUE (face->cell, par->fv) -= flux; switch (ftt_face_type (face)) { case FTT_FINE_FINE: GFS_VALUE (face->neighbor, par->fv) += flux; break; case FTT_FINE_COARSE: GFS_VALUE (face->neighbor, par->fv) += flux/FTT_CELLS; break; default: g_assert_not_reached (); } } /** * gfs_face_velocity_convective_flux: * @face: a #FttCellFace. * @par: the advection parameters. * * Adds to variable @par->fv, the value of the (non-conservative) * convective flux through @face of variable @par->v (a component * of the velocity). * * This function assumes that the @g field of the cells sharing @face * are filled with the pressure gradient at time t + dt/2. * * This function also assumes that the face value of @par->v has been * previously defined using gfs_cell_advected_face_values(). */ void gfs_face_velocity_convective_flux (const FttCellFace * face, const GfsAdvectionParams * par) { gdouble u; FttComponent c; g_return_if_fail (face != NULL); g_return_if_fail (par != NULL); g_return_if_fail (gfs_domain_face_fraction (par->v->domain, face) == 1.); c = par->v->component; g_return_if_fail (c >= 0 && c < FTT_DIMENSION); #if 0 if (c == face->d/2) /* normal component */ u = GFS_FACE_NORMAL_VELOCITY (face); else /* tangential component */ u = gfs_face_upwinded_value (face, par->upwinding) /* pressure correction */ - gfs_face_interpolated_value (face, GFS_GRADIENT_INDEX (c))*par->dt/2.; #else u = gfs_face_upwinded_value (face, par->upwinding, par->u) /* pressure correction */ - gfs_face_interpolated_value (face, par->g[c]->i)*par->dt/2.; #endif u *= par->dt/(2.*ftt_cell_size (face->cell)); if (!FTT_FACE_DIRECT (face)) u = - u; GFS_VALUE (face->cell, par->fv) -= u*(GFS_STATE (face->cell)->f[face->d].un + GFS_STATE (face->cell)->f[FTT_OPPOSITE_DIRECTION (face->d)].un); switch (ftt_face_type (face)) { case FTT_FINE_FINE: GFS_VALUE (face->neighbor, par->fv) += u*(GFS_STATE (face->neighbor)->f[face->d].un + GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].un); break; case FTT_FINE_COARSE: GFS_VALUE (face->neighbor, par->fv) += u*(GFS_STATE (face->neighbor)->f[face->d].un + GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].un) /FTT_CELLS; break; default: g_assert_not_reached (); } } /** * gfs_face_advected_normal_velocity: * @face: a #FttCellFace. * @par: the #GfsAdvectionParams. * * Fills the normal component of the velocity at @face with the value * advected (to time t + dt/2) from the centered velocities. * * This function assumes that the face variable has been previously * defined for the correct component of the velocity using * gfs_cell_advected_face_values(). */ void gfs_face_advected_normal_velocity (const FttCellFace * face, const GfsAdvectionParams * par) { gdouble u; g_return_if_fail (face != NULL); g_return_if_fail (par != NULL); if (GFS_FACE_FRACTION_RIGHT (face) == 0.) return; GFS_FACE_NORMAL_VELOCITY_LEFT (face) = u = gfs_face_upwinded_value (face, par->upwinding, par->u); switch (ftt_face_type (face)) { case FTT_FINE_FINE: GFS_FACE_NORMAL_VELOCITY_RIGHT (face) = u; break; case FTT_FINE_COARSE: GFS_FACE_NORMAL_VELOCITY_RIGHT (face) += u*gfs_domain_face_fraction (par->v->domain, face)/ (gfs_domain_face_fraction_right (par->v->domain, face)*FTT_CELLS_DIRECTION (face->d)); break; default: g_assert_not_reached (); } } /** * gfs_face_interpolated_normal_velocity: * @face: a #FttCellFace. * @v: the velocity. * * Fills the normal component of the velocity at @face with the value * interpolated from the centered velocities. */ void gfs_face_interpolated_normal_velocity (const FttCellFace * face, GfsVariable ** v) { gdouble u; g_return_if_fail (face != NULL); g_return_if_fail (v != NULL); if (GFS_FACE_FRACTION_RIGHT (face) == 0.) return; GFS_FACE_NORMAL_VELOCITY_LEFT (face) = u = gfs_face_interpolated_value (face, v[face->d/2]->i); switch (ftt_face_type (face)) { case FTT_FINE_FINE: GFS_FACE_NORMAL_VELOCITY_RIGHT (face) = u; break; case FTT_FINE_COARSE: GFS_FACE_NORMAL_VELOCITY_RIGHT (face) += u*gfs_domain_face_fraction (v[0]->domain, face)/ (gfs_domain_face_fraction_right (v[0]->domain, face)*FTT_CELLS_DIRECTION (face->d)); break; default: g_assert_not_reached (); } } /** * gfs_face_reset_normal_velocity: * @face: a #FttCellFace. * * Set velocity normal to @face to zero. */ void gfs_face_reset_normal_velocity (const FttCellFace * face) { g_return_if_fail (face != NULL); GFS_FACE_NORMAL_VELOCITY_RIGHT (face) = GFS_FACE_NORMAL_VELOCITY_LEFT (face) = 0.; } /** * gfs_cell_is_small: * @cell: a #FttCell. * * Returns: %TRUE if @cell is "small" (i.e. should be merged with a neighbhor). */ gboolean gfs_cell_is_small (const FttCell * cell) { g_return_val_if_fail (cell != NULL, FALSE); GfsSolidVector * solid = GFS_STATE (cell)->solid; if (solid) { FttDirection d; FttCellNeighbors n; ftt_cell_neighbors (cell, &n); for (d = 0; d < FTT_NEIGHBORS; d++) if (n.c[d] && !GFS_CELL_IS_BOUNDARY (n.c[d]) && solid->s[d] > 0. && solid->a/solid->s[d] < GFS_SMALL) return TRUE; } return FALSE; } static void set_merged (FttCell * cell) { GfsSolidVector * solid = GFS_STATE (cell)->solid; if (!gfs_cell_is_small (cell)) solid->merged = NULL; else { FttCellNeighbors neighbor; gdouble abest = 0.; FttDirection i; ftt_cell_neighbors (cell, &neighbor); for (i = 0; i < FTT_NEIGHBORS && abest < 1.; i++) if (neighbor.c[i] && !GFS_CELL_IS_BOUNDARY (neighbor.c[i]) && solid->s[i] > 0.) { if (FTT_CELL_IS_LEAF (neighbor.c[i])) { if (GFS_IS_MIXED (neighbor.c[i])) { gdouble a = GFS_STATE (neighbor.c[i])->solid->a; if (a > abest) { abest = a; solid->merged = neighbor.c[i]; } } else { solid->merged = neighbor.c[i]; return; } } else { FttCellChildren child; guint j, n = ftt_cell_children_direction (neighbor.c[i], FTT_OPPOSITE_DIRECTION (i), &child); for (j = 0; j < n; j++) if (child.c[j]) { if (GFS_IS_MIXED (child.c[j])) { gdouble a = GFS_STATE (child.c[j])->solid->a; if (a > abest) { abest = a; solid->merged = child.c[j]; } } else { solid->merged = child.c[j]; return; } } } } if (abest == 0.) g_warning ("file %s: line %d (%s): cannot merge small cell: %g", __FILE__, __LINE__, G_GNUC_PRETTY_FUNCTION, solid->a); } } /** * gfs_set_merged: * @domain: the domain to traverse. * * Sets the @merged field of the mixed cells of the domain defined * by @domain. */ void gfs_set_merged (GfsDomain * domain) { g_return_if_fail (domain != NULL); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) set_merged, NULL); } static void add_merged (GSList ** merged, FttCell * cell) { if ((cell->flags & GFS_FLAG_USED) == 0) { FttCellNeighbors neighbor; FttDirection i; GfsSolidVector * solid = GFS_STATE (cell)->solid; *merged = g_slist_prepend (*merged, cell); cell->flags |= GFS_FLAG_USED; if (solid && solid->merged) add_merged (merged, solid->merged); ftt_cell_neighbors (cell, &neighbor); for (i = 0; i < FTT_NEIGHBORS; i++) if (neighbor.c[i]) { if (!FTT_CELL_IS_LEAF (neighbor.c[i])) { FttCellChildren child; guint j, n; n = ftt_cell_children_direction (neighbor.c[i], FTT_OPPOSITE_DIRECTION (i), &child);; for (j = 0; j < n; j++) if (GFS_IS_MIXED (child.c[j]) && GFS_STATE (child.c[j])->solid->merged == cell) add_merged (merged, child.c[j]); } else if (GFS_IS_MIXED (neighbor.c[i]) && GFS_STATE (neighbor.c[i])->solid->merged == cell) add_merged (merged, neighbor.c[i]); } } } static void traverse_merged (FttCell * cell, gpointer * datum) { if ((cell->flags & GFS_FLAG_USED) == 0) { GfsMergedTraverseFunc func = (GfsMergedTraverseFunc) datum[0]; gpointer data = datum[1]; GSList * merged = NULL; add_merged (&merged, cell); (* func) (merged, data); g_slist_free (merged); } } static void traverse_non_merged (FttCell * cell, gpointer * datum) { if ((cell->flags & GFS_FLAG_USED) != 0) cell->flags &= ~GFS_FLAG_USED; else { GfsMergedTraverseFunc func = (GfsMergedTraverseFunc) datum[0]; gpointer data = datum[1]; GSList merged; merged.data = cell; merged.next = NULL; (* func) (&merged, data); } } /** * gfs_domain_traverse_merged: * @domain: the domain to traverse. * @func: the function to call for each visited merged cells. * @data: user data to pass to @func. * * Traverses the merged leaf cells of the domain defined by @domain. A * list of merged cells is passed to @func. No cell belongs to more * than one merged list. */ void gfs_domain_traverse_merged (GfsDomain * domain, GfsMergedTraverseFunc func, gpointer data) { gpointer datum[2]; g_return_if_fail (domain != NULL); g_return_if_fail (func != NULL); datum[0] = func; datum[1] = data; gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) traverse_merged, datum); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) traverse_non_merged, datum); } /** * gfs_advection_update: * @merged: a list of merged #FttCell. * @par: the advection parameters. * * Updates the @v variable of @par for the merged cells of @merged * using the @fv update of each merged cell. * * The @v variable in each cell of the @merged list is set to its * average updated value over the composite cell defined by all the * cells in @merged. */ void gfs_advection_update (GSList * merged, const GfsAdvectionParams * par) { g_return_if_fail (merged != NULL); g_return_if_fail (par != NULL); if (merged->next == NULL) { /* cell is not merged */ FttCell * cell = merged->data; g_assert (!gfs_cell_is_small (cell)); #if 0 /* D. Calhoun approach (fixme: does not use gfs_domain_cell_fraction()) */ if (GFS_IS_MIXED (cell)) { FttDirection d; gdouble mins = G_MAXDOUBLE; GfsSolidVector * solid = GFS_STATE (cell)->solid; for (d = 0; d < FTT_NEIGHBORS; d++) if (solid->s[d] > 0. && 1./solid->s[d] < mins) mins = 1./solid->s[d]; #if 0 fprintf (stderr, "%g %g %g\n", solid->a, mins, GFS_VALUE (cell, par->fv)/(mins*solid->a)); #endif if (mins*solid->a > 0.01) GFS_VALUE (cell, par->v) += GFS_VALUE (cell, par->fv)/(mins*solid->a); else GFS_VALUE (cell, par->v) += 100.*GFS_VALUE (cell, par->fv); g_assert (GFS_VALUE (cell, par->v) < 10.); } else #endif GFS_VALUE (cell, par->v) += GFS_VALUE (cell, par->fv)/gfs_domain_cell_fraction (par->v->domain, cell); } else if (par->average) { /* average value */ GSList * i = merged; gdouble w = 0., total_vol = 0.; while (i) { FttCell * cell = i->data; gdouble vol = ftt_cell_volume (cell); gdouble a = gfs_domain_cell_fraction (par->v->domain, cell); total_vol += vol*a; w += vol*(a*GFS_VALUE (cell, par->v) + GFS_VALUE (cell, par->fv)); i = i->next; } w /= total_vol; i = merged; while (i) { FttCell * cell = i->data; GFS_VALUE (cell, par->v) = w; i = i->next; } } else { GSList * i = merged; gdouble w = 0., total_vol = 0.; while (i) { FttCell * cell = i->data; gdouble vol = ftt_cell_volume (cell); gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.; gdouble f = gfs_domain_cell_fraction (par->v->domain, cell); total_vol += vol*f; if (a < GFS_SMALL) { GFS_VALUE (cell, par->v) += GFS_VALUE (cell, par->fv)/(GFS_SMALL*f/a); w += vol*GFS_VALUE (cell, par->fv)*(1. - a/GFS_SMALL); } else GFS_VALUE (cell, par->v) += GFS_VALUE (cell, par->fv)/f; i = i->next; } w /= total_vol; i = merged; while (i) { FttCell * cell = i->data; /* fixme: small cells should be excluded here?? (with corresponding modification in total_vol) */ GFS_VALUE (cell, par->v) += w; i = i->next; } } } void gfs_advection_params_write (GfsAdvectionParams * par, FILE * fp) { g_return_if_fail (par != NULL); g_return_if_fail (fp != NULL); fprintf (fp, "{\n" " cfl = %g\n" " gradient = %s\n" " flux = %s\n" " average = %d\n", par->cfl, par->gradient == gfs_center_gradient ? "gfs_center_gradient" : par->gradient == gfs_center_van_leer_gradient ? "gfs_center_van_leer_gradient" : par->gradient == gfs_center_minmod_gradient ? "gfs_center_minmod_gradient" : par->gradient == gfs_center_superbee_gradient ? "gfs_center_superbee_gradient" : par->gradient == gfs_center_sweby_gradient ? "gfs_center_sweby_gradient" : "none", par->flux == gfs_face_advection_flux ? "gfs_face_advection_flux" : par->flux == gfs_face_velocity_advection_flux ? "gfs_face_velocity_advection_flux" : par->flux == gfs_face_velocity_convective_flux ? "gfs_face_velocity_convective_flux" : "NULL", par->average); if (!par->gc) fputs (" gc = 0\n", fp); switch (par->scheme) { case GFS_GODUNOV: fputs (" scheme = godunov\n", fp); break; case GFS_NONE: fputs (" scheme = none\n", fp); break; } if (par->moving_order != 1) fputs (" moving_order = 2\n", fp); if (par->sink[0]) { fputs (" vx = ", fp); gfs_function_write (par->sink[0], fp); fputs ("\n", fp); } if (par->sink[1]) { fputs (" vy = ", fp); gfs_function_write (par->sink[1], fp); fputs ("\n", fp); } #if (!FTT_2D) if (par->sink[2]) { fputs (" vz = ", fp); gfs_function_write (par->sink[2], fp); fputs ("\n", fp); } #endif if (par->linear) fputs (" linear = 1\n", fp); fputc ('}', fp); } void gfs_advection_params_init (GfsAdvectionParams * par) { g_return_if_fail (par != NULL); par->fv = NULL; par->u = NULL; par->g = NULL; par->cfl = 0.8; par->dt = 0.; par->gradient = gfs_center_gradient; par->upwinding = GFS_FACE_UPWINDING; par->use_centered_velocity = TRUE; par->scheme = GFS_GODUNOV; par->average = FALSE; par->gc = TRUE; par->update = (GfsMergedTraverseFunc) gfs_advection_update; par->moving_order = 1; par->linear = FALSE; par->diffusion_solve = gfs_diffusion; } static gdouble none (FttCell * cell, FttComponent c, guint v) { return 0.; } void gfs_advection_params_read (GfsAdvectionParams * par, GtsFile * fp) { g_return_if_fail (par != NULL); g_return_if_fail (fp != NULL); if (par->v) { GfsDomain * domain = par->v->domain; FttComponent c; for( c = 0; c < FTT_DIMENSION; c++) if (!par->sink[c]) { par->sink[c] = gfs_function_new (gfs_function_class (), 0.); gfs_function_set_units (par->sink[c], 1.); gfs_object_simulation_set (par->sink[c], domain); } } gchar * gradient = NULL, * flux = NULL, * scheme = NULL; GtsFileVariable var[] = { {GTS_DOUBLE, "cfl", TRUE, &par->cfl}, {GTS_STRING, "gradient", TRUE, &gradient}, {GTS_STRING, "flux", TRUE, &flux}, {GTS_STRING, "scheme", TRUE, &scheme}, {GTS_INT, "average", TRUE, &par->average}, {GTS_INT, "gc", TRUE, &par->gc}, {GTS_UINT, "moving_order", TRUE, &par->moving_order}, {GTS_OBJ, "vx", TRUE, &par->sink[0]}, {GTS_OBJ, "vy", TRUE, &par->sink[1]}, #if (!FTT_2D) {GTS_OBJ, "vz", TRUE, &par->sink[2]}, #endif /* 3D */ {GTS_INT, "linear", TRUE, &par->linear}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (par->v) { FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) if (!var[7+c].set) { gts_object_destroy (GTS_OBJECT (par->sink[c])); par->sink[c] = NULL; } #if FTT_2D if ((var[7].set + var[8].set) % 2) gts_file_error (fp, "either vx or vy must be set"); #else if ((var[7].set + var[8].set + var[9].set) % 3) gts_file_error (fp, "either vx, vy or vz must be set"); #endif } if (fp->type != GTS_ERROR && par->cfl <= 0.) gts_file_variable_error (fp, var, "cfl", "cfl must be strictly positive"); if (gradient) { if (!strcmp (gradient, "gfs_center_gradient")) par->gradient = gfs_center_gradient; else if (!strcmp (gradient, "gfs_center_van_leer_gradient")) par->gradient = gfs_center_van_leer_gradient; else if (!strcmp (gradient, "gfs_center_minmod_gradient")) par->gradient = gfs_center_minmod_gradient; else if (!strcmp (gradient, "gfs_center_superbee_gradient")) par->gradient = gfs_center_superbee_gradient; else if (!strcmp (gradient, "gfs_center_sweby_gradient")) par->gradient = gfs_center_sweby_gradient; else if (!strcmp (gradient, "none")) par->gradient = none; else if (fp->type != GTS_ERROR) gts_file_variable_error (fp, var, "gradient", "unknown gradient parameter `%s'", gradient); g_free (gradient); } if (flux) { if (!strcmp (flux, "gfs_face_advection_flux")) par->flux = gfs_face_advection_flux; else if (!strcmp (flux, "gfs_face_velocity_advection_flux")) par->flux = gfs_face_velocity_advection_flux; else if (!strcmp (flux, "gfs_face_velocity_convective_flux")) par->flux = gfs_face_velocity_convective_flux; else if (!strcmp (flux, "NULL")) par->flux = gfs_face_advection_flux; else if (fp->type != GTS_ERROR) gts_file_variable_error (fp, var, "flux", "unknown flux parameter `%s'", flux); g_free (flux); } if (scheme) { if (!strcmp (scheme, "godunov")) par->scheme = GFS_GODUNOV; else if (!strcmp (scheme, "none")) par->scheme = GFS_NONE; else if (fp->type != GTS_ERROR) gts_file_variable_error (fp, var, "scheme", "unknown scheme parameter `%s'", scheme); g_free (scheme); } } gerris-snapshot-131206/src/levelset.h0000644000175100017510000000314612250371171014451 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2006 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __LEVELSET_H__ #define __LEVELSET_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "variable.h" /* GfsVariableDistance: header */ typedef struct _GfsVariableDistance GfsVariableDistance; struct _GfsVariableDistance { /*< private >*/ GfsVariable parent; gboolean first_done; /*< public >*/ GfsVariable * v; gboolean stencil; }; #define GFS_VARIABLE_DISTANCE(obj) GTS_OBJECT_CAST (obj,\ GfsVariableDistance,\ gfs_variable_distance_class ()) #define GFS_IS_VARIABLE_DISTANCE(obj) (gts_object_is_from_class (obj,\ gfs_variable_distance_class ())) GfsVariableClass * gfs_variable_distance_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LEVELSET_H__ */ gerris-snapshot-131206/src/domain.h0000644000175100017510000004416012250371171014076 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __DOMAIN_H__ #define __DOMAIN_H__ #include "boundary.h" #include "surface.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* GfsLocateArray: Header */ typedef struct { GSList ** root; gdouble h, min[FTT_DIMENSION], max[FTT_DIMENSION]; gint n[FTT_DIMENSION], size; } GfsLocateArray; GfsLocateArray * gfs_locate_array_new (GfsDomain * domain); GSList * gfs_locate_array_locate (GfsLocateArray * a, FttVector * p); void gfs_locate_array_destroy (GfsLocateArray * a); /* GfsDomain: Header */ typedef struct _GfsDomainClass GfsDomainClass; typedef struct _GfsDiffusion GfsDiffusion; typedef struct _GfsSourceDiffusion GfsSourceDiffusion; typedef struct _GfsTimer GfsTimer; struct _GfsTimer { GtsRange r; gdouble start; }; struct _GfsDomain { GtsWGraph parent; int pid; GfsClock * timer; GHashTable * timers; GtsRange timestep; GtsRange size; gboolean profile_bc; GtsRange mpi_messages; GtsRange mpi_wait; guint rootlevel; FttVector refpos; FttVector lambda; GArray * allocated; GSList * variables; GSList * derived_variables; GfsVariable * velocity[FTT_DIMENSION]; GSList * variables_io; gboolean binary; gint max_depth_write; FttCellInitFunc cell_init; gpointer cell_init_data; gint version; gpointer array; gboolean overlap; /* whether to overlap MPI communications with computation */ /* coordinate metrics */ gpointer metric_data; gdouble (* face_metric) (const GfsDomain *, const FttCellFace *); gdouble (* cell_metric) (const GfsDomain *, const FttCell *); void (* solid_metric) (const GfsDomain *, const FttCell *, FttVector *); gdouble (* scale_metric) (const GfsDomain *, const FttCell *, FttComponent); gdouble (* face_scale_metric) (const GfsDomain *, const FttCellFace *, FttComponent); gdouble (* viscous_metric_implicit) (const GfsDomain * domain, FttCell * cell, FttComponent component); gdouble (* viscous_metric_explicit) (const GfsDomain * domain, FttCell * cell, GfsVariable * v, GfsDiffusion * d); void (* advection_metric) (const GfsDomain * domain, FttCell * cell, FttComponent c1, gdouble m[2]); /* Object hash table for (optional) object IDs */ GHashTable * objects; /* total number of parallel processes */ int np; /* real time */ GTimer * clock; GPtrArray * sorted; /**< array of sorted boxes */ gboolean dirty; /**< whether the sorted array needs updating */ GSList * projections; /**< list of GfsDomainProjection associated with this domain */ gboolean has_rotated_bc; /**< whether the domain uses "rotated" edges */ void (* traverse_layers) (GfsDomain *, FttCellTraverseFunc, gpointer); }; struct _GfsDomainClass { GtsWGraphClass parent_class; void (* post_read) (GfsDomain *, GtsFile * fp); }; #define GFS_DOMAIN(obj) GTS_OBJECT_CAST (obj,\ GfsDomain,\ gfs_domain_class ()) #define GFS_DOMAIN_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsDomainClass,\ gfs_domain_class()) #define GFS_IS_DOMAIN(obj) (gts_object_is_from_class (obj,\ gfs_domain_class ())) #define gfs_domain_variables_number(d) ((d)->allocated->len - 1) #define gfs_domain_variables_size(d) (sizeof (GfsStateVector) +\ sizeof (gdouble)*(MAX ((d)->allocated->len, 1) - 1)) GfsDomainClass * gfs_domain_class (void); void gfs_domain_cell_traverse (GfsDomain * domain, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data); #define gfs_domain_traverse_leaves(d,f,data) (gfs_domain_cell_traverse(d, \ FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, f,data)) FttCellTraverse * gfs_domain_cell_traverse_new (GfsDomain * domain, FttTraverseType order, FttTraverseFlags flags, gint max_depth); void gfs_domain_traverse_layers (GfsDomain * domain, FttCellTraverseFunc func, gpointer data); void gfs_domain_cell_traverse_condition (GfsDomain * domain, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data, gboolean (* condition) (FttCell *, gpointer), gpointer cdata); void gfs_domain_cell_traverse_box (GfsDomain * domain, GtsBBox * box, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data); void gfs_domain_cell_traverse_boundary (GfsDomain * domain, FttDirection d, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data); void gfs_domain_traverse_mixed (GfsDomain * domain, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseFunc func, gpointer data); void gfs_domain_traverse_cut (GfsDomain * domain, GfsGenericSurface * s, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseCutFunc func, gpointer data); void gfs_domain_traverse_cut_2D (GfsDomain * domain, GfsGenericSurface * s, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseCutFunc func, gpointer data); void gfs_domain_face_traverse (GfsDomain * domain, FttComponent c, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttFaceTraverseFunc func, gpointer data); void gfs_domain_bc (GfsDomain * domain, FttTraverseFlags flags, gint max_depth, GfsVariable * v); void gfs_domain_copy_bc (GfsDomain * domain, FttTraverseFlags flags, gint max_depth, GfsVariable * v, GfsVariable * v1); void gfs_domain_homogeneous_bc (GfsDomain * domain, FttTraverseFlags flags, gint max_depth, GfsVariable * ov, GfsVariable * v); void gfs_domain_homogeneous_bc_stencil (GfsDomain * domain, FttTraverseFlags flags, gint max_depth, GfsVariable * ov, GfsVariable * v, GfsLinearProblem * lp); void gfs_traverse_and_homogeneous_bc (GfsDomain * domain, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data, GfsVariable * ov, GfsVariable * v); void gfs_traverse_and_bc (GfsDomain * domain, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data, GfsVariable * v, GfsVariable * v1); void gfs_domain_face_bc (GfsDomain * domain, FttComponent c, GfsVariable * v); void gfs_domain_match (GfsDomain * domain); void gfs_domain_forget_boundary (GfsDomain * domain, GfsBoundary * boundary); void gfs_domain_surface_bc (GfsDomain * domain, GfsVariable * v); guint gfs_domain_depth (GfsDomain * domain); GtsRange gfs_domain_stats_variable (GfsDomain * domain, GfsVariable * v, FttTraverseFlags flags, gint max_depth, gboolean (* condition) (FttCell *, gpointer), gpointer cdata); GtsRange gfs_domain_stats_solid (GfsDomain * domain); void gfs_domain_stats_merged (GfsDomain * domain, GtsRange * solid, GtsRange * number); void gfs_domain_stats_balance (GfsDomain * domain, GtsRange * size, GtsRange * boundary, GtsRange * mpiwait); GfsNorm gfs_domain_norm_variable (GfsDomain * domain, GfsVariable * v, GfsFunction * w, FttTraverseFlags flags, gint max_depth, gboolean (* condition) (FttCell *, gpointer), gpointer cdata); GfsNorm gfs_domain_norm_residual (GfsDomain * domain, FttTraverseFlags flags, gint max_depth, gdouble dt, GfsVariable * res); GfsVariable ** gfs_domain_velocity (GfsDomain * domain); GfsNorm gfs_domain_norm_velocity (GfsDomain * domain, FttTraverseFlags flags, gint max_depth); GfsDomain * gfs_domain_read (GtsFile * fp); void gfs_domain_split (GfsDomain * domain, gboolean one_box_per_pe); FttCell * gfs_domain_locate (GfsDomain * domain, FttVector target, gint max_depth, GfsBox ** where); FttCell * gfs_domain_boundary_locate (GfsDomain * domain, FttVector target, gint max_depth, GtsObject ** where); gdouble gfs_domain_cell_point_distance2 (GfsDomain * domain, GtsPoint * p, gdouble (* distance2) (FttCell *, GtsPoint *, gpointer), gpointer data, FttCell ** closest); void gfs_domain_advect_point (GfsDomain * domain, FttVector * p, gdouble dt); guint gfs_domain_size (GfsDomain * domain, FttTraverseFlags flags, gint max_depth); gdouble gfs_domain_cfl (GfsDomain * domain, FttTraverseFlags flags, gint max_depth); void gfs_cell_init (FttCell * cell, GfsDomain * domain); void gfs_cell_reinit (FttCell * cell, GfsDomain * domain); void gfs_cell_fine_init (FttCell * cell, GfsDomain * domain); void gfs_cell_copy (const FttCell * from, FttCell * to, GfsDomain * domain); void gfs_cell_read (FttCell * cell, GtsFile * fp, GfsDomain * domain); void gfs_cell_write (const FttCell * cell, FILE * fp, GSList * variables); void gfs_cell_read_binary (FttCell * cell, GtsFile * fp, GfsDomain * domain); void gfs_cell_write_binary (const FttCell * cell, FILE * fp, GSList * variables); guint gfs_domain_alloc (GfsDomain * domain); void gfs_domain_free (GfsDomain * domain, guint i); GfsVariable * gfs_domain_add_variable (GfsDomain * domain, const gchar * name, const gchar * description); GfsVariable * gfs_domain_get_or_add_variable (GfsDomain * domain, const gchar * name, const gchar * description); void gfs_domain_solid_force (GfsDomain * domain, FttVector * pf, FttVector * vf, FttVector * pm, FttVector * vm, GfsFunction * weight); guint gfs_domain_tag_droplets (GfsDomain * domain, GfsVariable * c, GfsVariable * tag); void gfs_domain_remove_droplets (GfsDomain * domain, GfsVariable * c, GfsVariable * v, gint min, gdouble val); void gfs_domain_remove_ponds (GfsDomain * domain, gint min, FttCellCleanupFunc cleanup, gpointer data); void gfs_domain_remove_specks (GfsDomain * domain); void gfs_domain_timer_start (GfsDomain * domain, const gchar * name); void gfs_domain_timer_stop (GfsDomain * domain, const gchar * name); typedef void (* FttCellCombineTraverseFunc) (FttCell * cell1, FttCell * cell2, gpointer data); void gfs_domain_combine_traverse (GfsDomain * domain1, GfsDomain * domain2, FttCellCombineTraverseFunc inside, gpointer idata, FttCellTraverseFunc outside, gpointer odata); typedef struct { gchar * name, * description; gpointer func, data; } GfsDerivedVariableInfo; GfsDerivedVariable * gfs_domain_add_derived_variable (GfsDomain * domain, GfsDerivedVariableInfo info); gboolean gfs_domain_remove_derived_variable (GfsDomain * domain, const gchar * name); void gfs_domain_sum (GfsDomain * domain, FttDirection d, GfsFunction * f, GfsVariable * v); void gfs_domain_filter (GfsDomain * domain, GfsVariable * v, GfsVariable * fv); typedef struct _GfsRequest GfsRequest; GfsRequest * gfs_send_objects (GSList * list, int dest); void gfs_wait (GfsRequest * r); GSList * gfs_receive_objects (GfsDomain * domain, int src); GfsRequest * gfs_send_boxes (GfsDomain * domain, GSList * boxes, int dest); GSList * gfs_receive_boxes (GfsDomain * domain, int src); /** * gfs_domain_face_fraction: * @domain; a #GfsDomain. * @face: a #FttCellFace. * * Returns: the surface fraction of @face taking into account any * orthogonal metric of @domain. */ static inline gdouble gfs_domain_face_fraction (const GfsDomain * domain, const FttCellFace * face) { gdouble f = GFS_FACE_FRACTION (face); if (domain->face_metric) f *= (* domain->face_metric) (domain, face); return f; } /** * gfs_domain_face_fraction_right: * @domain; a #GfsDomain. * @face: a #FttCellFace. * * Returns: the surface fraction "to the right" of @face taking into account any * orthogonal metric of @domain. */ static inline gdouble gfs_domain_face_fraction_right (const GfsDomain * domain, const FttCellFace * face) { gdouble f = GFS_FACE_FRACTION_RIGHT (face); if (domain->face_metric) { FttCellFace face1; face1.cell = face->neighbor; face1.d = FTT_OPPOSITE_DIRECTION (face->d); f *= (* domain->face_metric) (domain, &face1); } return f; } /** * gfs_domain_cell_fraction: * @domain; a #GfsDomain. * @cell: a #FttCell. * * Returns: the volume fraction of @cell taking into account any * orthogonal metric of @domain. */ static inline gdouble gfs_domain_cell_fraction (const GfsDomain * domain, const FttCell * cell) { gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.; if (domain->cell_metric) a *= (* domain->cell_metric) (domain, cell); return a; } /** * gfs_domain_solid_metric: * @domain; a #GfsDomain. * @cell: a mixed #FttCell. * @m: a #FttVector. * * Fills @m with the components of the coordinate metric at the center * of area of the solid surface contained within @cell. */ static inline void gfs_domain_solid_metric (const GfsDomain * domain, const FttCell * cell, FttVector * m) { if (domain->solid_metric) (* domain->solid_metric) (domain, cell, m); } /** * gfs_domain_face_scale_metric: * @domain; a #GfsDomain. * @face: a #FttCellFace. * @c: a #FttComponent. * * Returns: the @c component of the scale factor of the metric at the * center of the face. */ static inline gdouble gfs_domain_face_scale_metric (const GfsDomain * domain, const FttCellFace * face, FttComponent c) { if (domain->face_scale_metric) return (* domain->face_scale_metric) (domain, face, c); return 1.; } /** * gfs_cell_volume: * @cell: a #FttCell. * @domain: a #GfsDomain. * * Returns: the volume of @cell. */ static inline gdouble gfs_cell_volume (const FttCell * cell, const GfsDomain * domain) { double v = ftt_cell_volume (cell)*(GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.); return domain->cell_metric ? (* domain->cell_metric) (domain, cell)*v : v; } GtsObject * gfs_object_from_name (GfsDomain * domain, const gchar * name); /* GfsDomainProjection: Header */ typedef struct _GfsDomainProjection GfsDomainProjection; struct _GfsDomainProjection { /*< private >*/ GfsDomain parent; /*< public >*/ GfsDomain * domain; FttComponent c; }; #define GFS_DOMAIN_PROJECTION(obj) GTS_OBJECT_CAST (obj,\ GfsDomainProjection,\ gfs_domain_projection_class ()) GfsDomainClass * gfs_domain_projection_class (void); GfsDomainProjection * gfs_domain_projection_new (GfsDomain * domain, FttComponent c); void gfs_domain_projection_reshape (GfsDomainProjection * proj); typedef void (* GfsProjectionTraverseFunc) (FttCell * cell, FttCell * proj, gpointer data); void gfs_domain_projection_traverse (GfsDomainProjection * domain, FttTraverseType order, FttTraverseFlags flags, gint max_depth, GfsProjectionTraverseFunc func, gpointer data); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __DOMAIN_H__ */ gerris-snapshot-131206/src/refine.h0000644000175100017510000000640512250371171014077 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __REFINE_H__ #define __REFINE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "simulation.h" #if FTT_2D # define GFS_DIAGONAL 0.707106781187 #else /* 3D */ # define GFS_DIAGONAL 0.866025403785 #endif /* 3D */ /* GfsRefine: Header */ typedef struct _GfsRefine GfsRefine; typedef struct _GfsRefineClass GfsRefineClass; struct _GfsRefine { GtsSListContainee parent; GfsFunction * maxlevel; }; struct _GfsRefineClass { GtsSListContaineeClass parent_class; void (* refine) (GfsRefine * refine, GfsSimulation * simulation); }; #define GFS_REFINE(obj) GTS_OBJECT_CAST (obj,\ GfsRefine,\ gfs_refine_class ()) #define GFS_REFINE_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsRefineClass,\ gfs_refine_class()) #define GFS_IS_REFINE(obj) (gts_object_is_from_class (obj,\ gfs_refine_class ())) GfsRefineClass * gfs_refine_class (void); GfsRefine * gfs_refine_new (GfsRefineClass * klass); /* GfsRefineSolid: Header */ #define GFS_IS_REFINE_SOLID(obj) (gts_object_is_from_class (obj,\ gfs_refine_solid_class ())) GfsRefineClass * gfs_refine_solid_class (void); /* GfsRefineSurface: Header */ typedef struct _GfsRefineSurface GfsRefineSurface; struct _GfsRefineSurface { GfsRefine parent; GfsGenericSurface * surface; }; #define GFS_REFINE_SURFACE(obj) GTS_OBJECT_CAST (obj,\ GfsRefineSurface,\ gfs_refine_surface_class ()) #define GFS_IS_REFINE_SURFACE(obj) (gts_object_is_from_class (obj,\ gfs_refine_surface_class ())) GfsRefineClass * gfs_refine_surface_class (void); /* GfsRefineDistance: Header */ typedef struct _GfsRefineDistance GfsRefineDistance; struct _GfsRefineDistance { GfsRefineSurface parent; GNode * stree; }; #define GFS_REFINE_DISTANCE(obj) GTS_OBJECT_CAST (obj,\ GfsRefineDistance,\ gfs_refine_distance_class ()) #define GFS_IS_REFINE_DISTANCE(obj) (gts_object_is_from_class (obj,\ gfs_refine_distance_class ())) GfsRefineClass * gfs_refine_distance_class (void); /* GfsRefineHeight: Header */ #define GFS_IS_REFINE_HEIGHT(obj) (gts_object_is_from_class (obj,\ gfs_refine_height_class ())) GfsRefineClass * gfs_refine_height_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __REFINE_H__ */ gerris-snapshot-131206/src/poisson.h0000644000175100017510000001241112250371171014313 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __POISSON_H__ #define __POISSON_H__ #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "domain.h" typedef struct _GfsMultilevelParams GfsMultilevelParams; typedef void (* GfsPoissonSolverFunc) (GfsDomain * domain, GfsMultilevelParams * par, GfsVariable * lhs, GfsVariable * rhs, GfsVariable * res, GfsVariable * dia, gdouble dt); struct _GfsMultilevelParams { gdouble tolerance; guint nrelax, erelax; guint minlevel; guint nitermax, nitermin; guint dimension; guint niter; guint depth; gboolean weighted, function; gdouble beta, omega; GfsNorm residual_before, residual; GfsPoissonSolverFunc poisson_solve; }; void gfs_multilevel_params_init (GfsMultilevelParams * par); void gfs_multilevel_params_write (GfsMultilevelParams * par, FILE * fp); void gfs_multilevel_params_read (GfsMultilevelParams * par, GtsFile * fp); void gfs_multilevel_params_stats_write (GfsMultilevelParams * par, FILE * fp); void gfs_relax (GfsDomain * domain, guint d, gint max_depth, gdouble omega, GfsVariable * u, GfsVariable * rhs, GfsVariable * dia); void gfs_residual (GfsDomain * domain, guint d, FttTraverseFlags flags, gint max_depth, GfsVariable * u, GfsVariable * rhs, GfsVariable * dia, GfsVariable * res); void gfs_poisson_coefficients (GfsDomain * domain, GfsFunction * alpha, gboolean positive, gboolean centered, gboolean reset); void gfs_poisson_cycle (GfsDomain * domain, GfsMultilevelParams * p, GfsVariable * u, GfsVariable * rhs, GfsVariable * dia, GfsVariable * res); gdouble gfs_poisson_compatibility (GfsDomain * domain, GfsVariable * lhs, GfsVariable * rhs, gdouble dt); void gfs_poisson_solve (GfsDomain * domain, GfsMultilevelParams * par, GfsVariable * lhs, GfsVariable * rhs, GfsVariable * res, GfsVariable * dia, gdouble dt); void gfs_diffusion_coefficients (GfsDomain * domain, GfsSourceDiffusion * d, gdouble dt, GfsVariable * rhoc, GfsVariable * metric, GfsFunction * alpha, gdouble beta); void gfs_diffusion_rhs (GfsDomain * domain, GfsVariable * v, GfsVariable * rhs, GfsVariable * rhoc, GfsVariable * metric, gdouble beta); void gfs_diffusion_residual (GfsDomain * domain, GfsVariable * u, GfsVariable * rhs, GfsVariable * rhoc, GfsVariable * metric, GfsVariable * res); void gfs_diffusion_cycle (GfsDomain * domain, guint levelmin, guint depth, guint nrelax, GfsVariable * u, GfsVariable * rhs, GfsVariable * rhoc, GfsVariable * metric, GfsVariable * res); /* GfsLinearProblem: Object */ struct _GfsLinearProblem { GPtrArray * LP; GArray * rhs, * lhs; GfsVariable * id, * neighbor, * neighborw; gint istart; }; GfsLinearProblem * gfs_linear_problem_new (GfsDomain * domain); void gfs_linear_problem_add_stencil (GfsLinearProblem * lp, GfsStencil * stencil); void gfs_linear_problem_destroy (GfsLinearProblem * lp); GfsLinearProblem * gfs_get_poisson_problem (GfsDomain * domain, GfsVariable * rhs, GfsVariable * lhs, GfsVariable * dia, gint maxlevel, GfsVariable * v); GfsLinearProblem * gfs_get_diffusion_problem (GfsDomain * domain, GfsVariable * rhs, GfsVariable * lhs, GfsVariable * rhoc, GfsVariable * metric, gint maxlevel, GfsVariable * v); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __POISSON_H__ */ gerris-snapshot-131206/src/event.c0000644000175100017510000021761412250371171013751 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief GfsEvents. */ #include #include #include #include #include #include #include "event.h" #include "solid.h" #include "output.h" #include "init.h" /** * Any action to be performed at a given time. * \beginobject{GfsEvent} */ /** * gfs_event_next: * @event: a #GfsEvent. * @sim: a #GfsSimulation. * * Returns: the next physical time at which @event will be realised. */ gdouble gfs_event_next (GfsEvent * event, GfsSimulation * sim) { g_return_val_if_fail (event != NULL, G_MAXDOUBLE); g_return_val_if_fail (sim != NULL, G_MAXDOUBLE); if (sim->time.t < event->t) return event->t; if (event->t >= event->end || event->i >= event->iend || sim->time.t > event->end || sim->time.i > event->iend) return G_MAXDOUBLE; if (event->end_event) return G_MAXDOUBLE; if (sim->time.t >= event->t) { if (event->istep < G_MAXINT) { if (event->n == 0) return G_MAXDOUBLE; } else return event->start + (event->n + 1)*event->step; } if (sim->time.i >= event->i && event->step < G_MAXDOUBLE && event->n == 0) return sim->time.t + event->step; return G_MAXDOUBLE; } static gboolean gfs_event_event (GfsEvent * event, GfsSimulation * sim) { if (event->redo) { event->redo = FALSE; return event->realised; } if (event->t >= event->end || event->i >= event->iend || sim->time.t > event->end || sim->time.i > event->iend) { gts_object_destroy (GTS_OBJECT (event)); return FALSE; } if (event->end_event) { if (event->n == 0 && (sim->time.t >= sim->time.end || sim->time.i >= sim->time.iend)) { event->n = 1; return (event->realised = TRUE); } else return (event->realised = FALSE); } if (sim->time.t >= event->t) { if (event->istep < G_MAXINT) { if (event->n == 0) { event->i = sim->time.i + event->istep; event->n++; return (event->realised = TRUE); } } else { event->n++; event->t = event->start + event->n*event->step; return (event->realised = TRUE); } } if (sim->time.i >= event->i) { if (event->step < G_MAXDOUBLE) { if (event->n == 0) { event->start = sim->time.t; event->t = event->start + event->step; event->n = 1; return (event->realised = TRUE); } } else { event->n++; event->i += event->istep; return (event->realised = TRUE); } } return (event->realised = FALSE); } static void gfs_event_write (GtsObject * object, FILE * fp) { GfsEvent * event = GFS_EVENT (object); fprintf (fp, "%s", object->klass->info.name); if (event->name) fprintf (fp, " *%s", event->name); fputs (" { ", fp); if (event->end_event) fputs ("start = end ", fp); else { if (event->start > 0. && event->start < G_MAXDOUBLE/2.) fprintf (fp, "start = %g ", event->start); if (event->step < G_MAXDOUBLE) fprintf (fp, "step = %g ", event->step); if (event->end < G_MAXDOUBLE) fprintf (fp, "end = %g ", event->end); if (event->istart > 0 && event->istart < G_MAXINT/2) fprintf (fp, "istart = %u ", event->istart); if (event->istep < G_MAXINT) fprintf (fp, "istep = %u ", event->istep); if (event->iend < G_MAXINT) fprintf (fp, "iend = %u ", event->iend); } fputc ('}', fp); } static void event_init (GfsEvent * object) { object->t = 0.; object->start = 0.; object->end = G_MAXDOUBLE; object->step = G_MAXDOUBLE; object->i = 0; object->istart = 0; object->iend = G_MAXINT; object->istep = G_MAXINT; object->n = 0; object->end_event = FALSE; } static void gfs_event_read (GtsObject ** o, GtsFile * fp) { GfsEvent * event = GFS_EVENT (*o); GtsObjectClass * klass; gboolean class_changed = FALSE; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (GfsEventClass)"); return; } klass = gfs_object_class_from_name (fp->token->str); if (klass == NULL) { gts_file_error (fp, "unknown class `%s'", fp->token->str); return; } if (!gts_object_class_is_from_class (klass, gfs_event_class ())) { gts_file_error (fp, "`%s' is not a GfsEvent", fp->token->str); return; } if (klass != (*o)->klass) { *o = gts_object_new (klass); gts_object_destroy (GTS_OBJECT (event)); event = GFS_EVENT (*o); class_changed = TRUE; } gts_file_next_token (fp); /* optional name */ if (fp->type == GTS_STRING && fp->token->str[0] == '*') { event->name = g_strdup (&(fp->token->str[1])); g_hash_table_insert (GFS_DOMAIN (gfs_object_simulation (*o))->objects, event->name, *o); gts_file_next_token (fp); } if (fp->type == '{') { GtsFileVariable var[] = { {GTS_STRING, "start", TRUE}, {GTS_DOUBLE, "end", TRUE}, {GTS_DOUBLE, "step", TRUE}, {GTS_UINT, "istart", TRUE}, {GTS_UINT, "iend", TRUE}, {GTS_UINT, "istep", TRUE}, {GTS_NONE} }; gchar * start = NULL; var[0].data = &start; var[1].data = &event->end; var[2].data = &event->step; var[3].data = &event->istart; var[4].data = &event->iend; var[5].data = &event->istep; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; if (start) { if (!strcmp (start, "end")) { event->end_event = TRUE; if (var[1].set) gts_file_variable_error (fp, var, "end", "end cannot be set for an `end' event"); else if (var[2].set) gts_file_variable_error (fp, var, "step", "step cannot be set for an `end' event"); else if (var[3].set) gts_file_variable_error (fp, var, "istart", "istart cannot be set for an `end' event"); else if (var[4].set) gts_file_variable_error (fp, var, "iend", "iend cannot be set for an `end' event"); else if (var[5].set) gts_file_variable_error (fp, var, "istep", "istep cannot be set for an `end' event"); } else event->start = atof (start); g_free (start); } if (fp->type == GTS_ERROR) return; if (var[2].set && var[5].set) { gts_file_variable_error (fp, var, "istep", "step and istep cannot be set simultaneously"); return; } if (var[2].set) event->istep = G_MAXINT; if (var[2].set && event->step <= 0.) { gts_file_variable_error (fp, var, "step", "step `%g' must be strictly positive", event->step); return; } if (!var[2].set && !var[5].set && var[1].set) { gts_file_error (fp, "expecting a number (step or istep)"); return; } if (var[1].set && event->end <= event->start) { gts_file_variable_error (fp, var, "end", "end `%g' must be larger than start `%g'", event->end, event->start); return; } if (event->start < 0. && var[2].set) event->start = 0.; if (var[0].set || !var[3].set) event->t = event->start; else event->t = event->start = G_MAXDOUBLE/2.; if (!var[5].set && !var[2].set && var[4].set) { gts_file_error (fp, "expecting a number (istep or step)"); return; } if (var[3].set && event->iend <= event->istart) { gts_file_variable_error (fp, var, "iend", "iend `%u' must be larger than istart `%u'", event->iend, event->istart); return; } if (var[3].set || !var[0].set) event->i = event->istart; else event->i = event->istart = G_MAXINT/2; } if (class_changed && fp->type != '\n' && klass->read) (* klass->read) (o, fp); } static void gfs_event_destroy (GtsObject * o) { GfsEvent * event = GFS_EVENT (o); if (event->name) { g_hash_table_remove (GFS_DOMAIN (gfs_object_simulation (o))->objects, event->name); g_free (event->name); } (* GTS_OBJECT_CLASS (gfs_event_class ())->parent_class->destroy) (o); } static void gfs_event_class_init (GfsEventClass * klass) { klass->event = gfs_event_event; GTS_OBJECT_CLASS (klass)->write = gfs_event_write; GTS_OBJECT_CLASS (klass)->read = gfs_event_read; GTS_OBJECT_CLASS (klass)->destroy = gfs_event_destroy; } GfsEventClass * gfs_event_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_event_info = { "GfsEvent", sizeof (GfsEvent), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_event_class_init, (GtsObjectInitFunc) event_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_slist_containee_class ()), &gfs_event_info); } return klass; } GfsEvent * gfs_event_new (GfsEventClass * klass) { GfsEvent * object; g_return_val_if_fail (klass != NULL, NULL); object = GFS_EVENT (gts_object_new (GTS_OBJECT_CLASS (klass))); return object; } /** * gfs_event_set: * @e: a #GfsEvent. * @start: start time. * @end: end time. * @step: time step. * @istart: start iteration. * @iend: end iteration. * @istep: iteration step. * * Sets the properties of event @e. * * If any of the arguments is negative, the corresponding value in @e * is unchanged. */ void gfs_event_set (GfsEvent * e, gdouble start, gdouble end, gdouble step, gint istart, gint iend, gint istep) { g_return_if_fail (e != NULL); g_return_if_fail (end < 0. || start < 0. || start <= end); g_return_if_fail (istep >= 0 || step >= 0. || iend < 0); g_return_if_fail (istart < 0 || iend < 0 || istart <= iend); if (start >= 0.) e->start = start; if (end >= 0.) e->end = end; if (step >= 0.) e->step = step; if (istart >= 0) e->istart = istart; if (iend >= 0) e->iend = iend; if (istep >= 0) e->istep = istep; if (start >= 0. || istart < 0) e->t = e->start; else e->t = e->start = G_MAXDOUBLE/2.; if (istart >= 0 || start < 0.) e->i = e->istart; else e->i = e->istart = G_MAXINT/2; } /** * gfs_event_init: * @event: a #GfsEvent. * @sim: a #GfsSimulation. * * Initalizes @event associated with @sim. In particular, if @event is * an "init" event it is activated by this function. */ void gfs_event_init (GfsEvent * event, GfsSimulation * sim) { g_return_if_fail (event != NULL); g_return_if_fail (sim != NULL); if (event->start < 0.) { /* "init" event */ g_assert (GFS_EVENT_CLASS (GTS_OBJECT (event)->klass)->event); (* GFS_EVENT_CLASS (GTS_OBJECT (event)->klass)->event) (event, sim); } else if (event->end_event) event->t = event->start = G_MAXDOUBLE/2.; else { if (event->istep < G_MAXINT) while (event->i < sim->time.i) { event->n++; event->i += event->istep; } else while (event->t < sim->time.t) { event->n++; event->t = event->start + event->n*event->step; } } } /** * gfs_event_do: * @event: a #GfsEvent: * @sim: a #GfsSimulation. * * Realises the event if active. */ void gfs_event_do (GfsEvent * event, GfsSimulation * sim) { GfsEventClass * klass; g_return_if_fail (event != NULL); g_return_if_fail (sim != NULL); gchar * name = GTS_OBJECT (event)->klass->info.name; gfs_domain_timer_start (GFS_DOMAIN (sim), name); klass = GFS_EVENT_CLASS (GTS_OBJECT (event)->klass); g_assert (klass->event); if ((* klass->event) (event, sim) && klass->post_event) (* klass->post_event) (event, sim); gfs_domain_timer_stop (GFS_DOMAIN (sim), name); } /** * gfs_event_half_do: * @event: a #GfsEvent: * @sim: a #GfsSimulation. * * Realises the half-event if active. */ void gfs_event_half_do (GfsEvent * event, GfsSimulation * sim) { g_return_if_fail (event != NULL); g_return_if_fail (sim != NULL); if (event->realised && GFS_EVENT_CLASS (GTS_OBJECT (event)->klass)->event_half) (* GFS_EVENT_CLASS (GTS_OBJECT (event)->klass)->event_half) (event, sim); } /** * gfs_event_redo: * @event: a #GfsEvent: * @sim: a #GfsSimulation. * * Realises the event if it has just been realised. */ void gfs_event_redo (GfsEvent * event, GfsSimulation * sim) { GfsEventClass * klass; g_return_if_fail (event != NULL); g_return_if_fail (sim != NULL); klass = GFS_EVENT_CLASS (GTS_OBJECT (event)->klass); g_assert (klass->event); event->redo = TRUE; if ((* klass->event) (event, sim) && klass->post_event) (* klass->post_event) (event, sim); } /** \endobject{GfsEvent} */ /** * Abstract class for initialisation events. * \beginobject{GfsGenericInit} */ static void gfs_generic_init_init (GfsEvent * event) { event->start = -1; } GfsEventClass * gfs_generic_init_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_generic_init_info = { "GfsGenericInit", sizeof (GfsEvent), sizeof (GfsEventClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) gfs_generic_init_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_generic_init_info); } return klass; } /** \endobject{GfsGenericInit} */ /** * Initialising variables. * \beginobject{GfsInit} */ typedef struct { GfsVariable * v[FTT_DIMENSION]; GfsFunction * f[FTT_DIMENSION]; guint n; } VarFunc; static VarFunc * var_func_new (GfsVariable ** v, GfsFunction ** f, int n) { VarFunc * vf = g_malloc (sizeof (VarFunc)); gint i; for (i = 0; i < n; i++) { vf->v[i] = v[i]; vf->f[i] = f[i]; } vf->n = n; return vf; } static void var_func_destroy (VarFunc * v) { gint i; for (i = 0; i < v->n; i++) gts_object_destroy (GTS_OBJECT (v->f[i])); g_free (v); } static void gfs_init_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_init_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_init_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } fp->scope_max++; gts_file_next_token (fp); while (fp->type != GTS_ERROR && fp->type != '}') { if (fp->type == '\n') { gts_file_next_token (fp); continue; } GfsInit * init = GFS_INIT (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (fp->type == '(') { /* vector */ GfsVariable * v[FTT_DIMENSION]; if (!gfs_read_variable_vector (fp, v, domain)) return; if (fp->type != '=') { gts_file_error (fp, "expecting `='"); return; } gts_file_next_token (fp); GfsFunction * f[FTT_DIMENSION]; if (!gfs_read_function_vector (fp, v, f, domain)) return; init->f = g_slist_append (init->f, var_func_new (v, f, FTT_DIMENSION)); } else if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable name"); return; } else { /* scalar */ GfsVariable * v = gfs_domain_get_or_add_variable (domain, fp->token->str, NULL); GfsFunction * f; if (!v) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting `='"); return; } gts_file_next_token (fp); f = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (f, gfs_object_simulation (*o), fp); if (fp->type == GTS_ERROR) { gts_object_destroy (GTS_OBJECT (f)); return; } gfs_function_set_units (f, v->units); init->f = g_slist_append (init->f, var_func_new (&v, &f, 1)); } } if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); GfsEvent * event = GFS_EVENT (*o); if (event->start < 0. && (event->istep < G_MAXINT || event->step < G_MAXDOUBLE)) event->start = 0.; } static void gfs_init_write (GtsObject * o, FILE * fp) { GSList * i; if (GTS_OBJECT_CLASS (gfs_init_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_init_class ())->parent_class->write) (o, fp); fputs (" {\n", fp); i = GFS_INIT (o)->f; while (i) { VarFunc * v = i->data; if (v->n == 1) { /* scalar */ fprintf (fp, " %s =", v->v[0]->name); gfs_function_write (v->f[0], fp); fputc ('\n', fp); } else { /* vector */ fprintf (fp, " (%s", v->v[0]->name); gint i; for (i = 1; i < v->n; i++) fprintf (fp, ",%s", v->v[i]->name); fputs (") = (", fp); gfs_function_write (v->f[0], fp); for (i = 1; i < v->n; i++) { fputc (',', fp); gfs_function_write (v->f[i], fp); } fputs (")\n", fp); } i = i->next; } fputc ('}', fp); } static void gfs_init_destroy (GtsObject * object) { GfsInit * i = GFS_INIT (object); g_slist_foreach (i->f, (GFunc) var_func_destroy, NULL); g_slist_free (i->f); (* GTS_OBJECT_CLASS (gfs_init_class ())->parent_class->destroy) (object); } static void init_scalar (FttCell * cell, VarFunc * vf) { GFS_VALUE (cell, vf->v[0]) = gfs_function_value (vf->f[0], cell); } static void init_vector (FttCell * cell, VarFunc * vf) { FttVector p, u; int i; for (i = 0; i < FTT_DIMENSION; i++) (&u.x)[i] = gfs_function_value (vf->f[i], cell); ftt_cell_pos (cell, &p); gfs_simulation_map_vector (GFS_SIMULATION (vf->v[0]->domain), &p, &u); for (i = 0; i < FTT_DIMENSION; i++) GFS_VALUE (cell, vf->v[i]) = (&u.x)[i]; } static gboolean gfs_init_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_init_class ())->parent_class)->event) (event, sim)) { GSList * i = GFS_INIT (event)->f; while (i) { VarFunc * vf = i->data; gfs_catch_floating_point_exceptions (); /* fixme: the check for "layered" variables is messy */ if (!gfs_char_in_string (vf->v[0]->name[strlen (vf->v[0]->name) - 1], "0123456789")) gfs_domain_traverse_layers (GFS_DOMAIN (sim), (FttCellTraverseFunc) (vf->n == 1 ? init_scalar : init_vector), vf); else gfs_domain_traverse_leaves (GFS_DOMAIN (sim), (FttCellTraverseFunc) (vf->n == 1 ? init_scalar : init_vector), vf); gfs_restore_fpe_for_function (vf->f[0]); if (vf->v[0]->component == FTT_DIMENSION) gfs_domain_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1, vf->v[0]); i = i->next; } /* boundary conditions for vector quantities need to be called in a separate loop so that they are correctly applied for weird topologies (e.g. cubed sphere) */ i = GFS_INIT (event)->f; while (i) { VarFunc * vf = i->data; gint j; for (j = 0; j < vf->n; j++) if (vf->v[j]->component < FTT_DIMENSION) gfs_domain_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1, vf->v[j]); i = i->next; } return TRUE; } return FALSE; } static void gfs_init_class_init (GfsGenericInitClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_init_event; GTS_OBJECT_CLASS (klass)->read = gfs_init_read; GTS_OBJECT_CLASS (klass)->write = gfs_init_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_init_destroy; } GfsGenericInitClass * gfs_init_class (void) { static GfsGenericInitClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_init_info = { "GfsInit", sizeof (GfsInit), sizeof (GfsGenericInitClass), (GtsObjectClassInitFunc) gfs_init_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_init_class ()), &gfs_init_info); } return klass; } /** \endobject{GfsInit} */ /** * "Masking out" part of the mesh. * \beginobject{GfsInitMask} */ static void gfs_init_mask_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_init_mask_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; gfs_function_read (GFS_INIT_MASK (*o)->mask, GFS_DOMAIN (gfs_object_simulation (*o)), fp); } static void gfs_init_mask_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_init_mask_class ())->parent_class->write) (o, fp); gfs_function_write (GFS_INIT_MASK (o)->mask, fp); } static void gfs_init_mask_destroy (GtsObject * object) { gts_object_destroy (GTS_OBJECT (GFS_INIT_MASK (object)->mask)); (* GTS_OBJECT_CLASS (gfs_init_mask_class ())->parent_class->destroy) (object); } #define MASKED (1 << GFS_FLAG_USER) static void mask_cells (FttCell * cell, GfsInitMask * m) { if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren child; guint i; ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) mask_cells (child.c[i], m); if (FTT_CELL_IS_LEAF (cell)) /* all the children have been destroyed i.e. the cell is masked */ cell->flags |= MASKED; } else if (gfs_function_value (m->mask, cell) > 0.) cell->flags |= MASKED; if ((cell->flags & MASKED) && !FTT_CELL_IS_ROOT (cell)) ftt_cell_destroy (cell, (FttCellCleanupFunc) gfs_cell_cleanup, gfs_object_simulation (m)); } static void foreach_box (GfsBox * box, GfsInitMask * m) { mask_cells (box->root, m); if (box->root->flags & MASKED) m->masked_boxes = g_slist_prepend (m->masked_boxes, box); } static gboolean gfs_init_mask_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_init_mask_class ())->parent_class)->event) (event, sim)) { GfsInitMask * m = GFS_INIT_MASK (event); m->masked_boxes = NULL; gfs_catch_floating_point_exceptions (); gts_container_foreach (GTS_CONTAINER (sim), (GtsFunc) foreach_box, m); gfs_restore_fpe_for_function (m->mask); g_slist_foreach (m->masked_boxes, (GFunc) gts_object_destroy, NULL); g_slist_free (m->masked_boxes); gfs_domain_match (GFS_DOMAIN (sim)); return TRUE; } return FALSE; } static void gfs_init_mask_class_init (GfsGenericInitClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_init_mask_event; GTS_OBJECT_CLASS (klass)->read = gfs_init_mask_read; GTS_OBJECT_CLASS (klass)->write = gfs_init_mask_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_init_mask_destroy; } static void gfs_init_mask (GfsInitMask * m) { m->mask = gfs_function_new (gfs_function_class (), 0.); } GfsGenericInitClass * gfs_init_mask_class (void) { static GfsGenericInitClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_init_mask_info = { "GfsInitMask", sizeof (GfsInitMask), sizeof (GfsGenericInitClass), (GtsObjectClassInitFunc) gfs_init_mask_class_init, (GtsObjectInitFunc) gfs_init_mask, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_init_class ()), &gfs_init_mask_info); } return klass; } /** \endobject{GfsInitMask} */ /* GfsInitFlowConstant: Object: fixme: deprecated */ static void gfs_init_flow_constant_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_init_flow_constant_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_init_flow_constant_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; g_warning ("GfsInitFlowConstant is deprecated you should use GfsInit instead"); } static void gfs_init_flow_constant_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_init_flow_constant_read; } GfsEventClass * gfs_init_flow_constant_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_init_flow_constant_info = { "GfsInitFlowConstant", sizeof (GfsInit), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_init_flow_constant_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_init_class ()), &gfs_init_flow_constant_info); } return klass; } /** * Initialising a vorticity field. * \beginobject{GfsInitVorticity} */ static void gfs_init_vorticity_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_init_vorticity_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_init_vorticity_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; #if FTT_2D gfs_function_read (GFS_INIT_VORTICITY (*o)->f, gfs_object_simulation (*o), fp); #else /* 3D */ FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) gfs_function_read (GFS_INIT_VORTICITY (*o)->fv[c], gfs_object_simulation (*o), fp); #endif /* 3D */ } static void gfs_init_vorticity_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_init_vorticity_class ())->parent_class->write) (o, fp); #if FTT_2D gfs_function_write (GFS_INIT_VORTICITY (o)->f, fp); #else /* 3D */ FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) gfs_function_write (GFS_INIT_VORTICITY (o)->fv[c], fp); #endif /* 3D */ } static void gfs_init_vorticity_destroy (GtsObject * object) { #if FTT_2D gts_object_destroy (GTS_OBJECT (GFS_INIT_VORTICITY (object)->f)); #else /* 3D */ FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) gts_object_destroy (GTS_OBJECT (GFS_INIT_VORTICITY (object)->fv[c])); #endif /* 3D */ (* GTS_OBJECT_CLASS (gfs_init_vorticity_class ())->parent_class->destroy) (object); } static void sum_volume (FttCell * cell, GtsRange * vol) { gdouble size = ftt_cell_size (cell); if (GFS_IS_MIXED (cell)) gts_range_add_value (vol, size*size*GFS_STATE (cell)->solid->a); else gts_range_add_value (vol, size*size); } static void add_ddiv (FttCell * cell, gpointer * data) { gdouble * ddiv = data[0]; GfsVariable * div = data[1]; gdouble size = ftt_cell_size (cell); if (GFS_IS_MIXED (cell)) GFS_VALUE (cell, div) += size*size*GFS_STATE (cell)->solid->a*(*ddiv); else GFS_VALUE (cell, div) += size*size*(*ddiv); } static void correct_div (GfsDomain * domain, GfsVariable * v) { GtsRange div, vol; gdouble ddiv; gpointer data[2]; div = gfs_domain_stats_variable (domain, v, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); gts_range_init (&vol); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) sum_volume, &vol); gts_range_update (&vol); ddiv = - div.mean/vol.mean; data[0] = &ddiv; data[1] = v; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) add_ddiv, data); } static void stream_from_vorticity (GfsDomain * domain, GfsVariable * stream, GfsVariable * vorticity, gdouble tolerance) { GfsNorm norm; guint maxit = 100; GfsVariable * res, * dia; GfsMultilevelParams par; g_return_if_fail (domain != NULL); dia = gfs_temporary_variable (domain); gfs_poisson_coefficients (domain, NULL, TRUE, TRUE, TRUE); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_reset, dia); correct_div (domain, vorticity); /* enforce solvability condition */ gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_reset, stream); res = gfs_temporary_variable (domain); gfs_residual (domain, FTT_DIMENSION, FTT_TRAVERSE_LEAFS, -1, stream, vorticity, dia, res); norm = gfs_domain_norm_residual (domain, FTT_TRAVERSE_LEAFS, -1, 1., res); gfs_multilevel_params_init (&par); par.depth = gfs_domain_depth (domain); while (norm.infty > tolerance && maxit) { gfs_poisson_cycle (domain, &par, stream, vorticity, dia, res); norm = gfs_domain_norm_residual (domain, FTT_TRAVERSE_LEAFS, -1, 1., res); // fprintf (stderr, "maxit: %d infty: %g\n", maxit, norm.infty); maxit--; } if (maxit == 0) g_warning ("GfsInitVorticity: cannot solve streamfunction from vorticity\n" " (residual: %g)", norm.infty); gts_object_destroy (GTS_OBJECT (res)); gts_object_destroy (GTS_OBJECT (dia)); } static void init_from_streamfunction (FttCell * cell, GfsInitVorticity * init) { gdouble size = ftt_cell_size (cell); #if FTT_2D GFS_VALUE (cell, init->u[0]) = - gfs_center_gradient (cell, FTT_Y, init->stream->i)/size; GFS_VALUE (cell, init->u[1]) = gfs_center_gradient (cell, FTT_X, init->stream->i)/size; #else /* 3D */ GFS_VALUE (cell, init->u[0]) = (gfs_center_gradient (cell, FTT_Z, init->stream[1]->i) - gfs_center_gradient (cell, FTT_Y, init->stream[2]->i))/size; GFS_VALUE (cell, init->u[1]) = (gfs_center_gradient (cell, FTT_X, init->stream[2]->i) - gfs_center_gradient (cell, FTT_Z, init->stream[0]->i))/size; GFS_VALUE (cell, init->u[2]) = (gfs_center_gradient (cell, FTT_Y, init->stream[0]->i) - gfs_center_gradient (cell, FTT_X, init->stream[1]->i))/size; #endif /* 3D */ } static void compute_vorticity (FttCell * cell, GfsInitVorticity * init) { gdouble size = ftt_cell_size (cell); GFS_VALUE (cell, init->vort) = gfs_function_value (init->f, cell)*size*size; } static gboolean gfs_init_vorticity_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_init_vorticity_class ())->parent_class)->event) (event, sim)) { GfsInitVorticity * init = GFS_INIT_VORTICITY (event); GfsDomain * domain = GFS_DOMAIN (sim); #if FTT_2D init->vort = gfs_temporary_variable (domain); init->stream = gfs_temporary_variable (domain); gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_vorticity, event); gfs_restore_fpe_for_function (init->f); stream_from_vorticity (domain, init->stream, init->vort, 1e-9); gts_object_destroy (GTS_OBJECT (init->vort)); init->u = gfs_domain_velocity (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) init_from_streamfunction, init); gts_object_destroy (GTS_OBJECT (init->stream)); #else /* 3D */ FttComponent c; init->vort = gfs_temporary_variable (domain); for (c = 0; c < FTT_DIMENSION; c++) { init->stream[c] = gfs_temporary_variable (domain); gfs_catch_floating_point_exceptions (); init->f = init->fv[c]; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_vorticity, event); gfs_restore_fpe_for_function (init->f); stream_from_vorticity (domain, init->stream[c], init->vort, 1e-9); } gts_object_destroy (GTS_OBJECT (init->vort)); init->u = gfs_domain_velocity (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) init_from_streamfunction, init); for (c = 0; c < FTT_DIMENSION; c++) gts_object_destroy (GTS_OBJECT (init->stream[c])); #endif /* 3D */ return TRUE; } return FALSE; } static void gfs_init_vorticity_class_init (GtsObjectClass * klass) { klass->read = gfs_init_vorticity_read; klass->write = gfs_init_vorticity_write; klass->destroy = gfs_init_vorticity_destroy; GFS_EVENT_CLASS (klass)->event = gfs_init_vorticity_event; } static void gfs_init_vorticity_init (GfsInitVorticity * init) { #if FTT_2D init->f = gfs_function_new (gfs_function_class (), 0.); #else /* 3D */ FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) init->fv[c] = gfs_function_new (gfs_function_class (), 0.); #endif /* 3D */ } GfsGenericInitClass * gfs_init_vorticity_class (void) { static GfsGenericInitClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_init_vorticity_info = { "GfsInitVorticity", sizeof (GfsInitVorticity), sizeof (GfsGenericInitClass), (GtsObjectClassInitFunc) gfs_init_vorticity_class_init, (GtsObjectInitFunc) gfs_init_vorticity_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_init_class ()), &gfs_init_vorticity_info); } return klass; } /** \endobject{GfsInitVorticity} */ /** * Time-integral of a variable or function. * \beginobject{GfsEventSum} */ static void gfs_event_sum_destroy (GtsObject * o) { GfsEventSum * s = GFS_EVENT_SUM (o); gts_object_destroy (GTS_OBJECT (s->v)); (* GTS_OBJECT_CLASS (gfs_event_sum_class ())->parent_class->destroy) (o); } static void gfs_event_sum_write (GtsObject * o, FILE * fp) { GfsEventSum * s = GFS_EVENT_SUM (o); (* GTS_OBJECT_CLASS (gfs_event_sum_class ())->parent_class->write) (o, fp); gfs_function_write (s->v, fp); fprintf (fp, " %s", s->sv->name); } static void gfs_event_sum_read (GtsObject ** o, GtsFile * fp) { GfsEventSum * s = GFS_EVENT_SUM (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (s)); (* GTS_OBJECT_CLASS (gfs_event_sum_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; gfs_function_read (s->v, domain, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (sv)"); return; } if (!(s->sv = gfs_domain_get_or_add_variable (domain, fp->token->str, "Sum"))) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } gts_file_next_token (fp); } static gboolean gfs_event_sum_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_sum_class ())->parent_class)->event) (event, sim)) { GfsEventSum * s = GFS_EVENT_SUM (event); if (s->last < 0.) gfs_domain_traverse_layers (GFS_DOMAIN (sim), (FttCellTraverseFunc) gfs_cell_reset, s->sv); else { s->dt = sim->time.t - s->last; gfs_catch_floating_point_exceptions (); gfs_domain_traverse_layers (GFS_DOMAIN (sim), s->sum, s); gfs_restore_fpe_for_function (s->v); } s->last = sim->time.t; return TRUE; } return FALSE; } static void gfs_event_sum_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_event_sum_read; GTS_OBJECT_CLASS (klass)->write = gfs_event_sum_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_event_sum_destroy; GFS_EVENT_CLASS (klass)->event = gfs_event_sum_event; } static void sum (FttCell * cell, GfsEventSum * s) { GFS_VALUE (cell, s->sv) += s->dt*gfs_function_value (s->v, cell); } static void gfs_event_sum_init (GfsEventSum * object) { object->last = -1.; object->v = gfs_function_new (gfs_function_class (), 0.); object->sum = (FttCellTraverseFunc) sum; } GfsEventClass * gfs_event_sum_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_event_sum_info = { "GfsEventSum", sizeof (GfsEventSum), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_event_sum_class_init, (GtsObjectInitFunc) gfs_event_sum_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_event_sum_info); } return klass; } /** \endobject{GfsEventSum} */ /** * * \beginobject{GfsEventSumDirection} */ static void gfs_event_sum_direction_write (GtsObject * o, FILE * fp) { GfsEventSumDirection * s = GFS_EVENT_SUM_DIRECTION (o); (* GTS_OBJECT_CLASS (gfs_event_sum_direction_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", ftt_direction_name [s->d]); } static void gfs_event_sum_direction_read (GtsObject ** o, GtsFile * fp) { GfsEventSumDirection * s = GFS_EVENT_SUM_DIRECTION (*o); (* GTS_OBJECT_CLASS (gfs_event_sum_direction_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (direction)"); return; } s->d = ftt_direction_from_name (fp->token->str); if (s->d >= FTT_NEIGHBORS) { gts_file_error (fp, "unknown direction `%s'", fp->token->str); s->d = 0; return; } gts_file_next_token (fp); } static gboolean gfs_event_sum_direction_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_sum_class ())->parent_class)->event) (event, sim)) { GfsEventSumDirection * s = GFS_EVENT_SUM_DIRECTION (event); gfs_domain_sum (GFS_DOMAIN (sim), s->d, GFS_EVENT_SUM (event)->v, GFS_EVENT_SUM (event)->sv); return TRUE; } return FALSE; } static void gfs_event_sum_direction_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_event_sum_direction_read; GTS_OBJECT_CLASS (klass)->write = gfs_event_sum_direction_write; GFS_EVENT_CLASS (klass)->event = gfs_event_sum_direction_event; } GfsEventClass * gfs_event_sum_direction_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_event_sum_direction_info = { "GfsEventSumDirection", sizeof (GfsEventSumDirection), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_event_sum_direction_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_sum_class ()), &gfs_event_sum_direction_info); } return klass; } /** \endobject{GfsEventSumDirection} */ /** * Harmonic decomposition of a variable. * \beginobject{GfsEventHarmonic} */ static void gfs_event_harmonic_destroy (GtsObject * o) { GfsEventHarmonic * s = GFS_EVENT_HARMONIC (o); if (s->Mn) gfs_matrix_free (s->Mn); if (s->M) gfs_matrix_free (s->M); if (s->iM) gfs_matrix_free (s->iM); g_free (s->A); g_free (s->B); g_free (s->vsin); g_free (s->vcos); g_free (s->x); g_free (s->a); g_free (s->Aname); g_free (s->Bname); g_array_free (s->omega, TRUE); (* GTS_OBJECT_CLASS (gfs_event_harmonic_class ())->parent_class->destroy) (o); } static void gfs_event_harmonic_write (GtsObject * o, FILE * fp) { GfsEventHarmonic * s = GFS_EVENT_HARMONIC (o); guint i, j; (* GTS_OBJECT_CLASS (gfs_event_harmonic_class ())->parent_class->write) (o, fp); fprintf (fp, " %s %s %s %s", s->v->name, s->Aname, s->Bname, s->z->name); if (s->e) fprintf (fp, " %s", s->e->name); for (i = 0; i < s->omega->len; i++) fprintf (fp, " %.12lf", g_array_index (s->omega, gdouble, i)); fprintf (fp, " { %d", s->invertible); for (i = 0; i < 2*s->omega->len + 1; i++) for (j = 0; j < 2*s->omega->len + 1; j++) fprintf (fp, " %.12lf", s->M[i][j]); fputs (" }", fp); } static void gfs_event_harmonic_read (GtsObject ** o, GtsFile * fp) { GfsEventHarmonic * s = GFS_EVENT_HARMONIC (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (s)); guint i; (* GTS_OBJECT_CLASS (gfs_event_harmonic_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (v)"); return; } if (!(s->v = gfs_variable_from_name (domain->variables, fp->token->str))) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (A)"); return; } s->Aname = g_strdup (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (B)"); return; } s->Bname = g_strdup (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (Z)"); return; } if (!(s->z = gfs_domain_get_or_add_variable (domain, fp->token->str, "Offset of harmonic decomposition"))) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } s->z->units = s->v->units; gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (E)"); return; } if (!(s->e = gfs_domain_get_or_add_variable (domain, fp->token->str, "Remainder of harmonic decomposition"))) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } s->e->units = 2.*s->v->units; gts_file_next_token (fp); } do { gdouble omega = gfs_read_constant (fp, domain); if (fp->type == GTS_ERROR) return; g_array_append_val (s->omega, omega); } while (fp->type != '\n' && fp->type != '{'); s->Mn = gfs_matrix_new (2*s->omega->len + 1, 2*s->omega->len + 1, sizeof (gdouble)); for (i = 0; i < 2*s->omega->len + 1; i++) s->Mn[i][i] = 1.; s->M = gfs_matrix_new (2*s->omega->len + 1, 2*s->omega->len + 1, sizeof (gdouble)); s->iM = gfs_matrix_new (2*s->omega->len + 1, 2*s->omega->len + 1, sizeof (gdouble)); s->A = g_malloc (sizeof (GfsVariable *)*s->omega->len); s->B = g_malloc (sizeof (GfsVariable *)*s->omega->len); s->vsin = g_malloc (sizeof (gdouble)*s->omega->len); s->vcos = g_malloc (sizeof (gdouble)*s->omega->len); s->x = g_malloc (sizeof (gdouble)*(2*s->omega->len + 1)); s->a = g_malloc (sizeof (gdouble)*(2*s->omega->len + 1)); for (i = 0; i < s->omega->len; i++) { gchar * u; u = g_strdup_printf ("%s%d", s->Aname, i); if (!(s->A[i] = gfs_domain_get_or_add_variable (domain, u, "In-phase component of the harmonic decomposition"))) { gts_file_error (fp, "`%s' is a reserved keyword", u); return; } s->A[i]->units = s->v->units; g_free (u); u = g_strdup_printf ("%s%d", s->Bname, i); if (!(s->B[i] = gfs_domain_get_or_add_variable (domain, u, "Out-of-phase component of the harmonic decomposition"))) { gts_file_error (fp, "`%s' is a reserved keyword", u); return; } s->B[i]->units = s->v->units; g_free (u); } if (fp->type == '{') { guint n = 2*s->omega->len + 1; guint j; fp->scope_max++; gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting a number (invertible)"); return; } s->invertible = atoi (fp->token->str); gts_file_next_token (fp); for (i = 0; i < n; i++) for (j = 0; j < n; j++) if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (M[%d][%d])", i, j); return; } else { s->M[i][j] = atof (fp->token->str); gts_file_next_token (fp); } if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } gts_file_next_token (fp); fp->scope_max--; if (s->invertible) for (i = 0; i < n; i++) for (j = 0; j < n; j++) s->Mn[i][j] = s->M[i][j]; } } static void add_xsin_xcos (FttCell * cell, GfsEventHarmonic * h) { gdouble x = GFS_VALUE (cell, h->v); guint i; for (i = 0; i < h->omega->len; i++) { GFS_VALUE (cell, h->A[i]) += x*h->vcos[i]; GFS_VALUE (cell, h->B[i]) += x*h->vsin[i]; } GFS_VALUE (cell, h->z) += x; if (h->e) GFS_VALUE (cell, h->e) += x*x; } static gdouble de (GfsEventHarmonic * h, gdouble ** M) { guint n = h->omega->len; gdouble xm = h->a[2*n]; gdouble e = xm*(M[2*n][2*n]*xm - 2.*h->x[2*n]); guint i, j; for (i = 0; i < n; i++) { e += 2.*(h->a[i]*(xm*M[i][2*n] - h->x[i]) + h->a[n + i]*(xm*M[n + i][2*n] - h->x[n + i])); for (j = 0; j < n; j++) e += (h->a[i]*h->a[j]*M[j][i] + h->a[n + i]*h->a[n + j]*M[n + j][n + i] + 2.*h->a[i]*h->a[n + j]*M[n + j][i]); } return e; } static void update_A_B_Z (FttCell * cell, GfsEventHarmonic * h) { gdouble x = GFS_VALUE (cell, h->v), sx2 = 0.; guint n = h->omega->len; guint i, j; /* A^n */ for (i = 0; i < n; i++) { h->a[i] = GFS_VALUE (cell, h->A[i]); h->a[i + n] = GFS_VALUE (cell, h->B[i]); } h->a[2*n] = GFS_VALUE (cell, h->z); /* X^n = M^n.A^n */ for (i = 0; i < 2*n + 1; i++) { h->x[i] = 0.; for (j = 0; j < 2*n + 1; j++) h->x[i] += h->Mn[i][j]*h->a[j]; } if (h->e) { if (h->invertible) sx2 = x*x + h->Mn[2*n][2*n]*GFS_VALUE (cell, h->e) - de (h, h->Mn); else sx2 = x*x + GFS_VALUE (cell, h->e); } /* X^n+1 = X^n + Delta^n */ for (i = 0; i < n; i++) { h->x[i] += x*h->vcos[i]; h->x[i + n] += x*h->vsin[i]; } h->x[2*n] += x; /* A^n+1 = (M^n+1)^-1.X^n+1 */ for (i = 0; i < 2*n + 1; i++) { h->a[i] = 0.; for (j = 0; j < 2*n + 1; j++) h->a[i] += h->iM[i][j]*h->x[j]; } for (i = 0; i < n; i++) { GFS_VALUE (cell, h->A[i]) = h->a[i]; GFS_VALUE (cell, h->B[i]) = h->a[i + n]; } GFS_VALUE (cell, h->z) = h->a[2*n]; if (h->e) GFS_VALUE (cell, h->e) = (sx2 + de (h, h->M))/h->M[2*n][2*n]; } static gboolean gfs_event_harmonic_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_harmonic_class ())->parent_class)->event) (event, sim)) { GfsEventHarmonic * h = GFS_EVENT_HARMONIC (event); gdouble ** M = h->M, * vsin = h->vsin, * vcos = h->vcos; gdouble ** iM = h->iM, ** Mn = h->Mn; guint i, j, n = h->omega->len; for (i = 0; i < n; i++) { vsin[i] = sin (g_array_index (h->omega, gdouble, i)*sim->time.t); vcos[i] = cos (g_array_index (h->omega, gdouble, i)*sim->time.t); } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { M[i][j] += vcos[j]*vcos[i]; M[i][n + j] += vsin[j]*vcos[i]; M[n + i][j] += vcos[j]*vsin[i]; M[n + i][n + j] += vsin[j]*vsin[i]; } M[i][2*n] += vcos[i]; M[n + i][2*n] += vsin[i]; } for (j = 0; j < n; j++) { M[2*n][j] += vcos[j]; M[2*n][n + j] += vsin[j]; } M[2*n][2*n] += 1.; for (i = 0; i < 2*n + 1; i++) for (j = 0; j < 2*n + 1; j++) iM[i][j] = M[i][j]; if (!gfs_matrix_inverse (iM, 2*n + 1, 1e-6)) { g_assert (!h->invertible); gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) add_xsin_xcos, h); } else { gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) update_A_B_Z, h); h->invertible = TRUE; for (i = 0; i < 2*n + 1; i++) for (j = 0; j < 2*n + 1; j++) Mn[i][j] = M[i][j]; } return TRUE; } return FALSE; } static void gfs_event_harmonic_class_init (GtsObjectClass * klass) { klass->destroy = gfs_event_harmonic_destroy; klass->read = gfs_event_harmonic_read; klass->write = gfs_event_harmonic_write; GFS_EVENT_CLASS (klass)->event = gfs_event_harmonic_event; } static void gfs_event_harmonic_init (GfsEventHarmonic * object) { object->omega = g_array_new (FALSE, FALSE, sizeof (gdouble)); } GfsEventClass * gfs_event_harmonic_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_event_harmonic_info = { "GfsEventHarmonic", sizeof (GfsEventHarmonic), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_event_harmonic_class_init, (GtsObjectInitFunc) gfs_event_harmonic_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_event_harmonic_info); } return klass; } /** \endobject{GfsEventHarmonic} */ /** * Stopping when steady-state is reached. * \beginobject{GfsEventStop} */ static void gfs_event_stop_write (GtsObject * o, FILE * fp) { GfsEventStop * s = GFS_EVENT_STOP (o); if (GTS_OBJECT_CLASS (gfs_event_stop_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_event_stop_class ())->parent_class->write) (o, fp); fprintf (fp, " %s %g", s->v->name, s->max); if (s->diff) fprintf (fp, " %s", s->diff->name); if (s->relative) fputs (" { relative = 1 }", fp); } static void gfs_event_stop_read (GtsObject ** o, GtsFile * fp) { GfsEventStop * s = GFS_EVENT_STOP (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (s)); if (GTS_OBJECT_CLASS (gfs_event_stop_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_event_stop_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (v)"); return; } if (!(s->v = gfs_variable_from_name (domain->variables, fp->token->str))) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); s->max = gfs_read_constant (fp, domain); if (fp->type == GTS_ERROR) return; s->oldv = gfs_domain_add_variable (domain, NULL, NULL); /* fixme: the lines below are necessary in the general case (e.g. when dealing with a VOF tracer) * but will crash if s->oldv is not of the same class as s->v. * s->oldv->fine_coarse = s->v->fine_coarse; * s->oldv->coarse_fine = s->v->coarse_fine; */ if (fp->type == GTS_STRING) { if (!(s->diff = gfs_domain_get_or_add_variable (domain, fp->token->str, "Stopping field difference"))) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } s->diff->units = s->v->units; gts_file_next_token (fp); } if (fp->type == '{') { GtsFileVariable var[] = { {GTS_INT, "relative", TRUE, &s->relative}, {GTS_NONE} }; gts_file_assign_variables (fp, var); } } static void gfs_event_stop_destroy (GtsObject * o) { if (GFS_EVENT_STOP (o)->oldv) gts_object_destroy (GTS_OBJECT (GFS_EVENT_STOP (o)->oldv)); (* GTS_OBJECT_CLASS (gfs_event_stop_class ())->parent_class->destroy) (o); } static void diff (FttCell * cell, GfsEventStop * s) { GFS_VALUE (cell, s->oldv) -= GFS_VALUE (cell, s->v); } static void copy (FttCell * cell, GfsEventStop * s) { GFS_VALUE (cell, s->oldv) = GFS_VALUE (cell, s->v); } static gboolean gfs_event_stop_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_stop_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsEventStop * s = GFS_EVENT_STOP (event); if (s->last >= 0.) { GfsNorm n; gdouble max = 1.; if (s->relative) { n = gfs_domain_norm_variable (domain, s->oldv, NULL, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); max = n.infty; } gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) diff, s); n = gfs_domain_norm_variable (domain, s->oldv, NULL, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); if (s->relative) { if (n.infty <= s->max*max) sim->time.end = sim->time.t; } else if (gfs_dimensional_value (s->v, n.infty) <= s->max) sim->time.end = sim->time.t; if (s->diff) { gfs_variables_swap (s->diff, s->oldv); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, s->diff); } } gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) copy, s); gfs_domain_copy_bc (domain, FTT_TRAVERSE_LEAFS, -1, s->v, s->oldv); s->last = sim->time.t; return TRUE; } return FALSE; } static void gfs_event_stop_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_event_stop_read; GTS_OBJECT_CLASS (klass)->write = gfs_event_stop_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_event_stop_destroy; GFS_EVENT_CLASS (klass)->event = gfs_event_stop_event; } static void gfs_event_stop_init (GfsEventStop * object) { object->last = -1.; } GfsEventClass * gfs_event_stop_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_event_stop_info = { "GfsEventStop", sizeof (GfsEventStop), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_event_stop_class_init, (GtsObjectInitFunc) gfs_event_stop_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_event_stop_info); } return klass; } /** \endobject{GfsEventStop} */ /** * Executing a shell-script at given times. * \beginobject{GfsEventScript} */ static void gfs_event_script_destroy (GtsObject * o) { GfsEventScript * s = GFS_EVENT_SCRIPT (o); g_free (s->script); (* GTS_OBJECT_CLASS (gfs_event_script_class ())->parent_class->destroy) (o); } static void gfs_event_script_write (GtsObject * o, FILE * fp) { GfsEventScript * s = GFS_EVENT_SCRIPT (o); if (GTS_OBJECT_CLASS (gfs_event_script_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_event_script_class ())->parent_class->write) (o, fp); fputs (" {", fp); if (s->script) fputs (s->script, fp); fputc ('}', fp); } static void gfs_event_script_read (GtsObject ** o, GtsFile * fp) { GfsEventScript * s = GFS_EVENT_SCRIPT (*o); if (GTS_OBJECT_CLASS (gfs_event_script_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_event_script_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; g_free (s->script); if ((s->script = gfs_file_statement (fp))) gts_file_next_token (fp); } /** * gfs_popen: * @sim: a #GfsSimulation. * @command: a shell command. * @type: "r" for reading or "w" for writing. * * Returns: a file descriptor pointing to a pipe opened using the * standard popen() command but which also defines standard Gerris * shell variables. In case of error returns %NULL. */ FILE * gfs_popen (GfsSimulation * sim, const char * command, const char * type) { g_return_val_if_fail (command != NULL, NULL); g_return_val_if_fail (type != NULL, NULL); gchar * sname = gfs_template (); if (!gfs_mkftemp (sname)) { g_warning ("gfs_popen() cannot create FIFO: %s", strerror (errno)); g_free (sname); return NULL; } /* When adding pre-defined shell variables please update this page: http://gfs.sourceforge.net/wiki/index.php/GfsEventScript */ gchar * scommand = g_strdup_printf ("GfsTime=%g GfsIter=%d GfsPid=%d " "GFS_STOP=%d sh %s", sim->time.t, sim->time.i, GFS_DOMAIN (sim)->pid, GFS_EVENT_SCRIPT_STOP, sname); fflush (stdout); fflush (stderr); FILE * fp = popen (scommand, type); g_free (scommand); if (fp != NULL) { FILE * f = fopen (sname, "w"); fputs (command, f); fclose (f); } else g_warning ("popen() command failed: %s", strerror (errno)); remove (sname); g_free (sname); return fp; } static gboolean gfs_event_script_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_script_class ())->parent_class)->event) (event, sim)) { GfsEventScript * s = GFS_EVENT_SCRIPT (event); if (s->script && GFS_DOMAIN (sim)->pid <= 0) { FILE * fp = gfs_popen (sim, s->script, "w"); if (fp == NULL) { g_warning ("GfsEventScript cannot start script"); return TRUE; } int status = pclose (fp); if (status != -1) status = WEXITSTATUS (status); if (status == GFS_EVENT_SCRIPT_STOP) exit (1); } return TRUE; } return FALSE; } static void gfs_event_script_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = gfs_event_script_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_event_script_read; GTS_OBJECT_CLASS (klass)->write = gfs_event_script_write; GFS_EVENT_CLASS (klass)->event = gfs_event_script_event; } GfsEventClass * gfs_event_script_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_event_script_info = { "GfsEventScript", sizeof (GfsEventScript), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_event_script_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_event_script_info); } return klass; } /** \endobject{GfsEventScript} */ /** * Initialising volume fractions from interface shapes. * \beginobject{GfsInitFraction} */ static void gfs_init_fraction_destroy (GtsObject * object) { GfsInitFraction * init = GFS_INIT_FRACTION (object); gts_object_destroy (GTS_OBJECT (init->surface)); (* GTS_OBJECT_CLASS (gfs_init_fraction_class ())->parent_class->destroy) (object); } static void gfs_init_fraction_read (GtsObject ** o, GtsFile * fp) { GfsInitFraction * init; GfsDomain * domain; if (GTS_OBJECT_CLASS (gfs_init_fraction_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_init_fraction_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; init = GFS_INIT_FRACTION (*o); domain = GFS_DOMAIN (gfs_object_simulation (init)); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (variable)"); return; } if ((init->c = gfs_variable_from_name (domain->variables, fp->token->str)) == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); gfs_generic_surface_read (init->surface, gfs_object_simulation (*o), fp); } static void gfs_init_fraction_write (GtsObject * o, FILE * fp) { GfsInitFraction * init = GFS_INIT_FRACTION (o); (* GTS_OBJECT_CLASS (gfs_init_fraction_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", init->c->name); gfs_generic_surface_write (init->surface, gfs_object_simulation (o), fp); } static gboolean gfs_init_fraction_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_init_fraction_class ())->parent_class)->event) (event, sim)) { gfs_domain_init_fraction (GFS_DOMAIN (sim), GFS_INIT_FRACTION (event)->surface, GFS_INIT_FRACTION (event)->c); return TRUE; } return FALSE; } static void gfs_init_fraction_class_init (GfsInitFractionClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_init_fraction_event; GTS_OBJECT_CLASS (klass)->read = gfs_init_fraction_read; GTS_OBJECT_CLASS (klass)->write = gfs_init_fraction_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_init_fraction_destroy; } static void gfs_init_fraction_init (GfsInitFraction * object) { object->surface = GFS_GENERIC_SURFACE (gts_object_new (GTS_OBJECT_CLASS (gfs_surface_class ()))); } GfsInitFractionClass * gfs_init_fraction_class (void) { static GfsInitFractionClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_init_fraction_info = { "GfsInitFraction", sizeof (GfsInitFraction), sizeof (GfsInitFractionClass), (GtsObjectClassInitFunc) gfs_init_fraction_class_init, (GtsObjectInitFunc) gfs_init_fraction_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_init_class ()), &gfs_init_fraction_info); } return klass; } /** \endobject{GfsInitFraction} */ /** * Controlling the topology of interfaces. * \beginobject{GfsRemoveDroplets} */ static void gfs_remove_droplets_destroy (GtsObject * object) { GfsRemoveDroplets * d = GFS_REMOVE_DROPLETS (object); if (d->fc) gts_object_destroy (GTS_OBJECT (d->fc)); (* GTS_OBJECT_CLASS (gfs_remove_droplets_class ())->parent_class->destroy) (object); } static void compute_v (FttCell * cell, GfsRemoveDroplets * d) { GFS_VALUE (cell, d->v) = gfs_function_value (d->fc, cell); } static gboolean gfs_remove_droplets_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_remove_droplets_class ())->parent_class)->event) (event, sim)) { GfsRemoveDroplets * d = GFS_REMOVE_DROPLETS (event); GfsDomain * domain = GFS_DOMAIN (sim); d->v = d->fc ? gfs_function_get_variable (d->fc) : d->c; if (d->v) gfs_domain_remove_droplets (domain, d->v, d->c, d->min, d->val); else { d->v = gfs_temporary_variable (domain); gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) compute_v, d); gfs_restore_fpe_for_function (d->fc); gfs_domain_remove_droplets (domain, d->v, d->c, d->min, d->val); gts_object_destroy (GTS_OBJECT (d->v)); } return TRUE; } return FALSE; } static void gfs_remove_droplets_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_remove_droplets_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_remove_droplets_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (variable)"); return; } GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); GfsRemoveDroplets * r = GFS_REMOVE_DROPLETS (*o); if ((r->c = gfs_variable_from_name (domain->variables, fp->token->str)) == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (min)"); return; } r->min = atoi (fp->token->str); gts_file_next_token (fp); if (fp->type != '\n') { r->fc = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (r->fc, gfs_object_simulation (r), fp); if (fp->type == GTS_INT || fp->type == GTS_FLOAT) { r->val = atof (fp->token->str); gts_file_next_token (fp); } } } static void gfs_remove_droplets_write (GtsObject * o, FILE * fp) { if (GTS_OBJECT_CLASS (gfs_remove_droplets_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_remove_droplets_class ())->parent_class->write) (o, fp); GfsRemoveDroplets * r = GFS_REMOVE_DROPLETS (o); fprintf (fp, " %s %d", r->c->name, r->min); if (r->fc) { gfs_function_write (r->fc, fp); if (r->val != 0.) fprintf (fp, " %g", r->val); } } static void gfs_remove_droplets_class_init (GfsEventClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_remove_droplets_event; GTS_OBJECT_CLASS (klass)->destroy = gfs_remove_droplets_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_remove_droplets_read; GTS_OBJECT_CLASS (klass)->write = gfs_remove_droplets_write; } GfsEventClass * gfs_remove_droplets_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_remove_droplets_info = { "GfsRemoveDroplets", sizeof (GfsRemoveDroplets), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_remove_droplets_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_remove_droplets_info); } return klass; } /** \endobject{GfsRemoveDroplets} */ /** * Controlling the domain topology. * \beginobject{GfsRemovePonds} */ static gboolean gfs_remove_ponds_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_remove_ponds_class ())->parent_class)->event) (event, sim)) { gfs_domain_remove_ponds (GFS_DOMAIN (sim), GFS_REMOVE_PONDS (event)->min, (FttCellCleanupFunc) gfs_cell_cleanup, sim); return TRUE; } return FALSE; } static void gfs_remove_ponds_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_remove_ponds_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_remove_ponds_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (min)"); return; } GFS_REMOVE_PONDS (*o)->min = atoi (fp->token->str); gts_file_next_token (fp); } static void gfs_remove_ponds_write (GtsObject * o, FILE * fp) { if (GTS_OBJECT_CLASS (gfs_remove_ponds_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_remove_ponds_class ())->parent_class->write) (o, fp); fprintf (fp, " %d", GFS_REMOVE_PONDS (o)->min); } static void gfs_remove_ponds_class_init (GfsEventClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_remove_ponds_event; GTS_OBJECT_CLASS (klass)->read = gfs_remove_ponds_read; GTS_OBJECT_CLASS (klass)->write = gfs_remove_ponds_write; } GfsEventClass * gfs_remove_ponds_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_remove_ponds_info = { "GfsRemovePonds", sizeof (GfsRemovePonds), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_remove_ponds_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_init_class ()), &gfs_remove_ponds_info); } return klass; } /** \endobject{GfsRemovePonds} */ /** * Exponential filtering of variables. * \beginobject{GfsEventFilter} */ static void filter (FttCell * cell, GfsEventFilter * f) { FttDirection d[4*(FTT_DIMENSION - 1)][FTT_DIMENSION] = { #if FTT_2D {FTT_RIGHT, FTT_TOP}, {FTT_RIGHT, FTT_BOTTOM}, {FTT_LEFT, FTT_TOP}, {FTT_LEFT, FTT_BOTTOM} #else {FTT_RIGHT, FTT_TOP, FTT_FRONT}, {FTT_RIGHT, FTT_BOTTOM, FTT_FRONT}, {FTT_LEFT, FTT_TOP, FTT_FRONT}, {FTT_LEFT, FTT_BOTTOM, FTT_FRONT}, {FTT_RIGHT, FTT_TOP, FTT_BACK}, {FTT_RIGHT, FTT_BOTTOM, FTT_BACK}, {FTT_LEFT, FTT_TOP, FTT_BACK}, {FTT_LEFT, FTT_BOTTOM, FTT_BACK} #endif }; guint i; gdouble val = 0.; for (i = 0; i < 4*(FTT_DIMENSION - 1); i++) val += gfs_cell_corner_value (cell, d[i], f->v, -1); GFS_VALUE (cell, f->tmp) = val/(4*(FTT_DIMENSION - 1)); } static void filtered (FttCell * cell, GfsEventFilter * f) { gdouble dt = gfs_object_simulation (f)->advection_params.dt/f->scale; GFS_VALUE (cell, f->v) = ((1. - dt)*GFS_VALUE (cell, f->v) + dt*GFS_VALUE (cell, f->tmp)); } static gboolean gfs_event_filter_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_filter_class ())->parent_class)->event) (event, sim)) { GfsEventFilter * f = GFS_EVENT_FILTER (event); f->tmp = gfs_temporary_variable (GFS_DOMAIN (sim)); gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) filter, f); gfs_traverse_and_bc (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) filtered, f, f->v, f->v); gts_object_destroy (GTS_OBJECT (f->tmp)); return TRUE; } return FALSE; } static void gfs_event_filter_read (GtsObject ** o, GtsFile * fp) { GfsDomain * domain; if (GTS_OBJECT_CLASS (gfs_event_filter_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_event_filter_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (variable)"); return; } domain = GFS_DOMAIN (gfs_object_simulation (*o)); if ((GFS_EVENT_FILTER (*o)->v = gfs_variable_from_name (domain->variables, fp->token->str)) == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); GFS_EVENT_FILTER (*o)->scale = gfs_read_constant (fp, domain); if (fp->type == GTS_ERROR) return; if (GFS_EVENT_FILTER (*o)->scale <= 0.) { gts_file_error (fp, "time scale must be strictly positive"); return; } } static void gfs_event_filter_write (GtsObject * o, FILE * fp) { if (GTS_OBJECT_CLASS (gfs_event_filter_class ())->parent_class->write) (* GTS_OBJECT_CLASS (gfs_event_filter_class ())->parent_class->write) (o, fp); fprintf (fp, " %s %g", GFS_EVENT_FILTER (o)->v->name, GFS_EVENT_FILTER (o)->scale); } static void gfs_event_filter_class_init (GfsEventClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_event_filter_event; GTS_OBJECT_CLASS (klass)->read = gfs_event_filter_read; GTS_OBJECT_CLASS (klass)->write = gfs_event_filter_write; } GfsEventClass * gfs_event_filter_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_event_filter_info = { "GfsEventFilter", sizeof (GfsEventFilter), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_event_filter_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_event_filter_info); } return klass; } /** \endobject{GfsEventFilter} */ /** * A list of events. * \beginobject{GfsEventList} */ static gboolean gfs_event_list_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_list_class ())->parent_class)->event) (event, sim)) { gts_container_foreach (GTS_CONTAINER (GFS_EVENT_LIST (event)->list), (GtsFunc) gfs_event_do, sim); return TRUE; } return FALSE; } static void copy_event (GfsEvent * event, GfsEvent * list) { gfs_event_set (event, list->start, list->end, list->step, list->istart, list->iend, list->istep); } static void gfs_event_list_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_event_list_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsEventList * l = GFS_EVENT_LIST (*o); if (fp->type == GTS_STRING) { l->klass = gfs_object_class_from_name (fp->token->str); if (l->klass == NULL) { gts_file_error (fp, "unknown class `%s'", fp->token->str); return; } gts_file_next_token (fp); } if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } fp->scope_max++; gts_file_next_token (fp); while (fp->type == '\n') gts_file_next_token (fp); GtsObjectClass * default_class = l->klass; GfsSimulation * sim = gfs_object_simulation (*o); while (fp->type != '}') { GtsObjectClass * klass = default_class; if (klass == NULL) { if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a keyword"); return; } klass = gfs_object_class_from_name (fp->token->str); if (klass == NULL) { gts_file_error (fp, "unknown class `%s'", fp->token->str); return; } if (!gts_object_class_is_from_class (klass, gfs_event_class ())) { gts_file_error (fp, "'%s' is not a GfsEvent", fp->token->str); return; } } GtsObject * object = gts_object_new (klass); gfs_object_simulation_set (object, sim); (* klass->read) (&object, fp); if (fp->type == GTS_ERROR) { gts_object_destroy (object); return; } while (fp->type == '\n') gts_file_next_token (fp); gts_container_add (GTS_CONTAINER (l->list), GTS_CONTAINEE (object)); } fp->scope_max--; gts_file_next_token (fp); l->list->items = g_slist_reverse (l->list->items); gts_container_foreach (GTS_CONTAINER (l->list), (GtsFunc) copy_event, l); } static void gfs_event_list_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_event_list_class ())->parent_class->write) (o, fp); GfsEventList * l = GFS_EVENT_LIST (o); if (l->klass) fprintf (fp, " %s", l->klass->info.name); fputs (" {\n", fp); GSList * i = l->list->items; while (i) { fputs (" ", fp); (* GTS_OBJECT (i->data)->klass->write) (i->data, fp); fputc ('\n', fp); i = i->next; } fputc ('}', fp); } static void gfs_event_list_destroy (GtsObject * o) { GfsEventList * l = GFS_EVENT_LIST (o); gts_container_foreach (GTS_CONTAINER (l->list), (GtsFunc) gts_object_destroy, NULL); gts_object_destroy (GTS_OBJECT (l->list)); (* GTS_OBJECT_CLASS (gfs_event_list_class ())->parent_class->destroy) (o); } static void gfs_event_list_class_init (GfsEventClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_event_list_event; GTS_OBJECT_CLASS (klass)->read = gfs_event_list_read; GTS_OBJECT_CLASS (klass)->write = gfs_event_list_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_event_list_destroy; } static void gfs_event_list_init (GfsEventList * l) { l->list = GTS_SLIST_CONTAINER (gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ()))); } GfsEventClass * gfs_event_list_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_event_list_info = { "GfsEventList", sizeof (GfsEventList), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_event_list_class_init, (GtsObjectInitFunc) gfs_event_list_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_class ()), &gfs_event_list_info); } return klass; } /** \endobject{GfsEventList} */ gerris-snapshot-131206/src/ocean.c0000644000175100017510000012043312250371171013705 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2004-2012 Stéphane Popinet * National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief The linearised shallow-water solver. */ #include #include "ocean.h" #include "timestep.h" #include "adaptive.h" #include "source.h" #include "vof.h" #include "graphic.h" #include "solid.h" /** * The linearised shallow-water solver. * \beginobject{GfsOcean} */ static void correct_normal_velocity (FttCellFace * face, gpointer * data) { GfsGradient g; gdouble dp; FttFaceType type; GfsVariable * p = data[0]; GfsVariable ** gv = data[1]; gdouble * dt = data[2]; FttComponent c; if (GFS_FACE_FRACTION_RIGHT (face) == 0.) return; type = ftt_face_type (face); c = face->d/2; gfs_face_gradient (face, &g, p->i, -1); dp = (g.b - g.a*GFS_VALUE (face->cell, p))/ftt_cell_size (face->cell); if (!FTT_FACE_DIRECT (face)) dp = - dp; GFS_FACE_NORMAL_VELOCITY_LEFT (face) -= dp*(*dt); GFS_VALUE (face->cell, gv[c]) += dp; if (ftt_face_type (face) == FTT_FINE_COARSE) dp *= GFS_FACE_FRACTION_LEFT (face)/(GFS_FACE_FRACTION_RIGHT (face)*FTT_CELLS/2); GFS_FACE_NORMAL_VELOCITY_RIGHT (face) -= dp*(*dt); GFS_VALUE (face->neighbor, gv[c]) += dp; } static void scale_gradients (FttCell * cell, gpointer * data) { GfsVariable ** g = data[0]; guint * dimension = data[1]; FttCellNeighbors n; FttComponent c; ftt_cell_neighbors (cell, &n); for (c = 0; c < *dimension; c++) { FttCell * c1 = n.c[2*c], * c2 = n.c[2*c + 1]; if (c1 && c2 && !GFS_CELL_IS_GRADIENT_BOUNDARY (c1) && !GFS_CELL_IS_GRADIENT_BOUNDARY (c2)) GFS_VALUE (cell, g[c]) /= 2.; } } /** * gfs_correct_normal_velocities_weighted: * @domain: a #GfsDomain. * @dimension: the number of dimensions (2 or 3). * @p: the pressure field. * @g: where to store the pressure gradient. * @dt: the timestep. * @weighted: whether to use fraction-weighting or not. * * Corrects the normal velocity field of @domain using @p and and @dt. * * Also allocates the @g variables and fills them with the centered gradient of @p. */ static void gfs_correct_normal_velocities_weighted (GfsDomain * domain, guint dimension, GfsVariable * p, GfsVariable ** g, gdouble dt, gboolean weighted) { FttComponent c; g_return_if_fail (domain != NULL); g_return_if_fail (p != NULL); g_return_if_fail (g != NULL); for (c = 0; c < dimension; c++) g[c] = gfs_temporary_variable (domain); gfs_variable_set_vector (g, dimension); gfs_reset_gradients (domain, dimension, g); if (weighted) { gfs_correct_normal_velocities (domain, dimension, p, g, dt); gfs_scale_gradients (domain, dimension, g); } else { gpointer data[3]; data[0] = p; data[1] = g; data[2] = &dt; gfs_domain_face_traverse (domain, dimension == 2 ? FTT_XY : FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) correct_normal_velocity, data); data[0] = g; data[1] = &dimension; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) scale_gradients, data); for (c = 0; c < dimension; c++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, g[c]); } } #define THETA 0.5 typedef struct { GfsVariable * pn, * div, * divn, * dia; gdouble dt, G; } FreeSurfaceParams; static void normal_divergence (FttCell * cell, FreeSurfaceParams * p) { GFS_VALUE (cell, p->div) += (1. - THETA)*GFS_VALUE (cell, p->divn)/THETA; } static void scale_divergence_helmoltz (FttCell * cell, FreeSurfaceParams * p) { gdouble h = ftt_cell_size (cell); gdouble c = 2.*h*h/(THETA*p->G*p->dt*p->dt); #if FTT_2D c *= gfs_domain_cell_fraction (p->dia->domain, cell); #else /* 3D */ if (GFS_IS_MIXED (cell)) /* fixme: no metric yet */ c *= GFS_STATE (cell)->solid->s[FTT_FRONT]; #endif /* 3D */ GFS_VALUE (cell, p->dia) = c; GFS_VALUE (cell, p->div) = 2.*GFS_VALUE (cell, p->div)/p->dt - c*GFS_VALUE (cell, p->pn); } #if !FTT_2D static void merge_pressures (GSList * merged, GfsVariable * v) { if (merged->next != NULL) { /* average value */ GSList * i = merged; gdouble w = 0., total_area = 0.; while (i) { FttCell * cell = i->data; GfsSolidVector * solid = GFS_STATE (cell)->solid; gdouble h = ftt_cell_size (cell); gdouble area = h*h*solid->s[FTT_FRONT]; total_area += area; w += area*GFS_VALUE (cell, v); i = i->next; } w /= total_area; i = merged; while (i) { FttCell * cell = i->data; GFS_VALUE (cell, v) = w; i = i->next; } } } #endif /* 3D */ /** * gfs_free_surface_pressure: * @toplayer: a #GfsDomain. * @par: the multigrid paramaters. * @apar: the advection parameters. * */ static void gfs_free_surface_pressure (GfsDomain * toplayer, GfsMultilevelParams * par, GfsAdvectionParams * apar, GfsVariable * p, GfsVariable * div, GfsVariable * divn, GfsVariable * res, gdouble G) { FreeSurfaceParams fp; GfsVariable * res1; g_return_if_fail (toplayer != NULL); g_return_if_fail (par != NULL); g_return_if_fail (apar != NULL); g_return_if_fail (p != NULL); g_return_if_fail (div != NULL); g_return_if_fail (divn != NULL); g_return_if_fail (G > 0.); fp.pn = p; fp.div = div; fp.dia = gfs_temporary_variable (toplayer); res1 = res ? res : gfs_temporary_variable (toplayer); fp.divn = divn; fp.dt = apar->dt; fp.G = G; /* compute MAC divergence */ gfs_domain_cell_traverse (toplayer, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) normal_divergence, &fp); gfs_domain_cell_traverse (toplayer, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) scale_divergence_helmoltz, &fp); /* solve for pressure */ par->dimension = 2; par->poisson_solve (toplayer, par, p, fp.div, res1, fp.dia, apar->dt); #if !FTT_2D gfs_domain_traverse_merged (toplayer, (GfsMergedTraverseFunc) merge_pressures, p); #endif if (!res) gts_object_destroy (GTS_OBJECT (res1)); gts_object_destroy (GTS_OBJECT (fp.dia)); } #if FTT_2D static void normal_velocities (GfsDomain * domain, GfsVariable ** u) { gfs_domain_face_traverse (domain, FTT_XY, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL); gfs_domain_face_traverse (domain, FTT_XY, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_interpolated_normal_velocity, u); } static void ocean_run (GfsSimulation * sim) { GfsVariable * p, * div, * res = NULL; GfsDomain * domain; GSList * i; domain = GFS_DOMAIN (sim); gfs_simulation_refine (sim); gfs_simulation_init (sim); i = domain->variables; while (i) { if (GFS_IS_VARIABLE_RESIDUAL (i->data)) res = i->data; i = i->next; } p = gfs_variable_from_name (domain->variables, "P"); g_assert (p); #if 1 GfsVariable * H = gfs_variable_from_name (domain->variables, "H"); g_assert (H); GfsFunction * fH = gfs_function_new_from_variable (gfs_function_class (), H); #else /* non-linear free surface */ GtsFile * fp = gts_file_new_from_string ("(H + P)"); /* fixme: should be H + P/g */ GfsFunction * fH = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (fH, domain, fp); g_assert (fp->type != GTS_ERROR); gts_file_destroy (fp); #endif div = gfs_temporary_variable (domain); while (sim->time.t < sim->time.end && sim->time.i < sim->time.iend) { GfsVariable * g[2]; gdouble tstart = gfs_clock_elapsed (domain->timer); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gfs_simulation_set_timestep (sim); normal_velocities (domain, gfs_domain_velocity (domain)); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) gfs_normal_divergence_2D, div); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, p); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_half_do, sim); gfs_poisson_coefficients (domain, fH, TRUE, TRUE, TRUE); gfs_correct_normal_velocities_weighted (domain, 2, p, g, 0., sim->approx_projection_params.weighted); gfs_centered_velocity_advection_diffusion (domain, 2, &sim->advection_params, g, g, sim->physical_params.alpha); gfs_source_coriolis_implicit (domain, sim->advection_params.dt); gfs_correct_centered_velocities (domain, 2, g, -sim->advection_params.dt/2.); gts_object_destroy (GTS_OBJECT (g[0])); gts_object_destroy (GTS_OBJECT (g[1])); sim->time.t = sim->tnext; sim->time.i++; gfs_domain_timer_start (domain, "free_surface_pressure"); GfsVariable * divn = gfs_temporary_variable (domain); normal_velocities (domain, gfs_domain_velocity (domain)); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) gfs_normal_divergence_2D, divn); gfs_poisson_coefficients (domain, fH, TRUE, TRUE, TRUE); gfs_free_surface_pressure (domain, &sim->approx_projection_params, &sim->advection_params, p, divn, div, res, sim->physical_params.g); gts_object_destroy (GTS_OBJECT (divn)); gfs_correct_normal_velocities_weighted (domain, 2, p, g, sim->advection_params.dt/2., sim->approx_projection_params.weighted); gfs_correct_centered_velocities (domain, 2, g, sim->advection_params.dt/2.); gts_object_destroy (GTS_OBJECT (g[0])); gts_object_destroy (GTS_OBJECT (g[1])); gfs_domain_timer_stop (domain, "free_surface_pressure"); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); gfs_simulation_adapt (sim); gts_range_add_value (&domain->timestep, gfs_clock_elapsed (domain->timer) - tstart); gts_range_update (&domain->timestep); gts_range_add_value (&domain->size, gfs_domain_size (domain, FTT_TRAVERSE_LEAFS, -1)); gts_range_update (&domain->size); } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL); gts_object_destroy (GTS_OBJECT (div)); gts_object_destroy (GTS_OBJECT (fH)); } static void gfs_ocean_class_init (GfsSimulationClass * klass) { klass->run = ocean_run; } static void gfs_ocean_init (GfsOcean * object) { GFS_SIMULATION (object)->approx_projection_params.weighted = 1; } GfsSimulationClass * gfs_ocean_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_ocean_info = { "GfsOcean", sizeof (GfsOcean), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) gfs_ocean_class_init, (GtsObjectInitFunc) gfs_ocean_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), &gfs_ocean_info); } return klass; } #else /* 3D */ #define MAC 0 static void ocean_destroy (GtsObject * object) { guint i; GPtrArray * layer = GFS_OCEAN (object)->layer; for (i = 0; i < layer->len; i++) { GfsDomain * d = g_ptr_array_index (layer, i); d->allocated = g_array_new (FALSE, TRUE, sizeof (gboolean)); gts_object_destroy (GTS_OBJECT (d)); } g_ptr_array_free (layer, TRUE); (* GTS_OBJECT_CLASS (gfs_ocean_class ())->parent_class->destroy) (object); } #define MAXLEVEL 16 static void ocean_read (GtsObject ** object, GtsFile * fp) { /* fixme: lambda.z cannot be changed */ GfsSimulation * sim = GFS_SIMULATION (*object); GFS_DOMAIN (sim)->lambda.z = 1./(1 << MAXLEVEL); (* GTS_OBJECT_CLASS (gfs_ocean_class ())->parent_class->read) (object, fp); if (fp->type == GTS_ERROR) return; GFS_DOMAIN (*object)->refpos.z = -0.5; g_assert (GFS_DOMAIN (sim)->lambda.z == 1./(1 << MAXLEVEL)); sim->physical_params.g /= sim->physical_params.L/* *GFS_DOMAIN (sim)->lambda.z*/; GfsVariable * H = gfs_variable_from_name (GFS_DOMAIN (sim)->variables, "H"); g_assert (H); H->units = 1.; GFS_DOMAIN (sim)->lambda.z = 1./(1 << MAXLEVEL); } static void ocean_write (GtsObject * object, FILE * fp) { FttVector * lambda = &GFS_DOMAIN (object)->lambda; GfsPhysicalParams * p = &GFS_SIMULATION (object)->physical_params; gdouble g = p->g; lambda->z *= 1 << MAXLEVEL; p->g *= p->L*lambda->z; (* GTS_OBJECT_CLASS (gfs_ocean_class ())->parent_class->write) (object, fp); lambda->z /= 1 << MAXLEVEL; p->g = g; } static void new_layer (GfsOcean * ocean) { GfsDomain * domain = GFS_DOMAIN (ocean); GfsDomain * d = GFS_DOMAIN (gts_object_new (GTS_OBJECT_CLASS (gfs_domain_class ()))); d->rootlevel = domain->rootlevel; d->refpos = domain->refpos; d->lambda = domain->lambda; g_array_free (d->allocated, TRUE); d->allocated = domain->allocated; g_ptr_array_add (ocean->layer, d); } static void add_layer (GfsBox * box, GfsDomain * domain) { if (box->neighbor[FTT_FRONT] == NULL || GFS_IS_BOUNDARY (box->neighbor[FTT_FRONT])) { GPtrArray * layer = GFS_OCEAN (domain)->layer; GtsObject * n; guint l = 0; gts_container_add (GTS_CONTAINER (g_ptr_array_index (layer, l++)), GTS_CONTAINEE (box)); n = box->neighbor[FTT_BACK]; while (GFS_IS_BOX (n)) { if (l == layer->len) new_layer (GFS_OCEAN (domain)); gts_container_add (GTS_CONTAINER (g_ptr_array_index (layer, l++)), GTS_CONTAINEE (n)); n = GFS_BOX (n)->neighbor[FTT_BACK]; } } } static void ocean_post_read (GfsDomain * domain, GtsFile * fp) { (* GFS_DOMAIN_CLASS (GTS_OBJECT_CLASS (gfs_ocean_class ())->parent_class)->post_read) (domain, fp); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) add_layer, domain); g_assert (GFS_OCEAN (domain)->layer->len > 0); GFS_OCEAN (domain)->toplayer = g_ptr_array_index (GFS_OCEAN (domain)->layer, 0); } static void compute_w (FttCell * c, GfsVariable * W) { FttCell * n; guint level = ftt_cell_level (c); gdouble wf = 0., w = 0.; while ((n = ftt_cell_neighbor (c, FTT_BACK))) c = n; while (c) { GfsStateVector * s = GFS_STATE (c); g_assert (FTT_CELL_IS_LEAF (c) && ftt_cell_level (c) == level); s->f[FTT_BACK].un = w; wf += (s->f[FTT_LEFT].v*s->f[FTT_LEFT].un - s->f[FTT_RIGHT].v*s->f[FTT_RIGHT].un + s->f[FTT_BOTTOM].v*s->f[FTT_BOTTOM].un - s->f[FTT_TOP].v*s->f[FTT_TOP].un); if (GFS_IS_MIXED (c)) s->f[FTT_FRONT].un = w = GFS_STATE (c)->solid->s[FTT_FRONT] > 0. ? wf/GFS_STATE (c)->solid->s[FTT_FRONT] : 0.; else s->f[FTT_FRONT].un = w = wf; GFS_VALUE (c, W) = (s->f[FTT_BACK].un + s->f[FTT_FRONT].un)/2.; c = ftt_cell_neighbor (c, FTT_FRONT); } } static void compute_div (FttCell * c, GfsVariable * W) { guint level = ftt_cell_level (c); gdouble wf = 0., size = ftt_cell_size (c); g_assert (level <= MAXLEVEL); size *= 1 << (MAXLEVEL - level); while (c) { GfsStateVector * s = GFS_STATE (c); GfsSolidVector * solid = s->solid; g_assert (FTT_CELL_IS_LEAF (c) && ftt_cell_level (c) == level); if (solid) wf += (solid->s[FTT_RIGHT]*s->f[FTT_RIGHT].un - solid->s[FTT_LEFT]*s->f[FTT_LEFT].un + solid->s[FTT_TOP]*s->f[FTT_TOP].un - solid->s[FTT_BOTTOM]*s->f[FTT_BOTTOM].un); else wf += (s->f[FTT_RIGHT].un - s->f[FTT_LEFT].un + s->f[FTT_TOP].un - s->f[FTT_BOTTOM].un); GFS_VALUE (c, W) = wf*size; c = ftt_cell_neighbor (c, FTT_BACK); } } /* fixme: this is ok for one layer but what about several? */ static gdouble height (FttCell * cell) { if (!GFS_IS_MIXED (cell)) return 1.; gdouble f = GFS_STATE (cell)->solid->s[FTT_FRONT]; if (f == 0.) return 0.; guint level = ftt_cell_level (cell); g_assert (level <= MAXLEVEL); return GFS_STATE (cell)->solid->a/f*(1 << (MAXLEVEL - level)); } static void compute_H (FttCell * cell, GfsVariable * H) { GFS_VALUE (cell, H) = height (cell); } static void face_interpolated_normal_velocity (const FttCellFace * face, GfsVariable ** v) { gdouble u; g_return_if_fail (face != NULL); g_return_if_fail (v != NULL); if (GFS_FACE_FRACTION_RIGHT (face) == 0.) return; guint i = v[face->d/2]->i; switch (ftt_face_type (face)) { case FTT_FINE_FINE: u = (GFS_VALUEI (face->cell, i) + GFS_VALUEI (face->neighbor, i))/2.; break; case FTT_FINE_COARSE: { gdouble w1 = height (face->cell), w2 = height (face->neighbor); g_assert (w1 + w2); w1 = 2.*w1/(w1 + w2); u = w1*gfs_face_interpolated_value (face, i) + (1. - w1)*GFS_VALUEI (face->neighbor, i); break; } default: g_assert_not_reached (); } GFS_FACE_NORMAL_VELOCITY_LEFT (face) = u; switch (ftt_face_type (face)) { case FTT_FINE_FINE: GFS_FACE_NORMAL_VELOCITY_RIGHT (face) = u; break; case FTT_FINE_COARSE: GFS_FACE_NORMAL_VELOCITY_RIGHT (face) += u*GFS_FACE_FRACTION_LEFT (face)/(GFS_FACE_FRACTION_RIGHT (face)* FTT_CELLS_DIRECTION (face->d)); break; default: g_assert_not_reached (); } } static void depth_integrated_divergence (GfsDomain * domain, GfsVariable * div) { /* compute MAC velocities from centered velocities */ #if !MAC gfs_domain_face_traverse (domain, FTT_XY, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL); gfs_domain_face_traverse (domain, FTT_XY, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) face_interpolated_normal_velocity, gfs_domain_velocity (domain)); #endif /* barotropic divergence */ gfs_domain_cell_traverse_boundary (domain, FTT_FRONT, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_div, div); } static void compute_coeff (FttCell * c) { guint level = ftt_cell_level (c); gdouble wf[FTT_NEIGHBORS_2D] = {0.,0.,0.,0.}, size = 1.; g_assert (level <= MAXLEVEL); size = 1 << (MAXLEVEL - level); while (c) { GfsStateVector * s = GFS_STATE (c); FttDirection d; g_assert (FTT_CELL_IS_LEAF (c) && ftt_cell_level (c) == level); for (d = 0; d < FTT_NEIGHBORS_2D; d++) { wf[d] += s->f[d].v*size; s->f[d].v = wf[d]; } c = ftt_cell_neighbor (c, FTT_BACK); } } static void face_coeff_from_below (FttCell * cell) { FttDirection d; GfsFaceStateVector * f = GFS_STATE (cell)->f; guint neighbors = 0; for (d = 0; d < FTT_NEIGHBORS_2D; d++) { FttCellChildren child; guint i, n; f[d].v = 0.; n = ftt_cell_children_direction (cell, d, &child); for (i = 0; i < n; i++) if (child.c[i]) f[d].v += GFS_STATE (child.c[i])->f[d].v; f[d].v /= 2; FttCell * neighbor; if (f[d].v > 0. && (neighbor = ftt_cell_neighbor (cell, d)) && !GFS_CELL_IS_BOUNDARY (neighbor)) neighbors++; } if (neighbors == 1) for (d = 0; d < FTT_NEIGHBORS; d++) f[d].v = 0.; } static void depth_integrated_coefficients (GfsDomain * domain) { gfs_poisson_coefficients (domain, NULL, TRUE, TRUE, TRUE); gfs_domain_cell_traverse_boundary (domain, FTT_FRONT, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_coeff, NULL); gfs_domain_cell_traverse_boundary (domain, FTT_FRONT, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) face_coeff_from_below, NULL); } static void ocean_run (GfsSimulation * sim) { GfsVariable * p, * div, * H, * res = NULL; GfsDomain * domain, * toplayer; GSList * i; domain = GFS_DOMAIN (sim); toplayer = GFS_OCEAN (sim)->toplayer; gfs_clock_start (toplayer->timer); gfs_simulation_refine (sim); H = gfs_variable_from_name (domain->variables, "H"); g_assert (H); gfs_domain_cell_traverse (toplayer, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_H, H); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_init, sim); gfs_set_merged (domain); i = domain->variables; while (i) { gfs_event_init (i->data, sim); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, i->data); if (GFS_IS_VARIABLE_RESIDUAL (i->data)) res = i->data; i = i->next; } p = gfs_variable_from_name (domain->variables, "P"); g_assert (p); div = gfs_temporary_variable (domain); while (sim->time.t < sim->time.end && sim->time.i < sim->time.iend) { GfsVariable * g[2]; gdouble tstart = gfs_clock_elapsed (domain->timer); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gfs_simulation_set_timestep (sim); depth_integrated_divergence (domain, div); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, p); /* baroclinic terms */ #if !MAC gfs_predicted_face_velocities (domain, 2, &sim->advection_params); gfs_domain_timer_start (domain, "correct_normal_velocities"); gfs_poisson_coefficients (domain, NULL, TRUE, TRUE, TRUE); gfs_correct_normal_velocities_weighted (domain, 2, p, g, sim->advection_params.dt/2., sim->approx_projection_params.weighted); gfs_domain_cell_traverse_boundary (domain, FTT_FRONT, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_w, gfs_variable_from_name (domain->variables, "W")); gfs_domain_timer_stop (domain, "correct_normal_velocities"); i = domain->variables; while (i) { if (GFS_IS_VARIABLE_TRACER_VOF (i->data)) { GfsVariableTracer * t = i->data; t->advection.dt = sim->advection_params.dt; gfs_tracer_vof_advection (domain, &t->advection); gfs_domain_variable_centered_sources (domain, i->data, i->data, t->advection.dt); } else if (GFS_IS_VARIABLE_TRACER (i->data)) { GfsVariableTracer * t = i->data; t->advection.dt = sim->advection_params.dt; gfs_tracer_advection_diffusion (domain, &t->advection, NULL); } i = i->next; } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_half_do, sim); gfs_centered_velocity_advection_diffusion (domain, 2, &sim->advection_params, g, g, sim->physical_params.alpha); gfs_source_coriolis_implicit (domain, sim->advection_params.dt); gfs_correct_centered_velocities (domain, 2, g, -sim->advection_params.dt/2.); #else gfs_poisson_coefficients (domain, NULL); gfs_correct_normal_velocities_weighted (domain, 2, p, g, sim->advection_params.dt/2., sim->approx_projection_params.weighted); gfs_correct_centered_velocities (domain, 2, g, sim->advection_params.dt/2.); #endif gts_object_destroy (GTS_OBJECT (g[0])); gts_object_destroy (GTS_OBJECT (g[1])); sim->time.t = sim->tnext; sim->time.i++; gfs_domain_timer_start (domain, "free_surface_pressure"); GfsVariable * divn = gfs_temporary_variable (domain); depth_integrated_divergence (domain, divn); depth_integrated_coefficients (domain); gfs_free_surface_pressure (toplayer, &sim->approx_projection_params, &sim->advection_params, p, divn, div, res, sim->physical_params.g/GFS_OCEAN (domain)->layer->len); gts_object_destroy (GTS_OBJECT (divn)); gfs_poisson_coefficients (domain, NULL, TRUE, TRUE, TRUE); gfs_correct_normal_velocities_weighted (domain, 2, p, g, sim->advection_params.dt/2., sim->approx_projection_params.weighted); gfs_correct_centered_velocities (domain, 2, g, sim->advection_params.dt/2.); gts_object_destroy (GTS_OBJECT (g[0])); gts_object_destroy (GTS_OBJECT (g[1])); gfs_domain_timer_stop (domain, "free_surface_pressure"); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); gfs_simulation_adapt (sim); gts_range_add_value (&domain->timestep, gfs_clock_elapsed (domain->timer) - tstart); gts_range_update (&domain->timestep); gts_range_add_value (&domain->size, gfs_domain_size (domain, FTT_TRAVERSE_LEAFS, -1)); gts_range_update (&domain->size); } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL); gts_object_destroy (GTS_OBJECT (div)); gfs_clock_stop (toplayer->timer); } static void gfs_ocean_class_init (GfsSimulationClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = ocean_destroy; GTS_OBJECT_CLASS (klass)->read = ocean_read; GTS_OBJECT_CLASS (klass)->write = ocean_write; GFS_DOMAIN_CLASS (klass)->post_read = ocean_post_read; klass->run = ocean_run; } static void depth_coarse_fine (FttCell * parent, GfsVariable * H) { FttCellChildren child; guint i; ftt_cell_children (parent, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { GFS_VALUE (child.c[i], H) = height (child.c[i]); if (GFS_VALUE (child.c[i], H) <= 0.) ftt_cell_destroy (child.c[i], (FttCellCleanupFunc) gfs_cell_cleanup, H->domain); } } static void depth_fine_coarse (FttCell * parent, GfsVariable * H) { GFS_VALUE (parent, H) = height (parent); } static void gfs_ocean_init (GfsOcean * object) { GfsVariable * H = gfs_domain_add_variable (GFS_DOMAIN (object), "H", "Depth"); H->coarse_fine = depth_coarse_fine; H->fine_coarse = depth_fine_coarse; GFS_SIMULATION (object)->approx_projection_params.weighted = 1; object->layer = g_ptr_array_new (); new_layer (object); } GfsSimulationClass * gfs_ocean_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_ocean_info = { "GfsOcean", sizeof (GfsOcean), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) gfs_ocean_class_init, (GtsObjectInitFunc) gfs_ocean_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), &gfs_ocean_info); } return klass; } static void hydrostatic_pressure (FttCell * cell, gpointer * data) { GfsVariable * vp = data[0]; GfsVariable * rho = data[1]; gdouble * g = data[2]; gdouble r = GFS_VALUE (cell, rho), p = (*g)*r/2., r1; FttCellFace f; GFS_VALUE (cell, vp) = p; f.cell = cell; f.d = FTT_BACK; f.neighbor = ftt_cell_neighbor (f.cell, f.d); while (f.neighbor) { g_assert (ftt_face_type (&f) == FTT_FINE_FINE); r1 = gfs_face_interpolated_value_generic (&f, rho); /* g_assert (r1 >= r); */ r = r1; GFS_VALUE (f.neighbor, vp) = p = p + (*g)*r; f.cell = f.neighbor; f.neighbor = ftt_cell_neighbor (f.cell, f.d); } } /** * gfs_hydrostatic_pressure: * @domain: a #GfsDomain. * @p: the hydrostatic pressure. * @rho: the density. * @g: the acceleration. * * Computes the hydrostatic pressure @p in @domain using the density * @rho. */ void gfs_hydrostatic_pressure (GfsDomain * domain, GfsVariable * p, GfsVariable * rho, gdouble g) { gpointer data[3]; g_return_if_fail (domain != NULL); g_return_if_fail (p != NULL); g_return_if_fail (rho != NULL); g_return_if_fail (g >= 0.); g /= GFS_OCEAN (domain)->layer->len; data[0] = p; data[1] = rho; data[2] = &g; gfs_domain_cell_traverse_boundary (domain, FTT_FRONT, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) hydrostatic_pressure, data); } /** \endobject{GfsOcean} */ /* GfsSourceHydrostatic: Object */ static void gfs_source_hydrostatic_destroy (GtsObject * o) { if (GFS_SOURCE_HYDROSTATIC (o)->ph1) gts_object_destroy (GTS_OBJECT (GFS_SOURCE_HYDROSTATIC (o)->ph1)); (* GTS_OBJECT_CLASS (gfs_source_hydrostatic_class ())->parent_class->destroy) (o); } static void gfs_source_hydrostatic_read (GtsObject ** o, GtsFile * fp) { GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); GfsSourceHydrostatic * sh; if (GTS_OBJECT_CLASS (gfs_source_hydrostatic_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_source_hydrostatic_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; sh = GFS_SOURCE_HYDROSTATIC (*o); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (rho)"); return; } sh->rho = gfs_variable_from_name (domain->variables, fp->token->str); if (sh->rho == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (ph)"); return; } if (!(sh->ph = gfs_domain_get_or_add_variable (domain, fp->token->str, "Hydrostatic pressure"))) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } gts_file_next_token (fp); sh->ph1 = gfs_temporary_variable (domain); } static void gfs_source_hydrostatic_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_source_hydrostatic_class ())->parent_class->write) (o, fp); fprintf (fp, " %s %s", GFS_SOURCE_HYDROSTATIC (o)->rho->name, GFS_SOURCE_HYDROSTATIC (o)->ph->name); } static gdouble gfs_source_hydrostatic_mac_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { return - gfs_center_gradient (cell, v->component, GFS_SOURCE_HYDROSTATIC (s)->ph1->i)/ftt_cell_size (cell); } static gdouble gfs_source_hydrostatic_centered_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { GfsSourceHydrostatic * b = GFS_SOURCE_HYDROSTATIC (s); return - (gfs_center_gradient (cell, v->component, b->ph->i) + gfs_center_gradient (cell, v->component, b->ph1->i))/(2.*ftt_cell_size (cell)); } static void copy_ph (FttCell * cell, GfsSourceHydrostatic * s) { GFS_VALUE (cell, s->ph1) = GFS_VALUE (cell, s->ph); } static gboolean gfs_source_hydrostatic_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_sum_class ())->parent_class)->event) (event, sim)) { GfsSourceHydrostatic * s = GFS_SOURCE_HYDROSTATIC (event); if (s->not_first) { gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) copy_ph, s); gfs_domain_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1, s->ph1); } else { gfs_hydrostatic_pressure (GFS_DOMAIN (sim), s->ph1, s->rho, sim->physical_params.g); gfs_domain_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1, s->ph1); s->not_first = TRUE; } return TRUE; } return FALSE; } static void gfs_source_hydrostatic_event_half (GfsEvent * event, GfsSimulation * sim) { GfsSourceHydrostatic * s = GFS_SOURCE_HYDROSTATIC (event); gfs_hydrostatic_pressure (GFS_DOMAIN (sim), s->ph, s->rho, sim->physical_params.g); gfs_domain_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1, s->ph); } static void gfs_source_hydrostatic_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = gfs_source_hydrostatic_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_source_hydrostatic_read; GTS_OBJECT_CLASS (klass)->write = gfs_source_hydrostatic_write; GFS_EVENT_CLASS (klass)->event = gfs_source_hydrostatic_event; GFS_EVENT_CLASS (klass)->event_half = gfs_source_hydrostatic_event_half; } static void gfs_source_hydrostatic_init (GfsSourceGeneric * s) { s->mac_value = gfs_source_hydrostatic_mac_value; s->centered_value = gfs_source_hydrostatic_centered_value; } GfsSourceGenericClass * gfs_source_hydrostatic_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_source_hydrostatic_info = { "GfsSourceHydrostatic", sizeof (GfsSourceHydrostatic), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) gfs_source_hydrostatic_class_init, (GtsObjectInitFunc) gfs_source_hydrostatic_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_velocity_class ()), &gfs_source_hydrostatic_info); } return klass; } #endif /* 3D */ /** * * \beginobject{GfsSourceFriction} */ static void gfs_source_friction_destroy (GtsObject * o) { FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) if (GFS_SOURCE_FRICTION (o)->u[c]) gts_object_destroy (GTS_OBJECT (GFS_SOURCE_FRICTION (o)->u[c])); (* GTS_OBJECT_CLASS (gfs_source_friction_class ())->parent_class->destroy) (o); } static void gfs_source_friction_read (GtsObject ** o, GtsFile * fp) { FttComponent c; GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); (* GTS_OBJECT_CLASS (gfs_source_friction_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (GfsVariable h)"); return; } GFS_SOURCE_FRICTION (*o)->h = gfs_variable_from_name (domain->variables, fp->token->str); if (GFS_SOURCE_FRICTION (*o)->h == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); /* fixme: units? */ GFS_SOURCE_FRICTION (*o)->f = gfs_read_constant (fp, domain); if (fp->type == GTS_ERROR) return; for (c = 0; c < FTT_DIMENSION; c++) GFS_SOURCE_FRICTION (*o)->u[c] = gfs_temporary_variable (domain); } static void gfs_source_friction_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_source_friction_class ())->parent_class->write) (o, fp); fprintf (fp, " %s %g", GFS_SOURCE_FRICTION (o)->h->name, GFS_SOURCE_FRICTION (o)->f); } static gdouble gfs_source_friction_saved_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { gdouble H = GFS_VALUE (cell, GFS_SOURCE_FRICTION (s)->h); g_assert (H > 0.); return - GFS_SOURCE_FRICTION (s)->f* GFS_VALUE (cell, GFS_SOURCE_FRICTION (s)->u[v->component])/H; } static void save_velocity (FttCell * cell, GfsSourceFriction * s) { FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (cell, s->u[c]) = GFS_VALUE (cell, GFS_SOURCE_VELOCITY (s)->v[c]); } static gboolean gfs_source_friction_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_sum_class ())->parent_class)->event) (event, sim)) { gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) save_velocity, event); return TRUE; } return FALSE; } static void gfs_source_friction_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = gfs_source_friction_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_source_friction_read; GTS_OBJECT_CLASS (klass)->write = gfs_source_friction_write; GFS_EVENT_CLASS (klass)->event = gfs_source_friction_event; } static void gfs_source_friction_init (GfsSourceGeneric * s) { s->mac_value = s->centered_value = gfs_source_friction_saved_value; } GfsSourceGenericClass * gfs_source_friction_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_source_friction_info = { "GfsSourceFriction", sizeof (GfsSourceFriction), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) gfs_source_friction_class_init, (GtsObjectInitFunc) gfs_source_friction_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_velocity_class ()), &gfs_source_friction_info); } return klass; } /** \endobject{GfsSourceFriction} */ /** * Flather boundary conditions. * \beginobject{GfsBcFlather} */ /* Also check whether modules/tide.mod needs upgrading when modyifing this class */ static void bc_flather_write (GtsObject * o, FILE * fp) { GfsBcFlather * bc = GFS_BC_FLATHER (o); (* GTS_OBJECT_CLASS (gfs_bc_flather_class ())->parent_class->write) (o, fp); fprintf (fp, " %s %s", bc->h->name, bc->p->name); if (bc->val) gfs_function_write (bc->val, fp); } static void set_gradient_boundary (FttCell * cell) { cell->flags |= GFS_FLAG_GRADIENT_BOUNDARY; } static void bc_flather_read (GtsObject ** o, GtsFile * fp) { GfsBcFlather * bc = GFS_BC_FLATHER (*o); GfsDomain * domain = gfs_box_domain (GFS_BC (bc)->b->box); (* GTS_OBJECT_CLASS (gfs_bc_flather_class ())->parent_class->read) (o, fp); gfs_function_set_units (GFS_BC_VALUE (bc)->val, 1.); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (h)"); return; } bc->h = gfs_variable_from_name (domain->variables, fp->token->str); if (bc->h == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (p)"); return; } bc->p = gfs_variable_from_name (domain->variables, fp->token->str); if (bc->p == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); if (bc->val == NULL) bc->val = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (bc->val, gfs_box_domain (GFS_BC (bc)->b->box), fp); gfs_function_set_units (bc->val, 1.); ftt_cell_traverse (GFS_BC (bc)->b->root, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) set_gradient_boundary, NULL); } static void bc_flather_destroy (GtsObject * o) { if (GFS_BC_FLATHER (o)->val) gts_object_destroy (GTS_OBJECT (GFS_BC_FLATHER (o)->val)); (* GTS_OBJECT_CLASS (gfs_bc_flather_class ())->parent_class->destroy) (o); } static gdouble flather_value (FttCellFace * f, GfsBc * b) { /* fixme: this will not work for multilayer domains */ guint d, nb = 0; FttCellNeighbors n; gdouble H; ftt_cell_neighbors (f->neighbor, &n); for (d = 0; d < FTT_NEIGHBORS_2D; d++) if (n.c[d] != NULL && GFS_CELL_IS_BOUNDARY(n.c[d]) && nb++ > 0) /* if the boundary cell is bounded by more than one boundary -> no flux */ return 0.; GfsSimulation * sim = GFS_SIMULATION (gfs_box_domain (b->b->box)); H = gfs_face_interpolated_value (f, GFS_BC_FLATHER (b)->h->i); if (H > 10./sim->physical_params.L) { /* fixme: this a bit crappy */ gdouble cg = sqrt (sim->physical_params.g*H); /* non-dimensional pressure at the boundary */ gdouble lz = GFS_DOMAIN (sim)->lambda.z; #if !FTT_2D lz *= 1 << MAXLEVEL; #endif gdouble pb = gfs_function_face_value (GFS_BC_FLATHER (b)->val, f)*sim->physical_params.g*lz; return gfs_function_face_value (GFS_BC_VALUE (b)->val, f) + (FTT_FACE_DIRECT (f) ? -1. : 1.)* (GFS_VALUE (f->neighbor, GFS_BC_FLATHER (b)->p) - pb)* cg/sim->physical_params.g #if !FTT_2D /H #endif ; } else return 0.; } static void flather (FttCellFace * f, GfsBc * b) { g_assert (GFS_CELL_IS_GRADIENT_BOUNDARY (f->cell)); GFS_VALUE (f->cell, b->v) = 2.*flather_value (f, b) - GFS_VALUE (f->neighbor, b->v); } static void homogeneous_flather (FttCellFace * f, GfsBc * b) { g_assert (GFS_CELL_IS_GRADIENT_BOUNDARY (f->cell)); GFS_VALUE (f->cell, b->v) = - GFS_VALUE (f->neighbor, b->v); } static void face_flather (FttCellFace * f, GfsBc * b) { g_assert (GFS_CELL_IS_GRADIENT_BOUNDARY (f->cell)); GFS_STATE (f->cell)->f[f->d].v = flather_value (f, b); } static void gfs_bc_flather_class_init (GtsObjectClass * klass) { klass->write = bc_flather_write; klass->read = bc_flather_read; klass->destroy = bc_flather_destroy; } static void gfs_bc_flather_init (GfsBc * object) { object->bc = (FttFaceTraverseFunc) flather; object->homogeneous_bc = (FttFaceTraverseFunc) homogeneous_flather; object->face_bc = (FttFaceTraverseFunc) face_flather; } GfsBcClass * gfs_bc_flather_class (void) { static GfsBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_bc_flather_info = { "GfsBcFlather", sizeof (GfsBcFlather), sizeof (GfsBcClass), (GtsObjectClassInitFunc) gfs_bc_flather_class_init, (GtsObjectInitFunc) gfs_bc_flather_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_bc_value_class ()), &gfs_bc_flather_info); } return klass; } /** \endobject{GfsBcFlather} */ gerris-snapshot-131206/src/mpi_boundary.h0000644000175100017510000000354412250371171015320 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __MPI_BOUNDARY_H__ #define __MPI_BOUNDARY_H__ #include "boundary.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct _GfsBoundaryMpi GfsBoundaryMpi; #ifdef HAVE_CONFIG_H # include "config.h" # ifdef HAVE_MPI # include # endif struct _GfsBoundaryMpi { /*< private >*/ GfsBoundaryPeriodic parent; gint process, id; #ifdef HAVE_MPI MPI_Comm comm; MPI_Request request[2]; guint nrequest; #endif /* HAVE_MPI */ }; #endif /* HAVE_CONFIG_H */ #define GFS_BOUNDARY_MPI(obj) GTS_OBJECT_CAST (obj,\ GfsBoundaryMpi,\ gfs_boundary_mpi_class ()) #define GFS_IS_BOUNDARY_MPI(obj) (gts_object_is_from_class (obj,\ gfs_boundary_mpi_class ())) GfsBoundaryClass * gfs_boundary_mpi_class (void); GfsBoundaryMpi * gfs_boundary_mpi_new (GfsBoundaryClass * klass, GfsBox * box, FttDirection d, gint process, gint id); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __MPI_BOUNDARY_H__ */ gerris-snapshot-131206/src/map.h0000644000175100017510000000617612250371171013411 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __MAP_H__ #define __MAP_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "variable.h" #include "utils.h" /* GfsMap: Header */ typedef struct _GfsMap GfsMap; struct _GfsMap { /*< private >*/ GtsSListContainee parent; void (* transform) (GfsMap * map, const FttVector * src, FttVector * dest); void (* inverse) (GfsMap * map, const FttVector * src, FttVector * dest); void (* transform_vector) (GfsMap * map, const FttVector * p, const FttVector * src, FttVector * dest); void (* inverse_vector) (GfsMap * map, const FttVector * p, const FttVector * src, FttVector * dest); void (* inverse_cell) (GfsMap * map, const FttVector * src, FttVector * dest); /*< public >*/ }; typedef struct _GfsMapClass GfsMapClass; struct _GfsMapClass { /*< private >*/ GtsSListContaineeClass parent_class; /*< public >*/ }; #define GFS_MAP(obj) GTS_OBJECT_CAST (obj,\ GfsMap,\ gfs_map_class ()) #define GFS_MAP_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ GfsMapClass,\ gfs_map_class()) #define GFS_IS_MAP(obj) (gts_object_is_from_class (obj,\ gfs_map_class ())) GfsMapClass * gfs_map_class (void); /* GfsMapFunction: Header */ typedef struct _GfsMapFunction GfsMapFunction; struct _GfsMapFunction { /*< private >*/ GfsMap parent; /*< public >*/ GfsFunction * x, * y, * z; }; #define GFS_MAP_FUNCTION(obj) GTS_OBJECT_CAST (obj,\ GfsMapFunction,\ gfs_map_function_class ()) #define GFS_IS_MAP_FUNCTION(obj) (gts_object_is_from_class (obj,\ gfs_map_function_class ())) GfsMapClass * gfs_map_function_class (void); /* GfsMapTransform: Header */ typedef struct _GfsMapTransform GfsMapTransform; struct _GfsMapTransform { /*< private >*/ GfsMap parent; GtsMatrix * m, * im; /*< public >*/ GtsVector translate, rotate; }; #define GFS_MAP_TRANSFORM(obj) GTS_OBJECT_CAST (obj,\ GfsMapTransform,\ gfs_map_transform_class ()) #define GFS_IS_MAP_TRANSFORM(obj) (gts_object_is_from_class (obj,\ gfs_map_transform_class ())) GfsMapClass * gfs_map_transform_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __MAP_H__ */ gerris-snapshot-131206/src/wave.h0000644000175100017510000000403112250371171013562 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __WAVE_H__ #define __WAVE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "simulation.h" /* GfsWave: Header */ #define GFS_WAVE_GAMMA 1.1 #define GFS_WAVE_F0 0.04 typedef struct _GfsWave GfsWave; struct _GfsWave { /*< private >*/ GfsSimulation parent; guint ik, ith; void (* source) (GfsWave * wave); /*< public >*/ guint nk, ntheta; gdouble alpha_s; GfsVariable *** F; }; #define GFS_WAVE(obj) GTS_OBJECT_CAST (obj,\ GfsWave,\ gfs_wave_class ()) #define GFS_IS_WAVE(obj) (gts_object_is_from_class (obj,\ gfs_wave_class ())) GfsSimulationClass * gfs_wave_class (void); /* GfsInitWave: Header */ typedef struct _GfsInitWave GfsInitWave; struct _GfsInitWave { /*< private >*/ GfsGenericInit parent; /*< public >*/ GfsFunction * d, * hs; }; #define GFS_INIT_WAVE(obj) GTS_OBJECT_CAST (obj,\ GfsInitWave,\ gfs_init_wave_class ()) #define GFS_IS_INIT_WAVE(obj) (gts_object_is_from_class (obj,\ gfs_init_wave_class ())) GfsGenericInitClass * gfs_init_wave_class (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __WAVE_H__ */ gerris-snapshot-131206/src/ftt.c0000644000175100017510000020130512250371171013413 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Quad/Octrees. */ #include #include "ftt.h" #define FTT_CELL_IS_DESTROYED(c) (((c)->flags & FTT_FLAG_DESTROYED) != 0) gchar * ftt_direction_name[FTT_NEIGHBORS] = { "right", "left", "top", "bottom" #if (!FTT_2D) , "front", "back" #endif /* FTT_3D */ }; gint ftt_opposite_direction[FTT_NEIGHBORS] = #if FTT_2D {1, 0, 3, 2}; #else /* FTT_3D */ {1, 0, 3, 2, 5, 4}; #endif /* FTT_3D */ typedef struct _FttOct FttOct; typedef struct _FttRootCell FttRootCell; static void oct_new (FttCell * parent, gboolean check_neighbors, FttCellInitFunc init, gpointer data) { FttOct * oct; guint n; g_assert (parent != NULL); g_assert (parent->children == NULL); oct = g_malloc0 (sizeof (FttOct)); oct->level = ftt_cell_level (parent); oct->parent = parent; ftt_cell_pos (parent, &(oct->pos)); ftt_cell_neighbors (parent, &(oct->neighbors)); for (n = 0; n < FTT_CELLS; n++) { oct->cell[n].parent = oct; oct->cell[n].flags = n; } if (check_neighbors) for (n = 0; n < FTT_NEIGHBORS; n++) { FttCell * neighbor = oct->neighbors.c[n]; if (neighbor && ftt_cell_level (neighbor) < oct->level) { oct_new (neighbor, check_neighbors, init, data); oct->neighbors.c[n] = ftt_cell_neighbor (parent, n); } } g_assert (parent->children == NULL); parent->children = oct; if (init) (* init) (parent, data); } /** * ftt_cell_new: * @init: a #FttCellInitFunc or %NULL. * @data: user data to pass to @init. * * Returns: a new root #FttCell, initialized by calling @init (if not %NULL). */ FttCell * ftt_cell_new (FttCellInitFunc init, gpointer data) { FttCell * cell; cell = g_malloc0 (sizeof (FttRootCell)); if (init) (* init) (cell, data); return cell; } /** * ftt_cell_check: * @cell: a #FttCell. * * Returns: %TRUE if cell is consistent, %FALSE otherwise. */ gboolean ftt_cell_check (const FttCell * cell) { FttCellNeighbors neighbor; guint i, level; g_return_val_if_fail (cell != NULL, FALSE); ftt_cell_neighbors (cell, &neighbor); level = ftt_cell_level (cell); for (i = 0; i < FTT_NEIGHBORS; i++) if (neighbor.c[i] && !FTT_CELL_IS_LEAF (neighbor.c[i]) && ftt_cell_level (neighbor.c[i]) == level && neighbor.c[i]->children->neighbors.c[FTT_OPPOSITE_DIRECTION (i)] != cell) { g_warning ("ftt_cell_check (%p): neighbor %d = %p: %d/%d", cell, i, neighbor.c[i]->children->neighbors.c[FTT_OPPOSITE_DIRECTION (i)], ftt_cell_level (neighbor.c[i]), ftt_cell_level (neighbor.c[i]->children->neighbors.c[FTT_OPPOSITE_DIRECTION (i)])); return FALSE; } return TRUE; } /** * ftt_cell_refine_single: * @cell: a #FttCell. * @init: a #FttCellInitFunc or %NULL. * @init_data: user data to pass to @init. * * Refines @cell and eventually its neighbors to ensure that the * neighborhood properties are preserved. The new refined cells * created are initialized using @init (if not %NULL). */ void ftt_cell_refine_single (FttCell * cell, FttCellInitFunc init, gpointer init_data) { g_return_if_fail (cell != NULL); g_return_if_fail (FTT_CELL_IS_LEAF (cell)); oct_new (cell, TRUE, init, init_data); } /** * ftt_cell_refine: * @root: a #FttCell. * @refine: a #FttCellRefineFunc. * @refine_data: user data to pass to @refine. * @init: a #FttCellInitFunc or %NULL. * @init_data: user data to pass to @init. * * Recursively refines the tree starting from @root. Each leaf of the * tree is tested for refinement using the @refine function. The new * refined cells created are initialized using @init (if not %NULL) * and are themselves recursively refined. */ void ftt_cell_refine (FttCell * root, FttCellRefineFunc refine, gpointer refine_data, FttCellInitFunc init, gpointer init_data) { guint n; FttOct * oct; g_return_if_fail (root != NULL); g_return_if_fail (refine != NULL); if (FTT_CELL_IS_LEAF (root) && !(* refine) (root, refine_data)) return; if (FTT_CELL_IS_LEAF (root)) oct_new (root, TRUE, init, init_data); g_assert (!FTT_CELL_IS_DESTROYED (root)); oct = root->children; for (n = 0; n < FTT_CELLS; n++) if (!FTT_CELL_IS_DESTROYED (&(oct->cell[n]))) ftt_cell_refine (&(oct->cell[n]), refine, refine_data, init, init_data); } /** * ftt_cell_draw: * @cell: a #FttCell. * @fp: a file pointer. * * Outputs in @fp an OOGL (geomview) representation of @cell. */ void ftt_cell_draw (const FttCell * cell, FILE * fp) { gdouble size; FttVector p; g_return_if_fail (cell != NULL); g_return_if_fail (fp != NULL); size = ftt_cell_size (cell)/2.; ftt_cell_pos (cell, &p); fprintf (fp, "OFF 8 6 12\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n" "%g %g %g\n", p.x - size, p.y - size, p.z - size, p.x + size, p.y - size, p.z - size, p.x + size, p.y + size, p.z - size, p.x - size, p.y + size, p.z - size, p.x - size, p.y - size, p.z + size, p.x + size, p.y - size, p.z + size, p.x + size, p.y + size, p.z + size, p.x - size, p.y + size, p.z + size); fputs ("4 3 2 1 0\n" "4 4 5 6 7\n" "4 2 3 7 6\n" "4 0 1 5 4\n" "4 0 4 7 3\n" "4 1 2 6 5\n", fp); } /** * ftt_face_draw: * @face: a #FttCellFace. * @fp: a file pointer. * * Outputs in @fp an OOGL (geomview) representation of @face. */ void ftt_face_draw (const FttCellFace * face, FILE * fp) { gdouble size; FttVector p; #if FTT_2D static FttVector dp[FTT_NEIGHBORS][2] = { {{1.,-1.,0.},{1.,1.,0.}}, {{-1.,1.,0.},{-1.,-1,0.}}, {{1.,1.,0.},{-1.,1.,0.}}, {{-1.,-1.,0.},{1.,-1.,0.}} }; #else /* FTT_3D */ static FttVector dp[FTT_NEIGHBORS][4] = { {{1.,-1.,1.},{1.,-1.,-1.},{1.,1.,-1.},{1.,1.,1.}}, {{-1.,-1.,1.},{-1.,-1.,-1.},{-1.,1.,-1.},{-1.,1.,1.}}, {{1.,1.,1.},{1.,1.,-1.},{-1,1.,-1.},{-1.,1.,1.}}, {{1.,-1.,1.},{1.,-1.,-1.},{-1,-1.,-1.},{-1.,-1.,1.}}, {{1.,-1.,1.},{1.,1.,1.},{-1.,1.,1.},{-1.,-1.,1.}}, {{1.,-1.,-1.},{1.,1.,-1.},{-1.,1.,-1.},{-1.,-1.,-1.}}, }; #endif /* FTT_3D */ g_return_if_fail (face != NULL); g_return_if_fail (fp != NULL); size = ftt_cell_size (face->cell)/2.; ftt_cell_pos (face->cell, &p); #if FTT_2D fprintf (fp, "VECT 1 2 0 2 0 %g %g 0 %g %g 0\n", p.x + dp[face->d][0].x*size, p.y + dp[face->d][0].y*size, p.x + dp[face->d][1].x*size, p.y + dp[face->d][1].y*size); #else /* FTT_3D */ fprintf (fp, "OFF 4 1 4 " "%g %g %g " "%g %g %g " "%g %g %g " "%g %g %g " "4 0 1 2 3\n", p.x + dp[face->d][0].x*size, p.y + dp[face->d][0].y*size, p.z + dp[face->d][0].z*size, p.x + dp[face->d][1].x*size, p.y + dp[face->d][1].y*size, p.z + dp[face->d][1].z*size, p.x + dp[face->d][2].x*size, p.y + dp[face->d][2].y*size, p.z + dp[face->d][2].z*size, p.x + dp[face->d][3].x*size, p.y + dp[face->d][3].y*size, p.z + dp[face->d][3].z*size); #endif /* FTT_3D */ } static gdouble coords[FTT_CELLS][3] = #if FTT_2D {{-1., 1.,0.}, { 1., 1.,0.}, {-1.,-1.,0.}, { 1.,-1.,0.}}; #else /* FTT_3D */ {{-1., 1., 1.}, { 1., 1., 1.}, {-1.,-1., 1.}, { 1.,-1., 1.}, {-1., 1.,-1.}, { 1., 1.,-1.}, {-1.,-1.,-1.}, { 1.,-1.,-1.}}; #endif /* FTT_3D */ /** * ftt_cell_relative_pos: * @cell: a #FttCell (not a root cell). * @pos: a #FttVector. * * Fills @pos with the coordinates of the center of @cell relative to * the center of its parent cell. The length unit is the size of the * parent cell. */ void ftt_cell_relative_pos (const FttCell * cell, FttVector * pos) { guint n; g_return_if_fail (cell != NULL); g_return_if_fail (pos != NULL); g_return_if_fail (!FTT_CELL_IS_ROOT (cell)); n = FTT_CELL_ID (cell); pos->x = coords[n][0]/4.; pos->y = coords[n][1]/4.; pos->z = coords[n][2]/4.; } /** * ftt_cell_pos: * @cell: a #FttCell. * @pos: a #FttVector. * * Fills @pos with the coordinates of the center of @cell. */ void ftt_cell_pos (const FttCell * cell, FttVector * pos) { g_return_if_fail (cell != NULL); g_return_if_fail (pos != NULL); if (FTT_CELL_IS_ROOT (cell)) *pos = FTT_ROOT_CELL (cell)->pos; else { gdouble size; guint n; size = ftt_cell_size (cell)/2.; n = FTT_CELL_ID (cell); pos->x = cell->parent->pos.x + coords[n][0]*size; pos->y = cell->parent->pos.y + coords[n][1]*size; pos->z = cell->parent->pos.z + coords[n][2]*size; } } /** * ftt_corner_relative_pos: * @cell: a #FttCell. * @d: a set of perpendicular directions. * @pos: a #FttVector. * * Fills @pos with the coordinates (normalised by the size of @cell) * of the corner of @cell defined by @d relative to the position of * the center of @cell. */ void ftt_corner_relative_pos (const FttCell * cell, FttDirection d[FTT_DIMENSION], FttVector * pos) { static gdouble coords[FTT_NEIGHBORS][3] = #if FTT_2D {{0.5,0.,0.},{-0.5,0.,0.},{0.,0.5,0.},{0.,-0.5,0.}}; #else /* FTT_3D */ {{0.5,0.,0.},{-0.5,0.,0.},{0.,0.5,0.},{0.,-0.5,0.},{0.,0.,0.5},{0.,0.,-0.5}}; #endif /* FTT_3D */ g_return_if_fail (cell != NULL); g_return_if_fail (pos != NULL); #if FTT_2D pos->x = coords[d[0]][0] + coords[d[1]][0]; pos->y = coords[d[0]][1] + coords[d[1]][1]; pos->z = 0.; #else /* FTT_3D */ pos->x = coords[d[0]][0] + coords[d[1]][0] + coords[d[2]][0]; pos->y = coords[d[0]][1] + coords[d[1]][1] + coords[d[2]][1]; pos->z = coords[d[0]][2] + coords[d[1]][2] + coords[d[2]][2]; #endif /* FTT_3D */ } /** * ftt_corner_pos: * @cell: a #FttCell. * @d: a set of perpendicular directions. * @pos: a #FttVector. * * Fills @pos with the coordinates of the corner of @cell defined by * @d. */ void ftt_corner_pos (const FttCell * cell, FttDirection d[FTT_DIMENSION], FttVector * pos) { gdouble size; FttVector p; g_return_if_fail (cell != NULL); g_return_if_fail (pos != NULL); ftt_corner_relative_pos (cell, d, pos); ftt_cell_pos (cell, &p); size = ftt_cell_size (cell); pos->x = p.x + size*pos->x; pos->y = p.y + size*pos->y; pos->z = p.z + size*pos->z; } /** * ftt_face_pos: * @face: a #FttCellFace. * @pos: a #FttVector. * * Fills @pos with the coordinates of the center of @face. */ void ftt_face_pos (const FttCellFace * face, FttVector * pos) { gdouble size; static gdouble coords[FTT_NEIGHBORS][3] = #if FTT_2D {{1.,0.,0.},{-1.,0.,0.},{0.,1.,0.},{0.,-1.,0.}}; #else /* FTT_3D */ {{1.,0.,0.},{-1.,0.,0.},{0.,1.,0.},{0.,-1.,0.},{0.,0.,1.},{0.,0.,-1.}}; #endif /* FTT_3D */ g_return_if_fail (face != NULL); g_return_if_fail (pos != NULL); ftt_cell_pos (face->cell, pos); size = ftt_cell_size (face->cell)/2.; pos->x += size*coords[face->d][0]; pos->y += size*coords[face->d][1]; pos->z += size*coords[face->d][2]; } static void update_children_pos (FttCell * parent) { if (!FTT_CELL_IS_LEAF (parent)) { FttOct * oct = parent->children; guint n; ftt_cell_pos (parent, &(oct->pos)); for (n = 0; n < FTT_CELLS; n++) if (!FTT_CELL_IS_DESTROYED (&(oct->cell[n]))) update_children_pos (&(oct->cell[n])); } } /** * ftt_cell_set_pos: * @root: a #FttCell, root of a cell tree. * @pos: a #FttVector. * * Sets the position of the center of the @root cell of a cell tree to * @pos. Updates the positions of its children recursively. */ void ftt_cell_set_pos (FttCell * root, const FttVector * pos) { g_return_if_fail (root != NULL); g_return_if_fail (FTT_CELL_IS_ROOT (root)); g_return_if_fail (pos != NULL); FTT_ROOT_CELL (root)->pos = *pos; update_children_pos (root); } static void update_children_level (FttCell * parent) { if (!FTT_CELL_IS_LEAF (parent)) { FttOct * oct = parent->children; guint n; oct->level = ftt_cell_level (parent); for (n = 0; n < FTT_CELLS; n++) if (!FTT_CELL_IS_DESTROYED (&(oct->cell[n]))) update_children_level (&(oct->cell[n])); } } /** * ftt_cell_set_level: * @root: a #FttCell, root of a cell tree. * @level: the new level. * * Sets the level of the @root cell of a cell tree to @level. * Updates the levels of its children recursively. */ void ftt_cell_set_level (FttCell * root, guint level) { g_return_if_fail (root != NULL); g_return_if_fail (FTT_CELL_IS_ROOT (root)); FTT_ROOT_CELL (root)->level = level; update_children_level (root); } static void update_neighbor (FttCell * cell, FttDirection d, FttCellInitFunc init, gpointer init_data) { if (!FTT_CELL_IS_LEAF (cell)) { FttCell * neighbor = ftt_cell_neighbor_not_cached (cell, d); if (neighbor) { FttOct * oct = cell->children; FttCellChildren children; guint i, n; g_assert (oct->neighbors.c[d] == NULL || oct->neighbors.c[d] == neighbor); oct->neighbors.c[d] = neighbor; if (ftt_cell_level (neighbor) < oct->level) { oct_new (neighbor, TRUE, init, init_data); oct->neighbors.c[d] = ftt_cell_neighbor (cell, d); } g_assert (ftt_cell_level (oct->neighbors.c[d]) == oct->level); n = ftt_cell_children_direction (cell, d, &children); for (i = 0; i < n; i++) if (children.c[i]) update_neighbor (children.c[i], d, init, init_data); } } } /** * ftt_cell_set_neighbor: * @root: a #FttCell, root of a cell tree. * @neighbor: a #FttCell, root of a cell tree. * @d: a direction. * @init: a #FttCellInitFunc or %NULL. * @init_data: user data to pass to @init. * * Sets the cell tree defined by @neighbor as the neighbor in * direction @d of the cell tree defined by @root. * * Any new cell created during the process is initialized using the * user-defined function @init. * * Both @root and @neighbor must be the roots of their respective cell * trees. */ void ftt_cell_set_neighbor (FttCell * root, FttCell * neighbor, FttDirection d, FttCellInitFunc init, gpointer init_data) { FttDirection od; g_return_if_fail (d < FTT_NEIGHBORS); g_return_if_fail (root != NULL); g_return_if_fail (FTT_CELL_IS_ROOT (root)); g_return_if_fail (neighbor != NULL); g_return_if_fail (FTT_CELL_IS_ROOT (neighbor)); g_return_if_fail (ftt_cell_level (root) == ftt_cell_level (neighbor)); g_return_if_fail (FTT_ROOT_CELL (root)->neighbors.c[d] == NULL); FTT_ROOT_CELL (root)->neighbors.c[d] = neighbor; update_neighbor (root, d, init, init_data); od = FTT_OPPOSITE_DIRECTION (d); g_return_if_fail (FTT_ROOT_CELL (neighbor)->neighbors.c[od] == NULL); FTT_ROOT_CELL (neighbor)->neighbors.c[od] = root; update_neighbor (neighbor, od, init, init_data); } static void update_neighbor_match (FttCell * cell, FttDirection d, FttCellInitFunc init, gpointer init_data) { if (!FTT_CELL_IS_LEAF (cell)) { FttCell * neighbor = ftt_cell_neighbor_not_cached (cell, d); if (neighbor) { FttOct * oct = cell->children; FttCellChildren children; guint i, n; oct->neighbors.c[d] = neighbor; if (ftt_cell_level (neighbor) < oct->level) { oct_new (neighbor, TRUE, init, init_data); oct->neighbors.c[d] = ftt_cell_neighbor (cell, d); } else if (FTT_CELL_IS_LEAF (neighbor)) oct_new (neighbor, TRUE, init, init_data); g_assert (ftt_cell_level (oct->neighbors.c[d]) == oct->level); n = ftt_cell_children_direction (cell, d, &children); for (i = 0; i < n; i++) if (children.c[i]) update_neighbor_match (children.c[i], d, init, init_data); } } else { /* leaf cell */ FttCell * neighbor = ftt_cell_neighbor_not_cached (cell, d); if (neighbor) { g_assert (ftt_cell_level (cell) == ftt_cell_level (neighbor)); if (!FTT_CELL_IS_LEAF (neighbor)) { FttCellChildren children; guint i, n; oct_new (cell, TRUE, init, init_data); n = ftt_cell_children_direction (cell, d, &children); for (i = 0; i < n; i++) if (children.c[i]) update_neighbor_match (children.c[i], d, init, init_data); } } } } /** * ftt_cell_set_neighbor_match: * @root: a #FttCell, root of a cell tree. * @neighbor: a #FttCell, root of a cell tree. * @d: a direction. * @init: a #FttCellInitFunc or %NULL. * @init_data: user data to pass to @init. * * Sets the cell tree defined by @neighbor as the neighbor in * direction @d of the cell tree defined by @root. * * The boundary between both trees is matched i.e. the type of the * face between any pair of cells belonging to each tree is always * %FTT_FINE_FINE. Any new cell created during the process is * initialized using the user-defined function @init. * * Both @root and @neighbor must be the roots of their respective cell * trees. */ void ftt_cell_set_neighbor_match (FttCell * root, FttCell * neighbor, FttDirection d, FttCellInitFunc init, gpointer init_data) { FttDirection od; g_return_if_fail (d < FTT_NEIGHBORS); g_return_if_fail (root != NULL); g_return_if_fail (FTT_CELL_IS_ROOT (root)); g_return_if_fail (neighbor != NULL); g_return_if_fail (FTT_CELL_IS_ROOT (neighbor)); g_return_if_fail (ftt_cell_level (root) == ftt_cell_level (neighbor)); FTT_ROOT_CELL (root)->neighbors.c[d] = neighbor; update_neighbor_match (root, d, init, init_data); od = FTT_OPPOSITE_DIRECTION (d); FTT_ROOT_CELL (neighbor)->neighbors.c[od] = root; update_neighbor_match (neighbor, od, init, init_data); } static void cell_traverse_pre_order_all (FttCell * cell, gint max_depth, FttCellTraverseFunc func, gpointer data) { FttCell * parent; if (max_depth >= 0 && ftt_cell_level (cell) > max_depth) return; parent = ftt_cell_parent (cell); (* func) (cell, data); /* check that cell has not been deallocated by @func */ g_assert (parent == NULL || parent->children != NULL); if (!FTT_CELL_IS_LEAF (cell)) { FttOct * children = cell->children; guint n; for (n = 0; n < FTT_CELLS; n++) { FttCell * c = &(children->cell[n]); if (!FTT_CELL_IS_DESTROYED (c)) cell_traverse_pre_order_all (c, max_depth, func, data); } } } static void cell_traverse_post_order_all (FttCell * cell, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (max_depth >= 0 && ftt_cell_level (cell) > max_depth) return; if (!FTT_CELL_IS_LEAF (cell)) { FttOct * children = cell->children; guint n; for (n = 0; n < FTT_CELLS; n++) { FttCell * c = &(children->cell[n]); if (!FTT_CELL_IS_DESTROYED (c)) cell_traverse_post_order_all (c, max_depth, func, data); } } (* func) (cell, data); } static void cell_traverse_leafs (FttCell * cell, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (max_depth >= 0 && ftt_cell_level (cell) > max_depth) return; if (FTT_CELL_IS_LEAF (cell)) (* func) (cell, data); if (!FTT_CELL_IS_LEAF (cell)) { FttOct * children = cell->children; guint n; for (n = 0; n < FTT_CELLS; n++) { FttCell * c = &(children->cell[n]); if (!FTT_CELL_IS_DESTROYED (c)) cell_traverse_leafs (c, max_depth, func, data); } } } static void cell_traverse_pre_order_nonleafs (FttCell * cell, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (max_depth >= 0 && ftt_cell_level (cell) > max_depth) return; if (!FTT_CELL_IS_LEAF (cell)) { FttCell * parent = ftt_cell_parent (cell); (* func) (cell, data); /* check that cell has not been deallocated by @func */ g_assert (parent == NULL || parent->children != NULL); if (!FTT_CELL_IS_LEAF (cell)) { FttOct * children = cell->children; guint n; for (n = 0; n < FTT_CELLS; n++) { FttCell * c = &(children->cell[n]); if (!FTT_CELL_IS_DESTROYED (c)) cell_traverse_pre_order_nonleafs (c, max_depth, func, data); } } } } static void cell_traverse_post_order_nonleafs (FttCell * cell, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (max_depth >= 0 && ftt_cell_level (cell) > max_depth) return; if (!FTT_CELL_IS_LEAF (cell)) { FttOct * children = cell->children; guint n; for (n = 0; n < FTT_CELLS; n++) { FttCell * c = &(children->cell[n]); if (!FTT_CELL_IS_DESTROYED (c)) cell_traverse_post_order_nonleafs (c, max_depth, func, data); } (* func) (cell, data); } } static void cell_traverse_level (FttCell * cell, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (ftt_cell_level (cell) == max_depth) (* func) (cell, data); else if (!FTT_CELL_IS_LEAF (cell)) { FttOct * children = cell->children; guint n; for (n = 0; n < FTT_CELLS; n++) { FttCell * c = &(children->cell[n]); if (!FTT_CELL_IS_DESTROYED (c)) cell_traverse_level (c, max_depth, func, data); } } } static void cell_traverse_level_leafs (FttCell * cell, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (ftt_cell_level (cell) == max_depth || FTT_CELL_IS_LEAF (cell)) (* func) (cell, data); else if (!FTT_CELL_IS_LEAF (cell)) { FttOct * children = cell->children; guint n; for (n = 0; n < FTT_CELLS; n++) { FttCell * c = &(children->cell[n]); if (!FTT_CELL_IS_DESTROYED (c)) cell_traverse_level_leafs (c, max_depth, func, data); } } } static void cell_traverse_level_non_leafs (FttCell * cell, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (ftt_cell_level (cell) == max_depth && !FTT_CELL_IS_LEAF (cell)) (* func) (cell, data); else if (!FTT_CELL_IS_LEAF (cell)) { FttOct * children = cell->children; guint n; for (n = 0; n < FTT_CELLS; n++) { FttCell * c = &(children->cell[n]); if (!FTT_CELL_IS_DESTROYED (c)) cell_traverse_level_non_leafs (c, max_depth, func, data); } } } /** * ftt_cell_traverse: * @root: the root #FttCell of the tree to traverse. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Traverses a cell tree starting at the given root #FttCell. Calls * the given function for each cell visited. */ void ftt_cell_traverse (FttCell * root, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data) { g_return_if_fail (root != NULL); g_return_if_fail (func != NULL); if (max_depth >= 0 && ftt_cell_level (root) > max_depth) return; if (flags == FTT_TRAVERSE_ALL) { if (order == FTT_PRE_ORDER) cell_traverse_pre_order_all (root, max_depth, func, data); else cell_traverse_post_order_all (root, max_depth, func, data); } else if ((flags & FTT_TRAVERSE_LEVEL) != 0) { if ((flags & FTT_TRAVERSE_LEAFS) != 0) cell_traverse_level_leafs (root, max_depth, func, data); else if ((flags & FTT_TRAVERSE_NON_LEAFS) != 0) cell_traverse_level_non_leafs (root, max_depth, func, data); else cell_traverse_level (root, max_depth, func, data); } else if ((flags & FTT_TRAVERSE_LEAFS) != 0) cell_traverse_leafs (root, max_depth, func, data); else { g_return_if_fail ((flags & FTT_TRAVERSE_NON_LEAFS) != 0); if (order == FTT_PRE_ORDER) cell_traverse_pre_order_nonleafs (root, max_depth, func, data); else cell_traverse_post_order_nonleafs (root, max_depth, func, data); } } /** * ftt_cell_traverse_condition: * @root: the root #FttCell of the tree to traverse. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * @condition: the condition. * @cdata: user data to pass to @condition. * * Traverses a cell tree starting at the given root #FttCell. Calls * the given function for each cell visited. * * Traversal of any branch of the tree is stopped whenever @condition * is not verified. */ void ftt_cell_traverse_condition (FttCell * root, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data, gboolean (* condition) (FttCell *, gpointer), gpointer cdata) { g_return_if_fail (root != NULL); g_return_if_fail (func != NULL); g_return_if_fail (condition != NULL); if ((max_depth >= 0 && ftt_cell_level (root) > max_depth) || !(* condition) (root, cdata)) return; if (order == FTT_PRE_ORDER && (flags == FTT_TRAVERSE_ALL || ((flags & FTT_TRAVERSE_LEAFS) != 0 && FTT_CELL_IS_LEAF (root)) || ((flags & FTT_TRAVERSE_NON_LEAFS) != 0 && !FTT_CELL_IS_LEAF (root)))) (* func) (root, data); if (!FTT_CELL_IS_LEAF (root)) { struct _FttOct * children = root->children; guint n; for (n = 0; n < FTT_CELLS; n++) { FttCell * c = &(children->cell[n]); if (!FTT_CELL_IS_DESTROYED (c)) ftt_cell_traverse_condition (c, order, flags, max_depth, func, data, condition, cdata); } } if (order == FTT_POST_ORDER && (flags == FTT_TRAVERSE_ALL || ((flags & FTT_TRAVERSE_LEAFS) != 0 && FTT_CELL_IS_LEAF (root)) || ((flags & FTT_TRAVERSE_NON_LEAFS) != 0 && !FTT_CELL_IS_LEAF (root)))) (* func) (root, data); } /** * ftt_cell_bbox: * @cell: a #FttCell. * @bb: a #GtsBBox. * * Fills @bb with the bounding box of @cell. */ void ftt_cell_bbox (const FttCell * cell, GtsBBox * bb) { FttVector p; gdouble h; g_return_if_fail (cell != NULL); g_return_if_fail (bb != NULL); h = ftt_cell_size (cell)/1.99999; ftt_cell_pos (cell, &p); bb->x1 = p.x - h; bb->y1 = p.y - h; bb->x2 = p.x + h; bb->y2 = p.y + h; #if FTT_2D bb->z1 = bb->z2 = 0.; #else /* 3D */ bb->z1 = p.z - h; bb->z2 = p.z + h; #endif /* 3D */ } static gboolean cell_is_in_box (FttCell * cell, gpointer data) { GtsBBox * box = data; GtsBBox bb; ftt_cell_bbox (cell, &bb); return gts_bboxes_are_overlapping (&bb, box); } /** * ftt_cell_traverse_box: * @root: the root #FttCell of the tree to traverse. * @box: a #GtsBBox. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Traverses a cell tree starting at the given root #FttCell. Calls * the given function for each cell visited. Only the cells partly or * totally contained within @box are visited. */ void ftt_cell_traverse_box (FttCell * root, GtsBBox * box, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data) { g_return_if_fail (root != NULL); g_return_if_fail (box != NULL); g_return_if_fail (func != NULL); ftt_cell_traverse_condition (root, order, flags, max_depth, func, data, cell_is_in_box, box); } static void cell_traverse_boundary_pre_order_all (FttCell * cell, FttDirection d, gint max_depth, FttCellTraverseFunc func, gpointer data) { FttCell * parent; if (max_depth >= 0 && ftt_cell_level (cell) > max_depth) return; parent = ftt_cell_parent (cell); (* func) (cell, data); /* check that cell has not been deallocated by @func */ g_assert (parent == NULL || parent->children != NULL); if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren children; guint i, n; n = ftt_cell_children_direction (cell, d, &children); for (i = 0; i < n; i++) if (children.c[i]) cell_traverse_boundary_pre_order_all (children.c[i], d, max_depth, func, data); } } static void cell_traverse_boundary_post_order_all (FttCell * cell, FttDirection d, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (max_depth >= 0 && ftt_cell_level (cell) > max_depth) return; if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren children; guint i, n; n = ftt_cell_children_direction (cell, d, &children); for (i = 0; i < n; i++) if (children.c[i]) cell_traverse_boundary_post_order_all (children.c[i], d, max_depth, func, data); } (* func) (cell, data); } static void cell_traverse_boundary_leafs (FttCell * cell, FttDirection d, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (max_depth >= 0 && ftt_cell_level (cell) > max_depth) return; if (FTT_CELL_IS_LEAF (cell)) (* func) (cell, data); else { FttCellChildren children; guint i, n; n = ftt_cell_children_direction (cell, d, &children); for (i = 0; i < n; i++) if (children.c[i]) cell_traverse_boundary_leafs (children.c[i], d, max_depth, func, data); } } static void cell_traverse_boundary_pre_order_nonleafs (FttCell * cell, FttDirection d, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (max_depth >= 0 && ftt_cell_level (cell) > max_depth) return; if (!FTT_CELL_IS_LEAF (cell)) { FttCell * parent = ftt_cell_parent (cell); (* func) (cell, data); /* check that cell has not been deallocated by @func */ g_assert (parent == NULL || parent->children != NULL); if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren children; guint i, n; n = ftt_cell_children_direction (cell, d, &children); for (i = 0; i < n; i++) if (children.c[i]) cell_traverse_boundary_pre_order_nonleafs (children.c[i], d, max_depth, func, data); } } } static void cell_traverse_boundary_post_order_nonleafs (FttCell * cell, FttDirection d, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (max_depth >= 0 && ftt_cell_level (cell) > max_depth) return; if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren children; guint i, n; n = ftt_cell_children_direction (cell, d, &children); for (i = 0; i < n; i++) if (children.c[i]) cell_traverse_boundary_post_order_nonleafs (children.c[i], d, max_depth, func, data); (* func) (cell, data); } } static void cell_traverse_boundary_level (FttCell * cell, FttDirection d, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (ftt_cell_level (cell) == max_depth) (* func) (cell, data); else if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren children; guint i, n; n = ftt_cell_children_direction (cell, d, &children); for (i = 0; i < n; i++) if (children.c[i]) cell_traverse_boundary_level (children.c[i], d, max_depth, func, data); } } static void cell_traverse_boundary_level_leafs (FttCell * cell, FttDirection d, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (ftt_cell_level (cell) == max_depth || FTT_CELL_IS_LEAF (cell)) (* func) (cell, data); else if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren children; guint i, n; n = ftt_cell_children_direction (cell, d, &children); for (i = 0; i < n; i++) if (children.c[i]) cell_traverse_boundary_level_leafs (children.c[i], d, max_depth, func, data); } } static void cell_traverse_boundary_level_non_leafs (FttCell * cell, FttDirection d, gint max_depth, FttCellTraverseFunc func, gpointer data) { if (ftt_cell_level (cell) == max_depth && !FTT_CELL_IS_LEAF (cell)) (* func) (cell, data); else if (!FTT_CELL_IS_LEAF (cell)) { FttCellChildren children; guint i, n; n = ftt_cell_children_direction (cell, d, &children); for (i = 0; i < n; i++) if (children.c[i]) cell_traverse_boundary_level_non_leafs (children.c[i], d, max_depth, func, data); } } /** * ftt_cell_traverse_boundary: * @root: the root #FttCell of the tree to traverse. * @d: the direction of the boundary to traverse. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCell. * @data: user data to pass to @func. * * Traverses the boundary of a cell tree in direction @d starting at * the given root #FttCell. Calls the given function for each node * visited. */ void ftt_cell_traverse_boundary (FttCell * root, FttDirection d, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttCellTraverseFunc func, gpointer data) { g_return_if_fail (root != NULL); g_return_if_fail (d < FTT_NEIGHBORS); g_return_if_fail (func != NULL); if (max_depth >= 0 && ftt_cell_level (root) > max_depth) return; if (flags == FTT_TRAVERSE_ALL) { if (order == FTT_PRE_ORDER) cell_traverse_boundary_pre_order_all (root, d, max_depth, func, data); else cell_traverse_boundary_post_order_all (root, d, max_depth, func, data); } else if ((flags & FTT_TRAVERSE_LEVEL) != 0) { if ((flags & FTT_TRAVERSE_LEAFS) != 0) cell_traverse_boundary_level_leafs (root, d, max_depth, func, data); else if ((flags & FTT_TRAVERSE_NON_LEAFS) != 0) cell_traverse_boundary_level_non_leafs (root, d, max_depth, func, data); else cell_traverse_boundary_level (root, d, max_depth, func, data); } else if ((flags & FTT_TRAVERSE_LEAFS) != 0) cell_traverse_boundary_leafs (root, d, max_depth, func, data); else { g_return_if_fail ((flags & FTT_TRAVERSE_NON_LEAFS) != 0); if (order == FTT_PRE_ORDER) cell_traverse_boundary_pre_order_nonleafs (root, d, max_depth, func, data); else cell_traverse_boundary_post_order_nonleafs (root, d, max_depth, func, data); } } static void oct_destroy (FttOct * oct, FttCellCleanupFunc cleanup, gpointer data) { guint n; g_return_if_fail (oct != NULL); g_return_if_fail (oct->parent->children == oct); oct->parent->children = NULL; for (n = 0; n < FTT_CELLS; n++) ftt_cell_destroy (&(oct->cell[n]), cleanup, data); g_free (oct); } /** * ftt_cell_destroy: * @cell: a #FttCell. * @cleanup: a #FttCellCleanupFunc to call before destroying @cell or %NULL. * @data: user data to pass to @cleanup. * * Frees all memory allocated for @cell and its descendants. * * The user-defined function @cleanup is called prior to freeing memory. */ void ftt_cell_destroy (FttCell * cell, FttCellCleanupFunc cleanup, gpointer data) { FttCellNeighbors neighbor; guint i, level; g_return_if_fail (cell != NULL); if (FTT_CELL_IS_DESTROYED (cell)) return; ftt_cell_neighbors (cell, &neighbor); level = ftt_cell_level (cell); if (cleanup) (* cleanup) (cell, data); cell->flags |= FTT_FLAG_DESTROYED; /* destroy children */ if (!FTT_CELL_IS_LEAF (cell)) { oct_destroy (cell->children, cleanup, data); cell->children = NULL; } /* update relationships for neighbors */ for (i = 0; i < FTT_NEIGHBORS; i++) if (neighbor.c[i] && ftt_cell_level (neighbor.c[i]) == level) { FttDirection od = FTT_OPPOSITE_DIRECTION (i); if (FTT_CELL_IS_ROOT (neighbor.c[i])) { FttCell * opneighbor = FTT_ROOT_CELL (neighbor.c[i])->neighbors.c[od]; g_assert (opneighbor == cell); FTT_ROOT_CELL (neighbor.c[i])->neighbors.c[od] = NULL; } if (!FTT_CELL_IS_LEAF (neighbor.c[i])) neighbor.c[i]->children->neighbors.c[od] = NULL; } if (FTT_CELL_IS_ROOT (cell)) g_free (cell); else if (!FTT_CELL_IS_LEAF (cell->parent->parent)) { /* if parent Oct is not already destroyed and empty destroy it */ FttOct * parent = cell->parent; gboolean empty = TRUE; for (i = 0; i < FTT_CELLS && empty; i++) if (!FTT_CELL_IS_DESTROYED (&(parent->cell[i]))) empty = FALSE; if (empty) oct_destroy (parent, NULL, NULL); } } /** * ftt_cell_destroy_root: * @root: the root cell of a cell tree. * @children: a #FttCellChildren. * @cleanup: a #FttCellCleanupFunc to call before destroying a cell. * @data: user data to pass to @cleanup. * * Destroys the root cell of a cell tree but not its children. Each * child becomes the root cell of a new cell tree. The new (orphaned) * children are returned in @children. * * Note that the function will fail if @root is also a leaf cell. */ void ftt_cell_destroy_root (FttCell * root, FttCellChildren * children, FttCellCleanupFunc cleanup, gpointer data) { guint i; FttCellNeighbors neighbor; FttCellChildren child; g_return_if_fail (root != NULL); g_return_if_fail (FTT_CELL_IS_ROOT (root)); g_return_if_fail (!FTT_CELL_IS_LEAF (root)); g_return_if_fail (!FTT_CELL_IS_DESTROYED (root)); g_return_if_fail (children != NULL); if (cleanup) (* cleanup) (root, data); root->flags |= FTT_FLAG_DESTROYED; ftt_cell_neighbors (root, &neighbor); for (i = 0; i < FTT_NEIGHBORS; i++) if (neighbor.c[i]) { FttDirection od = FTT_OPPOSITE_DIRECTION (i); g_assert (FTT_CELL_IS_ROOT (neighbor.c[i])); g_assert (FTT_ROOT_CELL (neighbor.c[i])->neighbors.c[od] == root); FTT_ROOT_CELL (neighbor.c[i])->neighbors.c[od] = NULL; if (!FTT_CELL_IS_LEAF (neighbor.c[i])) neighbor.c[i]->children->neighbors.c[od] = NULL; } ftt_cell_children (root, &child); for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { FttCell * newc; FttDirection d; newc = g_malloc0 (sizeof (FttRootCell)); newc->data = child.c[i]->data; newc->children = child.c[i]->children; ftt_cell_pos (child.c[i], &FTT_ROOT_CELL (newc)->pos); FTT_ROOT_CELL (newc)->level = ftt_cell_level (child.c[i]); ftt_cell_neighbors (child.c[i], &FTT_ROOT_CELL (newc)->neighbors); g_return_if_fail (!FTT_CELL_IS_LEAF (newc)); newc->children->parent = newc; children->c[i] = newc; neighbor = FTT_ROOT_CELL (newc)->neighbors; for (d = 0; d < FTT_NEIGHBORS; d++) if (neighbor.c[d]) { FttDirection od = FTT_OPPOSITE_DIRECTION (d); if (FTT_CELL_IS_ROOT (neighbor.c[d])) { g_assert (FTT_ROOT_CELL (neighbor.c[d])->neighbors.c[od] == child.c[i]); FTT_ROOT_CELL (neighbor.c[d])->neighbors.c[od] = newc; } if (!FTT_CELL_IS_LEAF (neighbor.c[d])) { g_assert (neighbor.c[d]->children->neighbors.c[od] == child.c[i]); neighbor.c[d]->children->neighbors.c[od] = newc; } } } else children->c[i] = NULL; g_free (root->children); g_free (root); } /** * ftt_cell_flatten: * @root: the root of the cell tree to flatten. * @d: the direction in which to flatten. * @cleanup: a #FttCellCleanupFunc to call before destroying a cell. * @data: user data to pass to @cleanup. * * Recursively destroys all the cells of the tree defined by @root * which do not form the boundary in direction @d. The resulting cell * tree is in effect a domain "flattened" in direction @d. * * The resulting domain is always one-cell thick in direction @d. */ void ftt_cell_flatten (FttCell * root, FttDirection d, FttCellCleanupFunc cleanup, gpointer data) { g_return_if_fail (root != NULL); g_return_if_fail (d < FTT_NEIGHBORS); if (!FTT_CELL_IS_LEAF (root)) { struct _FttOct * oct; guint i; #if FTT_2D static gint index[FTT_NEIGHBORS_2D][FTT_CELLS/2] = {{1, 3}, {0, 2}, {0, 1}, {2, 3}}; #else /* FTT_3D */ static gint index[FTT_NEIGHBORS][FTT_CELLS/2] = {{1, 3, 5, 7}, {0, 2, 4, 6}, {0, 1, 4, 5}, {2, 3, 6, 7}, {0, 1, 2, 3}, {4, 5, 6, 7}}; #endif /* FTT_3D */ FttDirection od = FTT_OPPOSITE_DIRECTION (d); oct = root->children; for (i = 0; i < FTT_CELLS/2; i++) { FttCell * c = &(oct->cell[index[od][i]]); if (!FTT_CELL_IS_DESTROYED (c)) ftt_cell_destroy (c, cleanup, data); } if (!FTT_CELL_IS_LEAF (root)) for (i = 0; i < FTT_CELLS/2; i++) if (!FTT_CELL_IS_DESTROYED (&(oct->cell[index[d][i]]))) ftt_cell_flatten (&(oct->cell[index[d][i]]), d, cleanup, data); } } /** * ftt_cell_locate: * @root: a #FttCell. * @target: position of the point to look for. * @max_depth: maximum depth to consider (-1 means no restriction, see below for -2). * * Locates the cell of the tree defined by @root containing * @target. This is done efficiently in log(n) operations by using the * topology of the tree. * * If @max_depth is set to -2, the finest cell containing @target is * returned. This cell is not necessarily a leaf-cell in contrast to * the case where @max_depth is set to -1. * * Returns: a #FttCell of the tree defined by @root and * containing (boundary included) the point defined by @target or * %NULL if @target is not contained in any cell of @root. */ FttCell * ftt_cell_locate (FttCell * root, FttVector target, gint max_depth) { FttVector pos; gdouble size; g_return_val_if_fail (root != NULL, NULL); ftt_cell_pos (root, &pos); size = ftt_cell_size (root)/2.; if (target.x > pos.x + size || target.x < pos.x - size || target.y > pos.y + size || target.y < pos.y - size #if !FTT_2D || target.z > pos.z + size || target.z < pos.z - size #endif ) return NULL; do { if (FTT_CELL_IS_LEAF (root) || ftt_cell_level (root) == max_depth) return root; #if FTT_2D static guint index[2][2] = {{2,3},{0,1}}; guint n = index[target.y > pos.y][target.x > pos.x]; #else /* 3D */ static guint index[2][2][2] = {{{6,7},{4,5}},{{2,3},{0,1}}}; guint n = index[target.z > pos.z][target.y > pos.y][target.x > pos.x]; #endif /* 3D */ root = &(root->children->cell[n]); size /= 2.; pos.x += coords[n][0]*size; pos.y += coords[n][1]*size; #if !FTT_2D pos.z += coords[n][2]*size; #endif /* 3D */ } while (!FTT_CELL_IS_DESTROYED (root)); return max_depth == -2 ? ftt_cell_parent (root) : NULL; } static void bubble_sort (FttCellChildren * child, gdouble * d) { guint i, j; for (i = 0; i < FTT_CELLS - 1; i++) for (j = 0; j < FTT_CELLS - 1 - i; j++) if (d[j+1] < d[j]) { gdouble tmp = d[j]; FttCell * cell = child->c[j]; d[j] = d[j+1]; d[j+1] = tmp; child->c[j] = child->c[j+1]; child->c[j+1] = cell; } } /** * ftt_cell_point_distance2_min: * @cell: a #FttCell. * @p: a #GtsPoint. * * Returns: the square of the minimum distance between @cell and @p. */ gdouble ftt_cell_point_distance2_min (FttCell * cell, GtsPoint * p) { GtsBBox bb; gdouble dmin, xd1, xd2, yd1, yd2, zd1, zd2; g_return_val_if_fail (cell != NULL, G_MAXDOUBLE); g_return_val_if_fail (p != NULL, G_MAXDOUBLE); ftt_cell_bbox (cell, &bb); xd1 = (bb.x1 - p->x)*(bb.x1 - p->x); xd2 = (p->x - bb.x2)*(p->x - bb.x2); yd1 = (bb.y1 - p->y)*(bb.y1 - p->y); yd2 = (p->y - bb.y2)*(p->y - bb.y2); zd1 = (bb.z1 - p->z)*(bb.z1 - p->z); zd2 = (p->z - bb.z2)*(p->z - bb.z2); dmin = p->x < bb.x1 ? xd1 : p->x > bb.x2 ? xd2 : 0.0; dmin += p->y < bb.y1 ? yd1 : p->y > bb.y2 ? yd2 : 0.0; dmin += p->z < bb.z1 ? zd1 : p->z > bb.z2 ? zd2 : 0.0; return dmin; } void ftt_cell_point_distance2_internal (FttCell * root, GtsPoint * p, gdouble d, gdouble (* distance2) (FttCell *, GtsPoint *, gpointer), gpointer data, FttCell ** closest, gdouble * dmin) { if (FTT_CELL_IS_LEAF (root)) { if (d < *dmin) { *dmin = d; if (closest) *closest = root; } } else { FttCellChildren child; gdouble dc[FTT_CELLS]; guint i; ftt_cell_children (root, &child); for (i = 0; i < FTT_CELLS; i++) dc[i] = child.c[i] ? (* distance2) (child.c[i], p, data) : G_MAXDOUBLE; bubble_sort (&child, dc); for (i = 0; i < FTT_CELLS; i++) if (dc[i] < *dmin) ftt_cell_point_distance2_internal (child.c[i], p, dc[i], distance2, data, closest, dmin); } } /** * ftt_cell_point_distance2: * @root: a #FttCell. * @p: a #GtsPoint. * @distance2: the squared distance function. * @data: user data to pass to @distance2. * @closest: where to return the closest cell or %NULL. * * For non-leafs cells @distance2 must return a lower-bound for the * minimum distance (using for example ftt_cell_point_distance2_min()). * * Returns: the square of the minimum distance measured according to * @distance2 between @p and a leaf cell of @root. */ gdouble ftt_cell_point_distance2 (FttCell * root, GtsPoint * p, gdouble (* distance2) (FttCell *, GtsPoint *, gpointer), gpointer data, FttCell ** closest) { gdouble d, dmin = G_MAXDOUBLE; g_return_val_if_fail (root != NULL, dmin); g_return_val_if_fail (p != NULL, dmin); g_return_val_if_fail (distance2 != NULL, dmin); if (closest) *closest = NULL; d = (* distance2) (root, p, data); if (d < dmin) ftt_cell_point_distance2_internal (root, p, d, distance2, data, closest, &dmin); return dmin; } /** * ftt_cell_depth: * @root: a #FttCell. * * Returns: the depth of the tree starting at @root, i.e. the maximum * level of any cell descendant of @root. */ guint ftt_cell_depth (const FttCell * root) { guint depth; g_return_val_if_fail (root != NULL, 0); depth = ftt_cell_level (root); if (root->children) { FttOct * oct = root->children; guint n; for (n = 0; n < FTT_CELLS; n++) if (!FTT_CELL_IS_DESTROYED (&(oct->cell[n]))) { guint d = ftt_cell_depth (&(oct->cell[n])); if (d > depth) depth = d; } } return depth; } /** * ftt_cell_write: * @root: a #FttCell. * @max_depth: the maximum depth at which to stop writing (-1 means no limit). * @fp: a file pointer. * @write: a #FttCellWriteFunc function or %NULL. * @data: user data to pass to @write. * * Writes in the file pointed to by @fp a text representation of the * cell tree starting at @root. If not %NULL, the user-defined * function @write is used to write the extra user data associated * with each cell. */ void ftt_cell_write (const FttCell * root, gint max_depth, FILE * fp, FttCellWriteFunc write, gpointer data) { guint flags; g_return_if_fail (root != NULL); g_return_if_fail (fp != NULL); flags = root->flags; if (FTT_CELL_IS_LEAF (root) || ftt_cell_level (root) == max_depth) flags |= FTT_FLAG_LEAF; fprintf (fp, "%u", flags); if (write && !FTT_CELL_IS_DESTROYED (root)) (* write) (root, fp, data); fputc ('\n', fp); if ((flags & FTT_FLAG_LEAF) == 0) { FttOct * oct; guint i; oct = root->children; for (i = 0; i < FTT_CELLS; i++) ftt_cell_write (&(oct->cell[i]), max_depth, fp, write, data); } } /** * ftt_cell_write_binary: * @root: a #FttCell. * @max_depth: the maximum depth at which to stop writing (-1 means no limit). * @fp: a file pointer. * @write: a #FttCellWriteFunc function or %NULL. * @data: user data to pass to @write. * * Writes in the file pointed to by @fp a binary representation of the * cell tree starting at @root. If not %NULL, the user-defined * function @write is used to write the extra user data associated * with each cell. */ void ftt_cell_write_binary (const FttCell * root, gint max_depth, FILE * fp, FttCellWriteFunc write, gpointer data) { guint flags; g_return_if_fail (root != NULL); g_return_if_fail (fp != NULL); flags = root->flags; if (FTT_CELL_IS_LEAF (root) || ftt_cell_level (root) == max_depth) flags |= FTT_FLAG_LEAF; fwrite (&flags, sizeof (guint), 1, fp); if (write && !FTT_CELL_IS_DESTROYED (root)) (* write) (root, fp, data); if ((flags & FTT_FLAG_LEAF) == 0) { FttOct * oct; guint i; oct = root->children; for (i = 0; i < FTT_CELLS; i++) ftt_cell_write_binary (&(oct->cell[i]), max_depth, fp, write, data); } } #define FTT_CELL_IS_FLAGGED_LEAF(cell) (((cell)->flags & FTT_FLAG_LEAF) != 0) static gboolean oct_read (FttCell * parent, GtsFile * fp, FttCellReadFunc read, gpointer data); static gboolean cell_read (FttCell * cell, GtsFile * fp, FttCellReadFunc read, gpointer data) { guint flags; if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (flags)"); return FALSE; } flags = atoi (fp->token->str); if (FTT_CELL_ID (cell) != (flags & FTT_FLAG_ID)) { gts_file_error (fp, "FTT_CELL_ID (cell) `%d' != (flags & FTT_FLAG_ID) `%d'\n" "Make sure the file has %d spatial dimensions", FTT_CELL_ID (cell), (flags & FTT_FLAG_ID), FTT_DIMENSION); return FALSE; } cell->flags = flags; gts_file_next_token (fp); if (fp->type != '\n' && read && !FTT_CELL_IS_DESTROYED (cell)) (* read) (cell, fp, data); if (fp->type == GTS_ERROR) return FALSE; gts_file_first_token_after (fp, '\n'); if (!FTT_CELL_IS_DESTROYED (cell) && !FTT_CELL_IS_FLAGGED_LEAF (cell)) return oct_read (cell, fp, read, data); cell->flags &= ~FTT_FLAG_LEAF; return TRUE; } static gboolean oct_read (FttCell * parent, GtsFile * fp, FttCellReadFunc read, gpointer data) { FttOct * oct; guint n; oct = g_malloc0 (sizeof (FttOct)); oct->level = ftt_cell_level (parent); oct->parent = parent; parent->children = oct; ftt_cell_pos (parent, &(oct->pos)); for (n = 0; n < FTT_CELLS; n++) { oct->cell[n].parent = oct; oct->cell[n].flags = n; } for (n = 0; n < FTT_CELLS; n++) if (!cell_read (&(oct->cell[n]), fp, read, data)) return FALSE; return TRUE; } static void set_neighbors (FttCell * cell) { ftt_cell_neighbors (cell, &(cell->children->neighbors)); } /** * ftt_cell_read: * @fp: a #GtsFile. * @read: a #FttCellReadFunc function or %NULL. * @data: user data to pass to @read. * * If an error occurs (i.e. corrupted file or file format incorrect), * the @error field of @fp is set. A possibly incomplete tree is then * returned. * * Returns: the root cell of the tree contained in the file pointed to * by @fp. If not %NULL, the user-defined function @read is used to * read the extra user data associated with each cell. */ FttCell * ftt_cell_read (GtsFile * fp, FttCellReadFunc read, gpointer data) { FttCell * root; guint l, depth; g_return_val_if_fail (fp != NULL, NULL); root = ftt_cell_new (NULL, NULL); cell_read (root, fp, read, data); depth = ftt_cell_depth (root); for (l = 0; l < depth; l++) ftt_cell_traverse (root, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL|FTT_TRAVERSE_NON_LEAFS, l, (FttCellTraverseFunc) set_neighbors, NULL); return root; } static gboolean oct_read_binary (FttCell * parent, GtsFile * fp, FttCellReadFunc read, gpointer data); static gboolean cell_read_binary (FttCell * cell, GtsFile * fp, FttCellReadFunc read, gpointer data) { guint flags; if (gts_file_read (fp, &flags, sizeof (guint), 1) != 1) { gts_file_error (fp, "expecting an integer (flags)"); return FALSE; } if (FTT_CELL_ID (cell) != (flags & FTT_FLAG_ID)) { gts_file_error (fp, "FTT_CELL_ID (cell) `%d' != (flags & FTT_FLAG_ID) `%d'\n" "Make sure the file has %d spatial dimensions", FTT_CELL_ID (cell), (flags & FTT_FLAG_ID), FTT_DIMENSION); return FALSE; } cell->flags = flags; if (read && !FTT_CELL_IS_DESTROYED (cell)) (* read) (cell, fp, data); if (fp->type == GTS_ERROR) return FALSE; if (!FTT_CELL_IS_DESTROYED (cell) && !FTT_CELL_IS_FLAGGED_LEAF (cell)) return oct_read_binary (cell, fp, read, data); cell->flags &= ~FTT_FLAG_LEAF; return TRUE; } static gboolean oct_read_binary (FttCell * parent, GtsFile * fp, FttCellReadFunc read, gpointer data) { FttOct * oct; guint n; oct = g_malloc0 (sizeof (FttOct)); oct->level = ftt_cell_level (parent); oct->parent = parent; parent->children = oct; ftt_cell_pos (parent, &(oct->pos)); for (n = 0; n < FTT_CELLS; n++) { oct->cell[n].parent = oct; oct->cell[n].flags = n; } for (n = 0; n < FTT_CELLS; n++) if (!cell_read_binary (&(oct->cell[n]), fp, read, data)) return FALSE; return TRUE; } /** * ftt_cell_read_binary: * @fp: a #GtsFile. * @read: a #FttCellReadFunc function or %NULL. * @data: user data to pass to @read. * * If an error occurs (i.e. corrupted file or file format incorrect), * the @error field of @fp is set. A possibly incomplete tree is then * returned. * * Returns: the root cell of the tree contained in the file pointed to * by @fp. If not %NULL, the user-defined function @read is used to * read the extra user data associated with each cell. */ FttCell * ftt_cell_read_binary (GtsFile * fp, FttCellReadFunc read, gpointer data) { FttCell * root; guint l, depth; g_return_val_if_fail (fp != NULL, NULL); root = ftt_cell_new (NULL, NULL); cell_read_binary (root, fp, read, data); depth = ftt_cell_depth (root); for (l = 0; l < depth; l++) ftt_cell_traverse (root, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL|FTT_TRAVERSE_NON_LEAFS, l, (FttCellTraverseFunc) set_neighbors, NULL); return root; } /** * ftt_refine_corner: * @cell: a #FttCell. * * Returns: %TRUE if any "corner" neighbors of @cell are more than one * level more refined, %FALSE otherwise (see figure topology.fig). */ gboolean ftt_refine_corner (const FttCell * cell) { FttCellNeighbors neighbor; guint i; g_return_val_if_fail (cell != NULL, FALSE); ftt_cell_neighbors (cell, &neighbor); for (i = 0; i < FTT_NEIGHBORS; i++) { FttCell * n = neighbor.c[i]; if (n && !FTT_CELL_IS_LEAF (n)) { FttCellChildren child; guint j, k; k = ftt_cell_children_direction (n, FTT_OPPOSITE_DIRECTION (i), &child); for (j = 0; j < k; j++) { FttCell * c = child.c[j]; if (c) { #if FTT_2D static guint perpendicular[FTT_NEIGHBORS_2D][FTT_CELLS/2] = {{2,3}, {2,3}, {1,0}, {1,0}}; FttCell * nc = ftt_cell_neighbor (c, perpendicular[i][j]); if (nc && !FTT_CELL_IS_LEAF (nc)) return TRUE; #else /* FTT_3D */ static guint perpendicular[FTT_NEIGHBORS][FTT_CELLS/2][2] = {{{4,2},{4,3},{5,2},{5,3}}, {{4,2},{4,3},{5,2},{5,3}}, {{4,1},{4,0},{5,1},{5,0}}, {{4,1},{4,0},{5,1},{5,0}}, {{2,1},{2,0},{3,1},{3,0}}, {{2,1},{2,0},{3,1},{3,0}}}; FttCell * nc0, * nc1; nc0 = ftt_cell_neighbor (c, perpendicular[i][j][0]); if (nc0 && !FTT_CELL_IS_LEAF (nc0)) return TRUE; nc1 = ftt_cell_neighbor (c, perpendicular[i][j][1]); if (nc1 && !FTT_CELL_IS_LEAF (nc1)) return TRUE; #endif /* FTT_3D */ if (!FTT_CELL_IS_LEAF (c)) { FttCellChildren child; guint j, k; k = ftt_cell_children_direction (c, FTT_OPPOSITE_DIRECTION (i), &child); for (j = 0; j < k; j++) if (child.c[j]) return TRUE; } } } } } return FALSE; } static void copy_cell (const FttCell * from, FttCell * to, FttCellCopyFunc copy, gpointer data) { to->flags = from->flags; if (!FTT_CELL_IS_DESTROYED (from)) { if (copy) (* copy) (from, to, data); if (!FTT_CELL_IS_LEAF (from)) { FttOct * oct_from = from->children; FttOct * oct_to; guint n; oct_new (to, FALSE, NULL, NULL); oct_to = to->children; for (n = 0; n < FTT_CELLS; n++) copy_cell (&(oct_from->cell[n]), &(oct_to->cell[n]), copy, data); } } } /** * ftt_cell_copy: * @root: the root of the cell tree to copy. * @copy: a #FttCellCopyFunc or %NULL. * @data: user data to pass to @copy. * * Returns: a new #FttCell root of the cell tree copy of @root. The * attributes of the cells are copied using the user-defined @copy * function. */ FttCell * ftt_cell_copy (const FttCell * root, FttCellCopyFunc copy, gpointer data) { FttCell * root_copy; g_return_val_if_fail (root != NULL, NULL); root_copy = ftt_cell_new (NULL, NULL); ftt_cell_neighbors (root, &FTT_ROOT_CELL (root_copy)->neighbors); ftt_cell_pos (root, &FTT_ROOT_CELL (root_copy)->pos); FTT_ROOT_CELL (root_copy)->level = ftt_cell_level (root); copy_cell (root, root_copy, copy, data); return root_copy; } #include "ftt_internal.c" /** * ftt_face_traverse: * @root: the root #FttCell of the tree to traverse. * @c: only the faces orthogonal to this component will be traversed - one of * %FTT_X, %FTT_Y, (%FTT_Z), %FTT_XYZ. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children and faces are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCellFace. * @data: user data to pass to @func. * * Traverses a cell tree starting at the given root #FttCell. Calls * the given function for each face of the cells of the tree. * * If %FTT_TRAVERSE_BOUNDARY_FACES is not set in @flags, only * "double-sided" faces are traversed i.e. the @neighbor field of the * face is never %NULL. */ void ftt_face_traverse (FttCell * root, FttComponent c, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttFaceTraverseFunc func, gpointer data) { FttDirection d; gpointer datum[6]; gboolean check = FALSE; gboolean boundary_faces; g_return_if_fail (root != NULL); g_return_if_fail (c >= FTT_X && c <= FTT_XYZ); g_return_if_fail (func != NULL); boundary_faces = ((flags & FTT_TRAVERSE_BOUNDARY_FACES) != 0); datum[1] = &max_depth; datum[2] = func; datum[3] = data; datum[4] = ✓ datum[5] = &boundary_faces; if (c == FTT_XYZ) { if (boundary_faces) { check = TRUE; ftt_cell_traverse (root, order, flags, max_depth, (FttCellTraverseFunc) traverse_all_faces, datum); } else { ftt_cell_traverse (root, order, flags, max_depth, (FttCellTraverseFunc) traverse_all_direct_faces, datum); check = TRUE; datum[0] = &d; for (d = 1; d < FTT_NEIGHBORS; d += 2) ftt_cell_traverse_boundary (root, d, order, flags, max_depth, (FttCellTraverseFunc) traverse_face, datum); } } else { if (boundary_faces) { check = TRUE; datum[0] = &c; ftt_cell_traverse (root, order, flags, max_depth, (FttCellTraverseFunc) traverse_face_component, datum); } else { d = 2*c; datum[0] = &d; ftt_cell_traverse (root, order, flags, max_depth, (FttCellTraverseFunc) traverse_face_direction, datum); d = 2*c + 1; check = TRUE; ftt_cell_traverse_boundary (root, d, order, flags, max_depth, (FttCellTraverseFunc) traverse_face, datum); } } ftt_cell_traverse (root, order, flags, max_depth, (FttCellTraverseFunc) reset_flag, NULL); } static void traverse_face_boundary (FttCell * cell, gpointer * datum) { FttDirection * d = datum[0]; FttFaceTraverseFunc func = (FttFaceTraverseFunc) datum[1]; gpointer data = datum[2]; FttCellFace face; face.d = *d; face.cell = cell; face.neighbor = ftt_cell_neighbor (cell, face.d); (* func) (&face, data); } /** * ftt_face_traverse_boundary: * @root: the root #FttCell of the tree to traverse. * @d: the direction of the boundary to visit. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * @func: the function to call for each visited #FttCellFace. * @data: user data to pass to @func. * * Traverses a cell tree starting at the given root #FttCell. Calls * the given function for each face of the cell tree forming the * boundary of the domain in direction @d. */ void ftt_face_traverse_boundary (FttCell * root, FttDirection d, FttTraverseType order, FttTraverseFlags flags, gint max_depth, FttFaceTraverseFunc func, gpointer data) { gpointer datum[3]; g_return_if_fail (root != NULL); g_return_if_fail (d < FTT_NEIGHBORS); g_return_if_fail (func != NULL); datum[0] = &d; datum[1] = func; datum[2] = data; ftt_cell_traverse_boundary (root, d, order, flags, max_depth, (FttCellTraverseFunc) traverse_face_boundary, datum); } /** * ftt_cell_coarsen: * @root: a #FttCell root of a cell tree to coarsen. * @coarsen: a #FttCellCoarsenFunc. * @coarsen_data: user data to pass to @coarsen. * @cleanup: a #FttCellCleanupFunc to call before destroying a cell or %NULL. * @cleanup_data: user data to pass to @cleanup. * * Coarsens the cell tree defined by @root according to @coarsen. * * Returns: %TRUE if @root has been coarsened (i.e. @root is now a * leaf cell), %FALSE otherwise. */ gboolean ftt_cell_coarsen (FttCell * root, FttCellCoarsenFunc coarsen, gpointer coarsen_data, FttCellCleanupFunc cleanup, gpointer cleanup_data) { guint i, n; gboolean coarsenable = TRUE; g_return_val_if_fail (root != NULL, FALSE); g_return_val_if_fail (coarsen != NULL, FALSE); if (FTT_CELL_IS_LEAF (root)) return (* coarsen) (root, coarsen_data); for (i = 0; i < FTT_CELLS; i++) if (!FTT_CELL_IS_DESTROYED (&(root->children->cell[i]))) coarsenable &= ftt_cell_coarsen (&(root->children->cell[i]), coarsen, coarsen_data, cleanup, cleanup_data); if (!coarsenable || !(* coarsen) (root, coarsen_data)) return FALSE; { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { FttCellChildren child; n = ftt_cell_children_direction (root, d, &child); for (i = 0; i < n; i++) { FttCell * neighbor; if (child.c[i] && (neighbor = ftt_cell_neighbor (child.c[i], d)) && !FTT_CELL_IS_LEAF (neighbor)) { FttCellChildren child1; guint j, k; gboolean empty = TRUE; k = ftt_cell_children_direction (neighbor, FTT_OPPOSITE_DIRECTION (d), &child1); for (j = 0; j < k && empty; j++) if (child1.c[j]) empty = FALSE; if (!empty && !ftt_cell_coarsen (neighbor, coarsen, coarsen_data, cleanup, cleanup_data)) return FALSE; if (!FTT_CELL_IS_LEAF (neighbor)) neighbor->children->neighbors.c[FTT_OPPOSITE_DIRECTION (d)] = NULL; } } } } if (cleanup) for (i = 0; i < FTT_CELLS; i++) if (!FTT_CELL_IS_DESTROYED (&(root->children->cell[i]))) (* cleanup) (&(root->children->cell[i]), cleanup_data); g_free (root->children); root->children = NULL; return TRUE; } /** * ftt_direction_from_name: * @name: a direction name. * * Returns: the index of the direction @name or %FTT_NEIGHBORS if * @name is not a valid direction name. */ FttDirection ftt_direction_from_name (const gchar * name) { FttDirection d = 0; g_return_val_if_fail (name != NULL, FTT_NEIGHBORS); while (d < FTT_NEIGHBORS && strcmp (name, ftt_direction_name[d])) d++; return d; } static void cell_traverse_add (FttCell * cell, GPtrArray * a) { g_ptr_array_add (a, cell); } /** * ftt_cell_traverse_new: * @root: the root #FttCell of the tree to traverse. * @order: the order in which the cells are visited - %FTT_PRE_ORDER, * %FTT_POST_ORDER. * @flags: which types of children are to be visited. * @max_depth: the maximum depth of the traversal. Cells below this * depth will not be traversed. If @max_depth is -1 all cells in the * tree are visited. * * Returns: a new #FttCellTraverse. */ FttCellTraverse * ftt_cell_traverse_new (FttCell * root, FttTraverseType order, FttTraverseFlags flags, gint max_depth) { FttCellTraverse * t; GPtrArray * a; g_return_val_if_fail (root != NULL, NULL); a = g_ptr_array_new (); ftt_cell_traverse (root, order, flags, max_depth, (FttCellTraverseFunc) cell_traverse_add, a); g_ptr_array_add (a, NULL); t = g_malloc (sizeof (FttCellTraverse)); t->current = t->cells = (FttCell **) a->pdata; g_ptr_array_free (a, FALSE); return t; } /** * ftt_cell_traverse_rewind: * @t: a #FttCellTraverse. * * Sets @t at the begining of the traversal. */ void ftt_cell_traverse_rewind (FttCellTraverse * t) { g_return_if_fail (t != NULL); t->current = t->cells; } /** * ftt_cell_traverse_destroy: * @t: a #FttCellTraverse. * * Frees all the memory associated with @t. */ void ftt_cell_traverse_destroy (FttCellTraverse * t) { g_return_if_fail (t != NULL); g_free (t->cells); g_free (t); } gerris-snapshot-131206/src/gerris3D.pc.in0000644000175100017510000000036512250371171015070 00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: Gerris3D Description: Gerris Flow Solver Library (3D) Version: @VERSION@ Requires: gts >= 0.7.3 Libs: -L${libdir} -lgfs3D -lgts -lm Cflags: -I${includedir} gerris-snapshot-131206/src/mpi_boundary.c0000644000175100017510000002264412250371171015315 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /*! \file * \brief Parallel boundary conditions. */ #include #include "domain.h" #include "mpi_boundary.h" #include "adaptive.h" /** * Parallel boundary. * \beginobject{GfsBoundaryMpi} */ static void boundary_mpi_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_boundary_mpi_class ())->parent_class->write) (o, fp); fprintf (fp, " %d %d", GFS_BOUNDARY_MPI (o)->process, GFS_BOUNDARY_MPI (o)->id); GfsBoundaryPeriodic * b = GFS_BOUNDARY_PERIODIC (o); if (b->d != GFS_BOUNDARY (b)->d) /* rotated boundary */ fprintf (fp, " %d %d", b->d, (int) b->rotate); } static void boundary_mpi_read (GtsObject ** o, GtsFile * fp) { if (fp->type == GTS_INT) { GFS_BOUNDARY_MPI (*o)->process = atoi (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (id)"); return; } GFS_BOUNDARY_MPI (*o)->id = atoi (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT) /* standard boundary */ GFS_BOUNDARY_PERIODIC (*o)->d = GFS_BOUNDARY(*o)->d; else { /* rotated boundary */ FttDirection rotate = atoi (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT) { gts_file_error (fp, "expecting an integer (orientation)"); return; } gdouble orientation = atoi (fp->token->str); gts_file_next_token (fp); gfs_boundary_periodic_rotate (GFS_BOUNDARY_PERIODIC (*o), rotate, orientation); } } else GFS_BOUNDARY_MPI (*o)->process = GFS_BOUNDARY_MPI (*o)->id = -1; } #ifdef HAVE_MPI /* #define DEBUG mpi_debug */ static guint tag_shift = 32767/FTT_NEIGHBORS; #define TAG(boundary) (tag_shift*(boundary)->d + (boundary)->box->id) #define MATCHING_TAG(boundary) (tag_shift*FTT_OPPOSITE_DIRECTION \ (GFS_BOUNDARY_PERIODIC (boundary)->d) \ + GFS_BOUNDARY_MPI (boundary)->id) #ifdef DEBUG FILE * mpi_debug = NULL; #endif static void send (GfsBoundary * bb) { GfsBoundaryPeriodic * boundary = GFS_BOUNDARY_PERIODIC (bb); GfsBoundaryMpi * mpi = GFS_BOUNDARY_MPI (bb); GfsDomain * domain = gfs_box_domain (bb->box); if (domain->pid < 0) return; g_assert (boundary->sndcount <= boundary->sndbuf->len); if (bb->type == GFS_BOUNDARY_MATCH_VARIABLE) { #ifdef DEBUG fprintf (DEBUG, "%d send to %d with tag %d match variable size: bid: %d mid: %d d: %d dp: %d\n", domain->pid, mpi->process, TAG (bb), bb->box->id, GFS_BOUNDARY_MPI (bb)->id, bb->d, boundary->d); fflush (DEBUG); #endif MPI_Isend (&boundary->sndcount, 1, MPI_UNSIGNED, mpi->process, TAG (bb), mpi->comm, &(mpi->request[mpi->nrequest++])); gts_range_add_value (&domain->mpi_messages, sizeof (guint)); } #ifdef DEBUG fprintf (DEBUG, " %d send to %d with tag %d, size %d\n", domain->pid, mpi->process, TAG (bb), boundary->sndcount); fflush (DEBUG); #endif MPI_Isend (boundary->sndbuf->data, boundary->sndcount, MPI_DOUBLE, mpi->process, TAG (bb), mpi->comm, &(mpi->request[mpi->nrequest++])); gts_range_add_value (&domain->mpi_messages, sizeof (gdouble)*boundary->sndcount); } static void receive (GfsBoundary * bb, FttTraverseFlags flags, gint max_depth) { GfsBoundaryPeriodic * boundary = GFS_BOUNDARY_PERIODIC (bb); GfsBoundaryMpi * mpi = GFS_BOUNDARY_MPI (bb); GfsDomain * domain = gfs_box_domain (bb->box); MPI_Status status; gint count; if (domain->pid < 0) return; #ifdef PROFILE_MPI gdouble start, end; start = MPI_Wtime (); #endif /* PROFILE_MPI */ if (bb->type == GFS_BOUNDARY_MATCH_VARIABLE) { #ifdef DEBUG fprintf (DEBUG, "%d wait on %d with tag %d for match variable size: bid: %d mid: %d d: %d dp: %d\n", gfs_box_domain (bb->box)->pid, mpi->process, MATCHING_TAG (bb), bb->box->id, GFS_BOUNDARY_MPI (bb)->id, bb->d, boundary->d); fflush (DEBUG); #endif MPI_Recv (&boundary->rcvcount, 1, MPI_UNSIGNED, mpi->process, MATCHING_TAG (bb), mpi->comm, &status); #ifdef PROFILE_MPI end = MPI_Wtime (); gts_range_add_value (&domain->mpi_wait, end - start); start = MPI_Wtime (); #endif /* PROFILE_MPI */ if (boundary->rcvcount > boundary->rcvbuf->len) g_array_set_size (boundary->rcvbuf, boundary->rcvcount); } else boundary->rcvcount = boundary->sndcount; #ifdef DEBUG fprintf (DEBUG, " %d wait on %d with tag %d\n", gfs_box_domain (bb->box)->pid, mpi->process, MATCHING_TAG (bb)); fflush (DEBUG); #endif g_assert (boundary->rcvcount <= boundary->rcvbuf->len); MPI_Recv (boundary->rcvbuf->data, boundary->rcvcount, MPI_DOUBLE, mpi->process, MATCHING_TAG (bb), mpi->comm, &status); MPI_Get_count (&status, MPI_DOUBLE, &count); #ifdef DEBUG fprintf (DEBUG, " src: %d tag: %d error: %d\n", status.MPI_SOURCE, status.MPI_TAG, status.MPI_ERROR); if (count == MPI_UNDEFINED) { fprintf (DEBUG, " %d on tag %d: count is undefined!\n", gfs_box_domain (bb->box)->pid, MATCHING_TAG (bb)); g_assert_not_reached (); } else if (count != boundary->rcvcount) { fprintf (DEBUG, " %d on tag %d: count = %d boundary->rcvcount = %d\n", gfs_box_domain (bb->box)->pid, MATCHING_TAG (bb), count, boundary->rcvcount); g_assert_not_reached (); } #else g_assert (count == boundary->rcvcount); #endif #ifdef PROFILE_MPI end = MPI_Wtime (); gts_range_add_value (&domain->mpi_wait, end - start); #endif /* PROFILE_MPI */ (* gfs_boundary_periodic_class ()->receive) (bb, flags, max_depth); } static void synchronize (GfsBoundary * bb) { GfsBoundaryMpi * boundary = GFS_BOUNDARY_MPI (bb); MPI_Status status; guint i; #ifdef PROFILE_MPI GfsDomain * domain = gfs_box_domain (bb->box); gdouble start, end; start = MPI_Wtime (); #endif /* PROFILE_MPI */ /* wait for completion of non-blocking send(s) */ for (i = 0; i < boundary->nrequest; i++) MPI_Wait (&(boundary->request[i]), &status); #ifdef PROFILE_MPI end = MPI_Wtime (); gts_range_add_value (&domain->mpi_wait, end - start); #endif /* PROFILE_MPI */ boundary->nrequest = 0; #ifdef DEBUG /* rewind (DEBUG); */ fprintf (DEBUG, "==== %d synchronised ====\n", gfs_box_domain (bb->box)->pid); fflush (DEBUG); #endif (* gfs_boundary_periodic_class ()->synchronize) (bb); } #endif /* HAVE_MPI */ static void gfs_boundary_mpi_class_init (GfsBoundaryClass * klass) { GTS_OBJECT_CLASS (klass)->read = boundary_mpi_read; GTS_OBJECT_CLASS (klass)->write = boundary_mpi_write; #ifdef HAVE_MPI klass->send = send; klass->receive = receive; klass->synchronize = synchronize; #endif /* HAVE_MPI */ } static void gfs_boundary_mpi_init (GfsBoundaryMpi * boundary) { boundary->process = -1; boundary->id = -1; #ifdef HAVE_MPI boundary->nrequest = 0; boundary->comm = MPI_COMM_WORLD; #ifdef DEBUG if (mpi_debug == NULL) { int rank; MPI_Comm_rank (MPI_COMM_WORLD, &rank); gchar * fname = g_strdup_printf ("mpi-%d", rank); mpi_debug = fopen (fname, "w"); g_free (fname); } #endif static gboolean initialized = FALSE; if (!initialized) { int * tagub, flag, maxtag; MPI_Attr_get (MPI_COMM_WORLD, MPI_TAG_UB, &tagub, &flag); if (flag) maxtag = *tagub; else maxtag = 32767; /* minimum value from MPI standard specification */ tag_shift = maxtag/FTT_NEIGHBORS; initialized = TRUE; } #endif /* HAVE_MPI */ } GfsBoundaryClass * gfs_boundary_mpi_class (void) { static GfsBoundaryClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_boundary_mpi_info = { "GfsBoundaryMpi", sizeof (GfsBoundaryMpi), sizeof (GfsBoundaryClass), (GtsObjectClassInitFunc) gfs_boundary_mpi_class_init, (GtsObjectInitFunc) gfs_boundary_mpi_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_boundary_periodic_class ()), &gfs_boundary_mpi_info); } return klass; } GfsBoundaryMpi * gfs_boundary_mpi_new (GfsBoundaryClass * klass, GfsBox * box, FttDirection d, gint process, gint id) { GfsBoundaryMpi * boundary; boundary = GFS_BOUNDARY_MPI (gfs_boundary_periodic_new (klass, box, d, NULL)); boundary->process = process; #ifdef HAVE_MPI int comm_size; MPI_Comm_size (MPI_COMM_WORLD, &comm_size); g_return_val_if_fail (process >= 0 && process < comm_size, NULL); if (id >= tag_shift) g_warning ("GfsBoundaryMpi id (%d) is larger than the maximum MPI tag value\n" "allowed on this system (%d)", id, tag_shift); #endif /* HAVE_MPI */ boundary->id = id; return boundary; } /** \endobject{GfsBoundaryMpi} */ gerris-snapshot-131206/src/open_memstream.c0000644000175100017510000001127512250371171015636 00000000000000/* Open a write stream around a malloc'd string. Copyright (C) 2010 Free Software Foundation, Inc. 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 . */ /* Written by Eric Blake , 2010. */ #include "config.h" /* Specification. */ #include #include #include #include #include #include "verify.h" #if !HAVE_FUNOPEN # error Sorry, not ported to your platform yet #else # define INITIAL_ALLOC 64 struct data { char **buf; /* User's argument. */ size_t *len; /* User's argument. Smaller of pos or eof. */ size_t pos; /* Current position. */ size_t eof; /* End-of-file position. */ size_t allocated; /* Allocated size of *buf, always > eof. */ char c; /* Temporary storage for byte overwritten by NUL, if pos < eof. */ }; typedef struct data data; /* Stupid BSD interface uses int/int instead of ssize_t/size_t. */ verify (sizeof (int) <= sizeof (size_t)); verify (sizeof (int) <= sizeof (ssize_t)); static int mem_write (void *c, const char *buf, int n) { data *cookie = c; char *cbuf = *cookie->buf; /* Be sure we don't overflow. */ if ((ssize_t) (cookie->pos + n) < 0) { errno = EFBIG; return EOF; } /* Grow the buffer, if necessary. Use geometric growth to avoid quadratic realloc behavior. Overallocate, to accomodate the requirement to always place a trailing NUL not counted by length. Thus, we want max(prev_size*1.5, cookie->pos+n+1). */ if (cookie->allocated <= cookie->pos + n) { size_t newsize = cookie->allocated * 3 / 2; if (newsize < cookie->pos + n + 1) newsize = cookie->pos + n + 1; cbuf = realloc (cbuf, newsize); if (!cbuf) return EOF; *cookie->buf = cbuf; cookie->allocated = newsize; } /* If we have previously done a seek beyond eof, ensure all intermediate bytges are NUL. */ if (cookie->eof < cookie->pos) memset (cbuf + cookie->eof, '\0', cookie->pos - cookie->eof); memcpy (cbuf + cookie->pos, buf, n); cookie->pos += n; /* If the user has previously written beyond the current position, remember what the trailing NUL is overwriting. Otherwise, extend the stream. */ if (cookie->eof < cookie->pos) cookie->eof = cookie->pos; else cookie->c = cbuf[cookie->pos]; cbuf[cookie->pos] = '\0'; *cookie->len = cookie->pos; return n; } static fpos_t mem_seek (void *c, fpos_t pos, int whence) { data *cookie = c; off_t offset = pos; if (whence == SEEK_CUR) offset += cookie->pos; else if (whence == SEEK_END) offset += cookie->eof; if (offset < 0) { errno = EINVAL; offset = -1; } else if ((size_t) offset != offset) { errno = ENOSPC; offset = -1; } else { if (cookie->pos < cookie->eof) { (*cookie->buf)[cookie->pos] = cookie->c; cookie->c = '\0'; } cookie->pos = offset; if (cookie->pos < cookie->eof) { cookie->c = (*cookie->buf)[cookie->pos]; (*cookie->buf)[cookie->pos] = '\0'; *cookie->len = cookie->pos; } else *cookie->len = cookie->eof; } return offset; } static int mem_close (void *c) { data *cookie = c; char *buf; /* Be nice and try to reduce excess memory. */ buf = realloc (*cookie->buf, *cookie->len + 1); if (buf) *cookie->buf = buf; free (cookie); return 0; } FILE * open_memstream (char **buf, size_t *len) { FILE *f; data *cookie; if (!buf || !len) { errno = EINVAL; return NULL; } if (!(cookie = malloc (sizeof *cookie))) return NULL; if (!(*buf = malloc (INITIAL_ALLOC))) { free (cookie); errno = ENOMEM; return NULL; } **buf = '\0'; *len = 0; f = funopen (cookie, NULL, mem_write, mem_seek, mem_close); if (!f) { int saved_errno = errno; free (cookie); errno = saved_errno; } else { cookie->buf = buf; cookie->len = len; cookie->pos = 0; cookie->eof = 0; cookie->c = '\0'; cookie->allocated = INITIAL_ALLOC; } return f; } #endif /* HAVE_FUNOPEN */ gerris-snapshot-131206/desktop/0000755000175100017510000000000012250371675013424 500000000000000gerris-snapshot-131206/desktop/application-gerris-compressed.png0000644000175100017510000000705312250371171022004 00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  šœtIME×"a¿ZtEXtCommentCreated with The GIMPïd%n IDAThÞÅ™yUõ•Ç?¿»½ý½~½ÒÝì 6‚¨ì ,Š(ƒ¥Ž&n!®ã¤â¤fÊ1“TÆSÉDM k4qã8j3‘`ÄAÖféÞûõë·Þõ7¼‡†Œ$ÐÌ©ºu_Õ»÷Üó=¿³|Ïï'n©M‚+}(J:ãñi#Q©Â“\À!‰Iy»‡&Lk‰Ä­<©z1,FH@H5¨çQª~…2åRJ”s‰Š†P°€Á#)m¼ w/I÷}Òö[XÖ~œ\Æœ%¾V¨ G©ñ_Éxíê”ÙT)!\!H=@0ä$8Å÷4À$‘’^/IŸ³¤õfvÒÍAí0¨êSá¿„iÆ™¡Î¥TÑé-Eã4ó$Ž›Çsûn'B¦ÑC)%¤VU£„…@¿—¡Ï~“lî!Üü¨‘g@øŒ©(¡NÿÃ%Âa`WÑð*^i ¦“Á³A~3XÛÁÙnˆh*赨ƅøŒe„ôÙDÔr¤ 8í¤s?ÀM½ž£Ï€@3œÅlÿc\®¯À*G‹Þ*Þ”çb›mÈÜÛ_ öpºÀ5a¢°ˆ9¨ï ‹±±ñR@êcÿåΊs•ÿE¾®]É!Ø^4|¨˜¨Ý@·„¤=ˆ›ý-džó°s0é?Ö"@+‡À­à¿Ü$¤¾ ™Í€)†˜|TÜ£ýµwHQØ.À,†J7ÐtHHXݸé' ó<Øm0Á;½„kÒÁ? ´ëÀ9 ¹g´SÖQÝ'¨7Vè7°ÒBa¿(”@³XÓ@¯„¤Ý›~ÒO€sÎ@©gÑ@mQ^X9e#}åúåAm¤ô>U €] ¡~ ᦱÓOCæ)0ÏñÇ¥N‚ÕæFp§¼b²zKh99u Š€PÑóǽßïIòù û,X ˜8 ­¾žbG9ÅÄùg»÷ªAOq{T(-vPÈ8ãYÈü0;άç¿XNmj•ÅѹéqÉö(„‹Þw(´»ø[*ªo&zéµøí•^„›Bz RfŽT­÷ÿ Ð*Ôó•«ÂµY¥wS9”ßÎ:…\”¨š( ^eŒ1¯ˆŒL9‘XÚT<7›MûÛ†Ž…¶ä%V»r3-f–LõYP Æ›ó„'ñP á#‹¡SLq‘¤lr? ƨ,Ï­1&7þ·oíª¶Œ'kKjÌš8{­Xz׺ó>îØXþ³·s=Gª=ΊLœPóf{rtk«ä})i‘’f)Ù!%zÒ¿;+ ®“o´^-‡eïTdcÙ¬!ÓÒ‹ô– ó÷ërÛÚ‹äM)ß×ù/Ê¢àÙ0/µ°~ûA³úè1Év)IJ)Òž®Œ Êë×åöÖé2—"÷E¯\²ECÚsÙŸùeçï«d÷ê ™}Þ/ûß(‘?Þù€3â¡ægÅÂÁ5]ÃBq- fÕrð+&‘`š Ùɹ_2õõô¼æ±=U(HS€òIp쇣ø·°Õ˜…-u¬=\Ýý;î|Råzn}$ÿ-³¯#ôwÅŒ:%ùÒeThBõ©–04axD•4Õ¢‹‰â —°ž Û·£|àÒ9ÉbNôsc„_/¼ƒýsð)&%ÈËúÜYý4/œ³’¯Çÿ]½æ¯Ö|Ó˜ÇJÊû•a[™u-Åöd4žBq$aRTÒCGiûˆv A/ %@ P5v~u#Ä·½_ƒ´ŠÑlSgð–òÏöwŒ•p{ì9cÇòiîl©Ûû€Cò$>3eØ#]àI|Ò¢„A*é¦Lö£8.Jª”Bûª7@Ÿ£²g쾚û-ó»ÖÑ0´› ¼Ì›Y¦­¥Æèâ‰ì]|¢ÍäÚ…««‚3Ü»˜›ž"OK²324Î׌¦8x®B€!2h¨@Œ…ªJhðCõhH]C‚©ûw¢ou0öXT cŒlaMÌÔ?Ah‚_¥n§&Þ)ÆÎ”S=<:s-±U¢‡Ê`/©|¨¨ÀÃn• S@ŸáóA ‡/8‡šD;Á9Ølý°E¥ÕI}Tˆê‚M4æëØâÎäüi{Gˆz}ÉðH¤­ÔÞ້ÁæÇ61” 3à•’Çψ’- !§óA\î…Æñ“hØ¿±^"?>ñ)„“)"2…“rµ¿Ïb]êbj«;Eà\{£z”3Àž€Ó(_Û±{jz‰ñ.ÕZ'‡òuôQ^¸#p&i0«bpnœ´?Bõ¦cX[!µœí…)QëwÐpðPHÂ,­©Qdµ Ñq™©HBg@›Õx`cÝ›fÆÇí‘çI™A¶ÙÑÌ8šÄXzËF`Ÿ¯cÎô±¥nñ¡ô yÚº`Ÿ ý] [ ôÃ’:iÂäñ£i.yËÏ1§špe¦šÒP|xØhS¹;¸1ñØ«s¯YúÈÅ÷Çzƒå¼`ÝÌ›â \UÁR ªcÇèŒÕð‹øÆî§Éì’t £BÄŠ<8ºF¯¨¤‡J’İ)]fþËG‰€·Ïݶõõi¿:æúþ6úˆZéã×Þm<'neƒr1q‘ÀÄÇ’¡µÔ½ÞÈÑ^h<@¨@5ôW–³O4ÐÄ8z© Mé ’f ©`»Ña@G¹›}/ñÈ £o¬{móu÷¶¯ó*6²¦â+2&¢ ›K³ïríêW±W[t¸…Ñ© ¨Ö¥>6•Ígƒ¼˜CL KœëCZÓõ¡¸®‡ùáHÓMtý¡ô[?öý½æ,VWܼíßÄÌÔÇdJÃWÝ5ÿiÓÜy`Œ€©eºMcãå xJÜÉÖ¡ ÈyA¤Øâ3”ò;¨zbøÙéäbz"^qÛ¯î^÷DîÓÕS¤ù]z ‘îHdÒ@6éÈ#%ÈÄ|Á(S Ê>ÿwƬ®ÿÚzºXõè+4láœúÑ\sÝ"n¿ù @áýä^‘ Û·îûãXEJ|sA» ¬— i'ŒsOÏøÃ*!|zøVâZ”r±ÏŸ¸ôòYüë/~C[kw![ö6±oÓ šnúÆ2¢±ï¼µ…Ãm_Ô‰½° ü?‡àRÈ­‚ŽW Ÿ€ºS züó!tzàrâZrQ”Ÿ?sWg?À !sÜûNŸÄÌÙ“éîàõWßûstºÎk=8/¢êcñEŠ{›í>N:cï/~ØþßÑa„–S¢)-zÞ"yïí)°…™³'Ÿ`ôgg‡á·¬\Ž”’çžzËrþ¯yÀÍCn^~ºP‰®#}=ö3DÉ h B£€Æ?zµ8¨€_=o€è÷‘ûð.¤DÕ‰‘¢ñNج~sõFn^¹Œù ¦¡iê†Î{ooåÐÁÖ“‘¹qCÈΑ—íèïS®Õ Õ{Iù®#üËZ‹kî‚ÖNðÜ‚ij h“Á7|sPÑøUaQ0†«4cšƒXŽƒiJì±ÃFTþ,< õç´IEND®B`‚gerris-snapshot-131206/desktop/Makefile.in0000644000175100017510000003434112250371206015404 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = desktop DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iconsdir)" "$(DESTDIR)$(mimedir)" DATA = $(icons_DATA) $(mime_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ mimedir = $(datadir)/mime/packages mime_DATA = gerris.xml iconsdir = $(datadir)/icons/hicolor/48x48/mimetypes ICONS = application-gerris.png \ application-gerris-2D.png \ application-gerris-3D.png \ application-gerris-compressed.png icons_DATA = $(ICONS) EXTRA_DIST = gerris.xml $(ICONS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu desktop/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu desktop/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iconsDATA: $(icons_DATA) @$(NORMAL_INSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iconsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iconsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \ done uninstall-iconsDATA: @$(NORMAL_UNINSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iconsdir)'; $(am__uninstall_files_from_dir) install-mimeDATA: $(mime_DATA) @$(NORMAL_INSTALL) @list='$(mime_DATA)'; test -n "$(mimedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(mimedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(mimedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(mimedir)" || exit $$?; \ done uninstall-mimeDATA: @$(NORMAL_UNINSTALL) @list='$(mime_DATA)'; test -n "$(mimedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(mimedir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(iconsdir)" "$(DESTDIR)$(mimedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconsDATA install-mimeDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconsDATA uninstall-mimeDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-iconsDATA install-info install-info-am install-man \ install-mimeDATA install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am uninstall uninstall-am uninstall-iconsDATA \ uninstall-mimeDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/desktop/application-gerris-2D.png0000644000175100017510000000672612250371171020113 00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  šœtIME×63¢¬tEXtCommentCreated with The GIMPïd%n :IDAThÞÅšy´UÕ}Ç?ûLw¾ïÝ7ŒïáA0NˆŠKMlâ<„¤Ú®´F[MVbkVÓ¢¦ºjÒ8kRKj(D" Ê$ðED&y7Ï÷Ýùžq÷{1«J[ù­uÖ9ksöù~û7î}§Bj†}(J%: ø´Q¨TãÉ.àÀ¤‡¼ÝC ¦5„‡‰S%eh1b “õ ÊÔ«(W.¦T9¨(Á* à2x$¤Í'î~BÂ}‡´ý&–õ)NUîÔ3¥Î Ú]4*³¨VB¸Bú€ ä$8Åw4À$‘’~/Á€³„õfv=²&7²ªTjü2Ýø1çªs(St:½Àá"øa ä<‰ãæñÜ„Ûi4EÇPÊ©µDÕ(a¡0èe°W“Í=Œ›ß uò䘒,¥Qÿ!óï1A‰pø°<¤ŠGZ‚édð¬ßV38{Àí‘M½Õ8Ÿ±>‹ˆZ‚!§ƒtîG¸©W`”uòœÍ,ÿc\ª/Æ*›€CEm'‹ça 幨f;2÷ȯ{8=àš0ñ {P€/ˆLG÷ߊ߸C­"ç¥ÉæA¦‡ºü‰8k¸ŽÁå,ÖfsX(lú‹ÚŽƒÀ „¤›ÃɽÙ× ÿ80Á:¶´Ù¨¿D5`cã¥î‡Ô30ÖþêNOÆXä™ojW°[š‹À“EGíz%$ìaÜìo!ó,˜@cîø?vX€V[Àÿmpºê¶|5S‡ 17ø¨øŽö]Ð,À,šJ/Ð tJˆ[½¸é§ ó<Øí0Á;1{mÑÁh׃srÏhÇ=F퀠ÉX¬ƒÛ$ ŸŠB4‹1=ôKHؽ¸éG!ýk?9¡n¼ ŸmµDxáã'0ÊW¡_¢<¨rƒÖ›<`Mhˆ»iìôÓ9‰à?Ïè€ý} 9nbŠzsè"sJjo¡¢æhГäó› û,Œ3bÒd(Çé¸%þYîR5è)nŸ eŠꙢg< ™ßfç©(³Žoê•Ñ9éñ‰Ž(„‹Úw(¤»x­Õ7½ì:üñ‚J?ÂM!½8)3GªÞûÓ´ õLeQ¸>«ôo®€ŠâÛY@§à 5@©ª‰Òà"c¬yydTʉ”¤MÅs³Ù´¿=ÙÚš?_évÊ-ì)ËžZÕ%¡@ƒy¾ð$JÁ|dÑtʉ Α”O䢆÷”+s«Œ)û?6bmƒAÕ–±D}iýÞó&ÎZ#.[²~ÇùïwnzØùÄ|—Ïj=N‰LžP·º#1¦­MòŽ”–’V)Ù!%ïyÒ¿++篗¿k»ZÆ ËþiÈý!d«†LHoÒ»™¿O—Ûל#¿õÖ‹™Ø½Ýÿ¨Ì žç§æ55ï3kuIš¥$!¥H{R ¹²$9,opVÈæ¶2¿D‘{"È×A®yXCÚ³‘ÙòËîÿª–½++eöy¿ü]©üÙÎûš‡[Ÿó†KFÞ„bZ4̪)"#äàWL"Á4g³“»s¿bÚŠô½îÑœ*¤©@Å$èúñh~sÑÍl3ÎÖ:“­Ý\Ýûßþ¥Ê ܲ,ÿ}s 3þÄŽÛ/Ž9Œ M¨>Õ†f# ¨’¦Vô0QìãBÞåìŽf”u.ÝÃ(úô(87FxaÞ]¼ïŸO1É(A^ÕoäîÚ§yñ´ÛùfìßÔk¿¾êã|n§bP±Y×RlOFc)G&E}4rˆÉrÑž$ôƒP ÔÕcaç5ÓÉ!îñ~AL Ó&ư]=—ßso?ÀpI)w–3 IhDÐníß»±qµ™ñqgäyRfíö9´2ž1Žþòì3uÌ™>¶6Î&–Bß§½ö˜0ز­P~XR'M˜<~4Í%oùérj Wej) ÅF¦m©p‡7Æ[>çÚË–]p_I°‚­›X-.ÇU,Õ ¶¤‹î’:Ö1ŸÛv=MæCÉ>·Ð*D¨Ìƒ£kô‹*ú¨"A ¶b ¥ Ç¬Æ_jù(õÂ#Cðö¸Û·­˜þäò±7ÜÿÑejyd€¼[yNÜÂåb"މK’kh\±ŸCýÐx€PZ¬ª`˜L ãé§’4!¤'H˜Q0¤‚íFGŒnöíø²ÇÜØ4îºÖë—v6—Ïeƒ¼€L KœëCZÓõ¡¸®‡ù‘#Èý±xÏïßÿ™ï¯4gºø¦í/‰™©÷É”…®$úaþæµ³Ð.0­B·jl¼ô"~-îf[ò,r^i¶(ô@.éwPõøˆðÞ+ékËÆïüIÏ/œzóRß¿ø'½³}§<é>0T8# eSö-e¼víÕü‚{øøã)8iJ€XѾ2E÷H÷“´šÇ\ÔøÒâ¤^Uì¿|ì¼îûLyoÆÅîÛþÓºNâøUúÇU±£a«¼+Ùºï\R{#Wã€ÊBO-z<šæ|F듵ï˜Ë’—2\ïžÚý†¾°2Ñ7;0Þ¾:R“á™uŽÔ©xÄ—iéN»¡‘V"ÀXàt`B‘@t,FŸÑIëÕë½zäÔÍÀ¥²GAˆšÅ¥”¬ŒaÊñ8ƃóhP¦g @H@tr}È2ôÏbsäÃ?£ÊgQ(ý;B%Kw¼{P=ÑÑ^}å9~þè?耣<øƒ|Püsˆ(*À“½vB#¾µþ?®þ]ƒ}¾BÒd £Âß!è›Jù'ü™—ôùµ™·hmébùoÖÒz¨ëó{ž'ÉçL:;úxëÍ­|°ýÓ£…Q­´F8¼ì^˜ OðŒ:ß‹/ø ʃò?Þ½ó¦ŸlX¦M?{~p#ß»÷ëüõ½þÌÝ·:rûÈÒ¢’ßÝÁs E= f£‚ïtˆü=¼„˜¥Bâþ“¢”˜ùÂä åË.Ùßç¥çVpå5s6^ØþÇ!x䞀Î× þ+,Ìî GÁ?Bw¡.%¦©…F9ðå7fœ7™»¿{-+–¿}ôV¤w€òŠÒ£hô í]p^F ý šþsß|¼'ùí0Ê<6àªôF,‚à þi”¨:e4ïÿrñ~á¼³¸ùŽE/?¿šÍvuôªê²Â†å@â+%Æä¡û <5‚øs"뱌¹ä|+pú_Dæ?\š¾àûP c.Cøçá3jˆ*‚R R ÐíåŠEs¸þƯðëÖ6|Ee)7ß~%«Wnü¿j¡Ú$²û'äezà!*´:¤º””ïz2ÁMXÖÜžÁêÏ-@Së@›¾™à›jŒÁ¯ú‹ðPQû À9…RúˆpÓm ¹é¶…ÿùž~é!ò9‹®Î~žúç×iÞ¶çXY»‚žAØÿúÊ” Hy)/AÆíÃòâ¸RâµE+CW Eà±býÜPXô¥èòÒ¼ï¬ÝqËâϯÐÞ¹o1ðÆQÙh—m¤úþ Ëÿ52Æ*Õ9Ô)QÂZ9è娲ÄŽü* AQ( *ŠõM àJI‡g½»Žû—ô›^}å¹|1ùÿK µ/ˆß7™v%Ú|Ê”IÄ”Q ÂB!E•ÒÔ&I9DÜûˆ~oƒöÒö~zÊM]׷ض(î(÷ÏýEuXÅýY<>¶E¬P‹Ï˜Àªc¯…”nªZ>m4†RA=º J ¤qE'¦Ý…«´bšÃXŽCºV2‚òßÎ¥Hû?ŽùIEND®B`‚gerris-snapshot-131206/desktop/Makefile.am0000644000175100017510000000054212250371171015370 00000000000000## Process this file with automake to produce Makefile.in mimedir = $(datadir)/mime/packages mime_DATA = gerris.xml iconsdir = $(datadir)/icons/hicolor/48x48/mimetypes ICONS = application-gerris.png \ application-gerris-2D.png \ application-gerris-3D.png \ application-gerris-compressed.png icons_DATA = $(ICONS) EXTRA_DIST = gerris.xml $(ICONS) gerris-snapshot-131206/desktop/application-gerris-3D.png0000644000175100017510000000672212250371171020110 00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  šœtIME×7*¹WtEXtCommentCreated with The GIMPïd%n 6IDAThÞÅšy”TÕÇ?÷mµWuuWï¬ÝØ ¢"¢"Ž+.8jt—b4³£g49‰3æL2j=£™¸¢cÔ8d ƒ‘hDAe‘Uz_«k¯·Þù£J(3B“ß9ï¼:ç¾wßïû»¿åû»·ÇCê†|(J5:Mø´¨ÔâÉ.छ¢ÝŽÃ~Lk§FÎÔbØ”nNÔ“¨T/£J9 åD¢"†!T@Á, äðHI›A/IÒÝNÊ}›¬ý–õ1NMáø5¥Á1MÚ-4+3¨UB¸Bz~ $8åw4À$“’>/E¿³š”õ8f~%²®0¼jûUêüg3Õø§«³¨Tt:€À²òC@(xÇ-â¹ý· !³hŠŽ¡TR뉪QÂB`ÀËÑo¿N¾ðnq4Èc`Rº‚fý{œk|›qJ„½ÀeÅ“@¦|e%˜NÏÚÅu`mg¸Ý  © 7¢§â3.!¤Ï ¢&B0è´“-|7ó"Œ°Ž€SS#™á„ ôùxBe-ðIÙÚéò}Èx.¶Ù†,üŠËÁÞ N7¸&ŒÿBÀîà "SÑý7á7.ÇPk(xYò…‘ÙŸACñèœ2ÔÀÜà+Ì×fr@(¬úÊÖNÀ€„´[À)¼ù—¡ø&8í0Î:¼´™¨¿A5æbcãeîÌS0ÚþêNLǹÔÿ_×.f›l*+ž.jÐ#!eáæ ¹§Á|š Gþ±´nÿmঠs'4¬ûj&bvðaq»ö×ÞEa“³ì*=@Ð!!iõàf‡Ü³`·Á8ïèüu¿þ3@»œO ð”vÄsÔ÷ ZŒùúµÜì¤QøX”R YÎéI OBÊîÁÍ> Ù_Á˜ä±IucmØ·ÔV-à…À_B?_¹Oá­7 EÀ.»Ðt³ØÙ'!w •ÿ¬BJ v÷‚䈈Iê ¡sÌI™aP„Ê–ÿÔúž¤X\ ù§at’a“ @9ÂÀùg¸‹Ô §¸½*T–+¨ äÊœó,dq5˜ǃfÙ 4*s£³²cSíQ—­ïP*ÿvù·"TTßtôÊ«ð'Û *}7ƒô’dÌ™FïÏ pP¨'+—†óJß» H”ßÎ:¥X¨*TMT/5F›EFdœH,k*ž›ÏgýméÎÐúâžäR·C®cGeþø¨…Mæ™Â“x(%÷‘eשƃ8MR5i€sšÞQæ–“vo5₪-ã©ÆŠÆgŒŸ±\\¸påæ3ßëX3ø€³Ý\žzã"S‡Æ5¼Þžuð äm)9 %­R²YJÞñ¤ÿ£¼*€ v4l¹b*9#ÄÞω‹!ŠQlTOç÷\È?Ù÷2«`Aìcó¼©÷m9Ðòo{†eH9ýfưëÝàI|Ò¢‚!jè¡J 8.Jj8h1@Ÿ©²mÌd®(ü–ÙÝ+™˜þˆS¼ÍÌë¸D[NƒÑÍãù…¼¯Mçª9Kkƒ§» ‡Í…(r ÕIõµ¢)ž« @ˆšp *c ¶&ú¡~dÎŽ! Á”· op0¶YÔu2Z`,û™®¿Ðÿ–Y@C¼KŒ™Ññ &'ë‡@Wapð@lg­è¥&ØG¦*Oàa ·V…É Oƒðɠ΀½§œ@C²àš¬Öƒ¾×¢Æê¢Š~ªE/ÍÁýì.6³ÞÎÉS·×‰ýüáÐ[ge¶ßJU0;ö.éB˜A¯’"~Ò"J¾*„œ Ìq6¸ç(ìnšÀÄ·!VIä;ÀZB8•!"3ø0I¨ø}+3gÑXß%'Ú—0²W9ög·|uóGS²çoQ¯u±§ØL?‰Ò¨Ã™ Á%C³âdýêßíÄÚ™ÀÙìmÀAÃÁCA òÌŒ$¯‰ŽÍMA´Y»w®i~ÝÌùXy–Œd£}­Œe¿C_UöÉ:ætë›gO¢¯.ÒÖ ;Lèy°D?,©“%L?šæR´üt:õ„krõT†âÃÃF÷'Ü¡5ÉG^™uå…uw¬/˜`±u=¯‹‹pUK5¨uÒk`çòÍž$÷d—[j"TÁÑ5úD ½Ô"†­H)è6kñWX>*¼ðð¼îÆ K¦>öÊèkîùnô!µ*ÒÏsÞM<#ndµrq‘ÄÄÇùéå4/ÙÍ'}Ðx€Pz¨I°CLd?c飚,!¤'H™Q0¤‚íF‡  7ÿÇäC‹G]×2æªÖ«µ?*ά^òêËØcŒG6çåß⪥¯`/µèpK[ µ@mXçùx·j6«åYìay‚\Ò˜®Åu=„(@îŽ'»ŸºãǾ¿×œ¹êüë7>/¦gÞ#WF¸’èiø›ÖŽR»Vÿ¶ùPú†Ýã{>ÐÔVÆûfÆÚ—GêòÓü!³Á‘Z8“Œørm!Ýi34²ŠB œŒ+(€ŽÅÈ“:h½·ö¼çB¿ø¢Tw+@3¢¸T—qL9ÇøÁàš…IÀI@R˜F´Ìûü3x7òÁŸÀ!e_*þ‘PlÑæU{Õ£í¥Ÿá'ÿ³8Úð+¿W€oŠExì‘—jÆ7Wþ'À•Ào4Øå+µ!-Öð0ê!|;Aßdª>_ð§^øþçL½hÑÑÖËkKV±}ë¾ÏÆRJ y“í[÷±ä7+þD¹'Ÿ¿ŸbÁ¢³£Çñ*›6ì8œBÖ¦ †§ößOBŸK¥DÏ!ã¥È¹½X^WJ< ֢h•èªA ¬x¼ÌŸ›J›¾$€N/Ë{Î[›ïÙ?ÿèëÀ‹´uìš¼vˆB6ÒÃe™Þ¿Âòÿ9c!Õê,”(a­ ô*lYJbŸþU@‚¢D e~\)i÷’¬tW°ß~‚>sõK/>S,¢c"ÿ?•P{ƒø} iÓÎ¥R™@\‰Å ,€QP)=Li’–ƒ$½éóV0`/'k僚ÊÐu}mÛ©ò‰rOùÞW6‡U>ï‘å볤¬«Ôò3&°ìð¹Ò%PUCKàÓFb(4¢‹ª”@Wt`Ú¸J+¦9„å8dë%Ã(ÿ $ “°æ6¬„IEND®B`‚gerris-snapshot-131206/desktop/application-gerris.png0000644000175100017510000000661212250371171017642 00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  šœtIME× ìFštEXtCommentCreated with The GIMPïd%n îIDAThÞÅšyåyÆ__ÓsïìÎÞ:wÅêBB€º@B„c\˜˜òÁá8±Ë)Œˆ«B+•`'1UØæ0(‰PDT,`$$!ТûÚC{i¯Ù¹§Ï/L+UI%I»Ê[Õ5ýOý=Ï÷žO`²­5 ž ¡(õè´Ò¦ Òˆ/ãx€K‹A*N/.Xö>‰×ð‰Ë‹IÙtS¢ªAX½”Zõ3Ô)×S£Ì%!’B\ÀÊ@Ÿ¬tó3d¼ƒd½w)8¿Å¶ã–Ë0ý"õ@c,A‹y mÚ×hW–Ò¨Dñ„  #@(Kpƒç4 $P”’a?ˈ»•¬ý,Vi3Ò+Cë$hQi2¯e‘ñ®R—S«èôG€î`óã@(û׫à{#o! hŠŽ¡ÔU›I¨ bB`Ô/2â¼A©ü^å´È‰; Óëkh׿ËuÆŸ0K‰sØl<䃫 Ár‹øöq¨|önp7¢ š z+ªq!ãV¢úRâj)cn/…ò_âå ¾ Ó&@¸ 榦²Ôü17êwâ •÷SÛ¹àwÈûŽuY~ *ÁÙî xÌ–ÿ}áBDxºy¦q†Ú@Ù/P*?…,ü´T.Àåã-¬‰¼ÂÚ2º…ÂÀpÀvF%ä¼2nùC(ý+TÞ··ÊbÇ'¼à#ÂËPÃßF5Öàààç…ü 0Ý9ss)n7ÿ‰/j·p@vÏz8#!ëŒã•^ƒâ‹`}Næœã˺hiß æCàe!ÿ0?8? Æ ±2ò#ñuíýãŠÂnVà*g€> OBÆ>ƒWxŠ/sfùp:˜WƒöypOAùíœ×htwê_à~7‡ÂaQMVÓ3À°„¬s¯ð#(<N.™€T7Ó“ïƒÚ¢ü˜rÎkL ¥õ”Ç´)^Ä߯@0'p¡Q ãp ÏCñ9°&hóg­]‚Ý Ö6ð2ç|b¾ú•è*k~þH Ñ€ù³ìú’Jå}(½vfOB©ï ¨ã(ç¸Is©÷ 5â+Þ µAõ€bÀEßFV¶‚Õ7±Ìÿïvn'Ъ¬I,/ÌÌö& °ïR-ÿNp¯5´½ö.ÌL/eáå‘~†¼U&ßêÿÿ÷õ2åöXkIÞž†tðt ЩÆBP£j¢&r»1ݺ9>%ïÆ“Kñ½R©`žÎõGwTŽg6x}òº­Åæ‹ 1 ·Y+„/ñQªî#שfƒ¸RR7”Um[”Ûʯóý‡‘ꨎLe[kZ\={éFqÓÚÍ{V|Ø·-ý„{pà=N6û\[4>«åÞ촞ɻRÒ-%]R²GJ¶øÒü¸$¯ß,Ýs‡Ì<“à ‘Ç¢È. Y0þ ¤²òˆ.wm¼R~éíuÅÔŸ ürÝXäâX‘_ݱû¨Õ|ª_²[J²RŠ‚/Ř'“¹qy·»^îîY,+ky(Ž|äë »5¤³ Yú[Sü¦QžÙP/K/™rô×5ò‡{u›žèzQ¬OÒ28É.”Ò‘HI͇(QS±ˆG \Á^,ÿŒ…ë÷2ôªÏî|5!-Òs ÿSùÕª¯°Ó¸Gê̳pÇ™ç¡ñŸªÜͽOW¾iôE¿DÔ9Ù§N£BjHµ…¡9Ã'¡hƒÌG¹–÷¸¢w7Ê&qÈ1=%î=q^^ý5>4—R,ŠJ„ÑïáÁæçYwÉý|1õÏêçþðõ¯+¸Ÿô¨2i' Kž­8¾L¤ò(®$Fž†hçóä!ƒ9!¡h§ÃÞÏ.¢hDyØÿ{Rbœ1]êU¼ÉM<é|ñd $aì¹mÑc{»;Þò7q|RN€¬;bå §)<¾$$mj§3ÔÉQ×C‰@£R-_èËTÌXÀg˯±rp3órs¹¿‡eânÕ6Òb òli-iK¸kõ†ÆÈUÞZ–ç'Ç…¨Ðˆçf†ºÐßSS&JM¸ˆÐØóLhžùk“C°ðð^ô.Æ›Æñ~¦ËnfÒÉý#„&øyþZRbÆÒ¾/‘w›'À@yl¬;y¤Q Ñ&_‰ øØÂÀkTaè‹!v¨KáÄå—Ð’é%²­ Û€ Ÿ°i°¨c„z1D{¤“c•vvxK¸lÑÁ&Ñ¡ß092;0òNf¼†•ÉíäÊ1ÆüZ*˜äD‚R]¹X âZðV)k›Ã¼ÃïIäà}û!–Í—yBX¤ÕQÌÍæü5´6ˆð\çV¦)À™…{L¾ºçã……ŒwhÖ8^ig„tõ 7áÎÑàê*ˆñå) fœæíýØ;!ÿ1¸»«S¢6ê¢á⣠ÄÂ%zòS)i3‹ ‘D'ÀiûØ‘míoXÅÄ_"oEØå\I3é3®k¹LÇZbGû2R¹1ô­NÂ! FAöTÛ[êˆQÁDÓ<*¶I¿ÛL¬¡ØLm459ÝhgÚß–ùñ+Ë?wÓÓ×<’ޤYg™7ÄÍxª‚­4'ûH¶°‰ëø£Ÿ§¸OrÔ«Ž qê+àêâ!È’ÄQ ¤ Z˜5vˆ?69ÿ·kçúEϼ2ýîG¿•xZ­‹ð²¿÷²U¹†”È`â†ÜFÚ×ãÔ0œ|@¨@3Œ6¤9$æÑÉL†©§@é ²V ©àx‰I@_Ú+ý.óôºi÷t̸«ëóßèý‰XQ¿×ë?Ãqc6šp¸¾ôwmxgƒMŸWÆ&°¯±½n%[å5g%"”½ÒX^Åó|„¨L@Z^fðÍÚoþ0ôçš»F½óË»þQ,ÉH±6†ð$‰}9ø7‡®>¨Ó,¬ƒè}Ûn\ÅsâAvæ.§ìGàˆÿê‚Ê9ÓEÕ3“ßÎÏ#gRõœþùC›Ÿ-ïß°@ZßÖ¥¿éMAf d§Ž89½Ðy›. 4 Å\N\QIÓŽB5E>ÍÅî×,g§øºêshކªcˆ´'^E; Íû:‘ÐêDuÚ1E#$%út‡â¯B›d—ýÖyŒ”Z„V‚ÙTý°0Qv\€Ù ±oŠ|:Å ˆŽkUÅ0u±‡½Oq·È¿¢¿|>3±R€Ðrˆ>‘+¡S½ðÍŸP!4âßE­%¥%H Hì{’w…D–…ã¼æÿ5ûË;¯9¿äíÊÃOžwëèÌ"ö}¢á?Å&¶7HÙZ[Y‡¬„r¹ÊßÙïZÇ©€m K!|Â\MÈh"¡j¨ºMHÅk)õ-Þt^`§ý8Gcâ¬ÿ#hÂhш‡'¥6 ¥OÞ¢è¼moijö=¾WåSmm>„–@hª1 S U¶ãûmÀ•ûû¼!¶ØOr¢ü<§ÄHà´‚[LÌ|œ´¾†Z%RMy¾KÞÏRô†°ý ž”øÄ@mDÑjÑUƒp°ñTÐ?·UE_Ò@¿_àC÷[sÆ9ÄHÝ„ˆºÿGÚ< J,§Oé²Ʊ]Ë’83&­QùOrq—@Õ·IEND®B`‚gerris-snapshot-131206/desktop/gerris.xml0000644000175100017510000000203012250371171015343 00000000000000 Gerris simulation Gerris simulation Gerris 2D simulation Gerris 3D simulation gerris-snapshot-131206/m4/0000755000175100017510000000000012250371201012254 500000000000000gerris-snapshot-131206/m4/ltversion.m40000644000175100017510000000126212250371201014464 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) gerris-snapshot-131206/m4/ltoptions.m40000644000175100017510000003007312250371201014474 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) gerris-snapshot-131206/m4/ltsugar.m40000644000175100017510000001042412250371201014120 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) gerris-snapshot-131206/m4/libtool.m40000644000175100017510000105754212250371201014120 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS gerris-snapshot-131206/m4/lt~obsolete.m40000644000175100017510000001375612250371201015024 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) gerris-snapshot-131206/modules/0000755000175100017510000000000012250371672013420 500000000000000gerris-snapshot-131206/modules/topics.c0000644000175100017510000012556312250371171015013 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2011 Sebastien Delaux, National Institute of Water * and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "solid.h" #include "output.h" #include "vof.h" /* This implementation of submarine landslide initial condition is directly inpsired from the software TOPICS developped by P. Watts. Sources are that used in the version 1.2 of TOPICS, last modified in August 2009 P. Watts. */ /* GfsInitSubmarineLandslide: Header */ typedef struct _GfsInitSubmarineLandslide GfsInitSubmarineLandslide; struct _GfsInitSubmarineLandslide { /*< private >*/ GfsGenericInit parent; /*< public >*/ GfsVariable * v; GfsVariable * vu, * vv; gdouble xo, yo; /* initial x/y-axis mass failure center */ gdouble alpha; /* CCW angle of north in degrees from grid top */ gdouble depth; /* d initial depth of the middle of slide (m) */ gdouble theta; /* mean slope along failure plane (degrees) */ gdouble length; /* b initial slide length during failure (m) */ gdouble thick; /* t Enter maximum initial slide thickness (m) */ gdouble width; /* w Enter maximum initial slide width (m) */ gdouble gamma; /* specific density */ gdouble vol; /* Volume of the slide */ gdouble eta; gdouble lambda; gdouble so; }; #define GFS_INIT_SUBMARINE_LANDSLIDE(obj) GTS_OBJECT_CAST (obj, \ GfsInitSubmarineLandslide,\ gfs_init_submarine_landslide_class ()) #define GFS_IS_INIT_SUBMARINE_LANDSLIDE(obj)(gts_object_is_from_class (obj,\ gfs_init_submarine_landlside_class ())) static GfsEventClass * gfs_init_submarine_landslide_class (void); /* GfsInitSubmarineSlump: Header */ typedef struct _GfsInitSubmarineSlump GfsInitSubmarineSlump; struct _GfsInitSubmarineSlump { /*< private >*/ GfsGenericInit parent; /*< public >*/ GfsVariable * v; GfsVariable * vu, * vv; gdouble xo, yo; /* initial x/y-axis mass failure center */ gdouble alpha; /* CCW angle of north in degrees from grid top */ gdouble depth; /* d initial depth of the middle of slide (m) */ gdouble theta; /* mean slope along failure plane (degrees) */ gdouble length; /* b initial slide length during failure (m) */ gdouble thick; /* t Enter maximum initial slide thickness (m) */ gdouble width; /* w Enter maximum initial slide width (m) */ gdouble gamma; /* specific density */ gdouble dist; /* distance travelled by the center of gravity */ gdouble lambda; gdouble eta; gdouble so; }; #define GFS_INIT_SUBMARINE_SLUMP(obj) GTS_OBJECT_CAST (obj, \ GfsInitSubmarineSlump, \ gfs_init_submarine_slump_class ()) #define GFS_IS_INIT_SUBMARINE_SLUMP(obj) (gts_object_is_from_class (obj,\ gfs_init_submarine_landlside_class ())) static GfsEventClass * gfs_init_submarine_slump_class (void); /* GfsInitSubaerialLandslide: Header */ typedef struct _GfsInitSubaerialLandslide GfsInitSubaerialLandslide; struct _GfsInitSubaerialLandslide { /*< private >*/ GfsGenericInit parent; /*< public >*/ GfsVariable * v; GfsVariable * vu, * vv; gdouble xo, yo; /* initial x/y-axis mass failure center */ gdouble alpha; /* CCW angle of north in degrees from grid top */ gdouble vol; /* Landslide volume within water */ gdouble width; /* Landslide width at shoreline */ gdouble depth; /* Water depth near end of landslide (m)*/ gdouble ut; /* Landslide velocity at shoreline */ gdouble so; /* Landslide length in water */ gdouble to; /* Landslide runout time in water */ gdouble lambda; gdouble eta; }; #define GFS_INIT_SUBAERIAL_LANDSLIDE(obj) GTS_OBJECT_CAST (obj, \ GfsInitSubaerialLandslide,\ gfs_init_subaerial_landslide_class ()) #define GFS_IS_INIT_SUBAERIAL_LANDSLIDE(obj)(gts_object_is_from_class (obj,\ gfs_init_subaerial_landlside_class ())) static GfsEventClass * gfs_init_subaerial_landslide_class (void); /* GfsInitPyroclastic: Header */ typedef struct _GfsInitPyroclastic GfsInitPyroclastic; struct _GfsInitPyroclastic { /*< private >*/ GfsGenericInit parent; /*< public >*/ GfsVariable * v; GfsVariable * vu, * vv; gdouble xo, yo; /* xo,yo position controls source location */ gdouble alpha; /* CCW angle of north in degrees from grid top */ gdouble depth; /* Water depth near end of flow */ gdouble vol; /* Submerged volume (m^3) */ gdouble ut; /* Flow velocity at shoreline (m/s) - control */ gdouble so; /* Flow runout length under water (m) */ gdouble to; /* Flow runout time under water (s) */ gdouble width; /* Flow width at the shoreline (m) */ gdouble lambda; gdouble eta; }; #define GFS_INIT_PYROCLASTIC(obj) GTS_OBJECT_CAST (obj, \ GfsInitPyroclastic, \ gfs_init_pyroclastic_class ()) #define GFS_IS_INIT_PYROCLASTIC(obj) (gts_object_is_from_class (obj, \ gfs_init_pyroclastic_class ())) static GfsEventClass * gfs_init_pyroclastic_class (void); /* GfsInitSubmarineLandslide: Object */ static void gfs_init_submarine_landslide_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_init_submarine_landslide_class ()) ->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable name"); return; } GfsInitSubmarineLandslide * l = GFS_INIT_SUBMARINE_LANDSLIDE (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (!(l->v = gfs_domain_get_or_add_variable (domain, fp->token->str, NULL))) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } gts_file_next_token (fp); gchar * vname = g_strconcat (l->v->name, "_U", NULL); l->vu = gfs_domain_get_or_add_variable (domain, vname, NULL); vname = g_strconcat (l->v->name, "_V", NULL); l->vv = gfs_domain_get_or_add_variable (domain, vname, NULL); GtsFileVariable var[] = { {GTS_DOUBLE, "x", TRUE, &l->xo}, {GTS_DOUBLE, "y", TRUE, &l->yo}, {GTS_DOUBLE, "alpha", TRUE, &l->alpha}, {GTS_DOUBLE, "depth", TRUE, &l->depth}, {GTS_DOUBLE, "theta", TRUE, &l->theta}, {GTS_DOUBLE, "length", TRUE, &l->length}, {GTS_DOUBLE, "thickness", TRUE, &l->thick}, {GTS_DOUBLE, "width", TRUE, &l->width}, {GTS_DOUBLE, "volume", TRUE, &l->vol}, {GTS_DOUBLE, "gamma", TRUE, &l->gamma}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; /* Checks the validity of the model */ if ( l->theta > 30 ) g_warning ("The incline angle theta >30 degrees: %g. This will make the amplitude inaccurate!", l->theta); if ( l->depth/l->length < 0.12 ) g_warning ("The ratio depth/length <0.12: %g. This will make the amplitude inaccurate!", l->depth/l->length); if ( l->thick/l->length > 0.2 ) g_warning ("The ratio thickness/length > 0.2: %g. This will make the amplitude inaccurate!", l->thick/l->length); if ( l->thick/l->depth > 3.33 ) g_warning ("The ratio thickness/depth > 3.33: %g. This will make the amplitude inaccurate!", l->thick/l->depth); if ( l->width/l->length < 0.06 ) g_warning ("The ratio width/length < 0.06: %g. This will make the amplitude inaccurate!", l->width/l->length); if ( l->width/l->length > 1.0 ) g_warning ("The ratio width/length > 1.0: %g. This will make the amplitude inaccurate!", l->width/l->length); gdouble g = GFS_SIMULATION(domain)->physical_params.g; gdouble sint = sin(l->theta*M_PI/180.); gdouble gmo = l->gamma - 1.; gdouble ao = g*sint*gmo / (l->gamma + 1.); /* Characteristic acceleration */ gdouble ut = sqrt(0.5*g*l->length*M_PI*sint*gmo); /* Characteristic velocity*/ l->so = pow(ut, 2.) / ao; /* Characteristic displacement */ gdouble to = ut / ao; /* Characteristic time-scale */ l->lambda = to*sqrt(g*l->depth); /* Initial wavelength of tsunami */ gdouble hao = l->lambda / l->length; if ( hao < 1.0 ) g_warning ("The Hammack number is < 1: %g. This will make the amplitude inaccurate\n", hao); gdouble sg = l->so*sint / l->depth; if ( sg > 0.35 ) g_warning ("The Submergence number is > 0.35: %g. This will make the amplitude inaccurate\n", sg); /* Calculate tsunami initial amplitude */ l->eta = 0.723*l->so * (4.772e-02 - 3.559e-02*sint + 8.13e-03*sint*sint) * (l->thick / l->length) * pow( l->length*sint / l->depth, 1.25) * 1.18*(1.0 - exp(-2.2027*gmo)); gdouble term = l->eta / (l->so * pow(sint, 1.5)); if ( term > 0.2 ) g_warning ("The term (eta/so*sinq^1.5) >0.2 : %g. This will make the amplitude inaccurate!", term); } static void gfs_init_submarine_landslide_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_init_submarine_landslide_class ()) ->parent_class->write) (o, fp); GfsInitSubmarineLandslide * l = GFS_INIT_SUBMARINE_LANDSLIDE (o); fprintf (fp, " %s {\n", l->v->name); fprintf (fp, " x = %g y = %g alpha = %g\n" " depth = %g theta = %g\n" " length = %g width = %g\n" " thickness = %g volume = %g\n" " gamma = %g\n" "}", l->xo, l->yo, l->alpha, l->depth, l->theta, l->length, l->width, l->thick, l->vol, l->gamma); } static void init_submarine_landslide (FttCell * cell, GfsInitSubmarineLandslide * l) { GfsSimulation * sim = gfs_object_simulation (l); gdouble cosa = cos(l->alpha*M_PI/180.); gdouble sina = sin(l->alpha*M_PI/180.); gdouble cost = cos(l->theta*M_PI/180.); gdouble sint = sin(l->theta*M_PI/180.); gdouble tant = tan(l->theta*M_PI/180.); FttVector p, o; gfs_cell_cm (cell, &p); o.x = l->xo; o.y = l->yo; gfs_simulation_map (sim, &o); gdouble L = sim->physical_params.L; p.x = (p.x - o.x)*L; p.y = (p.y - o.y)*L; FttVector q; q.x = -sina*p.x + cosa*p.y; q.y =- cosa*p.x - sina*p.y; gdouble cut = 200. * l->width; gdouble g = sim->physical_params.g; /* Gravity */ gdouble xg = (l->depth + l->thick/cost) / tant; gdouble xmin = 0.95*( (xg + 0.4338*l->so*cost) - xg); gdouble nmin = -1.2*2.1*l->eta; gdouble nmax = 0.64*l->eta*(0.8 + 0.2*l->depth / (l->length*sint)); gdouble term = 1.0 - exp( -2.0906*(l->width / l->lambda) * (1.0 + 1.0903*(l->width / l->lambda)) ); /* Initialize tsunami shape */ GFS_VALUE (cell, l->v) = term * (nmin*exp(-pow(nmin*(q.x - xmin) / (l->lambda * nmax), 2.)) + nmax * exp(-pow((q.x - xmin - 0.5*l->lambda) / (l->lambda), 2.))) * pow(2. / ( exp(3.*term*q.y / l->width) + exp(-3.*term*q.y / l->width)), 2.); if ( fabs(q.y) > cut) { GFS_VALUE (cell, l->v) *= exp(-pow(5.*(fabs(q.y) - cut) / cut, 2.)); } /* Initialize velocity from estimated linear wave quantities */ gdouble kappa = 2.*M_PI / l->lambda; term = kappa*l->depth; gdouble omega = sqrt(g*kappa*tanh(term)); if (GFS_VALUE (cell, l->v) > 0.) { gdouble utot = GFS_VALUE (cell, l->v)*g*kappa*cosh(0.469*term) / (omega*cosh(term)); GFS_VALUE (cell, l->vu) = -utot*sina; GFS_VALUE (cell, l->vv) = utot*cosa; } else { GFS_VALUE (cell, l->vu) = 0.; GFS_VALUE (cell, l->vv) = 0.; } } static gboolean gfs_init_submarine_landslide_event (GfsEvent * event, GfsSimulation * sim) { if ((*GFS_EVENT_CLASS (GTS_OBJECT_CLASS(gfs_init_submarine_landslide_class ()) ->parent_class)->event) (event, sim)) { gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) init_submarine_landslide, event); return TRUE; } return FALSE; } static void gfs_init_submarine_landslide_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_init_submarine_landslide_read; GTS_OBJECT_CLASS (klass)->write = gfs_init_submarine_landslide_write; klass->event = gfs_init_submarine_landslide_event; } static GfsEventClass * gfs_init_submarine_landslide_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_init_submarine_landslide_info = { "GfsInitSubmarineLandslide", sizeof (GfsInitSubmarineLandslide), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_init_submarine_landslide_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_init_class ()), &gfs_init_submarine_landslide_info); } return klass; } /* GfsInitSubmarineSlump: Object */ static void gfs_init_submarine_slump_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_init_submarine_slump_class ()) ->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable name"); return; } GfsInitSubmarineSlump * l = GFS_INIT_SUBMARINE_SLUMP (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (!(l->v = gfs_domain_get_or_add_variable (domain, fp->token->str, NULL))) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } gts_file_next_token (fp); gchar * vname = g_strconcat (l->v->name, "_U", NULL); l->vu = gfs_domain_get_or_add_variable (domain, vname, NULL); vname = g_strconcat (l->v->name, "_V", NULL); l->vv = gfs_domain_get_or_add_variable (domain, vname, NULL); GtsFileVariable var[] = { {GTS_DOUBLE, "x", TRUE, &l->xo}, {GTS_DOUBLE, "y", TRUE, &l->yo}, {GTS_DOUBLE, "alpha", TRUE, &l->alpha}, {GTS_DOUBLE, "depth", TRUE, &l->depth}, {GTS_DOUBLE, "theta", TRUE, &l->theta}, {GTS_DOUBLE, "length", TRUE, &l->length}, {GTS_DOUBLE, "thickness", TRUE, &l->thick}, {GTS_DOUBLE, "width", TRUE, &l->width}, {GTS_DOUBLE, "distance", TRUE, &l->dist}, {GTS_DOUBLE, "gamma", TRUE, &l->gamma}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; if ( l->depth/l->length < 0.02 ) g_warning ("The initial depth is too small for the physics!"); if ( l->theta > 30 ) g_warning ("The incline angle theta >30 degrees: %g. This will make the amplitude inaccurate!", l->theta); if ( l->depth/l->length < 0.12 ) g_warning ("The ratio depth/length <0.12: %g. This will make the amplitude inaccurate!", l->depth/l->length); if ( l->thick/l->length > 0.2 ) g_warning ("The ratio thickness/length > 0.2: %g. This will make the amplitude inaccurate!", l->thick/l->length); if ( l->thick/l->depth > 3.33 ) g_warning ("The ratio thickness/depth > 3.33: %g. This will make the amplitude inaccurate!", l->thick/l->depth); if ( l->width/l->length < 0.25 ) g_warning ("The ratio width/length < 0.25: %g. This will make the amplitude inaccurate!", l->width/l->length); if ( l->width/l->length > 2.0 ) g_warning ("The ratio width/length > 2.0: %g. This will make the amplitude inaccurate!", l->width/l->length); gdouble g = GFS_SIMULATION(domain)->physical_params.g; /* Gravity */ gdouble gmo = l->gamma - 1.; gdouble sint = sin(l->theta*M_PI/180.); gdouble r = 0.125*pow(l->length, 2.) / l->thick + l->thick / 2.0; gdouble dphi = l->dist / r; if ( dphi > 0.53 ) g_warning ("The angular motion dphi > 0.53 radians: %g. This will make the amplitude inaccurate!", dphi); if ( r/l->length > 2.0 || r/l->length < 1.0) g_warning ("The ratio r/length >2 or r/length <1: %g. This will make the amplitude inaccurate!", r/l->length); l->so = l->dist / 2.0; gdouble to = sqrt((r*(l->gamma + 1.0)) / (g*gmo)); l->lambda = 2.0*to*sqrt(g*l->depth); gdouble hao = 0.5*l->lambda / l->length; if ( hao < 1.0 ) g_warning ("The Hammack number is < 1: %g. This will make the amplitude inaccurate\n", hao); gdouble sg = l->so*sint / l->depth; if ( sg > 0.35 ) g_warning ("The Submergence number is > 0.35: %g. This will make the amplitude inaccurate\n", sg); l->eta = 0.723*l->so*(1.4662*gmo - 0.3454*pow(gmo, 2.))*pow(sint, 0.22) * (l->thick / l->length) * pow(l->length / l->depth, 1.25) * pow(dphi, 0.39) * pow(l->length / r, 0.63) * 0.1309; gdouble term = l->eta / (l->so*pow(sint, 1.5)); if ( term > 0.2 ) g_warning ("The term (eta/so*sinq^1.5) > 0.2: %g. This will make the amplitude inaccurate\n", term); } static void gfs_init_submarine_slump_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_init_submarine_slump_class ()) ->parent_class->write) (o, fp); GfsInitSubmarineSlump * l = GFS_INIT_SUBMARINE_SLUMP (o); fprintf (fp, " %s {\n", l->v->name); fprintf (fp, " x = %g y = %g alpha = %g\n" " depth = %g theta = %g\n" " length = %g width = %g\n" " thickness = %g distance = %g\n" " gamma = %g\n" "}", l->xo, l->yo, l->alpha, l->depth, l->theta, l->length, l->width, l->thick, l->dist, l->gamma); } static void init_submarine_slump (FttCell * cell, GfsInitSubmarineSlump * l) { GfsSimulation * sim = gfs_object_simulation (l); gdouble cosa = cos(l->alpha*M_PI/180.); gdouble sina = sin(l->alpha*M_PI/180.); gdouble cost = cos(l->theta*M_PI/180.); gdouble sint = sin(l->theta*M_PI/180.); gdouble tant = tan(l->theta*M_PI/180.); FttVector p, o; gfs_cell_cm (cell, &p); o.x = l->xo; o.y = l->yo; gfs_simulation_map (sim, &o); gdouble L = sim->physical_params.L; p.x = (p.x - o.x)*L; p.y = (p.y - o.y)*L; FttVector q; q.x = -sina*p.x + cosa*p.y; q.y =- cosa*p.x - sina*p.y; gdouble g = sim->physical_params.g; /* Gravity */ gdouble cut = 200.*l->width; gdouble sg = l->so*sint / l->depth; gdouble xg = (l->depth + l->thick / cost) / tant; gdouble xmin = 0.565*(xg + 0.4597*l->so*cost) - xg; gdouble delx = 0.5 * l->lambda; gdouble zmin = -l->eta * ((2.480*0.2892 - 0.7904*sg + 1.3376*pow(sg, 2.)) / (0.2892 + 0.9163 * sg)); gdouble zmax = l->eta * ((1.686*0.3498 - 0.3531*sg + 0.6466*pow(sg, 2.)) / (0.3498 + 1.0257*sg)); gdouble nmin = 1.22*1.15*zmin; gdouble nmax = 1.22*zmax; gdouble denom = 0.5*l->lambda; gdouble shift = 0.8*delx; gdouble wid = 0.5*l->lambda; gdouble term = 1.0 - exp(-2.0906* (l->width / wid) * (1.0 + 1.0903*(l->width / wid))); /* Initialize tsunami shape */ GFS_VALUE (cell, l->v) = term * (nmin * exp(-pow(nmin*(q.x - xmin) / (denom*nmax), 2.)) + nmax * exp(-pow((q.x - xmin - shift) / (denom), 2.))) * pow(2. / (exp(3.*term*q.y / l->width) + exp(-3.*term*q.y / l->width)), 2.); if ( fabs(q.y) > cut) { GFS_VALUE (cell, l->v) *= exp(-pow(5.0*(fabs(q.y) - cut) / cut, 2.)); } /* Initialize velocity from estimated linear wave quantities */ gdouble kappa = 2.0*M_PI / l->lambda; term = kappa*l->depth; gdouble omega = sqrt(g*kappa*tanh(term)); if (GFS_VALUE (cell, l->v) > 0.) { gdouble utot = GFS_VALUE (cell, l->v)*g*kappa*cosh(0.469*term) / (omega*cosh(term)); GFS_VALUE (cell, l->vu) = -utot*sina; GFS_VALUE (cell, l->vv) = utot*cosa; } else { GFS_VALUE (cell, l->vu) = 0.; GFS_VALUE (cell, l->vv) = 0.; } } static gboolean gfs_init_submarine_slump_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_init_submarine_slump_class ()) ->parent_class)->event) (event, sim)) { gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) init_submarine_slump, event); return TRUE; } return FALSE; } static void gfs_init_submarine_slump_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_init_submarine_slump_read; GTS_OBJECT_CLASS (klass)->write = gfs_init_submarine_slump_write; klass->event = gfs_init_submarine_slump_event; } static GfsEventClass * gfs_init_submarine_slump_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_init_submarine_slump_info = { "GfsInitSubmarineSlump", sizeof (GfsInitSubmarineSlump), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_init_submarine_slump_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_init_class ()), &gfs_init_submarine_slump_info); } return klass; } /* GfsInitSubaerialLandslide: Object */ static void gfs_init_subaerial_landslide_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_init_subaerial_landslide_class ()) ->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable name"); return; } GfsInitSubaerialLandslide * l = GFS_INIT_SUBAERIAL_LANDSLIDE (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (!(l->v = gfs_domain_get_or_add_variable (domain, fp->token->str, NULL))) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } gts_file_next_token (fp); gchar * vname = g_strconcat (l->v->name, "_U", NULL); l->vu = gfs_domain_get_or_add_variable (domain, vname, NULL); vname = g_strconcat (l->v->name, "_V", NULL); l->vv = gfs_domain_get_or_add_variable (domain, vname, NULL); GtsFileVariable var[] = { {GTS_DOUBLE, "x", TRUE, &l->xo}, {GTS_DOUBLE, "y", TRUE, &l->yo}, {GTS_DOUBLE, "alpha", TRUE, &l->alpha}, {GTS_DOUBLE, "volume", TRUE, &l->vol}, {GTS_DOUBLE, "width", TRUE, &l->width}, {GTS_DOUBLE, "depth", TRUE, &l->depth}, {GTS_DOUBLE, "ut", TRUE, &l->ut}, {GTS_DOUBLE, "so", TRUE, &l->so}, {GTS_DOUBLE, "to", TRUE, &l->to}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; gdouble g = GFS_SIMULATION(domain)->physical_params.g; gdouble fr = l->ut / sqrt( g * l->depth); if (fr > 4.0) g_warning ("The Froude number is > 4. This will make the amplitude inaccurate!\n"); if (fr < 1.0) g_warning ("The Froude number is < 1. This will make the amplitude inaccurate!\n"); l->lambda = 0.27*l->to*sqrt(g*l->depth); gdouble etal = 1.32*l->depth* pow(l->vol*2.0*l->ut / (M_PI*l->width*l->so*l->depth*sqrt(l->depth*g)), 0.68); gdouble etat = 1.32*l->depth*pow(l->vol / (l->width*l->to*l->depth*sqrt(l->depth*g)), 0.68); /* Choose the smallest amplitude for two measures of time. */ if (etal < etat) l->eta = etal; else l->eta = etat; if ( l->eta > 0.86*l->depth) { g_warning ("The wave amplitude is excessively large. The amplitude will be decreased to 0.86*depth!\n"); l->eta = 0.86*l->depth; } gdouble test = 2.0*fabs(etal - etat)/(etal + etat); if ( test > 4.0 ) g_warning ("The two wave amplitudes differ more than 40 percents. This will make the results questionable\n"); test = 2.0*l->to*l->ut / (l->so*M_PI); if ( test < 0.4 || test > 2.5 ) g_warning ("Runout length and time differ. This will make the results questionable!\n"); test = l->to / (4.5*sqrt(10.0*sqrt(l->vol/l->width) / g)); if ( test < 0.3 || test > 3.3 ) g_warning ("Runout length and time differ. This will make the results questionable!\n"); test = 3.4*pow(l->vol, 1./3.)/l->width; if ( test < 0.25 || test > 4.0 ) g_warning ("Landslide width may be unusual. This will make the results questionable!\n"); } static void gfs_init_subaerial_landslide_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_init_subaerial_landslide_class ()) ->parent_class->write) (o, fp); GfsInitSubaerialLandslide * l = GFS_INIT_SUBAERIAL_LANDSLIDE (o); fprintf (fp, " %s {\n", l->v->name); fprintf (fp, " x = %g y = %g alpha = %g\n" " volume = %g width = %g\n" " depth = %g ut = %g\n" " so = %g to = %g\n" "}", l->xo, l->yo, l->alpha, l->vol, l->width, l->depth, l->ut, l->so, l->to); } static void init_subaerial_landslide (FttCell * cell, GfsInitSubaerialLandslide * l) { GfsSimulation * sim = gfs_object_simulation (l); gdouble cosa = cos(l->alpha*M_PI/180.); gdouble sina = sin(l->alpha*M_PI/180.); FttVector p, o; gfs_cell_cm (cell, &p); o.x = l->xo; o.y = l->yo; gfs_simulation_map (sim, &o); gdouble L = sim->physical_params.L; p.x = (p.x - o.x)*L; p.y = (p.y - o.y)*L; FttVector q; q.x = -sina*p.x + cosa*p.y; q.y =- cosa*p.x - sina*p.y; gdouble g = sim->physical_params.g; /* Gravity */ gdouble xmin = l->so + l->lambda; /* Evaluate tsunami shape in local x,y coordinates. */ gdouble term = 4.0*l->eta*(l->width + l->lambda)*l->lambda / l->vol; if (((l->width + l->lambda) / term) < l->lambda) { term = (l->width + l->lambda) / l->lambda; l->eta = term*l->vol / (4.0*(l->width + l->lambda)*l->lambda); } GFS_VALUE (cell, l->v) = l->eta* pow(2.0 / ( exp(term*q.y / (l->width + l->lambda)) + exp(-term*q.y / (l->width + l->lambda)) ), 2.) * pow(2.0 / ( exp((q.x - xmin) / l->lambda) + exp(-(q.x - xmin) / l->lambda)), 2.); /* Initialize tsunami velocities */ term = l->eta / l->depth; if (GFS_VALUE (cell, l->v) > 0.) { gdouble utot = sqrt (g*l->depth) * (1.0 + term / 2.0) * ((1.0 + 0.17006*term) * GFS_VALUE (cell, l->v) / l->depth - 1.25509*pow(GFS_VALUE (cell, l->v) / l->depth, 2.)); GFS_VALUE (cell, l->vu) = -utot*sina; GFS_VALUE (cell, l->vv) = utot*cosa; } else { GFS_VALUE (cell, l->vu) = 0.; GFS_VALUE (cell, l->vv) = 0.; } } static gboolean gfs_init_subaerial_landslide_event (GfsEvent * event, GfsSimulation * sim) { if ((*GFS_EVENT_CLASS(GTS_OBJECT_CLASS (gfs_init_subaerial_landslide_class ()) ->parent_class)->event) (event, sim)) { gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) init_subaerial_landslide, event); return TRUE; } return FALSE; } static void gfs_init_subaerial_landslide_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_init_subaerial_landslide_read; GTS_OBJECT_CLASS (klass)->write = gfs_init_subaerial_landslide_write; klass->event = gfs_init_subaerial_landslide_event; } static GfsEventClass * gfs_init_subaerial_landslide_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_init_subaerial_landslide_info = { "GfsInitSubaerialLandslide", sizeof (GfsInitSubaerialLandslide), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_init_subaerial_landslide_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_init_class ()), &gfs_init_subaerial_landslide_info); } return klass; } /* GfsInitPyroclastic: Object */ static void gfs_init_pyroclastic_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_init_pyroclastic_class ()) ->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable name"); return; } GfsInitPyroclastic * l = GFS_INIT_PYROCLASTIC (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (!(l->v = gfs_domain_get_or_add_variable (domain, fp->token->str, NULL))) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } gts_file_next_token (fp); gchar * vname = g_strconcat (l->v->name, "_U", NULL); l->vu = gfs_domain_get_or_add_variable (domain, vname, NULL); vname = g_strconcat (l->v->name, "_V", NULL); l->vv = gfs_domain_get_or_add_variable (domain, vname, NULL); GtsFileVariable var[] = { {GTS_DOUBLE, "x", TRUE, &l->xo}, {GTS_DOUBLE, "y", TRUE, &l->yo}, {GTS_DOUBLE, "alpha", TRUE, &l->alpha}, {GTS_DOUBLE, "volume", TRUE, &l->vol}, {GTS_DOUBLE, "width", TRUE, &l->width}, {GTS_DOUBLE, "depth", TRUE, &l->depth}, {GTS_DOUBLE, "ut", TRUE, &l->ut}, {GTS_DOUBLE, "so", TRUE, &l->so}, {GTS_DOUBLE, "to", TRUE, &l->to}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; gdouble g = GFS_SIMULATION(domain)->physical_params.g; /* Gravity */ gdouble fr = l->ut / sqrt(g*l->depth); if (fr > 4.0) g_warning ("The Froude number is > 4. This will make the amplitude inaccurate!\n"); if (fr < 1.0) g_warning ("The Froude number is < 1. This will make the amplitude inaccurate!\n"); l->lambda = 0.27*l->to*sqrt(g*l->depth); gdouble etal = 1.32*l->depth * pow(l->vol*2.0*l->ut / (M_PI*l->width*l->so*l->depth*sqrt(l->depth*g)), 0.68); gdouble etat = 1.32*l->depth * pow(l->vol / (l->width*l->to*l->depth*sqrt(l->depth*g)), 0.68); gdouble test = 2.*fabs(etal - etat) / (etal + etat); if (test > 0.4) g_warning ("The two wave amplitudes differ more than 40 percent. This will make the results questionable!\n"); /* Choose the smallest amplitude for two measures of time */ if (etal < etat) l->eta = etal; else l->eta = etat; test = 0.86*l->depth; if (l->eta > test) { g_warning ("The wave amplitude is excessively large. The amplitude will be decreased to 0.86*depth\n"); l->eta = test; } test = 2.0*l->to*l->ut / (l->so*M_PI); if ( test < 0.4 || test > 2.5) g_warning ("Runout length and time differ: %g. This will make the results questionable!\n", test); test = l->to / (4.5*sqrt(10.0*sqrt(l->vol / l->width) / g)); if ( test < 0.3 || test > 3.3) g_warning ("Runout length and time differ: %g. This will make the results questionable!\n", test); test = 30.0*pow(l->vol, 1.0 / 3.0) / l->width; if ( test < 0.25 || test > 4.0) g_warning ("Flow width may be unusual: %g. This will make the results questionable!\n", test); } static void gfs_init_pyroclastic_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_init_pyroclastic_class ())->parent_class->write) (o, fp); GfsInitPyroclastic * l = GFS_INIT_PYROCLASTIC (o); fprintf (fp, " %s {\n", l->v->name); fprintf (fp, " x = %g y = %g alpha = %g\n" " volume = %g width = %g\n" " depth = %g ut = %g\n" " so = %g to = %g\n" "}", l->xo, l->yo, l->alpha, l->vol, l->width, l->depth, l->ut, l->so, l->to); } static void init_pyroclastic (FttCell * cell, GfsInitPyroclastic * l) { GfsSimulation * sim = gfs_object_simulation (l); gdouble cosa = cos(l->alpha*M_PI/180.); gdouble sina = sin(l->alpha*M_PI/180.); FttVector p, o; gfs_cell_cm (cell, &p); o.x = l->xo; o.y = l->yo; gfs_simulation_map (sim, &o); gdouble L = sim->physical_params.L; p.x = (p.x - o.x)*L; p.y = (p.y - o.y)*L; FttVector q; q.x = -sina*p.x + cosa*p.y; q.y =- cosa*p.x - sina*p.y; gdouble g = sim->physical_params.g; /* Gravity */ gdouble xmin = l->so + l->lambda; /* Evaluate tsunami shape in local x,y coordinates. */ gdouble term = 4.0*l->eta*(l->width + l->lambda)*l->lambda / l->vol; if (((l->width + l->lambda) / term) < l->lambda) { term = (l->width + l->lambda) / l->lambda; l->eta = term*l->vol / (4.0*(l->width + l->lambda)*l->lambda); } GFS_VALUE (cell, l->v) = l->eta * pow(2.0 / (exp(term*q.y / (l->width + l->lambda)) + exp(-term*q.y / (l->width + l->lambda))), 2.) * pow(2.0 / (exp((q.x - xmin) / l->lambda) + exp(-(q.x - xmin) / l->lambda)), 2.); /* Initialize tsunami velocities */ term = l->eta / l->depth; if (GFS_VALUE (cell, l->v) > 0.) { gdouble utot = sqrt (g*l->depth)*(1.0 + term / 2.0) * ((1.0 + 0.17006*term)*GFS_VALUE (cell, l->v) / l->depth - 1.25509*pow(GFS_VALUE (cell, l->v) / l->depth, 2.)); GFS_VALUE (cell, l->vu) = -utot*sina; GFS_VALUE (cell, l->vv) = utot*cosa; } else { GFS_VALUE (cell, l->vu) = 0.; GFS_VALUE (cell, l->vv) = 0.; } } static gboolean gfs_init_pyroclastic_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_init_pyroclastic_class ()) ->parent_class)->event) (event, sim)) { gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) init_pyroclastic, event); return TRUE; } return FALSE; } static void gfs_init_pyroclastic_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_init_pyroclastic_read; GTS_OBJECT_CLASS (klass)->write = gfs_init_pyroclastic_write; klass->event = gfs_init_pyroclastic_event; } static GfsEventClass * gfs_init_pyroclastic_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_init_pyroclastic_info = { "GfsInitPyroclastic", sizeof (GfsInitPyroclastic), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_init_pyroclastic_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_init_class ()), &gfs_init_pyroclastic_info); } return klass; } /* GfsOutputInterfaceGrid: Header */ typedef struct _GfsOutputInterfaceGrid GfsOutputInterfaceGrid; struct _GfsOutputInterfaceGrid { /*< private >*/ GfsOutput parent; /*< public >*/ GfsVariable * v, * t; gdouble cost, sint; gdouble cosa, sina; gdouble theta, alpha; gdouble x, y; gdouble sx, sy, sz; }; #define GFS_OUTPUT_INTERFACE_GRID(obj) GTS_OBJECT_CAST (obj,\ GfsOutputInterfaceGrid, \ gfs_output_interface_grid_class ()) #define GFS_IS_OUTPUT_INTERFACE_GRID(obj) (gts_object_is_from_class (obj,\ gfs_output_interface_grid_class ())) static GfsOutputClass * gfs_output_interface_grid_class (void); static void gfs_output_interface_grid_read (GtsObject ** o, GtsFile * fp) { GfsOutputInterfaceGrid * output = GFS_OUTPUT_INTERFACE_GRID (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (GTS_OBJECT_CLASS (gfs_output_interface_grid_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_output_interface_grid_class ()) ->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable (T)"); return; } if ((output->t = gfs_variable_from_name (domain->variables, fp->token->str)) == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); if (fp->type == '{') { GtsFileVariable var[] = { {GTS_DOUBLE, "theta", TRUE, &output->theta}, {GTS_DOUBLE, "x", TRUE, &output->x}, {GTS_DOUBLE, "y", TRUE, &output->y}, {GTS_DOUBLE, "alpha", TRUE, &output->alpha}, {GTS_DOUBLE, "sx", TRUE, &output->sx}, {GTS_DOUBLE, "sy", TRUE, &output->sy}, {GTS_DOUBLE, "sz", TRUE, &output->sz}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; output->cost = cos(output->theta*M_PI/180.); output->sint = sin(output->theta*M_PI/180.); output->cosa = cos(output->alpha*M_PI/180.); output->sina = sin(output->alpha*M_PI/180.); } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable (V)"); return; } if ((output->v = gfs_variable_from_name (domain->variables, fp->token->str)) == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); } static void gfs_output_interface_grid_write (GtsObject * o, FILE * fp) { GfsOutputInterfaceGrid * output = GFS_OUTPUT_INTERFACE_GRID (o); if (GTS_OBJECT_CLASS (gfs_output_interface_grid_class ()) ->parent_class->write) (* GTS_OBJECT_CLASS (gfs_output_interface_grid_class ()) ->parent_class->write) (o, fp); fprintf (fp, " %s ",output->t->name); fputs(" {\n", fp); fprintf(fp, " theta = %g\n", output->theta); fprintf(fp, " x = %g\n", output->x); fprintf(fp, " y = %g\n", output->y); fprintf(fp, " alpha = %g\n", output->alpha); fprintf(fp, " sx = %g\n", output->sx); fprintf(fp, " sy = %g\n", output->sy); fprintf(fp, " sz = %g\n", output->sz); fputs(" }", fp); fprintf (fp, " %s ",output->v->name); } #define NODATA 0. typedef struct { double xmin, xmax; double ymin, ymax; double size; gint xn, yn; GfsOutputInterfaceGrid * output; gdouble * buf, ** data; } GridData; static gboolean interface_condition (FttCell * cell, gpointer data) { GfsOutputInterfaceGrid * out = (GfsOutputInterfaceGrid *) data; if (GFS_VALUE (cell, out->t) < 1. && GFS_VALUE (cell, out->t) > 0) return TRUE; return FALSE; } static void print_interface (FttCell * cell, gpointer * data) { GridData * d = (GridData *) data; GfsOutputInterfaceGrid * out = d->output; if (FTT_CELL_IS_LEAF (cell) && GFS_VALUE (cell, out->t) < 1. && GFS_VALUE (cell, out->t) > 0) { GfsVariableTracerVOF * tv = GFS_VARIABLE_TRACER_VOF (out->t); double nx = GFS_VALUE(cell, tv->m[0]); double ny = GFS_VALUE(cell, tv->m[1]); double nz = GFS_VALUE(cell, tv->m[2]); double alpha = GFS_VALUE(cell, tv->alpha); FttVector pos; ftt_cell_pos (cell, &pos); double h = ftt_cell_size(cell); gint i, j; FttVector p; for ( i = 0; i < d->xn; i ++) for ( j = 0; j < d->yn; j ++) { double lon = d->xmin + i*d->size; double lat = d->ymin + j*d->size; double X = -lon*out->sina - lat*out->cosa; double Y = lon*out->cosa - lat*out->sina; p.x = X*out->cost; p.z = Y; if (p.x <= pos.x + h/2 && p.x > pos.x - h/2) if (p.z <= pos.z + h/2 && p.z > pos.z - h/2) { p.y = pos.y - h/2. + (alpha - nx*(p.x-pos.x+h/2.)/h - nz*(p.z-pos.z+h/2.)/h) / ny*h; d->data[i][j] = gfs_interpolate (cell, p, out->v); } } } } static void extent (FttCell * cell, gpointer * data) { GridData * d = (GridData *) data; GfsOutputInterfaceGrid * out = d->output; if (FTT_CELL_IS_LEAF (cell) && GFS_VALUE (cell, out->t) < 1. && GFS_VALUE (cell, out->t) > 0) { FttVector pos; ftt_cell_pos (cell, &pos); /* Projection */ double X = out->cost*pos.x + out->sint*pos.y; double Y = pos.z; /* Rotation */ double x = -out->sina*X + out->cosa*Y; double y = -out->sina*Y - out->cosa*X; if (d->xmin > x ) d->xmin = x; if (d->ymin > y) d->ymin = y; if (d->xmax < x) d->xmax = x; if (d->ymax < y) d->ymax = y; } } static gboolean gfs_output_interface_grid_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_interface_grid_class ()) ->parent_class)->event) (event, sim)) { GfsOutputInterfaceGrid * out = GFS_OUTPUT_INTERFACE_GRID (event); GfsDomain * domain = GFS_DOMAIN (sim); /* New GridData structure */ GridData * data = g_malloc0 (sizeof (GridData)); data->output = out; data->size = 1./pow(2.,gfs_domain_depth (domain)); data->xmin = data->ymin = G_MAXDOUBLE; data->xmax = data->ymax = -G_MAXDOUBLE; /* Get the size of the interface */ gfs_domain_cell_traverse_condition (GFS_DOMAIN(sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) extent, data, interface_condition, out); /* Number of points of the grid */ data->xn = (data->xmax - data->xmin)/data->size+1; data->yn = (data->ymax - data->ymin)/data->size+1; /* Memory allocation for the grid */ gint i,j; data->buf = g_malloc (sizeof (gdouble)*data->xn*data->yn); for ( i = 0; i < data->xn*data->yn; i++) data->buf[i] = NODATA; data->data = g_malloc (sizeof (gdouble *)*data->xn); for ( i = 0; i < data->xn; i++) data->data[i] = &data->buf[i*data->yn]; /* Data collection */ gfs_domain_cell_traverse_condition (GFS_DOMAIN(sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) print_interface, data, interface_condition, out); /* Print the data in lon/lat coordinate system in cgd format*/ double lat_meter_to_degrees = 180./(M_PI*6371220.); double lon_meter_to_degrees = 180./(M_PI*6371220.*cos(out->y*M_PI/180.)); fprintf(GFS_OUTPUT(out)->file->fp,"2 x y\n"); fprintf(GFS_OUTPUT(out)->file->fp,"%i %i\n",data->xn,data->yn); for (i=0; i < data->xn; i++) { double x0 = (data->xmin + i*data->size)*sim->physical_params.L* lon_meter_to_degrees*out->sx + out->x; fprintf(GFS_OUTPUT(out)->file->fp,"%f ", x0); } fprintf(GFS_OUTPUT(out)->file->fp,"\n"); for ( i = 0; i < data->yn; i++) { double y0 = (data->ymin + i*data->size)*sim->physical_params.L* lat_meter_to_degrees*out->sy + out->y; fprintf(GFS_OUTPUT(out)->file->fp,"%f ", y0); } fprintf(GFS_OUTPUT(out)->file->fp,"\n"); for ( i = 0; i < data->xn; i++) { for ( j = 0; j < data->yn; j++) { if (data->data[i][j] == NODATA) fprintf(GFS_OUTPUT(out)->file->fp,"%f ", 0.); else fprintf(GFS_OUTPUT(out)->file->fp,"%f ", data->data[i][j]* sim->physical_params.L*out->sz); } fprintf(GFS_OUTPUT(out)->file->fp,"\n"); } /* Frees GridData */ g_free (data->data); g_free (data->buf); g_free (data); return TRUE; } return FALSE; } static void gfs_output_interface_grid_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_interface_grid_event; GTS_OBJECT_CLASS (klass)->read = gfs_output_interface_grid_read; GTS_OBJECT_CLASS (klass)->write = gfs_output_interface_grid_write; } static void gfs_output_interface_grid_init (GfsOutputInterfaceGrid * object) { object->x = 0.; object->y = 0.; object->alpha = 0.; object->sx = object->sy = object->sz = 1.; } GfsOutputClass * gfs_output_interface_grid_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_interface_grid_info = { "GfsOutputInterfaceGrid", sizeof (GfsOutputInterfaceGrid), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_interface_grid_class_init, (GtsObjectInitFunc) gfs_output_interface_grid_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_interface_grid_info); } return klass; } /* Initialize module */ /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "topics"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { gfs_init_submarine_landslide_class (); gfs_init_submarine_slump_class (); gfs_init_subaerial_landslide_class (); gfs_init_pyroclastic_class (); gfs_output_interface_grid_class (); return NULL; } gerris-snapshot-131206/modules/fft.c0000644000175100017510000002323112250371171014256 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2011 Daniel Fuster * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include "output.h" #include "cartesian.h" /* GfsOutputSpectra: header */ typedef struct _GfsOutputSpectra GfsOutputSpectra; struct _GfsOutputSpectra { /*< private >*/ GfsOutput parent; GfsCartesianGrid * cgd; guint dir[3]; /*< public >*/ GfsVariable * v; FttVector L, pos; gint level, Ndim; }; #define GFS_OUTPUT_SPECTRA(obj) GTS_OBJECT_CAST (obj,\ GfsOutputSpectra, \ gfs_output_spectra_class ()) #define GFS_IS_OUTPUT_SPECTRA(obj) (gts_object_is_from_class (obj,\ gfs_output_spectra_class ())) GfsOutputClass * gfs_output_spectra_class (void); /** \beginobject{GfsOutputSpectra} */ typedef struct { FILE * fp; fftw_complex *out; FttVector L,kmax; guint n1,n2,n3; guint dir1,dir2; } Datawrite; static void fill_cartesian_matrix ( GfsCartesianGrid * cgd, GfsVariable * v, GfsDomain * domain ) { guint i,j,k; FttVector pos; FttCell * cell; for (i = 0; i < cgd->n[0]; i++) for (j = 0; j < cgd->n[1]; j++) for (k = 0; k < cgd->n[2]; k++) { pos.x = cgd->x[0][i]; pos.y = cgd->x[1][j]; pos.z = cgd->x[2][k]; cell = gfs_domain_locate (domain, pos, -1, NULL); cgd->v[k+cgd->n[2]*(i*cgd->n[1]+j)] = gfs_interpolate (cell, pos, v); } } static FttVector init_kmax (FttVector L) { FttVector kmax; guint i; for (i = 0; i < 3; i++) { if ((&(L.x))[i] != 0) (&(kmax.x))[i] = 2.*M_PI/(&(L.x))[i]; else (&(kmax.x))[i] = 0; } return kmax; } static void write_spectra_1D ( Datawrite * data ) { guint i; FttVector k; fputs ("# 1:kx 2:ky 3:kz 4:real 5:img\n", data->fp); for ( i = 0; i < data->n1; i++ ) { k.x = data->kmax.x*i; k.y = data->kmax.y*i; k.z = data->kmax.z*i; fprintf (data->fp, "%g %g %g %g %g\n", k.x, k.y, k.z , data->out[i][0], data->out[i][1] ); } } static void write_spectra_2D ( Datawrite * data ) { guint i,j; gint aux; FttVector k; k.x = k.y = k.z = 0; fputs ("# 1:kx 2:ky 3:kz 4:real 5:img\n", data->fp); for ( i = 0; i < data->n1; i++ ) { if ( i < data->n1/2. +1 ) (&(k.x))[data->dir1] = (&(data->kmax.x))[data->dir1]*i; else { aux = i-data->n1; (&(k.x))[data->dir1] = (&(data->kmax.x))[data->dir1]*aux; } for ( j = 0; j < data->n2; j++ ) { (&(k.x))[data->dir2] = (&(data->kmax.x))[data->dir2]*j; fprintf (data->fp, "%g %g %g %g %g\n", k.x, k.y, k.z , data->out[i*data->n2+j][0], data->out[i*data->n2+j][1] ); } } } static void write_spectra_3D ( Datawrite * data ) { guint i,j,l; gint aux; FttVector k; fputs ("# 1:kx 2:ky 3:kz 4:real 5:img\n", data->fp); for ( i = 0; i < data->n1; i++ ) { if ( i < data->n1/2. +1 ) k.x = data->kmax.x*i; else { aux = i-data->n1; k.x = data->kmax.x*aux; } for ( j = 0; j < data->n2; j++ ) { if ( j < data->n2/2. +1 ) k.y = data->kmax.y*j; else { aux = j-data->n2; k.y = data->kmax.y*aux; } for ( l = 0; l < data->n3; l++ ) { k.z = data->kmax.z*(gdouble) l; fprintf (data->fp, "%g %g %g %g %g\n", k.x, k.y, k.z , data->out[l+data->n3*(i*data->n2+j)][0], data->out[l+data->n3*(i*data->n2+j)][1]); } } } } static gboolean output_spectra_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_spectra_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsOutputSpectra * v = GFS_OUTPUT_SPECTRA (event); fftw_plan p; Datawrite data; data.fp = GFS_OUTPUT (event)->file->fp; data.L = v->L; data.kmax = init_kmax(v->L); data.dir1 = v->dir[0]; data.dir2 = v->dir[1]; fill_cartesian_matrix( v->cgd, v->v, domain); switch (v->Ndim) { case 1: { data.n1 = ( v->cgd->n[v->dir[0]] / 2 ) + 1; data.out = fftw_malloc( sizeof(fftw_complex)*data.n1 ); p = fftw_plan_dft_r2c_1d( v->cgd->n[v->dir[0]], v->cgd->v, data.out, FFTW_ESTIMATE); fftw_execute(p); write_spectra_1D ( &data ); break; } case 2: { data.n1 = v->cgd->n[v->dir[0]]; data.n2 = ( v->cgd->n[v->dir[1]] / 2 ) + 1; data.out = fftw_malloc( sizeof(fftw_complex)*v->cgd->n[v->dir[0]]*data.n2 ); p = fftw_plan_dft_r2c_2d( v->cgd->n[v->dir[0]], v->cgd->n[v->dir[1]], v->cgd->v, data.out, FFTW_ESTIMATE); fftw_execute(p); write_spectra_2D ( &data ); break; } case 3: { data.n1 = v->cgd->n[0]; data.n2 = v->cgd->n[1]; data.n3 = ( v->cgd->n[2] / 2 ) + 1; data.out = fftw_malloc( sizeof(fftw_complex)*v->cgd->n[0]*v->cgd->n[1]*data.n3 ); p = fftw_plan_dft_r2c_3d( v->cgd->n[0], v->cgd->n[1], v->cgd->n[2], v->cgd->v, data.out, FFTW_ESTIMATE); fftw_execute(p); write_spectra_3D ( &data ); break; } default: g_assert_not_reached (); } fftw_destroy_plan(p); fftw_free ( data.out ); return TRUE; } return FALSE; } static void output_spectra_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_output_spectra_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsOutputSpectra * v = GFS_OUTPUT_SPECTRA (*o); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (v)"); return; } GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (!(v->v = gfs_variable_from_name (domain->variables, fp->token->str))) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); GtsFileVariable var[] = { {GTS_DOUBLE, "x", TRUE, &v->pos.x}, {GTS_DOUBLE, "y", TRUE, &v->pos.y}, {GTS_DOUBLE, "z", TRUE, &v->pos.z}, {GTS_DOUBLE, "Lx", TRUE, &v->L.x}, {GTS_DOUBLE, "Ly", TRUE, &v->L.y}, {GTS_DOUBLE, "Lz", TRUE, &v->L.z}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; if (fp->type == GTS_INT) { v->level = atoi (fp->token->str); gts_file_next_token (fp); } else v->level = gfs_domain_depth (domain); guint i, j, k, size = 1; v->cgd = gfs_cartesian_grid_new (gfs_cartesian_grid_class ()); /* number of dims of the fft */ v->cgd->N = 3; v->Ndim = 0; k = 0; for (i = 0; i < 3; i++) { if ((&(v->L.x))[i] != 0) { v->Ndim++; v->dir[k] = i; k++; } } if (v->Ndim == 0) { gts_file_error (fp, "There must be at least one L component larger than 0"); return; } /* number of points in each direction */ v->cgd->n = g_malloc (3*sizeof (guint)); for (i = 0; i < 3; i++) { if ((&(v->L.x))[i] == 0 ) v->cgd->n[i] = 1; else v->cgd->n[i] = pow(2,v->level); size *= v->cgd->n[i]; } /* mesh coordinates */ v->cgd->x = g_malloc0 (3*sizeof (gdouble *)); for (i = 0; i < 3; i++) { v->cgd->x[i] = g_malloc (v->cgd->n[i]*sizeof (gdouble)); if (v->cgd->n[i] != 1) for (j = 0; j < v->cgd->n[i]; j++) v->cgd->x[i][j] = (&(v->pos.x))[i] + (&(v->L.x))[i]*(gdouble)j/((gdouble)(v->cgd->n[i]-1)) - 0.5; else v->cgd->x[i][0] = (&(v->pos.x))[i]; } /* memory data allocation */ v->cgd->v = g_malloc0( sizeof ( gdouble ) * 2*(size/2+1) ); } static void output_spectra_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_output_spectra_class ())->parent_class->write) (o, fp); GfsOutputSpectra * v = GFS_OUTPUT_SPECTRA (o); fprintf (fp, " %s { x = %g y = %g z = %g Lx = %g Ly = %g Lz = %g } %d", v->v->name, v->pos.x, v->pos.y, v->pos.z, v->L.x, v->L.y, v->L.z, v->level); } static void output_spectra_destroy ( GtsObject * o ) { if (GFS_OUTPUT_SPECTRA (o)->cgd) gts_object_destroy (GTS_OBJECT (GFS_OUTPUT_SPECTRA (o)->cgd)); (* GTS_OBJECT_CLASS (gfs_output_spectra_class ())->parent_class->destroy) (o); } static void output_spectra_init ( GtsObject * o ) { GfsOutputSpectra * v = GFS_OUTPUT_SPECTRA (o); v->L.x = v->L.y = v->L.z = 0.; v->pos.x = v->pos.y = v->pos.z = 0.; } static void output_spectra_class_init (GtsObjectClass * klass) { GFS_EVENT_CLASS (klass)->event = output_spectra_event; klass->read = output_spectra_read; klass->write = output_spectra_write; klass->destroy = output_spectra_destroy; } GfsOutputClass * gfs_output_spectra_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsOutputSpectra", sizeof (GfsOutputSpectra), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) output_spectra_class_init, (GtsObjectInitFunc) output_spectra_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &info); } return klass; } /** \endobject{GfsOutputSpectra} */ /* Initialize module */ const gchar gfs_module_name[] = "fft"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { gfs_output_spectra_class (); return NULL; } gerris-snapshot-131206/modules/culvert/0000755000175100017510000000000012250371672015104 500000000000000gerris-snapshot-131206/modules/culvert/boyd87.c0000644000175100017510000001713612250371171016306 00000000000000/* Implementation of culvert model based on * * "Generalised Head-Discharge Equations for Culverts", M. J. Boyd, * Fourth national local government engineering conference, Perth, 17-20 * August 1987. * */ #include #include #include #include "boyd87.h" #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b)) /**** Section 3: critical depth ****/ static double dc_box (double B, double Q) { return 0.4672*pow (Q/B, 0.667); /* equation (1) */ } static double dc_pipe (double D, double Q, double g) { double dc; dc = D*pow ((Q/sqrt(g)*pow (D, 2.5))/1.26, 1./3.75); /* equation (4a) */ if (dc/D < 0.85) dc = D*pow ((Q/sqrt(g)*pow (D, 2.5))/0.95, 1./1.95); /* equation (4b) */ return dc; } /**** Section 4.3: Generalised equations for culverts with inlet control ****/ /* Box culvert */ static double Q_inlet_box_1 (double B, double HW, double D, double g) { if (HW/D < 1.35) /* Inlet not submerged */ return 0.544*sqrt(g)*B*pow(HW, 1.50); /* equation (9a) */ else /* Inlet submerged */ return 0.702*sqrt(g)*B*pow(D, 0.89)*pow(HW, 0.61); /* equation (9b) */ } /** * Flow rate for box culvert, inlet control. * HW: headwater depth * B: box width. * D: box height. * type: entrance type. * g: acceleration of gravity. */ double Q_inlet_box (double HW, double B, double D, int type, double g) { double HW1 = HW; switch (type) { case 1: /* entrance type 1: Wingwall Flare 30 degrees to 75 degrees */ HW1 = HW; break; case 2: /* entrance type 2: Wingwall Flare 90 degrees and 15 degrees */ HW1 = D*pow (HW/D/1.09, 1./0.99); /* equation (9c) */ break; case 3: /* entrance type 3: Wingwall Flare 0 degrees */ HW1 = D*pow (HW/D/1.07, 1./1.08); /* equation (9d) */ break; } return Q_inlet_box_1 (B, HW1, D, g); } /* Circular pipe culvert */ static double Q_inlet_pipe_1 (double HW, double D, double g) { if (HW/D < 1.2) /* Inlet not submerged */ return 0.421*sqrt(g)*pow(D, 0.87)*pow(HW, 1.63); /* equation (10a) */ else /* Inlet submerged */ return 0.530*sqrt(g)*pow(D, 1.87)*pow(HW, 0.63); /* equation (10b) */ } /** * Flow rate for circular pipe culvert, inlet control. * HW: headwater depth * D: diameter. * type: entrance type. * g: the acceleration of gravity. */ double Q_inlet_pipe (double HW, double D, int type, double g) { double HW1 = HW; switch (type) { case 1: /* entrance type 1: Square edge with headwall */ HW1 = HW; break; case 2: /* entrance type 2: Groove end with headwall */ HW1 = D*pow (HW/D/0.92, 1./0.90); /* equation (10c) */ break; case 3: /* entrance type 3: Groove end projecting */ HW1 = D*pow (HW/D/0.91, 1./0.94); /* equation (10d) */ break; } return Q_inlet_pipe_1 (HW1, D, g); } /**** Section 5: outlet control ****/ static double Q_Bernoulli (double HW, double TW, double area, double Rh, double S0, double L, double n, double ke, double g) { if (area > 0.) { /* equations (11) and (12a) */ double v2 = 2.*g*fabs (HW + S0*L - TW)/(ke + 1. + 2.*g*n*n*L/pow(Rh, 1.333)); return area*sqrt (v2); } return 0.; } static int close_enough (double Q0, double Q) { return fabs(Q - Q0) < 1e-3 || (Q0 > 1e-3 && fabs(Q - Q0)/Q0 < 5e-2); } /** * Flow rate for box culvert, outlet control. * HW: headwater depth * TW: tailwater depth. * B: box width. * D: box height. * S0: slope. * L: length. * n: Manning friction coefficient. * ke: entrance loss coefficient. * g: acceleration of gravity. */ double Q_outlet_box (double HW, double TW, double B, double D, double S0, double L, double n, double ke, double g) { double area = B*D; double Rh = B*D/(2.*(B + D)); /* Solve Bernoulli equation based on HW and TW */ double Q = Q_Bernoulli (HW, TW, area, Rh, S0, L, n, ke, g); /* if outlet submerged, Bernoulli equation solution based on HW and TW is valid */ if (TW > D) return Q; /* else outlet not submerged, Bernoulli should be solved with HW and flow dependent outlet waterlevel h0 */ int nmax = 50; double Q0; do { /* calculate the critical flow depth in the culvert */ double dc = dc_box (B, Q); /* assume that outlet waterlevel is subcritical and at least above TW */ double h0 = MAX ((dc + D)/2., TW); /* assume also that outlet waterlevel is below crown */ if (h0 > D) h0 = D; Q0 = Q; area = B*h0; Rh = B*h0/(B + 2.*h0); /* for a box culvert assume that the effective flow cross-section is B*h0 */ Q = Q_Bernoulli (HW, h0, area, Rh, S0, L, n, ke, g); } while (nmax-- && !close_enough (Q0, Q)); if (nmax == 0) fprintf (stderr, "boyd87.c: Q_outlet_box(): warning: iterations did not converge\n"); return Q; } /** * Flow rate for circular pipe culvert, outlet control. * HW: headwater depth * TW: tailwater depth. * D: diameter. * S0: slope. * L: length. * n: Manning friction coefficient. * ke: entrance loss coefficient. * g: acceleration of gravity. */ double Q_outlet_pipe (double HW, double TW, double D, double S0, double L, double n, double ke, double g) { double area = M_PI*D*D/4.; double Rh = D/4.; /* Solve Bernoulli equation based on HW and TW */ double Q = Q_Bernoulli (HW, TW, area, Rh, S0, L, n, ke, g); /* if outlet submerged, Bernoulli equation solution based on HW and TW is valid */ if (TW > D) return Q; /* else outlet not submerged, Bernoulli should be solved with HW and flow dependent outlet waterlevel h0 */ int nmax = 50; double Q0; do { /* calculate the critical flow depth in the culvert */ double dc = dc_pipe (D, Q, g); /* assume that outlet waterlevel is subcritical and at least above TW */ double h0 = MAX ((dc + D)/2., TW); /* assume also that outlet waterlevel is below crown */ if (h0 > D) h0 = D; Q0 = Q; double theta = acos (1. - 2.*h0/D); /* equation (3a) */ double B = D*sin (theta); /* equation (3b) */ double area = D*D*(theta - sin (2.*theta)/2.)/4.; /* equation (3c) */ double perimeter = B + theta*D; Rh = area/perimeter; /* for pipe culvert assume that the effective area/perimeter is controlled by h0 */ Q = Q_Bernoulli (HW, h0, area, Rh, S0, L, n, ke, g); } while (nmax-- && !close_enough (Q0, Q)); if (nmax == 0) fprintf (stderr, "boyd87.c: Q_outlet_pipe(): warning: iterations did not converge\n"); return Q; } /** * Flow rate for circular pipe culvert. * HW: headwater depth * TW: tailwater depth. * D: diameter. * type: entrance type. * S0: slope. * L: length. * n: Manning friction coefficient. * ke: entrance loss coefficient. * g: acceleration of gravity. */ double Q_pipe (double HW, double TW, double D, int type, double S0, double L, double n, double ke, double g) { double Q_outlet_control = Q_outlet_pipe (HW, TW, D, S0, L, n, ke, g); double Q_inlet_control = Q_inlet_pipe (HW, D, type, g); return MIN (Q_outlet_control, Q_inlet_control); } /** * Flow rate for circular pipe culvert, outlet control. * HW: headwater depth * TW: tailwater depth. * B: box width. * D: box height. * type: entrance type. * S0: slope. * L: length. * n: Manning friction coefficient. * ke: entrance loss coefficient. * g: acceleration of gravity. */ double Q_box (double HW, double TW, double B, double D, int type, double S0, double L, double n, double ke, double g) { double Q_outlet_control = Q_outlet_box (HW, TW, B, D, S0, L, n, ke, g); double Q_inlet_control = Q_inlet_box (HW, B, D, type, g); return MIN (Q_outlet_control, Q_inlet_control); } gerris-snapshot-131206/modules/culvert/boyd87.h0000644000175100017510000000445412250371171016312 00000000000000/* Implementation of culvert model based on * * "Generalised Head-Discharge Equations for Culverts", M. J. Boyd, * Fourth national local government engineering conference, Perth, 17-20 * August 1987. * */ /** * Flow rate for box culvert, inlet control. * HW: headwater depth * B: box width. * D: box height. * type: entrance type. * g: acceleration of gravity. */ double Q_inlet_box (double HW, double B, double D, int type, double g); /** * Flow rate for circular pipe culvert, inlet control. * HW: headwater depth * D: diameter. * type: entrance type. * g: acceleration of gravity. */ double Q_inlet_pipe (double HW, double D, int type, double g); /** * Flow rate for box culvert, outlet control. * HW: headwater depth * TW: tailwater depth. * B: box width. * D: box height. * S0: slope. * L: length. * n: Manning friction coefficient. * ke: entrance loss coefficient. * g: acceleration of gravity. */ double Q_outlet_box (double HW, double TW, double B, double D, double S0, double L, double n, double ke, double g); /** * Flow rate for circular pipe culvert, outlet control. * HW: headwater depth * TW: tailwater depth. * D: diameter. * S0: slope. * L: length. * n: Manning friction coefficient. * ke: entrance loss coefficient. * g: acceleration of gravity. */ double Q_outlet_pipe (double HW, double TW, double D, double S0, double L, double n, double ke, double g); /** * Flow rate for circular pipe culvert. * HW: headwater depth * TW: tailwater depth. * D: diameter. * type: entrance type. * S0: slope. * L: length. * n: Manning friction coefficient. * ke: entrance loss coefficient. * g: acceleration of gravity. */ double Q_pipe (double HW, double TW, double D, int type, double S0, double L, double n, double ke, double g); /** * Flow rate for circular pipe culvert, outlet control. * HW: headwater depth * TW: tailwater depth. * B: box width. * D: box height. * type: entrance type. * S0: slope. * L: length. * n: Manning friction coefficient. * ke: entrance loss coefficient. * g: acceleration of gravity. */ double Q_box (double HW, double TW, double B, double D, int type, double S0, double L, double n, double ke, double g); gerris-snapshot-131206/modules/culvert/check_outlet.c0000644000175100017510000000057712250371171017644 00000000000000#include #include "boyd87.h" int main (int argc, char * argv[]) { double TW, D; for (D = 0.6; D <= 3.; D += 0.6) { for (TW = 0.; TW <= 1.5*D; TW += 0.001) printf ("%g %g %g %g\n", D, TW, Q_outlet_box (1.5*D, TW, 1., D, 0., 10., 0.01, 0., 9.81), Q_outlet_pipe (1.5*D, TW, D, 0., 10., 0.01, 0., 9.81)); printf ("\n"); } return 0; } gerris-snapshot-131206/modules/culvert/check_inlet.c0000644000175100017510000000047012250371171017433 00000000000000#include #include "boyd87.h" int main (int argc, char * argv[]) { double HW, D; for (D = 0.6; D <= 3.; D += 0.6) { for (HW = 0.1; HW <= 20.; HW += 0.1) printf ("%g %g %g %g\n", D, HW, Q_inlet_box (HW, 1., D, 1, 9.81), Q_inlet_pipe (HW, D, 1, 9.81)); printf ("\n"); } return 0; } gerris-snapshot-131206/modules/culvert/Makefile.in0000644000175100017510000006304012250371207017066 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = check_inlet$(EXEEXT) check_outlet$(EXEEXT) \ discharge_table$(EXEEXT) subdir = modules/culvert DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libboyd87_la_LIBADD = am_libboyd87_la_OBJECTS = libboyd87_la-boyd87.lo libboyd87_la_OBJECTS = $(am_libboyd87_la_OBJECTS) libboyd87_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libboyd87_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ PROGRAMS = $(noinst_PROGRAMS) am_check_inlet_OBJECTS = check_inlet-check_inlet.$(OBJEXT) check_inlet_OBJECTS = $(am_check_inlet_OBJECTS) check_inlet_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(check_inlet_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_check_outlet_OBJECTS = check_outlet-check_outlet.$(OBJEXT) check_outlet_OBJECTS = $(am_check_outlet_OBJECTS) check_outlet_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(check_outlet_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_discharge_table_OBJECTS = \ discharge_table-discharge_table.$(OBJEXT) discharge_table_OBJECTS = $(am_discharge_table_OBJECTS) discharge_table_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(discharge_table_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libboyd87_la_SOURCES) $(check_inlet_SOURCES) \ $(check_outlet_SOURCES) $(discharge_table_SOURCES) DIST_SOURCES = $(libboyd87_la_SOURCES) $(check_inlet_SOURCES) \ $(check_outlet_SOURCES) $(discharge_table_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ noinst_LTLIBRARIES = libboyd87.la libboyd87_la_CFLAGS = $(AM_CFLAGS) libboyd87_la_SOURCES = boyd87.c boyd87.h check_outlet_SOURCES = check_outlet.c boyd87.h check_outlet_LDADD = -lboyd87 -lm check_outlet_CFLAGS = $(AM_CFLAGS) check_outlet_DEPENDENCIES = libboyd87.la check_inlet_SOURCES = check_inlet.c boyd87.h check_inlet_LDADD = -lboyd87 -lm check_inlet_CFLAGS = $(AM_CFLAGS) check_inlet_DEPENDENCIES = libboyd87.la discharge_table_SOURCES = discharge_table.c boyd87.h discharge_table_LDADD = -lboyd87 -lm discharge_table_CFLAGS = $(AM_CFLAGS) discharge_table_DEPENDENCIES = libboyd87.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/culvert/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/culvert/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libboyd87.la: $(libboyd87_la_OBJECTS) $(libboyd87_la_DEPENDENCIES) $(EXTRA_libboyd87_la_DEPENDENCIES) $(libboyd87_la_LINK) $(libboyd87_la_OBJECTS) $(libboyd87_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list check_inlet$(EXEEXT): $(check_inlet_OBJECTS) $(check_inlet_DEPENDENCIES) $(EXTRA_check_inlet_DEPENDENCIES) @rm -f check_inlet$(EXEEXT) $(check_inlet_LINK) $(check_inlet_OBJECTS) $(check_inlet_LDADD) $(LIBS) check_outlet$(EXEEXT): $(check_outlet_OBJECTS) $(check_outlet_DEPENDENCIES) $(EXTRA_check_outlet_DEPENDENCIES) @rm -f check_outlet$(EXEEXT) $(check_outlet_LINK) $(check_outlet_OBJECTS) $(check_outlet_LDADD) $(LIBS) discharge_table$(EXEEXT): $(discharge_table_OBJECTS) $(discharge_table_DEPENDENCIES) $(EXTRA_discharge_table_DEPENDENCIES) @rm -f discharge_table$(EXEEXT) $(discharge_table_LINK) $(discharge_table_OBJECTS) $(discharge_table_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_inlet-check_inlet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_outlet-check_outlet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/discharge_table-discharge_table.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libboyd87_la-boyd87.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< libboyd87_la-boyd87.lo: boyd87.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libboyd87_la_CFLAGS) $(CFLAGS) -MT libboyd87_la-boyd87.lo -MD -MP -MF $(DEPDIR)/libboyd87_la-boyd87.Tpo -c -o libboyd87_la-boyd87.lo `test -f 'boyd87.c' || echo '$(srcdir)/'`boyd87.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libboyd87_la-boyd87.Tpo $(DEPDIR)/libboyd87_la-boyd87.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boyd87.c' object='libboyd87_la-boyd87.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libboyd87_la_CFLAGS) $(CFLAGS) -c -o libboyd87_la-boyd87.lo `test -f 'boyd87.c' || echo '$(srcdir)/'`boyd87.c check_inlet-check_inlet.o: check_inlet.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_inlet_CFLAGS) $(CFLAGS) -MT check_inlet-check_inlet.o -MD -MP -MF $(DEPDIR)/check_inlet-check_inlet.Tpo -c -o check_inlet-check_inlet.o `test -f 'check_inlet.c' || echo '$(srcdir)/'`check_inlet.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/check_inlet-check_inlet.Tpo $(DEPDIR)/check_inlet-check_inlet.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check_inlet.c' object='check_inlet-check_inlet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_inlet_CFLAGS) $(CFLAGS) -c -o check_inlet-check_inlet.o `test -f 'check_inlet.c' || echo '$(srcdir)/'`check_inlet.c check_inlet-check_inlet.obj: check_inlet.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_inlet_CFLAGS) $(CFLAGS) -MT check_inlet-check_inlet.obj -MD -MP -MF $(DEPDIR)/check_inlet-check_inlet.Tpo -c -o check_inlet-check_inlet.obj `if test -f 'check_inlet.c'; then $(CYGPATH_W) 'check_inlet.c'; else $(CYGPATH_W) '$(srcdir)/check_inlet.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/check_inlet-check_inlet.Tpo $(DEPDIR)/check_inlet-check_inlet.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check_inlet.c' object='check_inlet-check_inlet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_inlet_CFLAGS) $(CFLAGS) -c -o check_inlet-check_inlet.obj `if test -f 'check_inlet.c'; then $(CYGPATH_W) 'check_inlet.c'; else $(CYGPATH_W) '$(srcdir)/check_inlet.c'; fi` check_outlet-check_outlet.o: check_outlet.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_outlet_CFLAGS) $(CFLAGS) -MT check_outlet-check_outlet.o -MD -MP -MF $(DEPDIR)/check_outlet-check_outlet.Tpo -c -o check_outlet-check_outlet.o `test -f 'check_outlet.c' || echo '$(srcdir)/'`check_outlet.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/check_outlet-check_outlet.Tpo $(DEPDIR)/check_outlet-check_outlet.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check_outlet.c' object='check_outlet-check_outlet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_outlet_CFLAGS) $(CFLAGS) -c -o check_outlet-check_outlet.o `test -f 'check_outlet.c' || echo '$(srcdir)/'`check_outlet.c check_outlet-check_outlet.obj: check_outlet.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_outlet_CFLAGS) $(CFLAGS) -MT check_outlet-check_outlet.obj -MD -MP -MF $(DEPDIR)/check_outlet-check_outlet.Tpo -c -o check_outlet-check_outlet.obj `if test -f 'check_outlet.c'; then $(CYGPATH_W) 'check_outlet.c'; else $(CYGPATH_W) '$(srcdir)/check_outlet.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/check_outlet-check_outlet.Tpo $(DEPDIR)/check_outlet-check_outlet.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check_outlet.c' object='check_outlet-check_outlet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_outlet_CFLAGS) $(CFLAGS) -c -o check_outlet-check_outlet.obj `if test -f 'check_outlet.c'; then $(CYGPATH_W) 'check_outlet.c'; else $(CYGPATH_W) '$(srcdir)/check_outlet.c'; fi` discharge_table-discharge_table.o: discharge_table.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(discharge_table_CFLAGS) $(CFLAGS) -MT discharge_table-discharge_table.o -MD -MP -MF $(DEPDIR)/discharge_table-discharge_table.Tpo -c -o discharge_table-discharge_table.o `test -f 'discharge_table.c' || echo '$(srcdir)/'`discharge_table.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/discharge_table-discharge_table.Tpo $(DEPDIR)/discharge_table-discharge_table.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='discharge_table.c' object='discharge_table-discharge_table.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(discharge_table_CFLAGS) $(CFLAGS) -c -o discharge_table-discharge_table.o `test -f 'discharge_table.c' || echo '$(srcdir)/'`discharge_table.c discharge_table-discharge_table.obj: discharge_table.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(discharge_table_CFLAGS) $(CFLAGS) -MT discharge_table-discharge_table.obj -MD -MP -MF $(DEPDIR)/discharge_table-discharge_table.Tpo -c -o discharge_table-discharge_table.obj `if test -f 'discharge_table.c'; then $(CYGPATH_W) 'discharge_table.c'; else $(CYGPATH_W) '$(srcdir)/discharge_table.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/discharge_table-discharge_table.Tpo $(DEPDIR)/discharge_table-discharge_table.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='discharge_table.c' object='discharge_table-discharge_table.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(discharge_table_CFLAGS) $(CFLAGS) -c -o discharge_table-discharge_table.obj `if test -f 'discharge_table.c'; then $(CYGPATH_W) 'discharge_table.c'; else $(CYGPATH_W) '$(srcdir)/discharge_table.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \ ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am pictures: inlet_pipe.png inlet_box.png outlet_pipe.png outlet_box.png inlet_pipe.png: inlet_pipe.plot check_inlet gnuplot inlet_pipe.plot inlet_box.png: inlet_box.plot check_inlet gnuplot inlet_box.plot outlet_pipe.png: outlet_pipe.plot check_outlet gnuplot outlet_pipe.plot outlet_box.png: outlet_box.plot check_outlet gnuplot outlet_box.plot # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/modules/culvert/discharge_table.c0000644000175100017510000000147112250371171020265 00000000000000#include #include "boyd87.h" int main (int argc, char * argv[]) { double HW, TW, B, D, S0, L, N, KE, G; int type; B = 1.0; D = 1.0; type = 1; S0 = 0.01; L = 10.0; N = 0.013; KE = 1.0; G = 9.81; printf ("B D S0 L N KE G\n"); printf ("%g %g %g %g %g %g %g\n", B, D, S0, L, N, KE, G); printf ("type\n"); printf ("%d\n", type); printf ("HW TW Q_Box Q_Pipe\n"); for (TW = 0.; TW <= 1.5*D; TW += 0.001) { for (HW = 0.1; HW <= 20.; HW += 0.1) /*printf ("--->%g %g %g\n", HW, TW, Q_box (HW, TW, B, D, type, S0, L, N, KE, G));*/ printf ("--->%g %g %g\n", HW, TW, Q_pipe (HW, TW, D, type, S0, L, N, KE, G)); /*printf ("%g %g %g %g\n", HW, TW, Q_box (HW, TW, B, D, type, S0, L, N, KE, G), Q_pipe (HW, TW, D, type, S0, L, N, KE, G));*/ printf ("\n"); } return 0; } gerris-snapshot-131206/modules/culvert/Makefile.am0000644000175100017510000000205312250371171017052 00000000000000## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libboyd87.la libboyd87_la_CFLAGS = $(AM_CFLAGS) libboyd87_la_SOURCES = boyd87.c boyd87.h noinst_PROGRAMS = check_inlet check_outlet discharge_table check_outlet_SOURCES = check_outlet.c boyd87.h check_outlet_LDADD = -lboyd87 -lm check_outlet_CFLAGS = $(AM_CFLAGS) check_outlet_DEPENDENCIES = libboyd87.la check_inlet_SOURCES = check_inlet.c boyd87.h check_inlet_LDADD = -lboyd87 -lm check_inlet_CFLAGS = $(AM_CFLAGS) check_inlet_DEPENDENCIES = libboyd87.la discharge_table_SOURCES = discharge_table.c boyd87.h discharge_table_LDADD = -lboyd87 -lm discharge_table_CFLAGS = $(AM_CFLAGS) discharge_table_DEPENDENCIES = libboyd87.la pictures: inlet_pipe.png inlet_box.png outlet_pipe.png outlet_box.png inlet_pipe.png: inlet_pipe.plot check_inlet gnuplot inlet_pipe.plot inlet_box.png: inlet_box.plot check_inlet gnuplot inlet_box.plot outlet_pipe.png: outlet_pipe.plot check_outlet gnuplot outlet_pipe.plot outlet_box.png: outlet_box.plot check_outlet gnuplot outlet_box.plot gerris-snapshot-131206/modules/agmg.c0000644000175100017510000001335712250371171014422 00000000000000/* Gerris - The GNU Flow Solver (-*-C-*-) * Copyright (C) 2010 Stephane Popinet, CNRS * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "variable.h" #include "poisson.h" extern void dagmg_ (const int * n, double * a, int * ja, int * ia, double * f, double * x, const int * ijob, const int * iprint, const int * nrest, int * iter, const double * tol); static int ijob = 0, verbose = 0, nrest = -1; static void solve_poisson_problem_using_agmg (GfsDomain * domain, GfsLinearProblem * lp, GfsMultilevelParams * par) { /* fixme: doesn't work in parallel yet */ g_assert (lp->istart == 0); /* create "compressed sparse row" (CSR) format arrays (with Fortran indexing) */ int i, j, k, n = lp->rhs->len; GArray * a = g_array_new (FALSE, FALSE, sizeof (double)); GArray * ia = g_array_new (FALSE, FALSE, sizeof (int)); GArray * ja = g_array_new (FALSE, FALSE, sizeof (int)); for (i = 0; i < n; i++) { GfsStencil * stencil = g_ptr_array_index (lp->LP, i); k = a->len + 1; g_array_append_val (ia, k); /* check that the system is properly ordered */ g_assert (g_array_index (stencil->id, int, 0) == i); /* AGMG needs strictly positive diagonal components */ g_assert (- g_array_index (stencil->coeff, double, 0) > 0.); for (j = 0; j < stencil->id->len; j++) { double coeff = - g_array_index (stencil->coeff, double, j); g_array_append_val (a, coeff); k = g_array_index (stencil->id, int, j) + 1; g_array_append_val (ja, k); } } k = a->len + 1; g_array_append_val (ia, k); /* solve */ int iter = par->nitermax; double tol = MIN (par->tolerance/par->residual.infty, 0.99); int iprint = verbose ? 6 : -1; dagmg_ (&n, (double *) a->data, (int *) ja->data, (int *) ia->data, (double *) lp->rhs->data, (double *) lp->lhs->data, &ijob, &iprint, &nrest, &iter, &tol); par->niter = iter; /* cleanup */ g_array_free (a, TRUE); g_array_free (ia, TRUE); g_array_free (ja, TRUE); } typedef struct { GfsLinearProblem * lp; GfsVariable * lhs; } CopyParams; static void copy_poisson_solution (FttCell * cell, CopyParams * p) { GFS_VALUE (cell, p->lhs) = /* we need to change sign because we changed the sign of the matrix to make the diagonal terms positive */ - g_array_index (p->lp->lhs, gdouble, (int) GFS_VALUE (cell, p->lp->id) - p->lp->istart); } static void correct (FttCell * cell, gpointer * data) { GfsVariable * u = data[0]; GfsVariable * dp = data[1]; GFS_VALUE (cell, u) += GFS_VALUE (cell, dp); } static void poisson_solve (GfsDomain * domain, GfsMultilevelParams * par, GfsVariable * lhs, GfsVariable * rhs, GfsVariable * res, GfsVariable * dia, gdouble dt) { /* calculates the initial residual and its norm */ gfs_residual (domain, par->dimension, FTT_TRAVERSE_LEAFS, -1, lhs, rhs, dia, res); par->residual_before = par->residual = gfs_domain_norm_residual (domain, FTT_TRAVERSE_LEAFS, -1, dt, res); if (par->nitermax > 0 && par->residual.infty > 0.) { GfsVariable * dp = gfs_temporary_variable (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_reset, dp); GfsLinearProblem * lp = gfs_get_poisson_problem (domain, res, dp, dia, -1, lhs); solve_poisson_problem_using_agmg (domain, lp, par); CopyParams p = { lp, dp }; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) copy_poisson_solution, &p); gfs_linear_problem_destroy (lp); /* correct on leaf cells */ gpointer data[2]; data[0] = lhs; data[1] = dp; gfs_traverse_and_bc (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) correct, data, lhs, lhs); gts_object_destroy (GTS_OBJECT (dp)); /* compute new residual on leaf cells */ gfs_residual (domain, par->dimension, FTT_TRAVERSE_LEAFS, -1, lhs, rhs, dia, res); par->residual = gfs_domain_norm_residual (domain, FTT_TRAVERSE_LEAFS, -1, dt, res); } } /* Initialize module */ void gfs_module_read (GtsFile * fp, GfsSimulation * sim); void gfs_module_write (FILE * fp); /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "agmg"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { return NULL; } void gfs_module_read (GtsFile * fp, GfsSimulation * sim) { g_return_if_fail (fp != NULL); /* initialise the poisson cycle hook */ sim->approx_projection_params.poisson_solve = poisson_solve; sim->projection_params.poisson_solve = poisson_solve; if (fp->type == '{') { GtsFileVariable var[] = { {GTS_INT, "ijob", TRUE, &ijob}, {GTS_INT, "verbose", TRUE, &verbose}, {GTS_INT, "nrest", TRUE, &nrest}, {GTS_NONE} }; gts_file_assign_variables (fp, var); } } void gfs_module_write (FILE * fp) { g_return_if_fail (fp != NULL); fprintf (fp, " { ijob = %d verbose = %d nrest = %d }", ijob, verbose, nrest); } gerris-snapshot-131206/modules/terrain.c0000644000175100017510000015317612250371171015157 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #if GSL # include #endif #include "refine.h" #include "solid.h" #include "kdt/kdt.h" #include "river.h" static gchar * default_path = "."; /* Kdtrees */ typedef struct { Kdt ** rs; gdouble * weight; guint nrs; gchar * path, * basename; } Kdtrees; static void kdtrees_destroy (Kdtrees * rs) { g_free (rs->path); g_free (rs->basename); if (rs->rs) { guint i; for (i = 0; i < rs->nrs; i++) kdt_destroy (rs->rs[i]); g_free (rs->rs); } g_free (rs->weight); } static Kdt * open_kdt (const gchar * fname) { Kdt * kdt = kdt_new (); if (kdt_open (kdt, fname)) { kdt_destroy (kdt); gchar * name = g_strconcat (fname, ".DataPD", NULL); FILE * fp = fopen (name, "r"); g_free (name); if (fp != NULL) { fclose (fp); g_warning ("\nFound obsolete R*-tree terrain database. Use:\n" "%% rsurface2kdt -v %s\n" "to convert to the new KDT format.\n", fname); } return NULL; } return kdt; } static void kdtrees_read (Kdtrees * rs, GtsFile * fp) { gchar * path = NULL; if (fp->type == '{') { GtsFileVariable var[] = { {GTS_STRING, "basename", TRUE, &rs->basename}, {GTS_STRING, "path", TRUE, &rs->path}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; path = g_strconcat (default_path, ":", rs->path, NULL); } else path = g_strdup (default_path); if (!strcmp (rs->basename, "*")) { /* file globbing */ gchar * pattern = g_strconcat (path, "/*.kdt", NULL); glob_t pglob; if (glob (pattern, GLOB_ERR, NULL, &pglob)) { gts_file_error (fp, "cannot find/open terrain databases in path:\n%s", pattern); g_free (pattern); g_free (path); return; } g_free (pattern); guint i; for (i = 0; i < pglob.gl_pathc; i++) { pglob.gl_pathv[i][strlen (pglob.gl_pathv[i]) - 5] = '\0'; rs->rs = g_realloc (rs->rs, (rs->nrs + 1)*sizeof (Kdt *)); rs->weight = g_realloc (rs->weight, (rs->nrs + 1)*sizeof (double)); rs->rs[rs->nrs] = open_kdt (pglob.gl_pathv[i]); if (!rs->rs[rs->nrs]) { gts_file_error (fp, "cannot open terrain database `%s'", pglob.gl_pathv[i]); globfree (&pglob); g_free (path); return; } rs->weight[rs->nrs] = 1.; rs->nrs++; } globfree (&pglob); } else { /* basename is of the form: set1:w1,set2:w2,set3:w3... */ gchar ** names = g_strsplit (rs->basename, ",", 0); gchar ** s = names; while (*s) { /* look for weight */ gchar ** wname = g_strsplit (*s, ":", 2); rs->rs = g_realloc (rs->rs, (rs->nrs + 1)*sizeof (Kdt *)); rs->weight = g_realloc (rs->weight, (rs->nrs + 1)*sizeof (double)); if (path) { /* search path */ gchar ** pathes = g_strsplit (path, ":", 0); gchar ** spath = pathes, * fname; g_assert (*spath); do { fname = (*wname)[0] == '/' ? g_strdup (*wname) : g_strconcat (*spath, "/", *wname, NULL); rs->rs[rs->nrs] = open_kdt (fname); } while (rs->rs[rs->nrs] == NULL && *(++spath)); g_strfreev (pathes); } else rs->rs[rs->nrs] = open_kdt (*wname); if (!rs->rs[rs->nrs]) { if (path) gts_file_error (fp, "cannot find/open terrain database `%s' in path:\n%s", *wname, path); else gts_file_error (fp, "cannot open terrain database `%s'", *wname); g_strfreev (wname); g_strfreev (names); g_free (path); return; } if (wname[1]) rs->weight[rs->nrs] = strtod (wname[1], NULL); else rs->weight[rs->nrs] = 1.; g_strfreev (wname); rs->nrs++; s++; } g_strfreev (names); } g_free (path); } static void kdtrees_write (Kdtrees * rs, FILE * fp) { if (rs->path || rs->basename) { fputs (" {\n", fp); if (rs->path) fprintf (fp, " path = %s\n", rs->path); if (rs->basename) fprintf (fp, " basename = %s\n", rs->basename); fputc ('}', fp); } } /* GfsRefineTerrain: Header */ typedef struct _GfsRefineTerrain GfsRefineTerrain; #define NM 4 struct _GfsRefineTerrain { /*< private >*/ GfsRefine parent; guint level; gboolean refined; GfsVariable * type; #if !FTT_2D GfsVariable * min, * max; gdouble front, scale; #endif Kdtrees rs; /*< public >*/ gchar * name; GfsVariable * h[NM], * he, * hn, * hdmin, * hdmax; GfsFunction * criterion; }; #define GFS_REFINE_TERRAIN(obj) GTS_OBJECT_CAST (obj,\ GfsRefineTerrain,\ gfs_refine_terrain_class ()) #define GFS_IS_REFINE_TERRAIN(obj) (gts_object_is_from_class (obj,\ gfs_refine_terrain_class ())) GfsRefineClass * gfs_refine_terrain_class (void); /* GfsRefineTerrain: Object */ typedef struct { FttVector c; FttVector p[4]; gdouble min[2], max[2], h; Kdtrees * rs; FttCell * cell; } Polygon; static void polygon_init (GfsSimulation * sim, Polygon * poly, FttCell * cell, Kdtrees * rs) { FttVector q; ftt_cell_pos (cell, &q); poly->cell = cell; poly->rs = rs; poly->h = ftt_cell_size (cell)/2.; poly->p[0].x = q.x + poly->h; poly->p[0].y = q.y + poly->h; poly->p[0].z = 0.; poly->p[1].x = q.x - poly->h; poly->p[1].y = q.y + poly->h; poly->p[1].z = 0.; poly->p[2].x = q.x - poly->h; poly->p[2].y = q.y - poly->h; poly->p[2].z = 0.; poly->p[3].x = q.x + poly->h; poly->p[3].y = q.y - poly->h; poly->p[3].z = 0.; gfs_simulation_map_inverse_cell (sim, poly->p); poly->c.x = poly->c.y = 0.; poly->min[0] = poly->min[1] = G_MAXDOUBLE; poly->max[0] = poly->max[1] = - G_MAXDOUBLE; gint i; FttVector * p = poly->p; for (i = 0; i < 4; i++, p++) { if (p->x < poly->min[0]) poly->min[0] = p->x; if (p->x > poly->max[0]) poly->max[0] = p->x; if (p->y < poly->min[1]) poly->min[1] = p->y; if (p->y > poly->max[1]) poly->max[1] = p->y; poly->c.x += p->x; poly->c.y += p->y; } poly->c.x /= 4; poly->c.y /= 4; poly->h = MAX (poly->max[0] - poly->min[0], poly->max[1] - poly->min[1])/2.; } static gboolean right (const double a[2], const double b[2], const double c[2]) { return (b[0] - a[0])*(c[1] - a[1]) - (b[1] - a[1])*(c[0] - a[0]) < 0.; } static gboolean polygon_contains (Polygon * p, gdouble q[2]) { if (right (&p->p[0].x, &p->p[1].x, q)) return FALSE; if (right (&p->p[1].x, &p->p[2].x, q)) return FALSE; if (right (&p->p[2].x, &p->p[3].x, q)) return FALSE; if (right (&p->p[3].x, &p->p[0].x, q)) return FALSE; return TRUE; } static gboolean polygon_includes (KdtRect rect, Polygon * p) { gdouble q[2]; q[0] = rect[0].l; q[1] = rect[1].l; if (!polygon_contains (p, q)) return FALSE; q[0] = rect[0].l; q[1] = rect[1].h; if (!polygon_contains (p, q)) return FALSE; q[0] = rect[0].h; q[1] = rect[1].l; if (!polygon_contains (p, q)) return FALSE; q[0] = rect[0].h; q[1] = rect[1].h; if (!polygon_contains (p, q)) return FALSE; return TRUE; } static gboolean polygon_intersects (KdtRect rect, Polygon * p) { /* fixme: this could be improved? */ return (rect[0].l <= p->max[0] && rect[0].h >= p->min[0] && rect[1].l <= p->max[1] && rect[1].h >= p->min[1]); } typedef struct { gdouble H[NM+1], m[NM][NM]; gdouble h[NM], he, cond, min, max; GfsRefineTerrain * t; FttCell * cell; gboolean relative; int n; } RMS; static void rms_init (GfsRefineTerrain * t, RMS * rms, Polygon * p, gboolean relative) { guint i, j; for (i = 0; i < NM + 1; i++) rms->H[i] = 0.; for (i = 0; i < NM; i++) for (j = 0; j < NM; j++) rms->m[i][j] = 0.; rms->t = t; rms->cell = p->cell; rms->relative = relative; rms->min = G_MAXDOUBLE; rms->max = - G_MAXDOUBLE; } static void function_from_corners (gdouble h[4], gdouble H[4]) { h[0] = (H[0] + H[1] + H[2] + H[3])/4.; h[1] = (H[0] - H[1] - H[2] + H[3])/4.; h[2] = (H[0] + H[1] - H[2] - H[3])/4.; h[3] = (H[0] - H[1] + H[2] - H[3])/4.; } static gdouble rms_minimum (RMS * rms) { if (rms->m[0][0] == 0.) return 0.; return sqrt (fabs (rms->h[0]*(rms->h[0]*rms->m[0][0] + 2.*(rms->h[1]*rms->m[0][1] + rms->h[2]*rms->m[0][2] + rms->h[3]*rms->m[0][3] - rms->H[0])) + rms->h[1]*(rms->h[1]*rms->m[1][1] + 2.*(rms->h[2]*rms->m[1][2] + rms->h[3]*rms->m[1][3] - rms->H[1])) + rms->h[2]*(rms->h[2]*rms->m[2][2] + 2.*(rms->h[3]*rms->m[2][3] - rms->H[2])) + rms->h[3]*(rms->h[3]*rms->m[3][3] - 2.*rms->H[3]) + rms->H[4])/rms->m[0][0]); } static gdouble cell_value (FttCell * cell, GfsVariable * h[NM], FttVector p) { if (GFS_VALUE (cell, h[0]) == GFS_NODATA) return GFS_NODATA; gdouble size = ftt_cell_size (cell)/2.; FttVector q; ftt_cell_pos (cell, &q); p.x = (p.x - q.x)/size; p.y = (p.y - q.y)/size; return (GFS_VALUE (cell, h[0]) + GFS_VALUE (cell, h[1])*p.x + GFS_VALUE (cell, h[2])*p.y + GFS_VALUE (cell, h[3])*p.x*p.y); } static void corners_from_parent (FttCell * cell, GfsRefineTerrain * t, gdouble H[4]) { gdouble size = ftt_cell_size (cell); FttCell * parent = ftt_cell_parent (cell); FttVector p; ftt_cell_pos (cell, &p); p.x += size/2.; p.y += size/2.; H[0] = cell_value (parent, t->h, p); p.x -= size; H[1] = cell_value (parent, t->h, p); p.y -= size; H[2] = cell_value (parent, t->h, p); p.x += size; H[3] = cell_value (parent, t->h, p); } static void variance_check (RMS * rms) { g_assert (rms->n >= NM); gdouble H[4], h[4]; guint i; h[0] = rms->h[0] + rms->h[1] + rms->h[2] + rms->h[3]; h[1] = rms->h[0] - rms->h[1] + rms->h[2] - rms->h[3]; h[2] = rms->h[0] - rms->h[1] - rms->h[2] + rms->h[3]; h[3] = rms->h[0] + rms->h[1] - rms->h[2] - rms->h[3]; if (rms->relative) { gdouble H0[4]; corners_from_parent (rms->cell, rms->t, H0); for (i = 0; i < 4; i++) H[i] = CLAMP (h[i], rms->min - H0[i], rms->max - H0[i]); } else for (i = 0; i < 4; i++) H[i] = CLAMP (h[i], rms->min, rms->max); function_from_corners (rms->h, H); } static int rms_update (RMS * rms) { guint i; if (rms->m[0][0] == 0.) { for (i = 1; i < NM; i++) rms->h[i] = 0.; rms->h[0] = GFS_NODATA; rms->he = 0.; rms->cond = GFS_NODATA; rms->n = 0; return 0; } else if (rms->n >= NM) { guint j; for (i = 1; i < NM; i++) for (j = 0; j < i; j++) rms->m[i][j] = rms->m[j][i]; #if GSL double m[NM*NM], v[NM*NM], s[NM]; gsl_matrix_view gv = gsl_matrix_view_array (v, NM, NM); gsl_vector_view gs = gsl_vector_view_array (s, NM); for (i = 0; i < NM; i++) for (j = 0; j < NM; j++) m[i+NM*j] = rms->m[i][j]; gsl_matrix_view gm = gsl_matrix_view_array (m, NM, NM); gsl_linalg_SV_decomp_jacobi (&gm.matrix, &gv.matrix, &gs.vector); rms->cond = s[NM - 1] > 0. ? s[0]/s[NM - 1] : GFS_NODATA; if (rms->cond < 10000.) { gsl_vector_view gH = gsl_vector_view_array (rms->H, NM); gsl_vector_view gh = gsl_vector_view_array (rms->h, NM); gsl_linalg_SV_solve (&gm.matrix, &gv.matrix, &gs.vector, &gH.vector, &gh.vector); variance_check (rms); rms->he = rms_minimum (rms); return 1; } #else gdouble ** m = gfs_matrix_new (NM, NM, sizeof (gdouble)); for (i = 0; i < NM; i++) for (j = 0; j < NM; j++) m[i][j] = rms->m[i][j]; if (gfs_matrix_inverse (m, NM, 1e-5)) { for (i = 0; i < NM; i++) { rms->h[i] = 0.; for (j = 0; j < NM; j++) rms->h[i] += m[i][j]*rms->H[j]; } gfs_matrix_free (m); variance_check (rms); rms->he = rms_minimum (rms); return 1; } gfs_matrix_free (m); #endif } rms->h[0] = rms->H[0]/rms->m[0][0]; for (i = 1; i < NM; i++) rms->h[i] = 0.; rms->he = rms_minimum (rms); return 0; } #if DEBUG static gdouble rms_value (RMS * rms, FttVector * p) { return rms->h[0] + rms->h[1]*p->x + rms->h[2]*p->y + rms->h[3]*p->x*p->y; } static void rms_write (RMS * rms, Polygon * p) { FttVector q, r; q.x = p->c.x + p->h; q.y = p->c.y + p->h; r.x = 1.; r.y = 1.; fprintf (stderr, "%g %g %g\n", q.x, q.y, rms_value (rms, &r)/20000.); q.x = p->c.x + p->h; q.y = p->c.y - p->h; r.x = 1.; r.y = - 1.; fprintf (stderr, "%g %g %g\n", q.x, q.y, rms_value (rms, &r)/20000.); q.x = p->c.x - p->h; q.y = p->c.y - p->h; r.x = - 1.; r.y = - 1.; fprintf (stderr, "%g %g %g\n", q.x, q.y, rms_value (rms, &r)/20000.); q.x = p->c.x - p->h; q.y = p->c.y + p->h; r.x = - 1.; r.y = 1.; fprintf (stderr, "%g %g %g\n", q.x, q.y, rms_value (rms, &r)/20000.); } static int write_points (double p[3], Polygon * poly) { if (polygon_contains (poly, p)) fprintf (stderr, "aa %g %g %g\n", p[0], p[1], p[2]); } #endif #define RAW 0. /* fitted but not continuous (C0) */ #define FAIR 1. /* fitted and C0 */ #define REFINED 2. /* non-fitted refined cell */ #define NEW_CHILD 3. /* non-fitted child extrapolated from its parent */ #define CONTAINS_SURFACE 4. /* 3D-only */ #define BOUNDARY 5. /* 3D-only */ static void parent_cell_coefficients (FttCell * cell, GfsVariable ** v, gdouble hP[NM]) { FttCell * parent = ftt_cell_parent (cell); gdouble h[4]; guint i; for (i = 0; i < 4; i++) h[i] = GFS_VALUE (parent, v[i]); FttVector p; ftt_cell_relative_pos (cell, &p); p.x *= 2.; p.y *= 2.; hP[0] = h[0] + h[1]*p.x + (h[2] + h[3]*p.x)*p.y; hP[1] = (h[1] + h[3]*p.y)/2.; hP[2] = (h[2] + h[3]*p.x)/2.; hP[3] = h[3]/4.; } static void projection_matrix (Polygon * poly, double m[2][2]) { double x[4], y[4]; guint i; for (i = 0; i < 4; i++) { x[i] = (poly->p[i].x - poly->c.x)/poly->h; y[i] = (poly->p[i].y - poly->c.y)/poly->h; } m[0][0] = (x[0] - x[1] + x[3] - x[2])/4.; m[0][1] = (x[0] + x[1] - x[3] - x[2])/4.; m[1][0] = (y[0] - y[1] + y[3] - y[2])/4.; m[1][1] = (y[0] + y[1] - y[3] - y[2])/4.; } static void add_weighted_kdt_sum (KdtSum * s, const KdtSum * stmp, double w) { s->m01 += w*stmp->m01; s->m02 += w*stmp->m02; s->m03 += w*stmp->m03; s->m11 += w*stmp->m11; s->m13 += w*stmp->m13; s->m22 += w*stmp->m22; s->m23 += w*stmp->m23; s->m33 += w*stmp->m33; s->m44 += w*stmp->m44; s->m55 += w*stmp->m55; s->m66 += w*stmp->m66; s->m77 += w*stmp->m77; s->m67 += w*stmp->m67; s->m76 += w*stmp->m76; s->H0 += w*stmp->H0; s->H1 += w*stmp->H1; s->H2 += w*stmp->H2; s->H3 += w*stmp->H3; s->H4 += w*stmp->H4; s->H5 += w*stmp->H5; s->H6 += w*stmp->H6; if (stmp->Hmax > s->Hmax) s->Hmax = stmp->Hmax; if (stmp->Hmin < s->Hmin) s->Hmin = stmp->Hmin; s->n += stmp->n; s->w += w*stmp->w; s->coverage += stmp->coverage; } static void update_terrain_rms (GfsRefineTerrain * t, Polygon * poly, gboolean relative, RMS * rms) { rms_init (t, rms, poly, relative); KdtSum s; kdt_sum_init (&s); guint i; KdtRect rect; rect[0].l = poly->min[0]; rect[0].h = poly->max[0]; rect[1].l = poly->min[1]; rect[1].h = poly->max[1]; for (i = 0; i < poly->rs->nrs; i++) { KdtSum stmp; kdt_sum_init (&stmp); kdt_query_sum (poly->rs->rs[i], (KdtCheck) polygon_includes, (KdtCheck) polygon_intersects, poly, rect, &stmp); add_weighted_kdt_sum (&s, &stmp, poly->rs->weight[i]); } rms->m[0][0] = s.w; rms->n = s.n; if (s.w > 0.) { KdtSum sp; sp.H0 = s.H0; sp.H4 = s.H4; sp.Hmin = s.Hmin; sp.Hmax = s.Hmax; /* The sums returned by kdt_query_region_sum are defined in a (lon,lat) coordinate system, we need to project these into the local Cartesian coordinate system. The corresponding transform is given by matrix p below. */ double p[2][2]; projection_matrix (poly, p); /* This is the transformation of the sums */ double det = p[0][0]*p[1][1] - p[0][1]*p[1][0], det1 = det; g_assert (det > 0.1); sp.m01 = (s.m01*p[1][1] - s.m02*p[0][1])/det; sp.m02 = (s.m02*p[0][0] - s.m01*p[1][0])/det; sp.H1 = (s.H1*p[1][1] - s.H2*p[0][1])/det; sp.H2 = (s.H2*p[0][0] - s.H1*p[1][0])/det; det *= det1; sp.m11 = (p[1][1]*p[1][1]*s.m11 + p[0][1]*p[0][1]*s.m22 - 2.*p[0][1]*p[1][1]*s.m03)/det; sp.m22 = (p[1][0]*p[1][0]*s.m11 + p[0][0]*p[0][0]*s.m22 - 2.*p[0][0]*p[1][0]*s.m03)/det; sp.m03 = - (p[1][0]*p[1][1]*s.m11 + p[0][0]*p[0][1]*s.m22 - (p[0][0]*p[1][1] + p[0][1]*p[1][0])*s.m03)/det; sp.H3 = - (p[1][0]*p[1][1]*s.H5 + p[0][0]*p[0][1]*s.H6 - (p[0][0]*p[1][1] + p[0][1]*p[1][0])*s.H3)/det; det *= det1; sp.m13 = (- p[1][0]*p[1][1]*p[1][1]*s.m44 + p[0][0]*p[0][1]*p[0][1]*s.m55 + p[1][1]*(p[0][0]*p[1][1] + 2.*p[0][1]*p[1][0])*s.m13 - p[0][1]*(2.*p[0][0]*p[1][1] + p[0][1]*p[1][0])*s.m23)/det; sp.m23 = (+ p[1][0]*p[1][0]*p[1][1]*s.m44 - p[0][0]*p[0][0]*p[0][1]*s.m55 - p[1][0]*(2.*p[0][0]*p[1][1] + p[0][1]*p[1][0])*s.m13 + p[0][0]*(p[0][0]*p[1][1] + 2.*p[0][1]*p[1][0])*s.m23)/det; det *= det1; sp.m33 = (+ p[1][0]*p[1][0]*p[1][1]*p[1][1]*s.m66 + p[0][0]*p[0][0]*p[0][1]*p[0][1]*s.m77 - 2.*p[1][0]*p[1][1]*(p[0][0]*p[1][1] + p[0][1]*p[1][0])*s.m67 - 2.*p[0][0]*p[0][1]*(p[0][0]*p[1][1] + p[0][1]*p[1][0])*s.m76 + (p[0][0]*p[0][0]*p[1][1]*p[1][1] + 4.*p[0][0]*p[0][1]*p[1][0]*p[1][1] + p[0][1]*p[0][1]*p[1][0]*p[1][0])*s.m33)/det; rms->m[0][1] = sp.m01; rms->m[0][2] = sp.m02; rms->m[1][1] = sp.m11; rms->m[2][2] = sp.m22; rms->m[0][3] = sp.m03; rms->m[1][3] = sp.m13; rms->m[2][3] = sp.m23; rms->m[3][3] = sp.m33; rms->m[1][2] = rms->m[0][3]; if (rms->relative) { double hp[NM]; parent_cell_coefficients (rms->cell, rms->t->h, hp); rms->H[0] = sp.H0 - s.w*hp[0] - sp.m01*hp[1] - sp.m02*hp[2] - sp.m03*hp[3]; /* See terrain.mac for a "maxima" derivation of the terms below */ rms->H[1] = sp.H1 - hp[0]*sp.m01 - hp[1]*sp.m11 - hp[2]*sp.m03 - hp[3]*sp.m13; rms->H[2] = sp.H2 - hp[0]*sp.m02 - hp[1]*sp.m03 - hp[2]*sp.m22 - hp[3]*sp.m23; rms->H[3] = sp.H3 - hp[0]*sp.m03 - hp[1]*sp.m13 - hp[2]*sp.m23 - hp[3]*sp.m33; rms->H[4] = (sp.H4 - 2.*hp[3]*sp.H3 - 2.*hp[2]*sp.H2 - 2.*hp[1]*sp.H1 - 2.*hp[0]*sp.H0 + hp[3]*hp[3]*sp.m33 + 2.*hp[2]*hp[3]*sp.m23 + hp[2]*hp[2]*sp.m22 + 2.*hp[1]*hp[3]*sp.m13 + hp[1]*hp[1]*sp.m11 + 2.*(hp[0]*hp[3] + hp[1]*hp[2])*sp.m03 + 2.*hp[0]*hp[2]*sp.m02 + 2.*hp[0]*hp[1]*sp.m01 + hp[0]*hp[0]*s.w); } else { rms->H[0] = sp.H0; rms->H[1] = sp.H1; rms->H[2] = sp.H2; rms->H[3] = sp.H3; rms->H[4] = sp.H4; } rms->max = sp.Hmax; rms->min = sp.Hmin; } } static void update_terrain (FttCell * cell, GfsRefineTerrain * t) { RMS rms; guint i; g_assert (GFS_VALUE (cell, t->type) == REFINED); Polygon poly; polygon_init (gfs_object_simulation (t), &poly, cell, &t->rs); update_terrain_rms (t, &poly, ftt_cell_parent (cell) != NULL, &rms); rms_update (&rms); for (i = 0; i < NM; i++) GFS_VALUE (cell, t->h[i]) = rms.h[i]; GFS_VALUE (cell, t->he) = rms.he; GFS_VALUE (cell, t->hn) = rms.n; GFS_VALUE (cell, t->hdmin) = rms.min < G_MAXDOUBLE ? rms.min : GFS_NODATA; GFS_VALUE (cell, t->hdmax) = rms.max > - G_MAXDOUBLE ? rms.max : GFS_NODATA; GFS_VALUE (cell, t->type) = RAW; } static void function_from_parent (FttCell * cell, GfsRefineTerrain * t, gdouble h[4]) { gdouble H[4]; corners_from_parent (cell, t, H); function_from_corners (h, H); } static void cell_fine_init (FttCell * parent, GfsRefineTerrain * t) { gfs_cell_fine_init (parent, GFS_DOMAIN (gfs_object_simulation (t))); FttCellChildren child; ftt_cell_children (parent, &child); guint i; for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) { gdouble h[NM]; function_from_parent (child.c[i], t, h); guint j; for (j = 0; j < NM; j++) GFS_VALUE (child.c[i], t->h[j]) = h[j]; GFS_VALUE (child.c[i], t->he) = GFS_VALUE (parent, t->he); GFS_VALUE (child.c[i], t->hn) = GFS_VALUE (parent, t->hn)/FTT_CELLS; GFS_VALUE (child.c[i], t->hdmin) = GFS_VALUE (parent, t->hdmin); GFS_VALUE (child.c[i], t->hdmax) = GFS_VALUE (parent, t->hdmax); GFS_VALUE (child.c[i], t->type) = NEW_CHILD; } } static gdouble corner_value (GfsRefineTerrain * t, FttVector * p, gdouble eps, guint level) { GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (t)); gdouble v = 0., w = 0.; gint i, j; for (i = -1; i <= 1; i += 2) for (j = -1; j <= 1; j += 2) { FttVector q; q.x = p->x + eps*i; q.y = p->y + eps*j; q.z = p->z; FttCell * cell = gfs_domain_locate (domain, q, level, NULL); if (cell) { if (ftt_cell_level (cell) < level) return 0.; else if (GFS_VALUE (cell, t->type) == FAIR) return cell_value (cell, t->h, *p); gdouble n = GFS_VALUE (cell, t->hn); if (n > 0.) { g_assert (GFS_VALUE (cell, t->type) == RAW); v += cell_value (cell, t->h, *p); w += 1.; } } } return w > 0 ? v/w : 0.; } static void update_error_estimate (FttCell * cell, GfsRefineTerrain * t, gboolean relative) { if (GFS_VALUE (cell, t->hn) > 0.) { RMS rms; guint i; Polygon poly; polygon_init (gfs_object_simulation (t), &poly, cell, &t->rs); update_terrain_rms (t, &poly, relative, &rms); for (i = 0; i < NM; i++) rms.h[i] = GFS_VALUE (cell, t->h[i]); GFS_VALUE (cell, t->he) = rms_minimum (&rms); } else GFS_VALUE (cell, t->he) = 0.; } static void remove_knots (FttCell * cell, GfsRefineTerrain * t) { gdouble size = ftt_cell_size (cell), eps = size/1000.; guint level = ftt_cell_level (cell); FttVector p; ftt_cell_pos (cell, &p); gdouble h[4], H[4]; p.x += size/2.; p.y += size/2.; H[0] = corner_value (t, &p, eps, level); p.x -= size; H[1] = corner_value (t, &p, eps, level); p.y -= size; H[2] = corner_value (t, &p, eps, level); p.x += size; H[3] = corner_value (t, &p, eps, level); function_from_corners (h, H); guint i; for (i = 0; i < NM; i++) GFS_VALUE (cell, t->h[i]) = h[i]; GFS_VALUE (cell, t->type) = FAIR; update_error_estimate (cell, t, ftt_cell_parent (cell) != NULL); } static void update_height_and_check_for_refinement (FttCell * cell, GfsRefineTerrain * t) { if (GFS_VALUE (cell, t->type) == FAIR) { if (ftt_cell_parent (cell)) { gdouble h[4]; function_from_parent (cell, t, h); guint i; for (i = 0; i < NM; i++) GFS_VALUE (cell, t->h[i]) += h[i]; } if (ftt_cell_level (cell) < gfs_function_value (GFS_REFINE (t)->maxlevel, cell) && gfs_function_value (t->criterion, cell)) { g_assert (FTT_CELL_IS_LEAF (cell)); ftt_cell_refine_single (cell, (FttCellInitFunc) cell_fine_init, t); FttCellChildren child; guint i; ftt_cell_children (cell, &child); for (i = 0; i < FTT_CELLS; i++) GFS_VALUE (child.c[i], t->type) = REFINED; } if (!FTT_CELL_IS_LEAF (cell)) t->refined = TRUE; } else g_assert (GFS_VALUE (cell, t->type) == NEW_CHILD); } static void reset_terrain (FttCell * cell, GfsRefineTerrain * t) { guint i; for (i = 0; i < NM; i++) GFS_VALUE (cell, t->h[i]) = 0.; GFS_VALUE (cell, t->type) = REFINED; if (FTT_CELL_IS_LEAF (cell) && ftt_cell_level (cell) < t->level) t->level = ftt_cell_level (cell); } #if FTT_2D # define traverse_boundary(domain,order,flags,depth,func,data) \ gfs_domain_cell_traverse(domain,order,flags,depth,func,data) #else /* 3D */ # define traverse_boundary(domain,order,flags,depth,func,data) \ gfs_domain_cell_traverse_boundary(domain,FTT_FRONT,order,flags,depth,func,data) static void terrain_min_max (gdouble H[NM], gdouble minmax[2], gdouble scale) { gdouble dx, dy; minmax[0] = G_MAXDOUBLE; minmax[1] = - G_MAXDOUBLE; for (dx = -1.; dx <= 1.; dx += 2.) for (dy = -1.; dy <= 1.; dy += 2.) { gdouble v = H[0] + dx*H[1] + dy*H[2] + dx*dy*H[3]; if (v < minmax[0]) minmax[0] = v; if (v > minmax[1]) minmax[1] = v; } minmax[0] *= scale; minmax[1] *= scale; } static void min_max (FttCell * cell, GfsRefineTerrain * t) { gdouble minmax[2] = { G_MAXDOUBLE, - G_MAXDOUBLE }; if (FTT_CELL_IS_LEAF (cell)) { gdouble h[4]; h[0] = GFS_VALUE (cell, t->h[0]); h[1] = GFS_VALUE (cell, t->h[1]); h[2] = GFS_VALUE (cell, t->h[2]); h[3] = GFS_VALUE (cell, t->h[3]); terrain_min_max (h, minmax, t->scale); FttVector p; ftt_cell_pos (cell, &p); if (p.z > t->front) t->front = p.z; } else { FttCellChildren child; guint i, n = ftt_cell_children_direction (cell, FTT_FRONT, &child); for (i = 0; i < n; i++) if (child.c[i]) { if (GFS_VALUE (child.c[i], t->max) > minmax[1]) minmax[1] = GFS_VALUE (child.c[i], t->max); if (GFS_VALUE (child.c[i], t->min) < minmax[0]) minmax[0] = GFS_VALUE (child.c[i], t->min); } } GFS_VALUE (cell, t->min) = minmax[0]; GFS_VALUE (cell, t->max) = minmax[1]; GFS_VALUE (cell, t->type) = BOUNDARY; } static gboolean refine_terrain_from_boundary (FttCell * cell, GfsRefineTerrain * t) { FttVector p; ftt_cell_pos (cell, &p); gdouble h = ftt_cell_size (cell)/2., zmin = p.z - h, zmax = p.z + h; p.z = t->front; GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (t)); FttCell * boundary = gfs_domain_locate (domain, p, ftt_cell_level (cell), NULL); g_assert (boundary); if (GFS_VALUE (boundary, t->min) > zmax || GFS_VALUE (boundary, t->max) < zmin) return FALSE; GFS_VALUE (cell, t->type) = CONTAINS_SURFACE; return !FTT_CELL_IS_LEAF (boundary); } static void refine_box (GfsBox * box, GfsRefineTerrain * t) { ftt_cell_refine (box->root, (FttCellRefineFunc) refine_terrain_from_boundary, t, (FttCellInitFunc) gfs_cell_fine_init, gfs_box_domain (box)); } static void init_terrain_from_boundary (FttCell * cell, GfsRefineTerrain * t) { if (GFS_VALUE (cell, t->type) == CONTAINS_SURFACE) { FttVector p; ftt_cell_pos (cell, &p); p.z = t->front; GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (t)); FttCell * boundary = gfs_domain_locate (domain, p, -1, NULL); g_assert (boundary); g_assert (ftt_cell_level (cell) == ftt_cell_level (boundary)); guint i; for (i = 0; i < NM; i++) GFS_VALUE (cell, t->h[i]) = GFS_VALUE (boundary, t->h[i]); GFS_VALUE (cell, t->he) = GFS_VALUE (boundary, t->he); GFS_VALUE (cell, t->hn) = GFS_VALUE (boundary, t->hn); } } static gboolean coarsen_boundary (FttCell * cell, GfsRefineTerrain * t) { return (GFS_VALUE (cell, t->type) != CONTAINS_SURFACE); } static void coarsen_box (GfsBox * box, GfsRefineTerrain * t) { ftt_cell_coarsen (box->root, (FttCellCoarsenFunc) coarsen_boundary, t, (FttCellCleanupFunc) gfs_cell_cleanup, gfs_box_domain (box)); } static void reset_empty_cell (FttCell * cell, GfsRefineTerrain * t) { if (GFS_VALUE (cell, t->type) != CONTAINS_SURFACE) { guint i; for (i = 0; i < NM; i++) GFS_VALUE (cell, t->h[i]) = GFS_NODATA; GFS_VALUE (cell, t->he) = 0.; GFS_VALUE (cell, t->hn) = 0.; } } #endif /* 3D */ #if DEBUG static void draw_terrain (FttCell * cell, gpointer * data) { GfsRefineTerrain * t = data[0]; FILE * fp = data[1]; gdouble h = ftt_cell_size (cell); FttVector p; ftt_cell_pos (cell, &p); p.x += h/2.; p.y += h/2.; fprintf (fp, "%g %g %g\n", p.x, p.y, cell_value (cell, t->h, p)); p.x -= h; fprintf (fp, "%g %g %g\n", p.x, p.y, cell_value (cell, t->h, p)); p.y -= h; fprintf (fp, "%g %g %g\n", p.x, p.y, cell_value (cell, t->h, p)); p.x += h; fprintf (fp, "%g %g %g\n", p.x, p.y, cell_value (cell, t->h, p)); } static void draw_level (GfsDomain * domain, GfsRefine * refine, guint level, const gchar * name) { gpointer data[2]; data[0] = refine; data[1] = fopen (name, "w"); fprintf (data[1], "QUAD\n"); traverse_boundary (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, level, (FttCellTraverseFunc) draw_terrain, data); fclose (data[1]); } static void draw_all (GfsDomain * domain, GfsRefine * refine, const gchar * name) { gpointer data[2]; data[0] = refine; data[1] = fopen (name, "w"); // fprintf (data[1], "QUAD\n"); traverse_boundary (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) draw_terrain, data); fclose (data[1]); } #endif #define ASCII_ZERO 48 /* ASCII value for character "0" */ static void terrain_coarse_fine (FttCell * parent, GfsVariable * v) { FttCellChildren child; guint len = strlen (v->name) - 1; gint c = v->name[len] - ASCII_ZERO; guint n; gdouble h[NM]; g_assert (c >= 0 && c < NM); for (n = 0; n < NM; n++) { GSList * i = v->domain->variables; while (i && (!GFS_VARIABLE (i->data)->name || strncmp (v->name, GFS_VARIABLE (i->data)->name, len) || GFS_VARIABLE (i->data)->name[len] != ASCII_ZERO + n)) i = i->next; g_assert (i); h[n] = GFS_VALUE (parent, GFS_VARIABLE (i->data)); } ftt_cell_children (parent, &child); if (h[0] == GFS_NODATA) { for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) GFS_VALUE (child.c[n], v) = GFS_NODATA; } else { #if !FTT_2D gdouble size = ftt_cell_size (parent)/4.; #endif for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) { gdouble hc[NM]; FttVector p; ftt_cell_relative_pos (child.c[n], &p); p.x *= 2.; p.y *= 2.; hc[0] = h[0] + h[1]*p.x + h[2]*p.y + h[3]*p.x*p.y; hc[1] = (h[1] + h[3]*p.y)/2.; hc[2] = (h[2] + h[3]*p.x)/2.; hc[3] = h[3]/4.; #if !FTT_2D ftt_cell_pos (child.c[n], &p); gdouble zmin = p.z - size, zmax = p.z + size, minmax[2]; p.z = 1.; gfs_simulation_map (GFS_SIMULATION (v->domain), &p); terrain_min_max (hc, minmax, p.z); if (minmax[0] > zmax || minmax[1] < zmin) GFS_VALUE (child.c[n], v) = GFS_NODATA; else #endif GFS_VALUE (child.c[n], v) = hc[c]; } } } static void hn_coarse_fine (FttCell * parent, GfsVariable * v) { FttCellChildren child; ftt_cell_children (parent, &child); guint i, n = 0; for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) n++; if (n > 0) { guint hn = GFS_VALUE (parent, v)/n; for (i = 0; i < FTT_CELLS; i++) if (child.c[i]) GFS_VALUE (child.c[i], v) = hn; } } static void terrain_refine (GfsRefine * refine, GfsSimulation * sim) { GfsDomain * domain = GFS_DOMAIN (sim); GfsRefineTerrain * t = GFS_REFINE_TERRAIN (refine); t->type = gfs_temporary_variable (domain); t->level = G_MAXINT/2; traverse_boundary (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) reset_terrain, refine); do { traverse_boundary (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, t->level, (FttCellTraverseFunc) update_terrain, refine); traverse_boundary (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, t->level, (FttCellTraverseFunc) remove_knots, refine); t->refined = FALSE; traverse_boundary (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEVEL, t->level, (FttCellTraverseFunc) update_height_and_check_for_refinement, refine); #if DEBUG GfsNorm norm = gfs_domain_norm_variable (domain, t->he, NULL, FTT_TRAVERSE_LEAFS, -1); fprintf (stderr, "level: %d bias: %g 1: %g 2: %g inf: %g\n", t->level, norm.bias, norm.first, norm.second, norm.infty); fprintf (stderr, "level: %d depth: %d\n", t->level, gfs_domain_depth (domain)); gchar name[] = "/tmp/level-x"; name[11] = ASCII_ZERO + t->level; draw_level (domain, refine, t->level, name); #endif t->level++; } while (t->refined); #if DEBUG draw_all (domain, refine, "/tmp/all"); #endif #if !FTT_2D /* The height field is only defined on the front boundary, we need to define it volumetrically */ t->min = gfs_temporary_variable (domain); t->max = gfs_temporary_variable (domain); t->front = - G_MAXDOUBLE; FttVector p = {0.,0.,1.}; gfs_simulation_map (sim, &p); t->scale = p.z; gfs_domain_cell_traverse_boundary (domain, FTT_FRONT, FTT_POST_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) min_max, t); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) refine_box, t); gts_object_destroy (GTS_OBJECT (t->min)); gts_object_destroy (GTS_OBJECT (t->max)); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) init_terrain_from_boundary, t); gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) coarsen_box, t); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) reset_empty_cell, t); #endif /* 3D */ gts_object_destroy (GTS_OBJECT (t->type)); guint i; for (i = 0; i < NM; i++) t->h[i]->coarse_fine = terrain_coarse_fine; } static void refine_terrain_destroy (GtsObject * object) { GfsRefineTerrain * t = GFS_REFINE_TERRAIN (object); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (object)); if (t->name) { gchar * dname = g_strconcat (t->name, "min", NULL); gfs_domain_remove_derived_variable (domain, dname); g_free (dname); dname = g_strconcat (t->name, "max", NULL); gfs_domain_remove_derived_variable (domain, dname); g_free (dname); } g_free (t->name); kdtrees_destroy (&t->rs); gts_object_destroy (GTS_OBJECT (t->criterion)); (* GTS_OBJECT_CLASS (gfs_refine_terrain_class ())->parent_class->destroy) (object); } static gdouble terrain_hmin (FttCell * cell, FttCellFace * face, GfsDomain * domain, GfsRefineTerrain * t) { g_return_val_if_fail (cell != NULL, 0.); gdouble dx, dy, min = G_MAXDOUBLE; gdouble H0 = GFS_VALUE (cell, t->h[0]), H1 = GFS_VALUE (cell, t->h[1]); gdouble H2 = GFS_VALUE (cell, t->h[2]), H3 = GFS_VALUE (cell, t->h[3]); for (dx = -1.; dx <= 1.; dx += 2.) for (dy = -1.; dy <= 1.; dy += 2.) { double v = H0 + dx*H1 + dy*H2 + dx*dy*H3; if (v < min) min = v; } return min; } static gdouble terrain_hmax (FttCell * cell, FttCellFace * face, GfsDomain * domain, GfsRefineTerrain * t) { g_return_val_if_fail (cell != NULL, 0.); gdouble dx, dy, max = - G_MAXDOUBLE; gdouble H0 = GFS_VALUE (cell, t->h[0]), H1 = GFS_VALUE (cell, t->h[1]); gdouble H2 = GFS_VALUE (cell, t->h[2]), H3 = GFS_VALUE (cell, t->h[3]); for (dx = -1.; dx <= 1.; dx += 2.) for (dy = -1.; dy <= 1.; dy += 2.) { double v = H0 + dx*H1 + dy*H2 + dx*dy*H3; if (v > max) max = v; } return max; } static void none (FttCell * parent, GfsVariable * v) { } static void refine_terrain_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_refine_terrain_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (name)"); return; } GfsRefineTerrain * t = GFS_REFINE_TERRAIN (*o); t->name = g_strdup (fp->token->str); gts_file_next_token (fp); kdtrees_read (&t->rs, fp); if (fp->type == GTS_ERROR) return; GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); guint i; for (i = 0; i < NM; i++) { gchar * name = g_strdup_printf ("%s%d", t->name, i); t->h[i] = gfs_domain_get_or_add_variable (domain, name, "Terrain height"); t->h[i]->coarse_fine = none; g_free (name); } gchar * name = g_strjoin (NULL, t->name, "e", NULL); t->he = gfs_domain_get_or_add_variable (domain, name, "Terrain RMS error"); t->he->coarse_fine = none; g_free (name); name = g_strjoin (NULL, t->name, "n", NULL); t->hn = gfs_domain_get_or_add_variable (domain, name, "Terrain samples #"); t->hn->coarse_fine = hn_coarse_fine; g_free (name); name = g_strjoin (NULL, t->name, "dmin", NULL); t->hdmin = gfs_domain_get_or_add_variable (domain, name, "Minimum data height"); t->hdmin->coarse_fine = none; g_free (name); name = g_strjoin (NULL, t->name, "dmax", NULL); t->hdmax = gfs_domain_get_or_add_variable (domain, name, "Maximum data height"); t->hdmax->coarse_fine = none; g_free (name); GfsDerivedVariableInfo v; v.name = g_strjoin (NULL, t->name, "min", NULL); v.description = "Minimum terrain height"; v.func = terrain_hmin; v.data = t; if (!gfs_domain_add_derived_variable (domain, v)) { gts_file_error (fp, "derived variable `%s' already defined", v.name); g_free (v.name); return; } g_free (v.name); v.name = g_strjoin (NULL, t->name, "max", NULL); v.description = "Maximum terrain height"; v.func = terrain_hmax; v.data = t; if (!gfs_domain_add_derived_variable (domain, v)) { gts_file_error (fp, "derived variable `%s' already defined", v.name); g_free (v.name); return; } g_free (v.name); gfs_function_read (t->criterion, domain, fp); } static void refine_terrain_write (GtsObject * o, FILE * fp) { GfsRefineTerrain * t = GFS_REFINE_TERRAIN (o); (* GTS_OBJECT_CLASS (gfs_refine_terrain_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", t->name); kdtrees_write (&t->rs, fp); gfs_function_write (t->criterion, fp); } static void gfs_refine_terrain_class_init (GfsRefineClass * klass) { klass->refine = terrain_refine; GTS_OBJECT_CLASS (klass)->destroy = refine_terrain_destroy; GTS_OBJECT_CLASS (klass)->read = refine_terrain_read; GTS_OBJECT_CLASS (klass)->write = refine_terrain_write; } static void gfs_refine_terrain_init (GfsRefineTerrain * t) { t->criterion = gfs_function_new (gfs_function_class (), 0.); t->rs.basename = g_strdup ("*"); } GfsRefineClass * gfs_refine_terrain_class (void) { static GfsRefineClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_refine_terrain_info = { "GfsRefineTerrain", sizeof (GfsRefineTerrain), sizeof (GfsRefineClass), (GtsObjectClassInitFunc) gfs_refine_terrain_class_init, (GtsObjectInitFunc) gfs_refine_terrain_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_refine_class ()), &gfs_refine_terrain_info); } return klass; } /* GfsSurfaceTerrain: Header */ typedef struct _GfsSurfaceTerrain GfsSurfaceTerrain; struct _GfsSurfaceTerrain { /*< private >*/ GfsGenericSurface parent; GfsVariable * h[NM]; gdouble scale; /*< public >*/ gchar * name; }; #define GFS_SURFACE_TERRAIN(obj) GTS_OBJECT_CAST (obj,\ GfsSurfaceTerrain,\ gfs_surface_terrain_class ()) #define GFS_IS_SURFACE_TERRAIN(obj) (gts_object_is_from_class (obj,\ gfs_surface_terrain_class ())) GfsGenericSurfaceClass * gfs_surface_terrain_class (void); /* GfsSurfaceTerrain: Object */ static void gfs_surface_terrain_read (GtsObject ** o, GtsFile * fp) { if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable name"); return; } GfsSurfaceTerrain * t = GFS_SURFACE_TERRAIN (*o); t->name = g_strdup (fp->token->str); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); guint i; for (i = 0; i < NM; i++) { gchar * name = g_strdup_printf ("%s%d", t->name, i); t->h[i] = gfs_variable_from_name (domain->variables, name); if (!t->h[i]) { gts_file_error (fp, "%s is not a valid variable name", name); g_free (name); return; } t->h[i]->coarse_fine = terrain_coarse_fine; g_free (name); } gts_file_next_token (fp); } static void gfs_surface_terrain_write (GtsObject * o, FILE * fp) { fprintf (fp, " %s", GFS_SURFACE_TERRAIN (o)->name); } static void gfs_surface_terrain_destroy (GtsObject * object) { g_free (GFS_SURFACE_TERRAIN (object)->name); (* GTS_OBJECT_CLASS (gfs_surface_terrain_class ())->parent_class->destroy) (object); } static GfsGenericSurface * cell_is_cut (FttCell * cell, GfsGenericSurface * s1, gboolean flatten, gint maxlevel) { g_assert (!flatten); /* not implemented */ if (!FTT_CELL_IS_LEAF (cell)) return s1; return GFS_VALUE (cell, GFS_SURFACE_TERRAIN (s1)->h[0]) != GFS_NODATA ? s1 : NULL; } static gdouble zscale (GfsSurfaceTerrain * t) { if (t->scale == 0.) { FttVector p = {0.,0.,1.}; gfs_simulation_map (gfs_object_simulation (t), &p); t->scale = p.z; } return t->scale; } static guint surface_segment_intersection (GfsGenericSurface * s1, FttCell * cell, GfsSegment * I) { I->n = 0; I->x = 0.; I->inside = 0; FttVector pE, pD; pE.x = I->E->x; pE.y = I->E->y; pD.x = I->D->x; pD.y = I->D->y; GfsSurfaceTerrain * t = GFS_SURFACE_TERRAIN (s1); gdouble vE = I->E->z - cell_value (cell, t->h, pE)*zscale (t); gdouble vD = I->D->z - cell_value (cell, t->h, pD)*zscale (t); if ((vE > 0. && vD <= 0.) || (vE <= 0. && vD > 0.)) { I->n = 1; I->inside = vE > 0. ? -1 : 1; I->x = vE/(vE - vD); #if DEBUG gdouble size = ftt_cell_size (cell)/2.; FttVector q; ftt_cell_pos (cell, &q); pE.x = (pE.x - q.x)/size; pE.y = (pE.y - q.y)/size; pD.x = (pD.x - q.x)/size; pD.y = (pD.y - q.y)/size; fprintf (stderr, "p %g %g %g %g %g %g %g %d %g %g %g %g\n", I->D->x, I->D->y, I->D->z, I->E->x, I->E->y, I->E->z, I->x, ftt_cell_level (cell), pE.x, pE.y, pD.x, pD.y); fprintf (stderr, "q %g %g %g\nq %g %g %g\nq\nq\n", I->D->x, I->D->y, I->D->z, I->E->x, I->E->y, I->E->z); fprintf (stderr, "i %g %g %g\n", I->E->x + I->x*(I->D->x - I->E->x), I->E->y + I->x*(I->D->y - I->E->y), I->E->z + I->x*(I->D->z - I->E->z)); #endif } return I->n; } static void surface_segment_normal (GfsGenericSurface * s1, FttCell * cell, GfsSegment * I, GtsVector n) { GfsVariable ** h = GFS_SURFACE_TERRAIN (s1)->h; gdouble size = ftt_cell_size (cell)/2.; FttVector p, q; ftt_cell_pos (cell, &q); p.x = I->E->x + I->x*(I->D->x - I->E->x); p.y = I->E->y + I->x*(I->D->y - I->E->y); p.x = (p.x - q.x)/size; p.y = (p.y - q.y)/size; n[0] = - (GFS_VALUE (cell, h[1]) + GFS_VALUE (cell, h[3])*p.y)/size; n[1] = - (GFS_VALUE (cell, h[2]) + GFS_VALUE (cell, h[3])*p.x)/size; n[2] = 1./zscale (GFS_SURFACE_TERRAIN (s1)); } static void gfs_surface_terrain_class_init (GfsGenericSurfaceClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_surface_terrain_read; GTS_OBJECT_CLASS (klass)->write = gfs_surface_terrain_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_surface_terrain_destroy; klass->cell_is_cut = cell_is_cut; klass->segment_intersection = surface_segment_intersection; klass->segment_normal = surface_segment_normal; } GfsGenericSurfaceClass * gfs_surface_terrain_class (void) { static GfsGenericSurfaceClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_surface_terrain_info = { "GfsSurfaceTerrain", sizeof (GfsSurfaceTerrain), sizeof (GfsGenericSurfaceClass), (GtsObjectClassInitFunc) gfs_surface_terrain_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_surface_class ()), &gfs_surface_terrain_info); } return klass; } /* GfsTerrain: Header */ #define GFS_IS_TERRAIN(obj) (gts_object_is_from_class (obj,\ gfs_terrain_class ())) GfsEventClass * gfs_terrain_class (void); /* GfsTerrain: Object */ static void terrain_init (GfsSolid * s) { gts_object_destroy (GTS_OBJECT (s->s)); s->s = GFS_GENERIC_SURFACE (gts_object_new (GTS_OBJECT_CLASS (gfs_surface_terrain_class ()))); } GfsEventClass * gfs_terrain_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_terrain_info = { "GfsTerrain", sizeof (GfsSolid), sizeof (GfsEventClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) terrain_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_solid_class ()), &gfs_terrain_info); } return klass; } /* GfsVariableTerrain: header */ typedef struct _GfsVariableTerrain GfsVariableTerrain; struct _GfsVariableTerrain { /*< private >*/ GfsVariable parent; /*< public >*/ GfsVariable * p, * H, * n, * dmin, * dmax; Kdtrees rs; }; #define GFS_VARIABLE_TERRAIN(obj) GTS_OBJECT_CAST (obj,\ GfsVariableTerrain,\ gfs_variable_terrain_class ()) #define GFS_IS_VARIABLE_TERRAIN(obj) (gts_object_is_from_class (obj,\ gfs_variable_terrain_class ())) GfsVariableClass * gfs_variable_terrain_class (void); /* GfsVariableTerrain: Object */ static void variable_terrain_destroy (GtsObject * o) { kdtrees_destroy (&GFS_VARIABLE_TERRAIN (o)->rs); (* GTS_OBJECT_CLASS (gfs_variable_terrain_class ())->parent_class->destroy) (o); } static double reconstruct_terrain (FttCell * cell, GfsVariableTerrain * t) { GfsVariable * v = GFS_VARIABLE (t); GfsSimulation * sim = GFS_SIMULATION (v->domain); Polygon poly; KdtRect rect; KdtSum s; guint i; polygon_init (sim, &poly, cell, &t->rs); kdt_sum_init (&s); rect[0].l = poly.min[0]; rect[0].h = poly.max[0]; rect[1].l = poly.min[1]; rect[1].h = poly.max[1]; for (i = 0; i < poly.rs->nrs; i++) { KdtSum stmp; kdt_sum_init (&stmp); kdt_query_sum (poly.rs->rs[i], (KdtCheck) polygon_includes, (KdtCheck) polygon_intersects, &poly, rect, &stmp); add_weighted_kdt_sum (&s, &stmp, poly.rs->weight[i]); } GFS_VALUE (cell, t->n) = s.n; if (s.w > 0.) { GfsVariable * v = GFS_VARIABLE (t); GFS_VALUE (cell, v) = s.H0/s.w/sim->physical_params.L; GFS_VALUE (cell, t->dmin) = s.Hmin; GFS_VALUE (cell, t->dmax) = s.Hmax; return s.w; } return 0.; } static void variable_terrain_coarse_fine (FttCell * parent, GfsVariable * v) { GfsVariableTerrain * t = GFS_VARIABLE_TERRAIN (v); GfsSimulation * sim = GFS_SIMULATION (v->domain); FttCellChildren child; gdouble f[4*(FTT_DIMENSION - 1) + 1] = { GFS_NODATA }; guint n; /* Reconstruct terrain */ ftt_cell_children (parent, &child); for (n = 0; n < FTT_CELLS; n++) if (child.c[n] && !reconstruct_terrain (child.c[n], t)) { GFS_VALUE (child.c[n], t->dmin) = GFS_NODATA; GFS_VALUE (child.c[n], t->dmax) = GFS_NODATA; if (GFS_CELL_IS_BOUNDARY (parent)) GFS_VALUE (child.c[n], v) = GFS_VALUE (parent, v); else { FttVector p; ftt_cell_pos (child.c[n], &p); if (f[0] == GFS_NODATA) gfs_cell_corner_values (parent, v, ftt_cell_level (parent), f); GFS_VALUE (child.c[n], v) = gfs_interpolate_from_corners (parent, p, f); } } /* If we are part of GfsRiver, reconstruct H and P */ if (t->H) { /* Reconstruct H */ double dry = GFS_RIVER (sim)->dry; if (GFS_VALUE (parent, t->p) < dry) { /* Dry cell */ FttCellNeighbors neighbor; ftt_cell_neighbors (parent, &neighbor); FttDirection d; gdouble H = 0., s = 0.; for (d = 0; d < FTT_NEIGHBORS; d++) if (neighbor.c[d]) { if (FTT_CELL_IS_LEAF (neighbor.c[d])) { if (GFS_VALUE (neighbor.c[d], t->p) >= dry) { H += GFS_VALUE (neighbor.c[d], t->p)*GFS_VALUE (neighbor.c[d], t->H); s += GFS_VALUE (neighbor.c[d], t->p); } } else { FttCellChildren child; guint i, n = ftt_cell_children_direction (neighbor.c[d], FTT_OPPOSITE_DIRECTION (d), &child); for (i = 0; i < n; i++) if (child.c[i] && GFS_VALUE (child.c[i], t->p) >= dry) { H += GFS_VALUE (child.c[i], t->p)*GFS_VALUE (child.c[i], t->H); s += GFS_VALUE (child.c[i], t->p); } } } if (s > 0.) { H /= s; /* average H of neighbouring wet cells */ for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) GFS_VALUE (child.c[n], t->H) = H; } else { /* surrounded by dry cells */ for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) GFS_VALUE (child.c[n], t->H) = 0.; /* default "sealevel" */ } } else { /* wet cell */ GfsVariable * v = t->H; for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) GFS_VALUE (child.c[n], v) = GFS_VALUE (parent, v); if (!GFS_CELL_IS_BOUNDARY (parent)) { FttVector g; FttComponent c; FttCellNeighbors neighbor; ftt_cell_neighbors (parent, &neighbor); for (c = 0; c < FTT_DIMENSION; c++) if (neighbor.c[2*c] && GFS_VALUE (neighbor.c[2*c], t->p) >= dry && neighbor.c[2*c + 1] && GFS_VALUE (neighbor.c[2*c + 1], t->p) >= dry) (&g.x)[c] = gfs_center_minmod_gradient (parent, c, v->i); else (&g.x)[c] = 0.; for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) { FttVector p; ftt_cell_relative_pos (child.c[n], &p); for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (child.c[n], v) += (&p.x)[c]*(&g.x)[c]; } } } /* Deduce P from the reconstruction of Zb and H */ for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) { GFS_VALUE (child.c[n], t->p) = MAX (0., (GFS_VALUE (child.c[n], t->H) - GFS_VALUE (child.c[n], v))); GFS_VALUE (child.c[n], t->H) = GFS_VALUE (child.c[n], t->p) + GFS_VALUE (child.c[n], v); } } } static void variable_terrain_fine_coarse (FttCell * parent, GfsVariable * v) { GfsVariableTerrain * t = GFS_VARIABLE_TERRAIN (v); FttCellChildren child; guint n; /* Reconstruct terrain (weighted average) */ gdouble Zb = 0., sa = 0.; gdouble N = 0., dmin = G_MAXDOUBLE, dmax = - G_MAXDOUBLE; ftt_cell_children (parent, &child); for (n = 0; n < FTT_CELLS; n++) if (child.c[n]) { gdouble a = GFS_IS_MIXED (child.c[n]) ? GFS_STATE (child.c[n])->solid->a : 1.; Zb += GFS_VALUE (child.c[n], v)*a; sa += a; N += GFS_VALUE (child.c[n], t->n); if (GFS_VALUE (child.c[n], t->n) > 0) { dmax = MAX (dmax, GFS_VALUE (child.c[n], t->dmax)); dmin = MIN (dmin, GFS_VALUE (child.c[n], t->dmin)); } } if (sa > 0.) GFS_VALUE (parent, v) = Zb/sa; GFS_VALUE (parent, t->n) = N; GFS_VALUE (parent, t->dmax) = dmax > - G_MAXDOUBLE ? dmax : GFS_NODATA; GFS_VALUE (parent, t->dmin) = dmin < G_MAXDOUBLE ? dmin : GFS_NODATA; /* If we are part of GfsRiver, reconstruct H and P */ if (t->H) { /* Reconstruct H */ gdouble H = 0., sa = 0.; for (n = 0; n < FTT_CELLS; n++) if (child.c[n] && GFS_VALUE (child.c[n], t->p) >= GFS_RIVER (v->domain)->dry) { gdouble a = GFS_IS_MIXED (child.c[n]) ? GFS_STATE (child.c[n])->solid->a : 1.; H += GFS_VALUE (child.c[n], t->H)*a; sa += a; } if (sa > 0.) { GFS_VALUE (parent, t->H) = H/sa; GFS_VALUE (parent, t->p) = MAX (0., GFS_VALUE (parent, t->H) - GFS_VALUE (parent, v)); } else { /* dry cell */ GFS_VALUE (parent, t->p) = 0.; GFS_VALUE (parent, t->H) = GFS_VALUE (parent, v); } } } static void variable_terrain_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_variable_terrain_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsVariableTerrain * v = GFS_VARIABLE_TERRAIN (*o); kdtrees_read (&v->rs, fp); if (fp->type == GTS_ERROR) return; GfsVariable * v1 = GFS_VARIABLE (*o); v1->units = 1.; g_free (v1->description); v1->description = g_strdup ("Terrain"); v1->coarse_fine = variable_terrain_coarse_fine; v1->fine_coarse = variable_terrain_fine_coarse; GfsSimulation * sim = gfs_object_simulation (*o); gchar * name = g_strjoin (NULL, v1->name, "n", NULL); v->n = gfs_domain_get_or_add_variable (GFS_DOMAIN (sim), name, "Terrain samples # (weighted)"); v->n->coarse_fine = none; v->n->fine_coarse = none; g_free (name); name = g_strjoin (NULL, v1->name, "dmin", NULL); v->dmin = gfs_domain_get_or_add_variable (GFS_DOMAIN (sim), name, "Minimum data height"); v->dmin->coarse_fine = none; v->dmin->fine_coarse = none; g_free (name); name = g_strjoin (NULL, v1->name, "dmax", NULL); v->dmax = gfs_domain_get_or_add_variable (GFS_DOMAIN (sim), name, "Maximum data height"); v->dmax->coarse_fine = none; v->dmax->fine_coarse = none; g_free (name); if (GFS_IS_RIVER (sim) && fp->type == '{') { gboolean reconstruct = FALSE; GtsFileVariable var[] = { {GTS_INT, "reconstruct", TRUE, &reconstruct}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; if (reconstruct) { v->p = GFS_RIVER (sim)->v[0]; v->H = GFS_RIVER (sim)->h; /* the coarse -> fine and fine -> coarse interpolations of p and H are taken over by variable_terrain_coarse_fine (below )*/ v->p->coarse_fine = none; v->H->coarse_fine = none; v->p->fine_coarse = none; v->H->fine_coarse = none; } } } static void variable_terrain_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_variable_terrain_class ())->parent_class->write) (o, fp); kdtrees_write (&GFS_VARIABLE_TERRAIN (o)->rs, fp); if (GFS_VARIABLE_TERRAIN (o)->H) fputs (" { reconstruct = 1 }", fp); } static void variable_terrain_class_init (GtsObjectClass * klass) { klass->destroy = variable_terrain_destroy; klass->read = variable_terrain_read; klass->write = variable_terrain_write; } static void variable_terrain_init (GfsVariableTerrain * v) { v->rs.basename = g_strdup ("*"); } GfsVariableClass * gfs_variable_terrain_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_variable_terrain_info = { "GfsVariableTerrain", sizeof (GfsVariableTerrain), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) variable_terrain_class_init, (GtsObjectInitFunc) variable_terrain_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &gfs_variable_terrain_info); } return klass; } /* Initialize module */ /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "terrain"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { gchar * path = getenv ("GFS_TERRAIN_PATH"); if (path && path[0] != '\0') default_path = path; gfs_refine_terrain_class (); gfs_terrain_class (); gfs_variable_terrain_class (); return NULL; } gerris-snapshot-131206/modules/rsurface.h0000644000175100017510000000160312250371171015315 00000000000000/* padding on 32 bits systems (to match automatic 64 bits padding) */ typedef struct _RSurface RSurface; typedef struct { /* needs to be identical to typdirinfo in RStarTree.h */ double m01, m02, m03; double m11, m13; double m22, m23, m33; double m44, m55, m66, m77; double m67, m76; double H0, H1, H2, H3, H4; double H5, H6; float Hmin, Hmax; int n; PADDING_32_BITS } RSurfaceSum; typedef struct { float l, h; } RSurfaceInterval; typedef RSurfaceInterval RSurfaceRect[2]; typedef int (* RSurfaceCheck) (RSurfaceRect rect, void * data, int depth); RSurface * r_surface_open (const char * fname, const char * mode, int size); int r_surface_close (RSurface * rt); typedef int (* RSurfaceQuery) (double p[3], void * user_data); void r_surface_query_region (RSurface * rt, double min[2], double max[2], RSurfaceQuery q, void * user_data); gerris-snapshot-131206/modules/Makefile.in0000644000175100017510000027636612250371207015423 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = rsurface2kdt$(EXEEXT) subdir = modules DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(bindir)" LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES) am__DEPENDENCIES_1 = libagmg2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libagmg2D_la_OBJECTS = libagmg2D_la-agmg.lo dagmg.lo libagmg2D_la_OBJECTS = $(am_libagmg2D_la_OBJECTS) @BUILD_AGMG_TRUE@am_libagmg2D_la_rpath = -rpath $(pkglibdir) libagmg3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libagmg3D_la_OBJECTS = libagmg3D_la-agmg.lo dagmg.lo libagmg3D_la_OBJECTS = $(am_libagmg3D_la_OBJECTS) @BUILD_AGMG_TRUE@am_libagmg3D_la_rpath = -rpath $(pkglibdir) am_libbubbles2D_la_OBJECTS = libbubbles2D_la-bubbles.lo libbubbles2D_la_OBJECTS = $(am_libbubbles2D_la_OBJECTS) libbubbles2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libbubbles2D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @HAS_GSL_TRUE@am_libbubbles2D_la_rpath = -rpath $(pkglibdir) am_libbubbles3D_la_OBJECTS = libbubbles3D_la-bubbles.lo libbubbles3D_la_OBJECTS = $(am_libbubbles3D_la_OBJECTS) libbubbles3D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libbubbles3D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @HAS_GSL_TRUE@am_libbubbles3D_la_rpath = -rpath $(pkglibdir) am_libculvert2D_la_OBJECTS = libculvert2D_la-culvert.lo libculvert2D_la_OBJECTS = $(am_libculvert2D_la_OBJECTS) libculvert2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libculvert2D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ libdf33D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libdf33D_la_OBJECTS = libdf33D_la-df3.lo libdf33D_la_OBJECTS = $(am_libdf33D_la_OBJECTS) libdf33D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libdf33D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ libelectrohydro2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libelectrohydro2D_la_OBJECTS = \ libelectrohydro2D_la-electrohydro.lo libelectrohydro2D_la_OBJECTS = $(am_libelectrohydro2D_la_OBJECTS) libelectrohydro2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libelectrohydro2D_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ libelectrohydro3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libelectrohydro3D_la_OBJECTS = \ libelectrohydro3D_la-electrohydro.lo libelectrohydro3D_la_OBJECTS = $(am_libelectrohydro3D_la_OBJECTS) libelectrohydro3D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libelectrohydro3D_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ libfft2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libfft2D_la_OBJECTS = libfft2D_la-fft.lo libfft2D_la_OBJECTS = $(am_libfft2D_la_OBJECTS) libfft2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libfft2D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @HAS_FFTW3_TRUE@am_libfft2D_la_rpath = -rpath $(pkglibdir) libfft3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libfft3D_la_OBJECTS = libfft3D_la-fft.lo libfft3D_la_OBJECTS = $(am_libfft3D_la_OBJECTS) libfft3D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libfft3D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @HAS_FFTW3_TRUE@am_libfft3D_la_rpath = -rpath $(pkglibdir) libhypre2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libhypre2D_la_OBJECTS = libhypre2D_la-hypre.lo libhypre2D_la_OBJECTS = $(am_libhypre2D_la_OBJECTS) libhypre2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libhypre2D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_HYPRE_TRUE@am_libhypre2D_la_rpath = -rpath $(pkglibdir) libhypre3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libhypre3D_la_OBJECTS = libhypre3D_la-hypre.lo libhypre3D_la_OBJECTS = $(am_libhypre3D_la_OBJECTS) libhypre3D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libhypre3D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_HYPRE_TRUE@am_libhypre3D_la_rpath = -rpath $(pkglibdir) liblayered2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_liblayered2D_la_OBJECTS = liblayered2D_la-layered.lo liblayered2D_la_OBJECTS = $(am_liblayered2D_la_OBJECTS) liblayered2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(liblayered2D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ liblis2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_liblis2D_la_OBJECTS = liblis2D_la-lis.lo liblis2D_la_OBJECTS = $(am_liblis2D_la_OBJECTS) liblis2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(liblis2D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_LIS_TRUE@am_liblis2D_la_rpath = -rpath $(pkglibdir) liblis3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_liblis3D_la_OBJECTS = liblis3D_la-lis.lo liblis3D_la_OBJECTS = $(am_liblis3D_la_OBJECTS) liblis3D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(liblis3D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_LIS_TRUE@am_liblis3D_la_rpath = -rpath $(pkglibdir) libmap2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libmap2D_la_OBJECTS = libmap2D_la-map.lo libmap2D_la_OBJECTS = $(am_libmap2D_la_OBJECTS) libmap2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libmap2D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @HAS_LIBPROJ_TRUE@am_libmap2D_la_rpath = -rpath $(pkglibdir) libmap3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libmap3D_la_OBJECTS = map.lo libmap3D_la_OBJECTS = $(am_libmap3D_la_OBJECTS) @HAS_LIBPROJ_TRUE@am_libmap3D_la_rpath = -rpath $(pkglibdir) libode2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libode2D_la_OBJECTS = libode2D_la-ode.lo libode2D_la_OBJECTS = $(am_libode2D_la_OBJECTS) libode2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libode2D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_ODE_TRUE@am_libode2D_la_rpath = -rpath $(pkglibdir) libode3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libode3D_la_OBJECTS = libode3D_la-ode.lo libode3D_la_OBJECTS = $(am_libode3D_la_OBJECTS) libode3D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libode3D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_ODE_TRUE@am_libode3D_la_rpath = -rpath $(pkglibdir) libokada2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libokada2D_la_OBJECTS = libokada2D_la-okada.lo libokada2D_la_OBJECTS = $(am_libokada2D_la_OBJECTS) libokada2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libokada2D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ libokada3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libokada3D_la_OBJECTS = libokada3D_la-okada.lo libokada3D_la_OBJECTS = $(am_libokada3D_la_OBJECTS) libokada3D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libokada3D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ libparticulatecommon2D_la_LIBADD = am_libparticulatecommon2D_la_OBJECTS = \ libparticulatecommon2D_la-particulatecommon.lo libparticulatecommon2D_la_OBJECTS = \ $(am_libparticulatecommon2D_la_OBJECTS) libparticulatecommon2D_la_LINK = $(LIBTOOL) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libparticulatecommon2D_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ libparticulatecommon3D_la_LIBADD = am_libparticulatecommon3D_la_OBJECTS = \ libparticulatecommon3D_la-particulatecommon.lo libparticulatecommon3D_la_OBJECTS = \ $(am_libparticulatecommon3D_la_OBJECTS) libparticulatecommon3D_la_LINK = $(LIBTOOL) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libparticulatecommon3D_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am_libparticulates2D_la_OBJECTS = \ libparticulates2D_la-particulates.lo libparticulates2D_la_OBJECTS = $(am_libparticulates2D_la_OBJECTS) libparticulates2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libparticulates2D_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am_libparticulates3D_la_OBJECTS = \ libparticulates3D_la-particulates.lo libparticulates3D_la_OBJECTS = $(am_libparticulates3D_la_OBJECTS) libparticulates3D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libparticulates3D_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ libskewsymmetric2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libskewsymmetric2D_la_OBJECTS = \ libskewsymmetric2D_la-skewsymmetric.lo libskewsymmetric2D_la_OBJECTS = $(am_libskewsymmetric2D_la_OBJECTS) libskewsymmetric2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libskewsymmetric2D_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ libskewsymmetric3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libskewsymmetric3D_la_OBJECTS = \ libskewsymmetric3D_la-skewsymmetric.lo libskewsymmetric3D_la_OBJECTS = $(am_libskewsymmetric3D_la_OBJECTS) libskewsymmetric3D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libskewsymmetric3D_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ libstokes2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libstokes2D_la_OBJECTS = libstokes2D_la-stokes.lo CW263.lo libstokes2D_la_OBJECTS = $(am_libstokes2D_la_OBJECTS) @BUILD_STOKES_TRUE@am_libstokes2D_la_rpath = -rpath $(pkglibdir) libstokes3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libstokes3D_la_OBJECTS = libstokes3D_la-stokes.lo CW263.lo libstokes3D_la_OBJECTS = $(am_libstokes3D_la_OBJECTS) @BUILD_STOKES_TRUE@am_libstokes3D_la_rpath = -rpath $(pkglibdir) am_libterrain2D_la_OBJECTS = libterrain2D_la-terrain.lo libterrain2D_la_OBJECTS = $(am_libterrain2D_la_OBJECTS) libterrain2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libterrain2D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_libterrain3D_la_OBJECTS = terrain.lo libterrain3D_la_OBJECTS = $(am_libterrain3D_la_OBJECTS) libtide2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_libtide2D_la_OBJECTS = libtide2D_la-tide.lo libtide2D_la_OBJECTS = $(am_libtide2D_la_OBJECTS) libtide2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libtide2D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_TIDE_TRUE@am_libtide2D_la_rpath = -rpath $(pkglibdir) libtide3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_libtide3D_la_OBJECTS = libtide3D_la-tide.lo libtide3D_la_OBJECTS = $(am_libtide3D_la_OBJECTS) libtide3D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libtide3D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_TIDE_TRUE@am_libtide3D_la_rpath = -rpath $(pkglibdir) libtopics2D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libtopics2D_la_OBJECTS = libtopics2D_la-topics.lo libtopics2D_la_OBJECTS = $(am_libtopics2D_la_OBJECTS) libtopics2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libtopics2D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ libtopics3D_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libtopics3D_la_OBJECTS = libtopics3D_la-topics.lo libtopics3D_la_OBJECTS = $(am_libtopics3D_la_OBJECTS) libtopics3D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libtopics3D_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_libwavewatch2D_la_OBJECTS = libwavewatch2D_la-wavewatch.lo libwavewatch2D_la_OBJECTS = $(am_libwavewatch2D_la_OBJECTS) libwavewatch2D_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libwavewatch2D_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ @BUILD_WAVEWATCH_TRUE@am_libwavewatch2D_la_rpath = -rpath $(pkglibdir) PROGRAMS = $(bin_PROGRAMS) am_rsurface2kdt_OBJECTS = rsurface2kdt-rsurface2kdt.$(OBJEXT) \ rsurface2kdt-rsurface.$(OBJEXT) rsurface2kdt_OBJECTS = $(am_rsurface2kdt_OBJECTS) rsurface2kdt_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(rsurface2kdt_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS) LTF77COMPILE = $(LIBTOOL) --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) F77LD = $(F77) F77LINK = $(LIBTOOL) --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS) LTFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS) FCLD = $(FC) FCLINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libagmg2D_la_SOURCES) $(libagmg3D_la_SOURCES) \ $(libbubbles2D_la_SOURCES) $(libbubbles3D_la_SOURCES) \ $(libculvert2D_la_SOURCES) $(libdf33D_la_SOURCES) \ $(libelectrohydro2D_la_SOURCES) \ $(libelectrohydro3D_la_SOURCES) $(libfft2D_la_SOURCES) \ $(libfft3D_la_SOURCES) $(libhypre2D_la_SOURCES) \ $(libhypre3D_la_SOURCES) $(liblayered2D_la_SOURCES) \ $(liblis2D_la_SOURCES) $(liblis3D_la_SOURCES) \ $(libmap2D_la_SOURCES) $(libmap3D_la_SOURCES) \ $(libode2D_la_SOURCES) $(libode3D_la_SOURCES) \ $(libokada2D_la_SOURCES) $(libokada3D_la_SOURCES) \ $(libparticulatecommon2D_la_SOURCES) \ $(libparticulatecommon3D_la_SOURCES) \ $(libparticulates2D_la_SOURCES) \ $(libparticulates3D_la_SOURCES) \ $(libskewsymmetric2D_la_SOURCES) \ $(libskewsymmetric3D_la_SOURCES) $(libstokes2D_la_SOURCES) \ $(libstokes3D_la_SOURCES) $(libterrain2D_la_SOURCES) \ $(libterrain3D_la_SOURCES) $(libtide2D_la_SOURCES) \ $(libtide3D_la_SOURCES) $(libtopics2D_la_SOURCES) \ $(libtopics3D_la_SOURCES) $(libwavewatch2D_la_SOURCES) \ $(rsurface2kdt_SOURCES) DIST_SOURCES = $(libagmg2D_la_SOURCES) $(libagmg3D_la_SOURCES) \ $(libbubbles2D_la_SOURCES) $(libbubbles3D_la_SOURCES) \ $(libculvert2D_la_SOURCES) $(libdf33D_la_SOURCES) \ $(libelectrohydro2D_la_SOURCES) \ $(libelectrohydro3D_la_SOURCES) $(libfft2D_la_SOURCES) \ $(libfft3D_la_SOURCES) $(libhypre2D_la_SOURCES) \ $(libhypre3D_la_SOURCES) $(liblayered2D_la_SOURCES) \ $(liblis2D_la_SOURCES) $(liblis3D_la_SOURCES) \ $(libmap2D_la_SOURCES) $(libmap3D_la_SOURCES) \ $(libode2D_la_SOURCES) $(libode3D_la_SOURCES) \ $(libokada2D_la_SOURCES) $(libokada3D_la_SOURCES) \ $(libparticulatecommon2D_la_SOURCES) \ $(libparticulatecommon3D_la_SOURCES) \ $(libparticulates2D_la_SOURCES) \ $(libparticulates3D_la_SOURCES) \ $(libskewsymmetric2D_la_SOURCES) \ $(libskewsymmetric3D_la_SOURCES) $(libstokes2D_la_SOURCES) \ $(libstokes3D_la_SOURCES) $(libterrain2D_la_SOURCES) \ $(libterrain3D_la_SOURCES) $(libtide2D_la_SOURCES) \ $(libtide3D_la_SOURCES) $(libtopics2D_la_SOURCES) \ $(libtopics3D_la_SOURCES) $(libwavewatch2D_la_SOURCES) \ $(rsurface2kdt_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ SUBDIRS = RStarTree kdt fes2004 wavewatch culvert AM_CPPFLAGS = -DGFS_MODULES_DIR=\"$(libdir)/gerris\" INCLUDES = -I$(top_srcdir)/src -I$(includedir) \ -DG_LOG_DOMAIN=\"Gfs-modules\" $(GTS_CFLAGS) @HAS_LIBPROJ_TRUE@MAP = libmap2D.la libmap3D.la @BUILD_TIDE_TRUE@TIDE = libtide2D.la libtide3D.la @BUILD_STOKES_TRUE@STOKES = libstokes2D.la libstokes3D.la @BUILD_WAVEWATCH_TRUE@WAVEWATCH = libwavewatch2D.la @BUILD_HYPRE_TRUE@HYPRE = libhypre2D.la libhypre3D.la @BUILD_LIS_TRUE@LIS = liblis2D.la liblis3D.la @BUILD_AGMG_TRUE@AGMG = libagmg2D.la libagmg3D.la @BUILD_ODE_TRUE@ODE = libode2D.la libode3D.la @HAS_GSL_TRUE@BUBBLES = libbubbles2D.la libbubbles3D.la @HAS_FFTW3_TRUE@FFT = libfft2D.la libfft3D.la pkglib_LTLIBRARIES = \ $(MAP) \ libterrain2D.la \ libterrain3D.la \ libparticulates2D.la \ libparticulates3D.la \ libokada2D.la \ libokada3D.la \ libdf33D.la \ libelectrohydro2D.la \ libelectrohydro3D.la \ libskewsymmetric2D.la \ libskewsymmetric3D.la \ libtopics2D.la \ libtopics3D.la \ libculvert2D.la \ liblayered2D.la \ $(TIDE) \ $(STOKES) \ $(WAVEWATCH) \ $(HYPRE) \ $(LIS) \ $(AGMG) \ $(ODE) \ $(BUBBLES) \ $(FFT) AM_LDFLAGS = $(NO_UNDEFINED)\ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)\ -release $(LT_RELEASE) -export-dynamic -module libmap3D_la_SOURCES = map.c libmap3D_la_LIBADD = $(GFS3D_LIBS) -lproj libmap2D_la_SOURCES = map.c libmap2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libmap2D_la_LIBADD = $(GFS2D_LIBS) -lproj KDTLIBS = -Lkdt -lkdt -lm KDTDEPS = kdt/libkdt.la libterrain3D_la_SOURCES = terrain.c libterrain3D_la_LIBADD = $(GFS3D_LIBS) $(KDTLIBS) libterrain3D_la_DEPENDENCIES = $(KDTDEPS) libterrain2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libterrain2D_la_SOURCES = terrain.c libterrain2D_la_LIBADD = $(GFS2D_LIBS) $(KDTLIBS) libterrain2D_la_DEPENDENCIES = $(KDTDEPS) libtide3D_la_SOURCES = tide.c libtide3D_la_CFLAGS = $(AM_CFLAGS) $(GSL_CFLAGS) libtide3D_la_LIBADD = $(GFS3D_LIBS) -Lfes2004 -lfes -lnetcdf $(GSL_LIBS) libtide2D_la_SOURCES = tide.c libtide2D_la_CFLAGS = $(AM_CFLAGS) $(GSL_CFLAGS) -DFTT_2D=1 libtide2D_la_LIBADD = $(GFS2D_LIBS) -Lfes2004 -lfes -lnetcdf $(GSL_LIBS) libstokes3D_la_SOURCES = stokes.c CW263.f libstokes3D_la_CFLAGS = $(AM_CFLAGS) libstokes3D_la_LIBADD = $(GFS3D_LIBS) libstokes2D_la_SOURCES = stokes.c CW263.f libstokes2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libstokes2D_la_LIBADD = $(GFS2D_LIBS) libwavewatch2D_la_SOURCES = wavewatch.c libwavewatch2D_la_LIBADD = $(GFS2D_LIBS) -Lwavewatch -lwavewatch -L/usr/lib/gcc/i486-linux-gnu/4.2 -lgfortran libwavewatch2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 \ -DW3SRCE=`nm wavewatch/libwavewatch.a | grep w3srce | awk '{ if ($$2 == "T") print $$3; }'` \ -DGFSW3INIT=`nm wavewatch/libwavewatch.a | grep gfsw3_init | awk '{ if ($$2 == "T") print $$3; }'` libwavewatch2D_la_DEPENDENCIES = wavewatch/libwavewatch.a libode3D_la_SOURCES = ode.c libode3D_la_CFLAGS = $(AM_CFLAGS) $(ODE_CFLAGS) libode3D_la_LIBADD = $(GFS3D_LIBS) $(ODE_LIBS) libode2D_la_SOURCES = ode.c libode2D_la_CFLAGS = $(AM_CFLAGS) $(ODE_CFLAGS) -DFTT_2D=1 libode2D_la_LIBADD = $(GFS2D_LIBS) $(ODE_LIBS) rsurface2kdt_SOURCES = rsurface2kdt.c rsurface.c rsurface.h rsurface2kdt_LDADD = -LRStarTree -lcSmRST $(KDTLIBS) rsurface2kdt_CFLAGS = $(AM_CFLAGS) rsurface2kdt_DEPENDENCIES = $(KDTDEPS) noinst_LTLIBRARIES = libparticulatecommon2D.la libparticulatecommon3D.la libparticulatecommon3D_la_SOURCES = particulatecommon.c particulatecommon.h libparticulatecommon3D_la_CFLAGS = $(AM_CFLAGS) libparticulatecommon2D_la_SOURCES = particulatecommon.c particulatecommon.h libparticulatecommon2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libparticulates3D_la_SOURCES = particulates.c libparticulates3D_la_CFLAGS = $(AM_CFLAGS) libparticulates3D_la_LIBADD = libparticulatecommon3D.la $(GFS3D_LIBS) libparticulates3D_la_DEPENDENCIES = libparticulatecommon3D.la libparticulates2D_la_SOURCES = particulates.c libparticulates2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libparticulates2D_la_LIBADD = libparticulatecommon2D.la $(GFS2D_LIBS) libparticulates2D_la_DEPENDENCIES = libparticulatecommon2D.la libbubbles3D_la_SOURCES = bubbles.c libbubbles3D_la_CFLAGS = $(AM_CFLAGS) $(GSL_CFLAGS) libbubbles3D_la_LIBADD = libparticulatecommon3D.la $(GFS3D_LIBS) $(GSL_LIBS) libbubbles3D_la_DEPENDENCIES = libparticulatecommon3D.la libbubbles2D_la_SOURCES = bubbles.c libbubbles2D_la_CFLAGS = $(AM_CFLAGS) $(GSL_CFLAGS) -DFTT_2D=1 libbubbles2D_la_LIBADD = libparticulatecommon2D.la $(GFS2D_LIBS) $(GSL_LIBS) libbubbles2D_la_DEPENDENCIES = libparticulatecommon2D.la libfft3D_la_SOURCES = fft.c libfft3D_la_CFLAGS = $(AM_CFLAGS) $(FFTW3_CFLAGS) libfft3D_la_LIBADD = $(GFS3D_LIBS) $(FFTW3_LIBS) libfft2D_la_SOURCES = fft.c libfft2D_la_CFLAGS = $(AM_CFLAGS) $(FFTW3_CFLAGS) -DFTT_2D=1 libfft2D_la_LIBADD = $(GFS2D_LIBS) $(FFTW3_LIBS) libhypre3D_la_SOURCES = hypre.c libhypre3D_la_CFLAGS = $(AM_CFLAGS) libhypre3D_la_LIBADD = $(GFS3D_LIBS) -lHYPRE -lm libhypre2D_la_SOURCES = hypre.c libhypre2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libhypre2D_la_LIBADD = $(GFS2D_LIBS) -lHYPRE -lm liblis3D_la_SOURCES = lis.c liblis3D_la_CFLAGS = $(AM_CFLAGS) liblis3D_la_LIBADD = $(GFS3D_LIBS) -llis -lgfortran -lm liblis2D_la_SOURCES = lis.c liblis2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 liblis2D_la_LIBADD = $(GFS2D_LIBS) -llis -lgfortran -lm libagmg3D_la_SOURCES = agmg.c dagmg.f90 libagmg3D_la_CFLAGS = $(AM_CFLAGS) libagmg3D_la_LIBADD = $(GFS3D_LIBS) -llapack -lblas -lgfortran -lm libagmg2D_la_SOURCES = agmg.c dagmg.f90 libagmg2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libagmg2D_la_LIBADD = $(GFS2D_LIBS) -llapack -lblas -lgfortran -lm libokada3D_la_SOURCES = okada.c libokada3D_la_CFLAGS = $(AM_CFLAGS) libokada3D_la_LIBADD = $(GFS3D_LIBS) libokada2D_la_SOURCES = okada.c libokada2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libokada2D_la_LIBADD = $(GFS2D_LIBS) libdf33D_la_SOURCES = df3.c libdf33D_la_CFLAGS = $(AM_CFLAGS) libdf33D_la_LIBADD = $(GFS3D_LIBS) libelectrohydro3D_la_SOURCES = electrohydro.c libelectrohydro3D_la_CFLAGS = $(AM_CFLAGS) libelectrohydro3D_la_LIBADD = $(GFS3D_LIBS) libelectrohydro2D_la_SOURCES = electrohydro.c libelectrohydro2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libelectrohydro2D_la_LIBADD = $(GFS2D_LIBS) libskewsymmetric3D_la_SOURCES = skewsymmetric.c libskewsymmetric3D_la_CFLAGS = $(AM_CFLAGS) libskewsymmetric3D_la_LIBADD = $(GFS3D_LIBS) libskewsymmetric2D_la_SOURCES = skewsymmetric.c libskewsymmetric2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libskewsymmetric2D_la_LIBADD = $(GFS2D_LIBS) libtopics3D_la_SOURCES = topics.c libtopics3D_la_CFLAGS = $(AM_CFLAGS) libtopics3D_la_LIBADD = $(GFS3D_LIBS) libtopics2D_la_SOURCES = topics.c libtopics2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libtopics2D_la_LIBADD = $(GFS2D_LIBS) libculvert2D_la_SOURCES = culvert.c libculvert2D_la_CFLAGS = $(AM_CFLAGS) libculvert2D_la_LIBADD = $(GFS2D_LIBS) -Lculvert -lboyd87 -lm libculvert2D_la_DEPENDENCIES = culvert/libboyd87.la liblayered2D_la_SOURCES = layered.c liblayered2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 liblayered2D_la_LIBADD = $(GFS2D_LIBS) all: all-recursive .SUFFIXES: .SUFFIXES: .c .f .f90 .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libagmg2D.la: $(libagmg2D_la_OBJECTS) $(libagmg2D_la_DEPENDENCIES) $(EXTRA_libagmg2D_la_DEPENDENCIES) $(FCLINK) $(am_libagmg2D_la_rpath) $(libagmg2D_la_OBJECTS) $(libagmg2D_la_LIBADD) $(LIBS) libagmg3D.la: $(libagmg3D_la_OBJECTS) $(libagmg3D_la_DEPENDENCIES) $(EXTRA_libagmg3D_la_DEPENDENCIES) $(FCLINK) $(am_libagmg3D_la_rpath) $(libagmg3D_la_OBJECTS) $(libagmg3D_la_LIBADD) $(LIBS) libbubbles2D.la: $(libbubbles2D_la_OBJECTS) $(libbubbles2D_la_DEPENDENCIES) $(EXTRA_libbubbles2D_la_DEPENDENCIES) $(libbubbles2D_la_LINK) $(am_libbubbles2D_la_rpath) $(libbubbles2D_la_OBJECTS) $(libbubbles2D_la_LIBADD) $(LIBS) libbubbles3D.la: $(libbubbles3D_la_OBJECTS) $(libbubbles3D_la_DEPENDENCIES) $(EXTRA_libbubbles3D_la_DEPENDENCIES) $(libbubbles3D_la_LINK) $(am_libbubbles3D_la_rpath) $(libbubbles3D_la_OBJECTS) $(libbubbles3D_la_LIBADD) $(LIBS) libculvert2D.la: $(libculvert2D_la_OBJECTS) $(libculvert2D_la_DEPENDENCIES) $(EXTRA_libculvert2D_la_DEPENDENCIES) $(libculvert2D_la_LINK) -rpath $(pkglibdir) $(libculvert2D_la_OBJECTS) $(libculvert2D_la_LIBADD) $(LIBS) libdf33D.la: $(libdf33D_la_OBJECTS) $(libdf33D_la_DEPENDENCIES) $(EXTRA_libdf33D_la_DEPENDENCIES) $(libdf33D_la_LINK) -rpath $(pkglibdir) $(libdf33D_la_OBJECTS) $(libdf33D_la_LIBADD) $(LIBS) libelectrohydro2D.la: $(libelectrohydro2D_la_OBJECTS) $(libelectrohydro2D_la_DEPENDENCIES) $(EXTRA_libelectrohydro2D_la_DEPENDENCIES) $(libelectrohydro2D_la_LINK) -rpath $(pkglibdir) $(libelectrohydro2D_la_OBJECTS) $(libelectrohydro2D_la_LIBADD) $(LIBS) libelectrohydro3D.la: $(libelectrohydro3D_la_OBJECTS) $(libelectrohydro3D_la_DEPENDENCIES) $(EXTRA_libelectrohydro3D_la_DEPENDENCIES) $(libelectrohydro3D_la_LINK) -rpath $(pkglibdir) $(libelectrohydro3D_la_OBJECTS) $(libelectrohydro3D_la_LIBADD) $(LIBS) libfft2D.la: $(libfft2D_la_OBJECTS) $(libfft2D_la_DEPENDENCIES) $(EXTRA_libfft2D_la_DEPENDENCIES) $(libfft2D_la_LINK) $(am_libfft2D_la_rpath) $(libfft2D_la_OBJECTS) $(libfft2D_la_LIBADD) $(LIBS) libfft3D.la: $(libfft3D_la_OBJECTS) $(libfft3D_la_DEPENDENCIES) $(EXTRA_libfft3D_la_DEPENDENCIES) $(libfft3D_la_LINK) $(am_libfft3D_la_rpath) $(libfft3D_la_OBJECTS) $(libfft3D_la_LIBADD) $(LIBS) libhypre2D.la: $(libhypre2D_la_OBJECTS) $(libhypre2D_la_DEPENDENCIES) $(EXTRA_libhypre2D_la_DEPENDENCIES) $(libhypre2D_la_LINK) $(am_libhypre2D_la_rpath) $(libhypre2D_la_OBJECTS) $(libhypre2D_la_LIBADD) $(LIBS) libhypre3D.la: $(libhypre3D_la_OBJECTS) $(libhypre3D_la_DEPENDENCIES) $(EXTRA_libhypre3D_la_DEPENDENCIES) $(libhypre3D_la_LINK) $(am_libhypre3D_la_rpath) $(libhypre3D_la_OBJECTS) $(libhypre3D_la_LIBADD) $(LIBS) liblayered2D.la: $(liblayered2D_la_OBJECTS) $(liblayered2D_la_DEPENDENCIES) $(EXTRA_liblayered2D_la_DEPENDENCIES) $(liblayered2D_la_LINK) -rpath $(pkglibdir) $(liblayered2D_la_OBJECTS) $(liblayered2D_la_LIBADD) $(LIBS) liblis2D.la: $(liblis2D_la_OBJECTS) $(liblis2D_la_DEPENDENCIES) $(EXTRA_liblis2D_la_DEPENDENCIES) $(liblis2D_la_LINK) $(am_liblis2D_la_rpath) $(liblis2D_la_OBJECTS) $(liblis2D_la_LIBADD) $(LIBS) liblis3D.la: $(liblis3D_la_OBJECTS) $(liblis3D_la_DEPENDENCIES) $(EXTRA_liblis3D_la_DEPENDENCIES) $(liblis3D_la_LINK) $(am_liblis3D_la_rpath) $(liblis3D_la_OBJECTS) $(liblis3D_la_LIBADD) $(LIBS) libmap2D.la: $(libmap2D_la_OBJECTS) $(libmap2D_la_DEPENDENCIES) $(EXTRA_libmap2D_la_DEPENDENCIES) $(libmap2D_la_LINK) $(am_libmap2D_la_rpath) $(libmap2D_la_OBJECTS) $(libmap2D_la_LIBADD) $(LIBS) libmap3D.la: $(libmap3D_la_OBJECTS) $(libmap3D_la_DEPENDENCIES) $(EXTRA_libmap3D_la_DEPENDENCIES) $(LINK) $(am_libmap3D_la_rpath) $(libmap3D_la_OBJECTS) $(libmap3D_la_LIBADD) $(LIBS) libode2D.la: $(libode2D_la_OBJECTS) $(libode2D_la_DEPENDENCIES) $(EXTRA_libode2D_la_DEPENDENCIES) $(libode2D_la_LINK) $(am_libode2D_la_rpath) $(libode2D_la_OBJECTS) $(libode2D_la_LIBADD) $(LIBS) libode3D.la: $(libode3D_la_OBJECTS) $(libode3D_la_DEPENDENCIES) $(EXTRA_libode3D_la_DEPENDENCIES) $(libode3D_la_LINK) $(am_libode3D_la_rpath) $(libode3D_la_OBJECTS) $(libode3D_la_LIBADD) $(LIBS) libokada2D.la: $(libokada2D_la_OBJECTS) $(libokada2D_la_DEPENDENCIES) $(EXTRA_libokada2D_la_DEPENDENCIES) $(libokada2D_la_LINK) -rpath $(pkglibdir) $(libokada2D_la_OBJECTS) $(libokada2D_la_LIBADD) $(LIBS) libokada3D.la: $(libokada3D_la_OBJECTS) $(libokada3D_la_DEPENDENCIES) $(EXTRA_libokada3D_la_DEPENDENCIES) $(libokada3D_la_LINK) -rpath $(pkglibdir) $(libokada3D_la_OBJECTS) $(libokada3D_la_LIBADD) $(LIBS) libparticulatecommon2D.la: $(libparticulatecommon2D_la_OBJECTS) $(libparticulatecommon2D_la_DEPENDENCIES) $(EXTRA_libparticulatecommon2D_la_DEPENDENCIES) $(libparticulatecommon2D_la_LINK) $(libparticulatecommon2D_la_OBJECTS) $(libparticulatecommon2D_la_LIBADD) $(LIBS) libparticulatecommon3D.la: $(libparticulatecommon3D_la_OBJECTS) $(libparticulatecommon3D_la_DEPENDENCIES) $(EXTRA_libparticulatecommon3D_la_DEPENDENCIES) $(libparticulatecommon3D_la_LINK) $(libparticulatecommon3D_la_OBJECTS) $(libparticulatecommon3D_la_LIBADD) $(LIBS) libparticulates2D.la: $(libparticulates2D_la_OBJECTS) $(libparticulates2D_la_DEPENDENCIES) $(EXTRA_libparticulates2D_la_DEPENDENCIES) $(libparticulates2D_la_LINK) -rpath $(pkglibdir) $(libparticulates2D_la_OBJECTS) $(libparticulates2D_la_LIBADD) $(LIBS) libparticulates3D.la: $(libparticulates3D_la_OBJECTS) $(libparticulates3D_la_DEPENDENCIES) $(EXTRA_libparticulates3D_la_DEPENDENCIES) $(libparticulates3D_la_LINK) -rpath $(pkglibdir) $(libparticulates3D_la_OBJECTS) $(libparticulates3D_la_LIBADD) $(LIBS) libskewsymmetric2D.la: $(libskewsymmetric2D_la_OBJECTS) $(libskewsymmetric2D_la_DEPENDENCIES) $(EXTRA_libskewsymmetric2D_la_DEPENDENCIES) $(libskewsymmetric2D_la_LINK) -rpath $(pkglibdir) $(libskewsymmetric2D_la_OBJECTS) $(libskewsymmetric2D_la_LIBADD) $(LIBS) libskewsymmetric3D.la: $(libskewsymmetric3D_la_OBJECTS) $(libskewsymmetric3D_la_DEPENDENCIES) $(EXTRA_libskewsymmetric3D_la_DEPENDENCIES) $(libskewsymmetric3D_la_LINK) -rpath $(pkglibdir) $(libskewsymmetric3D_la_OBJECTS) $(libskewsymmetric3D_la_LIBADD) $(LIBS) libstokes2D.la: $(libstokes2D_la_OBJECTS) $(libstokes2D_la_DEPENDENCIES) $(EXTRA_libstokes2D_la_DEPENDENCIES) $(F77LINK) $(am_libstokes2D_la_rpath) $(libstokes2D_la_OBJECTS) $(libstokes2D_la_LIBADD) $(LIBS) libstokes3D.la: $(libstokes3D_la_OBJECTS) $(libstokes3D_la_DEPENDENCIES) $(EXTRA_libstokes3D_la_DEPENDENCIES) $(F77LINK) $(am_libstokes3D_la_rpath) $(libstokes3D_la_OBJECTS) $(libstokes3D_la_LIBADD) $(LIBS) libterrain2D.la: $(libterrain2D_la_OBJECTS) $(libterrain2D_la_DEPENDENCIES) $(EXTRA_libterrain2D_la_DEPENDENCIES) $(libterrain2D_la_LINK) -rpath $(pkglibdir) $(libterrain2D_la_OBJECTS) $(libterrain2D_la_LIBADD) $(LIBS) libterrain3D.la: $(libterrain3D_la_OBJECTS) $(libterrain3D_la_DEPENDENCIES) $(EXTRA_libterrain3D_la_DEPENDENCIES) $(LINK) -rpath $(pkglibdir) $(libterrain3D_la_OBJECTS) $(libterrain3D_la_LIBADD) $(LIBS) libtide2D.la: $(libtide2D_la_OBJECTS) $(libtide2D_la_DEPENDENCIES) $(EXTRA_libtide2D_la_DEPENDENCIES) $(libtide2D_la_LINK) $(am_libtide2D_la_rpath) $(libtide2D_la_OBJECTS) $(libtide2D_la_LIBADD) $(LIBS) libtide3D.la: $(libtide3D_la_OBJECTS) $(libtide3D_la_DEPENDENCIES) $(EXTRA_libtide3D_la_DEPENDENCIES) $(libtide3D_la_LINK) $(am_libtide3D_la_rpath) $(libtide3D_la_OBJECTS) $(libtide3D_la_LIBADD) $(LIBS) libtopics2D.la: $(libtopics2D_la_OBJECTS) $(libtopics2D_la_DEPENDENCIES) $(EXTRA_libtopics2D_la_DEPENDENCIES) $(libtopics2D_la_LINK) -rpath $(pkglibdir) $(libtopics2D_la_OBJECTS) $(libtopics2D_la_LIBADD) $(LIBS) libtopics3D.la: $(libtopics3D_la_OBJECTS) $(libtopics3D_la_DEPENDENCIES) $(EXTRA_libtopics3D_la_DEPENDENCIES) $(libtopics3D_la_LINK) -rpath $(pkglibdir) $(libtopics3D_la_OBJECTS) $(libtopics3D_la_LIBADD) $(LIBS) libwavewatch2D.la: $(libwavewatch2D_la_OBJECTS) $(libwavewatch2D_la_DEPENDENCIES) $(EXTRA_libwavewatch2D_la_DEPENDENCIES) $(libwavewatch2D_la_LINK) $(am_libwavewatch2D_la_rpath) $(libwavewatch2D_la_OBJECTS) $(libwavewatch2D_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list rsurface2kdt$(EXEEXT): $(rsurface2kdt_OBJECTS) $(rsurface2kdt_DEPENDENCIES) $(EXTRA_rsurface2kdt_DEPENDENCIES) @rm -f rsurface2kdt$(EXEEXT) $(rsurface2kdt_LINK) $(rsurface2kdt_OBJECTS) $(rsurface2kdt_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libagmg2D_la-agmg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libagmg3D_la-agmg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbubbles2D_la-bubbles.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbubbles3D_la-bubbles.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libculvert2D_la-culvert.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdf33D_la-df3.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libelectrohydro2D_la-electrohydro.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libelectrohydro3D_la-electrohydro.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfft2D_la-fft.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfft3D_la-fft.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhypre2D_la-hypre.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhypre3D_la-hypre.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblayered2D_la-layered.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblis2D_la-lis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblis3D_la-lis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmap2D_la-map.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libode2D_la-ode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libode3D_la-ode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libokada2D_la-okada.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libokada3D_la-okada.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libparticulatecommon2D_la-particulatecommon.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libparticulatecommon3D_la-particulatecommon.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libparticulates2D_la-particulates.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libparticulates3D_la-particulates.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libskewsymmetric2D_la-skewsymmetric.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libskewsymmetric3D_la-skewsymmetric.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstokes2D_la-stokes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstokes3D_la-stokes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libterrain2D_la-terrain.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtide2D_la-tide.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtide3D_la-tide.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtopics2D_la-topics.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtopics3D_la-topics.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwavewatch2D_la-wavewatch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/map.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsurface2kdt-rsurface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsurface2kdt-rsurface2kdt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/terrain.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< libagmg2D_la-agmg.lo: agmg.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libagmg2D_la_CFLAGS) $(CFLAGS) -MT libagmg2D_la-agmg.lo -MD -MP -MF $(DEPDIR)/libagmg2D_la-agmg.Tpo -c -o libagmg2D_la-agmg.lo `test -f 'agmg.c' || echo '$(srcdir)/'`agmg.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libagmg2D_la-agmg.Tpo $(DEPDIR)/libagmg2D_la-agmg.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='agmg.c' object='libagmg2D_la-agmg.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libagmg2D_la_CFLAGS) $(CFLAGS) -c -o libagmg2D_la-agmg.lo `test -f 'agmg.c' || echo '$(srcdir)/'`agmg.c libagmg3D_la-agmg.lo: agmg.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libagmg3D_la_CFLAGS) $(CFLAGS) -MT libagmg3D_la-agmg.lo -MD -MP -MF $(DEPDIR)/libagmg3D_la-agmg.Tpo -c -o libagmg3D_la-agmg.lo `test -f 'agmg.c' || echo '$(srcdir)/'`agmg.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libagmg3D_la-agmg.Tpo $(DEPDIR)/libagmg3D_la-agmg.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='agmg.c' object='libagmg3D_la-agmg.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libagmg3D_la_CFLAGS) $(CFLAGS) -c -o libagmg3D_la-agmg.lo `test -f 'agmg.c' || echo '$(srcdir)/'`agmg.c libbubbles2D_la-bubbles.lo: bubbles.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbubbles2D_la_CFLAGS) $(CFLAGS) -MT libbubbles2D_la-bubbles.lo -MD -MP -MF $(DEPDIR)/libbubbles2D_la-bubbles.Tpo -c -o libbubbles2D_la-bubbles.lo `test -f 'bubbles.c' || echo '$(srcdir)/'`bubbles.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libbubbles2D_la-bubbles.Tpo $(DEPDIR)/libbubbles2D_la-bubbles.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bubbles.c' object='libbubbles2D_la-bubbles.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbubbles2D_la_CFLAGS) $(CFLAGS) -c -o libbubbles2D_la-bubbles.lo `test -f 'bubbles.c' || echo '$(srcdir)/'`bubbles.c libbubbles3D_la-bubbles.lo: bubbles.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbubbles3D_la_CFLAGS) $(CFLAGS) -MT libbubbles3D_la-bubbles.lo -MD -MP -MF $(DEPDIR)/libbubbles3D_la-bubbles.Tpo -c -o libbubbles3D_la-bubbles.lo `test -f 'bubbles.c' || echo '$(srcdir)/'`bubbles.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libbubbles3D_la-bubbles.Tpo $(DEPDIR)/libbubbles3D_la-bubbles.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bubbles.c' object='libbubbles3D_la-bubbles.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbubbles3D_la_CFLAGS) $(CFLAGS) -c -o libbubbles3D_la-bubbles.lo `test -f 'bubbles.c' || echo '$(srcdir)/'`bubbles.c libculvert2D_la-culvert.lo: culvert.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libculvert2D_la_CFLAGS) $(CFLAGS) -MT libculvert2D_la-culvert.lo -MD -MP -MF $(DEPDIR)/libculvert2D_la-culvert.Tpo -c -o libculvert2D_la-culvert.lo `test -f 'culvert.c' || echo '$(srcdir)/'`culvert.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libculvert2D_la-culvert.Tpo $(DEPDIR)/libculvert2D_la-culvert.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='culvert.c' object='libculvert2D_la-culvert.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libculvert2D_la_CFLAGS) $(CFLAGS) -c -o libculvert2D_la-culvert.lo `test -f 'culvert.c' || echo '$(srcdir)/'`culvert.c libdf33D_la-df3.lo: df3.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdf33D_la_CFLAGS) $(CFLAGS) -MT libdf33D_la-df3.lo -MD -MP -MF $(DEPDIR)/libdf33D_la-df3.Tpo -c -o libdf33D_la-df3.lo `test -f 'df3.c' || echo '$(srcdir)/'`df3.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libdf33D_la-df3.Tpo $(DEPDIR)/libdf33D_la-df3.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='df3.c' object='libdf33D_la-df3.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdf33D_la_CFLAGS) $(CFLAGS) -c -o libdf33D_la-df3.lo `test -f 'df3.c' || echo '$(srcdir)/'`df3.c libelectrohydro2D_la-electrohydro.lo: electrohydro.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libelectrohydro2D_la_CFLAGS) $(CFLAGS) -MT libelectrohydro2D_la-electrohydro.lo -MD -MP -MF $(DEPDIR)/libelectrohydro2D_la-electrohydro.Tpo -c -o libelectrohydro2D_la-electrohydro.lo `test -f 'electrohydro.c' || echo '$(srcdir)/'`electrohydro.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libelectrohydro2D_la-electrohydro.Tpo $(DEPDIR)/libelectrohydro2D_la-electrohydro.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='electrohydro.c' object='libelectrohydro2D_la-electrohydro.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libelectrohydro2D_la_CFLAGS) $(CFLAGS) -c -o libelectrohydro2D_la-electrohydro.lo `test -f 'electrohydro.c' || echo '$(srcdir)/'`electrohydro.c libelectrohydro3D_la-electrohydro.lo: electrohydro.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libelectrohydro3D_la_CFLAGS) $(CFLAGS) -MT libelectrohydro3D_la-electrohydro.lo -MD -MP -MF $(DEPDIR)/libelectrohydro3D_la-electrohydro.Tpo -c -o libelectrohydro3D_la-electrohydro.lo `test -f 'electrohydro.c' || echo '$(srcdir)/'`electrohydro.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libelectrohydro3D_la-electrohydro.Tpo $(DEPDIR)/libelectrohydro3D_la-electrohydro.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='electrohydro.c' object='libelectrohydro3D_la-electrohydro.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libelectrohydro3D_la_CFLAGS) $(CFLAGS) -c -o libelectrohydro3D_la-electrohydro.lo `test -f 'electrohydro.c' || echo '$(srcdir)/'`electrohydro.c libfft2D_la-fft.lo: fft.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfft2D_la_CFLAGS) $(CFLAGS) -MT libfft2D_la-fft.lo -MD -MP -MF $(DEPDIR)/libfft2D_la-fft.Tpo -c -o libfft2D_la-fft.lo `test -f 'fft.c' || echo '$(srcdir)/'`fft.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libfft2D_la-fft.Tpo $(DEPDIR)/libfft2D_la-fft.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fft.c' object='libfft2D_la-fft.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfft2D_la_CFLAGS) $(CFLAGS) -c -o libfft2D_la-fft.lo `test -f 'fft.c' || echo '$(srcdir)/'`fft.c libfft3D_la-fft.lo: fft.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfft3D_la_CFLAGS) $(CFLAGS) -MT libfft3D_la-fft.lo -MD -MP -MF $(DEPDIR)/libfft3D_la-fft.Tpo -c -o libfft3D_la-fft.lo `test -f 'fft.c' || echo '$(srcdir)/'`fft.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libfft3D_la-fft.Tpo $(DEPDIR)/libfft3D_la-fft.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fft.c' object='libfft3D_la-fft.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfft3D_la_CFLAGS) $(CFLAGS) -c -o libfft3D_la-fft.lo `test -f 'fft.c' || echo '$(srcdir)/'`fft.c libhypre2D_la-hypre.lo: hypre.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhypre2D_la_CFLAGS) $(CFLAGS) -MT libhypre2D_la-hypre.lo -MD -MP -MF $(DEPDIR)/libhypre2D_la-hypre.Tpo -c -o libhypre2D_la-hypre.lo `test -f 'hypre.c' || echo '$(srcdir)/'`hypre.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhypre2D_la-hypre.Tpo $(DEPDIR)/libhypre2D_la-hypre.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hypre.c' object='libhypre2D_la-hypre.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhypre2D_la_CFLAGS) $(CFLAGS) -c -o libhypre2D_la-hypre.lo `test -f 'hypre.c' || echo '$(srcdir)/'`hypre.c libhypre3D_la-hypre.lo: hypre.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhypre3D_la_CFLAGS) $(CFLAGS) -MT libhypre3D_la-hypre.lo -MD -MP -MF $(DEPDIR)/libhypre3D_la-hypre.Tpo -c -o libhypre3D_la-hypre.lo `test -f 'hypre.c' || echo '$(srcdir)/'`hypre.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhypre3D_la-hypre.Tpo $(DEPDIR)/libhypre3D_la-hypre.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hypre.c' object='libhypre3D_la-hypre.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhypre3D_la_CFLAGS) $(CFLAGS) -c -o libhypre3D_la-hypre.lo `test -f 'hypre.c' || echo '$(srcdir)/'`hypre.c liblayered2D_la-layered.lo: layered.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblayered2D_la_CFLAGS) $(CFLAGS) -MT liblayered2D_la-layered.lo -MD -MP -MF $(DEPDIR)/liblayered2D_la-layered.Tpo -c -o liblayered2D_la-layered.lo `test -f 'layered.c' || echo '$(srcdir)/'`layered.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblayered2D_la-layered.Tpo $(DEPDIR)/liblayered2D_la-layered.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='layered.c' object='liblayered2D_la-layered.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblayered2D_la_CFLAGS) $(CFLAGS) -c -o liblayered2D_la-layered.lo `test -f 'layered.c' || echo '$(srcdir)/'`layered.c liblis2D_la-lis.lo: lis.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblis2D_la_CFLAGS) $(CFLAGS) -MT liblis2D_la-lis.lo -MD -MP -MF $(DEPDIR)/liblis2D_la-lis.Tpo -c -o liblis2D_la-lis.lo `test -f 'lis.c' || echo '$(srcdir)/'`lis.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblis2D_la-lis.Tpo $(DEPDIR)/liblis2D_la-lis.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lis.c' object='liblis2D_la-lis.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblis2D_la_CFLAGS) $(CFLAGS) -c -o liblis2D_la-lis.lo `test -f 'lis.c' || echo '$(srcdir)/'`lis.c liblis3D_la-lis.lo: lis.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblis3D_la_CFLAGS) $(CFLAGS) -MT liblis3D_la-lis.lo -MD -MP -MF $(DEPDIR)/liblis3D_la-lis.Tpo -c -o liblis3D_la-lis.lo `test -f 'lis.c' || echo '$(srcdir)/'`lis.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblis3D_la-lis.Tpo $(DEPDIR)/liblis3D_la-lis.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lis.c' object='liblis3D_la-lis.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblis3D_la_CFLAGS) $(CFLAGS) -c -o liblis3D_la-lis.lo `test -f 'lis.c' || echo '$(srcdir)/'`lis.c libmap2D_la-map.lo: map.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmap2D_la_CFLAGS) $(CFLAGS) -MT libmap2D_la-map.lo -MD -MP -MF $(DEPDIR)/libmap2D_la-map.Tpo -c -o libmap2D_la-map.lo `test -f 'map.c' || echo '$(srcdir)/'`map.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libmap2D_la-map.Tpo $(DEPDIR)/libmap2D_la-map.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='map.c' object='libmap2D_la-map.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmap2D_la_CFLAGS) $(CFLAGS) -c -o libmap2D_la-map.lo `test -f 'map.c' || echo '$(srcdir)/'`map.c libode2D_la-ode.lo: ode.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libode2D_la_CFLAGS) $(CFLAGS) -MT libode2D_la-ode.lo -MD -MP -MF $(DEPDIR)/libode2D_la-ode.Tpo -c -o libode2D_la-ode.lo `test -f 'ode.c' || echo '$(srcdir)/'`ode.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libode2D_la-ode.Tpo $(DEPDIR)/libode2D_la-ode.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ode.c' object='libode2D_la-ode.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libode2D_la_CFLAGS) $(CFLAGS) -c -o libode2D_la-ode.lo `test -f 'ode.c' || echo '$(srcdir)/'`ode.c libode3D_la-ode.lo: ode.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libode3D_la_CFLAGS) $(CFLAGS) -MT libode3D_la-ode.lo -MD -MP -MF $(DEPDIR)/libode3D_la-ode.Tpo -c -o libode3D_la-ode.lo `test -f 'ode.c' || echo '$(srcdir)/'`ode.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libode3D_la-ode.Tpo $(DEPDIR)/libode3D_la-ode.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ode.c' object='libode3D_la-ode.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libode3D_la_CFLAGS) $(CFLAGS) -c -o libode3D_la-ode.lo `test -f 'ode.c' || echo '$(srcdir)/'`ode.c libokada2D_la-okada.lo: okada.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libokada2D_la_CFLAGS) $(CFLAGS) -MT libokada2D_la-okada.lo -MD -MP -MF $(DEPDIR)/libokada2D_la-okada.Tpo -c -o libokada2D_la-okada.lo `test -f 'okada.c' || echo '$(srcdir)/'`okada.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libokada2D_la-okada.Tpo $(DEPDIR)/libokada2D_la-okada.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='okada.c' object='libokada2D_la-okada.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libokada2D_la_CFLAGS) $(CFLAGS) -c -o libokada2D_la-okada.lo `test -f 'okada.c' || echo '$(srcdir)/'`okada.c libokada3D_la-okada.lo: okada.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libokada3D_la_CFLAGS) $(CFLAGS) -MT libokada3D_la-okada.lo -MD -MP -MF $(DEPDIR)/libokada3D_la-okada.Tpo -c -o libokada3D_la-okada.lo `test -f 'okada.c' || echo '$(srcdir)/'`okada.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libokada3D_la-okada.Tpo $(DEPDIR)/libokada3D_la-okada.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='okada.c' object='libokada3D_la-okada.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libokada3D_la_CFLAGS) $(CFLAGS) -c -o libokada3D_la-okada.lo `test -f 'okada.c' || echo '$(srcdir)/'`okada.c libparticulatecommon2D_la-particulatecommon.lo: particulatecommon.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libparticulatecommon2D_la_CFLAGS) $(CFLAGS) -MT libparticulatecommon2D_la-particulatecommon.lo -MD -MP -MF $(DEPDIR)/libparticulatecommon2D_la-particulatecommon.Tpo -c -o libparticulatecommon2D_la-particulatecommon.lo `test -f 'particulatecommon.c' || echo '$(srcdir)/'`particulatecommon.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libparticulatecommon2D_la-particulatecommon.Tpo $(DEPDIR)/libparticulatecommon2D_la-particulatecommon.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='particulatecommon.c' object='libparticulatecommon2D_la-particulatecommon.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libparticulatecommon2D_la_CFLAGS) $(CFLAGS) -c -o libparticulatecommon2D_la-particulatecommon.lo `test -f 'particulatecommon.c' || echo '$(srcdir)/'`particulatecommon.c libparticulatecommon3D_la-particulatecommon.lo: particulatecommon.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libparticulatecommon3D_la_CFLAGS) $(CFLAGS) -MT libparticulatecommon3D_la-particulatecommon.lo -MD -MP -MF $(DEPDIR)/libparticulatecommon3D_la-particulatecommon.Tpo -c -o libparticulatecommon3D_la-particulatecommon.lo `test -f 'particulatecommon.c' || echo '$(srcdir)/'`particulatecommon.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libparticulatecommon3D_la-particulatecommon.Tpo $(DEPDIR)/libparticulatecommon3D_la-particulatecommon.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='particulatecommon.c' object='libparticulatecommon3D_la-particulatecommon.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libparticulatecommon3D_la_CFLAGS) $(CFLAGS) -c -o libparticulatecommon3D_la-particulatecommon.lo `test -f 'particulatecommon.c' || echo '$(srcdir)/'`particulatecommon.c libparticulates2D_la-particulates.lo: particulates.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libparticulates2D_la_CFLAGS) $(CFLAGS) -MT libparticulates2D_la-particulates.lo -MD -MP -MF $(DEPDIR)/libparticulates2D_la-particulates.Tpo -c -o libparticulates2D_la-particulates.lo `test -f 'particulates.c' || echo '$(srcdir)/'`particulates.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libparticulates2D_la-particulates.Tpo $(DEPDIR)/libparticulates2D_la-particulates.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='particulates.c' object='libparticulates2D_la-particulates.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libparticulates2D_la_CFLAGS) $(CFLAGS) -c -o libparticulates2D_la-particulates.lo `test -f 'particulates.c' || echo '$(srcdir)/'`particulates.c libparticulates3D_la-particulates.lo: particulates.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libparticulates3D_la_CFLAGS) $(CFLAGS) -MT libparticulates3D_la-particulates.lo -MD -MP -MF $(DEPDIR)/libparticulates3D_la-particulates.Tpo -c -o libparticulates3D_la-particulates.lo `test -f 'particulates.c' || echo '$(srcdir)/'`particulates.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libparticulates3D_la-particulates.Tpo $(DEPDIR)/libparticulates3D_la-particulates.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='particulates.c' object='libparticulates3D_la-particulates.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libparticulates3D_la_CFLAGS) $(CFLAGS) -c -o libparticulates3D_la-particulates.lo `test -f 'particulates.c' || echo '$(srcdir)/'`particulates.c libskewsymmetric2D_la-skewsymmetric.lo: skewsymmetric.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libskewsymmetric2D_la_CFLAGS) $(CFLAGS) -MT libskewsymmetric2D_la-skewsymmetric.lo -MD -MP -MF $(DEPDIR)/libskewsymmetric2D_la-skewsymmetric.Tpo -c -o libskewsymmetric2D_la-skewsymmetric.lo `test -f 'skewsymmetric.c' || echo '$(srcdir)/'`skewsymmetric.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libskewsymmetric2D_la-skewsymmetric.Tpo $(DEPDIR)/libskewsymmetric2D_la-skewsymmetric.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='skewsymmetric.c' object='libskewsymmetric2D_la-skewsymmetric.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libskewsymmetric2D_la_CFLAGS) $(CFLAGS) -c -o libskewsymmetric2D_la-skewsymmetric.lo `test -f 'skewsymmetric.c' || echo '$(srcdir)/'`skewsymmetric.c libskewsymmetric3D_la-skewsymmetric.lo: skewsymmetric.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libskewsymmetric3D_la_CFLAGS) $(CFLAGS) -MT libskewsymmetric3D_la-skewsymmetric.lo -MD -MP -MF $(DEPDIR)/libskewsymmetric3D_la-skewsymmetric.Tpo -c -o libskewsymmetric3D_la-skewsymmetric.lo `test -f 'skewsymmetric.c' || echo '$(srcdir)/'`skewsymmetric.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libskewsymmetric3D_la-skewsymmetric.Tpo $(DEPDIR)/libskewsymmetric3D_la-skewsymmetric.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='skewsymmetric.c' object='libskewsymmetric3D_la-skewsymmetric.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libskewsymmetric3D_la_CFLAGS) $(CFLAGS) -c -o libskewsymmetric3D_la-skewsymmetric.lo `test -f 'skewsymmetric.c' || echo '$(srcdir)/'`skewsymmetric.c libstokes2D_la-stokes.lo: stokes.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libstokes2D_la_CFLAGS) $(CFLAGS) -MT libstokes2D_la-stokes.lo -MD -MP -MF $(DEPDIR)/libstokes2D_la-stokes.Tpo -c -o libstokes2D_la-stokes.lo `test -f 'stokes.c' || echo '$(srcdir)/'`stokes.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libstokes2D_la-stokes.Tpo $(DEPDIR)/libstokes2D_la-stokes.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stokes.c' object='libstokes2D_la-stokes.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libstokes2D_la_CFLAGS) $(CFLAGS) -c -o libstokes2D_la-stokes.lo `test -f 'stokes.c' || echo '$(srcdir)/'`stokes.c libstokes3D_la-stokes.lo: stokes.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libstokes3D_la_CFLAGS) $(CFLAGS) -MT libstokes3D_la-stokes.lo -MD -MP -MF $(DEPDIR)/libstokes3D_la-stokes.Tpo -c -o libstokes3D_la-stokes.lo `test -f 'stokes.c' || echo '$(srcdir)/'`stokes.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libstokes3D_la-stokes.Tpo $(DEPDIR)/libstokes3D_la-stokes.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stokes.c' object='libstokes3D_la-stokes.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libstokes3D_la_CFLAGS) $(CFLAGS) -c -o libstokes3D_la-stokes.lo `test -f 'stokes.c' || echo '$(srcdir)/'`stokes.c libterrain2D_la-terrain.lo: terrain.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libterrain2D_la_CFLAGS) $(CFLAGS) -MT libterrain2D_la-terrain.lo -MD -MP -MF $(DEPDIR)/libterrain2D_la-terrain.Tpo -c -o libterrain2D_la-terrain.lo `test -f 'terrain.c' || echo '$(srcdir)/'`terrain.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libterrain2D_la-terrain.Tpo $(DEPDIR)/libterrain2D_la-terrain.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terrain.c' object='libterrain2D_la-terrain.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libterrain2D_la_CFLAGS) $(CFLAGS) -c -o libterrain2D_la-terrain.lo `test -f 'terrain.c' || echo '$(srcdir)/'`terrain.c libtide2D_la-tide.lo: tide.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtide2D_la_CFLAGS) $(CFLAGS) -MT libtide2D_la-tide.lo -MD -MP -MF $(DEPDIR)/libtide2D_la-tide.Tpo -c -o libtide2D_la-tide.lo `test -f 'tide.c' || echo '$(srcdir)/'`tide.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libtide2D_la-tide.Tpo $(DEPDIR)/libtide2D_la-tide.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tide.c' object='libtide2D_la-tide.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtide2D_la_CFLAGS) $(CFLAGS) -c -o libtide2D_la-tide.lo `test -f 'tide.c' || echo '$(srcdir)/'`tide.c libtide3D_la-tide.lo: tide.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtide3D_la_CFLAGS) $(CFLAGS) -MT libtide3D_la-tide.lo -MD -MP -MF $(DEPDIR)/libtide3D_la-tide.Tpo -c -o libtide3D_la-tide.lo `test -f 'tide.c' || echo '$(srcdir)/'`tide.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libtide3D_la-tide.Tpo $(DEPDIR)/libtide3D_la-tide.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tide.c' object='libtide3D_la-tide.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtide3D_la_CFLAGS) $(CFLAGS) -c -o libtide3D_la-tide.lo `test -f 'tide.c' || echo '$(srcdir)/'`tide.c libtopics2D_la-topics.lo: topics.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtopics2D_la_CFLAGS) $(CFLAGS) -MT libtopics2D_la-topics.lo -MD -MP -MF $(DEPDIR)/libtopics2D_la-topics.Tpo -c -o libtopics2D_la-topics.lo `test -f 'topics.c' || echo '$(srcdir)/'`topics.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libtopics2D_la-topics.Tpo $(DEPDIR)/libtopics2D_la-topics.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='topics.c' object='libtopics2D_la-topics.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtopics2D_la_CFLAGS) $(CFLAGS) -c -o libtopics2D_la-topics.lo `test -f 'topics.c' || echo '$(srcdir)/'`topics.c libtopics3D_la-topics.lo: topics.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtopics3D_la_CFLAGS) $(CFLAGS) -MT libtopics3D_la-topics.lo -MD -MP -MF $(DEPDIR)/libtopics3D_la-topics.Tpo -c -o libtopics3D_la-topics.lo `test -f 'topics.c' || echo '$(srcdir)/'`topics.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libtopics3D_la-topics.Tpo $(DEPDIR)/libtopics3D_la-topics.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='topics.c' object='libtopics3D_la-topics.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtopics3D_la_CFLAGS) $(CFLAGS) -c -o libtopics3D_la-topics.lo `test -f 'topics.c' || echo '$(srcdir)/'`topics.c libwavewatch2D_la-wavewatch.lo: wavewatch.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwavewatch2D_la_CFLAGS) $(CFLAGS) -MT libwavewatch2D_la-wavewatch.lo -MD -MP -MF $(DEPDIR)/libwavewatch2D_la-wavewatch.Tpo -c -o libwavewatch2D_la-wavewatch.lo `test -f 'wavewatch.c' || echo '$(srcdir)/'`wavewatch.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libwavewatch2D_la-wavewatch.Tpo $(DEPDIR)/libwavewatch2D_la-wavewatch.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='wavewatch.c' object='libwavewatch2D_la-wavewatch.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwavewatch2D_la_CFLAGS) $(CFLAGS) -c -o libwavewatch2D_la-wavewatch.lo `test -f 'wavewatch.c' || echo '$(srcdir)/'`wavewatch.c rsurface2kdt-rsurface2kdt.o: rsurface2kdt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rsurface2kdt_CFLAGS) $(CFLAGS) -MT rsurface2kdt-rsurface2kdt.o -MD -MP -MF $(DEPDIR)/rsurface2kdt-rsurface2kdt.Tpo -c -o rsurface2kdt-rsurface2kdt.o `test -f 'rsurface2kdt.c' || echo '$(srcdir)/'`rsurface2kdt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rsurface2kdt-rsurface2kdt.Tpo $(DEPDIR)/rsurface2kdt-rsurface2kdt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rsurface2kdt.c' object='rsurface2kdt-rsurface2kdt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rsurface2kdt_CFLAGS) $(CFLAGS) -c -o rsurface2kdt-rsurface2kdt.o `test -f 'rsurface2kdt.c' || echo '$(srcdir)/'`rsurface2kdt.c rsurface2kdt-rsurface2kdt.obj: rsurface2kdt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rsurface2kdt_CFLAGS) $(CFLAGS) -MT rsurface2kdt-rsurface2kdt.obj -MD -MP -MF $(DEPDIR)/rsurface2kdt-rsurface2kdt.Tpo -c -o rsurface2kdt-rsurface2kdt.obj `if test -f 'rsurface2kdt.c'; then $(CYGPATH_W) 'rsurface2kdt.c'; else $(CYGPATH_W) '$(srcdir)/rsurface2kdt.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rsurface2kdt-rsurface2kdt.Tpo $(DEPDIR)/rsurface2kdt-rsurface2kdt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rsurface2kdt.c' object='rsurface2kdt-rsurface2kdt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rsurface2kdt_CFLAGS) $(CFLAGS) -c -o rsurface2kdt-rsurface2kdt.obj `if test -f 'rsurface2kdt.c'; then $(CYGPATH_W) 'rsurface2kdt.c'; else $(CYGPATH_W) '$(srcdir)/rsurface2kdt.c'; fi` rsurface2kdt-rsurface.o: rsurface.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rsurface2kdt_CFLAGS) $(CFLAGS) -MT rsurface2kdt-rsurface.o -MD -MP -MF $(DEPDIR)/rsurface2kdt-rsurface.Tpo -c -o rsurface2kdt-rsurface.o `test -f 'rsurface.c' || echo '$(srcdir)/'`rsurface.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rsurface2kdt-rsurface.Tpo $(DEPDIR)/rsurface2kdt-rsurface.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rsurface.c' object='rsurface2kdt-rsurface.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rsurface2kdt_CFLAGS) $(CFLAGS) -c -o rsurface2kdt-rsurface.o `test -f 'rsurface.c' || echo '$(srcdir)/'`rsurface.c rsurface2kdt-rsurface.obj: rsurface.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rsurface2kdt_CFLAGS) $(CFLAGS) -MT rsurface2kdt-rsurface.obj -MD -MP -MF $(DEPDIR)/rsurface2kdt-rsurface.Tpo -c -o rsurface2kdt-rsurface.obj `if test -f 'rsurface.c'; then $(CYGPATH_W) 'rsurface.c'; else $(CYGPATH_W) '$(srcdir)/rsurface.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rsurface2kdt-rsurface.Tpo $(DEPDIR)/rsurface2kdt-rsurface.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rsurface.c' object='rsurface2kdt-rsurface.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rsurface2kdt_CFLAGS) $(CFLAGS) -c -o rsurface2kdt-rsurface.obj `if test -f 'rsurface.c'; then $(CYGPATH_W) 'rsurface.c'; else $(CYGPATH_W) '$(srcdir)/rsurface.c'; fi` .f.o: $(F77COMPILE) -c -o $@ $< .f.obj: $(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .f.lo: $(LTF77COMPILE) -c -o $@ $< .f90.o: $(FCCOMPILE) -c -o $@ $< .f90.obj: $(FCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .f90.lo: $(LTFCCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-pkglibLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-pkglibLTLIBRARIES .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-pkglibLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkglibLTLIBRARIES install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-pkglibLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/modules/tide.c0000644000175100017510000002615212250371171014431 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2008 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include "fes2004/fes2004_lib.h" #include "variable.h" /* Heavily based on GfsBcFlather */ static gchar * reference = "1950/01/01-00:00:00-UTC"; static gdouble deltat = 0.; /* GfsBcTide: Header */ typedef struct _GfsBcTide GfsBcTide; struct _GfsBcTide { /*< private >*/ GfsBcValue parent; gdouble ** amplitude, ** phase, x, size; /*< public >*/ GfsVariable * h, * p; }; #define GFS_BC_TIDE(obj) GTS_OBJECT_CAST (obj,\ GfsBcTide,\ gfs_bc_tide_class ()) #define GFS_IS_BC_TIDE(obj) (gts_object_is_from_class (obj,\ gfs_bc_tide_class ())) GfsBcClass * gfs_bc_tide_class (void); /* GfsBcTide: Object */ #define N 64 /* number of discretisation points */ #define NM 14 /* number of tidal modes (must match those of FES2004) */ static void bc_tide_write (GtsObject * o, FILE * fp) { GfsBcTide * bc = GFS_BC_TIDE (o); guint i, j; (* GTS_OBJECT_CLASS (gfs_bc_tide_class ())->parent_class->write) (o, fp); fprintf (fp, " %s %s {\n", bc->h->name, bc->p->name); for (i = 0; i < N; i++) { for (j = 0; j < NM; j++) fprintf (fp, " %g %g\n", bc->amplitude[j][i], bc->phase[j][i]); } fputc ('}', fp); } static void set_gradient_boundary (FttCell * cell) { cell->flags |= GFS_FLAG_GRADIENT_BOUNDARY; } static void bc_tide_read (GtsObject ** o, GtsFile * fp) { GfsBcTide * bc = GFS_BC_TIDE (*o); GfsDomain * domain = gfs_box_domain (GFS_BC (bc)->b->box); (* GTS_OBJECT_CLASS (gfs_bc_tide_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsBoundary * b = GFS_BC (bc)->b; if (b->d > FTT_BOTTOM) { gts_file_error (fp, "GfsBcTide cannot be used for 3D boundaries"); return; } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (h)"); return; } bc->h = gfs_variable_from_name (domain->variables, fp->token->str); if (bc->h == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (p)"); return; } bc->p = gfs_variable_from_name (domain->variables, fp->token->str); if (bc->p == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); ftt_cell_traverse (b->root, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) set_gradient_boundary, NULL); guint i; gpointer tmp = g_malloc0 (N*NM*sizeof (double)); bc->amplitude = g_malloc (N*sizeof (double *)); for (i = 0; i < N; i++) bc->amplitude[i] = tmp + i*NM*sizeof (double); tmp = g_malloc0 (N*NM*sizeof (double)); bc->phase = g_malloc (N*sizeof (double *)); for (i = 0; i < N; i++) bc->phase[i] = tmp + i*NM*sizeof (double); FttCellFace face; face.cell = b->root; face.d = b->d; FttVector p; ftt_face_pos (&face, &p); FttComponent c = face.d < FTT_TOP ? FTT_Y : FTT_X; bc->size = ftt_cell_size (b->root); (&p.x)[c] -= bc->size/2.; bc->x = (&p.x)[c]; if (fp->type == '{') { /* read embedded coefficients */ guint j; fp->scope_max++; gts_file_next_token (fp); for (i = 0; i < N; i++) { for (j = 0; j < NM; j++) { while (fp->type == '\n') gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (amplitude[%d][%d])", j, i); return; } bc->amplitude[j][i] = atof (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (phase[%d][%d])", j, i); return; } bc->phase[j][i] = atof (fp->token->str); gts_file_next_token (fp); } } while (fp->type == '\n') gts_file_next_token (fp); if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); } else { /* extract FES2004 tidal coefficients */ gchar * fname = getenv ("GFS_FES2004") ? g_strdup (getenv ("GFS_FES2004")) : g_strjoin ("/", GFS_MODULES_DIR, "tide.fes2004.nc", NULL); FILE * f = fopen (fname, "r"); if (f == NULL) { gts_file_error (fp, "cannot open file `%s': %s", fname, strerror (errno)); g_free (fname); return; } fclose (f); double * lon = g_malloc (N*sizeof (double)); double * lat = g_malloc (N*sizeof (double)); gdouble dh = bc->size/(N - 1); for (i = 0; i < N; i++, (&p.x)[c] += dh) { FttVector mp = p; gfs_simulation_map_inverse (GFS_SIMULATION (gfs_box_domain (b->box)), &mp); lon[i] = mp.x; lat[i] = mp.y; } fes2004_extraction (fname, N, lat, lon, bc->amplitude, bc->phase, 1); g_free (fname); g_free (lon); g_free (lat); } } static void bc_tide_destroy (GtsObject * o) { GfsBcTide * bc = GFS_BC_TIDE (o); if (bc->amplitude) { g_free (bc->amplitude[0]); g_free (bc->amplitude); } if (bc->phase) { g_free (bc->phase[0]); g_free (bc->phase); } (* GTS_OBJECT_CLASS (gfs_bc_tide_class ())->parent_class->destroy) (o); } static tidal_wave wave[NM]; static gdouble amplitude_value (FttCellFace * face, GfsBcTide * bc, gdouble t) { FttComponent c = face->d < FTT_TOP ? FTT_Y : FTT_X; FttVector p; ftt_face_pos (face, &p); guint i = floor (((&p.x)[c] - bc->x)/bc->size*(N - 1)); g_assert (i < N - 1); if (bc->amplitude[i][2] < 0. && bc->amplitude[i+1][2] < 0.) return G_MAXDOUBLE; gdouble dh = bc->size/(N - 1); gdouble a = ((&p.x)[c] - bc->x - dh*i)/dh; if (bc->amplitude[i][2] < 0.) a = 1.; if (bc->amplitude[i+1][2] < 0.) a = 0.; gdouble prediction = 0.; guint j; for (j = 0; j < NM; j++) { fcomplex Z1, Z2, Z; Z1.reel = bc->amplitude[i][j]*cos (- bc->phase[i][j]*M_PI/180.); Z1.imag = bc->amplitude[i][j]*sin (- bc->phase[i][j]*M_PI/180.); Z2.reel = bc->amplitude[i+1][j]*cos (- bc->phase[i+1][j]*M_PI/180.); Z2.imag = bc->amplitude[i+1][j]*sin (- bc->phase[i+1][j]*M_PI/180.); Z.reel = (1. - a)*Z1.reel + a*Z2.reel; Z.imag = (1. - a)*Z1.imag + a*Z2.imag; prediction += Tide_prediction (t, wave[j], Z, 0, 0); } return prediction; } static gdouble tide_value (FttCellFace * f, GfsBc * b) { /* fixme: this will not work for multilayer domains */ guint d, nb = 0; FttCellNeighbors n; gdouble H; ftt_cell_neighbors (f->neighbor, &n); for (d = 0; d < FTT_NEIGHBORS_2D; d++) if (n.c[d] != NULL && GFS_CELL_IS_BOUNDARY(n.c[d]) && nb++ > 0) /* if the boundary cell is bounded by more than one boundary -> no flux */ return 0.; H = gfs_face_interpolated_value (f, GFS_BC_TIDE (b)->h->i); if (H > 2e-3) { /* fixme: 2e-3 is an arbitrary constant which should be a parameter or sthg*/ GfsSimulation * sim = GFS_SIMULATION (gfs_box_domain (b->b->box)); gdouble a = amplitude_value (f, GFS_BC_TIDE (b), sim->time.t + deltat); if (a < G_MAXDOUBLE) { gdouble cg = sqrt (sim->physical_params.g*H); a *= sim->physical_params.g/5000.; /* fixme: reference depth is fixed at 5000 meters */ return gfs_function_face_value (GFS_BC_VALUE (b)->val, f) + (FTT_FACE_DIRECT (f) ? -1. : 1.)* (GFS_VALUE (f->neighbor, GFS_BC_TIDE (b)->p) - a)* cg/sim->physical_params.g #if !FTT_2D /H #endif ; } } return 0.; } static void tide (FttCellFace * f, GfsBc * b) { g_assert (GFS_CELL_IS_GRADIENT_BOUNDARY (f->cell)); g_assert (ftt_cell_neighbor (f->cell, f->d) == f->neighbor); GFS_VALUE (f->cell, b->v) = 2.*tide_value (f, b) - GFS_VALUE (f->neighbor, b->v); } static void homogeneous_tide (FttCellFace * f, GfsBc * b) { g_assert (GFS_CELL_IS_GRADIENT_BOUNDARY (f->cell)); GFS_VALUE (f->cell, b->v) = - GFS_VALUE (f->neighbor, b->v); } static void face_tide (FttCellFace * f, GfsBc * b) { g_assert (GFS_CELL_IS_GRADIENT_BOUNDARY (f->cell)); GFS_STATE (f->cell)->f[f->d].v = tide_value (f, b); } static void gfs_bc_tide_class_init (GtsObjectClass * klass) { klass->write = bc_tide_write; klass->read = bc_tide_read; klass->destroy = bc_tide_destroy; } static void gfs_bc_tide_init (GfsBc * bc) { bc->bc = (FttFaceTraverseFunc) tide; bc->homogeneous_bc = (FttFaceTraverseFunc) homogeneous_tide; bc->face_bc = (FttFaceTraverseFunc) face_tide; } GfsBcClass * gfs_bc_tide_class (void) { static GfsBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_bc_tide_info = { "GfsBcTide", sizeof (GfsBcTide), sizeof (GfsBcClass), (GtsObjectClassInitFunc) gfs_bc_tide_class_init, (GtsObjectInitFunc) gfs_bc_tide_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_bc_value_class ()), &gfs_bc_tide_info); } return klass; } /* Initialize module */ /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "tide"; const gchar * g_module_check_init (void); void gfs_module_read (GtsFile * fp); void gfs_module_write (FILE * fp); const gchar * g_module_check_init (void) { wave[0] = w2N2; wave[1] = wK1; wave[2] = wK2; wave[3] = wM2; wave[4] = wM4; wave[5] = wMf; wave[6] = wMm; wave[7] = wMSqm; wave[8] = wMtm; wave[9] = wN2; wave[10] = wO1; wave[11] = wP1; wave[12] = wQ1; wave[13] = wS2; gfs_bc_tide_class (); return NULL; } #define TIME_FORMAT "%Y/%m/%d-%T" void gfs_module_read (GtsFile * fp) { g_return_if_fail (fp != NULL); if (fp->type == '{') { GtsFileVariable var[] = { {GTS_STRING, "reference", TRUE}, {GTS_NONE} }; var[0].data = &reference; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; if (var[0].set) { struct tm timeref; time_t tref, t0; memset (&timeref, 0, sizeof(struct tm)); strptime ("1950/01/01-00:00:00-UTC", TIME_FORMAT, &timeref); tref = mktime (&timeref); memset (&timeref, 0, sizeof(struct tm)); if (!strptime (reference, TIME_FORMAT, &timeref)) { gts_file_variable_error (fp, var, "reference", "error parsing date format"); return; } t0 = mktime (&timeref); deltat = difftime (t0, tref)/3600.; } } } void gfs_module_write (FILE * fp) { g_return_if_fail (fp != NULL); fprintf (fp, " { reference = %s }", reference); } gerris-snapshot-131206/modules/layered.c0000644000175100017510000006070112250371171015127 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2012 S. Popinet, NIWA * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "simulation.h" #include "source.h" #include "adaptive.h" #include "output.h" #include "solid.h" /* LayeredVariable: Header */ typedef struct { GfsVariable * v; GfsVariable ** vl; } LayeredVariable; /* GfsLayered: Header */ typedef struct _GfsLayered GfsLayered; struct _GfsLayered { /*< private >*/ GfsSimulation parent; gdouble * ab; guint l; /*< public >*/ LayeredVariable * u, * v, * lgmac[2], * lg[2]; GSList * tracers, * variables; GfsVariable ** w, ** pr, ** un[FTT_NEIGHBORS], * gmac[FTT_DIMENSION], * g[FTT_DIMENSION]; gdouble * dz, H; guint nl; /**< number of layers */ GfsFunction * b; /**< buoyancy */ }; #define GFS_LAYERED(obj) GTS_OBJECT_CAST (obj, \ GfsLayered, \ gfs_layered_class ()) #define GFS_IS_LAYERED(obj) (gts_object_is_from_class (obj, \ gfs_layered_class ())) GfsSimulationClass * gfs_layered_class (void); /* LayeredVariable: Object */ static LayeredVariable * layered_variable_new (GfsVariable * v) { LayeredVariable * lv = g_malloc (sizeof (LayeredVariable)); int l, nl = GFS_LAYERED (v->domain)->nl; lv->v = v; lv->vl = g_malloc (nl*sizeof (LayeredVariable)); for (l = 0; l < nl; l++) { if (v->name) { gchar * name = g_strdup_printf ("%s%d", v->name, l); lv->vl[l] = gfs_variable_clone (v, name); g_free (name); } else lv->vl[l] = gfs_temporary_variable (v->domain); } lv->v = v; return lv; } static void layered_variable_average (FttCell * cell, LayeredVariable * lv) { GfsLayered * layered = GFS_LAYERED (lv->v->domain); int l, nl = layered->nl; gdouble v = 0., * dz = layered->dz; for (l = 0; l < nl; l++) v += GFS_VALUE (cell, lv->vl[l])*dz[l]; GFS_VALUE (cell, lv->v) = v; } static void layered_variable_swap (LayeredVariable * lv) { GfsLayered * layered = GFS_LAYERED (lv->v->domain); gfs_variables_swap (lv->v, lv->vl[layered->l]); } static void layered_variable_destroy (LayeredVariable * lv) { if (lv) { g_free (lv->vl); g_free (lv); } } /* GfsLayered: Object */ static void layered_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_layered_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } GfsLayered * layered = GFS_LAYERED (*o); GtsFileVariable var[] = { {GTS_UINT, "nl", TRUE, &layered->nl}, {GTS_DOUBLE, "H", TRUE, &layered->H}, {GTS_OBJ, "b", TRUE, &layered->b}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; GfsDomain * domain = GFS_DOMAIN (layered); FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { layered->un[d] = g_malloc (layered->nl*sizeof (GfsVariable *)); int l; for (l = 0; l < layered->nl; l++) layered->un[d][l] = gfs_domain_add_variable (domain, NULL, NULL); } GfsVariable ** u = gfs_domain_velocity (domain); layered->u = layered_variable_new (u[0]); layered->v = layered_variable_new (u[1]); int l; for (l = 0; l < layered->nl; l++) { GfsVariable * u[2] = { layered->u->vl[l], layered->v->vl[l] }; gfs_variable_set_vector (u, 2); } layered->gmac[0] = gfs_domain_add_variable (domain, NULL, NULL); layered->gmac[1] = gfs_domain_add_variable (domain, NULL, NULL); layered->g[0] = gfs_domain_add_variable (domain, NULL, NULL); layered->g[1] = gfs_domain_add_variable (domain, NULL, NULL); gfs_variable_set_vector (layered->gmac, FTT_DIMENSION); gfs_variable_set_vector (layered->g, FTT_DIMENSION); layered->lgmac[0] = layered_variable_new (layered->gmac[0]); layered->lgmac[1] = layered_variable_new (layered->gmac[1]); layered->lg[0] = layered_variable_new (layered->g[0]); layered->lg[1] = layered_variable_new (layered->g[1]); for (l = 0; l < layered->nl; l++) { GfsVariable * u[2] = { layered->lg[0]->vl[l], layered->lg[1]->vl[l] }; gfs_variable_set_vector (u, 2); u[0] = layered->lgmac[0]->vl[l]; u[1] = layered->lgmac[1]->vl[l]; gfs_variable_set_vector (u, 2); } layered->w = g_malloc (layered->nl*sizeof (GfsVariable *)); for (l = 0; l < layered->nl; l++) { gchar * name = g_strdup_printf ("W%d", l); layered->w[l] = gfs_domain_get_or_add_variable (domain, name, "z-component of the velocity"); g_free (name); } layered->pr = g_malloc (layered->nl*sizeof (GfsVariable *)); for (l = 0; l < layered->nl; l++) { gchar * name = g_strdup_printf ("Ph%d", l); layered->pr[l] = gfs_domain_get_or_add_variable (domain, name, "Hydrostatic potential"); layered->pr[l]->units = 2.; g_free (name); } layered->dz = g_malloc (layered->nl*sizeof (gdouble)); for (l = 0; l < layered->nl; l++) layered->dz[l] = 1./layered->nl; GSList * i = GFS_SIMULATION (layered)->events->items; while (i) { if (GFS_IS_VARIABLE_TRACER (i->data)) layered->tracers = g_slist_prepend (layered->tracers, layered_variable_new (i->data)); else if (GFS_IS_SOURCE_CORIOLIS (i->data)) { GfsSourceCoriolis * s = i->data; if (s->u[0]) { layered->variables = g_slist_prepend (layered->variables, layered_variable_new (s->u[0])); layered->variables = g_slist_prepend (layered->variables, layered_variable_new (s->u[1])); } } else if (GFS_IS_EVENT_SUM (i->data)) { GfsEventSum * s = i->data; layered->variables = g_slist_prepend (layered->variables, layered_variable_new (s->sv)); } i = i->next; } } static void layered_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_layered_class ())->parent_class->write) (o, fp); GfsLayered * layered = GFS_LAYERED (o); fprintf (fp, " { nl = %d H = %g b =", layered->nl, layered->H); gfs_function_write (layered->b, fp); fputs (" }", fp); } static void layered_destroy (GtsObject * object) { GfsLayered * layered = GFS_LAYERED (object); FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) g_free (layered->un[d]); layered_variable_destroy (layered->u); layered_variable_destroy (layered->v); layered_variable_destroy (layered->lgmac[0]); layered_variable_destroy (layered->lgmac[1]); layered_variable_destroy (layered->lg[0]); layered_variable_destroy (layered->lg[1]); g_free (layered->w); g_free (layered->pr); g_free (layered->dz); g_slist_foreach (layered->tracers, (GFunc) layered_variable_destroy, NULL); g_slist_free (layered->tracers); g_slist_foreach (layered->variables, (GFunc) layered_variable_destroy, NULL); g_slist_free (layered->variables); (* GTS_OBJECT_CLASS (gfs_layered_class ())->parent_class->destroy) (object); } static void swap_face_velocities (FttCell * cell, GfsLayered * layered) { GfsStateVector * s = GFS_STATE (cell); FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { gdouble un = s->f[d].un; s->f[d].un = GFS_VALUE (cell, layered->un[d][layered->l]); GFS_VALUE (cell, layered->un[d][layered->l]) = un; } } static void swap_velocities (GfsLayered * layered) { gfs_domain_traverse_leaves (GFS_DOMAIN (layered), (FttCellTraverseFunc) swap_face_velocities, layered); layered_variable_swap (layered->u); layered_variable_swap (layered->v); g_slist_foreach (layered->variables, (GFunc) layered_variable_swap, NULL); } static void swap_gradients (GfsLayered * layered) { layered_variable_swap (layered->lg[0]); layered_variable_swap (layered->lg[1]); layered_variable_swap (layered->lgmac[0]); layered_variable_swap (layered->lgmac[1]); } static void swap_layer (GfsLayered * layered) { layered_variable_swap (layered->u); layered_variable_swap (layered->v); g_slist_foreach (layered->tracers, (GFunc) layered_variable_swap, NULL); g_slist_foreach (layered->variables, (GFunc) layered_variable_swap, NULL); } static void traverse_layers (GfsDomain * domain, FttCellTraverseFunc func, gpointer data) { GfsLayered * layered = GFS_LAYERED (domain); for (layered->l = 0; layered->l < layered->nl; layered->l++) { swap_layer (layered); gfs_domain_traverse_leaves (domain, func, data); swap_layer (layered); } } static gdouble cell_z (FttCell * cell, FttCellFace * face, GfsSimulation * sim) { GfsLayered * layered = GFS_LAYERED (sim); g_assert (layered->l < layered->nl); double z = layered->dz[layered->l]/2.; int i; for (i = 0; i < layered->l; i++) z += layered->dz[i]; return z*layered->H; } static void layered_init (GfsLayered * object) { GfsLayered * layered = GFS_LAYERED (object); layered->nl = 1; layered->H = 1.; GfsDomain * domain = GFS_DOMAIN (object); domain->traverse_layers = traverse_layers; GfsDerivedVariable * z = gfs_derived_variable_from_name (domain->derived_variables, "z"); z->func = cell_z; layered->b = gfs_function_new (gfs_function_class (), 0.); gfs_function_set_units (layered->b, 2.); gfs_object_simulation_set (layered->b, layered); } static void sum_face_velocities (FttCell * cell, GfsLayered * layered) { GfsStateVector * s = GFS_STATE (cell); double dz = layered->dz[layered->l]; FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) s->f[d].un += dz*GFS_VALUE (cell, layered->un[d][layered->l]); } static void compute_vertical_velocity (FttCell * cell, GfsLayered * layered) { gdouble w = 0.; gdouble a = ftt_cell_size (cell)*gfs_domain_cell_fraction (GFS_DOMAIN (layered), cell)/layered->H; for (layered->l = 0; layered->l < layered->nl; layered->l++) { FttCellFace face; gdouble div = 0.; face.cell = cell; for (face.d = 0; face.d < FTT_NEIGHBORS; face.d++) div += (FTT_FACE_DIRECT (&face) ? 1. : -1.)* GFS_VALUE (cell, layered->un[face.d][layered->l])* gfs_domain_face_fraction (GFS_DOMAIN (layered), &face); w -= div*layered->dz[layered->l]/a; GFS_VALUE (cell, layered->w[layered->l]) = w; } } static void compute_hydrostatic_potential (FttCell * cell, GfsLayered * layered) { double * ab = layered->ab, * dz = layered->dz, H = layered->H; for (layered->l = 0; layered->l < layered->nl; layered->l++) { g_slist_foreach (layered->tracers, (GFunc) layered_variable_swap, NULL); ab[layered->l] = gfs_function_value (layered->b, cell); g_slist_foreach (layered->tracers, (GFunc) layered_variable_swap, NULL); } double * p = &GFS_VALUE (cell, layered->pr[0]), pr; int l, top = layered->nl - 1; pr = p[top] = 0.; //ab[top]*dz[top]*H/2.; for (l = top; l > 0; l--) { pr += (ab[l]*dz[l - 1] + ab[l - 1]*dz[l])*H/2.; p[l - 1] = pr; } } static void mac_projection (GfsLayered * layered, GfsMultilevelParams * par, gdouble dt, GfsVariable * p, GfsVariable ** g) { GfsSimulation * sim = GFS_SIMULATION (layered); GfsDomain * domain = GFS_DOMAIN (sim); /* project the summed MAC velocity field */ gfs_mac_projection (domain, par, dt, p, sim->physical_params.alpha, g, NULL); /* apply barotropic pressure gradient to the MAC velocity field on each layer */ for (layered->l = 0; layered->l < layered->nl; layered->l++) { swap_velocities (layered); gfs_correct_normal_velocities (domain, FTT_DIMENSION, p, NULL, dt); swap_velocities (layered); } /* compute vertical velocity */ gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) compute_vertical_velocity, layered); } static void add_barotropic_gradient (FttCell * cell, GfsLayered * layered) { int l; for (l = 0; l < layered->nl; l++) { GFS_VALUE (cell, layered->lg[0]->vl[l]) += GFS_VALUE (cell, layered->lg[0]->v); GFS_VALUE (cell, layered->lg[1]->vl[l]) += GFS_VALUE (cell, layered->lg[1]->v); } } static void add_barotropic_gmac (FttCell * cell, GfsLayered * layered) { int l; for (l = 0; l < layered->nl; l++) { GFS_VALUE (cell, layered->lgmac[0]->vl[l]) += GFS_VALUE (cell, layered->lgmac[0]->v); GFS_VALUE (cell, layered->lgmac[1]->vl[l]) += GFS_VALUE (cell, layered->lgmac[1]->v); } } static void approximate_projection (GfsLayered * layered, GfsVariable * p) { GfsSimulation * sim = GFS_SIMULATION (layered); GfsDomain * domain = GFS_DOMAIN (sim); /* compute face velocities for each layer */ gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL); gfs_poisson_coefficients (domain, NULL, TRUE, TRUE, TRUE); for (layered->l = 0; layered->l < layered->nl; layered->l++) { swap_velocities (layered); swap_gradients (layered); /* compute MAC velocities from centered velocities */ gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL); gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_interpolated_normal_velocity, gfs_domain_velocity (domain)); /* gradient of hydrostatic potential */ gfs_reset_gradients (domain, FTT_DIMENSION, layered->g); gfs_correct_normal_velocities (domain, FTT_DIMENSION, layered->pr[layered->l], layered->g, sim->advection_params.dt); gfs_scale_gradients (domain, FTT_DIMENSION, layered->g); gfs_correct_centered_velocities (domain, FTT_DIMENSION, layered->g, sim->advection_params.dt); swap_gradients (layered); swap_velocities (layered); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) sum_face_velocities, layered); } mac_projection (layered, &sim->approx_projection_params, sim->advection_params.dt, p, layered->g); /* apply barotropic pressure gradient to the centered velocity field on each layer */ for (layered->l = 0; layered->l < layered->nl; layered->l++) { swap_velocities (layered); gfs_correct_centered_velocities (domain, FTT_DIMENSION, layered->g, sim->advection_params.dt); swap_velocities (layered); } /* add barotropic pressure gradient to hydrostatic potential gradient on each level */ gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) add_barotropic_gradient, layered); /* store depth-averaged velocity in (U,V) */ gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) layered_variable_average, layered->u); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) layered_variable_average, layered->v); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, layered->u->v); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, layered->v->v); } typedef struct { GfsVariable * v; double dt; double * al, * ar; } AdvectionParams; static void cell_vertical_advection (FttCell * cell, AdvectionParams * p) { double * al = p->al, * ar = p->ar, dt = p->dt; GfsLayered * layered = GFS_LAYERED (p->v->domain); double * a = &GFS_VALUE (cell, p->v); double * u = &GFS_VALUE (cell, layered->w[0]); double * dz = layered->dz, H = layered->H; int n = layered->nl, i; for (i = 0; i < n; i++) { double unorm = dt*((i > 0 ? u[i - 1] : 0.) + u[i])/(2.*dz[i]*H); if (fabs (unorm) > 1.) g_warning ("W CFL: %g", unorm); /* fixme: this gradient is correct only for dz[i] constant */ double g = i == 0 ? a[i + 1] - a[i] : i == n - 1 ? a[i] - a[i-1] : (a[i + 1] - a[i - 1])/2.; al[i] = a[i] + MIN ((1. - unorm)/2., 0.5)*g; ar[i] = a[i] + MAX ((- 1. - unorm)/2., -0.5)*g; } for (i = 0; i < n - 1; i++) { double flux = (u[i] > 0. ? dt*u[i]*al[i] : u[i] < 0. ? dt*u[i]*ar[i + 1] : dt*u[i]*(al[i] + ar[i + 1])/2.)/H; a[i] -= flux/dz[i]; a[i + 1] += flux/dz[i + 1]; } } static void vertical_advection (LayeredVariable * v, gdouble dt) { GfsLayered * layered = GFS_LAYERED (v->v->domain); AdvectionParams p; p.v = v->vl[0]; p.dt = dt; p.al = g_malloc (layered->nl*sizeof (double)); p.ar = g_malloc (layered->nl*sizeof (double)); gfs_domain_traverse_leaves (v->v->domain, (FttCellTraverseFunc) cell_vertical_advection, &p); g_free (p.al); g_free (p.ar); int l; for (l = 0; l < layered->nl; l++) gfs_domain_bc (v->v->domain, FTT_TRAVERSE_LEAFS, -1, v->vl[l]); } static void advance_tracers (GfsLayered * layered, gdouble dt) { for (layered->l = 0; layered->l < layered->nl; layered->l++) { swap_velocities (layered); g_slist_foreach (layered->tracers, (GFunc) layered_variable_swap, NULL); gfs_advance_tracers (GFS_SIMULATION (layered), dt); g_slist_foreach (layered->tracers, (GFunc) layered_variable_swap, NULL); swap_velocities (layered); } GfsDomain * domain = GFS_DOMAIN (layered); GSList * i = layered->tracers; while (i) { GfsVariable * v = ((LayeredVariable *) i->data)->v; if (GFS_VARIABLE_TRACER (v)->advection.scheme != GFS_NONE) vertical_advection (i->data, dt); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) layered_variable_average, i->data); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, v); i = i->next; } layered->ab = g_malloc (layered->nl*sizeof (double)); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) compute_hydrostatic_potential, layered); g_free (layered->ab); int l; for (l = 0; l < layered->nl; l++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, layered->pr[l]); } static void layered_run (GfsSimulation * sim) { GfsDomain * domain = GFS_DOMAIN (sim); GfsLayered * layered = GFS_LAYERED (sim); GfsVariable * p = gfs_variable_from_name (domain->variables, "P"); g_assert (p); GfsVariable * pmac = gfs_variable_from_name (domain->variables, "Pmac"); g_assert (pmac); gfs_simulation_refine (sim); gfs_simulation_init (sim); gfs_simulation_set_timestep (sim); if (sim->time.i == 0) { approximate_projection (layered, p); gfs_simulation_set_timestep (sim); advance_tracers (layered, sim->advection_params.dt/2.); } while (sim->time.t < sim->time.end && sim->time.i < sim->time.iend) { gdouble tstart = gfs_clock_elapsed (domain->timer); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); /* compute face velocities at t + dt/2 for each layer */ gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL); for (layered->l = 0; layered->l < layered->nl; layered->l++) { swap_velocities (layered); swap_gradients (layered); if (sim->advection_params.linear) { /* linearised advection */ gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL); gfs_domain_face_traverse (domain, FTT_XYZ, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) gfs_face_interpolated_normal_velocity, sim->u0); } else gfs_predicted_face_velocities (domain, FTT_DIMENSION, &sim->advection_params); /* gradient of hydrostatic potential */ gfs_poisson_coefficients (domain, NULL, TRUE, TRUE, TRUE); gfs_reset_gradients (domain, FTT_DIMENSION, layered->gmac); gfs_correct_normal_velocities (domain, FTT_DIMENSION, layered->pr[layered->l], layered->gmac, sim->advection_params.dt/2.); gfs_scale_gradients (domain, FTT_DIMENSION, layered->gmac); swap_gradients (layered); swap_velocities (layered); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) sum_face_velocities, layered); } gfs_variables_swap (p, pmac); mac_projection (layered, &sim->projection_params, sim->advection_params.dt/2., p, layered->gmac); /* add barotropic pressure gradient to hydrostatic potential gradient on each level */ gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) add_barotropic_gmac, layered); int l; for (l = 0; l < layered->nl; l++) { /* we need to apply BC because gfs_face_velocity_advection_flux() interpolates gmac on faces */ gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, layered->lgmac[0]->vl[l]); gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, layered->lgmac[1]->vl[l]); } gfs_variables_swap (p, pmac); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_half_do, sim); /* compute horizontal velocity at t + dt for each layer */ for (layered->l = 0; layered->l < layered->nl; layered->l++) { swap_velocities (layered); swap_gradients (layered); gfs_centered_velocity_advection_diffusion (domain, FTT_DIMENSION, &sim->advection_params, layered->gmac, sim->time.i > 0 ? layered->g : layered->gmac, sim->physical_params.alpha); swap_gradients (layered); swap_velocities (layered); } if (sim->advection_params.scheme == GFS_GODUNOV) { vertical_advection (layered->u, sim->advection_params.dt); vertical_advection (layered->v, sim->advection_params.dt); } /* Coriolis */ for (layered->l = 0; layered->l < layered->nl; layered->l++) { swap_velocities (layered); swap_gradients (layered); gfs_source_coriolis_implicit (domain, sim->advection_params.dt); gfs_correct_centered_velocities (domain, FTT_DIMENSION, sim->time.i > 0 ? layered->g : layered->gmac, -sim->advection_params.dt); swap_gradients (layered); swap_velocities (layered); } gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); gfs_simulation_adapt (sim); approximate_projection (layered, p); sim->time.t = sim->tnext; sim->time.i++; gfs_simulation_set_timestep (sim); advance_tracers (layered, sim->advection_params.dt); gts_range_add_value (&domain->timestep, gfs_clock_elapsed (domain->timer) - tstart); gts_range_update (&domain->timestep); gts_range_add_value (&domain->size, gfs_domain_size (domain, FTT_TRAVERSE_LEAFS, -1)); gts_range_update (&domain->size); } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL); } typedef struct { GfsLayered * layered; gdouble cfl; } CflData; static void w_cfl (FttCell * cell, CflData * p) { int l, nl = p->layered->nl; double * dz = p->layered->dz, H = p->layered->H; double * w = &GFS_VALUE (cell, p->layered->w[0]); for (l = 0; l < nl - 1; l++) if (w[l] != 0.) { double wa = fabs(w[l])/H; double cfl = dz[l]/wa; if (cfl < p->cfl) p->cfl = cfl; cfl = dz[l + 1]/wa; if (cfl < p->cfl) p->cfl = cfl; } } static gdouble layered_cfl (GfsSimulation * sim) { GfsLayered * layered = GFS_LAYERED (sim); CflData p = { layered, G_MAXDOUBLE }; for (layered->l = 0; layered->l < layered->nl; layered->l++) { swap_velocities (layered); gdouble cfl = (* GFS_SIMULATION_CLASS (GTS_OBJECT_CLASS (gfs_layered_class ())->parent_class)->cfl) (sim); if (cfl < p.cfl) p.cfl = cfl; swap_velocities (layered); } gfs_domain_traverse_leaves (GFS_DOMAIN (sim), (FttCellTraverseFunc) w_cfl, &p); return p.cfl; } static void layered_class_init (GfsSimulationClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = layered_destroy; GTS_OBJECT_CLASS (klass)->read = layered_read; GTS_OBJECT_CLASS (klass)->write = layered_write; klass->run = layered_run; klass->cfl = layered_cfl; } GfsSimulationClass * gfs_layered_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsLayered", sizeof (GfsLayered), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) layered_class_init, (GtsObjectInitFunc) layered_init }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), &info); } return klass; } /* Initialize module */ /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "layered"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { gfs_layered_class (); return NULL; } gerris-snapshot-131206/modules/electrohydro.c0000644000175100017510000006605712250371171016217 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2010-2012 Jose M. López-Herrera Sánchez * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "simulation.h" #include "source.h" #include "adaptive.h" #include "output.h" #include "solid.h" #include "mpi_boundary.h" /* GfsElectroHydro: Header */ typedef struct _GfsElectroHydro GfsElectroHydro; struct _GfsElectroHydro { /*< private >*/ GfsSimulation parent; /*< public >*/ GfsVariable * phi ; /* Electric potential */ GfsVariable * E[FTT_DIMENSION] ; /* Electric field; E=-Nabla Phi */ GfsMultilevelParams electric_projection_params; /* Params for the electric potential */ GfsFunction * perm ; /* electric permittivity */ GfsFunction * charge ; /* charge density is user defined */ }; #define GFS_ELECTRO_HYDRO(obj) GTS_OBJECT_CAST (obj, \ GfsElectroHydro, \ gfs_electro_hydro_class ()) #define GFS_IS_ELECTRO_HYDRO(obj) (gts_object_is_from_class (obj, \ gfs_electro_hydro_class ())) GfsSimulationClass * gfs_electro_hydro_class (void); /* GfsElectroHydro: Object */ static gboolean strmatch (const gchar * s, const gchar * s1) { gboolean m = !strcmp (s, s1); if (!m) { gchar * s2 = g_strconcat ("Gfs", s, NULL); m = !strcmp (s2, s1); g_free (s2); } return m; } static GfsSourceDiffusion * source_implicit_ohmic (GfsVariable * v) { if (v->sources) { GSList * i = GTS_SLIST_CONTAINER (v->sources)->items; while (i) { GtsObject * o = i->data; if (GFS_IS_SOURCE_DIFFUSION (o) && !GFS_IS_SOURCE_DIFFUSION_EXPLICIT (o) && GFS_SOURCE_DIFFUSION (o)->phi == GFS_ELECTRO_HYDRO (v->domain)->phi) return GFS_SOURCE_DIFFUSION (o); i = i->next; } } return NULL; } static GfsVariable * has_source_implicit_ohmic (GfsDomain * domain) { GSList * i = domain->variables; while (i) { if (source_implicit_ohmic (i->data)) return i->data; i = i->next; } return NULL; } static void gfs_electro_hydro_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_electro_hydro_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsElectroHydro * elec = GFS_ELECTRO_HYDRO (*o); GfsSimulation * sim = GFS_SIMULATION (elec); if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } fp->scope_max++; gts_file_next_token (fp); while (fp->type != GTS_ERROR && fp->type != '}') { if (fp->type == '\n') { gts_file_next_token (fp); continue; } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a keyword"); return; } if (!strcmp (fp->token->str, "perm")) { gts_file_next_token (fp); if (fp->type != '=') gts_file_error (fp, "expecting `='"); else { gts_file_next_token (fp); gfs_function_read (elec->perm, sim, fp); } } /* ------------ charge density defined by the function charge ------------ */ else if (!strcmp (fp->token->str, "charge")) { gts_file_next_token (fp); if (fp->type != '=') gts_file_error (fp, "expecting `='"); else { gts_file_next_token (fp); gfs_function_read (elec->charge, sim, fp); GfsVariable * rhoe ; if (!gfs_function_get_variable (elec->charge) && (rhoe = has_source_implicit_ohmic (GFS_DOMAIN (sim)))) gts_file_error (fp, "for implicit charge diffusion, 'charge' must be equal to %s", rhoe->name); } } /* ------------ GfsElectricProjectionParams ------------ */ else if (strmatch (fp->token->str, "GfsElectricProjectionParams")) { gts_file_next_token (fp); gfs_multilevel_params_read (&elec->electric_projection_params, fp); } else gts_file_error (fp, "unknown keyword `%s'", fp->token->str); } if (fp->type == GTS_ERROR) return; if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); } static void gfs_electro_hydro_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_electro_hydro_class ())->parent_class->write) (o, fp); GfsElectroHydro * elect = GFS_ELECTRO_HYDRO (o); fputs (" {\n" " perm =", fp); gfs_function_write (elect->perm, fp); fputs (" \n" " charge =", fp); gfs_function_write (elect->charge, fp); fputs ("\n" " GfsElectricProjectionParams ", fp); gfs_multilevel_params_write (&elect->electric_projection_params, fp); fputs ("\n" "}", fp); } static void gfs_electro_hydro_destroy (GtsObject * object) { GfsElectroHydro * elec = GFS_ELECTRO_HYDRO (object); gts_object_destroy (GTS_OBJECT (elec->perm)); gts_object_destroy (GTS_OBJECT (elec->charge)); (* GTS_OBJECT_CLASS (gfs_electro_hydro_class ())->parent_class->destroy) (object); } /** * Electric field boundary condition. * \beginobject{GfsBcE} */ /* GfsBcE: Header */ #define GFS_IS_BC_E(obj) (gts_object_is_from_class (obj, \ gfs_bc_E_class ())) GfsBcClass * gfs_bc_E_class (void); static void setting_E_from_phi (FttCellFace * f, GfsBc * b) { if (b->v->component == f->d/2) { GfsVariable * phi = GFS_ELECTRO_HYDRO (gfs_object_simulation(b))->phi; GfsGradient g; gfs_face_gradient (f, &g, phi->i, -1); double slope = (- g.b + g.a*GFS_VALUE (f->cell, phi))/ftt_cell_size (f->cell) *(FTT_FACE_DIRECT(f) ? 1 : -1); GFS_VALUE (f->cell, b->v) = - GFS_VALUE (f->neighbor, b->v) + 2.*slope; } else GFS_VALUE (f->cell, b->v) = GFS_VALUE (f->neighbor, b->v); } static void face_setting_E_from_phi(FttCellFace *f, GfsBc * b) { if (b->v->component == f->d/2) { GfsVariable * phi = GFS_ELECTRO_HYDRO (gfs_object_simulation(b))->phi; GfsGradient g; gfs_face_gradient (f, &g, phi->i, -1); double slope = (- g.b + g.a*GFS_VALUE (f->cell, phi))/ftt_cell_size (f->cell) *(FTT_FACE_DIRECT(f) ? 1 : -1); GFS_STATE (f->cell)->f[f->d].v = GFS_STATE (f->neighbor)->f[FTT_OPPOSITE_DIRECTION (f->d)].v = slope; } else GFS_STATE (f->cell)->f[f->d].v = GFS_VALUE (f->neighbor, b->v); } static void gfs_bc_E_init (GfsBc * object) { object->bc = (FttFaceTraverseFunc) setting_E_from_phi; object->homogeneous_bc = (FttFaceTraverseFunc) setting_E_from_phi; object->face_bc = (FttFaceTraverseFunc) face_setting_E_from_phi; } GfsBcClass * gfs_bc_E_class (void) { static GfsBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_bc_E_info = { "GfsBcE", sizeof (GfsBc), sizeof (GfsBcClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) gfs_bc_E_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_bc_class ()), &gfs_bc_E_info); } return klass; } /** \endobject{GfsBcE} */ static void box_set_efield_boundary (GfsBox * box, GfsElectroHydro * elec) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) if (!GFS_IS_BOUNDARY_MPI (box->neighbor[d]) && GFS_IS_BOUNDARY (box->neighbor[d])) { GfsBoundary * b = GFS_BOUNDARY (box->neighbor[d]); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) { GfsBc * bc = gfs_bc_new (gfs_bc_E_class(), elec->E[c], FALSE); gfs_boundary_add_bc (b, bc); } } } static void gfs_electro_hydro_init (GfsElectroHydro * object) { GfsDomain * domain = GFS_DOMAIN (object); static gchar name[][3] = {"Ex", "Ey", "Ez"}; static gchar desc[][34] = {"x component of the electric field", "y component of the electric field", "z component of the electric field"}; FttComponent c; object->phi = gfs_domain_add_variable (domain, "Phi", "Electric potential"); object->phi->centered = TRUE; for (c = 0; c < FTT_DIMENSION; c++) { object->E[c] = gfs_domain_add_variable (domain , name[c], desc[c]); object->E[c]->units = -1.; } gfs_variable_set_vector (object->E, FTT_DIMENSION); gfs_multilevel_params_init (&object->electric_projection_params); object->perm = gfs_function_new (gfs_function_class (), 1.); gfs_function_set_units (object->perm, -1.); object->charge = gfs_function_new (gfs_function_class (), 0.); gfs_function_set_units (object->charge, -3.); gfs_object_simulation_set (object->charge, object); } static void gfs_electro_hydro_run (GfsSimulation * sim); static void gfs_electro_hydro_class_init (GfsSimulationClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = gfs_electro_hydro_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_electro_hydro_read; GTS_OBJECT_CLASS (klass)->write = gfs_electro_hydro_write; klass->run = gfs_electro_hydro_run; } GfsSimulationClass * gfs_electro_hydro_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_electro_hydro_info = { "GfsElectroHydro", sizeof (GfsElectroHydro), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) gfs_electro_hydro_class_init, (GtsObjectInitFunc) gfs_electro_hydro_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), &gfs_electro_hydro_info); } return klass; } /* Setting div as - \int of rhoe on the cell volume */ static void rescale_div (FttCell * cell, GfsVariable * div) { gdouble size = ftt_cell_size (cell); GFS_VALUE (cell, div) *= - size*size*gfs_domain_cell_fraction (div->domain, cell); } /* Calculates -gradient of @v and write it in vector @g */ static void minus_gradient (FttCell * cell, gpointer * data) { GfsVariable * v = data[0]; GfsVariable ** g = data[1]; gdouble size = ftt_cell_size (cell); FttVector gv; FttComponent c; gfs_cm_gradient (cell, v, &gv); for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (cell, g[c]) = - (&gv.x)[c]/size; } static void has_dirichlet (FttCell * cell, GfsVariable * p) { if (((cell)->flags & GFS_FLAG_DIRICHLET) != 0) p->centered = FALSE; } typedef struct { GfsFunction * charge; GfsVariable * rhs; } OhmicParams; static void rhoe_update (FttCell * cell, gpointer * data) { gdouble f, h, val; FttCellNeighbors neighbor; FttCellFace face; GfsVariable * phi = data[0]; GfsVariable * rhoe = data[1]; if (GFS_IS_MIXED (cell)) { if (((cell)->flags & GFS_FLAG_DIRICHLET) != 0) f = gfs_cell_dirichlet_gradient_flux (cell, phi->i, -1, GFS_STATE (cell)->solid->fv); else f = GFS_STATE (cell)->solid->fv; } else f = 0.; /* Neumann condition by default */ h = ftt_cell_size (cell); val = GFS_VALUE (cell, phi); face.cell = cell; ftt_cell_neighbors (cell, &neighbor); for (face.d = 0; face.d < FTT_NEIGHBORS; face.d++) { GfsGradient g; face.neighbor = neighbor.c[face.d]; gfs_face_cm_weighted_gradient (&face, &g, phi->i, -1); f += g.b - g.a*val; } GFS_VALUE (cell, rhoe) = -f/(h*h*gfs_domain_cell_fraction (rhoe->domain, cell)); } static void charge_density_update (GfsDomain * domain, GfsVariable * phi, GfsVariable * rhoe) { gpointer data[2]; data[0] = phi; data[1] = rhoe; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) rhoe_update, data); } static void set_dive (FttCell * cell, OhmicParams * p) { GFS_VALUE (cell, p->rhs) = gfs_function_value (p->charge, cell); } static void poisson_electric (GfsElectroHydro * elec, gdouble dt) { GfsMultilevelParams * par = &elec->electric_projection_params; GfsDomain * domain = GFS_DOMAIN (elec); GfsVariable * diae, * dive, * res1e, * rhoe ; GfsVariable * phi = elec->phi; GfsVariable ** e = elec->E; GfsSourceDiffusion * d; dive = gfs_temporary_variable (domain); OhmicParams p = { elec->charge, dive }; gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) set_dive, &p); if ((rhoe = gfs_function_get_variable (elec->charge))) d = source_implicit_ohmic (rhoe); else d = NULL; if (d) { GfsVariable * rhoc = gfs_temporary_variable (domain); gfs_domain_surface_bc (domain, phi); gfs_diffusion_coefficients (domain, d, dt, rhoc, NULL, NULL, d->D->par.beta); gfs_diffusion_rhs (domain, phi, dive, rhoc, NULL, d->D->par.beta); gfs_poisson_coefficients (domain, elec->perm, FALSE, phi->centered, FALSE); gts_object_destroy (GTS_OBJECT (rhoc)); par = &d->D->par; } else { gfs_domain_surface_bc (domain, phi); gfs_poisson_coefficients (domain, elec->perm, FALSE, phi->centered, TRUE); } gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) rescale_div, dive); res1e = gfs_temporary_variable (domain); diae = gfs_temporary_variable (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) gfs_cell_reset, diae); par->poisson_solve (domain, par, phi, dive, res1e, diae, 1.); if (par->residual.infty > par->tolerance) g_warning ("poisson_electric: max residual %g > %g", par->residual.infty, par->tolerance); /* Set the electric field (-gradient of the potential) */ gpointer data[2]; data[0] = phi; data[1] = e; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) minus_gradient, data); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, e[c]); /* Compute the charge density from the electric potential */ if (d) { gfs_poisson_coefficients (domain, elec->perm, FALSE, phi->centered, TRUE); charge_density_update (domain, phi, rhoe); /* fixme: update elec->rhoe bc ? */ } gts_object_destroy (GTS_OBJECT (diae)); gts_object_destroy (GTS_OBJECT (dive)); gts_object_destroy (GTS_OBJECT (res1e)); } static void gfs_electro_hydro_run (GfsSimulation * sim) { GfsVariable * p, * pmac, * res = NULL, * g[FTT_DIMENSION], * gmac[FTT_DIMENSION]; GfsVariable ** gc = sim->advection_params.gc ? g : NULL; GfsDomain * domain; GSList * i; GfsElectroHydro * elec; domain = GFS_DOMAIN (sim); elec = GFS_ELECTRO_HYDRO (sim) ; p = gfs_variable_from_name (domain->variables, "P"); g_assert (p); pmac = gfs_variable_from_name (domain->variables, "Pmac"); g_assert (pmac); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) { gmac[c] = gfs_temporary_variable (domain); if (sim->advection_params.gc) { g[c] = gfs_temporary_variable (domain); } else g[c] = gmac[c]; } gfs_variable_set_vector (gmac, FTT_DIMENSION); gfs_variable_set_vector (g, FTT_DIMENSION); gfs_simulation_refine (sim); gfs_domain_surface_bc (domain, elec->phi); gfs_domain_traverse_mixed (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, (FttCellTraverseFunc) has_dirichlet, elec->phi); if (!elec->phi->centered) { guint nf = gfs_check_solid_fractions (domain); if (nf > 0) g_warning ("the solid surface cuts %d boundary cells,\n" "this may cause errors for the potential solution\n", nf); } gfs_simulation_init (sim); /* default BC for the electric field */ gts_container_foreach (GTS_CONTAINER (domain), (GtsFunc) box_set_efield_boundary, elec); i = domain->variables; while (i) { if (GFS_IS_VARIABLE_RESIDUAL (i->data)) res = i->data; i = i->next; } gfs_simulation_set_timestep (sim); if (sim->time.i == 0) { gfs_approximate_projection (domain, &sim->approx_projection_params, sim->advection_params.dt, p, sim->physical_params.alpha, res, g, NULL); gfs_simulation_set_timestep (sim); gfs_advance_tracers (sim, sim->advection_params.dt/2.); poisson_electric (elec, sim->advection_params.dt/2.); } else if (sim->advection_params.gc) gfs_update_gradients (domain, p, sim->physical_params.alpha, g); while (sim->time.t < sim->time.end && sim->time.i < sim->time.iend) { gdouble tstart = gfs_clock_elapsed (domain->timer); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gfs_predicted_face_velocities (domain, FTT_DIMENSION, &sim->advection_params); gfs_variables_swap (p, pmac); gfs_mac_projection (domain, &sim->projection_params, sim->advection_params.dt/2., p, sim->physical_params.alpha, gmac, NULL); gfs_variables_swap (p, pmac); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_half_do, sim); gfs_centered_velocity_advection_diffusion (domain, FTT_DIMENSION, &sim->advection_params, gmac, sim->time.i > 0 || !gc ? gc : gmac, sim->physical_params.alpha); if (gc) { gfs_source_coriolis_implicit (domain, sim->advection_params.dt); gfs_correct_centered_velocities (domain, FTT_DIMENSION, sim->time.i > 0 ? gc : gmac, -sim->advection_params.dt); } else if (gfs_has_source_coriolis (domain)) { gfs_correct_centered_velocities (domain, FTT_DIMENSION, gmac, sim->advection_params.dt); gfs_source_coriolis_implicit (domain, sim->advection_params.dt); gfs_correct_centered_velocities (domain, FTT_DIMENSION, gmac, -sim->advection_params.dt); } gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); gfs_simulation_adapt (sim); gfs_approximate_projection (domain, &sim->approx_projection_params, sim->advection_params.dt, p, sim->physical_params.alpha, res, g, NULL); sim->time.t = sim->tnext; sim->time.i++; gfs_simulation_set_timestep (sim); gfs_advance_tracers (sim, sim->advection_params.dt); poisson_electric (elec, sim->advection_params.dt); gts_range_add_value (&domain->timestep, gfs_clock_elapsed (domain->timer) - tstart); gts_range_update (&domain->timestep); gts_range_add_value (&domain->size, gfs_domain_size (domain, FTT_TRAVERSE_LEAFS, -1)); gts_range_update (&domain->size); } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL); for (c = 0; c < FTT_DIMENSION; c++) { gts_object_destroy (GTS_OBJECT (gmac[c])); if (sim->advection_params.gc) gts_object_destroy (GTS_OBJECT (g[c])); } } /* GfsSourceElectric: Header */ typedef struct _GfsSourceElectric GfsSourceElectric; struct _GfsSourceElectric { /*< private >*/ GfsSourceVelocity parent; /*< public >*/ GfsVariable * fe[FTT_DIMENSION]; }; #define GFS_SOURCE_ELECTRIC(obj) GTS_OBJECT_CAST (obj,\ GfsSourceElectric,\ gfs_source_electric_class ()) #define GFS_IS_SOURCE_ELECTRIC(obj) (gts_object_is_from_class (obj,\ gfs_source_electric_class ())) GfsSourceGenericClass * gfs_source_electric_class (void); /* GfsSourceElectric: Object */ static void gfs_source_electric_destroy (GtsObject * o) { FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) if (GFS_SOURCE_ELECTRIC (o)->fe[c]) gts_object_destroy (GTS_OBJECT (GFS_SOURCE_ELECTRIC (o)->fe[c])); (* GTS_OBJECT_CLASS (gfs_source_electric_class ())->parent_class->destroy) (o) ; } static void gfs_source_electric_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_source_electric_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; FttComponent c; for (c = 0 ; c < FTT_DIMENSION ; c++) { GfsVariable * v = GFS_SOURCE_VELOCITY (*o)->v[c]; if (v->sources) { GSList * i = GTS_SLIST_CONTAINER (v->sources)->items; while (i) { if (i->data != *o && GFS_IS_SOURCE_ELECTRIC (i->data)) { gts_file_error (fp, "variable '%s' cannot have multiple electric source terms", v->name); return; } i = i->next; } } } GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); for (c = 0; c < FTT_DIMENSION; c++) GFS_SOURCE_ELECTRIC (*o)->fe[c] = gfs_temporary_variable (domain); } static void save_fe (FttCell * cell, GfsSourceElectric * s) { GfsElectroHydro * elec = GFS_ELECTRO_HYDRO (gfs_object_simulation (s)); GfsFunction * perm = elec->perm; GfsVariable ** e = elec->E; GfsVariable * phi = elec->phi; FttComponent c; gdouble h = ftt_cell_size (cell); FttCellFace f; FttCellNeighbors n; gdouble fe[FTT_DIMENSION]; for (c = 0; c < FTT_DIMENSION; c++) fe[c] = 0.; f.cell = cell; ftt_cell_neighbors (cell, &n); gdouble radc = gfs_domain_cell_fraction (GFS_DOMAIN (elec), cell); for (f.d = 0; f.d < FTT_NEIGHBORS; f.d++) { f.neighbor = n.c[f.d]; gdouble permf = gfs_function_face_value (perm, &f); gdouble emod = 0.; GfsGradient g; /* fixme: should we use gfs_face_cm_weighted_gradient? */ gfs_face_cm_gradient (&f, &g, phi->i, -1); gdouble en = (- g.b + g.a*GFS_VALUE (cell, phi))/h; gdouble sign = (FTT_FACE_DIRECT (&f) ? 1 : -1); gdouble radf = gfs_domain_face_fraction (GFS_DOMAIN (elec), &f); for (c = 0; c < FTT_DIMENSION; c++) { gdouble es = (c == f.d/2 ? sign*en : gfs_face_interpolated_value_generic (&f, e[c])); emod += es*es; fe[c] += permf*es*en*radf; } fe[f.d/2] -= sign*emod*permf*radc/2.; } if (GFS_IS_MIXED (cell)) { if (((cell)->flags & GFS_FLAG_DIRICHLET) == 0) /* Neumann conditions for Phi */ g_assert_not_implemented (); FttVector m = {1.,1.,1.}; gfs_domain_solid_metric (GFS_DOMAIN (elec), cell, &m); gdouble permc = gfs_function_value (perm, cell); gdouble emod = 0., en = 0., a; GfsSolidVector * s = GFS_STATE (cell)->solid; FttVector g, n; gfs_cell_dirichlet_gradient (cell, phi->i, -1, s->fv, &g); gfs_solid_normal (cell, &n); a = ftt_vector_norm (&n); for (c = 0; c < FTT_DIMENSION; c++) { (&n.x)[c] /= a; (&g.x)[c] /= h; emod += (&g.x)[c]*(&g.x)[c]; en += (&g.x)[c]*(&n.x)[c]; } for (c = 0; c < FTT_DIMENSION; c++) fe[c] += a*((&g.x)[c]*en*(&m.x)[c] - emod/2.*(&n.x)[c]*radc)*permc; } /* fixme: we need to rescale, not entirely clear why... */ gdouble scale = pow (GFS_SIMULATION (elec)->physical_params.L, -5.); if (GFS_SIMULATION (elec)->physical_params.alpha) scale *= gfs_function_value (GFS_SIMULATION (elec)->physical_params.alpha, cell); for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (cell, s->fe[c]) = scale*fe[c]/h/radc; } static gboolean gfs_source_electric_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_source_electric_class ())->parent_class)->event) (event, sim)) { gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) save_fe, event); return TRUE; } return FALSE; } static gdouble gfs_source_electric_centered_value (GfsSourceGeneric * s, FttCell * cell, GfsVariable * v) { return GFS_VALUE (cell, GFS_SOURCE_ELECTRIC (s)->fe[v->component]); } static void gfs_source_electric_class_init (GfsSourceGenericClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_source_electric_event; GTS_OBJECT_CLASS (klass)->read = gfs_source_electric_read; GTS_OBJECT_CLASS (klass)->destroy = gfs_source_electric_destroy; } static void gfs_source_electric_init (GfsSourceGeneric * s) { s->mac_value = s->centered_value = gfs_source_electric_centered_value; } GfsSourceGenericClass * gfs_source_electric_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_source_electric_info = { "GfsSourceElectric", sizeof (GfsSourceElectric), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) gfs_source_electric_class_init, (GtsObjectInitFunc) gfs_source_electric_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_velocity_class ()), &gfs_source_electric_info); } return klass; } /* GfsElectroHydroAxi: Header */ GfsSimulationClass * gfs_electro_hydro_axi_class (void); /* GfsElectroHydroAxi: Object */ static void gfs_electro_hydro_axi_read (GtsObject ** o, GtsFile * fp) { gfs_electro_hydro_read (o, fp); if (fp->type == GTS_ERROR) return; GFS_DOMAIN (*o)->refpos.y = 0.5; } static void gfs_electro_hydro_axi_class_init (GfsSimulationClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = gfs_electro_hydro_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_electro_hydro_axi_read; GTS_OBJECT_CLASS (klass)->write = gfs_electro_hydro_write; klass->run = gfs_electro_hydro_run; } GfsSimulationClass * gfs_electro_hydro_axi_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_electro_hydro_axi_info = { "GfsElectroHydroAxi", sizeof (GfsElectroHydro), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) gfs_electro_hydro_axi_class_init, (GtsObjectInitFunc) gfs_electro_hydro_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_axi_class ()), &gfs_electro_hydro_axi_info); } return klass; } /* GfsOutputPotentialStats: Object */ static gboolean potential_stats_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (gfs_output_class())->event) (event, sim)) { GfsElectroHydro * elec = GFS_ELECTRO_HYDRO (sim); FILE * fp = GFS_OUTPUT (event)->file->fp; if (elec->electric_projection_params.niter > 0) { fprintf (fp, "Electric potential before after rate\n"); gfs_multilevel_params_stats_write (&elec->electric_projection_params, fp); } return TRUE; } return FALSE; } static void gfs_output_potential_stats_class_init (GfsEventClass * klass) { klass->event = potential_stats_event; } GfsOutputClass * gfs_output_potential_stats_class (void); GfsOutputClass * gfs_output_potential_stats_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_potential_stats_info = { "GfsOutputPotentialStats", sizeof (GfsOutput), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_potential_stats_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_class ()), &gfs_output_potential_stats_info); } return klass; } /* Initialize module */ /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "electrohydro"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { gfs_electro_hydro_class (); gfs_electro_hydro_axi_class (); gfs_source_electric_class (); gfs_bc_E_class (); gfs_output_potential_stats_class (); return NULL; } gerris-snapshot-131206/modules/okada.c0000644000175100017510000002311212250371171014554 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2009-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "event.h" #include "solid.h" /* Implementation of the formulae of Okada, 1985, "Surface deformation due to shear and tensile faults in a half-space", Bulletin of the Seismological Society of America, 75:4, 1135-1154, */ /* formulae (25)-(30) */ static void rectangular_source (const double U[3], double cosd, double sind, double mulambda, double d, double psi, double eta, double q, double u[3]) { double R = sqrt (psi*psi + eta*eta + q*q); double X = sqrt (psi*psi + q*q); double dtilde = eta*sind - q*cosd; double ytilde = eta*cosd + q*sind; double atanp = fabs (q) > 1e-6 ? atan (psi*eta/(q*R)) : 0.; mulambda = mulambda/(1. + mulambda); double logReta = R + eta > 1e-6 ? log (R + eta) : - log (R - eta); double Reta = fabs (R + eta) > 1e-6 ? R + eta : 1e30; double I1, I2, I3, I4, I5; if (fabs (cosd) > 1e-6) { /* formula (28) */ I5 = fabs (psi) < 1e-6 ? 0. : mulambda*2./cosd*atan ((eta*(X + q*cosd) + X*(R + X)*sind)/(psi*(R + X)*cosd)); I4 = mulambda/cosd*(log (R + dtilde) - sind*logReta); I3 = mulambda*(1./cosd*ytilde/(R + dtilde) - logReta) + sind/cosd*I4; I2 = mulambda*(- logReta) - I3; I1 = mulambda*(-1./cosd*psi/(R + dtilde)) - sind/cosd*I5; } else { /* formula (29) */ double R1 = R + dtilde; I1 = - mulambda/2.*psi*q/(R1*R1); I3 = mulambda/2.*(eta/R1 + ytilde*q/(R1*R1) - logReta); I2 = mulambda*(- logReta) - I3; I4 = - mulambda*q/R1; I5 = - mulambda*psi*sind/R1; } /* strike-slip, formula (25) */ if (U[0] != 0.) { double U1pi = U[0]/(2.*M_PI); u[0] -= U1pi*(psi*q/(R*Reta) + atanp + I1*sind); u[1] -= U1pi*(ytilde*q/(R*Reta) + q*cosd/Reta + I2*sind); u[2] -= U1pi*(dtilde*q/(R*Reta) + q*sind/Reta + I4*sind); } /* dip-slip, formula (26) */ if (U[1] != 0.) { double U2pi = U[1]/(2.*M_PI); u[0] -= U2pi*(q/R - I3*sind*cosd); u[1] -= U2pi*(ytilde*q/(R*(R + psi)) + cosd*atanp - I1*sind*cosd); u[2] -= U2pi*(dtilde*q/(R*(R + psi)) + sind*atanp - I5*sind*cosd); } /* tensile, formula (27) */ if (U[2] != 0.) { double U3pi = U[2]/(2.*M_PI); u[0] += U3pi*(q*q/(R*Reta) - I3*sind*sind); u[1] += U3pi*(-dtilde*q/(R*(R + psi)) - sind*(psi*q/(R*Reta) - atanp) - I1*sind*sind); u[2] += U3pi*(ytilde*q/(R*(R + psi)) + cosd*(psi*q/(R*Reta) - atanp) - I5*sind*sind); } } /* formula (24) */ static void okada_rectangular_source (const double U[3], double L, double W, double d, double delta, double mulambda, double x, double y, double u[3]) { double cosd = cos (delta), sind = sin (delta); double p = y*cosd + d*sind; double q = y*sind - d*cosd; u[0] = u[1] = u[2] = 0.; rectangular_source (U, cosd, sind, mulambda, d, x, p, q, u); rectangular_source (U, cosd, sind, mulambda, d, x - L, p - W, q, u); double u1[3] = {0., 0., 0.}; rectangular_source (U, cosd, sind, mulambda, d, x, p - W, q, u1); rectangular_source (U, cosd, sind, mulambda, d, x - L, p, q, u1); u[0] -= u1[0]; u[1] -= u1[1]; u[2] -= u1[2]; } /* GfsInitOkada: Header */ typedef struct _GfsInitOkada GfsInitOkada; struct _GfsInitOkada { /*< private >*/ GfsGenericInit parent; double sina, cosa; /*< public >*/ GfsVariable * v; gdouble x, y, depth; gdouble strike, dip; gdouble mu, lambda; gdouble length, width, U[3]; gdouble R; }; #define GFS_INIT_OKADA(obj) GTS_OBJECT_CAST (obj,\ GfsInitOkada,\ gfs_init_okada_class ()) #define GFS_IS_INIT_OKADA(obj) (gts_object_is_from_class (obj, \ gfs_init_okada_class ())) static GfsEventClass * gfs_init_okada_class (void); /* GfsInitOkada: Object */ static void gfs_init_okada_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_init_okada_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a variable name"); return; } GfsInitOkada * okada = GFS_INIT_OKADA (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); if (!(okada->v = gfs_domain_get_or_add_variable (domain, fp->token->str, NULL))) { gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str); return; } gts_file_next_token (fp); gdouble U = 0., rake = 90.; GtsFileVariable var[] = { {GTS_DOUBLE, "x", TRUE, &okada->x}, /* 0 */ {GTS_DOUBLE, "y", TRUE, &okada->y}, /* 1 */ {GTS_DOUBLE, "depth", TRUE, &okada->depth}, /* 2 */ {GTS_DOUBLE, "strike", TRUE, &okada->strike}, /* 3 */ {GTS_DOUBLE, "dip", TRUE, &okada->dip}, /* 4 */ {GTS_DOUBLE, "rake", TRUE, &rake}, /* 5 */ {GTS_DOUBLE, "mu", TRUE, &okada->mu}, /* 6 */ {GTS_DOUBLE, "lambda", TRUE, &okada->lambda}, /* 7 */ {GTS_DOUBLE, "length", TRUE, &okada->length}, /* 8 */ {GTS_DOUBLE, "width", TRUE, &okada->width}, /* 9 */ {GTS_DOUBLE, "U1", TRUE, &okada->U[0]}, /* 10 */ {GTS_DOUBLE, "U2", TRUE, &okada->U[1]}, /* 11 */ {GTS_DOUBLE, "U3", TRUE, &okada->U[2]}, /* 12 */ {GTS_DOUBLE, "U", TRUE, &U}, /* 13 */ {GTS_DOUBLE, "R", TRUE, &okada->R}, /* 14 */ {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; if (var[5].set) { if (var[10].set || var[11].set) { gts_file_error (fp, "set rake and U or U1 and U2 (not both)"); return; } okada->U[0] = U*cos (rake*M_PI/180.); okada->U[1] = U*sin (rake*M_PI/180.); } okada->sina = sin ((90. - okada->strike)*M_PI/180.); okada->cosa = cos ((90. - okada->strike)*M_PI/180.); } static void gfs_init_okada_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_init_okada_class ())->parent_class->write) (o, fp); GfsInitOkada * okada = GFS_INIT_OKADA (o); fprintf (fp, " %s {\n", okada->v->name); fprintf (fp, " x = %g y = %g depth = %g\n" " strike = %g dip = %g\n" " length = %g width = %g\n" " U1 = %g U2 = %g U3 = %g\n" " mu = %g lambda = %g\n" "}", okada->x, okada->y, okada->depth, okada->strike, okada->dip, okada->length, okada->width, okada->U[0], okada->U[1], okada->U[2], okada->mu, okada->lambda); } static double delta (double theta1, double theta2) { double d = theta1 - theta2; if (d > 180.) d -= 360.; if (d < -180.) d += 360.; return d; } static void init_okada (FttCell * cell, GfsInitOkada * okada) { FttVector p; gfs_cell_cm (cell, &p); GfsSimulation * sim = gfs_object_simulation (okada); gfs_simulation_map_inverse (sim, &p); p.x = okada->R*cos(p.y*M_PI/180.)*delta (p.x, okada->x)*M_PI/180.; p.y = okada->R*delta (p.y, okada->y)*M_PI/180.; FttVector q; q.x = okada->cosa*p.x + okada->sina*p.y; q.y = - okada->sina*p.x + okada->cosa*p.y; double u[3]; double sind = sin (okada->dip*M_PI/180.); /* depth of the bottom edge */ double depth = sind > 0. ? okada->depth + okada->width*sind : okada->depth; /* shift origin to the centroid */ q.x += okada->length/2.; q.y += okada->width/2.*cos (okada->dip*M_PI/180.); okada_rectangular_source (okada->U, okada->length, okada->width, depth, okada->dip*M_PI/180., okada->mu/okada->lambda, q.x, q.y, u); GFS_VALUE (cell, okada->v) += u[2]; } static gboolean gfs_init_okada_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_init_okada_class ())->parent_class)->event) (event, sim)) { gfs_domain_traverse_leaves (GFS_DOMAIN (sim), (FttCellTraverseFunc) init_okada, event); return TRUE; } return FALSE; } static void gfs_init_okada_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_init_okada_read; GTS_OBJECT_CLASS (klass)->write = gfs_init_okada_write; klass->event = gfs_init_okada_event; } static void gfs_init_okada_init (GfsInitOkada * okada) { okada->mu = okada->lambda = 1.; okada->R = 6371220.; /* Earth radius (metres) */ } static GfsEventClass * gfs_init_okada_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_init_okada_info = { "GfsInitOkada", sizeof (GfsInitOkada), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_init_okada_class_init, (GtsObjectInitFunc) gfs_init_okada_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_generic_init_class ()), &gfs_init_okada_info); } return klass; } /* Initialize module */ /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "okada"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { gfs_init_okada_class (); return NULL; } gerris-snapshot-131206/modules/df3.c0000644000175100017510000002275412250371171014164 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2008 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include "simulation.h" #include "map.h" #include "output.h" #include "init.h" typedef struct Vector_ { gint x, y, z; } Vector; #define POW2(x) (1 << (int)(x)) /* GfsOutputPovrayDF3: Header */ GfsOutputClass * gfs_output_povray_DF3_class (void); #define GFS_IS_OUTPUT_POVRAY_DF3(obj) (gts_object_is_from_class (obj, \ gfs_output_povray_DF3_class ())) static void write_density_value (FttCell * cell, gpointer * data) { unsigned char * buf = data[0]; gdouble * min = data[1]; gdouble * max = data[2]; GfsVariable * v = data[3]; guint * min_depth = data[4]; guint * max_depth = data[5]; Vector * dimensions = (Vector *) data[6]; guint xc = dimensions->x; guint yc = dimensions->y; guint zc = dimensions->z; guint position_size = *((guint *) data[7]); GtsBBox * bb_density = data[8]; FttVector p; guint pos = 0; gdouble value; guint value_i; guint level = ftt_cell_level(cell); if (level > *max_depth || level < *min_depth) { return; } ftt_cell_pos (cell, &p); gint xp = ((gdouble)(p.x - bb_density->x1))*POW2(*max_depth); gint yp = ((gdouble)(p.y - bb_density->y1))*POW2(*max_depth); gint zp = ((gdouble)(p.z - bb_density->z1))*POW2(*max_depth); pos = zp*(yc*xc) + yp*xc + xp; if (pos > xc*yc*zc) { return; } value = (GFS_VALUE (cell, v) - *min)/(*max - *min); if (level < *max_depth) { gdouble size = ftt_cell_size(cell)/2.0; gdouble x, y, z; int n = POW2(*max_depth - level); double d = ftt_cell_size(cell)/n; gdouble xmin = p.x - size; gdouble ymin = p.y - size; gdouble zmin = p.z - size; int i, j, k; gdouble t; FttVector p1; gint pos1; for (i = 0; i < n; i++) { x = xmin + (i + 0.5) * d; if (x < bb_density->x1 || x > bb_density->x2) { continue; } for (j = 0; j < n; j++) { y = ymin + (j + 0.5) * d; if (y < bb_density->y1 || y > bb_density->y2) { continue; } for (k = 0; k < n; k++) { z = zmin + (k + 0.5) * d; if (z < bb_density->z1 || z > bb_density->z2) { continue; } p1.x = x; p1.y = y; p1.z = z; pos1 = pos + (k - n/2)*(xc*yc) + (j - n/2)*xc + (i - n/2); if (pos1 < 0 || pos1 > xc*yc*zc) { continue; } t = gfs_interpolate(cell, p1, v); value = (t - *min)/(*max - *min); if (position_size == 2) { value_i = value * 0xffff; buf[2*pos1] = (unsigned char) ((value_i >> 8) & 0xff); buf[2*pos1 + 1] = (unsigned char) (value_i & 0xff); } else { value_i = value * 0xff; buf[pos1] = (unsigned char) (value_i & 0xff); } } } } } else { if (position_size == 2) { value_i = value * 0xffff; buf[2*pos] = (unsigned char) ((value_i >> 8) & 0xff); buf[2*pos + 1] = (unsigned char) (value_i & 0xff); } else { value_i = value * 0xff; buf[pos] = (unsigned char) (value_i & 0xff); } } } static void write_density_file (FILE * file, guint xc, guint yc, guint zc, char * density_buf, size_t density_buf_s) { unsigned char header[] = "\0\0\0\0\0\0"; g_return_if_fail (file != NULL); g_return_if_fail (density_buf != NULL); /* header: x,y,z dimensions, two bytes each, big endian */ header[0] = (unsigned char) ((xc & 0xff00) >> 8); header[1] = (unsigned char) (xc & 0xff); header[2] = (unsigned char) ((yc & 0xff00) >> 8); header[3] = (unsigned char) (yc & 0xff); header[4] = (unsigned char) ((zc & 0xff00) >> 8); header[5] = (unsigned char) (zc & 0xff); fwrite(header, sizeof(char), 6, file); /* write prepared data */ fwrite(density_buf, sizeof(char), density_buf_s, file); } static void max_extent (FttCell * cell, FttVector extent[2]) { gdouble h = ftt_cell_size (cell)/2.; FttVector pos; ftt_cell_pos (cell, &pos); if (pos.x - h < extent[0].x) extent[0].x = pos.x - h; if (pos.y - h < extent[0].y) extent[0].y = pos.y - h; if (pos.z - h < extent[0].z) extent[0].z = pos.z - h; if (pos.x + h > extent[1].x) extent[1].x = pos.x + h; if (pos.y + h > extent[1].y) extent[1].y = pos.y + h; if (pos.z + h > extent[1].z) extent[1].z = pos.z + h; } static gboolean cell_condition (FttCell * cell, gpointer condition) { return gfs_function_value (condition, cell); } static void gfs_write_povray_density(GfsDomain * domain, GfsFunction * condition, GfsVariable * v, gdouble min, gdouble max, FttTraverseFlags flags, gint level, FILE * fp) { FttVector extent[2] = {{ G_MAXDOUBLE, G_MAXDOUBLE, G_MAXDOUBLE }, { - G_MAXDOUBLE, - G_MAXDOUBLE, - G_MAXDOUBLE }}; Vector dimensions; GtsBBox bb_density; gpointer data[9]; /* Povray would support 1, 2, 4, but here we use only 1 byte * per voxel. */ guint position_size = 1; guint max_depth = 0; guint min_depth = 0; guint xc; guint yc; guint zc; size_t density_buf_s; char *density_buf = NULL; g_return_if_fail (domain != NULL); g_return_if_fail (fp != NULL); if (min == max) { max = min + 1.; } if (level < 0) { max_depth = gfs_domain_depth(domain); } else { max_depth = level; } if (condition) { gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse_condition (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) max_extent, extent, cell_condition, condition); gfs_restore_fpe_for_function (condition); } else gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) max_extent, extent); if (extent[0].x == G_MAXDOUBLE) return; bb_density.x1 = extent[0].x; bb_density.y1 = extent[0].y; bb_density.z1 = extent[0].z; bb_density.x2 = extent[1].x; bb_density.y2 = extent[1].y; bb_density.z2 = extent[1].z; /* total memory size */ xc = (extent[1].x - extent[0].x)*POW2(max_depth); yc = (extent[1].y - extent[0].y)*POW2(max_depth); zc = (extent[1].z - extent[0].z)*POW2(max_depth); dimensions.x = xc; dimensions.y = yc; dimensions.z = zc; /* if (verbose == TRUE) { fprintf (stdout, "level: %d\n", level); fprintf (stdout, "max_depth: %d\n", max_depth); fprintf (stdout, "xc, yc, zc: <%d, %d, %d>\n", xc, yc, zc); } */ density_buf_s = position_size * xc * yc * zc; density_buf = g_malloc (density_buf_s); if (density_buf == NULL) { g_warning ("GfsOutputPovrayDF3: Failed to allocate %ld bytes of memory", (long) density_buf_s); return; /* failure */ } memset(density_buf, 0, density_buf_s); data[0] = density_buf; data[1] = &min; data[2] = &max; data[3] = v; data[4] = &min_depth; data[5] = &max_depth; data[6] = &dimensions; data[7] = &position_size; data[8] = &bb_density; if (condition) { gfs_catch_floating_point_exceptions (); gfs_domain_cell_traverse_condition (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) write_density_value, data, cell_condition, condition); gfs_restore_fpe_for_function (condition); } else { gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, flags, level, (FttCellTraverseFunc) write_density_value, data); } /* write buffer to DF3 file */ write_density_file (fp, xc, yc, zc, density_buf, density_buf_s); g_free(density_buf); } /* ------------------------------------------------------ */ /* GfsOutputPovrayDF3: Object */ static gboolean gfs_output_povray_density_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_povray_DF3_class ())->parent_class)->event) (event, sim)) { GfsOutputScalar *output = GFS_OUTPUT_SCALAR (event); GfsDomain *domain = GFS_DOMAIN (sim); gfs_write_povray_density (domain, output->condition, output->v, output->min, output->max, FTT_TRAVERSE_LEAFS, output->maxlevel, GFS_OUTPUT (event)->file->fp); fflush (GFS_OUTPUT (event)->file->fp); return TRUE; } return FALSE; } static void gfs_output_povray_DF3_class_init (GfsOutputClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_output_povray_density_event; } GfsOutputClass * gfs_output_povray_DF3_class (void) { static GfsOutputClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_output_povray_density_info = { "GfsOutputPovrayDF3", sizeof (GfsOutputScalar), sizeof (GfsOutputClass), (GtsObjectClassInitFunc) gfs_output_povray_DF3_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()), &gfs_output_povray_density_info); } return klass; } /* Initialize module */ const gchar gfs_module_name[] = "df3"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { gfs_output_povray_DF3_class (); return NULL; } gerris-snapshot-131206/modules/ode.c0000644000175100017510000001536412250371171014256 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include "moving.h" static dWorldID world = 0; /* GfsSurfaceBcODE: Header */ typedef struct _GfsSurfaceBcODE GfsSurfaceBcODE; struct _GfsSurfaceBcODE { /*< private >*/ GfsSurfaceGenericBc parent; /*< public >*/ dBodyID body; FttComponent c; }; #define GFS_SURFACE_BC_ODE(obj) GTS_OBJECT_CAST (obj,\ GfsSurfaceBcODE,\ gfs_surface_bc_ode_class ()) #define GFS_IS_SURFACE_BC_ODE(obj) (gts_object_is_from_class (obj,\ gfs_surface_bc_ode_class ())) static GfsSurfaceGenericBcClass * gfs_surface_bc_ode_class (void); /* GfsSurfaceBcODE: Object */ static void surface_bc_ode_read (GtsObject ** o, GtsFile * fp) { /* defined only through SolidMovingODE */ } static void surface_bc_ode_write (GtsObject * o, FILE * fp) { /* defined only through SolidMovingODE */ } static void surface_bc_ode_bc (FttCell * cell, GfsSurfaceGenericBc * b) { GfsSurfaceBcODE * bc = GFS_SURFACE_BC_ODE (b); FttVector * p = &GFS_STATE (cell)->solid->ca; dVector3 v; cell->flags |= GFS_FLAG_DIRICHLET; dBodyGetPointVel (bc->body, p->x, p->y, p->z, v); GFS_STATE (cell)->solid->fv = v[bc->c]; } static void surface_bc_ode_class_init (GfsSurfaceGenericBcClass * klass) { GTS_OBJECT_CLASS (klass)->read = surface_bc_ode_read; GTS_OBJECT_CLASS (klass)->write = surface_bc_ode_write; klass->bc = surface_bc_ode_bc; } static GfsSurfaceGenericBcClass * gfs_surface_bc_ode_class (void) { static GfsSurfaceGenericBcClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_surface_bc_info = { "GfsSurfaceBcODE", sizeof (GfsSurfaceBcODE), sizeof (GfsSurfaceGenericBcClass), (GtsObjectClassInitFunc) surface_bc_ode_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_surface_generic_bc_class ()), &gfs_surface_bc_info); } return klass; } /* GfsSolidMovingODE: Header */ typedef struct _GfsSolidMovingODE GfsSolidMovingODE; struct _GfsSolidMovingODE { /*< private >*/ GfsSolidMoving parent; dBodyID body; /*< public >*/ }; static GfsEventClass * gfs_solid_moving_ode_class (void); #define GFS_SOLID_MOVING_ODE(obj) GTS_OBJECT_CAST (obj,\ GfsSolidMovingODE,\ gfs_solid_moving_ode_class ()) #define GFS_IS_SOLID_MOVING_ODE(obj) (gts_object_is_from_class (obj,\ gfs_solid_moving_ode_class ())) /* GfsSolidMovingODE: Object */ static void solid_moving_ode_destroy (GtsObject * object) { dBodyDestroy (GFS_SOLID_MOVING_ODE (object)->body); (* GTS_OBJECT_CLASS (gfs_solid_moving_ode_class ())->parent_class->destroy) (object); } static void solid_moving_ode_read (GtsObject ** o, GtsFile * fp) { GfsSolidMovingODE * solid = GFS_SOLID_MOVING_ODE (*o); (* GTS_OBJECT_CLASS (gfs_solid_moving_ode_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsVariable ** v = gfs_domain_velocity (GFS_DOMAIN (gfs_object_simulation (solid))); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) if (v[c]->surface_bc) { gts_file_error (fp, "variable `%s' already has a surface boundary condition", v[c]->name); return; } else { GfsSurfaceGenericBc * bc = GFS_SURFACE_GENERIC_BC (gts_object_new (GTS_OBJECT_CLASS (gfs_surface_bc_ode_class ()))); bc->v = v[c]; bc->v->surface_bc = bc; GFS_SURFACE_BC_ODE (bc)->body = solid->body; GFS_SURFACE_BC_ODE (bc)->c = c; } if (fp->type == '{') { gdouble vx = 0., vy = 0., vz = 0.; gdouble gx = 0., gy = 0., gz = 0.; GtsFileVariable var[] = { {GTS_DOUBLE, "vx", TRUE, &vx}, {GTS_DOUBLE, "vy", TRUE, &vy}, {GTS_DOUBLE, "vz", TRUE, &vz}, {GTS_DOUBLE, "gx", TRUE, &gx}, {GTS_DOUBLE, "gy", TRUE, &gy}, {GTS_DOUBLE, "gz", TRUE, &gz}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; dBodySetLinearVel (solid->body, vx, vy, vz); dWorldSetGravity (world, gx, gy, gz); } } static gboolean solid_moving_ode_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_solid_moving_ode_class ())->parent_class)->event) (event, sim)) { FttVector pf, vf, pm, vm; dBodyID body = GFS_SOLID_MOVING_ODE (event)->body; gfs_domain_solid_force (GFS_DOMAIN (sim), &pf, &vf, &pm, &vm, NULL); dBodyAddForce (body, pf.x + vf.x, pf.y + vf.y, pf.z + vf.z); dBodyAddTorque (body, pm.x + vm.x, pm.y + vm.y, pm.z + vm.z); dWorldStep (world, sim->advection_params.dt); return TRUE; } return FALSE; } static void solid_moving_ode_class_init (GfsEventClass * klass) { GTS_OBJECT_CLASS (klass)->destroy = solid_moving_ode_destroy; GTS_OBJECT_CLASS (klass)->read = solid_moving_ode_read; klass->event = solid_moving_ode_event; } static void solid_moving_ode_init (GfsSolidMovingODE * solid) { solid->body = dBodyCreate (world); dMass mass; dMassSetSphereTotal (&mass, 1., 0.25*0.3); dBodySetMass (solid->body, &mass); } static GfsEventClass * gfs_solid_moving_ode_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo solid_moving_ode_info = { "GfsSolidMovingODE", sizeof (GfsSolidMovingODE), sizeof (GfsEventClass), (GtsObjectClassInitFunc) solid_moving_ode_class_init, (GtsObjectInitFunc) solid_moving_ode_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_solid_moving_class ()), &solid_moving_ode_info); } return klass; } /* Initialize module */ /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "ode"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { dInitODE (); world = dWorldCreate (); gfs_solid_moving_ode_class (); return NULL; } gerris-snapshot-131206/modules/map.c0000644000175100017510000001416512250371171014262 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include "simulation.h" #include "map.h" /* GfsMapProjection: Header */ typedef struct _GfsMapProjection GfsMapProjection; struct _GfsMapProjection { /*< private >*/ GfsMap parent; projPJ pj; gdouble cosa, sina; /*< public >*/ gdouble lon, lat, angle; }; #define GFS_MAP_PROJECTION(obj) GTS_OBJECT_CAST (obj,\ GfsMapProjection,\ gfs_map_projection_class ()) #define GFS_IS_MAP_PROJECTION(obj) (gts_object_is_from_class (obj,\ gfs_map_projection_class ())) GfsMapClass * gfs_map_projection_class (void); /* GfsMapProjection: Object */ static void gfs_map_projection_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_map_projection_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GtsFileVariable var[] = { {GTS_DOUBLE, "lon", TRUE}, {GTS_DOUBLE, "lat", TRUE}, {GTS_DOUBLE, "angle", TRUE}, {GTS_NONE} }; GfsMapProjection * map = GFS_MAP_PROJECTION (*o); var[0].data = &map->lon; var[1].data = &map->lat; var[2].data = &map->angle; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; map->cosa = cos (map->angle*DEG_TO_RAD); map->sina = sin (map->angle*DEG_TO_RAD); char * parms[] = { "proj=lcc", /* Lambert Conformal Conic */ NULL, NULL, NULL, NULL }; parms[1] = g_strdup_printf ("lon_0=%lf", map->lon); parms[2] = g_strdup_printf ("lat_0=%lf", map->lat); parms[3] = g_strdup_printf ("lat_1=%lf", map->lat); parms[4] = g_strdup_printf ("lat_2=%lf", map->lat); map->pj = pj_init (sizeof(parms)/sizeof(char *), parms); if (!map->pj) gts_file_error (fp, "cannot initialise projection"); g_free (parms[1]); g_free (parms[2]); g_free (parms[3]); g_free (parms[4]); } static void gfs_map_projection_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_map_projection_class ())->parent_class->write) (o, fp); GfsMapProjection * map = GFS_MAP_PROJECTION (o); fprintf (fp, " { lon = %.8g lat = %.8g angle = %g }", map->lon, map->lat, map->angle); } static void gfs_map_projection_destroy (GtsObject * object) { if (GFS_MAP_PROJECTION (object)->pj) pj_free (GFS_MAP_PROJECTION (object)->pj); (* GTS_OBJECT_CLASS (gfs_map_projection_class ())->parent_class->destroy) (object); } static void projection_transform (GfsMap * map, const FttVector * src, FttVector * dest) { projLP idata; projXY odata; GfsMapProjection * m = GFS_MAP_PROJECTION (map); gdouble L = gfs_object_simulation (map)->physical_params.L; idata.u = src->x*L*DEG_TO_RAD; idata.v = src->y*L*DEG_TO_RAD; odata = pj_fwd (idata, m->pj); dest->x = (odata.u*m->cosa - odata.v*m->sina)/L; dest->y = (odata.v*m->cosa + odata.u*m->sina)/L; dest->z = src->z; } static void projection_inverse (GfsMap * map, const FttVector * src, FttVector * dest) { projLP odata; projXY idata; GfsMapProjection * m = GFS_MAP_PROJECTION (map); gdouble L = gfs_object_simulation (map)->physical_params.L; idata.u = (src->x*m->cosa + src->y*m->sina)*L; idata.v = (src->y*m->cosa - src->x*m->sina)*L; odata = pj_inv (idata, GFS_MAP_PROJECTION (map)->pj); dest->x = odata.u*RAD_TO_DEG/L; dest->y = odata.v*RAD_TO_DEG/L; dest->z = src->z; } static void projection_inverse_cell (GfsMap * map, const FttVector * src, FttVector * dest) { gint i; FttVector o = { 0., 0., 0. }; for (i = 0; i < 4; i++) { o.x += src[i].x; o.y += src[i].y; o.z += src[i].z; projection_inverse (map, &(src[i]), &(dest[i])); } o.x /= 4.; o.y /= 4.; o.z /= 4.; projection_inverse (map, &o, &o); /* make sure we do not cross periodic longitude boundary */ gdouble L = gfs_object_simulation (map)->physical_params.L; for (i = 0; i < 4; i++) if (dest[i].x > o.x + 180./L) dest[i].x -= 360./L; else if (dest[i].x < o.x - 180./L) dest[i].x += 360./L; } static void gfs_map_projection_class_init (GfsMapClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_map_projection_read; GTS_OBJECT_CLASS (klass)->write = gfs_map_projection_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_map_projection_destroy; } static void gfs_map_projection_init (GfsMapProjection * object) { /* Wellington */ object->lon = 174.777222; object->lat = -41.288889; object->angle = 0.; object->cosa = 1.; object->sina = 0.; object->pj = NULL; GFS_MAP (object)->transform = projection_transform; GFS_MAP (object)->inverse = projection_inverse; GFS_MAP (object)->inverse_cell = projection_inverse_cell; } GfsMapClass * gfs_map_projection_class (void) { static GfsMapClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_map_projection_info = { "GfsMapProjection", sizeof (GfsMapProjection), sizeof (GfsMapClass), (GtsObjectClassInitFunc) gfs_map_projection_class_init, (GtsObjectInitFunc) gfs_map_projection_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_map_class ()), &gfs_map_projection_info); } return klass; } /* Initialize module */ /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "map"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { gfs_map_projection_class (); return NULL; } gerris-snapshot-131206/modules/RStarTree/0000755000175100017510000000000012250371671015272 500000000000000gerris-snapshot-131206/modules/RStarTree/RSTUtil.h0000644000175100017510000000421112250371171016662 00000000000000/* ----- RSTUtil.h ----- */ #ifndef __RSTUtil_h #define __RSTUtil_h #include "RStarTree.h" /* declarations */ void FalseArray(int *ptr, int wordsqty); void CopyRect(RSTREE, typrect from, typrect to); void EvalCenter(RSTREE R, typrect rectangle, typpoint center); double RSTDistance(RSTREE R, typpoint point1, typpoint point2); void EvalDirEnclRect(RSTREE R, refDIRnode node, typrect rect); void EvalDataEnclRect(RSTREE R, refDATAnode node, typrect rect); boolean Overlaps(RSTREE R, typrect rect1, typrect rect2); boolean RSTEqual(RSTREE R, typrect rect1, typrect rect2); boolean Covers(RSTREE R, typrect crect, typrect rect); void GetOverlap(RSTREE R, typrect r1, typrect r2, double *spc); void QuickSortValArr(int begin, int end, ValueArray value, IndexArray I); void QuickSortDirEnt(int begin, int end, int dim, Side side, typDIRentries Ntosort, IndexArray I); void QuickSortDataEnt(int begin, int end, int dim, Side side, typDATAentries Ntosort, IndexArray I); void ChooseSubtree(RSTREE R, typrect newrect, int depth, refDIRnode node, int *found); void AdjustChain(RSTREE R, int depth, typrect newrect); void AdjustChainAfterDeletion(RSTREE R, int depth); #endif /* !__RSTUtil_h */ gerris-snapshot-131206/modules/RStarTree/README0000644000175100017510000000134212250371171016065 00000000000000User guide for RStarTree Version R2.xx (VR2.xx) ----------------------------------------------- The files "RStarTree.h", "RSTBase.h" and "libcSmRST.a" should reside in the directory, where this README file resides. We will call this directory "dest". RStarTree.h is the user interface. RSTBase.h is a private header file included by RStarTree.h. Provided that, RSTREE is a typed pointer (not a void). SYNOPSYS Compilation: #include "dest/RStarTree.h" Linking: -Ldest -lcSmRST The usage of the RStarTree implementation is explained in RStarTree.h. You might have a look at dest/src/trst.c as an example as well. trst uses a little set implementation also located in dest/src. Installation hints you'll find in dest/src/READMEInstall. gerris-snapshot-131206/modules/RStarTree/RSTJoin.c0000644000175100017510000003646512250371171016657 00000000000000/* ----- RSTJoin.c ----- */ #include "RStarTree.h" #include "RSTJoin.h" #include "RSTUtil.h" #include "RSTInOut.h" /* declarations */ static void JnRgnCntNv(RSTREE R, RSTREE Rx, boolean order, int depth, typrect dataqueryrect1, typrect dataqueryrect2, typrect joinrect, DataQueryProc DataQuery, DirQueryProc DirJoin, DataQueryProc DataJoin, int *keysqualifying); static void JnRgnQueryNv(RSTREE R, RSTREE Rx, boolean order, int depth, typrect dataqueryrect1, typrect dataqueryrect2, typrect joinrect, refinfo ptr_to_info_of_other_tree, DataQueryProc DataQuery, DirQueryProc DirJoin, DataQueryProc DataJoin, JoinManageProc Manage, void *buf1, void *buf2, boolean *finish); /************************************************************************/ void JnCntNv(RSTREE R1, RSTREE R2, int depth, typrect R1rectangle1, typrect R1rectangle2, typrect R2rectangle1, typrect R2rectangle2, DirQueryProc Dir1Query, DataQueryProc Data1Query, DirQueryProc Dir2Query, DataQueryProc Data2Query, DirQueryProc DirJoin, DataQueryProc DataJoin, int *keysqualifying, int *mark) { refDATAnode n; refcount c; boolean istoread1, istoread2; int downqualifying; typrect unused; int i, j; boolean verbosejoincount= TRUE; if (depth != (*R1).parameters._.height && depth != (*R2).parameters._.height) { for (i= 0; i < (*(*R1).N[depth]).DIR.nofentries; i++) { for (j= 0; j < (*(*R2).N[depth]).DIR.nofentries; j++) { if ( Dir1Query(R1,(*(*R1).N[depth]).DIR.entries[i].rect, R1rectangle1,R1rectangle2) && Dir2Query(R2,(*(*R2).N[depth]).DIR.entries[j].rect, R2rectangle1,R2rectangle2) ) { if (DirJoin(R1,(*(*R1).N[depth]).DIR.entries[i].rect, (*(*R2).N[depth]).DIR.entries[j].rect,unused)) { /* R1 sets the number of dimensions and type */ (*R1).E[depth]= i; (*R2).E[depth]= j; istoread1= (*(*R1).N[depth]).DIR.entries[i].ptrtosub != (*R1).P[depth+1]; if ( istoread1 ) { NewNode(R1,depth+1); } istoread2= (*(*R2).N[depth]).DIR.entries[j].ptrtosub != (*R2).P[depth+1]; if ( istoread2 ) { NewNode(R2,depth+1); } JnCntNv(R1,R2, depth+1, R1rectangle1,R1rectangle2,R2rectangle1,R2rectangle2, Dir1Query,Data1Query,Dir2Query,Data2Query,DirJoin,DataJoin, keysqualifying, mark); } } } } c= &(*R1).count; if ((*c).countflag) { (*c).dirvisitcount++; } c= &(*R2).count; if ( (*c).countflag ) { (*c).dirvisitcount++; } } else { if (depth == (*R1).parameters._.height) { n= &(*(*R1).N[depth]).DATA; for (i= 0; i < (*n).nofentries; i++) { downqualifying= 0; if (Data1Query(R1,(*n).entries[i].rect,R1rectangle1,R1rectangle2)) { JnRgnCntNv(R2,R1,FALSE,depth, R2rectangle1,R2rectangle2, (*n).entries[i].rect, Data2Query, DirJoin,DataJoin, &downqualifying); *keysqualifying+= downqualifying; if (verbosejoincount) { if (*keysqualifying > *mark) { printf("%s%10d%s\n","More than",*mark," record pairs."); if (*mark < 1000) { *mark+= 100; } else if (*mark < 10000) { *mark+= 1000; } else { *mark+= 10000; } } } } } c= &(*R1).count; if ((*c).countflag) { (*c).datavisitcount++; } } else { n= &(*(*R2).N[depth]).DATA; for (i= 0; i < (*n).nofentries; i++) { downqualifying= 0; if (Data2Query(R2,(*n).entries[i].rect,R2rectangle1,R2rectangle2)) { JnRgnCntNv(R1,R2,TRUE,depth, R1rectangle1,R1rectangle2, (*n).entries[i].rect, Data1Query, DirJoin,DataJoin, &downqualifying); *keysqualifying+= downqualifying; if (verbosejoincount) { if (*keysqualifying > *mark) { printf("%s%10d%s\n","More than",*mark," record pairs."); if (*mark < 1000) { *mark+= 100; } else if (*mark < 10000) { *mark+= 1000; } else { *mark+= 10000; } } } } } c= &(*R2).count; if ((*c).countflag) { (*c).datavisitcount++; } } } } /************************************************************************/ static void JnRgnCntNv(RSTREE R, RSTREE Rx, boolean order, int depth, typrect dataqueryrect1, typrect dataqueryrect2, typrect joinrect, DataQueryProc DataQuery, DirQueryProc DirJoin, DataQueryProc DataJoin, int *keysqualifying) { refDIRnode DIN; refDATAnode DAN; refcount c; boolean istoread; typrect unused; int i; if (depth != (*R).parameters._.height) { DIN= &(*(*R).N[depth]).DIR; if (order) { for (i= 0; i < (*DIN).nofentries; i++) { if (DirJoin(R,(*DIN).entries[i].rect,joinrect,unused)) { (*R).E[depth]= i; istoread= (*DIN).entries[i].ptrtosub != (*R).P[depth+1]; if ( istoread ) { NewNode(R,depth+1); } JnRgnCntNv(R,Rx,order,depth+1, dataqueryrect1,dataqueryrect2,joinrect, DataQuery,DirJoin,DataJoin, keysqualifying); } } } else { for (i= 0; i < (*DIN).nofentries; i++) { if (DirJoin(Rx,joinrect,(*DIN).entries[i].rect,unused)) { (*R).E[depth]= i; istoread= (*DIN).entries[i].ptrtosub != (*R).P[depth+1]; if (istoread) { NewNode(R,depth+1); } JnRgnCntNv(R,Rx,order,depth+1, dataqueryrect1,dataqueryrect2,joinrect, DataQuery,DirJoin,DataJoin, keysqualifying); } } } c= &(*R).count; if ((*c).countflag) { (*c).dirvisitcount++; } } else { DAN= &(*(*R).N[depth]).DATA; if (order) { for (i= 0; i < (*DAN).nofentries; i++) { if (DataQuery(R,(*DAN).entries[i].rect,dataqueryrect1,dataqueryrect2)) { if (DataJoin(R,(*DAN).entries[i].rect,joinrect,unused)) { (*R).E[depth]= i; (*keysqualifying)++; } } } } else { for (i= 0; i < (*DAN).nofentries; i++) { if (DataQuery(R,(*DAN).entries[i].rect,dataqueryrect1,dataqueryrect2)) { if (DataJoin(Rx,joinrect,(*DAN).entries[i].rect,unused)) { (*R).E[depth]= i; (*keysqualifying)++; } } } } c= &(*R).count; if ((*c).countflag) { (*c).datavisitcount++; } } } /************************************************************************/ void JnNv(RSTREE R1, RSTREE R2, int depth, typrect R1rectangle1, typrect R1rectangle2, typrect R2rectangle1, typrect R2rectangle2, DirQueryProc Dir1Query, DataQueryProc Data1Query, DirQueryProc Dir2Query, DataQueryProc Data2Query, DirQueryProc DirJoin, DataQueryProc DataJoin, JoinManageProc Manage, void *buf1, void *buf2, boolean *finish) { refDATAnode n; refcount c; boolean istoread1, istoread2; typrect unused; int i, j; if (depth != (*R1).parameters._.height && depth != (*R2).parameters._.height) { c= &(*R1).count; if ((*c).countflag) { (*c).dirvisitcount++; } c= &(*R2).count; if ( (*c).countflag ) { (*c).dirvisitcount++; } for (i= 0; i < (*(*R1).N[depth]).DIR.nofentries; i++) { if (*finish) {return;} for (j= 0; j < (*(*R2).N[depth]).DIR.nofentries; j++) { if (*finish) {return;} if ( Dir1Query(R1,(*(*R1).N[depth]).DIR.entries[i].rect, R1rectangle1,R1rectangle2) && Dir2Query(R2,(*(*R2).N[depth]).DIR.entries[j].rect, R2rectangle1,R2rectangle2) ) { if (DirJoin(R1,(*(*R1).N[depth]).DIR.entries[i].rect, (*(*R2).N[depth]).DIR.entries[j].rect,unused)) { /* R1 sets the number of dimensions and type */ (*R1).E[depth]= i; (*R2).E[depth]= j; istoread1= (*(*R1).N[depth]).DIR.entries[i].ptrtosub != (*R1).P[depth+1]; if ( istoread1 ) { NewNode(R1,depth+1); } istoread2= (*(*R2).N[depth]).DIR.entries[j].ptrtosub != (*R2).P[depth+1]; if ( istoread2 ) { NewNode(R2,depth+1); } JnNv(R1,R2, depth+1, R1rectangle1,R1rectangle2,R2rectangle1,R2rectangle2, Dir1Query,Data1Query,Dir2Query,Data2Query,DirJoin,DataJoin, Manage,buf1,buf2,finish); } } } } } else { if (depth == (*R1).parameters._.height) { c= &(*R1).count; if ((*c).countflag) { (*c).datavisitcount++; } n= &(*(*R1).N[depth]).DATA; for (i= 0; i < (*n).nofentries; i++) { if (*finish) {return;} if (Data1Query(R1,(*n).entries[i].rect,R1rectangle1,R1rectangle2)) { JnRgnQueryNv(R2,R1,FALSE,depth, R2rectangle1,R2rectangle2, (*n).entries[i].rect, &(*n).entries[i].info, Data2Query, DirJoin,DataJoin, Manage,buf1,buf2,finish); } } } else { c= &(*R2).count; if ((*c).countflag) { (*c).datavisitcount++; } n= &(*(*R2).N[depth]).DATA; for (i= 0; i < (*n).nofentries; i++) { if (*finish) {return;} if (Data2Query(R2,(*n).entries[i].rect,R2rectangle1,R2rectangle2)) { JnRgnQueryNv(R1,R2,TRUE,depth, R1rectangle1,R1rectangle2, (*n).entries[i].rect, &(*n).entries[i].info, Data1Query, DirJoin,DataJoin, Manage,buf1,buf2,finish); } } } } } /************************************************************************/ static void JnRgnQueryNv(RSTREE R, RSTREE Rx, boolean order, int depth, typrect dataqueryrect1, typrect dataqueryrect2, typrect joinrect, typinfo *joininfo, DataQueryProc DataQuery, DirQueryProc DirJoin, DataQueryProc DataJoin, JoinManageProc Manage, void *buf1, void *buf2, boolean *finish) { refDIRnode DIN; refDATAnode DAN; refcount c; boolean istoread; typrect rectR1, rectR2, unused; int i; if (depth != (*R).parameters._.height) { c= &(*R).count; if ((*c).countflag) { (*c).dirvisitcount++; } DIN= &(*(*R).N[depth]).DIR; if (order) { for (i= 0; i < (*DIN).nofentries; i++) { if (*finish) {return;} if (DirJoin(R,(*DIN).entries[i].rect,joinrect,unused)) { (*R).E[depth]= i; istoread= (*DIN).entries[i].ptrtosub != (*R).P[depth+1]; if ( istoread ) { NewNode(R,depth+1); } JnRgnQueryNv(R,Rx,order,depth+1, dataqueryrect1,dataqueryrect2, joinrect, joininfo, DataQuery,DirJoin,DataJoin, Manage,buf1,buf2,finish); } } } else { for (i= 0; i < (*DIN).nofentries; i++) { if (*finish) {return;} if (DirJoin(Rx,joinrect,(*DIN).entries[i].rect,unused)) { (*R).E[depth]= i; istoread= (*DIN).entries[i].ptrtosub != (*R).P[depth+1]; if (istoread) { NewNode(R,depth+1); } JnRgnQueryNv(R,Rx,order,depth+1, dataqueryrect1,dataqueryrect2, joinrect, joininfo, DataQuery,DirJoin,DataJoin, Manage,buf1,buf2,finish); } } } } else { c= &(*R).count; if ((*c).countflag) { (*c).datavisitcount++; } DAN= &(*(*R).N[depth]).DATA; if (order) { for (i= 0; i < (*DAN).nofentries; i++) { if (*finish) {return;} if (DataQuery(R,(*DAN).entries[i].rect,dataqueryrect1,dataqueryrect2)) { if (DataJoin(R,(*DAN).entries[i].rect,joinrect,unused)) { (*R).E[depth]= i; CopyRect(R,(*DAN).entries[i].rect,rectR1); CopyRect(R,joinrect,rectR2); Manage(R,Rx, rectR1,rectR2, &(*DAN).entries[i].info,joininfo, buf1,buf2, finish); } } } } else { for (i= 0; i < (*DAN).nofentries; i++) { if (*finish) {return;} if (DataQuery(R,(*DAN).entries[i].rect,dataqueryrect1,dataqueryrect2)) { if (DataJoin(Rx,joinrect,(*DAN).entries[i].rect,unused)) { (*R).E[depth]= i; CopyRect(Rx,joinrect,rectR1); CopyRect(Rx,(*DAN).entries[i].rect,rectR2); Manage(Rx,R, rectR1,rectR2, joininfo,&(*DAN).entries[i].info, buf1,buf2, finish); } } } } } } /************************************************************************/ gerris-snapshot-131206/modules/RStarTree/RSTInterUtil.h0000644000175100017510000000132712250371171017671 00000000000000/* ----- RSTInterUtil.h ----- */ #ifndef __RSTInterUtil_h #define __RSTInterUtil_h #include "RStarTree.h" /* constants */ #define minimumFillPercentage 40 #define minFillPercSmallFanout 50 #define ReInsertPercentage 30 #define maximumNeighborsToExamine 32 /* declarations */ void CreateRSFiles(RSTREE R); void OpenRSFiles(RSTREE R, int O_MODE); void FastCloseRSFiles(RSTREE R); void CloseRSFiles(RSTREE R); void SetBase(RSTREE R, int pagelen, boolean unique); void SetCheckDir(RSTREE R, boolean creation); void SetCheckData(RSTREE R, boolean creation); void InitChainFlags(RSTREE R); void AllocBuffers(RSTREE R); void DeallocBuffers(RSTREE R); void InitCount(RSTREE R); #endif /* !__RSTInterUtil_h */ gerris-snapshot-131206/modules/RStarTree/RSTInOut.c0000644000175100017510000001117112250371171017001 00000000000000/* ----- RSTInOut.c ----- */ #include "RStarTree.h" #include "RSTInOut.h" /* declarations */ /************************************************************************/ void PutNode(RSTREE R, refnode nodeptr, int pagenr, int depth) { refparameters par; refcount c; par= &(*R).parameters._; if (depth == (*par).height) { WritePage(R,(*R).data,pagenr,nodeptr); c= &(*R).count; if ((*c).countflag) { (*c).datawritecount++; } } else { WritePage(R,(*R).dir,pagenr,nodeptr); c= &(*R).count; if ((*c).countflag) { (*c).dirwritecount++; } } } /************************************************************************/ void GetNode(RSTREE R, refnode nodeptr, int pagenr, int depth) { refparameters par; refcount c; par= &(*R).parameters._; if (depth == (*par).height) { ReadPage(R,(*R).data,pagenr,nodeptr); c= &(*R).count; if ((*c).countflag) { (*c).datareadcount++; } } else { ReadPage(R,(*R).dir,pagenr,nodeptr); c= &(*R).count; if ((*c).countflag) { (*c).dirreadcount++; } } } /************************************************************************/ void NewNode(RSTREE R, int depth) { if ((*R).Nmodified[depth]) { PutNode(R,(*R).N[depth],(*R).P[depth],depth); (*R).Nmodified[depth]= FALSE; } (*R).P[depth]= (*(*R).N[depth-1]).DIR.entries[(*R).E[depth-1]].ptrtosub; GetNode(R,(*R).N[depth],(*R).P[depth],depth); } /************************************************************************/ void ReadPage(RSTREE R, typfiledesc fd, int pagenr, void *block) { int pnb; /* position or nbytes */ pnb= lseek(fd.f,(off_t)pagenr*(off_t)fd.bl,SEEK_SET); if (pnb != -1) { pnb= read(fd.f,block,fd.bl); } if (pnb <= 0) { (*R).RSTDone= FALSE; } } /************************************************************************/ void WritePage(RSTREE R, typfiledesc fd, int pagenr, void *block) { int pnb; /* position or nbytes */ pnb= lseek(fd.f,(off_t)pagenr*(off_t)fd.bl,SEEK_SET); if (pnb != -1) { pnb= write(fd.f,block,fd.bl); } if (pnb <= 0) { (*R).RSTDone= FALSE; } } /************************************************************************/ void GetPageNr(RSTREE R, int *pagenr, int depth) { refparameters par; refpagedir dpd; par= &(*R).parameters._; if (depth == (*par).height) { dpd= &(*R).datapagedir._; if ((*dpd).nofnumbers == 0) { if ((*dpd).childnr == firstPDblocknumb) { (*dpd).number[0]++; *pagenr= (*dpd).number[0]; } else { ReadPage(R,(*R).dataPD,(*dpd).childnr,&(*R).datapagedir._); (*dpd).childnr--; *pagenr= (*dpd).number[maxnum]; (*dpd).nofnumbers= maxnum - 1; } } else { *pagenr= (*dpd).number[(*dpd).nofnumbers]; (*dpd).nofnumbers--; } (*par).datapagecount++; } else { dpd= &(*R).dirpagedir._; if ((*dpd).nofnumbers == 0) { if ((*dpd).childnr == firstPDblocknumb) { (*dpd).number[0]++; *pagenr= (*dpd).number[0]; } else { ReadPage(R,(*R).dirPD,(*dpd).childnr,&(*R).dirpagedir._); (*dpd).childnr--; *pagenr= (*dpd).number[maxnum]; (*dpd).nofnumbers= maxnum - 1; } } else { *pagenr= (*dpd).number[(*dpd).nofnumbers]; (*dpd).nofnumbers--; } (*par).dirpagecount++; } (*par).pagecountarr[depth]++; } /************************************************************************/ void PutPageNr(RSTREE R, int pagenr, int depth) { refparameters par; refpagedir dpd; par= &(*R).parameters._; if (depth == (*par).height) { dpd= &(*R).datapagedir._; if ((*dpd).nofnumbers == maxnum) { (*dpd).childnr++; WritePage(R,(*R).dataPD,(*dpd).childnr,&(*R).datapagedir._); (*dpd).nofnumbers= 1; (*dpd).number[1]= pagenr; } else { (*dpd).nofnumbers++; (*dpd).number[(*dpd).nofnumbers]= pagenr; } (*par).datapagecount--; } else { dpd= &(*R).dirpagedir._; if ((*dpd).nofnumbers == maxnum) { (*dpd).childnr++; WritePage(R,(*R).dirPD,(*dpd).childnr,&(*R).dirpagedir._); (*dpd).nofnumbers= 1; (*dpd).number[1]= pagenr; } else { (*dpd).nofnumbers++; (*dpd).number[(*dpd).nofnumbers]= pagenr; } (*par).dirpagecount--; } (*par).pagecountarr[depth]--; } /************************************************************************/ gerris-snapshot-131206/modules/RStarTree/RSTQuery.h0000644000175100017510000000257112250371171017061 00000000000000/* ----- RSTQuery.h ----- */ #ifndef __RSTQuery_h #define __RSTQuery_h #include "RStarTree.h" /* declarations */ boolean FoundRect(RSTREE R, int depth, typrect rectangle, boolean isinsert, refinfo *infoadr); void XstsRgn(RSTREE R, int depth, typrect rectangle1, typrect rectangle2, DirQueryProc DirQuery, DataQueryProc DataQuery, boolean *found); void RgnCnt(RSTREE R, int depth, typrect rectangle1, typrect rectangle2, DirQueryProc DirQuery, DataQueryProc DataQuery, int *keysqualifying); void RgnQuery(RSTREE R, int depth, typrect rectangle1, typrect rectangle2, DirQueryProc DirQuery, DataQueryProc DataQuery, QueryManageProc Manage, void *buf, boolean *finish); void All(RSTREE R, int depth, QueryManageProc Manage, void *buf, boolean *finish); void UpdateAll(RSTREE R, int depth, typrect rect, typdirinfo * info); void RgnQueryInfo(RSTREE R, int depth, Check includes, Check intersects, void * data, typrect rect, typdirinfo * info); #endif /* !__RSTQuery_h */ gerris-snapshot-131206/modules/RStarTree/RStarTree.h0000644000175100017510000007011212250371171017232 00000000000000/* ----- RStarTree.h ----- */ #ifndef __RStarTree_h #define __RStarTree_h /** R*-tree ======= **/ /** Implementation: Norbert Beckmann Version: R.2.0 Date: 6/93 **/ /** Praktische Informatik, Universitaet Bremen, D-2800 Bremen 33, Germany **/ /* ---------------------- operating system version --------------------- */ /* #ifndef SVR4 # define SVR4 #endif */ #include #include #include #include #include #include #include #include #include /* padding on 32 bits systems (to match automatic 64 bits padding) */ #if defined (__LP64__) || defined (__64BIT__) || defined (_LP64) || (__WORDSIZE == 64) #define PADDING_32_BITS #else #define PADDING_32_BITS int padding #endif /* ----------------------------- constants ----------------------------- */ #define byte unsigned char #define boolean int #define FALSE 0 #define TRUE 1 #define int int /**V**/ /* large data sets require a 32 bit int */ #define MaxNameLength 160 /* including less than 10 bytes for a suffix */ #define MaxNumbOfEntriesPerPage 512 /**V**/ #define NumbOfDim 2 /**V**/ /* ------------------------------- types ------------------------------- */ typedef int File; typedef float typatomkey; /**V**/ /* typatomkey may be of any type as far as the standard comparisons apply */ typedef struct { typatomkey l, h; } typinterval; typedef typinterval typrect[NumbOfDim]; /* A typrect is the key type an R*-tree handles. The smallest entity which may be used as a key is an interval, i.e. a typrect[1]. */ typedef struct { float height; } typinfo, *refinfo; /* A typinfo is a struct which may contain arbitrary information associated with a data record. RESTRICTION: sizeof(typinfo) >= sizeof(int) must hold! */ typedef struct { double m01, m02, m03; double m11, m13; double m22, m23, m33; double m44, m55, m66, m77; double m67, m76; double H0, H1, H2, H3, H4; double H5, H6; float Hmin, Hmax; int n; PADDING_32_BITS; } typdirinfo; /* A typdirinfo is a struct which may contain arbitrary information associated with a directory record. */ typedef int (* Check) (typrect rect, void * data, int depth); /* ------------------------- private includes -------------------------- */ #include "RSTBase.h" /* ----------------------------- R*-tree ------------------------------- */ typedef rstree *RSTREE; /* R*-tree identifier */ /* ------------------------- procedure types --------------------------- */ typedef boolean (*DirQueryProc) (RSTREE /* rst */, typrect /* dirrect */, typrect /* queryrect1 */, typrect /* queryrect2 */); /* rst: contains the R*-tree identifier as passed to the procedures RegionQuery, ExistsRegion and RegionCount respectively. dirrect: contains a multidimensional directory rectangle. queryrect1, queryrect2: contain queryrect1 and queryrect2 as passed to the procedures RegionQuery, ExistsRegion and RegionCount respectively. This type is also used in the JoinXX procedures to perform the join. Then the parameters will have a slightly different contents, see the JoinXX procedures. */ typedef boolean (*DataQueryProc) (RSTREE /* rst */, typrect /* datarect */, typrect /* queryrect1 */, typrect /* queryrect2 */); /* rst: contains the R*-tree identifier as passed to the procedures RegionQuery, ExistsRegion and RegionCount respectively. datarect: contains a multidimensional data rectangle. queryrect1, queryrect2: contain queryrect1 and queryrect2 as passed to the procedures RegionQuery, ExistsRegion and RegionCount respectively. This type is also used in the JoinXX procedures to perform the join. Then the parameters will have a slightly different contents, see the JoinXX procedures. */ typedef void (*QueryManageProc) (RSTREE /* rst */, typrect /* rectangle */, refinfo /* info */, void* /* pointer */, boolean* /* modify */, boolean* /* finish */); /* rst: contains the R*-tree identifier as passed to the procedure RegionQuery. rectangle: contains the multidimensional data rectangle currently found. info: points to the concerning information part. pointer: is an arbitrary pointer as passed to the procedure RegionQuery. It may be used as a pointer to a buffer structure. modify: points to a flag labeling the node to be written back. BEWARE: record modified | modify | result -------------------------------------------------------- no | FALSE | record is not modified no | TRUE | undefined yes | FALSE | undefined yes | TRUE | record is modified (See also RegionQuery) finish: points to a flag labeling the query to be finished when the procedure is left. */ typedef void (*JoinManageProc) (RSTREE /* rst1 */, RSTREE /* rst2 */, typrect /* rectangle1 */, typrect /* rectangle2 */, refinfo /* info1 */ , refinfo /* info2 */, void* /* pointer1 */, void* /* pointer2 */, boolean* /* finish */); /* rst1, rst2: contain the R*-tree identifiers as passed to the JoinXX procedures. rectangle1, rectangle2: contain the two rectangles currently found by the join. info1, info2: point to the concerning information parts. pointer1, pointer2: are arbitrary pointers as passed to the JoinXX procedures. They may be used as pointers to buffer structures. finish: points to a flag labeling the join to be finished when the procedure is left. */ /* ---------------------- procedure declarations ----------------------- */ /* Almost all procedures return a boolean result. If a procedure returns FALSE an error has occured. The implementation attempts to detect errors before any update operations are performed. */ void NoRSTree(RSTREE *rst); /* Initializes an R*-tree identifier (at least sets *rst to NULL). Each procedure which requires an R*-tree identifier checks the value of this identifier at its entry. OpenRST for example demands a NULL identifier while CloseRST demands a non NULL identifier. */ boolean CreateRST(const char *name, int pagesize, boolean unique); /* CreateRST creates an R*-tree on secondary memory. To work on it, it has to be opened by the procedure OpenRST. name: is the main filename under which the created R*-tree will be stored, additionally a few files named filename.suffix with different suffixes will be created. name is not fixed in the internal parameter table, thus after renaming the files, the R*-tree may be opened under another name. pagesize: is the size in bytes, a page (directory or data) will occupy. unique: if unique is set TRUE the procedure InsertRecord will not store more than one record with the same rectangle (key) in the R*-tree (rectangles will be real keys). The unique flag may be reset with the procedure SetUnique without further internal tests. */ boolean RemoveRST(const char *name); /* RemoveRST removes all files corresponding to an R*-tree. */ boolean OpenRST(RSTREE *rst, const char *name, const char *mode); /* OpenRST opens the R*-tree named name. */ boolean CloseRST(RSTREE *rst); /* CloseRST closes the R*-tree referenced by rst. */ boolean SetUnique(RSTREE rst, boolean mode); /* The unique state, defined in procedure CreateRST may be reset by this procedure (see also CreateRST). The unique flag is set without internal checks (even to TRUE). */ boolean InquireRSTDesc(RSTREE rst, char *name, int *numbofdim, int *sizedirentry, int *sizedataentry, int *sizeinfo, int *maxdirfanout, int *maxdatafanout, int *pagesize, int *numbofdirpages, int *numbofdatapages, int pagesperlevel[], int *numbofrecords, int *height, boolean *unique); /* InquireRSTDesc provides some useful information about the R*-tree referenced by rst. name: see CreateRST. numbofdim: contains the number of dimensions of the R*-tree referenced by rst, i.e. the value the constant NumbOfDim was set to when it was created. sizedirentry, sizedataentry: contain the size (in bytes) of a directory and data entry respectively. sizeinfo: contains the size (in bytes) of an information part. maxdirfanout, maxdatafanout: contain the maximum possible number of entries a directory and data node respectively can store. pagesize: see CreateRST. numbofdirpages, numbofdatapages: total number of directory and data pages respectively in use. pagesperlevel: For each level i, beginning at the root, pagesperlevel[i] contains the number of pages in use. numbofrecords: total number of data records stored in the R*-tree. height: height of the tree, the lowest height is "1" (only the root exists). unique: see CreateRST. */ boolean InsertRecord(RSTREE rst, typrect rectangle, typinfo *info, boolean *inserted); /* InsertRecord inserts a new record in the R*-tree. If the unique flag is set TRUE (see CreateRST) a new record is not inserted if a record with the same rectangle is found. In this case inserted yields FALSE, but the return value is TRUE (if no error occurred). rectangle: is the rectangle part of the new record. info: is the information part of the new record. */ boolean DeleteRecord(RSTREE rst, typrect rectangle, boolean *deleted); /* DeleteRecord deletes the first record with the given rectangle it finds. It provides a fast deletion in trees where entries are unique and may be used in trees where entries are not unique, to delete iteratively all entries with the same rectangle as passed. */ boolean ExistsRegion(RSTREE rst, typrect queryrect1, typrect queryrect2, DirQueryProc DirQuery, DataQueryProc DataQuery, boolean *recordfound); /* ExistsRegion performs a RegionQuery on the R*-tree referenced by rst. It stops after the first record satisfying the query condition is found. See also RegionQuery. recordfound: is set to TRUE if a record satisfying the query condition exists, otherwise FALSE. */ boolean RegionCount(RSTREE rst, typrect queryrect1, typrect queryrect2, DirQueryProc DirQuery, DataQueryProc DatQuery, int *recordcount); /* RegionCount performs a RegionQuery on the R*-tree referenced by rst. It does not return records but only counts the number of records found. See also RegionQuery. recordcount: is set to the number of records satisfying the query condition. */ boolean RegionQuery(RSTREE rst, typrect queryrect1, typrect queryrect2, DirQueryProc DirQuery, DataQueryProc DatQuery, QueryManageProc Manage, void *pointer); /* RegionQuery performs a RegionQuery on the R*-tree referenced by rst. Up to two query rectangles may be passed by queryrect1 and queryrect2. Two different procedures have two be provided (DirQuery, DataQuery) which perform the query in the directory and the data level respectively. A third procedure (Manage) must be provided to deal with the records successively found. A query is closed either if it did not find an additional record satisfying the query condition or if the finish flag is set by the procedure Manage. See also DirQueryProc, DataQueryProc, QueryManageProc. queryrect1, queryrect2: query rectangles to be compared with directory rectangles and data rectangles respectively. DirQuery, DataQuery: Procedure parameters passing comparison procedures of type boolean. Manage: Procedure parameter passing a management procedure. Manage is called each time a new data rectangle satisfying the query condition is found. Procedures of type QueryManageProc may provide the following facilities: Inspection of the data records rectangle and info part. Communication to another structure, pointed to by pointer. To modify the info part (the rectangle cannot be modified), and label the node to be written back. To finish the query. pointer: Arbitrary pointer passed through to the procedure Manage. */ boolean RegionQueryInfo(RSTREE R, Check includes, Check intersects, void * data, typrect rect, typdirinfo * info); boolean AllQuery(RSTREE rst, QueryManageProc Manage, void *pointer); /* AllQuery performs a fast query which returns all records stored in the R*-tree referenced by rst. Manage: Procedure parameter passing a management procedure. Manage is called each time a new data rectangle satisfying the query condition is found. The type QueryManageProc provides the following functions: To inspect a data records rectangle and info part. To copy a record to the location pointer points to. To modify the info part (the rectangle cannot be modified), and label the node to be written back. To finish the query. pointer: Arbitrary pointer passed through to the procedure Manage. Since AllQuery is designed to be fast it does not support the complete counting facility. See also RegionQuery. */ boolean Update(RSTREE rst); /* Updates the directory nodes typdirinfo. */ boolean JoinCountNv(RSTREE rst1, RSTREE rst2, typrect R1queryrect1, typrect R1queryrect2, typrect R2queryrect1, typrect R2queryrect2, DirQueryProc Dir1Query, DataQueryProc Data1Query, DirQueryProc Dir2Query, DataQueryProc Data2Query, DirQueryProc DirJoin, DataQueryProc DataJoin, int *paircount); /* JoinCountNv performs a Join on the two R*-trees referenced by rst1 and rst2. It does not return record pairs but only counts the number of record pairs found. See also JoinNv. paircount: is set to the number of recordpairs satisfying the join condition. */ boolean JoinNv(RSTREE rst1, RSTREE rst2, typrect rst1queryrect1, typrect rst1queryrect2, typrect rst2queryrect1, typrect rst2queryrect2, DirQueryProc Dir1Query, DataQueryProc Data1Query, DirQueryProc Dir2Query, DataQueryProc Data2Query, DirQueryProc DirJoin, DataQueryProc DataJoin, JoinManageProc Manage, void *pointer1, void *pointer2); /* The functionality of the join can be considered as follows: On each of the two R*-trees to be joined a query is performed. On the resulting restricted sets of records of the two R*-trees the join is applied depending on the given join condition. Join performs a join on the two R*-trees referenced by rst1 and rst2. A join is closed either if it did not find an additional pair of records satisfying the join condition or if the finish flag is set by the procedure Manage. See also DirQueryProc, DataQueryProc, JoinManageProc. rst1queryrect1, rst1queryrect2: Used in connection with the pre-query on rst1; query rectangles to be compared with directory and data rectangles respectively of rst1. rst2queryrect1, rst2queryrect2: Used in connection with the pre-query on rst2; query rectangles to be compared with directory and data rectangles respectively of rst2. Dir1Query, Data1Query: Procedure parameters passing comparison procedures of type boolean. The two procedures have to perform the pre-query on rst1. See also DirQueryProc, DataQueryProc and RegionQuery. Dir2Query, Data2Query: Procedure parameters passing comparison procedures of type boolean. The two procedures have to perform the pre-query on rst2. See also DirQueryProc, DataQueryProc and RegionQuery. DirJoin, DataJoin: Procedure parameters passing comparison procedures of type boolean. DirJoin has to determine if two directory rectangles, one of rst1 the other of rst2 have to be joined, DataJoin has to determine if two data rectangles, one of rst1 the other of rst2 have to be joined. Here the types DirQueryProc and DataQueryProc are used as follows: DQP(RSTREE rst1, typrect rst1rect, typrect rst2rect, typrect unused); rst1 contains rst1. rst1rect contains a directory or data rectangle respectively of rst1. rst2rect contains a directory or data rectangle respectively of rst2. The last parameter is unused. Manage: Procedure parameter passing a management procedure. Manage is called each time a new pair of data rectangles satisfying the join condition is found. Procedures of type JoinManageProc may provide the following facilities: Inspection of the data records' rectangles and info parts. Communication to two other structures, pointed to by pointer1 and pointer2. To finish the join. pointer1, pointer2: Arbitrary pointers passed through to the procedure Manage. */ /*************** ----- Performance Controll Routines ----- ***************/ /* ------ Counts-Switch: */ boolean CountsOn0(RSTREE rst); /* put ON, set 0 */ boolean CountsOn(RSTREE rst); /* put ON */ boolean CountsOff(RSTREE rst); /* put OFF */ /* the Counts-Switch applies to the variables set by the procedures GetCountRead, GetCountWrite. The procedure OpenRST initializes counting: the count variables are set to 0, the count switch is set to OFF. */ boolean GetCountRead(RSTREE rst, int *DirVisitCount, int *DataVisitCount, int *DirReadCount, int *DataReadCount); /* DirVisitCount is set to the number of directory nodes visited traversing the tree. DataVisitCount is set to the number of data nodes visited traversing the tree. DirReadCount directory nodes and DataReadCount data nodes had actually to be read from secondary memory. If the function returns FALSE these variables are set to 0. DirVisitCount, DataVisitCount is counted: for all query, join and update procedures. DirReadCount, DataReadCount is counted: whenever a read occurs. */ boolean GetCountWrite(RSTREE rst, int *DirModifyCount, int *DataModifyCount, int *DirWriteCount, int *DataWriteCount); /* DirModifyCount is set to the number of directory nodes modified. DataModifyCount is set to the number of data nodes modified. DirWriteCount is set to the number of directory nodes written to secondary memory. DataWriteCount is set to the number of data nodes written to secondary memory. If the function returns FALSE these variables are set to 0. DirModifyCount, DataModifyCount is counted: for all update procedures. DirWriteCount, DataWriteCount is counted: whenever a write occurs. */ boolean GetMemory(RSTREE rst, int *numbofdirpages, int *numbofdatapages); /* numbofdirpages and numbofdatapages are set to the number of pages in use for the directory and the data level respectively. If the function returns FALSE these variables are set to 0. */ boolean GetHeight(RSTREE rst, int *height); /* height is set to the height of the tree, the lowest height is "1" (only the root exists). If the function returns FALSE these variables are set to 0. */ /*************************************************************************/ /* Layout of a directory and data node respectively (pidgin C) ----------------------------------------------------------- directory node layout: struct { typrect rectangle; int subtree_pointer; } directory_entry; struct { int n; directory_entry entries[M]; } directory_node; The maximum number of entries M varies with different page sizes. The minimum is M = 3. The minimum number of entries m is calculated as max(round(0.4 * M), 2). data node layout: struct { typrect rectangle; typinfo information_part; } data_entry; struct { int n; data_entry entries[M]; } data_node; The maximum number of entries M varies with different page sizes. The minimum is M = 1. The minimum number of entries m is calculated as max(round(0.4 * M), 1). */ /*************************************************************************/ /* BUGS: The implementation does not provide packing, thus depending on the design of the machine and the compiler, and the choice of typatomkey and typinfo nodes may have gaps, i.e. the fanout may be smaller than you expect. Alignment problems, i.e. gaps between the entities stored in the nodes cause warning messages on stdout (with one restriction): The implementation does not know the internal structure of typinfo (it only knows its size). Thus, if typinfo intrinsically contains gaps, this cannot be detected. Information about the actual values of important parameters may be obtained by calling InquireRSTDesc. R*-tree identifiers are only checked for NULL and non NULL. Though passing a non NULL invalid identifier is not detected as an error. To open an R*-tree twice may damage consistency. But the implementation does not detect this mistake. Early detection of memory limitations is not available. If accidentally the file system fills up during an update operation, the tree may be left in an inconsistent state. Although (aside from the lacks mentioned above) internal error detection is nearly exhaustive, all you get is a boolean return value. Passing the same R*-tree identifier twice to the JoinXX procedures is save. If a join is performed on one and the same R*-tree, a second R*-tree is opened virtually, but the performance control parameters are only available for one of them. Since the join internally does not work symmetrically this information generally is useless. If deletions are performed the files holding the directory and data pages will not shrink. Free pages are reoccupied by following insertions. A file reorganization algorithm is not implemented. The procedures of type QueryManageProc and JoinManageProc permit unprotected access to parts of the internal data structure of the R*-tree. This avoids copying but is unsafe of course. The implementation restricts the informational part of a data record to contain at least an integer sized contents. */ /*************************************************************************/ /*************** ----- For Private Test Purpose Only ----- ***************/ boolean Find(RSTREE rst, typrect rectangle, boolean *found, void *buf, int nbytes); #endif /* !__RStarTree_h */ gerris-snapshot-131206/modules/RStarTree/Makefile.in0000644000175100017510000005702112250371207017257 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/RStarTree DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libcSmRST_la_LIBADD = am_libcSmRST_la_OBJECTS = libcSmRST_la-RStarTree.lo \ libcSmRST_la-RSTInstDel.lo libcSmRST_la-RSTJoin.lo \ libcSmRST_la-RSTUtil.lo libcSmRST_la-RSTInOut.lo \ libcSmRST_la-RSTInterUtil.lo libcSmRST_la-RSTQuery.lo libcSmRST_la_OBJECTS = $(am_libcSmRST_la_OBJECTS) libcSmRST_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcSmRST_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libcSmRST_la_SOURCES) DIST_SOURCES = $(libcSmRST_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ noinst_LTLIBRARIES = libcSmRST.la libcSmRST_la_CFLAGS = $(AM_CFLAGS) -D_FILE_OFFSET_BITS=64 libcSmRST_la_SOURCES = \ RStarTree.c \ RStarTree.h \ RSTInstDel.c \ RSTInstDel.h \ RSTJoin.c \ RSTJoin.h \ RSTUtil.c \ RSTUtil.h \ RSTInOut.c \ RSTInOut.h \ RSTInterUtil.c \ RSTInterUtil.h \ RSTQuery.c \ RSTQuery.h \ RSTBase.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/RStarTree/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/RStarTree/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libcSmRST.la: $(libcSmRST_la_OBJECTS) $(libcSmRST_la_DEPENDENCIES) $(EXTRA_libcSmRST_la_DEPENDENCIES) $(libcSmRST_la_LINK) $(libcSmRST_la_OBJECTS) $(libcSmRST_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcSmRST_la-RSTInOut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcSmRST_la-RSTInstDel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcSmRST_la-RSTInterUtil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcSmRST_la-RSTJoin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcSmRST_la-RSTQuery.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcSmRST_la-RSTUtil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcSmRST_la-RStarTree.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< libcSmRST_la-RStarTree.lo: RStarTree.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -MT libcSmRST_la-RStarTree.lo -MD -MP -MF $(DEPDIR)/libcSmRST_la-RStarTree.Tpo -c -o libcSmRST_la-RStarTree.lo `test -f 'RStarTree.c' || echo '$(srcdir)/'`RStarTree.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libcSmRST_la-RStarTree.Tpo $(DEPDIR)/libcSmRST_la-RStarTree.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='RStarTree.c' object='libcSmRST_la-RStarTree.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -c -o libcSmRST_la-RStarTree.lo `test -f 'RStarTree.c' || echo '$(srcdir)/'`RStarTree.c libcSmRST_la-RSTInstDel.lo: RSTInstDel.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -MT libcSmRST_la-RSTInstDel.lo -MD -MP -MF $(DEPDIR)/libcSmRST_la-RSTInstDel.Tpo -c -o libcSmRST_la-RSTInstDel.lo `test -f 'RSTInstDel.c' || echo '$(srcdir)/'`RSTInstDel.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libcSmRST_la-RSTInstDel.Tpo $(DEPDIR)/libcSmRST_la-RSTInstDel.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='RSTInstDel.c' object='libcSmRST_la-RSTInstDel.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -c -o libcSmRST_la-RSTInstDel.lo `test -f 'RSTInstDel.c' || echo '$(srcdir)/'`RSTInstDel.c libcSmRST_la-RSTJoin.lo: RSTJoin.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -MT libcSmRST_la-RSTJoin.lo -MD -MP -MF $(DEPDIR)/libcSmRST_la-RSTJoin.Tpo -c -o libcSmRST_la-RSTJoin.lo `test -f 'RSTJoin.c' || echo '$(srcdir)/'`RSTJoin.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libcSmRST_la-RSTJoin.Tpo $(DEPDIR)/libcSmRST_la-RSTJoin.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='RSTJoin.c' object='libcSmRST_la-RSTJoin.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -c -o libcSmRST_la-RSTJoin.lo `test -f 'RSTJoin.c' || echo '$(srcdir)/'`RSTJoin.c libcSmRST_la-RSTUtil.lo: RSTUtil.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -MT libcSmRST_la-RSTUtil.lo -MD -MP -MF $(DEPDIR)/libcSmRST_la-RSTUtil.Tpo -c -o libcSmRST_la-RSTUtil.lo `test -f 'RSTUtil.c' || echo '$(srcdir)/'`RSTUtil.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libcSmRST_la-RSTUtil.Tpo $(DEPDIR)/libcSmRST_la-RSTUtil.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='RSTUtil.c' object='libcSmRST_la-RSTUtil.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -c -o libcSmRST_la-RSTUtil.lo `test -f 'RSTUtil.c' || echo '$(srcdir)/'`RSTUtil.c libcSmRST_la-RSTInOut.lo: RSTInOut.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -MT libcSmRST_la-RSTInOut.lo -MD -MP -MF $(DEPDIR)/libcSmRST_la-RSTInOut.Tpo -c -o libcSmRST_la-RSTInOut.lo `test -f 'RSTInOut.c' || echo '$(srcdir)/'`RSTInOut.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libcSmRST_la-RSTInOut.Tpo $(DEPDIR)/libcSmRST_la-RSTInOut.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='RSTInOut.c' object='libcSmRST_la-RSTInOut.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -c -o libcSmRST_la-RSTInOut.lo `test -f 'RSTInOut.c' || echo '$(srcdir)/'`RSTInOut.c libcSmRST_la-RSTInterUtil.lo: RSTInterUtil.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -MT libcSmRST_la-RSTInterUtil.lo -MD -MP -MF $(DEPDIR)/libcSmRST_la-RSTInterUtil.Tpo -c -o libcSmRST_la-RSTInterUtil.lo `test -f 'RSTInterUtil.c' || echo '$(srcdir)/'`RSTInterUtil.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libcSmRST_la-RSTInterUtil.Tpo $(DEPDIR)/libcSmRST_la-RSTInterUtil.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='RSTInterUtil.c' object='libcSmRST_la-RSTInterUtil.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -c -o libcSmRST_la-RSTInterUtil.lo `test -f 'RSTInterUtil.c' || echo '$(srcdir)/'`RSTInterUtil.c libcSmRST_la-RSTQuery.lo: RSTQuery.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -MT libcSmRST_la-RSTQuery.lo -MD -MP -MF $(DEPDIR)/libcSmRST_la-RSTQuery.Tpo -c -o libcSmRST_la-RSTQuery.lo `test -f 'RSTQuery.c' || echo '$(srcdir)/'`RSTQuery.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libcSmRST_la-RSTQuery.Tpo $(DEPDIR)/libcSmRST_la-RSTQuery.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='RSTQuery.c' object='libcSmRST_la-RSTQuery.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcSmRST_la_CFLAGS) $(CFLAGS) -c -o libcSmRST_la-RSTQuery.lo `test -f 'RSTQuery.c' || echo '$(srcdir)/'`RSTQuery.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/modules/RStarTree/RSTInOut.h0000644000175100017510000000142412250371171017006 00000000000000/* ----- RSTInOut.h ----- */ #ifndef __RSTInOut_h #define __RSTInOut_h #include "RStarTree.h" /* declarations */ void PutNode(RSTREE R, refnode nodeptr, int pagenr, int depth); void GetNode(RSTREE R, refnode nodeptr, int pagenr, int depth); void NewNode(RSTREE R, int depth); void ReadPage(RSTREE R, typfiledesc fd, int pagenr, void *block); void WritePage(RSTREE R, typfiledesc fd, int pagenr, void *block); void GetPageNr(RSTREE R, int *pagenr, int depth); void PutPageNr(RSTREE R, int pagenr, int depth); #endif /* !__RSTInOut_h */ gerris-snapshot-131206/modules/RStarTree/Makefile.am0000644000175100017510000000066612250371171017251 00000000000000## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libcSmRST.la libcSmRST_la_CFLAGS = $(AM_CFLAGS) -D_FILE_OFFSET_BITS=64 libcSmRST_la_SOURCES = \ RStarTree.c \ RStarTree.h \ RSTInstDel.c \ RSTInstDel.h \ RSTJoin.c \ RSTJoin.h \ RSTUtil.c \ RSTUtil.h \ RSTInOut.c \ RSTInOut.h \ RSTInterUtil.c \ RSTInterUtil.h \ RSTQuery.c \ RSTQuery.h \ RSTBase.h gerris-snapshot-131206/modules/RStarTree/RSTJoin.h0000644000175100017510000000214212250371171016645 00000000000000/* ----- RSTJoin.h ----- */ #ifndef __RSTJoin_h #define __RSTJoin_h #include "RStarTree.h" /* declarations */ void JnCntNv(RSTREE R1, RSTREE R2, int depth, typrect R1rectangle1, typrect R1rectangle2, typrect R2rectangle1, typrect R2rectangle2, DirQueryProc Dir1Query, DataQueryProc Data1Query, DirQueryProc Dir2Query, DataQueryProc Data2Query, DirQueryProc DirJoin, DataQueryProc DataJoin, int *keysqualifying, int *mark); void JnNv(RSTREE R1, RSTREE R2, int depth, typrect R1rectangle1, typrect R1rectangle2, typrect R2rectangle1, typrect R2rectangle2, DirQueryProc Dir1Query, DataQueryProc Data1Query, DirQueryProc Dir2Query, DataQueryProc Data2Query, DirQueryProc DirJoin, DataQueryProc DataJoin, JoinManageProc Manage, void *buf1, void *buf2, boolean *finish); #endif /* !__RSTJoin_h */ gerris-snapshot-131206/modules/RStarTree/RSTInstDel.c0000644000175100017510000007704312250371171017317 00000000000000/* ----- RSTInstDel.c ----- */ #include "RStarTree.h" #include "RSTInstDel.h" #include "RSTUtil.h" #include "RSTInOut.h" /* declarations */ static void ExcludeDataEntries(RSTREE R, refDATAent newentry, typrect newrect, int depth, int M, int reinsertqty); static void ExcludeDirEntries(RSTREE R, refDIRent newentry, typrect newrect, int depth, int M, int reinsertqty); static void Split(RSTREE R, refentry newentry, int *depth, int M, int m); static void SplitAndDistributDir(RSTREE R, int depth, refDIRent newentry, int M, int m); static void SplitAndDistributData(RSTREE R, int depth, refDATAent newentry, int M, int m); static void UnDistributData(RSTREE R, refDATAent newentry); static void GetInstChain(RSTREE R, typrect newrect, int depth); static void NtoNDel(RSTREE R, int depth); static void ShrinkTree(RSTREE R); /***********************************************************************/ static void GetInstChain(RSTREE R, typrect newrect, int depth) { int i; refcount c; i= 1; while (i < depth) { if ((*R).NInst[i+1] != NULL) { /* already in path */ (*R).E[i]= (*R).EInst[i]; (*R).EInst[i]= -1; i++; if ((*R).N[i] != (*R).NInst[i]) { (*R).P[i]= (*(*R).N[i-1]).DIR.entries[(*R).E[i-1]].ptrtosub; free((*R).N[i]); (*R).N[i]= NULL; (*R).N[i]= (*R).NInst[i]; } (*R).NInst[i]= NULL; } else if ((*R).EInst[i] != -1) { /* known ... */ (*R).E[i]= (*R).EInst[i]; (*R).EInst[i]= -1; i++; if ((*(*R).N[i-1]).DIR.entries[(*R).E[i-1]].ptrtosub != (*R).P[i]) { /* but not in path */ NewNode(R,i); } } else { /* not known */ ChooseSubtree(R,newrect,i,&(*(*R).N[i]).DIR,&(*R).E[i]); i++; if ((*(*R).N[i-1]).DIR.entries[(*R).E[i-1]].ptrtosub != (*R).P[i]) { /* and not in path */ NewNode(R,i); } } } c= &(*R).count; if ((*c).countflag) { if (depth == (*R).parameters._.height) { (*c).dirvisitcount+= depth - 1; (*c).datavisitcount++; } else { (*c).dirvisitcount+= depth; } } } /***********************************************************************/ void Insert(RSTREE R, typentry *newentry, int depth) { typrect newrect; int M, m; int reinsertqty, heightbefore; refparameters par; refDIRnode DIN, DINdel; refDATAnode DAN, DANdel; refcount c; int j; CopyRect(R,(*newentry).DIR.rect,newrect); /* see RSTBase.h "hope ..." */ GetInstChain(R,newrect,depth); par= &(*R).parameters._; for (;;) { if (depth == (*par).height) { M= (*par).dataM; m= (*par).datam; DAN= &(*(*R).N[depth]).DATA; if ((*DAN).nofentries < M) { (*DAN).entries[(*DAN).nofentries]= (*newentry).DATA; /* 0.. */ (*DAN).nofentries++; (*R).Nmodified[depth]= TRUE; c= &(*R).count; if ((*c).countflag) { (*c).datamodifycount++; } depth--; AdjustChain(R,depth,newrect); break; } } else { M= (*par).dirM; m= (*par).dirm; DIN= &(*(*R).N[depth]).DIR; if ((*DIN).nofentries < M) { (*DIN).entries[(*DIN).nofentries]= (*newentry).DIR; /* 0.. */ (*DIN).nofentries++; (*R).Nmodified[depth]= TRUE; c= &(*R).count; if ((*c).countflag) { (*c).dirmodifycount++; } depth--; AdjustChain(R,depth,newrect); break; } } /*** --- LOOP not EXITed by direct insert --- ***/ if ((*R).ReInsert[depth] && depth != 1 && M > 1) { if (depth == (*par).height) { reinsertqty= (*par).datareinsertqty; (*R).NDel[depth]= (refnode)malloc((*R).datanodelen); ExcludeDataEntries(R,&(*newentry).DATA,newrect,depth,M,reinsertqty); } else { reinsertqty= (*par).dirreinsertqty; (*R).NDel[depth]= (refnode)malloc((*R).dirnodelen); ExcludeDirEntries(R,&(*newentry).DIR,newrect,depth,M,reinsertqty); } heightbefore= (*par).height; (*R).ReInsert[depth]= FALSE; (*R).ReInsert[depth-1]= TRUE; (*R).Nmodified[depth]= TRUE; AdjustChainAfterDeletion(R,depth); if (depth == (*par).height) { DANdel= &(*(*R).NDel[depth]).DATA; for (j= reinsertqty; j >= 0; j--) { Insert(R,(refentry)&(*DANdel).entries[j],depth); if ((*par).height > heightbefore) { depth+= (*par).height - heightbefore; heightbefore= (*par).height; } } } else { DINdel= &(*(*R).NDel[depth]).DIR; for (j= reinsertqty; j >= 0; j--) { Insert(R,(refentry)&(*DINdel).entries[j],depth); if ((*par).height > heightbefore) { depth+= (*par).height - heightbefore; heightbefore= (*par).height; } } } free((*R).NDel[depth]); (*R).NDel[depth]= NULL; if (depth != 1) { (*R).ReInsert[depth-1]= FALSE; /* ReInitialisation for the case, that the LOOP did not call ReInsert in the next higher level */ } break; } else { Split(R,newentry,&depth,M,m); } } } /***********************************************************************/ static void ExcludeDataEntries(RSTREE R, typDATAent *newentry, typrect newrect, int depth, int M, int reinsertqty) { refparameters par; typpoint allcenter, newrectcenter, center; refDATAnode n, nd; ValueArray distarr; IndexArray I; ByteArray chosen; int j, k, sortind; par= &(*R).parameters._; EvalCenter(R,(*(*R).N[depth-1]).DIR.entries[(*R).E[depth-1]].rect,allcenter); EvalCenter(R,newrect,newrectcenter); n= &(*(*R).N[depth]).DATA; for (j= 0; j < M; j++) { EvalCenter(R,(*n).entries[j].rect,center); distarr[j]= RSTDistance(R,allcenter,center); I[j]= j; } distarr[M]= RSTDistance(R,allcenter,newrectcenter); I[M]= M; QuickSortValArr(0,M,distarr,I); nd= &(*(*R).NDel[depth]).DATA; FalseArray((int *)chosen,(*par).dataMwords); j= 0; k= M; while (j < reinsertqty) { sortind= I[k]; chosen[sortind]= 1; if (sortind != M) { (*nd).entries[j]= (*n).entries[sortind]; } else { (*nd).entries[j]= *newentry; } j++; k--; } /* entry referenced by distarr[I[M]], [I[M-1]], ... becomes NDel[depth]->entries[0], [1], ... */ if (chosen[M] == 1) { (*nd).entries[reinsertqty]= (*n).entries[I[M-reinsertqty]]; chosen[I[M-reinsertqty]]= 1; } else { (*nd).entries[reinsertqty]= *newentry; } /* entry referenced by I[M-reinsertqty] or newentry (referenced by I[?] == 0) becomes NDel[depth]->entries[reinsertqty] */ /* Entries to reinsert now in NDel[depth] sorted by */ /* decreasing distances to the midpoint. */ /* !!! newentry is reinserted in any case !!! */ (*n).nofentries= M - reinsertqty; j= 0; k= M - 1; do { if (chosen[j] == 1) { while (chosen[k] == 1) { k--; } (*n).entries[j]= (*n).entries[k]; chosen[k]= 1; } j++; } while (j < (*n).nofentries); } /***********************************************************************/ static void ExcludeDirEntries(RSTREE R, typDIRent *newentry, typrect newrect, int depth, int M, int reinsertqty) { refparameters par; typpoint allcenter, newrectcenter, center; refDIRnode n, nd; ValueArray distarr; IndexArray I; ByteArray chosen; int j, k, sortind; par= &(*R).parameters._; EvalCenter(R,(*(*R).N[depth-1]).DIR.entries[(*R).E[depth-1]].rect,allcenter); EvalCenter(R,newrect,newrectcenter); n= &(*(*R).N[depth]).DIR; for (j= 0; j < M; j++) { EvalCenter(R,(*n).entries[j].rect,center); distarr[j]= RSTDistance(R,allcenter,center); I[j]= j; } distarr[M]= RSTDistance(R,allcenter,newrectcenter); I[M]= M; QuickSortValArr(0,M,distarr,I); nd= &(*(*R).NDel[depth]).DIR; FalseArray((int *)chosen,(*par).dirMwords); j= 0; k= M; while (j < reinsertqty) { sortind= I[k]; chosen[sortind]= 1; if (sortind != M) { (*nd).entries[j]= (*n).entries[sortind]; } else { (*nd).entries[j]= *newentry; } j++; k--; } /* entry referenced by distarr[I[M]], [I[M-1]], ... becomes NDel[depth]->entries[0], [1], ... */ if (chosen[M] == 1) { (*nd).entries[reinsertqty]= (*n).entries[I[M-reinsertqty]]; chosen[I[M-reinsertqty]]= 1; } else { (*nd).entries[reinsertqty]= *newentry; } /* entry referenced by I[M-reinsertqty] or newentry (referenced by I[?] == 0) becomes NDel[depth]->entries[reinsertqty] */ /* Entries to reinsert now in NDel[depth] sorted by */ /* decreasing distances to the midpoint. */ /* !!! newentry is reinserted in any case !!! */ (*n).nofentries= M - reinsertqty; j= 0; k= M - 1; do { if (chosen[j] == 1) { while (chosen[k] == 1) { k--; } (*n).entries[j]= (*n).entries[k]; chosen[k]= 1; } j++; } while (j < (*n).nofentries); } /***********************************************************************/ static void Split(RSTREE R, typentry *newentry, int *depth, int M, int m) { refparameters par; refcount c; int pagenr; boolean isdata; int i; par= &(*R).parameters._; if (*depth == (*par).height) { if (M == 1) { UnDistributData(R,&(*newentry).DATA); } else { SplitAndDistributData(R,*depth,&(*newentry).DATA,M,m); } } else { SplitAndDistributDir(R,*depth,&(*newentry).DIR,M,m); } if (*depth == 1) { (*par).height++; *depth= 2; for (i= (*par).height; i >= 2; i--) { (*R).N[i]= (*R).N[i-1]; (*R).NDel[i]= (*R).NDel[i-1]; /* for ReInsert */ (*R).ReInsert[i]= (*R).ReInsert[i-1]; /* for ReInsert */ /* following assignments not necessary for i=2: */ (*R).P[i]= (*R).P[i-1]; /* set(i=2) */ (*R).Nmodified[i]= (*R).Nmodified[i-1]; /* set(i=2) */ (*par).pagecountarr[i]= (*par).pagecountarr[i-1]; } (*R).N[1]= (refnode)malloc((*R).dirnodelen); /* R->P[1] is RSTBase.rootblocknumb forever */ /* R->Nmodified[1] set inserting the sibling */ (*R).NDel[1]= NULL; /* for ReInsert */ (*R).ReInsert[1]= FALSE; /* for ReInsert */ /* initiate first root entry: */ (*(*R).N[1]).DIR.nofentries= 1; (*R).E[1]= 0; GetPageNr(R,&pagenr,*depth); (*(*R).N[1]).DIR.entries[0].ptrtosub= pagenr; (*R).P[2]= pagenr; } isdata= *depth == (*par).height; (*R).Nmodified[*depth]= TRUE; GetPageNr(R,&pagenr,*depth); (*newentry).DIR.ptrtosub= pagenr; if (isdata) { EvalDataEnclRect(R,&(*(*R).Nsibling).DATA,(*newentry).DIR.rect); EvalDataEnclRect(R,&(*(*R).N[*depth]).DATA, (*(*R).N[*depth-1]).DIR.entries[(*R).E[*depth-1]].rect); c= &(*R).count; if ((*c).countflag) { (*c).datamodifycount+= 2; } } else { EvalDirEnclRect(R,&(*(*R).Nsibling).DIR,(*newentry).DIR.rect); EvalDirEnclRect(R,&(*(*R).N[*depth]).DIR, (*(*R).N[*depth-1]).DIR.entries[(*R).E[*depth-1]].rect); c= &(*R).count; if ((*c).countflag) { (*c).dirmodifycount+= 2; } } PutNode(R,(*R).Nsibling,pagenr,*depth); (*depth)--; } /***********************************************************************/ static void SplitAndDistributDir(RSTREE R, int depth, typDIRent *newentry, int M, int m) { ValueArray edgearray, spacearray; RectArray rectarray; refparameters par; refDIRnode n; refinterval re; IndexArray I; Side sortside, currsortside, axsortside; int axis; int mlow, mhigh, index, backind, axisindex; typrect leftrect, rightrect; double leftspace, rightspace, leftedge, rightedge, edge, validedge, backvaledge, axisedge, ovlp, value, validvalue, backvalvalue; int i, j, ii; par= &(*R).parameters._; (*R).Ntosplit= (*R).N[depth]; (*R).N[depth]= (*R).helpdirnode; (*R).helpdirnode= (*R).Ntosplit; for (j= 0; j <= M; j++) { I[j]= j; } mhigh= M-m+1; mlow= m-1; n= &(*(*R).Ntosplit).DIR; (*n).entries[M]= *newentry; for (i= 0; i <= (*par).maxdim; i++) { sortside= low; currsortside= low; QuickSortDirEnt(0,M,i,low,(*n).entries,I); CopyRect(R,(*n).entries[I[M]].rect,rightrect); rightrect[i].l= (*n).entries[I[mhigh]].rect[i].l; for (j= M-1; j >= m; j--) { for (ii= 0; ii <= (*par).maxdim; ii++) { re= &(*n).entries[I[j]].rect[ii]; if ((*re).l < rightrect[ii].l) { rightrect[ii].l= (*re).l; } if ((*re).h > rightrect[ii].h) { rightrect[ii].h= (*re).h; } } if (j <= mhigh) { rightedge= 0.0; rightspace= 1.0; for (ii= 0; ii <= (*par).maxdim; ii++) { rightedge+= rightrect[ii].h - rightrect[ii].l; rightspace*= rightrect[ii].h - rightrect[ii].l; } CopyRect(R,rightrect,rectarray[j]); edgearray[j]= rightedge; spacearray[j]= rightspace; } } /* fill array from M-m+1 down to m with rightrect, rightedge, rightspace */ CopyRect(R,(*n).entries[I[0]].rect,leftrect); for (j= 1; j < mhigh; j++) { for (ii= 0; ii <= (*par).maxdim; ii++) { re= &(*n).entries[I[j]].rect[ii]; if ((*re).l < leftrect[ii].l) { leftrect[ii].l= (*re).l; } if ((*re).h > leftrect[ii].h) { leftrect[ii].h= (*re).h; } } if (j >= mlow) { leftedge= 0.0; for (ii= 0; ii <= (*par).maxdim; ii++) { leftedge+= leftrect[ii].h - leftrect[ii].l; } if (Overlaps(R,leftrect,rectarray[j+1])) { GetOverlap(R,leftrect,rectarray[j+1],&ovlp); if (j == mlow) { validedge= leftedge+edgearray[j+1]; validvalue= ovlp; index= m; } else { edge= leftedge+edgearray[j+1]; validedge= validedge+edge; value= ovlp; if (value < validvalue) { validvalue= value; index= j+1; } } } else { leftspace= 1.0; for (ii= 0; ii <= (*par).maxdim; ii++) { leftspace*= leftrect[ii].h - leftrect[ii].l; } if (j == mlow) { validedge= leftedge+edgearray[j+1]; validvalue= -1.0/(leftspace+spacearray[j+1]); index= m; } else { edge= leftedge+edgearray[j+1]; validedge= validedge+edge; value= -1.0/(leftspace+spacearray[j+1]); if (value < validvalue) { validvalue= value; index= j+1; } } } } } /* Compute sum of the edges from leftedge[m-1]+rightedge[m] up to leftedge[M-m]+rightedge[M-m+1], -> axis; minimal area resp. overlap, -> index. */ currsortside= high; QuickSortDirEnt(0,M,i,high,(*n).entries,I); CopyRect(R,(*n).entries[I[0]].rect,leftrect); leftrect[i].h= (*n).entries[I[mlow]].rect[i].h; for (j= 1; j < mhigh; j++) { for (ii= 0; ii <= (*par).maxdim; ii++) { re= &(*n).entries[I[j]].rect[ii]; if ((*re).l < leftrect[ii].l) { leftrect[ii].l= (*re).l; } if ((*re).h > leftrect[ii].h) { leftrect[ii].h= (*re).h; } } if (j >= mlow) { leftedge= 0.0; leftspace= 1.0; for (ii= 0; ii <= (*par).maxdim; ii++) { leftedge+= leftrect[ii].h - leftrect[ii].l; leftspace*= leftrect[ii].h - leftrect[ii].l; } CopyRect(R,leftrect,rectarray[j]); edgearray[j]= leftedge; spacearray[j]= leftspace; } } /* fill array from m-1 up to M-m with leftrect, leftedge, leftspace */ CopyRect(R,(*n).entries[I[M]].rect,rightrect); for (j= M-1; j >= m; j--) { for (ii= 0; ii <= (*par).maxdim; ii++) { re = &(*n).entries[I[j]].rect[ii]; if ((*re).l < rightrect[ii].l) { rightrect[ii].l= (*re).l; } if ((*re).h > rightrect[ii].h) { rightrect[ii].h= (*re).h; } } if (j <= mhigh) { rightedge= 0.0; for (ii= 0; ii <= (*par).maxdim; ii++) { rightedge+= rightrect[ii].h- rightrect[ii].l; } if (Overlaps(R,rightrect,rectarray[j-1])) { GetOverlap(R,rightrect,rectarray[j-1],&ovlp); if (j == mhigh) { backvaledge= rightedge+edgearray[j-1]; backvalvalue= ovlp; backind= j; } else { edge= rightedge+edgearray[j-1]; backvaledge= backvaledge+edge; value= ovlp; if (value < backvalvalue) { backvalvalue= value; backind= j; } } } else { rightspace= 1.0; for (ii= 0; ii <= (*par).maxdim; ii++) { rightspace*= rightrect[ii].h - rightrect[ii].l; } if (j == mhigh) { backvaledge= rightedge+edgearray[j-1]; backvalvalue= -1.0/(rightspace+spacearray[j-1]); backind= j; } else { edge= rightedge+edgearray[j-1]; backvaledge= backvaledge+edge; value= -1.0/(rightspace+spacearray[j-1]); if (value < backvalvalue) { backvalvalue= value; backind= j; } } } } } /* Compute sum of the edges from rightedge[M-m+1]+leftedge[M-m] down to rightedge[m] +leftedge[m-1], -> axis; minimal area resp. overlap, -> index. */ if (backvalvalue <= validvalue) { sortside= high; index= backind; } validedge= validedge+backvaledge; if (i == 0) { axsortside= sortside; axis= i; axisedge= validedge; axisindex= index; } else if (validedge < axisedge) { axsortside= sortside; axis= i; axisedge= validedge; axisindex= index; } } if (axis != (*par).maxdim || axsortside != currsortside) { QuickSortDirEnt(0,M,axis,axsortside,(*n).entries,I); } n= &(*(*R).N[depth]).DIR; (*n).nofentries= axisindex; for (j= 0; j < (*n).nofentries; j++) { (*n).entries[j]= (*(*R).Ntosplit).DIR.entries[I[j]]; } /* printf("%3d",axisindex); */ /* N[depth] gets entries 0 up to axisindex-1 */ n= &(*(*R).Nsibling).DIR; (*n).nofentries= M-axisindex+1; for (j= 0; j < (*n).nofentries; j++) { (*n).entries[j]= (*(*R).Ntosplit).DIR.entries[I[axisindex+j]]; } /* printf("%3d",M-axisindex+1); */ /* printf("%3d\n",M+1); */ } /***********************************************************************/ static void SplitAndDistributData(RSTREE R, int depth, typDATAent *newentry, int M, int m) { ValueArray edgearray, spacearray; RectArray rectarray; refparameters par; refDATAnode n; refinterval re; IndexArray I; Side sortside, currsortside, axsortside; int axis; int mlow, mhigh, index, backind, axisindex; typrect leftrect, rightrect; double leftspace, rightspace, leftedge, rightedge, edge, validedge, backvaledge, axisedge, ovlp, value, validvalue, backvalvalue; int i, j, ii; par= &(*R).parameters._; (*R).Ntosplit= (*R).N[depth]; (*R).N[depth]= (*R).helpdatanode; (*R).helpdatanode= (*R).Ntosplit; for (j= 0; j <= M; j++) { I[j]= j; } mhigh= M-m+1; mlow= m-1; n= &(*(*R).Ntosplit).DATA; (*n).entries[M]= *newentry; for (i= 0; i <= (*par).maxdim; i++) { sortside= low; currsortside= low; QuickSortDataEnt(0,M,i,low,(*n).entries,I); CopyRect(R,(*n).entries[I[M]].rect,rightrect); rightrect[i].l= (*n).entries[I[mhigh]].rect[i].l; for (j= M-1; j >= m; j--) { for (ii= 0; ii <= (*par).maxdim; ii++) { re= &(*n).entries[I[j]].rect[ii]; if ((*re).l < rightrect[ii].l) { rightrect[ii].l= (*re).l; } if ((*re).h > rightrect[ii].h) { rightrect[ii].h= (*re).h; } } if (j <= mhigh) { rightedge= 0.0; rightspace= 1.0; for (ii= 0; ii <= (*par).maxdim; ii++) { rightedge+= rightrect[ii].h - rightrect[ii].l; rightspace*= rightrect[ii].h - rightrect[ii].l; } CopyRect(R,rightrect,rectarray[j]); edgearray[j]= rightedge; spacearray[j]= rightspace; } } /* fill array from M-m+1 down to m with rightrect, rightedge, rightspace */ CopyRect(R,(*n).entries[I[0]].rect,leftrect); for (j= 1; j < mhigh; j++) { for (ii= 0; ii <= (*par).maxdim; ii++) { re= &(*n).entries[I[j]].rect[ii]; if ((*re).l < leftrect[ii].l) { leftrect[ii].l= (*re).l; } if ((*re).h > leftrect[ii].h) { leftrect[ii].h= (*re).h; } } if (j >= mlow) { leftedge= 0.0; for (ii= 0; ii <= (*par).maxdim; ii++) { leftedge+= leftrect[ii].h - leftrect[ii].l; } if (Overlaps(R,leftrect,rectarray[j+1])) { GetOverlap(R,leftrect,rectarray[j+1],&ovlp); if (j == mlow) { validedge= leftedge+edgearray[j+1]; validvalue= ovlp; index= m; } else { edge= leftedge+edgearray[j+1]; validedge= validedge+edge; value= ovlp; if (value < validvalue) { validvalue= value; index= j+1; } } } else { leftspace= 1.0; for (ii= 0; ii <= (*par).maxdim; ii++) { leftspace*= leftrect[ii].h - leftrect[ii].l; } if (j == mlow) { validedge= leftedge+edgearray[j+1]; validvalue= -1.0/(leftspace+spacearray[j+1]); index= m; } else { edge= leftedge+edgearray[j+1]; validedge= validedge+edge; value= -1.0/(leftspace+spacearray[j+1]); if (value < validvalue) { validvalue= value; index= j+1; } } } } } /* Compute sum of the edges from leftedge[m-1]+rightedge[m] up to leftedge[M-m]+rightedge[M-m+1], -> axis; minimal area resp. overlap, -> index. */ currsortside= high; QuickSortDataEnt(0,M,i,high,(*n).entries,I); CopyRect(R,(*n).entries[I[0]].rect,leftrect); leftrect[i].h= (*n).entries[I[mlow]].rect[i].h; for (j= 1; j < mhigh; j++) { for (ii= 0; ii <= (*par).maxdim; ii++) { re= &(*n).entries[I[j]].rect[ii]; if ((*re).l < leftrect[ii].l) { leftrect[ii].l= (*re).l; } if ((*re).h > leftrect[ii].h) { leftrect[ii].h= (*re).h; } } if (j >= mlow) { leftedge= 0.0; leftspace= 1.0; for (ii= 0; ii <= (*par).maxdim; ii++) { leftedge+= leftrect[ii].h - leftrect[ii].l; leftspace*= leftrect[ii].h - leftrect[ii].l; } CopyRect(R,leftrect,rectarray[j]); edgearray[j]= leftedge; spacearray[j]= leftspace; } } /* fill array from m-1 up to M-m with leftrect, leftedge, leftspace */ CopyRect(R,(*n).entries[I[M]].rect,rightrect); for (j= M-1; j >= m; j--) { for (ii= 0; ii <= (*par).maxdim; ii++) { re = &(*n).entries[I[j]].rect[ii]; if ((*re).l < rightrect[ii].l) { rightrect[ii].l= (*re).l; } if ((*re).h > rightrect[ii].h) { rightrect[ii].h= (*re).h; } } if (j <= mhigh) { rightedge= 0.0; for (ii= 0; ii <= (*par).maxdim; ii++) { rightedge+= rightrect[ii].h- rightrect[ii].l; } if (Overlaps(R,rightrect,rectarray[j-1])) { GetOverlap(R,rightrect,rectarray[j-1],&ovlp); if (j == mhigh) { backvaledge= rightedge+edgearray[j-1]; backvalvalue= ovlp; backind= j; } else { edge= rightedge+edgearray[j-1]; backvaledge= backvaledge+edge; value= ovlp; if (value < backvalvalue) { backvalvalue= value; backind= j; } } } else { rightspace= 1.0; for (ii= 0; ii <= (*par).maxdim; ii++) { rightspace*= rightrect[ii].h - rightrect[ii].l; } if (j == mhigh) { backvaledge= rightedge+edgearray[j-1]; backvalvalue= -1.0/(rightspace+spacearray[j-1]); backind= j; } else { edge= rightedge+edgearray[j-1]; backvaledge= backvaledge+edge; value= -1.0/(rightspace+spacearray[j-1]); if (value < backvalvalue) { backvalvalue= value; backind= j; } } } } } /* Compute sum of the edges from rightedge[M-m+1]+leftedge[M-m] down to rightedge[m] +leftedge[m-1], -> axis; minimal area resp. overlap, -> index. */ if (backvalvalue <= validvalue) { sortside= high; index= backind; } validedge= validedge+backvaledge; if (i == 0) { axsortside= sortside; axis= i; axisedge= validedge; axisindex= index; } else if (validedge < axisedge) { axsortside= sortside; axis= i; axisedge= validedge; axisindex= index; } } if (axis != (*par).maxdim || axsortside != currsortside) { QuickSortDataEnt(0,M,axis,axsortside,(*n).entries,I); } n= &(*(*R).N[depth]).DATA; (*n).nofentries= axisindex; for (j= 0; j < (*n).nofentries; j++) { (*n).entries[j]= (*(*R).Ntosplit).DATA.entries[I[j]]; } /* printf("%3d",axisindex); */ /* N[depth] gets entries 0 up to axisindex-1 */ n= &(*(*R).Nsibling).DATA; (*n).nofentries= M-axisindex+1; for (j= 0; j < (*n).nofentries; j++) { (*n).entries[j]= (*(*R).Ntosplit).DATA.entries[I[axisindex+j]]; } /* printf("%3d",M-axisindex+1); */ /* printf("%3d\n",M+1); */ } /***********************************************************************/ static void UnDistributData(RSTREE R, typDATAent *newentry) { refDATAnode DAN; DAN= &(*(*R).Nsibling).DATA; (*DAN).nofentries= 1; (*DAN).entries[0]= *newentry; /* printf(" Un\n"); */ } /***********************************************************************/ void DeleteOneRec(RSTREE R) { refparameters par; refDIRnode DIN; refDATAnode DAN; refcount c; int depth, heightbefore; int i, j; par = &(*R).parameters._; depth= (*par).height; for (;;) { if (depth == (*par).height) { DAN= &(*(*R).N[depth]).DATA; (*DAN).nofentries--; (*DAN).entries[(*R).E[depth]]= (*DAN).entries[(*DAN).nofentries]; if ((*DAN).nofentries >= (*par).datam || depth == 1) { (*R).Nmodified[depth]= TRUE; c= &(*R).count; if ((*c).countflag) { (*c).datamodifycount++; } AdjustChainAfterDeletion(R,depth); break; } } else { DIN= &(*(*R).N[depth]).DIR; (*DIN).nofentries--; (*DIN).entries[(*R).E[depth]]= (*DIN).entries[(*DIN).nofentries]; if ((*DIN).nofentries >= (*par).dirm || depth == 1) { (*R).Nmodified[depth]= TRUE; c= &(*R).count; if ((*c).countflag) { (*c).dirmodifycount++; } AdjustChainAfterDeletion(R,depth); break; } } /*** --- LOOP not EXITed by deletion without underflow --- ***/ NtoNDel(R,depth); depth--; } /*** --- ReInsertion --- ***/ i= 2; heightbefore= (*par).height; while (i <= (*par).height) { if ((*R).NDel[i] != NULL) { c= &(*R).count; if ((*c).countflag) { if (i == (*par).height) { (*c).datavisitcount++; } else { (*c).dirvisitcount++; } } if (i == (*par).height) { DAN= &(*(*R).NDel[i]).DATA; for (j= 0; j < (*DAN).nofentries; j++) { Insert(R,(refentry)&(*DAN).entries[j],i); if ((*par).height > heightbefore) { i++; heightbefore++; } } } else { DIN= &(*(*R).NDel[i]).DIR; for (j= 0; j < (*DIN).nofentries; j++) { Insert(R,(refentry)&(*DIN).entries[j],i); if ((*par).height > heightbefore) { i++; heightbefore++; } } } free((*R).NDel[i]); (*R).NDel[i]= NULL; } i++; } /*** --- Shrink the tree --- ***/ if ((*par).height != 1 && (*(*R).N[1]).DIR.nofentries == 1) { ShrinkTree(R); } } /***********************************************************************/ static void NtoNDel(RSTREE R, int depth) { refparameters par; par= &(*R).parameters._; if ((*(*R).N[depth]).DIR.nofentries != 0) { /* see RSTBase.h "hope ..." */ (*R).NDel[depth]= (*R).N[depth]; if (depth == (*par).height) { (*R).N[depth]= (refnode)malloc((*R).datanodelen); } else { (*R).N[depth]= (refnode)malloc((*R).dirnodelen); } } else { /* this is only possible for data nodes. NDel[height] stays NULL. */ /* ==> no ReInsertion(height). P[height] set to 0 in any case. */ /* if height == 2 and shrink is done NewNode(R,2) is called. */ } PutPageNr(R,(*R).P[depth],depth); (*R).P[depth]= 0; (*R).Nmodified[depth]= FALSE; } /***********************************************************************/ static void ShrinkTree(RSTREE R) { refparameters par; refcount c; int i; par= &(*R).parameters._; if ((*R).P[2] == 0) { (*R).E[1]= 0; NewNode(R,2); } free((*R).N[1]); for (i= 1; i <= (*par).height; i++) { (*R).N[i]= (*R).N[i+1]; } (*R).Nmodified[1]= TRUE; c= &(*R).count; if ((*c).countflag) { (*c).dirmodifycount++; } PutPageNr(R,(*R).P[2],2); for (i= 2; i <= (*par).height; i++) { (*R).P[i]= (*R).P[i+1]; (*R).Nmodified[i]= (*R).Nmodified[i+1]; (*par).pagecountarr[i]= (*par).pagecountarr[i+1]; } (*R).E[(*par).height]= -1; (*par).height--; } /***********************************************************************/ gerris-snapshot-131206/modules/RStarTree/RSTBase.h0000644000175100017510000001552312250371171016627 00000000000000/* ----- RSTBase.h ----- */ #ifndef __RSTBase_h #define __RSTBase_h /*** Begin ----- naming rules for structured types ----- **********/ /* Non vector types are always called "typ<..>", Exceptions: Side, rstree. References to non vector types are always called "ref<..>". Exceptions: RSTREE. Vector types are always called <..>Array. Exceptions: RSTName, typpoint, typrect, typfixblock, and the internal arrays of the R*-tree as typpath, typentrynumbs, typpagenrs, typflagarray, typpagecountarr. */ /*** End ----- naming rules for structured types ----- **********/ /* constants */ #define SIZEfixblock 512 #define maxnum (((SIZEfixblock-2*sizeof(int)) / sizeof(int))-1) #define maxentries MaxNumbOfEntriesPerPage #define EntryRange (maxentries+sizeof(int)) #define chainlen 42 /* 3^ 40 = 12,157,665,459,056,928,801 */ #define datasuffix ".Data" #define dirPDsuffix ".DirPD" #define dataPDsuffix ".DataPD" #define STDMODE 0644 #define paramblocknumb 0 #define firstPDblocknumb (paramblocknumb+1) #define rootblocknumb 0 /* types */ typedef typinterval *refinterval; typedef char RSTName[MaxNameLength]; typedef double typpoint[NumbOfDim]; typedef double ValueArray[EntryRange]; typedef int IndexArray[EntryRange]; typedef byte ByteArray[EntryRange]; typedef typrect RectArray[EntryRange]; typedef typrect NbrsArray[EntryRange]; typedef typpoint PointArray[EntryRange]; typedef enum { low, high } Side; typedef struct { typrect rect; int ptrtosub; PADDING_32_BITS; typdirinfo info; } typDIRent, *refDIRent; /* inner entry */ typedef struct { typrect rect; typinfo info; } typDATAent, *refDATAent; /* data entry */ typedef union { typDIRent DIR; typDATAent DATA; } typentry, *refentry; /* universal entry */ /* If typentry v; Then */ /* every access to rect by v.DIR.rect */ /* End */ /* hope the compiler-designers agree. */ typedef typDIRent typDIRentries[EntryRange]; typedef typDATAent typDATAentries[EntryRange]; typedef struct { int nofentries; PADDING_32_BITS; typDIRentries entries; /* 0 .. nofentries-1 !! */ } typDIRnode, *refDIRnode; /* inner node */ typedef struct { int nofentries; typDATAentries entries; /* 0 .. nofentries-1 !! */ } typDATAnode, *refDATAnode; /* data node */ typedef union { typDIRnode DIR; typDATAnode DATA; } typnode, *refnode; /* universal node */ /* If typnode v; Then */ /* every access to nofentries by v.DIR.nofentries */ /* End */ /* hope the compiler-designers agree. */ typedef refnode typpath[chainlen+1]; /* 1 .. height !! */ typedef int typentrynumbs[chainlen+1]; /* 1 .. height !! */ typedef int typpagenrs[chainlen+1]; /* 1 .. height !! */ typedef boolean typflagarray[chainlen+1]; /* 1 .. height !! */ typedef byte typfixblock[SIZEfixblock]; typedef struct { int childnr; int nofnumbers; int number[maxnum+1]; /* 0 + [1 .. maxnum] !! */ } typpagedir, *refpagedir; typedef union { typpagedir _; /* call the intrinsics "_" */ typfixblock fixblock; /* adjust to SIZEfixblock */ } typPDblock, *refPDblock; typedef int typpagecountarr[chainlen+1]; /* 1 .. height !! */ typedef struct { boolean unique; int height; int SIZE_DIRnofentries, SIZE_DATAnofentries; int SIZEinfo; int direntrylen, dataentrylen; int nbrsexam; int reinstpercent; int minfillpercent; int dirreinsertqty, datareinsertqty; int pagelen; int dirM, dirMwords, dirm; int dataM, dataMwords, datam; int maxdim; int dirpagecount, datapagecount, recordcount; typpagecountarr pagecountarr; } typparameters, *refparameters; typedef union { typparameters _; /* call the intrinsics "_" */ typfixblock fixblock; /* adjust to SIZEfixblock */ } typparamblock, *refparamblock; typedef struct { boolean countflag; int dirvisitcount, datavisitcount; int dirreadcount, datareadcount; int dirmodifycount, datamodifycount; int dirwritecount, datawritecount; } typcount, *refcount; typedef struct { File f; int bl; } typfiledesc; typedef struct { int dirnodelen, datanodelen; typpath N, NInst, NDel; typentrynumbs E, EInst; typpagenrs P; typflagarray Nmodified, ReInsert; typPDblock dirpagedir, datapagedir; typparamblock parameters; typcount count; boolean RSTDone; PADDING_32_BITS; refnode helpdirnode, helpdatanode, Ntosplit, Nsibling; typfiledesc dir, data, dirPD, dataPD; RSTName dirname; boolean readonly; } rstree; /****************************************************************/ /* begin **** --- types to check for alignment problems --- *****/ typedef typDIRent typ2DIRentries[2]; typedef typDATAent typ2DATAentries[2]; typedef struct { int nofentries; PADDING_32_BITS; typ2DIRentries entries; } typDIRnodeOf2; /* inner node containing 2 entries */ typedef struct { int nofentries; typ2DATAentries entries; } typDATAnodeOf2; /* data node containing 2 entries */ typedef typDIRent typ3DIRentries[3]; typedef typDATAent typ3DATAentries[3]; typedef struct { int nofentries; PADDING_32_BITS; typ3DIRentries entries; } typDIRnodeOf3; /* inner node containing 3 entries */ typedef struct { int nofentries; typ3DATAentries entries; } typDATAnodeOf3; /* data node containing 3 entries */ /* end **** --- types to check for alignment problems --- *****/ /****************************************************************/ #endif /* !__RSTBase_h */ gerris-snapshot-131206/modules/RStarTree/RSTQuery.c0000644000175100017510000003304712250371171017056 00000000000000/* ----- RSTQuery.c ----- */ #include "RStarTree.h" #include "RSTQuery.h" #include "RSTUtil.h" #include "RSTInOut.h" /* declarations */ /************************************************************************/ boolean FoundRect(RSTREE R, int depth, typrect rectangle, boolean isinsert, refinfo *infoadr) { refparameters par; refcount c; refDATAnode n; int instind; boolean found; int i; i= -1; instind= -1; found= FALSE; par= &(*R).parameters._; if (depth != (*par).height) { if (isinsert) { ChooseSubtree(R,rectangle,depth,&(*(*R).N[depth]).DIR,&instind); (*R).EInst[depth]= instind; } do { i++; if (Covers(R,(*(*R).N[depth]).DIR.entries[i].rect,rectangle)) { (*R).E[depth]= i; depth++; if ((*R).N[depth] == (*R).NInst[depth]) { if ((*R).Nmodified[depth]) { PutNode(R,(*R).N[depth],(*R).P[depth],depth); (*R).Nmodified[depth]= FALSE; } if (depth == (*par).height) { (*R).N[depth]= (refnode)malloc((*R).datanodelen); } else { (*R).N[depth]= (refnode)malloc((*R).dirnodelen); } (*R).P[depth]= (*(*R).N[depth-1]).DIR.entries[i].ptrtosub; GetNode(R,(*R).N[depth],(*R).P[depth],depth); } else if ((*(*R).N[depth-1]).DIR.entries[i].ptrtosub != (*R).P[depth]) { NewNode(R,depth); } if ( i == instind) { (*R).NInst[depth]= (*R).N[depth]; } found= FoundRect(R,depth,rectangle,i==instind,infoadr); depth--; } } while (! found && i != (*(*R).N[depth]).DIR.nofentries - 1); c = &(*R).count; if ((*c).countflag) { (*c).dirvisitcount++; } } else { n= &(*(*R).N[depth]).DATA; while (! found && i != (*n).nofentries - 1) { i++; found= RSTEqual(R,(*n).entries[i].rect,rectangle); if (found) { (*R).E[depth]= i; *infoadr= &(*n).entries[i].info; } } c = &(*R).count; if ((*c).countflag) { (*c).datavisitcount++; } } if (found) { (*R).EInst[depth]= -1; depth++; if ((*R).NInst[depth] != NULL) { if ((*R).NInst[depth] != (*R).N[depth]) { free((*R).NInst[depth]); } (*R).NInst[depth]= NULL; } depth--; } return found; } /************************************************************************/ void XstsRgn(RSTREE R, int depth, typrect rectangle1, typrect rectangle2, DirQueryProc DirQuery, DataQueryProc DataQuery, boolean *found) { refcount c; refDIRnode DIN; refDATAnode DAN; boolean istoread; int i; if (depth != (*R).parameters._.height) { DIN= &(*(*R).N[depth]).DIR; i= -1; do { i++; if (DirQuery(R,(*DIN).entries[i].rect,rectangle1,rectangle2)) { (*R).E[depth]= i; istoread= (*DIN).entries[i].ptrtosub != (*R).P[depth+1]; if (istoread) { NewNode(R,depth+1); } XstsRgn(R,depth+1,rectangle1,rectangle2,DirQuery,DataQuery,found); } } while (! *found && i != (*DIN).nofentries - 1); c= &(*R).count; if ((*c).countflag) { (*c).dirvisitcount++; } } else { DAN= &(*(*R).N[depth]).DATA; i= -1; while (! *found && i != (*DAN).nofentries - 1) { i++; if (DataQuery(R,(*DAN).entries[i].rect,rectangle1,rectangle2)) { (*R).E[depth]= i; *found= TRUE; } } c= &(*R).count; if ((*c).countflag) { (*c).datavisitcount++; } } } /************************************************************************/ void RgnCnt(RSTREE R, int depth, typrect rectangle1, typrect rectangle2, DirQueryProc DirQuery, DataQueryProc DataQuery, int *keysqualifying) { refcount c; refDIRnode DIN; refDATAnode DAN; boolean istoread; int i; if (depth != (*R).parameters._.height) { DIN= &(*(*R).N[depth]).DIR; for (i= 0; i < (*DIN).nofentries; i++) { if (DirQuery(R,(*DIN).entries[i].rect,rectangle1,rectangle2)) { (*R).E[depth]= i; istoread= (*DIN).entries[i].ptrtosub != (*R).P[depth+1]; if (istoread) { NewNode(R,depth+1); } RgnCnt(R,depth+1,rectangle1,rectangle2, DirQuery, DataQuery,keysqualifying); } } c= &(*R).count; if ((*c).countflag) { (*c).dirvisitcount++; } } else { DAN= &(*(*R).N[depth]).DATA; for (i= 0; i < (*DAN).nofentries; i++) { if (DataQuery(R,(*DAN).entries[i].rect,rectangle1,rectangle2)) { (*R).E[depth]= i; (*keysqualifying)++; } } c= &(*R).count; if ((*c).countflag) { (*c).datavisitcount++; } } } /************************************************************************/ void RgnQuery(RSTREE R, int depth, typrect rectangle1, typrect rectangle2, DirQueryProc DirQuery, DataQueryProc DataQuery, QueryManageProc Manage, void *buf, boolean *finish) { refcount c; refDIRnode DIN; refDATAnode DAN; boolean istoread; typrect rectfound; int i; if (depth != (*R).parameters._.height) { c= &(*R).count; if ((*c).countflag) { (*c).dirvisitcount++; } DIN= &(*(*R).N[depth]).DIR; for (i= 0; i < (*DIN).nofentries; i++) { if (*finish) {return;} if (DirQuery(R,(*DIN).entries[i].rect,rectangle1,rectangle2)) { (*R).E[depth]= i; istoread= (*DIN).entries[i].ptrtosub != (*R).P[depth+1]; if (istoread) { NewNode(R,depth+1); } RgnQuery(R,depth+1,rectangle1,rectangle2, DirQuery,DataQuery, Manage,buf,finish); } } } else { c= &(*R).count; if ((*c).countflag) { (*c).datavisitcount++; } DAN= &(*(*R).N[depth]).DATA; for (i= 0; i < (*DAN).nofentries; i++) { if (*finish) {return;} if (DataQuery(R,(*DAN).entries[i].rect,rectangle1,rectangle2)) { (*R).E[depth]= i; CopyRect(R,(*DAN).entries[i].rect,rectfound); /* avoid modification */ Manage(R,rectfound, &(*DAN).entries[i].info, buf, &(*R).Nmodified[depth], finish); } } } } /************************************************************************/ void All(RSTREE R, int depth, QueryManageProc Manage, void *buf, boolean *finish) { refDIRnode DIN; refDATAnode DAN; typrect rectfound; int i; if (depth != (*R).parameters._.height) { DIN= &(*(*R).N[depth]).DIR; for (i= 0; i < (*DIN).nofentries; i++) { if (*finish) {return;} (*R).E[depth]= i; if ((*DIN).entries[i].ptrtosub != (*R).P[depth+1]) { NewNode(R,depth+1); } All(R,depth+1,Manage,buf,finish); } } else { DAN= &(*(*R).N[depth]).DATA; for (i= 0; i < (*DAN).nofentries; i++) { if (*finish) {return;} (*R).E[depth]= i; CopyRect(R,(*DAN).entries[i].rect,rectfound); /* avoid modification */ Manage(R,rectfound, &(*DAN).entries[i].info, buf, &(*R).Nmodified[depth], finish); } } } /************************************************************************/ static void dirinfo_init (typdirinfo * info) { memset (info, 0, sizeof (typdirinfo)); info->Hmin = 1e30; info->Hmax = - 1e30; } static void relative (typrect rect, double * o, double * h) { o[0] = (((double)rect[0].l) + ((double)rect[0].h))/2.; o[1] = (((double)rect[1].l) + ((double)rect[1].h))/2.; *h = ((double)rect[0].h) - ((double)rect[0].l); if (((double)rect[1].h) - ((double)rect[1].l) > *h) *h = ((double)rect[1].h) - ((double)rect[1].l); } static void dirinfo_add_dir (typrect parent, typdirinfo * info, typrect rect, typdirinfo * a) { double op[2], oa[2], hp, ha; relative (parent, op, &hp); relative (rect, oa, &ha); double oap0 = oa[0] - op[0], oap1 = oa[1] - op[1]; double an = a->n; double ha2 = ha*ha, hp2 = hp*hp; info->m01 += (an*oap0 + a->m01*ha)/hp; info->m02 += (an*oap1 + a->m02*ha)/hp; info->m03 += (oap0*(an*oap1 + a->m02*ha) + ha*(a->m01*oap1 + a->m03*ha))/hp2; double m11 = (oap0*(an*oap0 + 2.*a->m01*ha) + a->m11*ha2)/hp2; info->m11 += m11; double m13 = ha*(oap0*(a->m02*oap0 + 2.*a->m03*ha) + a->m13*ha2)/hp2; info->m13 += (oap1*m11 + m13)/hp; double m22 = (oap1*(an*oap1 + 2.*a->m02*ha) + a->m22*ha2)/hp2; info->m22 += m22; info->m23 += (oap0*m22 + ha*(oap1*(oap1*a->m01 + 2.*a->m03*ha) + a->m23*ha2)/hp2)/hp; info->m33 += (oap1*(oap1*m11 + 2.*m13) + ha2*(oap0*(oap0*a->m22 + 2.*a->m23*ha) + ha2*a->m33)/hp2)/hp2; double ha3 = ha2*ha, hp3 = hp2*hp; info->m44 += (oap0*(oap0*(oap0*an + 3.*ha*a->m01) + 3.*ha2*a->m11) + ha3*a->m44)/hp3; info->m55 += (oap1*(oap1*(oap1*an + 3.*ha*a->m02) + 3.*ha2*a->m22) + ha3*a->m55)/hp3; double ha4 = ha3*ha, hp4 = hp3*hp; info->m66 += (oap0*(oap0*(oap0*(oap0*an + 4.*ha*a->m01) + 6.*ha2*a->m11) + 4.*ha3*a->m44) + ha4*a->m66)/hp4; info->m77 += (oap1*(oap1*(oap1*(oap1*an + 4.*ha*a->m02) + 6.*ha2*a->m22) + 4.*ha3*a->m55) + ha4*a->m77)/hp4; info->m67 += (oap1*(oap0*(oap0*(oap0*an + 3.*ha*a->m01) + 3.*ha2*a->m11) + ha3*a->m44) + oap0*(oap0*(ha*a->m02*oap0 + 3.*ha2*a->m03) + 3.*ha3*a->m13) + ha4*a->m67)/hp4; info->m76 += (oap0*(oap1*(oap1*(oap1*an + 3.*ha*a->m02) + 3.*ha2*a->m22) + ha3*a->m55) + oap1*(oap1*(ha*a->m01*oap1 + 3.*ha2*a->m03) + 3.*ha3*a->m23) + ha4*a->m76)/hp4; info->H0 += a->H0; info->H1 += (a->H0*oap0 + a->H1*ha)/hp; info->H2 += (a->H0*oap1 + a->H2*ha)/hp; info->H3 += (ha*(ha*a->H3 + oap0*a->H2 + oap1*a->H1) + oap0*oap1*a->H0)/hp2; info->H4 += a->H4; info->H5 += (oap0*(2.*ha*a->H1 + oap0*a->H0) + ha2*a->H5)/hp2; info->H6 += (oap1*(2.*ha*a->H2 + oap1*a->H0) + ha2*a->H6)/hp2; info->n += a->n; if (a->Hmin < info->Hmin) info->Hmin = a->Hmin; if (a->Hmax > info->Hmax) info->Hmax = a->Hmax; } static void dirinfo_add_data (typrect parent, typdirinfo * info, typrect rect, refinfo data) { double p[3], o[2], h; relative (parent, o, &h); p[0] = (((double) rect[0].l) - o[0])/h; p[1] = (((double)rect[1].l) - o[1])/h; p[2] = data->height; info->m01 += p[0]; info->m02 += p[1]; info->m03 += p[0]*p[1]; info->m11 += p[0]*p[0]; info->m13 += p[0]*p[0]*p[1]; info->m22 += p[1]*p[1]; info->m23 += p[0]*p[1]*p[1]; info->m33 += p[0]*p[0]*p[1]*p[1]; info->m44 += p[0]*p[0]*p[0]; info->m55 += p[1]*p[1]*p[1]; info->m66 += p[0]*p[0]*p[0]*p[0]; info->m77 += p[1]*p[1]*p[1]*p[1]; info->m67 += p[0]*p[0]*p[0]*p[1]; info->m76 += p[1]*p[1]*p[1]*p[0]; info->H0 += p[2]; info->H1 += p[0]*p[2]; info->H2 += p[1]*p[2]; info->H3 += p[0]*p[1]*p[2]; info->H4 += p[2]*p[2]; info->H5 += p[0]*p[0]*p[2]; info->H6 += p[1]*p[1]*p[2]; info->n++; if (p[2] < info->Hmin) info->Hmin = p[2]; if (p[2] > info->Hmax) info->Hmax = p[2]; } void UpdateAll(RSTREE R, int depth, typrect rect, typdirinfo * info) { refDIRnode DIN; refDATAnode DAN; typrect rectfound; int i; if (depth != (*R).parameters._.height) { DIN= &(*(*R).N[depth]).DIR; for (i= 0; i < (*DIN).nofentries; i++) { (*R).E[depth]= i; if ((*DIN).entries[i].ptrtosub != (*R).P[depth+1]) { NewNode(R,depth+1); } dirinfo_init (&(*DIN).entries[i].info); (*R).Nmodified[depth] = 1; UpdateAll(R,depth+1,(*DIN).entries[i].rect,&(*DIN).entries[i].info); dirinfo_add_dir (rect,info,(*DIN).entries[i].rect,&(*DIN).entries[i].info); } } else { DAN= &(*(*R).N[depth]).DATA; for (i= 0; i < (*DAN).nofentries; i++) { (*R).E[depth]= i; CopyRect(R,(*DAN).entries[i].rect,rectfound); /* avoid modification */ dirinfo_add_data (rect,info,rectfound,&(*DAN).entries[i].info); } } } /************************************************************************/ void RgnQueryInfo(RSTREE R, int depth, Check includes, Check intersects, void * data, typrect rect, typdirinfo * info) { refcount c; refDIRnode DIN; refDATAnode DAN; boolean istoread; typrect rectfound; int i; if (depth != (*R).parameters._.height) { c= &(*R).count; if ((*c).countflag) { (*c).dirvisitcount++; } DIN= &(*(*R).N[depth]).DIR; for (i= 0; i < (*DIN).nofentries; i++) { if ((* includes) ((*DIN).entries[i].rect,data,depth)) dirinfo_add_dir (rect, info, (*DIN).entries[i].rect, &(*DIN).entries[i].info); else if ((* intersects) ((*DIN).entries[i].rect,data,depth)) { (*R).E[depth]= i; istoread= (*DIN).entries[i].ptrtosub != (*R).P[depth+1]; if (istoread) { NewNode(R,depth+1); } RgnQueryInfo(R,depth+1,includes,intersects,data,rect,info); } } } else { c= &(*R).count; if ((*c).countflag) { (*c).datavisitcount++; } DAN= &(*(*R).N[depth]).DATA; for (i= 0; i < (*DAN).nofentries; i++) { if ((* includes) ((*DAN).entries[i].rect,data,depth)) { (*R).E[depth]= i; CopyRect(R,(*DAN).entries[i].rect,rectfound); /* avoid modification */ dirinfo_add_data (rect, info, rectfound, &(*DAN).entries[i].info); } } } } /************************************************************************/ gerris-snapshot-131206/modules/RStarTree/RSTInterUtil.c0000644000175100017510000003030412250371171017661 00000000000000/* ----- RSTInterUtil.c ----- */ #include "RStarTree.h" #include "RSTInterUtil.h" /* ----- declarations ----- */ /***********************************************************************/ void CreateRSFiles(RSTREE R) { RSTName SufName; int O_MODE= O_RDWR | O_CREAT | O_EXCL; /* int O_MODE= O_RDWR | O_CREAT | O_TRUNC; "forced Creation" */ (*R).dir.f= open((*R).dirname,O_MODE,STDMODE); if ((*R).dir.f == -1) { (*R).RSTDone= FALSE; return; } strcpy(SufName,(*R).dirname); strcat(SufName,datasuffix); (*R).data.f= open(SufName,O_MODE,STDMODE); if ((*R).data.f == -1) { (*R).RSTDone= FALSE; return; } strcpy(SufName,(*R).dirname); strcat(SufName,dirPDsuffix); (*R).dirPD.f= open(SufName,O_MODE,STDMODE); if ((*R).dirPD.f == -1) { (*R).RSTDone= FALSE; return; } strcpy(SufName,(*R).dirname); strcat(SufName,dataPDsuffix); (*R).dataPD.f= open(SufName,O_MODE,STDMODE); if ((*R).dataPD.f == -1) { (*R).RSTDone= FALSE; return; } } /***********************************************************************/ void OpenRSFiles(RSTREE R, int O_MODE) { RSTName SufName; (*R).dir.f= open((*R).dirname,O_MODE,STDMODE); if ((*R).dir.f == -1) { (*R).RSTDone= FALSE; return; } strcpy(SufName,(*R).dirname); strcat(SufName,datasuffix); (*R).data.f= open(SufName,O_MODE,STDMODE); if ((*R).data.f == -1) { (*R).RSTDone= FALSE; return; } strcpy(SufName,(*R).dirname); strcat(SufName,dirPDsuffix); (*R).dirPD.f= open(SufName,O_MODE,STDMODE); if ((*R).dirPD.f == -1) { (*R).RSTDone= FALSE; return; } strcpy(SufName,(*R).dirname); strcat(SufName,dataPDsuffix); (*R).dataPD.f= open(SufName,O_MODE,STDMODE); if ((*R).dataPD.f == -1) { (*R).RSTDone= FALSE; return; } } /***********************************************************************/ void FastCloseRSFiles(RSTREE R) { close((*R).dir.f); close((*R).data.f); close((*R).dirPD.f); close((*R).dataPD.f); } /***********************************************************************/ void CloseRSFiles(RSTREE R) { if (close((*R).dir.f) == -1) { (*R).RSTDone= FALSE; } if (close((*R).data.f) == -1) { (*R).RSTDone= FALSE; } if (close((*R).dirPD.f) == -1) { (*R).RSTDone= FALSE; } if (close((*R).dataPD.f) == -1) { (*R).RSTDone= FALSE; } } /***********************************************************************/ void SetBase(RSTREE R, int pagelen, boolean unique) { refparameters par; refpagedir dpd; int dirminfill, dataminfill; int i; par= &(*R).parameters._; (*par).minfillpercent= minimumFillPercentage; (*par).reinstpercent= ReInsertPercentage; (*par).nbrsexam= maximumNeighborsToExamine; (*par).maxdim= NumbOfDim-1; (*par).SIZEinfo= sizeof(typinfo); (*par).unique= unique; (*par).pagelen= pagelen; /* ----- set directory level parameters ----- */ SetCheckDir(R,TRUE); (*par).dirM= ((*par).pagelen-(*par).SIZE_DIRnofentries) / (*par).direntrylen; if ((*par).dirM > maxentries) { (*R).RSTDone= FALSE; return; } if ((*par).dirM < 3) { (*R).RSTDone= FALSE; return; } if ((*par).dirM < 5) { dirminfill= minFillPercSmallFanout; } else { dirminfill= minimumFillPercentage; } (*par).dirMwords= (*par).dirM / sizeof(int) + 1; (*par).dirm= (dirminfill * (*par).dirM + 50) / 100; (*par).dirreinsertqty= ((*par).reinstpercent * (*par).dirM + 50) / 100; /* ----- set data level parameters ----- */ SetCheckData(R,TRUE); (*par).dataM= ((*par).pagelen-(*par).SIZE_DATAnofentries) / (*par).dataentrylen; if ((*par).dataM > maxentries) { (*R).RSTDone= FALSE; return; } if ((*par).dataM < 1) { (*R).RSTDone= FALSE; return; } if ((*par).dataM < 5) { dataminfill= minFillPercSmallFanout; } else { dataminfill= minimumFillPercentage; } (*par).dataMwords= (*par).dataM / sizeof(int) + 1; (*par).datam= (dataminfill * (*par).dataM + 50) / 100; (*par).datareinsertqty= ((*par).reinstpercent * (*par).dataM + 50) / 100; /* ----- set defaults ----- */ (*par).height= 1; (*par).dirpagecount= 1; (*par).datapagecount= 0; for (i= 0; i < chainlen; i++) { (*par).pagecountarr[i]= 0; } (*par).recordcount= 0; dpd= &(*R).dirpagedir._; (*dpd).childnr= firstPDblocknumb; (*dpd).nofnumbers= 0; (*dpd).number[0]= rootblocknumb; dpd= &(*R).datapagedir._; (*dpd).childnr= firstPDblocknumb; (*dpd).nofnumbers= 0; (*dpd).number[0]= rootblocknumb; } /***********************************************************************/ void SetCheckDir(RSTREE R, boolean creation) { /* Alignment and compatibility checks */ refparameters par; int SIZE_DIRnodeOf3, SIZE_DIRnodeOf2, PACKEDdirentrylen, REALdirentrylen, PACKEDSIZE_DIRnofentries, REALSIZE_DIRnofentries; par= &(*R).parameters._; if (creation) { (*par).direntrylen= sizeof(typDIRent); /* set */ PACKEDdirentrylen= sizeof(typrect) + sizeof(int); #if 0 if (PACKEDdirentrylen != (*par).direntrylen) { fprintf(stderr,"\n%s\n"," ----- WARNING -----"); fprintf(stderr,"%s\n","Directory entries are not packed!"); fprintf(stderr,"%s %d\n","Packed directory entry length:",PACKEDdirentrylen); fprintf(stderr,"%s %d\n"," Real space needed:",(*par).direntrylen); fprintf(stderr,"%s\n",/* implicitly */"Applying the latter!"); } #endif } SIZE_DIRnodeOf3= sizeof(typDIRnodeOf3); SIZE_DIRnodeOf2= sizeof(typDIRnodeOf2); REALdirentrylen= SIZE_DIRnodeOf3 - SIZE_DIRnodeOf2; if (creation) { if (REALdirentrylen != (*par).direntrylen) { fprintf(stderr,"\n%s\n"," ----- WARNING -----"); fprintf(stderr,"%s\n","Directory nodes are not packed!"); fprintf(stderr,"%s %d\n","Directory entry length:",(*par).direntrylen); fprintf(stderr,"%s %d\n","Space needed in a node:",REALdirentrylen); fprintf(stderr,"%s\n",/* explicitly */"Applying the latter!"); (*par).direntrylen= REALdirentrylen; /* reset */ } } else { if ((*par).direntrylen != REALdirentrylen) { /* check */ fprintf(stderr,"\n%s\n","FATAL ERROR:"); fprintf(stderr,"Incompatible R*-tree file '%s'\n", R->dirname); fprintf(stderr,"%s %d\n","Size of a directory entry:",(*par).direntrylen); fprintf(stderr,"%s %d\n"," Expecting:",REALdirentrylen); } } PACKEDSIZE_DIRnofentries= sizeof(int); REALSIZE_DIRnofentries= SIZE_DIRnodeOf3 - 3 * (*par).direntrylen; (*par).SIZE_DIRnofentries= REALSIZE_DIRnofentries; /* set */ if (creation) { #if 0 if (PACKEDSIZE_DIRnofentries != (*par).SIZE_DIRnofentries) { fprintf(stderr,"\n%s\n"," ----- WARNING -----"); fprintf(stderr,"%s\n","Gap before directory entries!"); } #endif } else { if ((*par).SIZE_DIRnofentries != REALSIZE_DIRnofentries) { fprintf(stderr,"\n%s\n","FATAL ERROR:"); fprintf(stderr,"Incompatible R*-tree file '%s'\n", R->dirname); fprintf(stderr,"%s %d\n","Offset for entries:",(*par).SIZE_DIRnofentries); fprintf(stderr,"%s %d\n"," Expecting:",REALSIZE_DIRnofentries); } } if (! creation) { if ((*par).maxdim+1 != NumbOfDim) { fprintf(stderr,"\n%s\n","FATAL ERROR:"); fprintf(stderr,"Incompatible R*-tree file '%s'\n", R->dirname); fprintf(stderr,"%s %d\n","Number of dimensions:",(*par).maxdim+1); fprintf(stderr,"%s %d\n"," Expecting:",NumbOfDim); } } (*R).dirnodelen= (*par).pagelen + (*par).direntrylen; } /***********************************************************************/ void SetCheckData(RSTREE R, boolean creation) { /* Alignment and compatibility checks */ refparameters par; int SIZE_DATAnodeOf3, SIZE_DATAnodeOf2, PACKEDdataentrylen, REALdataentrylen, PACKEDSIZE_DATAnofentries, REALSIZE_DATAnofentries; par= &(*R).parameters._; if (creation) { (*par).dataentrylen= sizeof(typDATAent); /* set */ PACKEDdataentrylen= sizeof(typrect) + sizeof(typinfo); if (PACKEDdataentrylen != (*par).dataentrylen) { fprintf(stderr,"\n%s\n"," ----- WARNING -----"); fprintf(stderr,"%s\n","Data entries are not packed!"); fprintf(stderr,"%s %d\n","Packed data entry length:",PACKEDdataentrylen); fprintf(stderr,"%s %d\n"," Real space needed:",(*par).dataentrylen); fprintf(stderr,"%s\n",/* implicitly */"Applying the latter!"); } } SIZE_DATAnodeOf3= sizeof(typDATAnodeOf3); SIZE_DATAnodeOf2= sizeof(typDATAnodeOf2); REALdataentrylen= SIZE_DATAnodeOf3 - SIZE_DATAnodeOf2; if (creation) { if (REALdataentrylen != (*par).dataentrylen) { fprintf(stderr,"\n%s\n"," ----- WARNING -----"); fprintf(stderr,"%s\n","Data nodes are not packed!"); fprintf(stderr,"%s %d\n"," Data entry length:",(*par).dataentrylen); fprintf(stderr,"%s %d\n","Space needed in a node:",REALdataentrylen); fprintf(stderr,"%s\n",/* explicitly */"Applying the latter!"); (*par).dataentrylen= REALdataentrylen; /* reset */ } } else { if ((*par).dataentrylen != REALdataentrylen) { /* check */ fprintf(stderr,"\n%s\n","FATAL ERROR:"); fprintf(stderr,"Incompatible R*-tree file '%s'\n", R->dirname); fprintf(stderr,"%s %d\n","Size of a data entry:",(*par).dataentrylen); fprintf(stderr,"%s %d\n"," Expecting:",REALdataentrylen); } } PACKEDSIZE_DATAnofentries= sizeof(int); REALSIZE_DATAnofentries= SIZE_DATAnodeOf3 - 3 * (*par).dataentrylen; (*par).SIZE_DATAnofentries= REALSIZE_DATAnofentries; /* set */ if (creation) { if (PACKEDSIZE_DATAnofentries != (*par).SIZE_DATAnofentries) { fprintf(stderr,"\n%s\n"," ----- WARNING -----"); fprintf(stderr,"%s\n","Gap before data entries!"); } } else { if ((*par).SIZE_DATAnofentries != REALSIZE_DATAnofentries) { fprintf(stderr,"\n%s\n","FATAL ERROR:"); fprintf(stderr,"Incompatible R*-tree file '%s'\n", R->dirname); fprintf(stderr,"%s %d\n","Offset for entries:",(*par).SIZE_DATAnofentries); fprintf(stderr,"%s %d\n"," Expecting:",REALSIZE_DATAnofentries); } } if (! creation) { if ((*par).SIZEinfo != sizeof(typinfo)) { fprintf(stderr,"\n%s\n","FATAL ERROR:"); fprintf(stderr,"%s %d\n","Size of an info part:",(*par).SIZEinfo); fprintf(stderr,"%s %d\n"," Expecting:",sizeof(typinfo)); } } (*R).datanodelen= (*par).pagelen + (*par).dataentrylen; } /***********************************************************************/ void InitChainFlags(RSTREE R) { int i; for (i= 1; i <= chainlen; i++) { (*R).N[i]= NULL; (*R).NInst[i]= NULL; (*R).NDel[i]= NULL; (*R).E[i]= -1; (*R).EInst[i]= -1; (*R).P[i]= 0; (*R).Nmodified[i]= FALSE; (*R).ReInsert[i]= FALSE; } } /***********************************************************************/ void AllocBuffers(RSTREE R) { refparameters par; int i; par= &(*R).parameters._; for (i= 1; i < (*par).height; i++) { (*R).N[i]= (refnode)malloc((*R).dirnodelen); } (*R).N[(*par).height]= (refnode)malloc((*R).datanodelen); if ((*R).dirnodelen > (*R).datanodelen) { (*R).Nsibling= (refnode)malloc((*R).dirnodelen); } else { (*R).Nsibling= (refnode)malloc((*R).datanodelen); } (*R).helpdirnode= (refnode)malloc((*R).dirnodelen); (*R).helpdatanode= (refnode)malloc((*R).datanodelen); } /***********************************************************************/ void DeallocBuffers(RSTREE R) { refparameters par; int i; par= &(*R).parameters._; for (i= 1; i < (*par).height; i++) { free((*R).N[i]); (*R).N[i]= NULL; } free((*R).N[(*par).height]); (*R).N[(*par).height]= NULL; free((*R).Nsibling); free((*R).helpdirnode); free((*R).helpdatanode); } /***********************************************************************/ void InitCount(RSTREE R) { refcount c; c= &(*R).count; (*c).countflag= FALSE; (*c).dirvisitcount= 0; (*c).datavisitcount= 0; (*c).dirreadcount= 0; (*c).datareadcount= 0; (*c).dirmodifycount= 0; (*c).datamodifycount= 0; (*c).dirwritecount= 0; (*c).datawritecount= 0; } /***********************************************************************/ gerris-snapshot-131206/modules/RStarTree/RStarTree.c0000644000175100017510000005261212250371171017232 00000000000000/* ----- RStarTree.c ----- */ #include #include "RStarTree.h" #include "RSTInterUtil.h" #include "RSTInOut.h" #include "RSTInstDel.h" #include "RSTQuery.h" #include "RSTJoin.h" /* constants */ /* types */ /* declarations */ static void BasicCheck(void); /*** --- Begin --- unused *** static boolean InternEqual(RSTREE rst, typrect RSTrect, typrect qrect1, typrect qrect2); static boolean InternEncloses(RSTREE rst, typrect RSTrect, typrect qrect1, typrect qrect2); *** --- End --- unused ***/ /************************************************************************/ void NoRSTree(RSTREE *r) { *r= NULL; } /************************************************************************/ boolean CreateRST(const char *name, int pagelen, boolean unique) { RSTREE R; refparameters par; BasicCheck(); R= (RSTREE)malloc(sizeof(rstree)); (*R).readonly = FALSE; strcpy((*R).dirname,name); (*R).RSTDone= TRUE; CreateRSFiles(R); if (! (*R).RSTDone) { free(R); R= NULL; return FALSE; } SetBase(R,pagelen,unique); if (! (*R).RSTDone) { free(R); R= NULL; return FALSE; } (*R).dirPD.bl= SIZEfixblock; par= &(*R).parameters._; WritePage(R,(*R).dirPD,paramblocknumb,par); WritePage(R,(*R).dirPD,firstPDblocknumb,&(*R).dirpagedir); (*R).dataPD.bl= SIZEfixblock; WritePage(R,(*R).dataPD,paramblocknumb,par); /* -- unused -- */ WritePage(R,(*R).dataPD,firstPDblocknumb,&(*R).datapagedir); (*R).data.bl= (*par).pagelen; (*R).N[1]= (refnode)malloc((*R).datanodelen); (*(*R).N[1]).DATA.nofentries= 0; PutNode(R,(*R).N[1],rootblocknumb,1); free((*R).N[1]); if (! (*R).RSTDone) { free(R); R= NULL; return FALSE; } CloseRSFiles(R); if (! (*R).RSTDone) { free(R); R= NULL; return FALSE; } free(R); R= NULL; return TRUE; } /************************************************************************/ boolean RemoveRST(const char *name) { RSTName SufName; boolean success= TRUE; if (unlink(name) != 0) { success= FALSE; } strcpy(SufName,name); strcat(SufName,datasuffix); if (unlink(SufName) != 0) { success= FALSE; } strcpy(SufName,name); strcat(SufName,dirPDsuffix); if (unlink(SufName) != 0) { success= FALSE; } strcpy(SufName,name); strcat(SufName,dataPDsuffix); if (unlink(SufName) != 0) { success= FALSE; } return success; } /************************************************************************/ boolean OpenRST(RSTREE *r, const char *name, const char *mode) { RSTREE R; refparameters par; if (*r != NULL) { return FALSE; } *r= (RSTREE)malloc(sizeof(rstree)); R= *r; strcpy((*R).dirname,name); (*R).RSTDone= TRUE; (*R).readonly = strcmp (mode, "rw"); OpenRSFiles(R, (*R).readonly ? O_RDONLY : O_RDWR); if (! (*R).RSTDone) { free(R); *r= NULL; return FALSE; } InitChainFlags(R); (*R).dirPD.bl= SIZEfixblock; par= &(*R).parameters._; ReadPage(R,(*R).dirPD,paramblocknumb,par); ReadPage(R,(*R).dirPD,firstPDblocknumb,&(*R).dirpagedir); (*R).dataPD.bl= SIZEfixblock; ReadPage(R,(*R).dataPD,firstPDblocknumb,&(*R).datapagedir); if (! (*R).RSTDone) { FastCloseRSFiles(R); free(R); *r= NULL; return FALSE; } SetCheckDir(R,FALSE); SetCheckData(R,FALSE); AllocBuffers(R); (*R).dir.bl= (*par).pagelen; (*R).data.bl= (*par).pagelen; GetNode(R,(*R).N[1],rootblocknumb,1); (*R).P[1]= rootblocknumb; InitCount(R); if (! (*R).RSTDone) { FastCloseRSFiles(R); DeallocBuffers(R); free(R); *r= NULL; return FALSE; } return TRUE; } /************************************************************************/ boolean CloseRST(RSTREE *r) { RSTREE R; refparameters par; boolean success; int i; if (*r == NULL) { return FALSE; } R= *r; (*R).RSTDone= TRUE; if (!(*R).readonly) { par= &(*R).parameters._; WritePage(R,(*R).dirPD,paramblocknumb,par); WritePage(R,(*R).dirPD,firstPDblocknumb,&(*R).dirpagedir); WritePage(R,(*R).dataPD,paramblocknumb,par); /* -- unused -- */ WritePage(R,(*R).dataPD,firstPDblocknumb,&(*R).datapagedir); for (i= 1; i <= (*par).height; i++) { if ((*R).Nmodified[i]) { PutNode(R,(*R).N[i],(*R).P[i],i); } } } if (! (*R).RSTDone) { return (*R).RSTDone; } CloseRSFiles(R); if (! (*R).RSTDone) { return (*R).RSTDone; } DeallocBuffers(R); success= (*R).RSTDone; free(R); *r= NULL; return success; } /************************************************************************/ boolean SetUnique(RSTREE R, boolean mode) { if (R == NULL) { return FALSE; } (*R).parameters._.unique= mode; return TRUE; } /************************************************************************/ boolean InsertRecord(RSTREE R, typrect rectangle, typinfo *info, boolean *inserted) { refparameters par; typentry entry; refinfo infoadr; int d; if (R == NULL) { *inserted= FALSE; return FALSE; } (*R).RSTDone= TRUE; par= &(*R).parameters._; if ((*par).unique) { *inserted= ! FoundRect(R,1,rectangle,TRUE,&infoadr); } else { *inserted= TRUE; } if (*inserted) { for (d= 0; d <= (*par).maxdim; d++) { entry.DATA.rect[d]= rectangle[d]; } entry.DATA.info= *info; (*R).ReInsert[(*par).height]= TRUE; /* general switch for Forced ReInsert */ Insert(R,&entry,(*par).height); (*R).ReInsert[(*par).height]= FALSE; *inserted= (*R).RSTDone; if (*inserted) { (*par).recordcount++; } } return (*R).RSTDone; } /************************************************************************/ boolean DeleteRecord(RSTREE R, typrect rectangle, boolean *deleted) { refinfo infoadr; if (R == NULL) { *deleted= FALSE; return FALSE; } (*R).RSTDone= TRUE; *deleted= FoundRect(R,1,rectangle,FALSE,&infoadr); if (*deleted) { DeleteOneRec(R); *deleted= (*R).RSTDone; if (*deleted) { (*R).parameters._.recordcount--; } } return (*R).RSTDone; } /************************************************************************/ boolean ExistsRegion(RSTREE R, typrect rectangle1, typrect rectangle2, DirQueryProc DirQuery, DataQueryProc DataQuery, boolean *regionfound) { if (R == NULL) { *regionfound= FALSE; return FALSE; } /* int i; for (i= 2; i <= (*R).parameters._.height; i++) { if ((*R).Nmodified[i]) { PutNode(R,(*R).N[i],(*R).P[i],i); (*R).Nmodified[i]= FALSE; } (*R).P[i]= 0; } *//* to be inserted, if main memory path shall be initialized for test purpose */ (*R).RSTDone= TRUE; *regionfound= FALSE; XstsRgn(R,1,rectangle1,rectangle2,DirQuery,DataQuery,regionfound); return (*R).RSTDone; } /************************************************************************/ boolean RegionCount(RSTREE R, typrect rectangle1, typrect rectangle2, DirQueryProc DirQuery, DataQueryProc DataQuery, int *recordcount) { if (R == NULL) { *recordcount= 0; return FALSE; } /* int i; for (i= 2; i <= (*R).parameters._.height; i++) { if ((*R).Nmodified[i]) { PutNode(R,(*R).N[i],(*R).P[i],i); (*R).Nmodified[i]= FALSE; } (*R).P[i]= 0; } *//* to be inserted, if main memory path shall be initialized for test purpose */ (*R).RSTDone= TRUE; *recordcount= 0; RgnCnt(R,1,rectangle1,rectangle2,DirQuery,DataQuery,recordcount); return (*R).RSTDone; } /************************************************************************/ boolean RegionQuery(RSTREE R, typrect rectangle1, typrect rectangle2, DirQueryProc DirQuery, DataQueryProc DataQuery, QueryManageProc ManageProc, void *buf) { boolean finish; if (R == NULL) { return FALSE; } /* int i; for (i= 2; i <= (*R).parameters._.height; i++) { if ((*R).Nmodified[i]) { PutNode(R,(*R).N[i],(*R).P[i],i); (*R).Nmodified[i]= FALSE; } (*R).P[i]= 0; } *//* to be inserted, if main memory path shall be initialized for test purpose */ (*R).RSTDone= TRUE; finish= FALSE; RgnQuery(R,1,rectangle1,rectangle2,DirQuery,DataQuery, ManageProc,buf,&finish); return (*R).RSTDone; } /************************************************************************/ boolean RegionQueryInfo(RSTREE R, Check includes, Check intersects, void * data, typrect rect, typdirinfo * info) { if (R == NULL) { return FALSE; } /* int i; for (i= 2; i <= (*R).parameters._.height; i++) { if ((*R).Nmodified[i]) { PutNode(R,(*R).N[i],(*R).P[i],i); (*R).Nmodified[i]= FALSE; } (*R).P[i]= 0; } *//* to be inserted, if main memory path shall be initialized for test purpose */ (*R).RSTDone= TRUE; RgnQueryInfo(R,1,includes,intersects,data,rect,info); return (*R).RSTDone; } /************************************************************************/ boolean AllQuery(RSTREE R, QueryManageProc ManageProc, void *buf) { boolean finish; if (R == NULL) { return FALSE; } /* int i; for (i= 2; i <= (*R).parameters._.height; i++) { if ((*R).Nmodified[i]) { PutNode(R,(*R).N[i],(*R).P[i],i); (*R).Nmodified[i]= FALSE; } (*R).P[i]= 0; } *//* to be inserted, if main memory path shall be initialized for test purpose */ (*R).RSTDone= TRUE; finish= FALSE; All(R,1,ManageProc,buf,&finish); return (*R).RSTDone; } /************************************************************************/ boolean Update(RSTREE R) { typdirinfo info; if (R == NULL) { return FALSE; } /* int i; for (i= 2; i <= (*R).parameters._.height; i++) { if ((*R).Nmodified[i]) { PutNode(R,(*R).N[i],(*R).P[i],i); (*R).Nmodified[i]= FALSE; } (*R).P[i]= 0; } *//* to be inserted, if main memory path shall be initialized for test purpose */ typrect rect; rect[0].l = -0.5; rect[0].h = 0.5; rect[1].l = -0.5; rect[1].h = 0.5; (*R).RSTDone= TRUE; UpdateAll(R,1,rect,&info); return (*R).RSTDone; } /************************************************************************/ boolean JoinCountNv(RSTREE R1, RSTREE R2, typrect R1rectangle1, typrect R1rectangle2, typrect R2rectangle1, typrect R2rectangle2, DirQueryProc Dir1Query, DataQueryProc Data1Query, DirQueryProc Dir2Query, DataQueryProc Data2Query, DirQueryProc DirJoin, DataQueryProc DataJoin, int *paircount) { int mark; boolean twiceopen, success; int i; if (R1 == NULL || R2 == NULL) { *paircount= 0; return FALSE; } twiceopen= R1 == R2; if (twiceopen) { for (i= 1; i <= (*R1).parameters._.height; i++) { if ((*R1).Nmodified[i]) { PutNode(R1,(*R1).N[i],(*R1).P[i],i); (*R1).Nmodified[i]= FALSE; } } /* syncronize R1 */ R2= NULL; success= OpenRST(&R2,(*R1).dirname,"rw"); /* NEW(R2) */ if (! success) { fprintf(stderr,"%s\n","FATAL INTERNAL ERROR"); fprintf(stderr,"%s\n","JoinCountNv 1"); abort(); } } /* for (i= 2; i <= (*R1).parameters._.height; i++) { if ((*R1).Nmodified[i]) { PutNode(R1,(*R1).N[i],(*R1).P[i],i); (*R1).Nmodified[i]= FALSE; } (*R1).P[i]= 0; } for (i= 2; i <= (*R2).parameters._.height; i++) { if ((*R2).Nmodified[i]) { PutNode(R2,(*R2).N[i],(*R2).P[i],i); (*R2).Nmodified[i]= FALSE; } (*R2).P[i]= 0; } *//* to be inserted, if main memory path shall be initialized for test purpose */ if (! ((*R1).RSTDone && (*R2).RSTDone) ) { *paircount= 0; return FALSE; } *paircount= 0; mark= 0; JnCntNv(R1,R2, 1, R1rectangle1,R1rectangle2,R2rectangle1,R2rectangle2, Dir1Query,Data1Query,Dir2Query,Data2Query,DirJoin,DataJoin, paircount, &mark); success= (*R1).RSTDone && (*R2).RSTDone; if (twiceopen) { success= success && CloseRST(&R2); } return success; } /************************************************************************/ boolean JoinNv(RSTREE R1, RSTREE R2, typrect R1rectangle1, typrect R1rectangle2, typrect R2rectangle1, typrect R2rectangle2, DirQueryProc Dir1Query, DataQueryProc Data1Query, DirQueryProc Dir2Query, DataQueryProc Data2Query, DirQueryProc DirJoin, DataQueryProc DataJoin, JoinManageProc Manage, void *buf1, void *buf2) { boolean twiceopen, success; boolean finish; int i; if (R1 == NULL || R2 == NULL) { return FALSE; } twiceopen= R1 == R2; if (twiceopen) { for (i= 1; i <= (*R1).parameters._.height; i++) { if ((*R1).Nmodified[i]) { PutNode(R1,(*R1).N[i],(*R1).P[i],i); (*R1).Nmodified[i]= FALSE; } } /* syncronize R1 */ R2= NULL; success= OpenRST(&R2,(*R1).dirname,"rw"); /* NEW(R2) */ if (! success) { fprintf(stderr,"%s\n","FATAL INTERNAL ERROR"); fprintf(stderr,"%s\n","JoinCountNv 1"); abort(); } } /* for (i= 2; i <= (*R1).parameters._.height; i++) { if ((*R1).Nmodified[i]) { PutNode(R1,(*R1).N[i],(*R1).P[i],i); (*R1).Nmodified[i]= FALSE; } (*R1).P[i]= 0; } for (i= 2; i <= (*R2).parameters._.height; i++) { if ((*R2).Nmodified[i]) { PutNode(R2,(*R2).N[i],(*R2).P[i],i); (*R2).Nmodified[i]= FALSE; } (*R2).P[i]= 0; } *//* to be inserted, if main memory path shall be initialized for test purpose */ if (! ((*R1).RSTDone && (*R2).RSTDone) ) { return FALSE; } finish= FALSE; JnNv(R1,R2, 1, R1rectangle1,R1rectangle2,R2rectangle1,R2rectangle2, Dir1Query,Data1Query,Dir2Query,Data2Query,DirJoin,DataJoin, Manage,buf1,buf2,&finish); success= (*R1).RSTDone && (*R2).RSTDone; if (twiceopen) { success= success && CloseRST(&R2); } return success; } /************************************************************************/ boolean InquireRSTDesc(RSTREE R, char *name, int *numbofdim, int *pagesize, int *sizedirentry, int *sizedataentry, int *sizeinfo, int *maxdirfanout, int *maxdatafanout, int *numbofdirpages, int *numbofdatapages, int pagesperlevel[], int *numbofrecords, int *height, boolean *unique) { refparameters par; int i; if (R == NULL) { return FALSE; } strcpy(name,(*R).dirname); par= &(*R).parameters._; *numbofdim= (*par).maxdim+1; *pagesize= (*par).pagelen; *sizedirentry= (*par).direntrylen; *sizedataentry= (*par).dataentrylen; *sizeinfo= (*par).SIZEinfo; *maxdirfanout= (*par).dirM; *maxdatafanout= (*par).dataM; *numbofdirpages= (*par).dirpagecount; *numbofdatapages= (*par).datapagecount; pagesperlevel[0]= 1; for (i= 1; i < (*par).height; i++) { pagesperlevel[i]= (*par).pagecountarr[i+1]; } *numbofrecords= (*par).recordcount; *height= (*par).height; *unique= (*par).unique; return TRUE; } /************************************************************************/ boolean CountsOn0(RSTREE R) { refcount c; if (R == NULL) { return FALSE; } c= &(*R).count; (*c).countflag= TRUE; (*c).dirvisitcount= 0; (*c).datavisitcount= 0; (*c).dirreadcount= 0; (*c).datareadcount= 0; (*c).dirmodifycount= 0; (*c).datamodifycount= 0; (*c).dirwritecount= 0; (*c).datawritecount= 0; return TRUE; } /************************************************************************/ boolean CountsOn(RSTREE R) { if (R == NULL) { return FALSE; } (*R).count.countflag= TRUE; return TRUE; } /************************************************************************/ boolean CountsOff(RSTREE R) { if (R == NULL) { return FALSE; } (*R).count.countflag= FALSE; return TRUE; } /************************************************************************/ boolean GetCountRead(RSTREE R, int *dirvis, int *datavis, int *dirread, int *dataread) { refcount c; if (R == NULL) { *dirvis= 0; *datavis= 0; *dirread= 0; *dataread= 0; return FALSE; } c= &(*R).count; *dirvis= (*c).dirvisitcount; *datavis= (*c).datavisitcount; *dirread= (*c).dirreadcount; *dataread= (*c).datareadcount; return TRUE; } /************************************************************************/ boolean GetCountWrite(RSTREE R, int *dirmod, int *datamod, int *dirwrite, int *datawrite) { refcount c; if (R == NULL) { *dirmod= 0; *datamod= 0; *dirwrite= 0; *datawrite= 0; return FALSE; } c= &(*R).count; *dirmod= (*c).dirmodifycount; *datamod= (*c).datamodifycount; *dirwrite= (*c).dirwritecount; *datawrite= (*c).datawritecount; return TRUE; } /************************************************************************/ boolean GetMemory(RSTREE R, int *dirpages, int *datapages) { refparameters par; if (R == NULL) { *dirpages= 0; *datapages= 0; return FALSE; } par= &(*R).parameters._; *dirpages= (*par).dirpagecount; *datapages= (*par).datapagecount; return TRUE; } /************************************************************************/ boolean GetHeight(RSTREE R, int *height) { if (R == NULL) { *height= 0; return FALSE; } *height= (*R).parameters._.height; return TRUE; } /************************************************************************/ static void BasicCheck() { if (sizeof(byte) != 1) { fprintf(stderr,"%s\n","FATAL ERROR:"); fprintf(stderr,"%s\n","BasicCheck 1"); fprintf(stderr,"%s\n","sizeof(byte) != 1"); fprintf(stderr,"%s %ld\n","sizeof(byte):",sizeof(byte)); abort(); /* concerning application of type ByteArray */ } if (sizeof(int) < 4) { fprintf(stderr,"%s\n","BasicCheck 2"); fprintf(stderr,"%s\n","sizeof(int) < 4"); fprintf(stderr,"%s %ld\n","sizeof(int):",sizeof(int)); fprintf(stderr,"%s\n","WARNING: bigger int range assumed."); } if (sizeof(typinfo) < sizeof(int)) { fprintf(stderr,"%s\n","FATAL ERROR:"); fprintf(stderr,"%s\n","BasicCheck 3"); fprintf(stderr,"%s\n","sizeof(typinfo) < sizeof(int)"); fprintf(stderr,"%s %ld\n","sizeof(typinfo):",sizeof(typinfo)); fprintf(stderr,"%s %ld\n"," sizeof(int):",sizeof(int)); abort(); } if (sizeof(typpagedir) > sizeof(typfixblock)) { fprintf(stderr,"%s\n","FATAL ERROR:"); fprintf(stderr,"%s\n","BasicCheck 4"); fprintf(stderr,"%s\n","sizeof(typpagedir) > sizeof(typfixblock)"); fprintf(stderr,"%s %ld\n"," sizeof(typpagedir):",sizeof(typpagedir)); fprintf(stderr,"%s %ld\n","sizeof(typfixblock):",sizeof(typfixblock)); abort(); } if (sizeof(typparameters) > sizeof(typfixblock)) { fprintf(stderr,"%s\n","FATAL ERROR:"); fprintf(stderr,"%s\n","BasicCheck 5"); fprintf(stderr,"%s\n","sizeof(typparameters) > sizeof(typfixblock)"); fprintf(stderr,"%s %ld\n","sizeof(typparameters):",sizeof(typparameters)); fprintf(stderr,"%s %ld\n"," sizeof(typfixblock):",sizeof(typfixblock)); abort(); } } /************************************************************************/ /*** --- Begin --- unused *** static boolean InternEqual(RSTREE R, typrect RSTrect, typrect queryrect, typrect unused) { boolean eql; int d; d= -1; do { d++; eql= RSTrect[d].l == queryrect[d].l && RSTrect[d].h == queryrect[d].h; } while (eql && d != (*R).parameters._.maxdim); return eql; } static boolean InternEncloses(RSTREE R, typrect RSTrect, typrect queryrect, typrect unused) { int maxdim; boolean encl; int d; maxdim= (*R).parameters._.maxdim; d= -1; do { d++; encl= RSTrect[d].l <= queryrect[d].l && RSTrect[d].h >= queryrect[d].h; } while (encl && d != maxdim); return encl; } *** --- End --- unused ***/ /***********************************************************************/ boolean Find(RSTREE R, typrect rectangle, boolean *found, void *buf, int nbytes) { refinfo infoadr; if (R == NULL) { *found= FALSE; return FALSE; } *found= FoundRect(R,1,rectangle,FALSE,&infoadr); if (*found) { memcpy(buf,infoadr,nbytes); } return (*R).RSTDone; } /************************************************************************/ gerris-snapshot-131206/modules/RStarTree/RSTInstDel.h0000644000175100017510000000035712250371171017316 00000000000000/* ----- RSTInstDel.h ----- */ #ifndef __RSTInstDel_h #define __RSTInstDel_h #include "RStarTree.h" /* declarations */ void Insert(RSTREE R, refentry newentry, int depth); void DeleteOneRec(RSTREE R); #endif /* !__RSTInstDel_h */ gerris-snapshot-131206/modules/RStarTree/RSTUtil.c0000644000175100017510000004470612250371171016672 00000000000000/* ----- RSTUtil.c ----- */ #include "RStarTree.h" #include "RSTUtil.h" /* declarations */ static void ExChange(int *x, int *y); static void CSWorkAround(RSTREE R, typrect newrect, refDIRnode node, int index, double space, double newspace); /***********************************************************************/ void FalseArray(int *ptr, int wordsqty) { int i; i= 1; while (i <= wordsqty) { *ptr= FALSE; ptr++; i++; } } /***********************************************************************/ void CopyRect(RSTREE R, typrect from, typrect to) { int d; for (d= 0; d <= (*R).parameters._.maxdim; d++) { to[d]= from[d]; } } /***********************************************************************/ void EvalCenter(RSTREE R, typrect rectangle, typpoint center) { int i; for (i= 0; i <= (*R).parameters._.maxdim; i++) { center[i]= (rectangle[i].l + rectangle[i].h) / 2.0; } } /***********************************************************************/ double RSTDistance(RSTREE R, typpoint point1, typpoint point2) { double sum, factor; int i; sum= 0.0; for (i= 0; i <= (*R).parameters._.maxdim; i++) { factor= point1[i] - point2[i]; sum= sum+factor*factor; } return sum; /* relativ distance (sqrt avoided) */ } /***********************************************************************/ void EvalDirEnclRect(RSTREE R, typDIRnode *node, typrect rectangle) { int maxdim; refinterval re; int i, j; maxdim= (*R).parameters._.maxdim; CopyRect(R,(*node).entries[0].rect,rectangle); for (i= 0; i < (*node).nofentries; i++) { for (j= 0; j <= maxdim; j++) { re= &(*node).entries[i].rect[j]; if (rectangle[j].l > (*re).l) { rectangle[j].l= (*re).l; } if (rectangle[j].h < (*re).h) { rectangle[j].h= (*re).h; } } } } /***********************************************************************/ void EvalDataEnclRect(RSTREE R, typDATAnode *node, typrect rectangle) { int maxdim; refinterval re; int i, j; maxdim= (*R).parameters._.maxdim; CopyRect(R,(*node).entries[0].rect,rectangle); for (i= 0; i < (*node).nofentries; i++) { for (j= 0; j <= maxdim; j++) { re= &(*node).entries[i].rect[j]; if (rectangle[j].l > (*re).l) { rectangle[j].l= (*re).l; } if (rectangle[j].h < (*re).h) { rectangle[j].h= (*re).h; } } } } /***********************************************************************/ boolean Overlaps(RSTREE R, typrect rect1, typrect rect2) { boolean ovlp; int maxdim; int d; maxdim= (*R).parameters._.maxdim; d= -1; do { d++; ovlp= rect1[d].l <= rect2[d].h && rect1[d].h >= rect2[d].l; } while (ovlp && d != maxdim); return ovlp; } /***********************************************************************/ void GetOverlap(RSTREE R, typrect r1, typrect r2, double *spc) { double low, high; int i; *spc= 1.0; for (i= 0; i <= (*R).parameters._.maxdim; i++) { if (r1[i].l < r2[i].l) { low= r2[i].l; } else { low= r1[i].l; } if (r1[i].h < r2[i].h) { high= r1[i].h; } else { high= r2[i].h; } *spc= *spc * (high-low); } } /***********************************************************************/ boolean RSTEqual(RSTREE R, typrect rect1, typrect rect2) { boolean eql; int d; d= -1; do { d++; eql= rect1[d].l == rect2[d].l && rect1[d].h == rect2[d].h; } while (eql && d != (*R).parameters._.maxdim); return eql; } /***********************************************************************/ boolean Covers(RSTREE R, typrect crect, typrect rect) { boolean cov; int maxdim; int d; maxdim= (*R).parameters._.maxdim; d= -1; do { d++; cov= crect[d].l <= rect[d].l && crect[d].h >= rect[d].h; } while (cov && d != (*R).parameters._.maxdim); return cov; } /***********************************************************************/ void QuickSortValArr(int begin, int end, ValueArray value, IndexArray I) /* Sorts I by value[I[i]]. */ { double midelem; int i, j; i= begin; j= end; midelem= value[I[(i+j) / 2]]; do { while (value[I[i]] < midelem) { i++; } while (value[I[j]]>midelem) { j--; } if (i < j) { ExChange(&I[i],&I[j]); i++; j--; } else if (i == j) { i++; j--; } } while (i <= j); if (begin < j) { if (j - begin > 1) { QuickSortValArr(begin,j,value,I); } else { if (value[I[begin]] > value[I[j]]) { ExChange(&I[begin],&I[j]); } } } if (i < end) { if (end - i > 1) { QuickSortValArr(i,end,value,I); } else { if (value[I[i]] > value[I[end]]) { ExChange(&I[i],&I[end]); } } } } /***********************************************************************/ void QuickSortDirEnt(int begin, int end, int dim, Side side, typDIRentries Ntosort, IndexArray I) /* Sorts I primarily by Ntosort[I[i]].rect[dim].side, secondarily by Ntosort[I[i]].rect[dim]."otherside". */ { refinterval re; typatomkey midlow, midhigh; typinterval int1, int2; int i, j; i= begin; j= end; if (side == low) { re = &Ntosort[I[(i+j) / 2]].rect[dim]; midlow= (*re).l; midhigh= (*re).h; do { while ( Ntosort[I[i]].rect[dim].l < midlow || ( Ntosort[I[i]].rect[dim].l == midlow && Ntosort[I[i]].rect[dim].h < midhigh ) ) { i++; } while ( Ntosort[I[j]].rect[dim].l > midlow || ( Ntosort[I[j]].rect[dim].l == midlow && Ntosort[I[j]].rect[dim].h > midhigh ) ) { j--; } if (i < j) { ExChange(&I[i],&I[j]); i++; j--; } else if (i == j) { i++; j--; } } while (i <= j); if (begin < j) { if (j - begin > 1) { QuickSortDirEnt(begin,j,dim,low,Ntosort,I); } else { int1= Ntosort[I[begin]].rect[dim]; int2= Ntosort[I[j]].rect[dim]; if ( int1.l > int2.l || ( int1.l == int2.l && int1.h > int2.h ) ) { ExChange(&I[begin],&I[j]); } } } if (i < end) { if (end - i > 1) { QuickSortDirEnt(i,end,dim,low,Ntosort,I); } else { int1= Ntosort[I[i]].rect[dim]; int2= Ntosort[I[end]].rect[dim]; if ( int1.l > int2.l || ( int1.l == int2.l && int1.h > int2.h ) ) { ExChange(&I[i],&I[end]); } } } } else { re = &Ntosort[I[(i+j) / 2]].rect[dim]; midhigh= (*re).h; midlow= (*re).l; do { while ( Ntosort[I[i]].rect[dim].h < midhigh || ( Ntosort[I[i]].rect[dim].h == midhigh && Ntosort[I[i]].rect[dim].l < midlow ) ) { i++; }; while ( Ntosort[I[j]].rect[dim].h > midhigh || ( Ntosort[I[j]].rect[dim].h == midhigh && Ntosort[I[j]].rect[dim].l > midlow ) ) { j--; }; if (i < j) { ExChange(&I[i],&I[j]); i++; j--; } else if (i == j) { i++; j--; } } while (i <= j); if (begin < j) { if (j - begin > 1) { QuickSortDirEnt(begin,j,dim,high,Ntosort,I); } else { int1= Ntosort[I[begin]].rect[dim]; int2= Ntosort[I[j]].rect[dim]; if ( int1.h > int2.h || ( int1.h == int2.h && int1.l > int2.l ) ) { ExChange(&I[begin],&I[j]); } } } if (i < end) { if (end - i > 1) { QuickSortDirEnt(i,end,dim,high,Ntosort,I); } else { int1= Ntosort[I[i]].rect[dim]; int2= Ntosort[I[end]].rect[dim]; if ( int1.h > int2.h || ( int1.h == int2.h && int1.l > int2.l ) ) { ExChange(&I[i],&I[end]); } } } } } /***********************************************************************/ void QuickSortDataEnt(int begin, int end, int dim, Side side, typDATAentries Ntosort, IndexArray I) /* Sorts I primarily by Ntosort[I[i]].rect[dim].side, secondarily by Ntosort[I[i]].rect[dim]."otherside". */ { refinterval re; typatomkey midlow, midhigh; typinterval int1, int2; int i, j; i= begin; j= end; if (side == low) { re = &Ntosort[I[(i+j) / 2]].rect[dim]; midlow= (*re).l; midhigh= (*re).h; do { while ( Ntosort[I[i]].rect[dim].l < midlow || ( Ntosort[I[i]].rect[dim].l == midlow && Ntosort[I[i]].rect[dim].h < midhigh ) ) { i++; } while ( Ntosort[I[j]].rect[dim].l > midlow || ( Ntosort[I[j]].rect[dim].l == midlow && Ntosort[I[j]].rect[dim].h > midhigh ) ) { j--; } if (i < j) { ExChange(&I[i],&I[j]); i++; j--; } else if (i == j) { i++; j--; } } while (i <= j); if (begin < j) { if (j - begin > 1) { QuickSortDataEnt(begin,j,dim,low,Ntosort,I); } else { int1= Ntosort[I[begin]].rect[dim]; int2= Ntosort[I[j]].rect[dim]; if ( int1.l > int2.l || ( int1.l == int2.l && int1.h > int2.h ) ) { ExChange(&I[begin],&I[j]); } } } if (i < end) { if (end - i > 1) { QuickSortDataEnt(i,end,dim,low,Ntosort,I); } else { int1= Ntosort[I[i]].rect[dim]; int2= Ntosort[I[end]].rect[dim]; if ( int1.l > int2.l || ( int1.l == int2.l && int1.h > int2.h ) ) { ExChange(&I[i],&I[end]); } } } } else { re = &Ntosort[I[(i+j) / 2]].rect[dim]; midhigh= (*re).h; midlow= (*re).l; do { while ( Ntosort[I[i]].rect[dim].h < midhigh || ( Ntosort[I[i]].rect[dim].h == midhigh && Ntosort[I[i]].rect[dim].l < midlow ) ) { i++; }; while ( Ntosort[I[j]].rect[dim].h > midhigh || ( Ntosort[I[j]].rect[dim].h == midhigh && Ntosort[I[j]].rect[dim].l > midlow ) ) { j--; }; if (i < j) { ExChange(&I[i],&I[j]); i++; j--; } else if (i == j) { i++; j--; } } while (i <= j); if (begin < j) { if (j - begin > 1) { QuickSortDataEnt(begin,j,dim,high,Ntosort,I); } else { int1= Ntosort[I[begin]].rect[dim]; int2= Ntosort[I[j]].rect[dim]; if ( int1.h > int2.h || ( int1.h == int2.h && int1.l > int2.l ) ) { ExChange(&I[begin],&I[j]); } } } if (i < end) { if (end - i > 1) { QuickSortDataEnt(i,end,dim,high,Ntosort,I); } else { int1= Ntosort[I[i]].rect[dim]; int2= Ntosort[I[end]].rect[dim]; if ( int1.h > int2.h || ( int1.h == int2.h && int1.l > int2.l ) ) { ExChange(&I[i],&I[end]); } } } } } /***********************************************************************/ static void ExChange(int *x, int *y) { int z; z= *x; *x= *y; *y= z; } /***********************************************************************/ void ChooseSubtree(RSTREE R, typrect newrect, int depth, typDIRnode *node, int *found) { int maxexam, inv; typatomkey low, high; double space, newspace, enlarge, validspace, ovlpspc, overlap, leastovlp; boolean didfit, first, ok; ValueArray enlarr; IndexArray I; typrect enlargedrect; int maxdim; refparameters par; refinterval re; refDIRent e; int i, j, k; didfit= FALSE; ok= TRUE; maxdim= (*R).parameters._.maxdim; for (i= 0; i < (*node).nofentries; i++) { space= 1.0; newspace= 1.0; for (j= 0; j <= maxdim; j++) { re= &(*node).entries[i].rect[j]; low= (*re).l; high= (*re).h; space= space * (high - low); re= &newrect[j]; if (low > (*re).l) { low= (*re).l; } if (high < (*re).h) { high= (*re).h; } newspace= newspace * (high - low); } if (space == 0.0) { CSWorkAround(R,newrect,node,i,space,newspace); ok= FALSE; } /* trap degenerated rectangles */ if (didfit) { if (newspace == space) { /* it fits */ if (space < validspace) { validspace= space; *found= i; } } } else { enlarge= newspace - space; if (enlarge == 0.0) { validspace= space; *found= i; didfit= TRUE; } else { enlarr[i]= enlarge; } } } if (! didfit) { for (i= 0; i < (*node).nofentries; i++) { I[i]= i; } QuickSortValArr(0,(*node).nofentries - 1,enlarr,I); if (ok && depth == (*R).parameters._.height - 1) { /* Subtrees are leafs */ par = &(*R).parameters._; if ((*node).nofentries < (*par).nbrsexam) { maxexam= (*node).nofentries; } else { maxexam= (*par).nbrsexam; } /* maxexam= (*node).nofentries; *//* <- all *) */ first= TRUE; for (i= 0; i < maxexam; i++) { for (j= 0; j <= maxdim; j++) { re= &(*node).entries[I[i]].rect[j]; low= (*re).l; high= (*re).h; re= &enlargedrect[j]; (*re).l= low; (*re).h= high; if (low > newrect[j].l) { (*re).l= newrect[j].l; } if (high < newrect[j].h) { (*re).h= newrect[j].h; } } /* Create enlargedrect */ overlap= 0.0; for (k= 0; k < (*node).nofentries; k++) { if (k != i) { e= &(*node).entries[I[k]]; if (Overlaps(R,enlargedrect,(*e).rect)) { GetOverlap(R,enlargedrect,(*e).rect,&ovlpspc); overlap= overlap+ovlpspc; if (Overlaps(R,(*node).entries[I[i]].rect,(*e).rect)) { GetOverlap(R,(*node).entries[I[i]].rect,(*e).rect,&ovlpspc); overlap= overlap-ovlpspc; } } } } if (first) { leastovlp= overlap; *found= I[0]; inv= 1; first= FALSE; } else { if (overlap < leastovlp) { leastovlp= overlap; *found= I[i]; inv= i; } } } } else { /* Subtrees are not leafs */ *found= I[0]; } } } /***********************************************************************/ static void CSWorkAround(RSTREE R, typrect newrect, typDIRnode *node, int index, double space, double newspace) { #define epsilon (1.0e-100) typatomkey low, high; double distance; refinterval re; int j; space= 1.0; newspace= 1.0; for (j= 0; j <= (*R).parameters._.maxdim; j++) { re= &(*node).entries[index].rect[j]; low= (*re).l; high= (*re).h; distance= high - low; if (distance == 0.0) { distance= epsilon; } space= space * distance; re= &newrect[j]; if (low > (*re).l) { low= (*re).l; } if (high < (*re).h) { high= (*re).h; } distance= high - low; if (distance == 0.0) { distance= epsilon; } newspace= newspace * distance; } #undef epsilon } /***********************************************************************/ void AdjustChain(RSTREE R, int depth, typrect newrect) { refinterval re; refcount c; int maxdim; boolean adjusting; int j; c= &(*R).count; maxdim= (*R).parameters._.maxdim; adjusting= TRUE; if (depth == (*R).parameters._.height) { adjusting= FALSE; for (j= 0; j <= maxdim; j++) { re = &(*(*R).N[depth]).DATA.entries[(*R).E[depth]].rect[j]; if ((*re).l > newrect[j].l) { (*re).l= newrect[j].l; adjusting= TRUE; } if ((*re).h < newrect[j].h) { (*re).h= newrect[j].h; adjusting= TRUE; } } if (adjusting) { (*R).Nmodified[depth]= TRUE; if ((*c).countflag) { (*c).dirmodifycount++; } } depth--; } while (depth != 0 && adjusting) { adjusting= FALSE; for (j= 0; j <= maxdim; j++) { re = &(*(*R).N[depth]).DIR.entries[(*R).E[depth]].rect[j]; if ((*re).l > newrect[j].l) { (*re).l= newrect[j].l; adjusting= TRUE; } if ((*re).h < newrect[j].h) { (*re).h= newrect[j].h; adjusting= TRUE; } } if (adjusting) { (*R).Nmodified[depth]= TRUE; if ((*c).countflag) { (*c).dirmodifycount++; } } depth--; } } /***********************************************************************/ void AdjustChainAfterDeletion(RSTREE R, int depth) { refDIRent e; refcount c; boolean changed; typrect helprect; c= &(*R).count; changed= TRUE; if (depth == (*R).parameters._.height && depth != 1) { EvalDataEnclRect(R,&(*(*R).N[depth]).DATA,helprect); depth--; e = &(*(*R).N[depth]).DIR.entries[(*R).E[depth]]; changed= ! RSTEqual(R,helprect,(*e).rect); if (changed) { CopyRect(R,helprect,(*e).rect); (*R).Nmodified[depth]= TRUE; if ((*c).countflag) { (*c).dirmodifycount++; } } } while (depth != 1 && changed) { EvalDirEnclRect(R,&(*(*R).N[depth]).DIR,helprect); depth--; e = &(*(*R).N[depth]).DIR.entries[(*R).E[depth]]; changed= ! RSTEqual(R,helprect,(*e).rect); if (changed) { CopyRect(R,helprect,(*e).rect); (*R).Nmodified[depth]= TRUE; if ((*c).countflag) { (*c).dirmodifycount++; } } } } /***********************************************************************/ gerris-snapshot-131206/modules/lis.c0000644000175100017510000001277512250371171014301 00000000000000/* Gerris - The GNU Flow Solver (-*-C-*-) * Copyright (C) 2010 CNRS * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include "variable.h" #include "poisson.h" static GString * options = NULL; static void solve_poisson_problem_using_lis (GfsDomain * domain, GfsLinearProblem * lp, GfsMultilevelParams * par) { /* fixme: doesn't work in parallel yet */ g_assert (lp->istart == 0); LIS_MATRIX A; lis_matrix_create (LIS_COMM_WORLD, &A); lis_matrix_set_size (A, 0, lp->rhs->len); int i; for (i = 0; i < lp->rhs->len; i++) { GfsStencil * stencil = g_ptr_array_index (lp->LP, i); int row = g_array_index (stencil->id, int, 0), j; for (j = 0; j < stencil->id->len; j++) lis_matrix_set_value (LIS_INS_VALUE, row, g_array_index (stencil->id, int, j), g_array_index (stencil->coeff, double, j), A); } lis_matrix_set_type (A, LIS_MATRIX_CRS); lis_matrix_assemble (A); LIS_VECTOR b, x; lis_vector_duplicate (A, &b); lis_vector_duplicate (A, &x); for (i = 0; i < lp->rhs->len; i++) { lis_vector_set_value (LIS_INS_VALUE, i, g_array_index (lp->rhs, double, i), b); lis_vector_set_value (LIS_INS_VALUE, i, g_array_index (lp->lhs, double, i), x); } LIS_SOLVER solver; lis_solver_create (&solver); gchar * opt = g_strdup_printf ("%s-maxiter %d -tol %g", options->str, par->nitermax, MIN (par->tolerance/par->residual.infty, 0.99)); lis_solver_set_option (opt, solver); g_free (opt); lis_solve (A, b, x, solver); int iter; lis_solver_get_iters (solver, &iter); par->niter = iter; lis_vector_get_values (x, 0, lp->lhs->len, (double *) lp->lhs->data); lis_solver_destroy (solver); lis_matrix_destroy (A); lis_vector_destroy (b); lis_vector_destroy (x); } typedef struct { GfsLinearProblem * lp; GfsVariable * lhs; } CopyParams; static void copy_poisson_solution (FttCell * cell, CopyParams * p) { GFS_VALUE (cell, p->lhs) = g_array_index (p->lp->lhs, gdouble, (int) GFS_VALUE (cell, p->lp->id) - p->lp->istart); } static void correct (FttCell * cell, gpointer * data) { GfsVariable * u = data[0]; GfsVariable * dp = data[1]; GFS_VALUE (cell, u) += GFS_VALUE (cell, dp); } static void lis_poisson_solve (GfsDomain * domain, GfsMultilevelParams * par, GfsVariable * lhs, GfsVariable * rhs, GfsVariable * res, GfsVariable * dia, gdouble dt) { /* calculates the initial residual and its norm */ gfs_residual (domain, par->dimension, FTT_TRAVERSE_LEAFS, -1, lhs, rhs, dia, res); par->residual_before = par->residual = gfs_domain_norm_residual (domain, FTT_TRAVERSE_LEAFS, -1, dt, res); if (par->nitermax > 0) { GfsVariable * dp = gfs_temporary_variable (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_reset, dp); GfsLinearProblem * lp = gfs_get_poisson_problem (domain, res, dp, dia, -1, lhs); solve_poisson_problem_using_lis (domain, lp, par); CopyParams p = { lp, dp }; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) copy_poisson_solution, &p); gfs_linear_problem_destroy (lp); /* correct on leaf cells */ gpointer data[2]; data[0] = lhs; data[1] = dp; gfs_traverse_and_bc (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) correct, data, lhs, lhs); gts_object_destroy (GTS_OBJECT (dp)); /* compute new residual on leaf cells */ gfs_residual (domain, par->dimension, FTT_TRAVERSE_LEAFS, -1, lhs, rhs, dia, res); par->residual = gfs_domain_norm_residual (domain, FTT_TRAVERSE_LEAFS, -1, dt, res); } } /* Initialize module */ void gfs_module_read (GtsFile * fp, GfsSimulation * sim); void gfs_module_write (FILE * fp); /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "lis"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { return NULL; } void gfs_module_read (GtsFile * fp, GfsSimulation * sim) { g_return_if_fail (fp != NULL); /* initialise lis */ int argc = 0; char ** argv = NULL; lis_initialize (&argc, &argv); /* initialise the poisson cycle hook */ sim->approx_projection_params.poisson_solve = lis_poisson_solve; sim->projection_params.poisson_solve = lis_poisson_solve; if (fp->type != GTS_STRING) options = g_string_new ("-i bicgstab"); else { options = g_string_new (""); while (fp->type == GTS_STRING) { g_string_append (options, fp->token->str); g_string_append_c (options, ' '); gts_file_next_token (fp); } } } void gfs_module_write (FILE * fp) { g_return_if_fail (fp != NULL); fprintf (fp, " %s", options->str); } gerris-snapshot-131206/modules/dagmg.f900000644000175100017510000021024312250371171014733 00000000000000! Sequential code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! The main driver subroutine dagmg below provides a sequential implementation ! of the method presented in [1], where the used algorithms are described ! in detail. ! See the accompanying userguide for more details on how to use the software, ! and the README file for copyright notice and installation instructions. ! ! [1] Y. Notay, An aggregation-based algebraic multigrid method, ! Report GANMN 08-02 ! !----------------------------------------------------------------------- MODULE dagmg_mem SAVE !--------------- ! Parameters for subroutine dagmg that may be tuned by expert users ! ! INTEGER ! ! maxlev is the maximal number of levels ! (should be large enough - much larger than needed is armless) ! real_len is the length of 1 REAL(kind(0.0d0)) in byte ! (used only to display information on memory usage) INTEGER, PARAMETER :: maxlev=40, real_len=8 ! nsmooth is the number of smoothing steps (pre + post); ! each cycle includes (nsmooth+1)/2 pre-smoothing step(s) ! and nsmooth/2 post-smoothing step(s) ! nstep is the maximum number of coarsening steps ! nstep<0 means that coarsening is stopped only according to ! the matrix size, see parameter maxcoarsesize ! nlvcyc is the number of coarse levels (from bottom) on which V-cycle ! formulation is enforced (Rmk: K-cycle always allowed at first ! coarse level) INTEGER , PARAMETER :: nsmooth=2, nstep=-1, nlvcyc=0 ! ! maxcoarsesize: when the size of the coarse grid matrix is less than or ! equal to maxcoarsesize, it is factorized exactly and ! coarsening is stopped. INTEGER , PARAMETER :: maxcoarsesize=400 ! ! REAL ! ! resi is the threshold t for the relative residual error in inner FCG & GCR ! iterations, see Algorithm 3.2 in [1] ! checkdd is the threshold for strongly diagonally dominant rows, ! see the first line of "Initialization" in Algorithm 2.1 in [1] ! trswc is the Strong/Weak coupling threshold beta in Algorithms 2.1 & 2.2 ! in [1] ! trspos is a threshold: if a row has a positive offidiagonal entry larger ! than trspos times the diagonal entry, the corresponding node is kept ! out of the aggregation ! scalcg is the scaling factor applied to the coarse grid matrices ! REAL (kind(0.0d0)) , PARAMETER :: resi=0.25 REAL (kind(0.0d0)) , PARAMETER :: checkdd=5.0, trswc=0.25, trspos=0.45, scalcg=1 !---------------- ! [1] Y. Notay, An aggregation-based algebraic multigrid method, ! Report GANMN 08-02 !--------------------------------------------- ! Internal variables (do not modify) ! TYPE InnerData REAL (kind(0.0d0)), DIMENSION(:), POINTER :: a INTEGER, DIMENSION(:), POINTER :: ja INTEGER, DIMENSION(:), POINTER :: ia REAL (kind(0.0d0)), DIMENSION(:), POINTER :: p INTEGER, DIMENSION(:), POINTER :: idiag INTEGER, DIMENSION(:), POINTER :: ind INTEGER, DIMENSION(:), POINTER :: inloc INTEGER, DIMENSION(:), POINTER :: ilstout INTEGER, DIMENSION(:), POINTER :: lstout INTEGER, DIMENSION(:), POINTER :: ilstin INTEGER, DIMENSION(:), POINTER :: lstin END TYPE InnerData ! TYPE (InnerData) :: dt(maxlev) INTEGER :: nn(maxlev),kstat(3,maxlev)=0,innermax(maxlev) INTEGER :: nlev,nwrkcum,iout,nrst REAL (kind(0.0d0)) :: memi=0.0,memax=0.0,memr=0.0,mritr,rlenilen LOGICAL :: spd,wfo,wff,allzero INTEGER, PARAMETER :: IRANK=-9999 END MODULE dagmg_mem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE dagmg(n,a,ja,ia,f,x,ijob,iprint,nrest,iter,tol) USE dagmg_mem IMPLICIT NONE INTEGER :: n,ia(n+1),ja(*),ijob,iprint,nrest,iter REAL (kind(0.0d0)) :: a(*),f(n),x(n) REAL (kind(0.0d0)) :: tol !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! Arguments ! ========= ! ! N (input) INTEGER. ! The dimension of the matrix. ! ! A (input/output) REAL (kind(0.0d0)). Numerical values of the matrix. ! IA (input/output) INTEGER. Pointers for every row. ! JA (input/output) INTEGER. Column indices. ! ! dagmg ASSUMES THAT ALL DIAGONAL ENTRIES ARE POSITIVE ! ! Detailed description of the matrix format ! ! On input, IA(I), I=1,...,N, refers to the physical start ! of row I. That is, the entries of row I are located ! in A(K), where K=IA(I),...,IA(I+1)-1. JA(K) carries the ! associated column indices. IA(N+1) must be defined in such ! a way that the above rule also works for I=N (that is, ! the last valid entry in arrays A,JA should correspond to ! index K=IA(N+1)-1). According what is written ! above, dagmg assumes that some of these JA(K) (for ! IA(I)<= K < IA(I+1) ) is equal to I with corresponding ! A(K) carrying the value of the diagonal element, ! which must be positive. ! ! A,IA,JA are "output" parameters because on exit the ! entries of each row may occur in a different order (The ! matrix is mathematically the same, but stored in ! different way). ! ! F (input/output) REAL (kind(0.0d0)). ! On input, the right hand side vector f. ! Overwritten on output. ! Significant only if IJOB==0, 2, 3, 10 or 12 ! ! X (input/output) REAL (kind(0.0d0)). ! On input and if IJOB==10 or IJOB==12, initial guess ! (for other values of IJOB, the default is used: the zero vector). ! On output, the computed solution. ! ! IJOB (input) INTEGER. Tells dagmg what has to be done. ! 0: performs setup + solve + memory release, no initial guess ! 10: performs setup + solve + memory release, initial guess in x(1:n) ! 1: performs setup only ! (preprocessing: prepares all parameters for subsequent solves) ! 2: solves only (based on previous setup), no initial guess ! 12: solves only (based on previous setup), initial guess in x(1:n) ! 3: the vector returned in x(1:n) is not the solution of the linear ! system, but the result of the action of the multigrid ! preconditioner on the right hand side in f(1:n) ! -1: erases the setup and releases internal memory ! !!! IJOB==2,3,12 require that one has previously called dagmg with IJOB==1 ! !!! It is mandatory to keep n, A, JA and IA unchanged between a call ! !!! to dagmg with IJOB==1 and all subsequent calls with IJOB== 2, 3 or 12 ! ! IPRINT (input) INTEGER. ! Indicates the unit number where information is to be printed ! (N.B.: 5 is converted to 6). If nonpositive, only error ! messages are printed on standard output. ! ! NREST (input) INTEGER. ! Restart parameter for GCR (an implementation of GMRES) ! Nonpositive values are converted to NREST=10 (default) ! !! If NREST==1, Flexible CG is used instead of GCR ! Should be used if and only if the matrix is ! symmetric and positive definite. ! !! Significant only if IJOB == 0, 2, 3, 10 or 12. ! If IJOB == 3, determines only the type of inner iterations ! (FCG if NREST == 1, GCR otherwise). ! ! ITER (input/output) INTEGER. ! On input, the maximum number of iterations. Should be positive. ! On output, actual number of iterations. ! If this number of iteration was insufficient to meet convergence ! criterion, ITER will be returned negative and equal to the ! opposite of the number of iterations performed. ! Significant only if IJOB== 0, 2, 10 or 12. ! ! TOL (input) REAL (kind(0.0d0)). ! The tolerance on residual norm. Iterations are stopped whenever ! || A*x-f || <= TOL* || f || ! Should be positive and less than 1.0 ! Significant only if IJOB== 0, 2, 10 or 12. ! !!!!! Remark !!!! Except insufficient number of iterations to achieve ! convergence (characterized by a negative value returned ! in ITER), all other detected errors are fatal and lead ! to a STOP statement. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! Local variables ! INTEGER, SAVE :: nza REAL (kind(0.0d0)), SAVE :: cputm=0.0d0,eltm=0.0d0,flop=0.0d0,memh LOGICAL, SAVE :: preprocessed=.FALSE.,solve=.FALSE. INTEGER :: i,init REAL (kind(0.0d0)) :: cputmp,eltmp,resid INTEGER :: listrank,ifirstlistrank ! wfo=.TRUE. iout=iprint IF (iprint <= 0) THEN iout=6 wfo=.FALSE. ELSE IF (iprint == 5) THEN iout=6 END IF ! wff=wfo.AND.(IRANK<=0) ! IF (MOD(ijob,10) >= 2 .AND. .NOT.preprocessed) THEN WRITE (iout,1001) IRANK,ijob STOP END IF ! IF (ijob < 0 .AND. solve) GOTO 450 IF (ijob < 0) GOTO 500 IF (MOD(ijob,10) >= 2) GOTO 300 IF (preprocessed) THEN CALL dagmg_relmem IF (.NOT.allzero) CALL dagmg_LAPACK(nn(nlev),a,ja,ia,f,-2,flop) preprocessed=.FALSE. solve=.FALSE. eltm=0.0d0 cputm=0.0d0 flop=0.0d0 kstat=0 END IF CALL dagmg_mestime(-1,0.0d0,0.0d0) ! ! Initial settings ! nza=ia(n+1)-ia(1) IF (HUGE(n) > 1.0e10) THEN rlenilen=dble(8)/dble(real_len) ELSE rlenilen=dble(4)/dble(real_len) END IF ! ! !----- PREPROCESSING ! nlev=0 IF (wfo) THEN WRITE(iout,900) IRANK END IF CALL dagmg_setup(1,n,a,ja,ia,listrank,ifirstlistrank) preprocessed=.TRUE. memh=memr+memi*rlenilen ! CALL dagmg_mestime(1,cputmp,eltmp) IF(wfo)THEN WRITE(iout,960) IRANK,memax/nza,real_len,& &memax*real_len/(2**20) IF(MOD(ijob,10) == 1) THEN WRITE(iout,961) IRANK,memh/nza,real_len,& &memh*real_len/(2**20) END IF !CPU_TIME: next line may be uncommented if implemented ! (see subroutine mestime) ! WRITE(iout,996) IRANK,cputmp WRITE(iout,997) IRANK,eltmp WRITE(iout,'()') END IF ! IF (MOD(ijob,10) == 1) RETURN ! !----- SOLUTION PROCESS ! 300 CONTINUE CALL dagmg_mestime(-2,0.0d0,0.0d0) resid=tol nrst=nrest init=MAX(IJOB/10,0) IF (nrst <= 0) nrst=10 ! Default restart paramater for GMRESR spd=.FALSE. ! nrst=1 => system assumed SPD, use FCG instead of GCR IF (nrst == 1) spd=.TRUE. ! ! DIRECT SOLVE IF ONLY ONE LEVEL IF (nlev == 1) THEN ! x(1:n)=f(1:n) CALL dagmg_LAPACK(n,a,ja,ia,x,2,flop) mritr=0 ! ! END OF DIRECT SOLVE ! !- SINGLE APPLICATION OF MG PRECONDITIONER ELSE IF (MOD(ijob,10) >= 3) THEN IF (wfo) THEN WRITE(iout,901) IRANK END IF CALL dagmg_applyprec(n,f,x,a,ja,ia,flop) CALL dagmg_mestime(2,cputmp,eltmp) cputm=cputm+cputmp eltm=eltm+eltmp solve=.TRUE. RETURN ! !- END OF MG PREC ! !- GCR SOLUTION ELSE IF (nrst > 1) THEN ! CALL dagmg_GCR(n,f,x,iter,resid,a,ja,ia,init,flop) ! !- END OF GCR SOLVE ! !- FLEXIBLE CG SOLUTION ELSE ! CALL dagmg_FlexCG(n,f,x,iter,resid,a,ja,ia,init,flop) ! !- END OF FCG SOLVE ! END IF ! CALL dagmg_mestime(2,cputm,eltm) solve=.FALSE. GOTO 455 450 CONTINUE IF (wfo) THEN WRITE(iout,'()') WRITE(iout,990) IRANK WRITE(iout,'()') END IF 455 CONTINUE IF (wfo) THEN IF (wff .AND. iter.NE.0) THEN DO i=2,nlev-1 WRITE(iout,955) i,kstat(3,i-1),kstat(3,i), & dble(kstat(3,i))/dble(kstat(3,i-1)),kstat(2,i) END DO END IF WRITE(iout,'()') WRITE(iout,954) IRANK,flop/dble(11*n+2*nza) WRITE(iout,962) IRANK,(memh+mritr)/nza,real_len, & (memh+mritr)*real_len/(2**20) !CPU_TIME: next line may be uncommented if implemented ! (see subroutine mestime) ! WRITE(iout,998) IRANK,cputm WRITE(iout,999) IRANK,eltm WRITE(iout,'()') END IF ! IF (MOD(ijob,10) > 0) RETURN ! !---- RELEASE MEMORY ! 500 CONTINUE CALL dagmg_relmem IF (.NOT.allzero) CALL dagmg_LAPACK(n,a,ja,ia,f,-2,flop) preprocessed=.FALSE. solve=.FALSE. eltm=0.0d0 cputm=0.0d0 flop=0.0d0 kstat=0 IF (wfo) THEN WRITE (iout,902) IRANK END IF ! CONTINUE ! RETURN 900 FORMAT(i3,'*ENTERING AGMG **********************************',& '***************************') 901 FORMAT(i3,'*ONE APPLICATION OF AGMG PRECONDITIONER') 902 FORMAT(i3,'*LEAVING AGMG * (MEMORY RELEASED) ***************',& '***************************') 954 FORMAT(i3,'*',' Equiv. number of CG iter.:',f9.2) 955 FORMAT('**** level',i2,' #call=',i6,' #cycle=',i6, & ' mean=',f7.2,' max=',i3) 960 FORMAT( i3,'*',' memory used (peak):',f9.2, & ' real(',i1,') words per nnz (',f8.2,' Mb)') 961 FORMAT( i3,'*',' memory still allocated:',f9.2, & ' real(',i1,') words per nnz (',f8.2,' Mb)') 962 FORMAT( i3,'*',' memory used for solution:',f9.2, & ' real(',i1,') words per nnz (',f8.2,' Mb)') 990 FORMAT(i3,'*GLOBAL STATISTICS for preconditioner application:') 996 FORMAT(i3,'*',' Setup time (CPU): ',1PE10.2, & ' seconds') 997 FORMAT(i3,'*',' Setup time (Elapsed): ',1PE10.2, & ' seconds') 998 FORMAT(i3,'*',' Solution time (CPU): ',1PE10.2, & ' seconds') 999 FORMAT(i3,'*',' Solution time (Elapsed): ',1PE10.2, & ' seconds') 1001 FORMAT(i3,'*',' FATAL ERROR: setup not done: ijob=',i3, & ' is not allowed') END SUBROUTINE dagmg !----------------------------------------------------------------------- RECURSIVE SUBROUTINE dagmg_setup(l,n,a,ja,ia,listrank,ifl) USE dagmg_mem IMPLICIT NONE INTEGER :: l,n,ja(*),ia(n+1) REAL (kind(0.0d0)) :: a(*) INTEGER :: ifl,listrank(ifl:*) INTEGER :: nnext,ierr,nzan,nmax,i,j,k,llsto,lw,lwn,lw0,kw,nwprev INTEGER, POINTER, DIMENSION(:) :: iw,iw0,ja2,lcg,iwp REAL (kind(0.0d0)), ALLOCATABLE, DIMENSION(:) :: a2 INTEGER, SAVE :: nlc(2),nlcp(2),nlc1(2),icum REAL (kind(0.0d0)), SAVE :: ngl(2),nglp(2),ngltot(2),nlctot(2),ngl1(2) LOGICAL, SAVE :: slowcoarse=.FALSE. REAL (kind(0.0d0)) :: ops,ff,xsi,eta,checkddl,dum(2) CHARACTER(len=13) :: prtint REAL (kind(0.0d0)) :: fff INTEGER , parameter :: IONE=1 ! nn(l)=n nlc(1)=n nlc(2)=ia(n+1)-ia(1) ! ngl=nlc IF ( l > 1 ) THEN nlctot=nlctot+nlc ngltot=ngltot+ngl IF (wfo) THEN IF (n > 9.9e10) THEN WRITE(prtint(1:12),'(1pe12.5)') dble(n) ELSE WRITE(prtint(1:12),'(i12)') n END IF WRITE(iout,920) prtint(1:12),dble(nlcp(1))/dble(n) IF (nlc(2) > 9.9e10) THEN WRITE(prtint(1:12),'(1pe12.5)') dble(nlc(2)) ELSE WRITE(prtint(1:12),'(i12)') nlc(2) END IF WRITE(iout,921) prtint(1:12),dble(nlc(2))/dble(n), & dble(nlcp(2))/dble(nlc(2)) END IF xsi=(6*1.0d0)/(10*1.0d0) eta=0.5d0 ff=(ngl1(2)/ngl(2))*(xsi**(l-1))/dble(icum) IF (ff < 2.0d0-eta) THEN innermax(l)=1 ELSE innermax(l)=2 END IF icum=icum*innermax(l) ELSE nlctot=nlc ngltot=ngl ngl1=ngl nlc1=nlc icum=1 innermax(1)=1 slowcoarse=.FALSE. allzero=.FALSE. nglp(1)=0.0 IF (wfo) THEN IF (n > 9.9e10) THEN WRITE(prtint(1:12),'(1pe12.5)') dble(n) ELSE WRITE(prtint(1:12),'(i12)') n END IF WRITE(iout,'()') WRITE(iout,918) prtint(1:12) IF (nlc(2) > 9.9e10) THEN WRITE(prtint(1:12),'(1pe12.5)') dble(nlc(2)) ELSE WRITE(prtint(1:12),'(i12)') nlc(2) END IF WRITE(iout,919) prtint(1:12),dble(nlc(2))/dble(n) WRITE(iout,'()') END IF END IF IF( l == nstep+1 .OR. l == maxlev .OR. ngl(1) <= maxcoarsesize & .OR. (slowcoarse .AND. 3*nglp(1) < 5*ngl(1)) & .OR. nglp(1) ==ngl(1) ) THEN nlev=l innermax(l)=0 END IF slowcoarse=.FALSE. IF ( l > 1 .AND. 3*nglp(1) < 5*ngl(1) ) slowcoarse=.TRUE. nlcp=nlc nglp=ngl IF (n == 0) THEN nnext=0 allzero=.TRUE. ! n=0 and nlev /= l possible with the parallel version IF (nlev /= l) THEN IF (wfo) THEN WRITE(iout,914) IRANK,l+1 END IF CALL dagmg_setup(l+1,nnext,a,ja,ia,listrank,ifl) RETURN END IF IF (allzero) GOTO 500 ! skip factorization on last level GOTO 300 END IF lw=0 lw0=0 IF (l == nlev) GOTO 200 lw=3*n+1 lw0=n ALLOCATE(dt(l)%p(n),dt(l)%ind(n),dt(l)%idiag(n+1) & ,lcg(4*n),a2(nlc(2)),ja2(nlc(2)),iw(lw),iw0(lw0)) memi=memi+6*n+1+nlc(2)+lw+lw0 memr=memr+n+nlc(2) memax=MAX(memax,memr+memi*rlenilen) iwp => iw kw=n+1 IF (l>1) THEN checkddl=-1.0d0 ELSE IF (wfo) THEN WRITE (iout,901) IRANK END IF IF (wff) THEN WRITE (iout,902) checkdd,trswc WRITE (iout,903) trspos END IF checkddl=checkdd END IF CALL dagmg_aggl4(n,nnext,a,ja,ia,lcg,dt(l)%ind,dt(l)%idiag,iw0, & iwp,iw(kw),dt(l)%p,trswc,a2,ja2,iw(n+kw),checkddl,trspos) 200 CONTINUE IF (lw > 0) DEALLOCATE(iw) memi=memi-lw lw=0 IF (l == nlev) GOTO 300 CALL dagmg_setsgs(n,a,ja,ia,dt(l)%p,dt(l)%idiag,a2,ja2,dt(l)%inloc) ALLOCATE(dt(l+1)%ia(nnext+1)) memi=memi+nnext+1 memax=MAX(memax,memr+memi*rlenilen) j=nnext IF (j > lw0) THEN IF (lw0 > 0) DEALLOCATE(iw0) ALLOCATE(iw0(j)) memi=memi-lw0+j memax=MAX(memax,memr+memi*rlenilen) lw0=j END IF CALL dagmg_setacg(nnext,lcg,a,ja,ia,a2,ja2,dt(l+1)%ia,nzan, & dt(l)%ind,iw0) DEALLOCATE(iw0,lcg) ALLOCATE(dt(l+1)%a(nzan),dt(l+1)%ja(nzan)) memi=memi-lw0-4*n+nzan memr=memr+nzan memax=MAX(memax,memr+memi*rlenilen) dt(l+1)%a(1:nzan)=a2(1:nzan) dt(l+1)%ja(1:nzan)=ja2(1:nzan) DEALLOCATE(a2,ja2) memi=memi-nlc(2) memr=memr-nlc(2) IF (scalcg < 0.0d0) THEN ff=-scalcg*dble(nnext)/dble(n) ELSE ff=scalcg END IF IF (ff /= 1.0d0) THEN IF (wfo) THEN WRITE(iout,'()') WRITE(iout,915) IRANK,l+1,ff END IF CALL DSCAL(nzan,ff,dt(l+1)%a,IONE) ELSE IF (wfo) THEN WRITE(iout,'()') WRITE(iout,914) IRANK,l+1 END IF END IF ! 250 CONTINUE CALL dagmg_setup(l+1,nnext,dt(l+1)%a,dt(l+1)%ja,dt(l+1)%ia, & listrank,nnext+1) GOTO 500 ! 300 CONTINUE ! CALL dagmg_LAPACK(n,a,ja,ia,fff,1,ops) IF (wfo) THEN WRITE(iout,911) IRANK,ops/dble(11*nn(1)+2*nlc1(2)) WRITE(iout,'()') END IF ! 500 CONTINUE IF (l==1) THEN IF (wfo) THEN WRITE(iout,'()') WRITE(iout,954) nlctot(1)/dble(nlc1(1)) WRITE(iout,955) nlctot(2)/dble(nlc1(2)) END IF DO i=1,nlvcyc k=nlev-i IF (k > 2) innermax(k)=1 END DO nwrkcum=0 nwprev=0 DO i=2,nlev-1 IF (innermax(i) > 1) THEN nwrkcum=nwrkcum+MAX(nwprev,6*nn(i)) nwprev=nn(i) ELSE nwrkcum=nwrkcum+MAX(nwprev,4*nn(i)) nwprev=0 END IF END DO nwrkcum=nwrkcum+MAX(nwprev,2*nn(nlev)) END IF ! RETURN 901 FORMAT(i3,'*SETUP: Coarsening by double pairwise aggregation') 902 FORMAT('**** Strong diag. dom. trs:',f5.1, & ' ; Strong/Weak coupling trs:',f5.2) 903 FORMAT('****',18x,'Threshold for rows with large pos. offdiag.:',f5.2) 911 FORMAT(i3,'*',' Exact factorization:',f12.3, & ' equiv. CG iterations') 914 FORMAT(i3,'*',' Level:',I12) 915 FORMAT(i3,'*',' Level:',I12, & ' ; applied scaling factor:',f6.3) 918 FORMAT('****',' Number of unknowns:', A12) 919 FORMAT('****',' Nonzeros :', A12, & ' (per row:',f7.2,')') 920 FORMAT('****',' Number of variables:',A12, & ' (reduction ratio:',f5.2,')') 921 FORMAT('****',' Nonzeros:',A12, & ' (per row:',f4.1, & '; red. ratio:',f5.2,')') 954 FORMAT('****',' relative complexity (grid):',f9.2) 955 FORMAT('****',' relative complexity (nnzs):',f9.2) END SUBROUTINE dagmg_setup !------------------------------------------------------------------ SUBROUTINE dagmg_relmem USE dagmg_mem IMPLICIT NONE INTEGER :: l DO l=1,nlev IF ( l>1 ) THEN IF ( nn(l-1)>0 ) THEN DEALLOCATE(dt(l)%a,dt(l)%ja,dt(l)%ia) END IF END IF IF (l0 ) & DEALLOCATE(dt(l)%p,dt(l)%ind,dt(l)%idiag) END DO memi=0 memr=0 memax=0 RETURN END SUBROUTINE dagmg_relmem !------------------------------------------------------------------ SUBROUTINE dagmg_LAPACK(N,a,ja,ia,f,ijb,flop) USE dagmg_mem IMPLICIT NONE INTEGER :: N,ia(n+1),ja(*),ijb REAL (kind(0.0d0)) :: a(*),f(n) REAL (kind(0.0d0)) :: flop ! REAL (kind(0.0d0)), ALLOCATABLE, SAVE :: ac(:,:) INTEGER , ALLOCATABLE, SAVE :: ipiv(:) INTEGER, SAVE :: iflop INTEGER :: i,kk,inloc INTEGER :: ierr INTEGER , parameter :: IONE=1 ! ierr=0 IF (ijb == -2) THEN ! DEALLOCATE (ac,ipiv) ! ELSE IF (ijb == 1) THEN ! ALLOCATE (ac(n,n),ipiv(n)) memi=memi+n memr=memr+n*n memax=MAX(memax,memr+memi*rlenilen) ac=0.0d0 DO i=1,n DO kk=ia(i),ia(i+1)-1 ac(i,ja(kk))=a(kk) END DO END DO CALL DGETRF(N,N,ac,N,ipiv,ierr) IF (ierr /= 0) THEN WRITE(iout, *) ' FATAL ERROR in GETRF: ierror=',ierr STOP END IF iflop=(2*n*n-n) flop=(2*1.0d0)/(3*1.0d0)*(dble(n)**3) ! ELSE IF (ijb == 2) THEN ! CALL DGETRS('N',N,IONE,ac,N,ipiv,f,N,ierr) IF (ierr /= 0) THEN WRITE(iout, *) ' FATAL ERROR in GETRS: ierror=',ierr STOP END IF flop=flop+dble(iflop) ! END IF ! RETURN END SUBROUTINE dagmg_LAPACK !----------------------------------------------------------------------- RECURSIVE SUBROUTINE dagmg_CGcorr(N,X,R,l,flop,w) USE dagmg_mem IMPLICIT NONE INTEGER :: N, l, idum REAL (kind(0.0d0)) :: flop REAL (kind(0.0d0)) :: dum REAL (kind(0.0d0)) :: X(N), R(N), w(*) INTEGER :: nnext, l1, RN, XN l1=l+1 nnext=nn(l1) IF (nnext > 0) THEN XN=1 RN=XN+nnext CALL dagmg_restaggl(N,nnext,R,w(RN),dt(l)%ind,flop) IF (l1 == nlev) THEN w(XN:XN+nnext-1)=w(RN:RN+nnext-1) CALL dagmg_LAPACK(nnext,dt(l1)%a,dt(l1)%ja,dt(l1)%ia, & w(XN),2,flop) ELSE IF ( innermax(l1) <= 1 ) THEN CALL dagmg_prec(nnext,w(XN),w(RN),dt(l1)%a,dt(l1)%ja, & dt(l1)%ia & ,l1,flop,w(RN+nnext)) kstat(2,l+1)=MAX(kstat(2,l+1),1) kstat(3,l+1)=kstat(3,l+1)+1 kstat(1,l+1)=kstat(1,l+1)+1 ELSE IF (spd) THEN CALL dagmg_FlexCG_inner(nnext,w(XN),w(RN),l+1,flop) ELSE CALL dagmg_GCR_inner(nnext,w(XN),w(RN),l+1,flop) END IF CALL dagmg_prolaggl(N,nnext,X,w(XN),dt(l)%ind) ELSE X(1:N)=0.0d0 END IF RETURN END SUBROUTINE dagmg_CGcorr !----------------------------------------------------------------------- RECURSIVE SUBROUTINE dagmg_prec(N,X,B,a,ja,ia,l,flop,R) USE dagmg_mem IMPLICIT NONE INTEGER :: N, l REAL (kind(0.0d0)) :: flop REAL (kind(0.0d0)) :: B(N), X(N), R(N,*) INTEGER :: ja(*), ia(N+1) REAL (kind(0.0d0)) :: a(*) INTEGER :: is IF (nsmooth == 2) THEN CALL dagmg_sgsolve1(N,B,R(1,2),R,X,a,ja,ia,dt(l)%p, & dt(l)%idiag,flop, dt(l)%inloc,dt(l)%lstout,dt(l)%ilstout,& dt(l)%lstin,dt(l)%ilstin) CALL dagmg_CGcorr(N,X,R,l,flop,R(1,3)) CALL dagmg_sgsolve2(N,X,R(1,2),R,a,ja,ia,dt(l)%p, & dt(l)%idiag,flop,dt(l)%inloc,dt(l)%lstout,dt(l)%ilstout, & dt(l)%lstin,dt(l)%ilstin) ELSE X(1:N)=B(1:N) CALL dagmg_sgsolve(N, X, a, ja, ia, dt(l)%p, dt(l)%idiag, flop,& dt(l)%inloc) DO is=2,(nsmooth+1)/2 CALL dagmg_rescalc(N, X, R(1,2), B, a, ja, ia, flop, & dt(l)%inloc,dt(l)%lstout,dt(l)%ilstout,dt(l)%lstin, & dt(l)%ilstin) CALL dagmg_sgsolve(N,R(1,2),a, ja, ia, dt(l)%p, dt(l)%idiag,& flop, dt(l)%inloc) X(1:N)=X(1:N)+R(1:N,2) flop=flop+dble(N) END DO CALL dagmg_rescalc(N, X, R, B, a, ja, ia, flop, & dt(l)%inloc,dt(l)%lstout,dt(l)%ilstout,dt(l)%lstin, & dt(l)%ilstin) CALL dagmg_CGcorr(N,R(1,2),R,l,flop,R(1,3)) X(1:N)=X(1:N)+R(1:N,2) flop=flop+dble(N) DO is=1,nsmooth/2 CALL dagmg_rescalc(N, X, R(1,2), B, a, ja, ia, flop, & dt(l)%inloc,dt(l)%lstout,dt(l)%ilstout,dt(l)%lstin, & dt(l)%ilstin) CALL dagmg_sgsolve(N,R(1,2),a, ja, ia, dt(l)%p, dt(l)%idiag,& flop,dt(l)%inloc) X(1:N)=X(1:N)+R(1:N,2) flop=flop+dble(N) END DO END IF ! RETURN END SUBROUTINE dagmg_prec !----------------------------------------------------------------------- SUBROUTINE dagmg_applyprec( N,f,X,a,ja,ia,flop) USE dagmg_mem IMPLICIT NONE INTEGER :: N REAL (kind(0.0d0)) :: flop REAL (kind(0.0d0)) :: f(N), X(N) INTEGER :: ja(*), ia(N+1) REAL (kind(0.0d0)) :: a(*) REAL (kind(0.0d0)), ALLOCATABLE :: S(:) ! mritr=nwrkcum+2*N ALLOCATE (S(nwrkcum+2*N)) CALL dagmg_prec(n,X,f,a,ja,ia,1,flop,S) kstat(3,1)=kstat(3,1)+1 DEALLOCATE (S) ! RETURN END SUBROUTINE dagmg_applyprec !----------------------------------------------------------------------- SUBROUTINE dagmg_FlexCG(N,f,X,ITER,RESID,a,ja,ia,init,flop) USE dagmg_mem IMPLICIT NONE INTEGER :: N, ITER, init REAL (kind(0.0d0)) :: flop REAL (kind(0.0d0)) :: f(N), X(N) INTEGER :: ja(*), ia(N+1) REAL (kind(0.0d0)) :: a(*) INTEGER :: MAXIT, ierr REAL (kind(0.0d0)) :: TOL, BNORM, RESID, dum0 REAL (kind(0.0d0)) :: ALPHA, BET0, RHO, dum(6) REAL (kind(0.0d0)), ALLOCATABLE :: S(:) REAL(kind(0.0d0)), external :: DDOT REAL(kind(0.0d0)), external :: DNRM2 INTEGER , parameter :: IONE=1 ! mritr=nwrkcum+5*N ALLOCATE (S(n+1:nwrkcum+6*N)) ! flop=0.0d0 kstat=0 IF (wfo) THEN WRITE(iout,940) IRANK END IF IF (wff) THEN WRITE(iout,946) nsmooth END IF ! TOL = RESID MAXIT = ITER RESID = 1.0d0 ITER = 0 dum(6) = DNRM2(N, f, IONE)**2 flop=flop+dble(2*N) ! ! compute initial residual ! IF (init==1) THEN CALL dagmg_rescalc(N,x,f,f,a,ja,ia,flop,dt(1)%inloc, & dt(1)%lstout,dt(1)%ilstout,dt(1)%lstin,dt(1)%ilstin) dum(5) = DNRM2(N, f, IONE)**2 dum(2:3)=dum(5:6) BNORM=SQRT(dum(3)) RESID=SQRT(dum(2)) RESID=RESID/BNORM IF(wff.AND. (MAXIT <= 0 .OR. RESID <= TOL)) THEN WRITE(iout,900) 0, resid*bnorm, resid END IF END IF ! ! DO WHILE ( ITER < MAXIT .AND. RESID > TOL ) ITER = ITER + 1 ! ! Preconditioner Solve. ! CALL dagmg_prec(n,S(1+3*N),f,a,ja,ia,1,flop,S(1+4*N)) ! ! Compute direction vector. ! IF ( ITER > 1 ) THEN dum(1) = - DDOT( N, S(1+N), IONE, S(1+3*N), IONE ) BET0=dum(1) BET0=BET0/RHO CALL DAXPY( N, BET0, S(1+2*N), IONE, S(1+3*N), IONE ) flop=flop+dble(4*N) ENDIF CALL DCOPY( N, S(1+3*N), IONE, S(1+2*N), IONE ) CALL dagmg_matv(N,S(1+2*N),S(1+N),a,ja,ia,flop,dt(1)%inloc, & dt(1)%lstout,dt(1)%ilstout,dt(1)%lstin,dt(1)%ilstin) dum(4) = DDOT( N, S(1+2*N), IONE, S(1+N), IONE ) dum(5) = DDOT(N,S(1+2*N),IONE,f,IONE) flop=flop+dble(4*N) IF (ITER==1) THEN dum(1:3)=dum(4:6) IF (init == 0) THEN BNORM=SQRT(dum(3)) END IF IF(wff) THEN WRITE(iout,900) 0, resid*bnorm, resid END IF ELSE dum(1:2)=dum(4:5) END IF RHO=dum(1) ALPHA=dum(2)/RHO ! IF (ITER == 1 .AND. init == 0) THEN CALL DCOPY(N,S(1+2*N),IONE,X,IONE) CALL DSCAL(N,ALPHA,X,IONE) flop=flop+dble(N) ELSE CALL DAXPY( N, ALPHA, S(1+2*N), IONE, X, IONE ) flop=flop+dble(2*N) END IF CALL DAXPY( N, -ALPHA, S(1+N), IONE, f, IONE ) dum0 = DNRM2(N,f,IONE)**2 RESID=dum0 RESID=SQRT(RESID) RESID=RESID/BNORM IF (wff) THEN WRITE(iout,900) iter, resid*bnorm, resid END IF flop=flop+dble(4*N) END DO ! IF (wff) THEN WRITE(iout,952) iter WRITE(iout,'()') END IF ! kstat(3,1)=ABS(iter) ! DEALLOCATE(S) RETURN 900 FORMAT('**** Iter=',i5,' Resid=',e9.2, & ' Relat. res.=',e9.2) 940 FORMAT(i3, & '*SOLUTION: flexible conjugate gradient iterations (FCG(1))') 946 FORMAT( '**** (with',i2,' SGS smoothing step per cycle)') 952 FORMAT('**** - Convergence reached in',I5,' iterations -') ! END SUBROUTINE dagmg_FlexCG !----------------------------------------------------------------------- RECURSIVE SUBROUTINE dagmg_FlexCG_inner( N,X,R,l,flop) USE dagmg_mem IMPLICIT NONE INTEGER :: N, ITER, l, ierr REAL (kind(0.0d0)) :: RESID, flop, BNORM, dum0 REAL (kind(0.0d0)) :: X(N), R(N,*) REAL (kind(0.0d0)) :: alpha1,alpha2,bet0,rho1,rho2,gamm0,dum(6) REAL(kind(0.0d0)), external :: DDOT REAL(kind(0.0d0)), external :: DNRM2 INTEGER , parameter :: IONE=1 ! ! AT MOST 2 ITERATIONS ! dum(6)=DNRM2(N, R, IONE)**2 ITER = 1 ! ! Preconditioner Solve. ! CALL dagmg_prec( N,X,R,dt(l)%a,dt(l)%ja,dt(l)%ia,l,flop,R(1,2)) ! CALL dagmg_matv(N,X,R(1,2),dt(l)%a,dt(l)%ja,dt(l)%ia,flop, & dt(l)%inloc,dt(l)%lstout,dt(l)%ilstout,dt(l)%lstin,dt(l)%ilstin) ! dum(4) = DDOT(N,X,IONE,R(1,2),IONE) dum(5) = DDOT(N,X,IONE,R,IONE) dum(1:3)=dum(4:6) BNORM=SQRT(dum(3)) rho1=dum(1) alpha1=dum(2) ! bet0=alpha1/rho1 CALL DAXPY( N, -bet0, R(1,2), IONE, R, IONE ) dum0=DNRM2(N,R,IONE)**2 RESID=dum0 RESID=SQRT(RESID)/BNORM IF (RESID <= resi) THEN CALL DSCAL(N,bet0,X,IONE) kstat(2,l)=MAX(kstat(2,l),iter) kstat(3,l)=kstat(3,l)+iter flop=flop+dble(11*N) RETURN END IF ! ITER = 2 ! ! Preconditioner Solve. ! CALL dagmg_prec(N,R(1,3),R,dt(l)%a,dt(l)%ja,dt(l)%ia,l,flop,R(1,4)) ! CALL dagmg_matv(N,R(1,3),R(1,4),dt(l)%a,dt(l)%ja,dt(l)%ia, flop,& dt(l)%inloc,dt(l)%lstout,dt(l)%ilstout,dt(l)%lstin, & dt(l)%ilstin) ! dum(4) = DDOT(N,R(1,2),IONE,R(1,3),IONE) dum(5) = DDOT(N,R(1,3),IONE,R,IONE) dum(6) = DDOT(N,R(1,3),IONE,R(1,4),IONE) dum(1:3)=dum(4:6) gamm0=dum(1) alpha2=dum(2) rho2 =dum(3) ! rho2=rho2-gamm0*gamm0/rho1 ! bet0=(alpha1-alpha2*gamm0/rho2)/rho1 CALL DSCAL( N, bet0, X, IONE ) bet0=alpha2/rho2 CALL DAXPY( N, bet0, R(1,3), IONE, X, IONE ) RESID=RESID*RESID ! crude estimation for statistic only flop=flop+dble(19*N) ! kstat(2,l)=MAX(kstat(2,l),iter) kstat(3,l)=kstat(3,l)+iter IF ( RESID > resi ) kstat(1,l)=kstat(1,l)+1 ! RETURN ! END SUBROUTINE dagmg_FlexCG_inner !----------------------------------------------------------------------- SUBROUTINE dagmg_GCR(N,f,X,ITER,RESID,a,ja,ia,init,flop) USE dagmg_mem IMPLICIT NONE INTEGER :: N, ITER, init REAL (kind(0.0d0)) :: flop REAL (kind(0.0d0)) :: f(N), X(N) INTEGER :: ja(*), ia(N+1) REAL (kind(0.0d0)) :: a(*) INTEGER :: MAXIT,i,itm,kc,ku,kfree,iv,iR,ifree,irst,ierr REAL (kind(0.0d0)) :: ALPHA, BET0 REAL (kind(0.0d0)) :: RESID, RESID2, BNORM2, RHO, TRS REAL (kind(0.0d0)) :: TOL, TOL2BNORM2, TOLT, dum0 REAL (kind(0.0d0)) :: dum(6) REAL (kind(0.0d0)), ALLOCATABLE :: S(:) REAL(kind(0.0d0)), external :: DDOT REAL(kind(0.0d0)), external :: DNRM2 INTEGER , parameter :: IONE=1 INTEGER :: itm1, m, info ! mritr=nwrkcum+N*(2*nrst+2)+((nrst+1)*nrst)/2+nrst ALLOCATE (S(n+1:nwrkcum+N*(2*nrst+3)+((nrst+1)*nrst)/2+nrst)) ! flop=0.0d0 kstat=0 IF (wfo) THEN WRITE(iout,938) IRANK,nrst END IF IF (wff) THEN WRITE(iout,946) nsmooth END IF ! m=MIN(nrst,ITER,N) kc=1 ku=kc+m kfree=ku+m iR=0 iv=iR+(m*(m+1))/2 ifree=iv+m TRS=EPSILON(1.0d0) TRS=SQRT(SQRT(TRS)) TOL = RESID TOL2BNORM2 = TOL MAXIT = ITER RESID2= 1.0d0 ITER = 0 dum(6) = DNRM2(N, f, IONE)**2 flop=flop+dble(2*N) ! ! compute initial residual ! IF (init==1) THEN CALL dagmg_rescalc(N,x,f,f,a,ja,ia,flop,dt(1)%inloc, & dt(1)%lstout,dt(1)%ilstout,dt(1)%lstin,dt(1)%ilstin) dum(5) = DNRM2(N, f, IONE)**2 dum(2:3)=dum(5:6) BNORM2=dum(3) RESID2=dum(2) TOL2BNORM2 = TOL*TOL*BNORM2 IF (wff.AND. (MAXIT <= 0 .OR. RESID2 <= TOL2BNORM2)) THEN WRITE(iout,900) 0, 0,SQRT(resid2),SQRT(resid2/bnorm2) END IF END IF ! itm = -1 irst = 0 DO WHILE ( ITER < MAXIT .AND. RESID2 > TOL2BNORM2 ) itm = itm + 1 ITER = ITER + 1 ! ! Restarting IF (itm == m) THEN CALL DTPTRS('U','N','U',m, IONE,S(1+iR+kfree*N), & S(1+iv+kfree*N),m,info) IF (irst == 0 .AND. init == 0) THEN CALL DGEMV('N',N,m,1.0d0,S(1+ku*N), & N,S(1+iv+kfree*N),IONE,0.0d0,& X,IONE) flop=flop+dble(2*m*N+m*(m+1)) ELSE CALL DGEMV('N',N,m,1.0d0,S(1+ku*N), & N,S(1+iv+kfree*N),IONE,0.0d0,& S(1+kc*N),IONE) DO i=1,N X(i)=X(i)+S(1+i-1+kc*N) END DO flop=flop+dble((2*m+1)*N+m*(m+1)) END IF itm=0 irst=irst+1 END IF ! ! Preconditioner Solve & MATVEC ! CALL dagmg_prec(N,S(1+(ku+itm)*N),f,a,ja,ia,1,flop, & S(1+ifree+kfree*N)) CALL dagmg_matv(N, S(1+(ku+itm)*N), S(1+(kc+itm)*N), & a, ja, ia, flop,dt(1)%inloc,dt(1)%lstout, & dt(1)%ilstout,dt(1)%lstin,dt(1)%ilstin) ! ! Gram-Schmidt ! IF (itm > 0) THEN DO i=0,itm-1 dum(1)=DDOT(N,S(1+(kc+i)*N),IONE,S(1+(kc+itm)*N),IONE) bet0=dum(1) bet0=bet0/S(1+iR+i+(i*(i+1))/2+kfree*N) S(1+iR+i+(itm*(itm+1))/2+kfree*N)=bet0 CALL DAXPY(N,-bet0,S(1+(kc+i)*N),IONE, & S(1+(kc+itm)*N),IONE) flop=flop+dble(4*N) END DO END IF ! ! no normalisation: record norm instead ! dum(4)=DNRM2(N,S(1+(kc+itm)*N),IONE)**2 dum(5)=DDOT( N, S(1+(kc+itm)*N), IONE, f, IONE ) IF (ITER == 1) THEN dum(1:3)=dum(4:6) IF (init == 0) THEN BNORM2=dum(3) RESID2=BNORM2 TOL2BNORM2=TOL*TOL*BNORM2 END IF IF (wff) THEN WRITE(iout,900) 0, 0,SQRT(resid2),SQRT(resid2/bnorm2) END IF TOLT = MAX(TOL2BNORM2,TRS*RESID2) ELSE dum(1:2)=dum(4:5) END IF rho=dum(1) alpha=dum(2) S(1+iR+itm+(itm*(itm+1))/2+kfree*N)=rho bet0=alpha/rho S(1+iv+itm+kfree*N)=bet0 ! CALL DAXPY( N, -bet0, S(1+(kc+itm)*N), IONE, f, IONE ) flop=flop+dble(6*N) ! RESID2 = RESID2 - alpha*alpha/rho IF (RESID2 <= TOLT) THEN dum0 = DNRM2(N,f,IONE)**2 RESID2=dum0 flop=flop+dble(2*N) TOLT = MAX(TOL2BNORM2,TRS*RESID2) END IF IF (wff)THEN WRITE(iout,900) iter,irst,SQRT(resid2),SQRT(resid2/bnorm2) END IF ! END DO ! IF (itm >= 0) THEN itm1=itm+1 CALL DTPTRS('U','N','U',itm1, IONE,S(1+iR+kfree*N), & S(1+iv+kfree*N),m,info) IF (irst == 0 .AND. init == 0) THEN CALL DGEMV('N',N,itm1,1.0d0,S(1+ku*N), & N,S(1+iv+kfree*N),IONE,0.0d0, & X,IONE) flop=flop+dble(2*(itm+1)*N+(itm+1)*(itm+2)) ELSE CALL DGEMV('N',N,itm1,1.0d0,S(1+ku*N), & N,S(1+iv+kfree*N),IONE,0.0d0, & S(1+kc*N),IONE) DO i=1,N X(i)=X(i)+S(1+i-1+kc*N) END DO flop=flop+dble((2*(itm+1)+1)*N+(itm+1)*(itm+2)) END IF END IF ! RESID=SQRT(RESID2/BNORM2) IF (wff) THEN WRITE(iout,952) iter WRITE(iout,'()') END IF ! kstat(3,1)=ABS(iter) ! DEALLOCATE (S) ! RETURN 900 FORMAT('**** Iter=',i5,' (',i2,' rest.) Resid=',e9.2, & ' Relat. res.=',e9.2) 938 FORMAT(i3,'*SOLUTION: GCR iterations (GCR(',i2,'))') 946 FORMAT( '**** (with',i2,' SGS smoothing step per cycle)') 952 FORMAT('**** - Convergence reached in',I5,' iterations -') ! END SUBROUTINE dagmg_GCR !----------------------------------------------------------------------- RECURSIVE SUBROUTINE dagmg_GCR_inner( N,X,R,l,flop) USE dagmg_mem IMPLICIT NONE INTEGER :: N, ITER, l, ierr REAL (kind(0.0d0)) :: RESID,BNORM,flop,rho1,rho2 REAL (kind(0.0d0)) :: X(N), R(N,*) REAL (kind(0.0d0)) :: alpha1,alpha2,bet0,gamm0,dum(6) REAL(kind(0.0d0)), external :: DDOT REAL(kind(0.0d0)), external :: DNRM2 INTEGER , parameter :: IONE=1 ! ! AT MOST 2 ITERATIONS ! dum(6)=DNRM2(N, R, IONE)**2 ITER = 1 ! ! Preconditioner Solve & MATVEC ! CALL dagmg_prec(N,X,R,dt(l)%a,dt(l)%ja,dt(l)%ia,l,flop,R(1,2)) CALL dagmg_matv(N, X, R(1,2),dt(l)%a,dt(l)%ja,dt(l)%ia,flop, & dt(l)%inloc,dt(l)%lstout,dt(l)%ilstout,dt(l)%lstin,dt(l)%ilstin) ! dum(4)=DNRM2(N,R(1,2),IONE)**2 dum(5)=DDOT(N, R(1,2), IONE, R, IONE ) dum(1:3)=dum(4:6) BNORM=dum(3) rho1=dum(1) alpha1=dum(2) ! bet0=alpha1/rho1 RESID=BNORM-alpha1*bet0 ! IF (RESID <= resi*resi*BNORM) THEN CALL DSCAL( N, bet0, X, IONE ) flop=flop+dble(7*N) kstat(2,l)=MAX(kstat(2,l),iter) kstat(3,l)=kstat(3,l)+iter RESID=SQRT(MAX(0.0d0,RESID/BNORM)) RETURN END IF ! CALL DAXPY( N, -bet0, R(1,2), IONE, R, IONE ) ! ITER = 2 ! ! Preconditioner Solve & MATVEC ! CALL dagmg_prec(N,R(1,3),R,dt(l)%a,dt(l)%ja,dt(l)%ia,l,flop,R(1,4)) CALL dagmg_matv(N,R(1,3),R(1,4),dt(l)%a,dt(l)%ja,dt(l)%ia,flop, & dt(l)%inloc,dt(l)%lstout,dt(l)%ilstout,dt(l)%lstin, & dt(l)%ilstin) ! dum(4) = DDOT(N,R(1,2),IONE,R(1,4),IONE) dum(5) = DDOT(N,R(1,4),IONE,R,IONE) dum(6) = DNRM2(N,R(1,4),IONE)**2 dum(1:3)=dum(4:6) gamm0=dum(1) alpha2=dum(2) rho2 =dum(3) ! rho2=rho2-gamm0*gamm0/rho1 bet0=(alpha1-alpha2*gamm0/rho2)/rho1 CALL DSCAL( N, bet0, X, IONE ) bet0=alpha2/rho2 CALL DAXPY( N, bet0, R(1,3), IONE, X, IONE ) RESID=RESID-alpha2*bet0 RESID=SQRT(MAX(0.0d0,RESID/BNORM)) ! flop=flop+dble(17*N) ! kstat(2,l)=MAX(kstat(2,l),iter) kstat(3,l)=kstat(3,l)+iter IF ( RESID > resi ) kstat(1,l)=kstat(1,l)+1 ! RETURN ! END SUBROUTINE dagmg_GCR_inner !----------------------------------------------------------------------- SUBROUTINE dagmg_aggl2 (n, nc, a, ja, ia, lcg, ind, lpair, deg & , next, prev, first, odmax, trs, checkdd, trspos, maxdg) IMPLICIT NONE INTEGER :: n, nc, ja(*), ia(n+1), lcg(4*n), ind(n), lpair(n), deg(n) INTEGER :: next(n), prev(n), first(0:n-1), maxdg REAL(kind(0.0d0)) :: a(*), odmax(n), vald REAL(kind(0.0d0)) :: checkdd, trspos REAL(kind(0.0d0)) :: trs, val, tent, odm, valp INTEGER :: mindg, i, j, jj, k, ipair, dg, isel, nmark, nm1, nm2, kd nmark = 0 nm1 = - n - 1 nm2 = - n - 2 maxdg = 0 nc = 0 IF (checkdd.GT.0.0d0) THEN DO i = 1, n j = ia (i) jj = ia (i + 1) - 1 dg = jj - j val = 0.0d0 odm = 0.0d0 valp= 0.0d0 DO k = j, jj IF (ja (k) .EQ.i) THEN vald = a(k) ELSE odm = MAX(odm,ABS(a(k))) valp= MAX(valp,a(k)) val = val + ABS(a(k)) ENDIF ENDDO IF (dg.EQ.0 .OR. ABS(vald).GT.checkdd*val) THEN ind (i) = nm1 nmark = nmark + 1 odmax (i) = 0.0d0 deg (i) = nm1 ELSE IF (valp.GT.trspos*vald) THEN ind(i) = nm2 deg (i) = 0 odmax (i) = - trs * odm ELSE ind (i) = 0 deg (i) = 0 odmax (i) = - trs * odm ENDIF ENDDO ELSE DO i = 1, n j = ia (i) jj = ia (i + 1) - 1 dg = jj - j odm = 0.0d0 valp= 0.0d0 DO k = j, jj IF (ja (k) .EQ.i) THEN vald = a (k) ELSE odm = MAX(odm,ABS(a(k))) valp= MAX(valp,a(k)) ENDIF ENDDO IF (dg.EQ.0) THEN ind (i) = nm1 nmark = nmark + 1 odmax (i) = 0.0d0 deg (i) = nm1 ELSE IF (valp.GT.trspos*vald) THEN ind(i) = nm2 deg (i) = 0 ELSE ind (i) = 0 deg (i) = 0 odmax (i) = - trs * odm ENDIF ENDDO ENDIF DO i = 1, n DO k = ia (i), ia (i + 1) - 1 IF ( (ind (i).EQ.0 .OR. ind(i).EQ.nm2) & .AND. a(k).LT.odmax(i) & .AND. ja (k).NE.i ) THEN dg = deg (ja (k) ) + 1 deg (ja (k) ) = dg maxdg = MAX(maxdg,dg) ENDIF ENDDO ENDDO DO i = 0, maxdg first (i) = 0 ENDDO DO i = n, 1, - 1 IF (ind(i).EQ.0 .OR. ind(i).EQ.nm2) THEN dg = deg(i) IF (first(dg) .GT. 0) prev ( first(dg) ) = i next (i) = first (dg) prev (i) = 0 first (dg) = i ENDIF ENDDO DO WHILE (nmark.LT.n) mindg = - 1 ipair = 0 DO WHILE (ipair.EQ.0) mindg = mindg + 1 ! if (mindg .gt. maxdg) stop 'isel' IF (first (mindg) .GT.0) THEN ipair = first (mindg) first (mindg) = next (ipair) IF (next (ipair) .GT.0) prev (next (ipair) ) = 0 ENDIF ENDDO nc = nc + 1 ind (ipair) = nc isel = 0 IF (ind(ipair) .EQ. nm2) GOTO 20 val = 0.0d0 DO i = ia (ipair), ia (ipair + 1) - 1 j = ja (i) IF (ind(j).EQ.0 .AND. a(i).LT.odmax(ipair)) THEN tent = a(i) IF (tent.LT.1.0001*val) THEN isel = j val = tent ENDIF ENDIF ENDDO 20 CONTINUE IF (isel.EQ.0) THEN lcg (nc) = ipair lpair (nc) = 0 nmark = nmark + 1 ELSE ind (ipair) = - nc ind (isel) = nc lcg (nc) = isel nmark = nmark + 2 lpair (nc) = ipair dg = deg(isel) IF (prev (isel) .GT.0) THEN next (prev (isel) ) = next (isel) ELSE first (dg) = next (isel) ENDIF IF (next (isel) .GT.0) prev (next (isel) ) = prev (isel) DO i = ia (isel), ia (isel + 1) - 1 j = ja (i) IF ( (ind (j).EQ.0 .OR. ind(j).EQ.nm2) & .AND. a(i).LT.odmax(isel) ) THEN dg = deg (j) dg = dg - 1 deg (j) = dg ! IF (dg .LT. maxdeg) THEN IF (prev (j) .GT.0) THEN next (prev (j) ) = next (j) ELSE first (dg+1) = next (j) ENDIF IF (next (j) .GT.0) prev (next (j) ) = prev (j) IF (first (dg) .GT.0) prev (first (dg) ) = j next (j) = first (dg) prev (j) = 0 first (dg) = j ! ENDIF END IF ENDDO ENDIF DO i = ia (ipair), ia (ipair + 1) - 1 j = ja (i) IF ( (ind (j).EQ.0 .OR. ind(j).EQ.nm2) & .AND. a(i).LT.odmax(ipair) ) THEN dg = deg (j) dg = dg - 1 deg (j) = dg ! IF (dg .LT. maxdeg) THEN IF (prev (j) .GT.0) THEN next (prev (j) ) = next (j) ELSE first (dg+1) = next (j) ENDIF IF (next (j) .GT.0) prev (next (j) ) = prev (j) IF (first (dg) .GT.0) prev (first (dg) ) = j next (j) = first (dg) prev (j) = 0 first (dg) = j ! ENDIF ENDIF ENDDO ENDDO RETURN END SUBROUTINE dagmg_aggl2 !----------------------------------------------------------------------- SUBROUTINE dagmg_aggl4 (n, nc, a, ja, ia, lcg, ind, lcg1, & lpair1, lcg2, lpair2, odmax, trs, a2, ja2, ia2, checkdd, trspos) IMPLICIT NONE INTEGER :: n, nc, ja(*), ia(n+1), lcg(4*n), ind(n) INTEGER :: lpair1(n), lcg1 (n), lcg2(n), lpair2(n) INTEGER :: ia2(n+1), ja2(*) REAL(kind(0.0d0)) :: a(*), odmax (n), a2(*), vald, wextmx, wextmn REAL(kind(0.0d0)) :: trs, checkdd, trspos, wextmax, wextmin INTEGER :: nc1, i, jj, jc, jcol, kb, jpos, nz, maxdg INTEGER, POINTER, DIMENSION(:) :: ifirst CALL dagmg_aggl2 (n, nc1, a, ja, ia, lcg1, ind, lpair1, lcg2, & lpair2, ia2, lcg, odmax, trs, checkdd, trspos, maxdg) nz = 0 ia2 (1) = 1 DO i = 1, nc1 lcg (i) = 0 ENDDO DO i = 1, nc1 jc=nc1+1 jj = lcg1 (i) DO kb = ia (jj), ia (jj+1) - 1 jcol = ja (kb) jcol = ABS (ind (jcol) ) ! IF (jcol.NE.i.AND.jcol.LE.nc1) THEN IF (jcol.LE.nc1) THEN jpos = lcg (jcol) IF (jpos.EQ.0) THEN nz = nz + 1 ja2 (nz) = jcol lcg (jcol) = nz a2 (nz) = a (kb) ELSE a2 (jpos) = a2 (jpos) + a (kb) ENDIF ENDIF ENDDO jj = lpair1 (i) IF (jj.GT.0) THEN DO kb = ia (jj), ia (jj + 1) - 1 jcol = ja (kb) jcol = ABS (ind (jcol) ) ! IF (jcol.NE.i.AND.jcol.LE.nc1) THEN IF (jcol.LE.nc1) THEN jpos = lcg (jcol) IF (jpos.EQ.0) THEN nz = nz + 1 ja2 (nz) = jcol lcg (jcol) = nz a2 (nz) = a (kb) ELSE a2 (jpos) = a2 (jpos) + a (kb) ENDIF ENDIF ENDDO ENDIF DO kb = ia2 (i), nz lcg (ja2 (kb) ) = 0 ENDDO ia2 (i + 1) = nz + 1 ENDDO IF (maxdg+1 .LE. ia(n+1)-nz-1) THEN CALL dagmg_aggl2 (nc1, nc, a2, ja2, ia2, lcg2, lcg, lpair2,& lcg(n+1), lcg(2*n+1), lcg(3*n+1), ja2(nz+1), & odmax, trs, -1.0d0, trspos, maxdg) ELSE ALLOCATE(ifirst(maxdg+1)) CALL dagmg_aggl2 (nc1, nc, a2, ja2, ia2, lcg2, lcg, lpair2,& lcg(n+1), lcg(2*n+1), lcg(3*n+1), ifirst, & odmax, trs, -1.0d0, trspos, maxdg) DEALLOCATE(ifirst) END IF DO i = 1, n jc = ind (i) jcol = ABS (jc) IF (jcol.LE.nc1) THEN IF (jc.GT.0) THEN ind (i) = lcg (jcol) ELSE ind (i) = - ABS (lcg (jcol) ) ENDIF ENDIF ENDDO CALL dagmg_setlcg (nc, lcg, lcg1, lpair1, lcg2, lpair2) RETURN END SUBROUTINE dagmg_aggl4 !----------------------------------------------------------------------- SUBROUTINE dagmg_setlcg (nc, lcg, lcg1, lpair1, lcg2, lpair2) IMPLICIT NONE INTEGER nc, lcg(4,nc), i, j1, j2 INTEGER lpair1(*), lcg1(*), lcg2(*), lpair2 (*) DO i = 1, nc j1 = lcg2 (i) j2 = lpair2 (i) lcg (1, i) = lcg1 (j1) lcg (2, i) = lpair1 (j1) IF (j2.GT.0) THEN lcg (3, i) = lcg1 (j2) lcg (4, i) = lpair1 (j2) ELSE lcg (3, i) = 0 lcg (4, i) = 0 ENDIF ENDDO RETURN END SUBROUTINE dagmg_setlcg !----------------------------------------------------------------------- SUBROUTINE dagmg_setsgs (n, a, ja, ia, p, idiag, w, iw, inloc) USE dagmg_mem IMPLICIT NONE INTEGER :: n, ja(*), ia(n+1), idiag(n), iw(*), inloc(n) REAL(kind(0.0d0)) :: a(*), p(n), w(*), t INTEGER :: i, j, k, ipos, nzu DO i = 1, n ! find diag, save upper part, concatenate lower part ipos = ia (i) nzu = 0 DO k = ia (i), ia (i + 1) - 1 j = ja (k) IF (j.GT.i) THEN nzu = nzu + 1 w (nzu) = a (k) iw (nzu) = j ELSEIF (j.LT.i) THEN a (ipos) = a (k) ja (ipos) = j ipos = ipos + 1 ELSE p (i) = a (k) ENDIF ENDDO ! ! copy back diagonal entry idiag (i) = ipos a (ipos) = p (i) ja (ipos) = i ! ! copy back upper part DO k = 1, nzu ipos = ipos + 1 a (ipos) = w (k) ja (ipos) = iw (k) ENDDO ! ! save inverse t=p(i) p (i) = 1.0d0 / t ENDDO RETURN END SUBROUTINE dagmg_setsgs !----------------------------------------------------------------------- SUBROUTINE dagmg_matv (n, x, y, a, ja, ia, flop, & inloc, lstout, ilstout, lstin, ilstin ) USE dagmg_mem IMPLICIT NONE INTEGER :: n, ja(*), ia(n+1), i, kk, k1, k2, ier INTEGER :: inloc(n), lstout(*), ilstout(*), lstin(0:*), ilstin(*) REAL(kind(0.0d0)) :: x(n), y(n), a(*), t REAL(kind(0.0d0)) :: flop DO i = 1, n k1 = ia (i) t = a (k1) * x (ja (k1) ) k2 = ia (i+1) DO kk = k1 + 1, k2 - 1 t = t + a (kk) * x (ja (kk) ) ENDDO y (i) = t ENDDO flop = flop + dble(2 * (ia (n + 1) - 1) - n) RETURN END SUBROUTINE dagmg_matv !----------------------------------------------------------------------- SUBROUTINE dagmg_sgsolve1(n, b, t1, r, v, a, ja, ia, p, idiag, flop,& inloc, lstout, ilstout, lstin, ilstin ) USE dagmg_mem IMPLICIT NONE INTEGER :: n, ja(*), ia(n+1), idiag(n), kk, j, k2, i, ier INTEGER :: inloc (n), lstout(*), ilstout(*), lstin(0:*), ilstin(*) REAL(kind(0.0d0)) :: b(n), t1(n), r(n), v(n) REAL(kind(0.0d0)) :: a(*), p(n), t REAL(kind(0.0d0)) :: flop !a t1 (1) = p (1) * b (1) v (1) = b (1) DO kk = 2, n t = b (kk) DO j = ia (kk), idiag (kk) - 1 t = t - a (j) * t1 (ja (j) ) ENDDO v (kk) = t t1 (kk) = p (kk) * t ENDDO !b DO kk = n - 1, 1, - 1 t = 0.0d0 k2 = ia (kk+1) DO j = idiag (kk) + 1, k2 - 1 t = t - a (j) * t1 (ja (j) ) ENDDO t1 (kk) = t1 (kk) + p (kk) * t ENDDO !c !... r (1) = b (1) - v (1) DO kk = 2, n t = b (kk) - v (kk) DO j = ia (kk), idiag (kk) - 1 t = t - a (j) * t1 (ja (j) ) ENDDO r (kk) = t ENDDO !... flop = flop + dble(3 * (ia (n + 1) - 1) ) RETURN END SUBROUTINE dagmg_sgsolve1 !----------------------------------------------------------------------- SUBROUTINE dagmg_sgsolve2(n, x, t1, t3, a, ja, ia, p, idiag, flop, & inloc, lstout, ilstout, lstin, ilstin ) USE dagmg_mem IMPLICIT NONE INTEGER :: n, ja(*), ia(n+1), idiag(n), kk, j, i, k2, ier INTEGER :: inloc (n), lstout(*), ilstout(*), lstin(0:*), ilstin(*) REAL(kind(0.0d0)) :: x(n), t1(n), t3(n), a(*), p(n), t REAL(kind(0.0d0)) :: flop ! input : x=t2 ; converted to t1+t2 ! output: x=t1+t1+t3 !a x (n) = x (n) + t1 (n) t3 (n) = 0.0d0 DO kk = n - 1, 1, - 1 x (kk) = x (kk) + t1 (kk) t = 0.0d0 DO j = idiag (kk) + 1, ia (kk + 1) - 1 t = t + a (j) * x (ja (j) ) ENDDO t3 (kk) = t ENDDO !b t3 (1) = p (1) * t3 (1) DO kk = 2, n t = t3 (kk) DO j = ia (kk), idiag (kk) - 1 t = t - a (j) * t3 (ja (j) ) ENDDO t3 (kk) = p (kk) * t ENDDO !c DO kk = 1, n t3 (kk) = x (kk) + t3 (kk) ENDDO !d DO kk = n - 1, 1, - 1 t = 0.0d0 k2 = ia (kk+1) DO j = idiag (kk) + 1, k2 - 1 t = t - a (j) * t3 (ja (j) ) ENDDO t3 (kk) = t3 (kk) + p (kk) * t ENDDO !e DO kk = 1, n x (kk) = x (kk) + t1 (kk) - t3 (kk) ENDDO flop = flop + dble(3 * (ia (n + 1) - 1 + n) ) RETURN END SUBROUTINE dagmg_sgsolve2 !----------------------------------------------------------------------- SUBROUTINE dagmg_sgsolve (n, x, a, ja, ia, p, idiag, flop, inloc) IMPLICIT NONE INTEGER :: n, ja(*), ia(n+1), idiag(n) INTEGER :: kk, j, k2, inloc(n) REAL(kind(0.0d0)) :: x(n), a(*), p(n), t REAL(kind(0.0d0)) :: flop x (1) = p (1) * x (1) DO kk = 2, n t = x (kk) DO j = ia (kk), idiag (kk) - 1 t = t - a (j) * x (ja (j) ) ENDDO x (kk) = p (kk) * t ENDDO DO kk = n - 1, 1, - 1 t = 0.0d0 k2 = ia (kk+1) DO j = idiag (kk) + 1, k2 - 1 t = t - a (j) * x (ja (j) ) ENDDO x (kk) = x (kk) + p (kk) * t ENDDO flop = flop + dble(2 * (ia (n + 1) - 1) ) RETURN END SUBROUTINE dagmg_sgsolve !----------------------------------------------------------------------- SUBROUTINE dagmg_rescalc (n, x, y, b, a, ja, ia, flop, & inloc, lstout, ilstout, lstin, ilstin ) USE dagmg_mem IMPLICIT NONE INTEGER :: n, ja(*), ia(n+1), i, kk, k1, k2, ier INTEGER :: inloc(n), lstout(*), ilstout(*), lstin(0:*), ilstin(*) REAL(kind(0.0d0)) :: x(n), y(n), b(n), a (*), t REAL(kind(0.0d0)) :: flop DO i = 1, n k1 = ia (i) t = b (i) - a (k1) * x (ja (k1) ) k2 = ia (i+1) DO kk = k1 + 1, k2 - 1 t = t - a (kk) * x (ja (kk) ) ENDDO y (i) = t ENDDO flop = flop + dble(2 * (ia (n + 1) - 1) ) RETURN END SUBROUTINE dagmg_rescalc !----------------------------------------------------------------------- SUBROUTINE dagmg_prolaggl (n, nc, V, B, ind) IMPLICIT NONE INTEGER :: n, nc, ind (n), k, i REAL(kind(0.0d0)) :: V (n), B (nc) DO i = 1, n k = ABS (ind (i) ) IF (k.LE.nc) THEN V (i) = B (k) ELSE V (i) = 0.0d0 ENDIF ENDDO RETURN END SUBROUTINE dagmg_prolaggl !----------------------------------------------------------------------- SUBROUTINE dagmg_restaggl (n, nc, V, B, ind, flop) IMPLICIT NONE INTEGER :: n, nc, ind (n), k, i REAL(kind(0.0d0)) :: V (n), B (nc) REAL(kind(0.0d0)) :: flop B(1:nc)=0.0d0 DO i = 1, n k = ABS (ind (i) ) IF (k.LE.nc) B (k) = B (k) + V (i) ENDDO flop = flop + dble(n) RETURN END SUBROUTINE dagmg_restaggl !----------------------------------------------------------------------- !----------------------------------------------------------------------- SUBROUTINE dagmg_setacg (nc, lcg, a, ja, ia, ac, jac, iac, nzac, & ind, iw) IMPLICIT NONE INTEGER :: nc, lcg(4,nc), ja(*), ia(*), jac(*) INTEGER :: iac(nc+1), nzac INTEGER :: ind(*), iw(*) REAL(kind(0.0d0)) :: a(*), ac(*) INTEGER :: i, kk, jj, jc, kb, jcol, jpos DO i = 1, nc iw (i) = 0 ENDDO nzac = 0 iac (1) = 1 DO 10 i = 1, nc DO 8 kk = 1, 4 jj = lcg (kk, i) IF (jj.NE.0) THEN DO kb = ia (jj), ia (jj + 1) - 1 jc = ja (kb) jcol = ABS (ind (jc) ) IF (jcol.LE.nc) THEN jpos = iw (jcol) IF (jpos.EQ.0) THEN nzac = nzac + 1 jac (nzac) = jcol iw (jcol) = nzac ac (nzac) = a (kb) ELSE ac (jpos) = ac (jpos) + a (kb) ENDIF ENDIF ENDDO END IF 8 END DO DO kb = iac (i), nzac iw (jac (kb) ) = 0 ENDDO iac (i + 1) = nzac + 1 10 END DO RETURN END SUBROUTINE dagmg_setacg !*Routine for bacward compatibility************************************ SUBROUTINE agmg(n,a,ja,ia,f,ijob,iprint,nrest,iter,tol) IMPLICIT NONE INTEGER :: n,ia(n+1),ja(*),ijob,iprint,nrest,iter REAL (kind(0.0d0)) :: a(*),f(n),x(n) REAL (kind(0.0d0)) :: tol CALL dagmg(n,a,ja,ia,f,x,ijob,iprint,nrest,iter,tol) CALL DCOPY(n,x,1,f,1) RETURN END SUBROUTINE agmg !*Timings*************************************************************** SUBROUTINE dagmg_mestime (id,cputm,eltm) IMPLICIT NONE INTEGER, SAVE :: cpt_init(10)=-1,cpt_fin,cpt_max,freq,cpt REAL, SAVE :: t1(10), t2 REAL(kind(0.0d0)) :: cputm,eltm INTEGER :: id IF (id>0) THEN !Next line may be uncommented if FORTRAN 95 function !CPU_TIME is implemented ! CALL CPU_TIME(t2) CALL SYSTEM_CLOCK(cpt_fin,freq,cpt_max) ! cpt = cpt_fin - cpt_init(id) IF (cpt_fin < cpt_init(id)) cpt = cpt + cpt_max eltm = dble(cpt) / freq cputm = dble(t2 - t1(id)) ! ELSE ! CALL SYSTEM_CLOCK(cpt_init(-id),freq,cpt_max) !Next line may be uncommented if FORTRAN 95 function !CPU_TIME is implemented ! CALL CPU_TIME(t1(-id)) ! END IF RETURN END SUBROUTINE dagmg_mestime !*********************************************************************** gerris-snapshot-131206/modules/hypre.c0000644000175100017510000011055612250371171014635 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2001-2011 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include <_hypre_utilities.h> #include #include #include #include "variable.h" #include "poisson.h" #include "mpi_boundary.h" /*#define DEBUG*/ typedef enum { HYPRE_BOOMER_AMG, HYPRE_PCG, HYPRE_HYBRID, HYPRE_LGMRES, HYPRE_BICGSTAB, HYPRE_GMRES, HYPRE_AMS, HYPRE_FLEXGMRES } HypreSolverType; typedef enum { HYPRE_AMG_PRECOND, HYPRE_PARASAILS_PRECOND, HYPRE_EUCLID_PRECOND, HYPRE_PILUT_PRECOND, HYPRE_AMS_PRECOND, NO_PRECOND } HyprePrecondType; typedef struct _HypreProblem HypreProblem; typedef struct _HypreSolverParams HypreSolverParams; struct _HypreSolverParams { HypreSolverType solver_type; HyprePrecondType precond_type; gint relax_type; gint coarsening_type; gint cycle_type; gint nlevel; gboolean verbose; }; /* Parameters for the projection schemes are stored in proj_hp */ HypreSolverParams proj_hp; struct _HypreProblem { HYPRE_IJMatrix A; HYPRE_ParCSRMatrix parcsr_A; HYPRE_IJVector b; HYPRE_ParVector par_b; HYPRE_IJVector x; HYPRE_ParVector par_x; }; static HYPRE_PtrToParSolverFcn HYPRE_precond_solver (void) { if (proj_hp.precond_type == HYPRE_AMG_PRECOND) return HYPRE_BoomerAMGSolve; else if (proj_hp.precond_type == HYPRE_PARASAILS_PRECOND) return HYPRE_ParaSailsSolve; else if (proj_hp.precond_type == HYPRE_EUCLID_PRECOND) return HYPRE_EuclidSolve; else if (proj_hp.precond_type == HYPRE_PILUT_PRECOND) return HYPRE_ParCSRPilutSolve; else if (proj_hp.precond_type == HYPRE_AMS_PRECOND) return HYPRE_AMSSolve; else g_assert_not_reached (); return 0; } static HYPRE_PtrToParSolverFcn HYPRE_precond_setup (void) { if (proj_hp.precond_type == HYPRE_AMG_PRECOND) return HYPRE_BoomerAMGSetup; else if (proj_hp.precond_type == HYPRE_PARASAILS_PRECOND) return HYPRE_ParaSailsSetup; else if (proj_hp.precond_type == HYPRE_EUCLID_PRECOND) return HYPRE_EuclidSetup; else if (proj_hp.precond_type == HYPRE_PILUT_PRECOND) return HYPRE_ParCSRPilutSetup; else if (proj_hp.precond_type == HYPRE_AMS_PRECOND) return HYPRE_AMSSetup; else g_assert_not_reached (); return 0; } static void ParaSails_precond (HYPRE_Solver * precond) { HYPRE_Solver pc; int sai_max_levels = 1; double sai_threshold = 0.1; double sai_filter = 0.05; int sai_sym = 1; /* Set some parameters (See Reference Manual for more parameters) */ HYPRE_ParaSailsCreate(MPI_COMM_WORLD, &pc); HYPRE_ParaSailsSetParams(pc, sai_threshold, sai_max_levels); HYPRE_ParaSailsSetFilter(pc, sai_filter); HYPRE_ParaSailsSetSym(pc, sai_sym); HYPRE_ParaSailsSetLogging(pc, 3); *precond = pc; } static void AMG_precond (HYPRE_Solver * precond) { HYPRE_Solver pc; HYPRE_BoomerAMGCreate(&pc); HYPRE_BoomerAMGSetPrintLevel(pc, 1); /* print amg solution info */ HYPRE_BoomerAMGSetCoarsenType(pc, 6); HYPRE_BoomerAMGSetRelaxType(pc, 6); /* Sym G.S./Jacobi hybrid */ HYPRE_BoomerAMGSetNumSweeps(pc, 1); HYPRE_BoomerAMGSetTol(pc, 0.0); /* conv. tolerance zero */ HYPRE_BoomerAMGSetMaxIter(pc, 1); /* do only one iteration! */ *precond = pc; } static void Euclid_precond (HYPRE_Solver * precond) { HYPRE_Solver pc; HYPRE_EuclidCreate (MPI_COMM_WORLD, &pc); *precond = pc; } static void Pilut_precond (HYPRE_Solver * precond) { HYPRE_Solver pc; HYPRE_ParCSRPilutCreate (MPI_COMM_WORLD, &pc); HYPRE_ParCSRPilutSetMaxIter (pc, 3); *precond = pc; } static void AMS_precond (HYPRE_Solver * precond) { HYPRE_Solver pc; HYPRE_AMSCreate (&pc); *precond = pc; } static void set_precond (HYPRE_Solver * precond) { if (proj_hp.precond_type == HYPRE_PARASAILS_PRECOND) ParaSails_precond (precond); else if (proj_hp.precond_type == HYPRE_AMG_PRECOND) AMG_precond (precond); else if (proj_hp.precond_type == HYPRE_EUCLID_PRECOND) Euclid_precond (precond); else if (proj_hp.precond_type == HYPRE_PILUT_PRECOND) Pilut_precond (precond); else if (proj_hp.precond_type == HYPRE_AMS_PRECOND) AMS_precond (precond); } static void destroy_precond (HYPRE_Solver precond) { if (proj_hp.precond_type == HYPRE_PARASAILS_PRECOND) HYPRE_ParaSailsDestroy(precond); else if (proj_hp.precond_type == HYPRE_AMG_PRECOND) HYPRE_BoomerAMGDestroy(precond); else if (proj_hp.precond_type == HYPRE_EUCLID_PRECOND) HYPRE_EuclidDestroy(precond); else if (proj_hp.precond_type == HYPRE_PILUT_PRECOND) HYPRE_ParCSRPilutDestroy(precond); else if (proj_hp.precond_type == HYPRE_AMS_PRECOND) HYPRE_AMSDestroy(precond); } /***********************************************/ /* Boomer Algebraic Multigrid Solver */ /***********************************************/ static void call_AMG_Boomer_solver (GfsDomain * domain, GfsMultilevelParams * par, HypreProblem * hp) { HYPRE_Solver solver; int num_iterations; double final_res_norm; gfs_domain_timer_start (domain, "Hypre: AMG_Boomer_solver"); if (proj_hp.nlevel == 0) proj_hp.nlevel = gfs_domain_depth (domain); /* Create solver */ HYPRE_BoomerAMGCreate(&solver); if (proj_hp.verbose) HYPRE_BoomerAMGSetPrintLevel(solver, 3); /* print solve info + parameters */ HYPRE_BoomerAMGSetCoarsenType(solver, proj_hp.coarsening_type); HYPRE_BoomerAMGSetRelaxType(solver, proj_hp.relax_type); HYPRE_BoomerAMGSetCycleType(solver, proj_hp.cycle_type); HYPRE_BoomerAMGSetNumSweeps(solver, par->nrelax); /* Sweeps on each level */ HYPRE_BoomerAMGSetMaxLevels(solver, proj_hp.nlevel); /* maximum number of levels */ HYPRE_BoomerAMGSetTol(solver, par->tolerance); /* conv. tolerance */ HYPRE_BoomerAMGSetMaxIter(solver, par->nitermax); /* maximum number of iterations */ HYPRE_BoomerAMGSetMinIter(solver, par->nitermin); /* minimum number of iterations */ /* Now setup and solve! */ HYPRE_BoomerAMGSetup(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_BoomerAMGSolve(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_BoomerAMGGetNumIterations(solver, &num_iterations); par->niter = num_iterations; /* Prints informations on the residual */ if (proj_hp.verbose && domain->pid <= 0) { HYPRE_BoomerAMGGetFinalRelativeResidualNorm(solver, &final_res_norm); printf("\n"); printf("Iterations = %d\n", num_iterations); printf("Final Relative Residual Norm = %e\n", final_res_norm); printf("\n"); } /* Destroy solver */ HYPRE_BoomerAMGDestroy(solver); gfs_domain_timer_stop (domain, "Hypre: AMG_Boomer_solver"); } /******************************************/ /* PreConjugateGradient Solver */ /******************************************/ static void call_PCG_solver (GfsDomain * domain, GfsMultilevelParams * par, HypreProblem * hp) { HYPRE_Solver solver, precond; int num_iterations; gfs_domain_timer_start (domain, "Hypre: PCG_Solver"); /* Create solver */ HYPRE_ParCSRPCGCreate(MPI_COMM_WORLD, &solver); /* Set some parameters (See Reference Manual for more parameters) */ if (proj_hp.verbose) HYPRE_ParCSRPCGSetPrintLevel(solver, 3); /* print solve info + parameters */ HYPRE_ParCSRPCGSetMaxIter(solver, par->nitermax); /* max iterations */ HYPRE_ParCSRPCGSetTol(solver, par->tolerance); /* conv. tolerance */ HYPRE_ParCSRPCGSetTwoNorm(solver, 1); /* use the two norm as the stopping criteria */ HYPRE_ParCSRPCGSetLogging(solver, 1); /* needed to get run info later */ if (proj_hp.precond_type != NO_PRECOND) { set_precond (&precond); HYPRE_ParCSRPCGSetPrecond(solver, (HYPRE_PtrToParSolverFcn) HYPRE_precond_solver (), (HYPRE_PtrToParSolverFcn) HYPRE_precond_setup (), precond); } HYPRE_ParCSRPCGSetup(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_ParCSRPCGSolve(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_ParCSRPCGGetNumIterations(solver, &num_iterations); par->niter = num_iterations; /* Run info - needed logging turned on */ if (proj_hp.verbose && domain->pid <= 0) { double final_res_norm; HYPRE_ParCSRPCGGetFinalRelativeResidualNorm(solver, &final_res_norm); printf("\n"); printf("Iterations = %d\n", num_iterations); printf("Final Relative Residual Norm = %e\n", final_res_norm); printf("\n"); } /* Destroy solver */ HYPRE_ParCSRPCGDestroy(solver); if (proj_hp.precond_type != NO_PRECOND) destroy_precond (precond); gfs_domain_timer_stop (domain, "Hypre: PCG_Solver"); } /**********************************************/ /* Hybrid DSCG/PCG Solver */ /**********************************************/ static void call_Hybrid_solver (GfsDomain * domain, GfsMultilevelParams * par, HypreProblem * hp) { HYPRE_Solver solver, precond; int num_iterations; gfs_domain_timer_start (domain, "Hypre: Hybrid_Solver"); /* Create solver */ HYPRE_ParCSRHybridCreate(&solver); /* Set some parameters (See Reference Manual for more parameters) */ if (proj_hp.verbose) HYPRE_ParCSRHybridSetPrintLevel(solver, 3); /* print solve info + parameters */ HYPRE_ParCSRHybridSetDSCGMaxIter(solver, par->nitermax); /* max iterations */ HYPRE_ParCSRHybridSetPCGMaxIter(solver, par->nitermax); HYPRE_ParCSRHybridSetTol(solver, par->tolerance); /* conv. tolerance */ HYPRE_ParCSRHybridSetTwoNorm(solver, 1); /* use the two norm as the stopping criteria */ HYPRE_ParCSRHybridSetLogging(solver, 1); /* needed to get run info later */ if (proj_hp.precond_type != NO_PRECOND) { set_precond (&precond); HYPRE_ParCSRHybridSetPrecond(solver, (HYPRE_PtrToParSolverFcn) HYPRE_precond_solver (), (HYPRE_PtrToParSolverFcn) HYPRE_precond_setup (), precond); } HYPRE_ParCSRHybridSetup(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_ParCSRHybridSolve(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_ParCSRHybridGetNumIterations(solver, &num_iterations); par->niter = num_iterations; /* Run info - needed logging turned on */ if (proj_hp.verbose && domain->pid <= 0) { double final_res_norm; HYPRE_ParCSRHybridGetFinalRelativeResidualNorm(solver, &final_res_norm); printf("\n"); printf("Iterations = %d\n", num_iterations); printf("Final Relative Residual Norm = %e\n", final_res_norm); printf("\n"); } /* Destroy solver */ HYPRE_ParCSRHybridDestroy(solver); if (proj_hp.precond_type != NO_PRECOND) destroy_precond (precond); gfs_domain_timer_stop (domain, "Hypre: Hybrid_Solver"); } /******************************************/ /* BICGSTAB Solver */ /******************************************/ static void call_BICGSTAB_solver (GfsDomain * domain, GfsMultilevelParams * par, HypreProblem * hp) { HYPRE_Solver solver, precond; int num_iterations; gfs_domain_timer_start (domain, "Hypre: BICGSTAB_Solver"); /* Create solver */ HYPRE_ParCSRBiCGSTABCreate(MPI_COMM_WORLD, &solver); /* Set some parameters (See Reference Manual for more parameters) */ if (proj_hp.verbose) HYPRE_ParCSRBiCGSTABSetPrintLevel(solver, 3); /* print solve info + parameters */ HYPRE_ParCSRBiCGSTABSetMaxIter(solver, par->nitermax); /* max iterations */ HYPRE_ParCSRBiCGSTABSetTol(solver, par->tolerance); /* conv. tolerance */ HYPRE_ParCSRBiCGSTABSetLogging(solver, 1); /* needed to get run info later */ if (proj_hp.precond_type != NO_PRECOND) { set_precond (&precond); HYPRE_ParCSRBiCGSTABSetPrecond(solver, (HYPRE_PtrToParSolverFcn) HYPRE_precond_solver (), (HYPRE_PtrToParSolverFcn) HYPRE_precond_setup (), precond); } HYPRE_ParCSRBiCGSTABSetup(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_ParCSRBiCGSTABSolve(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_ParCSRBiCGSTABGetNumIterations(solver, &num_iterations); par->niter = num_iterations; /* Run info - needed logging turned on */ if (proj_hp.verbose && domain->pid <= 0) { double final_res_norm; HYPRE_ParCSRBiCGSTABGetFinalRelativeResidualNorm(solver, &final_res_norm); printf("\n"); printf("Iterations = %d\n", num_iterations); printf("Final Relative Residual Norm = %e\n", final_res_norm); printf("\n"); } /* Destroy solver */ HYPRE_ParCSRBiCGSTABDestroy(solver); if (proj_hp.precond_type != NO_PRECOND) destroy_precond (precond); gfs_domain_timer_stop (domain, "Hypre: BICGSTAB_Solver"); } /******************************************/ /* LGMRES Solver */ /******************************************/ static void call_LGMRES_solver (GfsDomain * domain, GfsMultilevelParams * par, HypreProblem * hp) { HYPRE_Solver solver, precond; int num_iterations; gfs_domain_timer_start (domain, "Hypre: LGMRES_Solver"); /* Create solver */ HYPRE_ParCSRLGMRESCreate(MPI_COMM_WORLD, &solver); /* Set some parameters (See Reference Manual for more parameters) */ if (proj_hp.verbose) HYPRE_ParCSRLGMRESSetPrintLevel(solver, 3); /* print solve info + parameters */ HYPRE_ParCSRLGMRESSetMaxIter(solver, par->nitermax); /* max iterations */ HYPRE_ParCSRLGMRESSetTol(solver, par->tolerance); /* conv. tolerance */ /* HYPRE_ParCSRLGMRESSetTwoNorm(solver, 1); *//* use the two norm as the stopping criteria */ HYPRE_ParCSRLGMRESSetLogging(solver, 1); /* needed to get run info later */ if (proj_hp.precond_type != NO_PRECOND) { set_precond (&precond); HYPRE_ParCSRLGMRESSetPrecond(solver, (HYPRE_PtrToParSolverFcn) HYPRE_precond_solver (), (HYPRE_PtrToParSolverFcn) HYPRE_precond_setup (), precond); } HYPRE_ParCSRLGMRESSetup(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_ParCSRLGMRESSolve(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_ParCSRLGMRESGetNumIterations(solver, &num_iterations); par->niter = num_iterations; /* Run info - needed logging turned on */ if (proj_hp.verbose && domain->pid <= 0) { double final_res_norm; HYPRE_ParCSRLGMRESGetFinalRelativeResidualNorm(solver, &final_res_norm); printf("\n"); printf("Iterations = %d\n", num_iterations); printf("Final Relative Residual Norm = %e\n", final_res_norm); printf("\n"); } /* Destroy solver */ HYPRE_ParCSRLGMRESDestroy(solver); if (proj_hp.precond_type != NO_PRECOND) destroy_precond (precond); gfs_domain_timer_stop (domain, "Hypre: LGMRES_Solver"); } /******************************************/ /* GMRES Solver */ /******************************************/ static void call_GMRES_solver (GfsDomain * domain, GfsMultilevelParams * par, HypreProblem * hp) { HYPRE_Solver solver, precond; int num_iterations; gfs_domain_timer_start (domain, "Hypre: GMRES_Solver"); /* Create solver */ HYPRE_ParCSRGMRESCreate(MPI_COMM_WORLD, &solver); /* Set some parameters (See Reference Manual for more parameters) */ if (proj_hp.verbose) HYPRE_ParCSRGMRESSetPrintLevel(solver, 3); /* print solve info + parameters */ HYPRE_ParCSRGMRESSetMaxIter(solver, par->nitermax); /* max iterations */ HYPRE_ParCSRGMRESSetTol(solver, par->tolerance); /* conv. tolerance */ /* HYPRE_ParCSRGMRESSetTwoNorm(solver, 1); *//* use the two norm as the stopping criteria */ HYPRE_ParCSRGMRESSetLogging(solver, 1); /* needed to get run info later */ if (proj_hp.precond_type != NO_PRECOND) { set_precond (&precond); HYPRE_ParCSRGMRESSetPrecond(solver, (HYPRE_PtrToParSolverFcn) HYPRE_precond_solver (), (HYPRE_PtrToParSolverFcn) HYPRE_precond_setup (), precond); } HYPRE_ParCSRGMRESSetup(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_ParCSRGMRESSolve(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_ParCSRGMRESGetNumIterations(solver, &num_iterations); par->niter = num_iterations; /* Run info - needed logging turned on */ if (proj_hp.verbose && domain->pid <= 0) { double final_res_norm; HYPRE_ParCSRGMRESGetFinalRelativeResidualNorm(solver, &final_res_norm); printf("\n"); printf("Iterations = %d\n", num_iterations); printf("Final Relative Residual Norm = %e\n", final_res_norm); printf("\n"); } /* Destroy solver */ HYPRE_ParCSRGMRESDestroy(solver); if (proj_hp.precond_type != NO_PRECOND) destroy_precond (precond); gfs_domain_timer_stop (domain, "Hypre: GMRES_Solver"); } /******************************************/ /* AMS Solver */ /******************************************/ static void call_AMS_solver (GfsDomain * domain, GfsMultilevelParams * par, HypreProblem * hp) { HYPRE_Solver solver; int num_iterations; gfs_domain_timer_start (domain, "Hypre: AMS_Solver"); /* Create solver */ HYPRE_AMSCreate(&solver); /* Set some parameters (See Reference Manual for more parameters) */ if (proj_hp.verbose) HYPRE_AMSSetPrintLevel(solver, 3); /* print solve info + parameters */ HYPRE_AMSSetMaxIter(solver, par->nitermax); /* max iterations */ HYPRE_AMSSetTol(solver, par->tolerance); /* conv. tolerance */ HYPRE_AMSSetup(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_AMSSolve(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_AMSGetNumIterations(solver, &num_iterations); par->niter = num_iterations; /* Run info - needed logging turned on */ if (proj_hp.verbose && domain->pid <= 0) { double final_res_norm; HYPRE_AMSGetFinalRelativeResidualNorm(solver, &final_res_norm); printf("\n"); printf("Iterations = %d\n", num_iterations); printf("Final Relative Residual Norm = %e\n", final_res_norm); printf("\n"); } /* Destroy solver */ HYPRE_AMSDestroy(solver); gfs_domain_timer_stop (domain, "Hypre: AMS_Solver"); } /******************************************/ /* FlexGMRES Solver */ /******************************************/ static void call_FlexGMRES_solver (GfsDomain * domain, GfsMultilevelParams * par, HypreProblem * hp) { HYPRE_Solver solver, precond; int num_iterations; gfs_domain_timer_start (domain, "Hypre: FlexGMRES_Solver"); /* Create solver */ HYPRE_ParCSRFlexGMRESCreate(MPI_COMM_WORLD, &solver); /* Set some parameters (See Reference Manual for more parameters) */ if (proj_hp.verbose) HYPRE_ParCSRFlexGMRESSetPrintLevel(solver, 3); /* print solve info + parameters */ HYPRE_ParCSRFlexGMRESSetMaxIter(solver, par->nitermax); /* max iterations */ HYPRE_ParCSRFlexGMRESSetTol(solver, par->tolerance); /* conv. tolerance */ if (proj_hp.precond_type != NO_PRECOND) { set_precond (&precond); HYPRE_ParCSRFlexGMRESSetPrecond(solver, (HYPRE_PtrToParSolverFcn) HYPRE_precond_solver (), (HYPRE_PtrToParSolverFcn) HYPRE_precond_setup (), precond); } HYPRE_ParCSRFlexGMRESSetup(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_ParCSRFlexGMRESSolve(solver, hp->parcsr_A, hp->par_b, hp->par_x); HYPRE_ParCSRFlexGMRESGetNumIterations(solver, &num_iterations); par->niter = num_iterations; /* Run info - needed logging turned on */ if (proj_hp.verbose && domain->pid <= 0) { double final_res_norm; HYPRE_ParCSRFlexGMRESGetFinalRelativeResidualNorm(solver, &final_res_norm); printf("\n"); printf("Iterations = %d\n", num_iterations); printf("Final Relative Residual Norm = %e\n", final_res_norm); printf("\n"); } /* Destroy solver */ HYPRE_ParCSRFlexGMRESDestroy(solver); if (proj_hp.precond_type != NO_PRECOND) destroy_precond (precond); gfs_domain_timer_stop (domain, "Hypre: FlexGMRES_Solver"); } static void hypre_problem_new (HypreProblem * hp, GfsDomain * domain, gint size, gint istart) { gfs_domain_timer_start (domain, "HYPRE: Solver setup"); /* Create the matrix.*/ HYPRE_IJMatrixCreate(MPI_COMM_WORLD, istart, istart + size - 1, istart, istart + size - 1, &hp->A); /* Create the vectors rhs and solution.*/ HYPRE_IJVectorCreate(MPI_COMM_WORLD, istart, istart + size-1, &hp->b); HYPRE_IJVectorCreate(MPI_COMM_WORLD, istart, istart + size-1, &hp->x); /* Choose a parallel csr format storage */ HYPRE_IJMatrixSetObjectType(hp->A, HYPRE_PARCSR); HYPRE_IJVectorSetObjectType(hp->b, HYPRE_PARCSR); HYPRE_IJVectorSetObjectType(hp->x, HYPRE_PARCSR); /* Initialize before setting coefficients */ HYPRE_IJMatrixInitialize(hp->A); HYPRE_IJVectorInitialize(hp->b); HYPRE_IJVectorInitialize(hp->x); } static void hypre_problem_destroy (HypreProblem * hp) { g_assert (hp->A); HYPRE_IJMatrixDestroy(hp->A); HYPRE_IJVectorDestroy(hp->b); HYPRE_IJVectorDestroy(hp->x); } static void extract_stencil (GfsStencil * stencil, HypreProblem * hp) { int ncols = stencil->id->len; int rows = g_array_index (stencil->id, int, 0); HYPRE_IJMatrixSetValues (hp->A, 1, &ncols, &rows, (int *) stencil->id->data, (double *) stencil->coeff->data); } static void hypre_problem_init (HypreProblem * hp, GfsLinearProblem * lp, GfsDomain * domain) { double *rhs_values, *x_values; int *rows; gint i; /* Now go through my local rows and set the matrix entries.*/ rhs_values = (double *) lp->rhs->data; x_values = (double *) lp->lhs->data; rows = g_malloc (lp->lhs->len*sizeof(int)); for (i = 0; i < lp->rhs->len; i++) { extract_stencil (g_ptr_array_index (lp->LP, i), hp); rows[i] = lp->istart + i; } HYPRE_IJVectorSetValues(hp->b, lp->rhs->len, rows, rhs_values ); HYPRE_IJVectorSetValues(hp->x, lp->lhs->len, rows, x_values); /* Assemble after setting the coefficients */ HYPRE_IJMatrixAssemble(hp->A); HYPRE_IJVectorAssemble(hp->b); HYPRE_IJVectorAssemble(hp->x); /* Get the parcsr matrix object to use */ HYPRE_IJMatrixGetObject(hp->A, (void **) &hp->parcsr_A); HYPRE_IJVectorGetObject(hp->b, (void **) &hp->par_b); HYPRE_IJVectorGetObject(hp->x, (void **) &hp->par_x); #ifdef DEBUG HYPRE_IJMatrixPrint(hp->A, "Aij.dat"); HYPRE_IJVectorPrint(hp->x, "xi.dat"); HYPRE_IJVectorPrint(hp->b, "bi.dat"); #endif free(rows); gfs_domain_timer_stop (domain, "HYPRE: Solver setup"); } static void hypre_problem_copy (HypreProblem * hp, GfsLinearProblem * lp) { double *x_values; int *rows; gint i; /* Copy the solution to the GfsLinearProblem structure */ x_values = g_malloc (lp->lhs->len*sizeof (double)); rows = g_malloc (lp->lhs->len*sizeof (int)); for (i = 0; i < lp->lhs->len; i++) { x_values[i] = 0.; rows[i] = i + lp->istart; } HYPRE_IJVectorGetValues(hp->x, lp->lhs->len, rows, x_values); for (i = 0; i < lp->lhs->len; i++) g_array_index (lp->lhs, gdouble, i) = x_values[i]; free(x_values); free(rows); } typedef struct { GfsLinearProblem * lp; GfsVariable * lhs; } CopyParams; static void copy_solution (FttCell * cell, CopyParams * p) { GFS_VALUE (cell, p->lhs) = g_array_index (p->lp->lhs, gdouble, (int) GFS_VALUE (cell, p->lp->id) - p->lp->istart); } static void solve_linear_problem (GfsDomain * domain, GfsLinearProblem * lp, GfsMultilevelParams * par, gdouble tolerance) { HypreProblem hp; gdouble old = par->tolerance; par->tolerance = tolerance; hypre_problem_new (&hp, domain, lp->rhs->len, lp->istart); hypre_problem_init (&hp, lp, domain); /* Choose a solver and solve the system */ if (proj_hp.solver_type == HYPRE_BOOMER_AMG) call_AMG_Boomer_solver (domain, par, &hp); else if (proj_hp.solver_type == HYPRE_PCG) call_PCG_solver (domain, par, &hp); else if (proj_hp.solver_type == HYPRE_HYBRID) call_Hybrid_solver (domain, par, &hp); else if (proj_hp.solver_type == HYPRE_LGMRES) call_LGMRES_solver (domain, par, &hp); else if (proj_hp.solver_type == HYPRE_GMRES) call_GMRES_solver (domain, par, &hp); else if (proj_hp.solver_type == HYPRE_FLEXGMRES) call_FlexGMRES_solver (domain, par, &hp); else if (proj_hp.solver_type == HYPRE_AMS) call_AMS_solver (domain, par, &hp); else if (proj_hp.solver_type == HYPRE_BICGSTAB) call_BICGSTAB_solver (domain, par, &hp); else g_assert_not_reached(); hypre_problem_copy (&hp, lp); hypre_problem_destroy (&hp); par->tolerance = old; } static void correct (FttCell * cell, gpointer * data) { GfsVariable * u = data[0]; GfsVariable * dp = data[1]; GFS_VALUE (cell, u) += GFS_VALUE (cell, dp); } static void hypre_poisson_solve (GfsDomain * domain, GfsMultilevelParams * par, GfsVariable * lhs, GfsVariable * rhs, GfsVariable * res, GfsVariable * dia, gdouble dt) { /* calculates the initial residual and its norm */ gfs_residual (domain, par->dimension, FTT_TRAVERSE_LEAFS, -1, lhs, rhs, dia, res); par->residual_before = par->residual = gfs_domain_norm_residual (domain, FTT_TRAVERSE_LEAFS, -1, dt, res); if (par->nitermax > 0 && par->residual.infty > 0.) { GfsVariable * dp = gfs_temporary_variable (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_reset, dp); GfsLinearProblem * lp = gfs_get_poisson_problem (domain, res, dp, dia, -1, lhs); solve_linear_problem (domain, lp, par, MIN (0.1*par->tolerance/par->residual.infty, 0.99)); CopyParams p = { lp, dp }; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) copy_solution, &p); gfs_linear_problem_destroy (lp); /* correct on leaf cells */ gpointer data[2]; data[0] = lhs; data[1] = dp; gfs_traverse_and_bc (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) correct, data, lhs, lhs); gts_object_destroy (GTS_OBJECT (dp)); /* compute new residual on leaf cells */ gfs_residual (domain, par->dimension, FTT_TRAVERSE_LEAFS, -1, lhs, rhs, dia, res); par->residual = gfs_domain_norm_residual (domain, FTT_TRAVERSE_LEAFS, -1, dt, res); } } static void hypre_diffusion_solve (GfsDomain * domain, GfsMultilevelParams * par, GfsVariable * lhs, GfsVariable * rhs, GfsVariable * rhoc, GfsVariable * axi) { /* calculates the initial residual and its norm */ GfsVariable * res = gfs_temporary_variable (domain); gfs_diffusion_residual (domain, lhs, rhs, rhoc, axi, res); par->residual_before = par->residual = gfs_domain_norm_variable (domain, res, NULL, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); if (par->nitermax > 0 && par->residual.infty > 0.) { GfsVariable * dp = gfs_temporary_variable (domain); dp->component = lhs->component; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_reset, dp); GfsLinearProblem * lp = gfs_get_diffusion_problem (domain, res, dp, rhoc, axi, -1, lhs); solve_linear_problem (domain, lp, par, MIN (0.1*par->tolerance/par->residual.infty, 0.99)); CopyParams p = { lp, dp }; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) copy_solution, &p); gfs_linear_problem_destroy (lp); /* correct on leaf cells */ gpointer data[2]; data[0] = lhs; data[1] = dp; gfs_traverse_and_bc (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) correct, data, lhs, lhs); gts_object_destroy (GTS_OBJECT (dp)); /* compute new residual on leaf cells */ gfs_diffusion_residual (domain, lhs, rhs, rhoc, axi, res); par->residual = gfs_domain_norm_variable (domain, res, NULL, FTT_TRAVERSE_LEAFS, -1, NULL, NULL); } gts_object_destroy (GTS_OBJECT (res)); } static void hypre_solver_write (HypreSolverParams * par,FILE * fp) { fprintf (fp," {\n"); switch (par->solver_type) { case HYPRE_BOOMER_AMG: fputs (" solver_type = boomer_amg\n", fp); break; case HYPRE_PCG: fputs (" solver_type = pcg\n", fp); break; case HYPRE_HYBRID: fputs (" solver_type = hybrid\n", fp); break; case HYPRE_LGMRES: fputs (" solver_type = lgmres\n", fp); break; case HYPRE_GMRES: fputs (" solver_type = gmres\n", fp); break; case HYPRE_FLEXGMRES: fputs (" solver_type = flexgmres\n", fp); break; case HYPRE_AMS: fputs (" solver_type = ams\n", fp); break; case HYPRE_BICGSTAB: fputs (" solver_type = bicgstab\n", fp); break; } switch (par->relax_type) { case 0: fputs (" relax_type = jacobi\n", fp); break; case 1: fputs (" relax_type = gauss_seidel\n", fp); break; case 3: fputs (" relax_type = sor-j-forward\n", fp); break; case 4: fputs (" relax_type = sor-j-backward\n", fp); break; case 5: fputs (" relax_type = gs-j\n", fp); break; case 6: fputs (" relax_type = ssor-j\n", fp); break; case 7: fputs (" relax_type = matvec-jacobi\n", fp); break; case 9: fputs (" relax_type = direct\n", fp); break; } switch (par->precond_type) { case HYPRE_AMG_PRECOND: fputs (" precond_type = amg\n", fp); break; case HYPRE_PARASAILS_PRECOND:fputs (" precond_type = parasails\n", fp); break; case HYPRE_EUCLID_PRECOND: fputs (" precond_type = euclid\n", fp); break; case HYPRE_PILUT_PRECOND: fputs (" precond_type = pilut\n", fp); break; case HYPRE_AMS_PRECOND: fputs (" precond_type = ams\n", fp); break; case NO_PRECOND: fputs (" precond_type = none\n", fp); break; } switch (par->coarsening_type) { case 0: fputs (" coarsening_type = cljp\n", fp); break; case 3: fputs (" coarsening_type = ruge_stueben\n", fp); break; case 6: fputs (" coarsening_type = falgout\n", fp); break; case 8: fputs (" coarsening_type = pmis\n", fp); break; case 10: fputs (" coarsening_type = hmis\n", fp); break; case 21: fputs (" coarsening_type = cgc\n", fp); break; case 22: fputs (" coarsening_type = cgc_e\n", fp); break; } fprintf (fp," cycle_type = %i\n", par->cycle_type); fprintf (fp," nlevel = %i\n", par->nlevel); fprintf (fp," verbose = %i\n", par->verbose); fputc ('}', fp); } static void hypre_solver_read (HypreSolverParams * par, GtsFile * fp) { gchar * solver_type = NULL, * relax_type = NULL, * coarsening_type = NULL; gchar * precond_type = NULL; GtsFileVariable var[] = { {GTS_STRING, "relax_type", TRUE, &relax_type}, {GTS_STRING, "solver_type", TRUE, &solver_type}, {GTS_STRING, "precond_type", TRUE, &precond_type}, {GTS_STRING, "coarsening_type", TRUE, &coarsening_type}, {GTS_INT, "cycle_type", TRUE, &par->cycle_type}, {GTS_INT, "nlevel", TRUE, &par->nlevel}, {GTS_INT, "verbose", TRUE, &par->verbose}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; if (solver_type) { if (!strcmp (solver_type, "boomer_amg")) par->solver_type = HYPRE_BOOMER_AMG; else if (!strcmp (solver_type, "pcg")) par->solver_type = HYPRE_PCG; else if (!strcmp (solver_type, "hybrid")) par->solver_type = HYPRE_HYBRID; else if (!strcmp (solver_type, "lgmres")) par->solver_type = HYPRE_LGMRES; else if (!strcmp (solver_type, "gmres")) par->solver_type = HYPRE_GMRES; else if (!strcmp (solver_type, "ams")) par->solver_type = HYPRE_AMS; else if (!strcmp (solver_type, "flexgmres")) par->solver_type = HYPRE_FLEXGMRES; else if (!strcmp (solver_type, "bicgstab")) par->solver_type = HYPRE_BICGSTAB; else gts_file_variable_error (fp, var, "solver_type", "unknown solver type `%s'", solver_type); g_free (solver_type); } /* The default is no preconditioner */ if (precond_type) { if (!strcmp (precond_type, "amg")) par->precond_type = HYPRE_AMG_PRECOND; else if (!strcmp (precond_type, "parasails")) par->precond_type = HYPRE_PARASAILS_PRECOND; else if (!strcmp (precond_type, "euclid")) par->precond_type = HYPRE_EUCLID_PRECOND; else if (!strcmp (precond_type, "pilut")) par->precond_type = HYPRE_PILUT_PRECOND; else if (!strcmp (precond_type, "ams")) par->precond_type = HYPRE_AMS_PRECOND; else if (!strcmp (precond_type, "none")) par->precond_type = NO_PRECOND; else gts_file_variable_error (fp, var, "precond_type", "unknown preconditioner `%s'", precond_type); g_free (precond_type); } if (fp->type == GTS_ERROR) return; if (relax_type) { if (!strcmp (relax_type, "jacobi")) par->relax_type = 0; else if (!strcmp (relax_type, "gauss_seidel")) par->relax_type = 1; else if (!strcmp (relax_type, "sor-j-forward")) par->relax_type = 3; else if (!strcmp (relax_type, "sor-j-backward")) par->relax_type = 4; else if (!strcmp (relax_type, "gs-j")) par->relax_type = 5; else if (!strcmp (relax_type, "ssor-j")) par->relax_type = 6; else if (!strcmp (relax_type, "matvec-jacobi")) par->relax_type = 7; else if (!strcmp (relax_type, "direct")) par->relax_type = 9; else gts_file_variable_error (fp, var, "relax_type", "unknown relax type `%s'", relax_type); g_free (relax_type); } if (fp->type == GTS_ERROR) return; if (coarsening_type) { if (par->solver_type != HYPRE_BOOMER_AMG) g_warning ("coarsening algorithms are only for the BoomerAMG Solver !!\n" "none will be used with the selected solver"); if (!strcmp (coarsening_type, "cljp")) par->coarsening_type = 0; else if (!strcmp (coarsening_type, "ruge_stueben")) par->coarsening_type = 3; else if (!strcmp (coarsening_type, "falgout")) par->coarsening_type = 6; else if (!strcmp (coarsening_type, "pmis")) par->coarsening_type = 8; else if (!strcmp (coarsening_type, "hmis")) par->coarsening_type = 10; else if (!strcmp (coarsening_type, "cgc")) par->coarsening_type = 21; else if (!strcmp (coarsening_type, "cgc_e")) par->coarsening_type = 22; else gts_file_variable_error (fp, var, "coarsening_type", "unknown coarsening type `%s'", coarsening_type); g_free (coarsening_type); } if (fp->type == GTS_ERROR) return; if (par->cycle_type < 1 || (par->cycle_type > 8 && par->cycle_type < 11) || par->cycle_type > 14) gts_file_variable_error (fp, var, "cycle_type", "unknown cycle type `%i'", par->cycle_type); else if (par->nlevel < 0) gts_file_variable_error (fp, var, "nlevel", "nlevel cannot be < 0"); } /* Initialize module */ void gfs_module_read (GtsFile * fp, GfsSimulation * sim); void gfs_module_write (FILE * fp); /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "hypre"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { return NULL; } void gfs_module_read (GtsFile * fp, GfsSimulation * sim) { g_return_if_fail (fp != NULL); /* Default hypre solver parameters */ /* Boomer AMG is the default solver */ proj_hp.solver_type = HYPRE_BOOMER_AMG; proj_hp.precond_type = NO_PRECOND; proj_hp.relax_type = 5; proj_hp.coarsening_type = 22; proj_hp.cycle_type = 1; proj_hp.nlevel = 0; proj_hp.verbose = FALSE; if (fp->type == '{') hypre_solver_read (&proj_hp, fp); if (fp->type != GTS_ERROR) { if (sim == NULL) gts_file_error (fp, "hypre module must be called within the GfsSimulation parameter block"); else { /* initialise the poisson solver hook */ sim->approx_projection_params.poisson_solve = hypre_poisson_solve; sim->projection_params.poisson_solve = hypre_poisson_solve; /* initialise the other diffusion and Poisson solver hook(s) */ sim->advection_params.diffusion_solve = hypre_diffusion_solve; GSList * i = GFS_DOMAIN (sim)->variables; while (i) { if (GFS_IS_VARIABLE_TRACER (i->data)) GFS_VARIABLE_TRACER (i->data)->advection.diffusion_solve = hypre_diffusion_solve; else if (GFS_IS_VARIABLE_POISSON (i->data)) GFS_VARIABLE_POISSON (i->data)->par.poisson_solve = hypre_poisson_solve; i = i->next; } } } } void gfs_module_write (FILE * fp) { g_return_if_fail (fp != NULL); hypre_solver_write (&proj_hp, fp); } gerris-snapshot-131206/modules/Makefile.am0000644000175100017510000001600312250371171015366 00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = RStarTree kdt fes2004 wavewatch culvert AM_CPPFLAGS = -DGFS_MODULES_DIR=\"$(libdir)/gerris\" INCLUDES = -I$(top_srcdir)/src -I$(includedir) \ -DG_LOG_DOMAIN=\"Gfs-modules\" $(GTS_CFLAGS) if HAS_LIBPROJ MAP = libmap2D.la libmap3D.la endif if BUILD_TIDE TIDE = libtide2D.la libtide3D.la endif if BUILD_STOKES STOKES = libstokes2D.la libstokes3D.la endif if BUILD_WAVEWATCH WAVEWATCH = libwavewatch2D.la endif if BUILD_HYPRE HYPRE = libhypre2D.la libhypre3D.la endif if BUILD_LIS LIS = liblis2D.la liblis3D.la endif if BUILD_AGMG AGMG = libagmg2D.la libagmg3D.la endif if BUILD_ODE ODE = libode2D.la libode3D.la endif if HAS_GSL BUBBLES = libbubbles2D.la libbubbles3D.la endif if HAS_FFTW3 FFT = libfft2D.la libfft3D.la endif pkglib_LTLIBRARIES = \ $(MAP) \ libterrain2D.la \ libterrain3D.la \ libparticulates2D.la \ libparticulates3D.la \ libokada2D.la \ libokada3D.la \ libdf33D.la \ libelectrohydro2D.la \ libelectrohydro3D.la \ libskewsymmetric2D.la \ libskewsymmetric3D.la \ libtopics2D.la \ libtopics3D.la \ libculvert2D.la \ liblayered2D.la \ $(TIDE) \ $(STOKES) \ $(WAVEWATCH) \ $(HYPRE) \ $(LIS) \ $(AGMG) \ $(ODE) \ $(BUBBLES) \ $(FFT) bin_PROGRAMS = \ rsurface2kdt AM_LDFLAGS = $(NO_UNDEFINED)\ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)\ -release $(LT_RELEASE) -export-dynamic -module libmap3D_la_SOURCES = map.c libmap3D_la_LIBADD = $(GFS3D_LIBS) -lproj libmap2D_la_SOURCES = map.c libmap2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libmap2D_la_LIBADD = $(GFS2D_LIBS) -lproj KDTLIBS = -Lkdt -lkdt -lm KDTDEPS = kdt/libkdt.la libterrain3D_la_SOURCES = terrain.c libterrain3D_la_LIBADD = $(GFS3D_LIBS) $(KDTLIBS) libterrain3D_la_DEPENDENCIES = $(KDTDEPS) libterrain2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libterrain2D_la_SOURCES = terrain.c libterrain2D_la_LIBADD = $(GFS2D_LIBS) $(KDTLIBS) libterrain2D_la_DEPENDENCIES = $(KDTDEPS) libtide3D_la_SOURCES = tide.c libtide3D_la_CFLAGS = $(AM_CFLAGS) $(GSL_CFLAGS) libtide3D_la_LIBADD = $(GFS3D_LIBS) -Lfes2004 -lfes -lnetcdf $(GSL_LIBS) libtide2D_la_SOURCES = tide.c libtide2D_la_CFLAGS = $(AM_CFLAGS) $(GSL_CFLAGS) -DFTT_2D=1 libtide2D_la_LIBADD = $(GFS2D_LIBS) -Lfes2004 -lfes -lnetcdf $(GSL_LIBS) libstokes3D_la_SOURCES = stokes.c CW263.f libstokes3D_la_CFLAGS = $(AM_CFLAGS) libstokes3D_la_LIBADD = $(GFS3D_LIBS) libstokes2D_la_SOURCES = stokes.c CW263.f libstokes2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libstokes2D_la_LIBADD = $(GFS2D_LIBS) libwavewatch2D_la_SOURCES = wavewatch.c libwavewatch2D_la_LIBADD = $(GFS2D_LIBS) -Lwavewatch -lwavewatch -L/usr/lib/gcc/i486-linux-gnu/4.2 -lgfortran libwavewatch2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 \ -DW3SRCE=`nm wavewatch/libwavewatch.a | grep w3srce | awk '{ if ($$2 == "T") print $$3; }'` \ -DGFSW3INIT=`nm wavewatch/libwavewatch.a | grep gfsw3_init | awk '{ if ($$2 == "T") print $$3; }'` libwavewatch2D_la_DEPENDENCIES = wavewatch/libwavewatch.a libode3D_la_SOURCES = ode.c libode3D_la_CFLAGS = $(AM_CFLAGS) $(ODE_CFLAGS) libode3D_la_LIBADD = $(GFS3D_LIBS) $(ODE_LIBS) libode2D_la_SOURCES = ode.c libode2D_la_CFLAGS = $(AM_CFLAGS) $(ODE_CFLAGS) -DFTT_2D=1 libode2D_la_LIBADD = $(GFS2D_LIBS) $(ODE_LIBS) rsurface2kdt_SOURCES = rsurface2kdt.c rsurface.c rsurface.h rsurface2kdt_LDADD = -LRStarTree -lcSmRST $(KDTLIBS) rsurface2kdt_CFLAGS = $(AM_CFLAGS) rsurface2kdt_DEPENDENCIES = $(KDTDEPS) noinst_LTLIBRARIES = libparticulatecommon2D.la libparticulatecommon3D.la libparticulatecommon3D_la_SOURCES = particulatecommon.c particulatecommon.h libparticulatecommon3D_la_CFLAGS = $(AM_CFLAGS) libparticulatecommon2D_la_SOURCES = particulatecommon.c particulatecommon.h libparticulatecommon2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libparticulates3D_la_SOURCES = particulates.c libparticulates3D_la_CFLAGS = $(AM_CFLAGS) libparticulates3D_la_LIBADD = libparticulatecommon3D.la $(GFS3D_LIBS) libparticulates3D_la_DEPENDENCIES = libparticulatecommon3D.la libparticulates2D_la_SOURCES = particulates.c libparticulates2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libparticulates2D_la_LIBADD = libparticulatecommon2D.la $(GFS2D_LIBS) libparticulates2D_la_DEPENDENCIES = libparticulatecommon2D.la libbubbles3D_la_SOURCES = bubbles.c libbubbles3D_la_CFLAGS = $(AM_CFLAGS) $(GSL_CFLAGS) libbubbles3D_la_LIBADD = libparticulatecommon3D.la $(GFS3D_LIBS) $(GSL_LIBS) libbubbles3D_la_DEPENDENCIES = libparticulatecommon3D.la libbubbles2D_la_SOURCES = bubbles.c libbubbles2D_la_CFLAGS = $(AM_CFLAGS) $(GSL_CFLAGS) -DFTT_2D=1 libbubbles2D_la_LIBADD = libparticulatecommon2D.la $(GFS2D_LIBS) $(GSL_LIBS) libbubbles2D_la_DEPENDENCIES = libparticulatecommon2D.la libfft3D_la_SOURCES = fft.c libfft3D_la_CFLAGS = $(AM_CFLAGS) $(FFTW3_CFLAGS) libfft3D_la_LIBADD = $(GFS3D_LIBS) $(FFTW3_LIBS) libfft2D_la_SOURCES = fft.c libfft2D_la_CFLAGS = $(AM_CFLAGS) $(FFTW3_CFLAGS) -DFTT_2D=1 libfft2D_la_LIBADD = $(GFS2D_LIBS) $(FFTW3_LIBS) libhypre3D_la_SOURCES = hypre.c libhypre3D_la_CFLAGS = $(AM_CFLAGS) libhypre3D_la_LIBADD = $(GFS3D_LIBS) -lHYPRE -lm libhypre2D_la_SOURCES = hypre.c libhypre2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libhypre2D_la_LIBADD = $(GFS2D_LIBS) -lHYPRE -lm liblis3D_la_SOURCES = lis.c liblis3D_la_CFLAGS = $(AM_CFLAGS) liblis3D_la_LIBADD = $(GFS3D_LIBS) -llis -lgfortran -lm liblis2D_la_SOURCES = lis.c liblis2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 liblis2D_la_LIBADD = $(GFS2D_LIBS) -llis -lgfortran -lm libagmg3D_la_SOURCES = agmg.c dagmg.f90 libagmg3D_la_CFLAGS = $(AM_CFLAGS) libagmg3D_la_LIBADD = $(GFS3D_LIBS) -llapack -lblas -lgfortran -lm libagmg2D_la_SOURCES = agmg.c dagmg.f90 libagmg2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libagmg2D_la_LIBADD = $(GFS2D_LIBS) -llapack -lblas -lgfortran -lm libokada3D_la_SOURCES = okada.c libokada3D_la_CFLAGS = $(AM_CFLAGS) libokada3D_la_LIBADD = $(GFS3D_LIBS) libokada2D_la_SOURCES = okada.c libokada2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libokada2D_la_LIBADD = $(GFS2D_LIBS) libdf33D_la_SOURCES = df3.c libdf33D_la_CFLAGS = $(AM_CFLAGS) libdf33D_la_LIBADD = $(GFS3D_LIBS) libelectrohydro3D_la_SOURCES = electrohydro.c libelectrohydro3D_la_CFLAGS = $(AM_CFLAGS) libelectrohydro3D_la_LIBADD = $(GFS3D_LIBS) libelectrohydro2D_la_SOURCES = electrohydro.c libelectrohydro2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libelectrohydro2D_la_LIBADD = $(GFS2D_LIBS) libskewsymmetric3D_la_SOURCES = skewsymmetric.c libskewsymmetric3D_la_CFLAGS = $(AM_CFLAGS) libskewsymmetric3D_la_LIBADD = $(GFS3D_LIBS) libskewsymmetric2D_la_SOURCES = skewsymmetric.c libskewsymmetric2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libskewsymmetric2D_la_LIBADD = $(GFS2D_LIBS) libtopics3D_la_SOURCES = topics.c libtopics3D_la_CFLAGS = $(AM_CFLAGS) libtopics3D_la_LIBADD = $(GFS3D_LIBS) libtopics2D_la_SOURCES = topics.c libtopics2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 libtopics2D_la_LIBADD = $(GFS2D_LIBS) libculvert2D_la_SOURCES = culvert.c libculvert2D_la_CFLAGS = $(AM_CFLAGS) libculvert2D_la_LIBADD = $(GFS2D_LIBS) -Lculvert -lboyd87 -lm libculvert2D_la_DEPENDENCIES = culvert/libboyd87.la liblayered2D_la_SOURCES = layered.c liblayered2D_la_CFLAGS = $(AM_CFLAGS) -DFTT_2D=1 liblayered2D_la_LIBADD = $(GFS2D_LIBS) gerris-snapshot-131206/modules/wavewatch/0000755000175100017510000000000012250371672015411 500000000000000gerris-snapshot-131206/modules/wavewatch/fchecktypes.ftn0000644000175100017510000000034612250371171020347 00000000000000! Simple checks for compatibility of C and Fortran types SUBROUTINE CHECK_INT ( A, B, C ) INTEGER A, B, C C = A*B END SUBROUTINE CHECK_INT SUBROUTINE CHECK_FLOAT ( A, B, C ) REAL A, B, C C = A*B END SUBROUTINE CHECK_FLOAT gerris-snapshot-131206/modules/wavewatch/w3init222.ftn0000644000175100017510000000105012250371171017473 00000000000000!/ ------------------------------------------------------------------- / ! ! Initialisation of Wavewatch III (version 2.22) when used with Gerris ! (-*-F90-*-) ! !/ ------------------------------------------------------------------- / MODULE GFSW3INIT USE W3IOGRMD USE W3TESTMD, ONLY : NAPROC, IAPROC, NAPOUT, NAPERR IMPLICIT NONE PUBLIC CONTAINS SUBROUTINE GFSW3_INIT ( ) IMPLICIT NONE NAPROC = 1 IAPROC = 1 NAPOUT = 1 NAPERR = 1 CALL W3IOGR ( 'READ', 30 ) RETURN END SUBROUTINE GFSW3_INIT END MODULE GFSW3INIT gerris-snapshot-131206/modules/wavewatch/cchecktypes.c0000644000175100017510000000213612250371171017776 00000000000000/* Simple checks for compatibility of C and Fortran types */ #include extern void check_int_ (void * a, void * b, void * c); extern void check_float_ (void * a, void * b, void * c); int main (int argc, char * argv[]) { int ia, ib, ic; long long lc, la, lb; float fa, fb, fc; double dc, da, db; printf ("/* Automatically generated using 'checktypes' */\n"); ia = -123; ib = 875; check_int_ (&ia, &ib, &ic); if (ic == ia*ib) printf ("typedef int INTEGER;\n"); else { la = -123; lb = 875; check_int_ (&la, &lb, &lc); if (lc != la*lb) { fprintf (stderr, "checktypes: could not find compatible C and Fortran integers\n"); return 1; } printf ("typedef long long INTEGER;\n"); } fa = -123.; fb = 875.; check_float_ (&fa, &fb, &fc); if (fc == fa*fb) printf ("typedef float REAL;\n"); else { da = -123.; db = 875.; check_float_ (&da, &db, &dc); if (dc != da*db) { fprintf (stderr, "checktypes: could not find compatible C and Fortran floats\n"); return 1; } printf ("typedef double REAL;\n"); } return 0; } gerris-snapshot-131206/modules/wavewatch/Makefile.in0000644000175100017510000004146012250371210017367 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = $(am__EXEEXT_1) subdir = modules/wavewatch DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru libwavewatch_a_AR = $(AR) $(ARFLAGS) libwavewatch_a_LIBADD = am_libwavewatch_a_OBJECTS = libwavewatch_a_OBJECTS = $(am_libwavewatch_a_OBJECTS) @BUILD_WAVEWATCH_TRUE@am__EXEEXT_1 = checktypes$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am_checktypes_OBJECTS = cchecktypes.$(OBJEXT) checktypes_OBJECTS = $(am_checktypes_OBJECTS) checktypes_DEPENDENCIES = fchecktypes.o DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libwavewatch_a_SOURCES) $(checktypes_SOURCES) DIST_SOURCES = $(libwavewatch_a_SOURCES) $(checktypes_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ @BUILD_WAVEWATCH_TRUE@WAVEWATCH = libwavewatch.a @BUILD_WAVEWATCH_TRUE@CHECKTYPES = checktypes noinst_LIBRARIES = $(WAVEWATCH) EXTRA_DIST = gfsad3 \ w3init222.ftn wavewatch_222.h \ wavewatch_312.h \ w3init314.ftn wavewatch_314.h \ fchecktypes.ftn checktypes_SOURCES = cchecktypes.c checktypes_LDADD = fchecktypes.o libwavewatch_a_SOURCES = CLEANFILES = cfortrantypes.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/wavewatch/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/wavewatch/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list checktypes$(EXEEXT): $(checktypes_OBJECTS) $(checktypes_DEPENDENCIES) $(EXTRA_checktypes_DEPENDENCIES) @rm -f checktypes$(EXEEXT) $(LINK) $(checktypes_OBJECTS) $(checktypes_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cchecktypes.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am libwavewatch.a: w3initmd.o rm -f libwavewatch.a $(AR) cru libwavewatch.a `grep WWATCH3_DIR $(HOME)/.wwatch3.env | awk '{print $$2 "/obj/w3*.o"}'` w3initmd.o $(RANLIB) libwavewatch.a w3initmd.o: $(W3INIT).ftn $(HOME)/.wwatch3.env gfsad3 cfortrantypes.h sh gfsad3 $(W3INIT).ftn mv -f $(W3INIT).o w3initmd.o fchecktypes.o: fchecktypes.ftn $(HOME)/.wwatch3.env gfsad3 sh gfsad3 fchecktypes.ftn cfortrantypes.h: checktypes ./checktypes > cfortrantypes.h w3init312.ftn: w3init314.ftn cp -f w3init314.ftn w3init312.ftn # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/modules/wavewatch/wavewatch_314.h0000644000175100017510000000563512250371171020065 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "cfortrantypes.h" /** * Initialisation of wavewatch */ extern void GFSW3INIT (void); /** * imported from w3srcemd.f90:W3SRCE * @IX,@IY: Discrete grid point counters (hopefully unused) * @IMOD: Model number (always 1) * @SPEC: Spectrum (action) in 1-D form (NK*NTH elements): INPUT/OUTPUT * @ALPHA: Nondimensional 1-D spectrum (NK) OUTPUT * @WN1: Discrete wavenumbers (NK) INPUT * @CG1: Discrete group velocities (NK) INPUT * @DEPTH: Depth INPUT * @U10ABS: Wind speed at reference height INPUT * @U10DIR: Wind direction at reference height INPUT * @USTAR: Friction velocity INPUT/OUTPUT * @USTDIR: Friction velocity direction OUTPUT (maybe model dependent?) * @EMEAN: Mean energy OUTPUT (maybe model dependent?) * @FMEAN: Mean frequency OUTPUT (maybe model dependent?) * @WMEAN: Mean wavenumber OUTPUT (maybe model dependent?) * @AMAX: Maximum energy OUTPUT * @FPI: Peak-input frequency INPUT/OUTPUT * @CD: Drag coefficient OUTPUT (maybe model dependent?) * @Z0: Roughness length OUTPUT (maybe model dependent?) * @DTDYN: Average dynamic time step OUTPUT * @FCUT: Cut-off frequency for tail OUTPUT * @DTG: Global time step INPUT */ extern void W3SRCE (INTEGER * IX, INTEGER * IY, INTEGER * IMOD, REAL * SPEC, REAL * ALPHA, REAL * WN1, REAL * CG1, REAL * DEPTH, REAL * U10ABS, REAL * U10DIR, REAL * AS, REAL * USTAR, REAL * USTDIR, REAL * CX, REAL * CY, REAL * EMEAN, REAL * FMEAN, REAL * WMEAN, REAL * AMAX, REAL * FPI, REAL * CD, REAL * Z0, REAL * DTDYN, REAL * FCUT, REAL * DTG); gerris-snapshot-131206/modules/wavewatch/Makefile.am0000644000175100017510000000171712250371171017365 00000000000000## Process this file with automake to produce Makefile.in if BUILD_WAVEWATCH WAVEWATCH = libwavewatch.a CHECKTYPES = checktypes endif noinst_LIBRARIES = $(WAVEWATCH) noinst_PROGRAMS = $(CHECKTYPES) EXTRA_DIST = gfsad3 \ w3init222.ftn wavewatch_222.h \ wavewatch_312.h \ w3init314.ftn wavewatch_314.h \ fchecktypes.ftn checktypes_SOURCES = cchecktypes.c checktypes_LDADD = fchecktypes.o libwavewatch_a_SOURCES = CLEANFILES = cfortrantypes.h libwavewatch.a: w3initmd.o rm -f libwavewatch.a $(AR) cru libwavewatch.a `grep WWATCH3_DIR $(HOME)/.wwatch3.env | awk '{print $$2 "/obj/w3*.o"}'` w3initmd.o $(RANLIB) libwavewatch.a w3initmd.o: $(W3INIT).ftn $(HOME)/.wwatch3.env gfsad3 cfortrantypes.h sh gfsad3 $(W3INIT).ftn mv -f $(W3INIT).o w3initmd.o fchecktypes.o: fchecktypes.ftn $(HOME)/.wwatch3.env gfsad3 sh gfsad3 fchecktypes.ftn cfortrantypes.h: checktypes ./checktypes > cfortrantypes.h w3init312.ftn: w3init314.ftn cp -f w3init314.ftn w3init312.ftn gerris-snapshot-131206/modules/wavewatch/wavewatch_222.h0000644000175100017510000000555712250371171020066 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "cfortrantypes.h" /** * Initialisation of wavewatch */ extern void GFSW3INIT (void); /** * imported from w3srcemd.f90:W3SRCE * @SPEC: Spectrum (action) in 1-D form (NK*NTH elements): INPUT/OUTPUT * @SP2D: Spectrum (action) in 2-D form (NK*NTH elements): INPUT/OUTPUT * @ALPHA: Nondimensional 1-D spectrum (NK) OUTPUT * @WN1: Discrete wavenumbers (NK) INPUT * @CG1: Discrete group velocities (NK) INPUT * @DEPTH: Depth INPUT * @U10ABS: Wind speed at reference height INPUT * @U10DIR: Wind direction at reference height INPUT * @USTAR: Friction velocity INPUT/OUTPUT * @EMEAN: Mean energy OUTPUT (maybe model dependent?) * @FMEAN: Mean frequency OUTPUT (maybe model dependent?) * @WMEAN: Mean wavenumber OUTPUT (maybe model dependent?) * @AMAX: Maximum energy OUTPUT * @FPI: Peak-input frequency INPUT/OUTPUT * @CD: Drag coefficient OUTPUT (maybe model dependent?) * @Z0: Roughness length OUTPUT (maybe model dependent?) * @DTDYN: Average dynamic time step OUTPUT * @FCUT: Cut-off frequency for tail OUTPUT * @DTG: Global time step INPUT * @DTMIN: Minimum (partial) time step INPUT * @DTMAX: Maximum (partial) time step INPUT */ extern void W3SRCE (REAL * SPEC, REAL * SP2D, REAL * ALPHA, REAL * WN1, REAL * CG1, REAL * DEPTH, REAL * U10ABS, REAL * U10DIR, REAL * USTAR, REAL * EMEAN, REAL * FMEAN, REAL * WMEAN, REAL * AMAX, REAL * FPI, REAL * CD, REAL * Z0, REAL * DTDYN, REAL * FCUT, REAL * DTG, REAL * DTMIN, REAL * DTMAX); gerris-snapshot-131206/modules/wavewatch/w3init314.ftn0000644000175100017510000000640012250371171017501 00000000000000!/ ------------------------------------------------------------------- / ! ! Initialisation of Wavewatch III (version 3.14) when used with Gerris ! Adapted from ww3_shel.ftn, S. Popinet, 2009 (-*-F90-*-) ! !/ ------------------------------------------------------------------- / MODULE GFSW3INIT USE W3GDATMD USE W3WDATMD, ONLY: TIME, W3NDAT, W3DIMW, W3SETW USE W3ADATMD, ONLY: W3NAUX, W3DIMA, W3SETA USE W3IDATMD USE W3ODATMD, ONLY: W3NOUT, W3SETO USE W3ODATMD, ONLY: NAPROC, IAPROC, NAPOUT, NAPERR, & NOGRD, IDOUT, FNMPRE, IOSTYP !/ USE W3INITMD !/ IMPLICIT NONE ! !/ ------------------------------------------------------------------- / !/ Local parameters !/ INTEGER :: NDSO, NDSE, NDST, & NDS(13), NTRACE(2), & ODAT(30), & MPI_COMM = -99, & IPRT(6) REAL, ALLOCATABLE :: X(:), Y(:) LOGICAL :: FLGRD(NOGRD), PRTFRM CHARACTER(LEN=10), & ALLOCATABLE :: PNAMES(:) !/ !/ ------------------------------------------------------------------- / !/ PUBLIC CONTAINS SUBROUTINE GFSW3_INIT ( ) IMPLICIT NONE ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 0. Set up data structures ! CALL W3NMOD ( 1, 6, 6 ) CALL W3NDAT ( 6, 6 ) CALL W3NAUX ( 6, 6 ) CALL W3NOUT ( 6, 6 ) CALL W3NINP ( 6, 6 ) ! CALL W3SETG ( 1, 6, 6 ) CALL W3SETW ( 1, 6, 6 ) CALL W3SETA ( 1, 6, 6 ) CALL W3SETO ( 1, 6, 6 ) CALL W3SETI ( 1, 6, 6 ) ! Time is not set TIME(1) = -1 ! !/SHRD NAPROC = 1 !/SHRD IAPROC = 1 ! !/MPI IAPROC = IAPROC + 1 ! !/NCO/! IF ( IAPROC .EQ. 1 ) CALL W3TAGB & !/NCO/! ('WAVEFCST',1998,0007,0050,'NP21 ') ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 1. IO set-up ! 1.a For shell ! NDSO = 20 NDSE = 20 NDST = 20 ! !/NCO/! !/NCO/! Redo according to NCO standard and docblock !/NCO/! !/NCO NDSO = 6 !/NCO NDSE = NDSO !/NCO NDST = NDSO ! NAPOUT = 1 NAPERR = 1 ! ! 1.b For WAVEWATCH-III (See W3INIT) ! NDS( 1) = 20 NDS( 2) = 20 NDS( 3) = 20 NDS( 4) = 20 NDS( 5) = 30 NDS( 6) = 30 NDS( 7) = 31 NDS( 8) = 32 NDS( 9) = 33 NDS(10) = 35 NDS(11) = 22 NDS(12) = 23 NDS(13) = 34 ! NTRACE(1) = NDS(3) NTRACE(2) = 10 ! !/NCO/! !/NCO/! Redo according to NCO standard and docblock !/NCO/! !/NCO NDS( 1) = 51 !/NCO NDS( 2) = NDSO !/NCO NDS( 3) = NDSO !/NCO NDS( 4) = NDSO !/NCO NDS( 5) = 20 !/NCO NDS( 6) = 21 !/NCO NDS( 7) = 52 !/NCO NDS( 8) = 53 !/NCO NDS( 9) = 22 !/NCO NDS(10) = 71 !/NCO NDS(11) = 23 !/NCO NDS(12) = 54 !/NCO NDS(13) = 55 !/NCO NTRACE(1) = NDSO ! ! 5.a Wave model ! CALL W3INIT ( 1, 'ww3', NDS, NTRACE, ODAT, FLGRD, 0, X, Y, & PNAMES, IPRT, PRTFRM, -99 ) RETURN END SUBROUTINE GFSW3_INIT END MODULE GFSW3INIT gerris-snapshot-131206/modules/wavewatch/wavewatch_312.h0000644000175100017510000000555212250371171020061 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2009 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "cfortrantypes.h" /** * Initialisation of wavewatch */ extern void GFSW3INIT (void); /** * imported from w3srcemd.f90:W3SRCE * @IX,@IY: Discrete grid point counters (hopefully unused) * @IMOD: Model number (always 1) * @SPEC: Spectrum (action) in 1-D form (NK*NTH elements): INPUT/OUTPUT * @ALPHA: Nondimensional 1-D spectrum (NK) OUTPUT * @WN1: Discrete wavenumbers (NK) INPUT * @CG1: Discrete group velocities (NK) INPUT * @DEPTH: Depth INPUT * @U10ABS: Wind speed at reference height INPUT * @U10DIR: Wind direction at reference height INPUT * @USTAR: Friction velocity INPUT/OUTPUT * @USTDIR: Friction velocity direction OUTPUT (maybe model dependent?) * @EMEAN: Mean energy OUTPUT (maybe model dependent?) * @FMEAN: Mean frequency OUTPUT (maybe model dependent?) * @WMEAN: Mean wavenumber OUTPUT (maybe model dependent?) * @AMAX: Maximum energy OUTPUT * @FPI: Peak-input frequency INPUT/OUTPUT * @CD: Drag coefficient OUTPUT (maybe model dependent?) * @Z0: Roughness length OUTPUT (maybe model dependent?) * @DTDYN: Average dynamic time step OUTPUT * @FCUT: Cut-off frequency for tail OUTPUT * @DTG: Global time step INPUT */ extern void W3SRCE (INTEGER * IX, INTEGER * IY, INTEGER * IMOD, REAL * SPEC, REAL * ALPHA, REAL * WN1, REAL * CG1, REAL * DEPTH, REAL * U10ABS, REAL * U10DIR, REAL * USTAR, REAL * USTDIR, REAL * EMEAN, REAL * FMEAN, REAL * WMEAN, REAL * AMAX, REAL * FPI, REAL * CD, REAL * Z0, REAL * DTDYN, REAL * FCUT, REAL * DTG); gerris-snapshot-131206/modules/wavewatch/gfsad30000644000175100017510000000234612250371171016422 00000000000000#!/bin/sh # # Uses WAVEWATCH III ad3 script to compile an ".ftn" fortran file # if [ "$#" -gt '3' ] || [ "$#" -lt 1 ]; then echo "usage: gfsad3 file.ftn" 1>&2 ; exit 1 fi if test -r $HOME/.wwatch3.env; then main_dir=`awk '{if ($1 == "WWATCH3_DIR") print $2;}' < $HOME/.wwatch3.env` tmp_dir=`awk '{if ($1 == "WWATCH3_TMP") print $2;}' < $HOME/.wwatch3.env` else echo "gfsad3: Error: Wavewatch environment file '$HOME/.wwatch3.env' not found" exit 1 fi if test -f $main_dir/ftn/$1; then echo "gfsad3: Error: file '$main_dir/ftn/$1' already exists" exit 1 fi if cp $1 $main_dir/ftn; then : else echo "gfsad3: Error: could not copy $1 in '$main_dir/ftn/'" exit 1 fi PATH=$PATH:$main_dir/bin basename=`basename $1 .ftn` ad3 $basename rm -f $main_dir/ftn/$1 if test -f $tmp_dir/w3adc.err; then cat $tmp_dir/w3adc.err > /dev/stderr exit 1 fi if test -f $tmp_dir/$basename.l; then if awk -v basename=$basename 'BEGIN{FS=":| "; i = 0;}{ if ($1 == basename ".f90") i = 1; if (i == 1) print $0; }END{ exit (i == 0); }' < $tmp_dir/$basename.l > $tmp_dir/$basename.l.error; then cat $tmp_dir/$basename.l.error > /dev/stderr exit 1 fi fi mv -f $main_dir/obj/$basename.o . gerris-snapshot-131206/modules/fes2004/0000755000175100017510000000000012250371671014502 500000000000000gerris-snapshot-131206/modules/fes2004/COPYING0000644000175100017510000004311012250371171015447 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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 Library General Public License instead of this License. gerris-snapshot-131206/modules/fes2004/README0000644000175100017510000001404512250371171015301 00000000000000################################################################ # # FES2004_distribution_soft-1.0.2 # # ----------------------------------------------------------------------------------------------------------------------- # THE SOFTWARE IS DISTRIBUTED FOR THE SCIENTIC COMMUNITY WITHOUT ANY GARANTEE # ----------------------------------------------------------------------------------------------------------------------- # # Author : T. LETELLIER Legos Toulouse FRANCE # ################################################################ REQUIREMENTS : ================ 1--- You need GSL (the Gnu Scientific Library) to be installed on your computer see : http://www.gnu.org/software/gsl/ By default GSL is installed by root in the classical /usr/bin /usr/lib /usr/include some times in /usr/local/bin /usr/local/lib /usr/local/include If the installation was made made be a default user or if the configure script not found the GSL files you need to configure the environement : in bash : export PATH=$PATH:/home/user/softs/gsl/bin export CFLAGS="$CFLAGS -I/home/user/softs/gsl/include" export LDFLAGS="$LDLAGS -I/home/user/softs/gsl/lib" 2--- You need NETCDF (network Common Data Form) to be installed on your computer see : http://www.unidata.ucar.edu/software/netcdf/ By default NETCDF is installed by root in the classical /usr/bin /usr/lib /usr/include some times in /usr/local/bin /usr/local/lib /usr/local/include If the installation was made made be a default user or if the configure script not found the NETCDF files you need to configure the environement : in bash : export PATH=$PATH:/home/user/softs/netcdf/bin export CFLAGS="$CFLAGS -I/home/user/softs/netcdf/include" export LDFLAGS="$LDLAGS -I/home/user/softs/netcdf/lib" COMPILATION : ================ You just have to execute the 3 commands : ./configure make make install in the major compilation case you do not have to install this program in the system path (and also if oyu are not root you do not have the right) Then use the option --prefix=/home/user/bin/... (path that pointing to an existing directory) to the configure script example : mkdir /home/user/bin/FES2004_EXEC_DIR ./configure --prefix=/home/user/bin/FES2004_EXEC_DIR INSTALLATION : ================ The "make install" script will install 3 files the executable FES2004.exe in bin directory the header file fes2004.h in include directory the lib file libfes.a in lib directory USE FES2004.exe : =================== Usage : FES2004.exe [parameters] [option] file ... ----PARAMETERS---- : ------------------ -t [argument] Process type : extraction - prediction Note : this option can be use two times ... -s [argument] Data set for process : tide - loading Note : this option can be use two times ... -A [FILE] Necessary (with -s tide) path and filename of the --TIDE-- FES netcdf data file -B [FILE] Necessary (with -s load) path and filename of the --LOAD-- FES netcdf data file -----VARIABLE PARAMETER---- : ---------------------------- -r [value] Necessary for prediction : This is the time refence of the input file. Use : 0 --> 01Jan1950 0H00 1 --> 01Jan1958 0H00 2 --> 01Jan1985 0H00 3 --> 01Jan2000 0H00 DEFAULT is 0 ----OPTION---- : --------------- -o [file] Optionnal give a specific root output file name ----EXAMPLES---- : ---------------- 1- FES2004.exe -t extraction -s loading -B load.nc inputFILE --> extraction of the loading data in out_file.loading.extract 2- FES2004.exe -t extraction -t prediction -s tide -A tide.nc inputFILE --> extraction of the tide data in out_file.tide.extract and prediction of the tide data in out_file.tide.pred 3- FES2004.exe -t prediction -s tide -s loading -A tide.nc -B load.nc inputFILE --> prediction of both the tide and loading data in out_file.tide.pred and out_file.loading.extract 4- FES2004.exe -t prediction -A tide.nc -s tide -o my_output inputFILE --> prediction of the tide data in my_output.tide.pred 5- FES2004.exe -t prediction -s tide -A tide.nc -d /MYPATH/ inputFILE --> prediction of the tide data (FES2004.nc) found in /MYPATH/ The inputFile MUST HAVE THIS FORMAT Latitude Longitude Time Latitude Longitude Time Latitude Longitude Time Latitude Longitude Time Latitude Longitude Time Latitude Longitude Time . . . Where latitude longitude and time are double With Latitude and Longitude in degrees (-180 +180) or (0 360) and time in hours since the time reference ... For the extraction process you do not have to indicate a valid time because it is not use BUT IT MUST PRESENT USE libfes.a : =================== The libfes can be used in C and C++ language You just have to include the file fes2004.h (that prototype the prediction and extraction functions) and use the libfes2004.a the gsl gslcblas and netcdf libraries during the linking Example --- C sources #include "fes2004.h" int main() { char netcdf_filename[256]; int nb_position=600; double *lat,double *lon,double **amplitude,double **phase; int nb_CPU; //allocation rstatus=fes2004_extraction (netcdf_filename,nb_position,lat,lon,amplitude,phase,nb_CPU); } --- compilation gcc -g -IFES_Directory/include -lfes -lnetcdf -lgsl -lgslcblas -o My_own_extract.exe For the Fortran We think that the liffes.a can also be use all the parameters used for the CALL are classical and correspond to Fortran tabular But yet it was never been tested .... --- experts You can use libfes on a defined number of processors You need to uncoment the #define MULTI in the src/fes2004_kernel.c file and then recompile the lib with ./configure --prefix= ... make make install You can now use the nb_cpu parameters of the extraction and prediction functions ... It's easy gerris-snapshot-131206/modules/fes2004/fes2004_alloc.c0000644000175100017510000001166512250371171017027 00000000000000#include "fes2004_lib.h" /*####################################################*/ /* */ /* spectrum variable allocation */ /* */ /* */ /* Thierry LETELLIER 03Oct2005 */ /* */ /*####################################################*/ void alloc_tide_spectrum(spectrum_struct **spectrum ) { int nb_wave; nb_wave=NB_WAVE_IN_SPECTRUM; *spectrum=(spectrum_struct *)calloc(nb_wave,sizeof(spectrum_struct)); if(*spectrum==NULL) print_error_3("error in spectrum allocation, you may use a larger memory computer -->exit"); } /*####################################################*/ /* */ /* threads variable allocation */ /* */ /* */ /* Thierry LETELLIER 03Oct2005 */ /* */ /*####################################################*/ void alloc_prediction_threads(mega_struct *P,int CPU) { int i; for(i=0;iexit"); P[i].sec_r=gsl_vector_calloc(coef_spline); if(P[i].sec_r==NULL) print_error_3("error in threads allocation, you may use a larger memory computer or reduce the number of CPU -->exit"); P[i].sec_i=gsl_vector_calloc(coef_spline); if(P[i].sec_i==NULL) print_error_3("error in threads allocation, you may use a larger memory computer or reduce the number of CPU -->exit"); P[i].res_r=gsl_vector_calloc(coef_spline); if(P[i].res_r==NULL) print_error_3("error in threads allocation, you may use a larger memory computer or reduce the number of CPU -->exit"); P[i].res_i=gsl_vector_calloc(coef_spline); if(P[i].res_i==NULL) print_error_3("error in threads allocation, you may use a larger memory computer or reduce the number of CPU -->exit"); P[i].Perm=gsl_permutation_calloc(coef_spline); if(P[i].Perm==NULL) print_error_3("error in threads allocation, you may use a larger memory computer or reduce the number of CPU -->exit"); P[i].spectrum=calloc(36,sizeof(spectrum_struct)); if(P[i].spectrum==NULL) print_error_3("error in threads allocation, you may use a larger memory computer or reduce the number of CPU -->exit"); P[i].data_amp=malloc(56*sizeof(float)); P[i].data_phi=malloc(56*sizeof(float)); P[i].weight=malloc(4*sizeof(double)); P[i].sindice=malloc(3*sizeof(int)); P[i].aindice=malloc(10*sizeof(int)); } } /*####################################################*/ /* */ /* threads variable allocation */ /* */ /* */ /* Thierry LETELLIER 03Oct2005 */ /* */ /*####################################################*/ void alloc_extraction_threads(mega_struct *P,int CPU) { int i; for(i=0;iexit"); P[i].data_amp=malloc(56*sizeof(float)); P[i].data_phi=malloc(56*sizeof(float)); P[i].weight=malloc(4*sizeof(double)); } } /*####################################################*/ /* */ /* threads variable free */ /* */ /* */ /* Thierry LETELLIER 06Oct2005 */ /* */ /*####################################################*/ void free_threads(mega_struct *P,int CPU) { int i; for(i=0;i #include void print_error_1() { printf("error: wrong run parameters\n use: [executable] [time origine (CNES:0,CTO:1,ESA:2)] [input file] [Nb CPU dispo]\nexit"); exit(101); } void print_error_2() { printf("a strange error occur, certainly due to the memory allocation in the spectrum initialisation --> exit\n"); exit(102); } void print_error_3(char *message) { printf("%s\n",message); exit(103); } void print_error_4(char *message) { printf("%s\n",message); exit(104); } void print_error_5(char *message) { printf("can not open the file : %s , please check this error --> exit\n",message); exit(105); } gerris-snapshot-131206/modules/fes2004/fes2004_kernel.c0000644000175100017510000010717412250371171017216 00000000000000#include #include "fes2004_lib.h" //#define H_THREAD // // Uncomment this define to compile with the multithread option /*####################################################*/ /* */ /* */ /* running the multithread prediction */ /* */ /* */ /* Thierry LETELLIER 03Oct2005 */ /* */ /*####################################################*/ void multi_t_prediction(int nocycle, int CPU, mega_struct *P) { #ifdef H_THREAD pthread_t *tid; #endif int cnt,i; #ifdef H_THREAD tid=malloc(CPU*sizeof(pthread_t)); printf("starting a multithread prediction on %d processors \n",CPU); #endif cnt=0; while(cnt(nocycle-cnt))CPU=nocycle-cnt; }/* end loop on AT points*/ } /*####################################################*/ /* */ /* */ /* running the multithread extraction */ /* */ /* */ /* Thierry LETELLIER 03Oct2005 */ /* */ /*####################################################*/ void multi_t_extraction(int nocycle, int CPU, mega_struct *P) { #ifdef H_THREAD pthread_t *tid; #endif int cnt,i; #ifdef H_THREAD tid=malloc(CPU*sizeof(pthread_t)); printf("starting a multithread extraction on %d processors \n",CPU); #endif cnt=0; while(cnt(nocycle-cnt))CPU=nocycle-cnt; }/* end loop on AT points*/ } /*####################################################*/ /* */ /* */ /* the thread prediction function */ /* */ /* */ /* Thierry LETELLIER 03Oct2005 */ /* */ /*####################################################*/ void * pred_coeur(void *input) { int i,cnt; mega_struct *P; double lat,lon,decal_lat,decal_lon; size_t start[3],count[3]; int indice_y,indice_x,rstatus; double pi; double prediction; //THE FAMOUS PI pi=acos(-1.0); //simplifie the variables name P=(mega_struct *) input; cnt=P->cnt; lat=P->lat[cnt]; lon=P->lon[cnt]; //to recale lat with the indice I must : decal_lat=lat+90; if(lon<0.0) decal_lon=360.0+lon; else decal_lon=lon; //find the indice in the data tab indice_x=(int) floor( decal_lon/(RESOLUTION) ); indice_y=(int) floor( decal_lat /(RESOLUTION) ); //configure the loading parameters start[0]=0;start[1]=indice_y;start[2]=indice_x; count[0]=14;count[1]=2;count[2]=2; //load data rstatus=nc_get_vara_float(P->ncid,3,start,count,P->data_amp ); rstatus=nc_get_vara_float(P->ncid,4,start,count,P->data_phi ); //interpolation rstatus=interpolation_w_mask(decal_lon,decal_lat,indice_x,indice_y,P->weight,P->data_amp); if(rstatus==-99) { P->Otide[cnt]=MASK; return input; } //initialisation of the prediction output P->Otide[cnt]=0; //prediction for(i=0;i<4;i++) { if(P->weight[i]!=0.0) { prediction=predic_and_admit(P->data_amp,P->data_phi,i,P,lat,lon); P->Otide[cnt]+=P->weight[i]*prediction; } } return input; }/*fin de pred_coeur*/ /*####################################################*/ /* */ /* */ /* the thread prediction function */ /* */ /* */ /* Thierry LETELLIER 03Oct2005 */ /* */ /*####################################################*/ void * extract_coeur(void *input) { int i,j,cnt; mega_struct *P; double lat,lon,decal_lat,decal_lon; size_t start[3],count[3]; int indice_y,indice_x,rstatus; double pi; //THE FAMOUS PI pi=acos(-1.0); //simplifie the variables name P=(mega_struct *) input; cnt=P->cnt; lat=P->lat[cnt]; lon=P->lon[cnt]; //to recale lat with the indice I must : decal_lat=lat+90; if(lon<0.0) decal_lon=360.0+lon; else decal_lon=lon; //find the indice in the data tab indice_x=(int) floor( decal_lon/(RESOLUTION) ); indice_y=(int) floor( decal_lat /(RESOLUTION) ); //configure the loading parameters start[0]=0;start[1]=indice_y;start[2]=indice_x; count[0]=14;count[1]=2;count[2]=2; //load data rstatus=nc_get_vara_float(P->ncid,3,start,count,P->data_amp ); rstatus=nc_get_vara_float(P->ncid,4,start,count,P->data_phi ); //interpolation rstatus=interpolation_w_mask(decal_lon,decal_lat,indice_x,indice_y,P->weight,P->data_amp); if(rstatus==-99) { for(i=0;i<14;i++) { P->amplitude[cnt][i]=MASK; P->phase[cnt][i]=MASK; } return input; } //extraction for(i=0;i<14;i++) { for(j=0;j<4;j++) { if(i==4) //the M4 case// { if((P->data_amp[i*4+j]!=MASK)&&(P->data_amp[i*4+j]==MASK) ) { P->amplitude[cnt][i]=MASK; //M4 has a different Mask P->phase[cnt][i]=MASK; } //M4 has a different Mask } else { P->amplitude[cnt][i]+=P->data_amp[i*4+j]*P->weight[j]; P->phase[cnt][i]+=P->data_phi[i*4+j]*P->weight[j]; } } } return input; }/*fin de extract_coeur*/ /*####################################################*/ /* */ /* */ /* the prediction and admittance function */ /* */ /* */ /* Thierry LETELLIER 04Oct2005 */ /* */ /*####################################################*/ double predic_and_admit(float *data_amp,float *data_phi,int pt,mega_struct *P,double lat,double lon) { int i; double ampli,phase; double prediction=0; double Amp,G; for(i=0;i<14;i++) { ampli=data_amp[i*4+pt]; if(ampli==MASK) { // printf("wave %s is masked --> not inclued in prediction\n lat : %lf --- lon : %lf\n", P->spectrum[i].wave.name,lat,lon); P->spectrum[i].prediction=0; } else { phase=data_phi[i*4+pt]; //going the complex space P->spectrum[i].Z.reel=ampli*cos(phase*-1.0*3.14/180.0); P->spectrum[i].Z.imag=ampli*sin(phase*-1.0*3.14/180.0); //prediction !!!! P->spectrum[i].prediction=Tide_prediction(P->time[P->cnt],P->spectrum[i].wave,P->spectrum[i].Z,0,P->CTO); } } /*------------------------------------------------------------------------------*/ /* spline admittance coefficients for semi-diurnal tidal waves */ /*------------------------------------------------------------------------------*/ // compute_admittance(P->Mat,P->Perm,P->sec_r,P->sec_i,P->res_r,P->res_i,P->spectrum, SEMI_DIURNAL,P->sindice,P->aindice); LR, change: 2008/12/17 compute_admittance(P->Mat,P->Perm,P->sec_r,P->sec_i,P->res_r,P->res_i,P->spectrum, SEMI_DIURNAL,P->sindice,P->aindice,P->time[P->cnt]); /*------------------------------------------------------------------------------*/ /* spline admittance coefficients for diurnal tidal waves */ /*------------------------------------------------------------------------------*/ // compute_admittance(P->Mat,P->Perm,P->sec_r,P->sec_i,P->res_r,P->res_i,P->spectrum, DIURNAL,P->sindice,P->aindice); LR, change: 2008/12/17 compute_admittance(P->Mat,P->Perm,P->sec_r,P->sec_i,P->res_r,P->res_i,P->spectrum, DIURNAL,P->sindice,P->aindice,P->time[P->cnt]); /*------------------------------------------------------------------------------*/ /* spline admittance coefficients for long period tidal waves */ /*------------------------------------------------------------------------------*/ // compute_admittance(P->Mat,P->Perm,P->sec_r,P->sec_i,P->res_r,P->res_i,P->spectrum, LONG,P->sindice,P->aindice); LR, change: 2008/12/17 compute_admittance(P->Mat,P->Perm,P->sec_r,P->sec_i,P->res_r,P->res_i,P->spectrum, LONG,P->sindice,P->aindice,P->time[P->cnt]); /*------------------------------------------------------------------------------*/ /* compute prediction for Ssa tidal wave */ /*------------------------------------------------------------------------------*/ tidal_potential( P->spectrum[35].wave, lat, lon, &Amp, &G,0 ); P->spectrum[35].Z.reel=Amp*cos(G); P->spectrum[35].Z.imag=Amp*sin(G); P->spectrum[35].prediction=Tide_prediction(P->time[P->cnt],P->spectrum[34].wave,P->spectrum[34].Z,0,P->CTO); for(i=0;i<36;i++)prediction+=P->spectrum[i].prediction; return(prediction); } /*####################################################*/ /* */ /* */ /* an simple interpolation funtion */ /* */ /* it take in account the mask */ /* */ /* Thierry LETELLIER 04Oct2005 */ /* */ /*####################################################*/ int interpolation_w_mask(double lon,double lat,int indice_x,int indice_y,double *weight,float *data_amp) { int i,nb_data; int mask_true[4],redo; double surface; //DEBUG double somme; nb_data=4; //init mask_true for(i=0;i<4;i++)mask_true[i]=1; for(i=0;i<4;i++){if(data_amp [i]==MASK) {mask_true[i]=0; nb_data--; } } redo=1; while(redo==1) { switch (nb_data) { case 0 : { return(-99); break; } case 1 : { for(i=0;i<4;i++)weight[i]=1.00*mask_true[i]; redo=0; break; } case 2 : { weight[0]=geo_d_km(lon,lat,indice_x*RESOLUTION,indice_y*RESOLUTION) * mask_true[0]; weight[1]=geo_d_km(lon,lat,(indice_x+1)*RESOLUTION,indice_y*RESOLUTION) * mask_true[1]; weight[2]=geo_d_km(lon,lat,indice_x*RESOLUTION,(indice_y+1)*RESOLUTION) * mask_true[2]; weight[3]=geo_d_km(lon,lat,(indice_x+1)*RESOLUTION,(indice_y+1)*RESOLUTION) * mask_true[3]; redo=0; break; } case 3 : { surface=RESOLUTION*RESOLUTION; somme=( (indice_x+1)*RESOLUTION - lon )*((indice_y+1)*RESOLUTION - lat); if(somme==0){mask_true[0]=0;nb_data--;break;} weight[0]=surface*somme; somme=( lon - indice_x*RESOLUTION )*((indice_y+1)*RESOLUTION - lat); if(somme==0){mask_true[0]=0;nb_data--;break;} weight[1]=surface*somme; somme=( (indice_x+1)*RESOLUTION - lon )*(lat - indice_y*RESOLUTION); if(somme==0){mask_true[0]=0;nb_data--;break;} weight[2]=surface*somme; somme=( lon - indice_x*RESOLUTION )*(lat - indice_y*RESOLUTION); if(somme==0){mask_true[0]=0;nb_data--;break;} weight[3]=surface*somme; redo=0; break; } case 4 : { surface=RESOLUTION*RESOLUTION; somme=( (indice_x+1)*RESOLUTION - lon )*((indice_y+1)*RESOLUTION - lat); if(somme==0){mask_true[0]=0;nb_data--;break;} weight[0]=surface*somme; somme=( lon - indice_x*RESOLUTION )*((indice_y+1)*RESOLUTION - lat); if(somme==0){mask_true[0]=0;nb_data--;break;} weight[1]=surface*somme; somme=( (indice_x+1)*RESOLUTION - lon )*(lat - indice_y*RESOLUTION); if(somme==0){mask_true[0]=0;nb_data--;break;} weight[2]=surface*somme; somme=( lon - indice_x*RESOLUTION )*(lat - indice_y*RESOLUTION); if(somme==0){mask_true[0]=0;nb_data--;break;} weight[3]=surface*somme; redo=0; break; } } } surface=weight[0]+weight[1]+weight[2]+weight[3]; weight[0]/=surface; weight[1]/=surface; weight[2]/=surface; weight[3]/=surface; //DEBUG somme=weight[0]+weight[1]+weight[2]+weight[3]; return(0); } /*####################################################*/ /* */ /* */ /* compute the admittance to extend */ /* the prediction spectrum */ /* */ /* Thierry LETELLIER 04Oct2005 */ /* */ /*####################################################*/ void compute_admittance(gsl_matrix *Mat,gsl_permutation *Perm,gsl_vector *sec_r,gsl_vector *sec_i,gsl_vector *res_r,gsl_vector *res_i,spectrum_struct *spectrum,int GROUPE,int *sindice ,int *aindice, double time) { int i,n,gsl_out; double d2r,tau; int signum; double omega; int nb; d2r=pi/180.0; tau=2*24; n=0; init_admittance_coeff(sindice,aindice,&nb,GROUPE); for(i=0;i<3;i++) { omega=pulsation(spectrum[sindice[i]].wave); gsl_matrix_set(Mat,n,0,cos(tau*omega*d2r)*spectrum[sindice[i]].wave.Ap); gsl_matrix_set(Mat,n,1,sin(tau*omega*d2r)*spectrum[sindice[i]].wave.Ap); gsl_matrix_set(Mat,n,2,spectrum[sindice[i]].wave.Ap); gsl_vector_set(sec_r,n,spectrum[sindice[i]].Z.reel); gsl_vector_set(sec_i,n,spectrum[sindice[i]].Z.imag); n++; } gsl_out=gsl_linalg_LU_decomp(Mat,Perm,&signum); gsl_out=gsl_linalg_LU_solve(Mat,Perm,sec_r,res_r); gsl_out=gsl_linalg_LU_solve(Mat,Perm,sec_i,res_i); for(i=0;i 0 */ date_t date58= { 1, 1, 1958, 0.0};/* LR: 21/07/2003, -43200 -> 0 */ date_t date50= { 1, 1, 1950, 0.0};/* LR: 21/07/2003, -43200 -> 0 */ date_t date85= { 1, 1, 1985, 0.0};/* LR: 21/07/2003, -43200 -> 0 */ date_t date2000= { 1, 1, 2000, 0.0};/* LR: 21/07/2003, -43200 -> 0 */ date_t date; double tj; switch (CTO) { case(0): {date =date50;break;} case(1): {date =date58;break;} case(2): {date =date85;break;} case(3): {date =date2000;break;} default: {printf("error in time reference, exit\n");exit(22);} } N= julian_day(date.month,date.day,date.year) -julian_day(t_schureman.month,t_schureman.day,t_schureman.year); /* number of day elapsed between 1950 and 1900 (CNES Time and SCHUREMAN Time) */ /*or number of day elapsed between 1958 and 1900 (CTO Time and SCHUREMAN Time) */ /*or number of day elapsed between 1985 and 1900 (ESA Time and SCHUREMAN Time) */ tj=((double) N + first_time/(double) 24.) /(double) 36525.0; astronomic_angle(tj,verbose,astro_ang); } /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ void astronomic_angle(double tj, int verbose, astro_ang_struct *astro_ang) /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ /*---------------------------------------------------------------------- tj is time elapsed since 1st January 1900, 0 hour, counted in julian century (e.g. time in days divide by 36525) ----------------------------------------------------------------------*/ { double dtr,days,tt; date_t actual; double cosI,p,q; double t2,t4,sin2I,s2; double tgI2,P; double sh_tgn2,at1,at2; pi=acos(-1.0); dtr=pi/180.0; /*---------------------------------------------------------------------- Sh_n Longitude of ascending lunar node ----------------------------------------------------------------------*/ astro_ang->sh_N=(259.1560563 -1934.1423972 *tj)*dtr; /*---------------------------------------------------------------------- T mean solar angle (Greenwhich time) ----------------------------------------------------------------------*/ days=36525.0*tj; astro_ang->sh_T=((days - (int)days)*24.0*15.0+180.0)*dtr; /*---------------------------------------------------------------------- h mean solar Longitude ----------------------------------------------------------------------*/ astro_ang->sh_h=(280.1895015 +36000.76892 *tj)*dtr; /*---------------------------------------------------------------------- s mean lunar Longitude ----------------------------------------------------------------------*/ astro_ang->sh_s=(277.0256206 +481267.892 *tj)*dtr; /*---------------------------------------------------------------------- p1 Longitude of solar perigee ----------------------------------------------------------------------*/ astro_ang->sh_p1=(281.2208568 +1.719175 *tj)*dtr; /*---------------------------------------------------------------------- p Longitude of lunar perigee ----------------------------------------------------------------------*/ astro_ang->sh_p=(334.3837214 +4069.0322056 *tj)*dtr; astro_ang->sh_N =fmod(astro_ang->sh_N ,2*pi); astro_ang->sh_s =fmod(astro_ang->sh_s ,2*pi); astro_ang->sh_h =fmod(astro_ang->sh_h, 2*pi); astro_ang->sh_p =fmod(astro_ang->sh_p, 2*pi); astro_ang->sh_p1=fmod(astro_ang->sh_p1,2*pi); cosI=0.913694997 -0.035692561 *cos(astro_ang->sh_N); astro_ang->sh_I=acos(cosI); sin2I=sin(astro_ang->sh_I); sh_tgn2=tan(astro_ang->sh_N/2.0); at1=atan(1.01883*sh_tgn2); at2=atan(0.64412*sh_tgn2); astro_ang->sh_xi=-at1-at2+astro_ang->sh_N; if (astro_ang->sh_N > pi) astro_ang->sh_xi=astro_ang->sh_xi-2.0*pi; astro_ang->sh_nu=at1-at2; /*---------------------------------------------------------------------- For constituents l2 k1 k2 ----------------------------------------------------------------------*/ tgI2=tan(astro_ang->sh_I/2.0); P=astro_ang->sh_p-astro_ang->sh_xi; t2=tgI2*tgI2; t4=t2*t2; astro_ang->sh_x1ra=sqrt(1.0-12.0*t2*cos(2.0*P)+36.0*t4); p=sin(2.0*P); q=1.0/(6.0*t2)-cos(2.0*P); astro_ang->sh_R=atan(p/q); p=sin(2.0*astro_ang->sh_I)*sin(astro_ang->sh_nu); q=sin(2.0*astro_ang->sh_I)*cos(astro_ang->sh_nu)+0.3347; astro_ang->sh_nuprim=atan(p/q); s2=sin(astro_ang->sh_I)*sin(astro_ang->sh_I); p=s2*sin(2.0*astro_ang->sh_nu); q=s2*cos(2.0*astro_ang->sh_nu)+0.0727; astro_ang->sh_nusec=0.5*atan(p/q); tt=(tj*36525.-18262)*24; getcnesdate(tt,&actual); if (verbose) { printf ("%d/%d/%d \n",actual.day,actual.month,actual.year); printf ("s: %f h: %f p: %f p1: %f \n",astro_ang->sh_s/dtr,astro_ang->sh_h/dtr,astro_ang->sh_p/dtr,astro_ang->sh_p1/dtr); printf ("I: %f N: %f \n",astro_ang->sh_I/dtr,astro_ang->sh_N/dtr); } } /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ double greenwhich_argument(tidal_wave w,astro_ang_struct *astro_ang) /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ /*---------------------------------------------------------------------- Returns the phase of the tidal potential relative to the Greenwhich meridian (e.g. the position of the fictuous celestial body). Units are radian. ----------------------------------------------------------------------*/ { double V0; V0=astro_ang->sh_T*w.nT+astro_ang->sh_s*w.ns+astro_ang->sh_h*w.nh+astro_ang->sh_p*w.np+astro_ang->sh_p1*w.np1+w.shift*deg_to_rad; V0=fmod(V0,pi2); return(V0); } /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ double nodal_phase(tidal_wave w,astro_ang_struct *astro_ang) /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ /*---------------------------------------------------------------------- Returns the phase correction u due to nodal motion. Units are radian. ----------------------------------------------------------------------*/ { double u; u=astro_ang->sh_xi*w.nksi+astro_ang->sh_nu*w.nnu0+astro_ang->sh_nuprim*w.nnu1+astro_ang->sh_nusec*w.nnu2+astro_ang->sh_R*w.R; return(u); } /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ int julian_day(int mm,int id,int iyyy) /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ /*----------------------------------------------------------------------- tides_julianday routine returns the julian day number which begins at noon of the calendar date specified by month mm, day id, and year iyyy. positive year signifies a.d.; negative, b.c. (remember that the year after 1 b.c. was 1 a.d. this routine has been lifted directly from the book press et al., numerical recipes, cambridge univ. press, 1986. routine handles changeover to gregorian calendar on oct. 15, 1582. note: to get the corresponding modified julian day, set mjd = julday - 2400001. f77 to C: 7/10/2001 (Thierry) -----------------------------------------------------------------------*/ { int igreg=15+31*(10+12*1582); int jy,jm,ja, tmp_iyyy; double temp_tides_juliandays = 0.; tmp_iyyy=iyyy; if (tmp_iyyy != 0) /* if (tmp_iyyy == 2000) printf("Probleme avec le passage a l annee 2000"); */ /* else */ { if (tmp_iyyy < 0) tmp_iyyy = tmp_iyyy + 1; if (mm > 2) { jy = tmp_iyyy; jm = mm + 1; } else { jy = tmp_iyyy - 1; jm = mm + 13; } temp_tides_juliandays=floor(365.25*jy)+floor(30.6001*jm)+id+1720995; if(id+31*(mm+12*tmp_iyyy) >= igreg) { ja=floor(0.01*jy); temp_tides_juliandays=temp_tides_juliandays+2-ja+floor(0.25*ja); } }/*else*/ return(temp_tides_juliandays); }/*end*/ /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ double nodal_factort(int formula, astro_ang_struct *astro_ang) /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ { double s,f=0.; switch (formula) { /* formule 0, solar waves */ case 0: f=1.0; break; /* formule 1, compound waves (78 x 78)*/ case 1: f=nodal_factort(78,astro_ang)*nodal_factort(78,astro_ang); break; /* formule 2, compound waves (78 x 0) === (78)*/ case 2: f=nodal_factort(78,astro_ang)*nodal_factort(0,astro_ang); break; /* formule 4, compound waves (78 x 235) */ case 4: f=nodal_factort(78,astro_ang)*nodal_factort(235,astro_ang); break; /* formule 5, compound waves (78 *78 x 235) */ case 5: f=nodal_factort(78,astro_ang)*nodal_factort(78,astro_ang)*nodal_factort(235,astro_ang); break; /* formule 6, compound waves (78 *78 x 0) */ case 6: f=nodal_factort(78,astro_ang)*nodal_factort(78,astro_ang)*nodal_factort(0,astro_ang); break; /* formule 7, compound waves (75 x 75)*/ case 7: f=nodal_factort(75,astro_ang)*nodal_factort(75,astro_ang); break; /* formule 8, compound waves (78 x 0 x 235) */ case 8: f=nodal_factort(78,astro_ang)*nodal_factort(0,astro_ang)*nodal_factort(235,astro_ang); break; /* formule 9, compound waves (78 x 0 x 227) */ case 9: f=nodal_factort(78,astro_ang)*nodal_factort(0,astro_ang)*nodal_factort(227,astro_ang); break; /* formule 10, compound waves (78 x 227) */ case 10: f=nodal_factort(78,astro_ang)*nodal_factort(227,astro_ang); break; /* formule 11, compound waves (75 x 0) */ case 11: f=nodal_factort(75,astro_ang)*nodal_factort(0,astro_ang); break; /* formule 12, compound waves (78 x 78 x 78 x 0) */ case 12: f=nodal_factort(78,astro_ang)*nodal_factort(78,astro_ang)*nodal_factort(78,astro_ang)*nodal_factort(0,astro_ang); break; /* formule 13, compound waves (78 x 75)*/ case 13: f=nodal_factort(78,astro_ang)*nodal_factort(75,astro_ang); break; /* formule 14, compound waves (235 x 0) === (235)*/ case 14: f=nodal_factort(235,astro_ang)*nodal_factort(0,astro_ang); break; /* formule 15, compound waves (235 x 75) */ case 15: f=nodal_factort(235,astro_ang)*nodal_factort(75,astro_ang); break; /* formule 16, compound waves (78 x 0 x 0) === (78)*/ case 16: f=nodal_factort(78,astro_ang)*nodal_factort(0,astro_ang)*nodal_factort(0,astro_ang); break; /* formule 17, compound waves (227 x 0) */ case 17: f=nodal_factort(227,astro_ang)*nodal_factort(0,astro_ang); break; /* formule 18, compound waves (78 x 78 x 78 ) */ case 18: f=nodal_factort(78,astro_ang)*nodal_factort(78,astro_ang)*nodal_factort(78,astro_ang); break; /* formule 19, compound waves (78 x 0 x 0 x 0) === (78)*/ case 19: f=nodal_factort(78,astro_ang)*nodal_factort(0,astro_ang)*nodal_factort(0,astro_ang); break; /* formule 73 */ case 73: s=sin(astro_ang->sh_I); f=(2./3.-s*s)/0.5021; break; /* formule 74 */ case 74: s=sin(astro_ang->sh_I); f=s*s/0.1578; break; /* formule 75 */ case 75: s=cos (astro_ang->sh_I/2); f=sin (astro_ang->sh_I)*s*s/0.3800; break; /* formule 76 */ case 76: f=sin (2*astro_ang->sh_I)/0.7214; break; /* formule 77 */ case 77: s=sin (astro_ang->sh_I/2); f=sin (astro_ang->sh_I)*s*s/0.0164; break; /* formule 78 */ case 78: s=cos (astro_ang->sh_I/2); f=s*s*s*s/0.9154; break; /* formule 79 */ case 79: s=sin(astro_ang->sh_I); f=s*s/0.1565; break; /* formule 144 */ case 144: s=sin (astro_ang->sh_I/2); f=(1-10*s*s+15*s*s*s*s)*cos(astro_ang->sh_I/2)/0.5873; break; /* formule 149 */ case 149: s=cos (astro_ang->sh_I/2); f=s*s*s*s*s*s/0.8758; break; /* formule 215 */ case 215: s=cos (astro_ang->sh_I/2); f=s*s*s*s/0.9154*astro_ang->sh_x1ra; break; /* formule 227 */ case 227: s=sin (2*astro_ang->sh_I); f=sqrt (0.8965*s*s+0.6001*s*cos (astro_ang->sh_nu)+0.1006); break; /* formule 235 */ case 235: s=sin (astro_ang->sh_I); f=sqrt (19.0444*s*s*s*s+2.7702*s*s*cos (2*astro_ang->sh_nu)+.0981); break; default: exit (1); } return(f); } /*-----------------------------------------------------------------------*/ void calendary(int njd,date_t *actual) /*-----------------------------------------------------------------------*/ { int njul,nj,nb,nm1,nj3,m,j,ndj; int na,nm,nd; int n[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; /*----------------------------------------------------------------------- ! Input = njd: nombre ecoules depuis le 1er Janvier 1950, 0 heure ! Output= nd,nm,na: jour, mois annee calendaire !-----------------------------------------------------------------------*/ njul=njd+1; na=njul/365; nj=njul-na*365; nb=(na+1)/ 4; nj=nj-nb; if (nj > 0) goto a1; na=na+1949; nm=12; nd=nj+31; goto a9000; a1: j=na-2-nb*4; na=na+1950; if (j < 0) goto a5000; if (60-nj < 0) goto a4500; if (60-nj == 0) goto a7000; goto a5000; a4500: nm1=60; m=3; goto a6000; a5000: nm1=0; m=1; a6000: ndj=nm1+n[m-1]; nj3=nj-ndj; if (nj3 <= 0) goto a8000; m=m+1; nm1=ndj; goto a6000; a7000: nm=2; nd=29; goto a9000; a8000: nm=m; nd=nj-nm1; a9000: actual->year=na; actual->month=nm; actual->day=nd; actual->second=0; } /*-------------------------------------------*/ void getcnesdate(double t,date_t *actual) /*-------------------------------------------*/ { int nday; float second; /* t is time elapsed from 1/1/1950 in hours */ nday=floor(t/24.0); calendary(nday,actual); second=(t-nday*24)*3600.; actual->second=second; } /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ double pulsation( tidal_wave wave) /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ /* redundant with tide_wavearray_initC */ { double scale=36525*24.0; double omega; double omega_T= 13149000.0; double omega_s= 481267.892; double omega_h= 36000.76892; double omega_p= 4069.0322056; double omega_p1= 1.719175; omega = omega_T * wave.nT + omega_s * wave.ns + omega_h * wave.nh + omega_p * wave.np + omega_p1* wave.np1; omega /= scale; return(omega); } /*--------------------------------------------------------------------------------*/ void tidal_potential(tidal_wave wave,double lat,double lon, double *Amp, double *G,int terrestre) /*--------------------------------------------------------------------------------*/ { float k2=0.3,h2=0.6; double C,S,a,dV,pi,dtr; pi=acos(-1.0); dtr=pi/180.0; if (terrestre) a=wave.Ap*h2; else a=wave.Ap*(1+k2-h2); switch (wave.nT) { case (0): /*######################### Long period tide ######################### potential/g = A*(1/2 -3/2 sin^2(Y)*cos(w*t+V0) dP/dx= 0 dP/dy= -3*A*cos(Y)sin(Y)*cos(w*t+V0) ----------------------------------------------------------------------*/ dV=0.0; C=cos(lat*dtr); S=sin(lat*dtr); *Amp = a*(0.5-1.5*S*S)/100; *G = -dV*dtr; break; case (1): /*########################### Diurnal tide ########################### potential/g = A*sin(2Y)*cos(w*t+V0+X) ----------------------------------------------------------------------*/ dV=lon; C=cos(lat*dtr); S=sin(lat*dtr); *Amp = 2*a*S*C/100; *G = -dV*dtr; break; case (2): /*######################### Semi-diurnal tide ######################### potential/g = A*cos^2(Y)*cos(w*t+V0+2*X) ----------------------------------------------------------------------*/ dV=2*lon; C=cos(lat*dtr); S=sin(lat*dtr); *Amp = a*C*C/100; *G = -dV*dtr; break; /*####################### non-astronomical tide ####################### potential/g = 0 ----------------------------------------------------------------------*/ default: break; }/*end switch */ }/* end*/ gerris-snapshot-131206/modules/fes2004/ChangeLog0000644000175100017510000000000012250371171016155 00000000000000gerris-snapshot-131206/modules/fes2004/Makefile.in0000644000175100017510000005747412250371207016503 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/fes2004 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ AUTHORS COPYING ChangeLog NEWS ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libfes_la_LIBADD = am_libfes_la_OBJECTS = libfes_la-fes2004_alloc.lo \ libfes_la-fes2004_error.lo libfes_la-fes2004_extraction.lo \ libfes_la-fes2004_init.lo libfes_la-fes2004_io.lo \ libfes_la-fes2004_prediction.lo libfes_la-fes2004_kernel.lo libfes_la_OBJECTS = $(am_libfes_la_OBJECTS) libfes_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libfes_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_TIDE_TRUE@am_libfes_la_rpath = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libfes_la_SOURCES) DIST_SOURCES = $(libfes_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ @BUILD_TIDE_TRUE@TIDE = libfes.la noinst_LTLIBRARIES = $(TIDE) libfes_la_CFLAGS = $(AM_CFLAGS) $(GSL_CFLAGS) libfes_la_SOURCES = \ fes2004_alloc.c \ fes2004_error.c \ fes2004_extraction.c \ fes2004_init.c \ fes2004_io.c \ fes2004_prediction.c \ fes2004_kernel.c \ fes.h \ fes2004_lib.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/fes2004/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/fes2004/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libfes.la: $(libfes_la_OBJECTS) $(libfes_la_DEPENDENCIES) $(EXTRA_libfes_la_DEPENDENCIES) $(libfes_la_LINK) $(am_libfes_la_rpath) $(libfes_la_OBJECTS) $(libfes_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfes_la-fes2004_alloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfes_la-fes2004_error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfes_la-fes2004_extraction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfes_la-fes2004_init.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfes_la-fes2004_io.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfes_la-fes2004_kernel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfes_la-fes2004_prediction.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< libfes_la-fes2004_alloc.lo: fes2004_alloc.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -MT libfes_la-fes2004_alloc.lo -MD -MP -MF $(DEPDIR)/libfes_la-fes2004_alloc.Tpo -c -o libfes_la-fes2004_alloc.lo `test -f 'fes2004_alloc.c' || echo '$(srcdir)/'`fes2004_alloc.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libfes_la-fes2004_alloc.Tpo $(DEPDIR)/libfes_la-fes2004_alloc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fes2004_alloc.c' object='libfes_la-fes2004_alloc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -c -o libfes_la-fes2004_alloc.lo `test -f 'fes2004_alloc.c' || echo '$(srcdir)/'`fes2004_alloc.c libfes_la-fes2004_error.lo: fes2004_error.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -MT libfes_la-fes2004_error.lo -MD -MP -MF $(DEPDIR)/libfes_la-fes2004_error.Tpo -c -o libfes_la-fes2004_error.lo `test -f 'fes2004_error.c' || echo '$(srcdir)/'`fes2004_error.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libfes_la-fes2004_error.Tpo $(DEPDIR)/libfes_la-fes2004_error.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fes2004_error.c' object='libfes_la-fes2004_error.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -c -o libfes_la-fes2004_error.lo `test -f 'fes2004_error.c' || echo '$(srcdir)/'`fes2004_error.c libfes_la-fes2004_extraction.lo: fes2004_extraction.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -MT libfes_la-fes2004_extraction.lo -MD -MP -MF $(DEPDIR)/libfes_la-fes2004_extraction.Tpo -c -o libfes_la-fes2004_extraction.lo `test -f 'fes2004_extraction.c' || echo '$(srcdir)/'`fes2004_extraction.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libfes_la-fes2004_extraction.Tpo $(DEPDIR)/libfes_la-fes2004_extraction.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fes2004_extraction.c' object='libfes_la-fes2004_extraction.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -c -o libfes_la-fes2004_extraction.lo `test -f 'fes2004_extraction.c' || echo '$(srcdir)/'`fes2004_extraction.c libfes_la-fes2004_init.lo: fes2004_init.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -MT libfes_la-fes2004_init.lo -MD -MP -MF $(DEPDIR)/libfes_la-fes2004_init.Tpo -c -o libfes_la-fes2004_init.lo `test -f 'fes2004_init.c' || echo '$(srcdir)/'`fes2004_init.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libfes_la-fes2004_init.Tpo $(DEPDIR)/libfes_la-fes2004_init.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fes2004_init.c' object='libfes_la-fes2004_init.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -c -o libfes_la-fes2004_init.lo `test -f 'fes2004_init.c' || echo '$(srcdir)/'`fes2004_init.c libfes_la-fes2004_io.lo: fes2004_io.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -MT libfes_la-fes2004_io.lo -MD -MP -MF $(DEPDIR)/libfes_la-fes2004_io.Tpo -c -o libfes_la-fes2004_io.lo `test -f 'fes2004_io.c' || echo '$(srcdir)/'`fes2004_io.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libfes_la-fes2004_io.Tpo $(DEPDIR)/libfes_la-fes2004_io.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fes2004_io.c' object='libfes_la-fes2004_io.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -c -o libfes_la-fes2004_io.lo `test -f 'fes2004_io.c' || echo '$(srcdir)/'`fes2004_io.c libfes_la-fes2004_prediction.lo: fes2004_prediction.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -MT libfes_la-fes2004_prediction.lo -MD -MP -MF $(DEPDIR)/libfes_la-fes2004_prediction.Tpo -c -o libfes_la-fes2004_prediction.lo `test -f 'fes2004_prediction.c' || echo '$(srcdir)/'`fes2004_prediction.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libfes_la-fes2004_prediction.Tpo $(DEPDIR)/libfes_la-fes2004_prediction.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fes2004_prediction.c' object='libfes_la-fes2004_prediction.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -c -o libfes_la-fes2004_prediction.lo `test -f 'fes2004_prediction.c' || echo '$(srcdir)/'`fes2004_prediction.c libfes_la-fes2004_kernel.lo: fes2004_kernel.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -MT libfes_la-fes2004_kernel.lo -MD -MP -MF $(DEPDIR)/libfes_la-fes2004_kernel.Tpo -c -o libfes_la-fes2004_kernel.lo `test -f 'fes2004_kernel.c' || echo '$(srcdir)/'`fes2004_kernel.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libfes_la-fes2004_kernel.Tpo $(DEPDIR)/libfes_la-fes2004_kernel.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fes2004_kernel.c' object='libfes_la-fes2004_kernel.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfes_la_CFLAGS) $(CFLAGS) -c -o libfes_la-fes2004_kernel.lo `test -f 'fes2004_kernel.c' || echo '$(srcdir)/'`fes2004_kernel.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/modules/fes2004/NEWS0000644000175100017510000000000012250371171015102 00000000000000gerris-snapshot-131206/modules/fes2004/fes2004_extraction.c0000644000175100017510000000333412250371171020107 00000000000000#include "fes2004_lib.h" int fes2004_extraction (char *netcdf_filename,int nb_position,double *lat,double *lon,double **amplitude, double **phase,int nb_CPU) { /*####################################################*/ /* variable*/ /*####################################################*/ //classical variables int rstatus; //prediction typedef variables spectrum_struct *spectrum=NULL; mega_struct *P=NULL; /*####################################################*/ /* allocation*/ /*####################################################*/ alloc_tide_spectrum(&spectrum); P=calloc(nb_CPU,sizeof(mega_struct)); alloc_extraction_threads(P,nb_CPU); /*####################################################*/ /*init prediction spectrum*/ /*####################################################*/ rstatus=init_spectrum(spectrum,99); if (rstatus != 0 ) print_error_2(); /*####################################################*/ /* load data files*/ /*####################################################*/ load_netcdf_fes2004_data(netcdf_filename,P,nb_CPU); /*####################################################*/ /*init thread struct*/ /*####################################################*/ init_thread_struct(nb_CPU, P, 99, lat, lon, NULL, NULL, spectrum,amplitude,phase); /*####################################################*/ /*Multithreaded extraction*/ /*####################################################*/ multi_t_extraction( nb_position, nb_CPU, P); /*####################################################*/ /*free memory and exit*/ /*####################################################*/ free_threads(P,nb_CPU); free(P); return 0; }/*end*/ gerris-snapshot-131206/modules/fes2004/AUTHORS0000644000175100017510000000062312250371171015466 00000000000000 The FES2004_distribution_soft-1.0.2 was written by : Thierry LETELLIER (tletelli @ notos.cst.cnes.fr) LEGOS Toulouse FRANCE in October 2005 The FES2004_distribution_soft-1.0.2 used some functions from Aktarus library The Aktarus library was written by : Thierry LETELLIER and Laurent ROBLOU LEGOS Toulouse FRANCE in 2003 (tletelli @ notos.cst.cnes.fr) and (laurent.roblou @ noveltis.fr) gerris-snapshot-131206/modules/fes2004/fes2004_io.c0000644000175100017510000000126312250371171016335 00000000000000#include #include "fes2004_lib.h" /*####################################################*/ /* */ /* load the FES2004 data from FES2004.nc */ /* */ /* Thierry LETELLIER 03Oct2005 */ /* */ /*####################################################*/ void load_netcdf_fes2004_data(char *filename,mega_struct *P,int CPU) { int i,rstatus; for(i=0;i #include #include #include #include // standard multithread include // //#include // Gnu Scientific library include // // www.gnu.org/software/gsl/ // #include #include #include #include #include /*####################################################*/ /* */ /* constantes definitions */ /* */ /* Thierry LETELLIER 03Oct2005 */ /* */ /*####################################################*/ #define coef_spline 3 #define NB_WAVE_IN_SPECTRUM 36 #define RESOLUTION 0.125 #define SEMI_DIURNAL 1 #define DIURNAL 2 #define LONG 3 #define MASK -9999.000 /*####################################################*/ /* */ /* variables struct definitions */ /* */ /* Thierry LETELLIER 03Oct2005 */ /* */ /*####################################################*/ //wave struct contains all the tials waves parameters typedef struct { float Ap; /* specify tidal potentiel amplitude */ int nT,ns,nh,np,np1; /* specify the main wave fequency V */ int nksi,nnu0,nnu1,nnu2,R; /* specify nodal argument u */ float shift; /* specify nodal argument u */ int formula,code; /* formula index for nodal factor f + code for JMM */ double omega; /* specify pulsation, redondant with nT,ns,nh,np,np1 */ char name[10]; /* */ char spec; int admit; } tidal_wave; //simple complex definition typedef struct { float reel,imag; } fcomplex; //the struct that contains all the predicted wave parameters typedef struct { fcomplex *buffer; tidal_wave wave; fcomplex mask,Z; char PATH[256]; int rstatus, headN ,founded,CTO; double lat,lon,time, prediction; } spectrum_struct; typedef struct { double amp,phi; } wave_cst_struct; /* typedef struct */ /* { */ /* wave_cst_struct M2,M4,K1,K2,O1,P1,Q1,S2,N2,DN2,MM,MF,MTM,MSQM; */ /* wave_cst_struct NU2,MU2,L2,T2,LA2,KJ2,R2,OO1,J1,PHI1,PI1,PSI1,RO1,SIG1,TTA1,DQ1,KI1,MSM,MSF,MQM,MSTM,SSA; */ /* } fes2004_extract_struct; */ //the multithread struct typedef struct { int cnt,CTO,ncid; double *lat,*lon,*time,*Otide; spectrum_struct *spectrum; gsl_matrix *Mat; gsl_vector *sec_r,*sec_i,*res_r,*res_i; gsl_permutation *Perm; //fes2004_extract_struct *constante; double **amplitude,**phase; //allocatable variable need in the thread float *data_amp; float *data_phi; double *weight; int *sindice,*aindice; } mega_struct; typedef struct { double sh_T,sh_h,sh_s,sh_p1,sh_p; double sh_xi,sh_nu,sh_R,sh_x1ra,sh_nuprim,sh_nusec; double sh_I,sh_N; }astro_ang_struct; typedef struct { int day,month,year; /* Gregorian date (define uniquely a given day) */ float second; /* elapsed time in second from 0h00)*/ } date_t; /*####################################################*/ /* */ /* functions prototype */ /* */ /* Thierry LETELLIER 03Oct2005 */ /* */ /*####################################################*/ //fes2004_alloc.c extern void alloc_tide_spectrum(spectrum_struct ** ); extern void alloc_prediction_threads(mega_struct *,int ); extern void alloc_extraction_threads(mega_struct *,int ); extern void free_threads(mega_struct *,int ); //fes2004_extraction.c extern int fes2004_extraction (char *,int ,double *,double *,double **,double **,int ); //fes2004_prediction.c extern int fes2004_prediction (char *,int ,int ,double *,double *,double *,double *,int ); //fes2004_io.c extern void load_netcdf_fes2004_data(char *,mega_struct *,int ); //fes2004_init.c extern void in_out_file_open(char *,FILE **,FILE **); extern int init_spectrum(spectrum_struct *, int ); extern void init_thread_struct(int , mega_struct *, int ,double *,double *, double *, double *, spectrum_struct *, double ** ,double **); extern int Wave_select(int i, tidal_wave *,int ); extern void init_admittance_coeff(int *,int *,int *,int ); //fes2004_error.c extern void print_error_1() ; extern void print_error_2() ; extern void print_error_3(char *) ; extern void print_error_4(char *) ; extern void print_error_5(char *) ; //fes2004_kernel.c extern void multi_t_prediction(int , int , mega_struct *); extern void multi_t_extraction(int , int , mega_struct *); extern void * pred_coeur(void *); extern void * extract_coeur(void *); extern double predic_and_admit(float *,float *,int ,mega_struct *,double ,double ); extern int interpolation_w_mask(double ,double ,int ,int ,double *,float *); extern void compute_admittance(gsl_matrix *,gsl_permutation *,gsl_vector *,gsl_vector *,gsl_vector *,gsl_vector *,spectrum_struct *,int ,int * ,int *,double); extern double geo_d_km(double ,double ,double ,double ); //############################################################################################################################## // the next functions are a part of the Aktarus tide library developped // By Thierry LETELLIER [LEGOS] // and Laurent ROBLOU [Noveltis] // // These functions are the prediction kernel YOU DON'T NEED TO CHANGE THEM ... // ---------------------------------- // You don't have the right to use these functions in other programs than the FES2004 prediction // If you want more information please contact --- thierry.letellier@free.fr --- //############################################################################################################################## extern double Tide_prediction(double time,tidal_wave wave,fcomplex Z,int verbose,int CTO); extern void init_argument(double first_time, int verbose, int CTO,astro_ang_struct *astro_ang); extern void astronomic_angle(double tj, int verbose, astro_ang_struct *astro_ang); extern double greenwhich_argument(tidal_wave w,astro_ang_struct *astro_ang); extern double nodal_phase(tidal_wave w,astro_ang_struct *astro_ang); extern int julian_day(int mm,int id,int iyyy); extern double nodal_factort(int formula, astro_ang_struct *astro_ang); extern void calendary(int njd,date_t *actual); extern void getcnesdate(double t,date_t *actual); extern double pulsation( tidal_wave wave); extern void tidal_potential(tidal_wave wave,double lat,double lon, double *Amp, double *G,int terrestre); //############################################################################################################################## /*####################################################*/ /* */ /* waves definitions */ /* */ /* Thierry LETELLIER 03Oct2005 */ /* */ /*####################################################*/ #ifdef LIB /*----------------potentiel---T---s---h---p--p1-ksi--nu-nu1-nu2-R--shift-form-code-frq--name-spec-admit*/ tidal_wave wmean = { 0.0000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0.0, "mean",'p',999};/*LR: code=187*/ tidal_wave wSa = { 0.0000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0.0, "Sa",'p',999}; tidal_wave wSsa = { 1.9416, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0.0, "Ssa",'p',999}; tidal_wave wMm = { 2.2056, 0, +1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 73, 38, 0.0, "Mm",'p',999}; tidal_wave wMSm = { 0.3094, 0, +1, -2, +1, 0, 0, 0, 0, 0, 0, 0, 73, 41, 0.0, "MSm",'p',38};/*LR: 31/03/03 */ tidal_wave wMSf = { 0.2240, 0, +2, -2, 0, 0, 0, 0, 0, 0, 0, 0, 73, 39, 0.0, "MSf",'p',40};/*LR: 31/03/03 */ tidal_wave wMf = { 4.1765, 0, +2, 0, 0, 0, -2, 0, 0, 0, 0, 0, 74, 40, 0.0, "Mf",'p',999}; tidal_wave wMtm = { 0.8081, 0, +3, 0, -1, 0, -2, 0, 0, 0, 0, 0, 74, 42, 0.0, "Mtm",'p',999};/*LR: 24/01/02 */ tidal_wave wMqm = { 0.0000, 0, +4, 0, -2, 0, -2, 0, 0, 0, 0, 0, 74, 43, 0.0, "Mqm",'p',999}; tidal_wave wMStm = { 0.1147, 0, +3, -2, 1, 0, -2, 0, 0, 0, 0, 0, 74, 44, 0.0, "MStm",'p',42};/*LR: 31/03/03 */ tidal_wave wMSqm = { 0.0667, 0, +4, -2, 0, 0, -2, 0, 0, 0, 0, 0, 74, 45, 0.0, "MSqm",'p',999};/*LR: 24/01/02 */ /*----------------potentiel---T---s---h---p--p1-ksi--nu-nu1-nu2-R--shift-form-code-frq--name-spec-admit*/ tidal_wave wO1 = {10.0573, +1, -2, +1, 0, 0, +2, -1, 0, 0, 0, +90, 75, 1, 0.0, "O1",'p',999}; tidal_wave wQ1 = { 1.9469, +1, -3, +1, +1, 0, +2, -1, 0, 0, 0, +90, 75, 27, 0.0, "Q1",'p',999}; tidal_wave w2Q1 = { 0.2587, +1, -4, +1, +2, 0, +2, -1, 0, 0, 0, +90, 75, 67, 0.0, "2Q1",'p',999};/*LR: 24/01/02 */ tidal_wave wRo1 = { 0.3787, +1, -3, +3, -1, 0, +2, -1, 0, 0, 0, +90, 75, 69, 0.0, "Ro1",'p',999};/*LR: 24/01/02 */ tidal_wave wSig1 = { 0.1627, +1, -4, +3, 0, 0, +2, -1, 0, 0, 0, +90, 75, 68, 0.0, "Sig1",'p',999};/*LR: 24/01/02 */ tidal_wave wJ1 = { 0.7921, +1, +1, +1, -1, 0, 0, -1, 0, 0, 0, -90, 76, 29, 0.0, "J1",'p',999};/*avant s=-2*/ tidal_wave wKi1 = { 0.1120, +1, -1, +3, -1, 0, 0, -1, 0, 0, 0, -90, 76, 70, 0.0, "Ki1",'p',999};/*LR: 24/01/02 */ tidal_wave wTta1 = { 0.1120, +1, +1, -1, +1, 0, 0, -1, 0, 0, 0, -90, 76, 73, 0.0, "Tta1",'p',999};/*LR: 24/01/02 */ tidal_wave wS1 = { 0.0000, +1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0.0, "S1",'p',3};/* LR: 28/03/03 */ tidal_wave wPi1 = { 0.2747, +1, 0, -2, 0, +1, 0, 0, 0, 0, 0, +90, 0, 71, 0.0, "Pi1",'p',999}; tidal_wave wK1 = {14.1484, +1, 0, +1, 0, 0, 0, 0, -1, 0, 0, -90, 227, 3, 0.0, "K1",'p',999}; tidal_wave wP1 = { 4.6806, +1, 0, -1, 0, 0, 0, 0, 0, 0, 0, +90, 0, 2, 0.0, "P1",'p',3}; tidal_wave wPsi1 = { 0.1120, +1, 0, +2, 0, -1, 0, 0, 0, 0, 0, -90, 0, 0, 0.0, "Psi1",'p',3};/*LR: 31/03/03 */ tidal_wave wPhi1 = { 0.2027, +1, 0, +3, 0, 0, 0, 0, 0, 0, 0, -90, 0, 72, 0.0, "Phi1",'p',999};/*LR: 24/01/02 */ tidal_wave wOO1 = { 0.4347, +1, +2, +1, 0, 0, -2, -1, 0, 0, 0, -90, 77, 28, 0.0, "OO1",'p',999}; tidal_wave wMP1 = { 0.0000, +1, -2, +3, 0, 0, 0, -1, 0, 0, 0, -90, 76, 49, 0.0, "MP1",'n',999};/*LR: 2/04/02*/ tidal_wave wSO1 = { 0.0000, +1, +2, -1, 0, 0, 0, -1, 0, 0, 0, -90, 76, 48, 0.0, "SO1",'n',999};/*LR: 2/04/02*/ tidal_wave wKQ1 = { 0.0000, +1, +3, +1, -1, 0, -2, -1, 0, 0, 0, -90, 15, 76, 0.0, "KQ1",'n',999};/*LR: 2/04/02*/ tidal_wave wM1 = { 0.9788, +1, -1, +1, 0, 0, +1, -1, 0, 0, 0, 0, 144, 74, 0.0, "M1",'p',999};/*LR: 2/04/02*/ /*----------------potentiel---T---s---h---p--p1-ksi--nu-nu1-nu2-R--shift-form-code-frq--name-spec-admit*/ tidal_wave wE2 = { 0.1789, +2, -5, +4, +1, 0, +2, -2, 0, 0, 0, 0, 78, 4, 0.0, "E2",'p',5};/*LR: 2/04/02*/ tidal_wave w2N2 = { 0.6267, +2, -4, +2, +2, 0, +2, -2, 0, 0, 0, 0, 78, 5, 0.0, "2N2",'p',999}; tidal_wave wMu2 = { 0.5841, +2, -4, +4, 0, 0, +2, -2, 0, 0, 0, 0, 78, 6, 0.0, "Mu2",'p',5};/*avant p=-1*/ tidal_wave wN2 = { 4.6313, +2, -3, +2, +1, 0, +2, -2, 0, 0, 0, 0, 78, 7, 0.0, "N2",'p',999}; tidal_wave wNu2 = { 0.9094, +2, -3, +4, -1, 0, +2, -2, 0, 0, 0, 0, 78, 8, 0.0, "Nu2",'p',7}; tidal_wave wL2 = { 0.6694, +2, -1, +2, -1, 0, +2, -2, 0, 0, 1,+180, 215, 11, 0.0, "L2",'p',14}; tidal_wave wLa2 = { 0.1760, +2, -1, 0, +1, 0, +2, -2, 0, 0, 0,+180, 78, 10, 0.0, "La2",'p',999};/*LR: 24/01/02 */ tidal_wave wT2 = { 0.6614, +2, 0, -1, 0, +1, 0, 0, 0, 0, 0, 0, 0, 12, 0.0, "T2",'p',14};/*LR: 31/03/03 */ tidal_wave wS2 = {11.2734, +2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0.0, "S2",'p',999}; tidal_wave wM2 = {24.2297, +2, -2, +2, 0, 0, +2, -2, 0, 0, 0, 0, 78, 9, 0.0, "M2",'p',999}; tidal_wave wK2 = { 3.0697, +2, 0, +2, 0, 0, 0, 0, 0, -2, 0, 0, 235, 14, 0.0, "K2",'p',13};/*LR: 06/06/04 */ tidal_wave wKJ2 = { 0.1707, +2, +1, +2, -1, 0, 0, 0, 0, -2, 0, 0, 79, 77, 0.0, "KJ2",'n',999};/*LR: 24/01/02 */ tidal_wave wR2 = { 0.0933, +2, 0, +1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 50, 0.0, "R2",'p',14};/*LR: 31/03/03 */ tidal_wave wOQ2 = { 0.0000, +2, -5, +2, +1, 0, 0, 0, 0, 0, 0,+180, 7, 51, 0.0, "OQ2",'n',999};/*LR: 2/04/02*/ tidal_wave w2MK2 = { 0.0000, +2, +4, +2, 0, 0, 4, -4, 0, +2, 0, 0, 5, 65, 0.0, "2MK2",'n',999};/*LR: 2/04/02*/ tidal_wave wMSK2 = { 0.0000, +2, -2, 0, 0, 0, +2, -2, 0, +2, 0, 0, 8, 31, 0.0, "MSK2",'n',999};/*LR: 2/04/02*/ tidal_wave wMSN2 = { 0.0000, +2, +1, 0, +1, 0, +2, -2, 0, +2, 0, 0, 6, 15, 0.0, "MSN2",'n',999};/*LR: 2/04/02*/ tidal_wave w2SM2 = { 0.0000, +2, +2, -2, 0, 0, -2, +2, 0, 0, 0, 0, 16, 16, 0.0, "2SM2",'n',999};/*LR: 2/04/02*/ tidal_wave wM_SK_2={ 0.0000, +2, -2, +1, 0, 0, +2, -2, 1, 0, 0, +90, 9, 37, 0.0, "M(SK)2",'n',999};/*LR: 2/04/02*/ tidal_wave wM_KS_2={ 0.0000, +2, -2, +3, 0, 0, +2, -2, -1, 0, 0, -90, 9, 36, 0.0, "M(KS)2",'n',999};/*LR: 2/04/02*/ tidal_wave wMKS2 = { 0.0000, +2, -2, +4, 0, 0, -2, -2, 0, 0, 0, 0, 8, 30, 0.0, "MKS2",'n',999};/*LR: 2/04/02*/ tidal_wave wOP2 = { 0.0000, +2, -2, 0, 0, 0, +2, -1, 0, 0, 0,+180, 11,100, 0.0, "OP2",'n',999};/*LR: 2/04/02*/ tidal_wave wMNS2 = { 0.0000, +2, -5, +4, +1, 0, +4, -4, 0, 0, 0, 0, 6,101, 0.0, "MNS2",'n',999};/*LR: 24/01/02 */ /*----------------potentiel---T---s---h---p--p1-ksi--nu-nu1-nu2-R--shift-form-code-frq--name-spec-admit*/ tidal_wave wM3 = { 0.4747, +3, -3, +3, 0, 0, +3, -3, 0, 0, 0, 0, 1, 34, 0.0, "M3",'n',999};/*LR: 24/01/02 */ tidal_wave wS3 = { 0.0000, +3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 35, 0.0, "S3",'n',999};/*LR: 2/04/02*/ tidal_wave w2MK3 = { 0.0000, +3, -4, +3, 0, 0, +4, -4, +1, 0, 0, +90, 10, 25, 0.0, "2MK3",'n',999};/*LR: 2/04/02*/ tidal_wave wSO3 = { 0.0000, +3, -2, +1, 0, 0, +2, -1, 0, 0, 0, +90, 11, 53, 0.0, "SO3",'n',999};/*LR: 2/04/02*/ tidal_wave wMK3 = { 0.0000, +3, -2, +3, 0, 0, +2, -2, -1, 0, 0, -90, 10, 24, 0.0, "MK3",'n',999};/*LR: 2/04/02*/ tidal_wave wSK3 = { 0.0000, +3, 0, +1, 0, 0, 0, 0, -1, 0, 0, -90, 17, 54, 0.0, "SK3",'n',999};/*LR: 2/04/02*/ tidal_wave wMO3 = { 0.0000, +3, -4, +1, 0, 0, +2, -2, 0, 0, 0, +90, 13,102, 0.0, "MO3",'n',999};/*LR: 2/04/02*/ /*----------------potentiel---T---s---h---p--p1-ksi--nu-nu1-nu2-R--shift-form-code-frq--name-spec-admit*/ tidal_wave wN4 = { 0.0000, +4, -6, +4, +2, 0, +4, -4, 0, 0, 0, 0, 1, 33, 0.0, "N4",'n',999}; tidal_wave wM4 = { 0.0000, +4, -4, +4, 0, 0, +4, -4, 0, 0, 0, 0, 1, 18, 0.0, "M4",'n',999}; tidal_wave wS4 = { 0.0000, +4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0.0, "S4",'n',999}; tidal_wave wMN4 = { 0.0000, +4, -5, +4, 1, 0, +4, -4, 0, 0, 0, 0, 1, 17, 0.0, "MN4",'n',999}; tidal_wave wMS4 = { 0.0000, +4, -2, +2, 0, 0, +2, -2, 0, 0, 0, 0, 2, 19, 0.0, "MS4",'n',999}; tidal_wave wMK4 = { 0.0000, +4, -2, +4, 0, 0, +2, -2, 0, -2, 0, 0, 4, 20, 0.0, "MK4",'n',999}; tidal_wave wSN4 = { 0.0000, +4, -3, +2, +1, 0, +2, -2, 0, 0, 0, 0, 2, 55, 0.0, "SN4",'n',999};/*LR: 29/03/02 */ tidal_wave w3MS4 = { 0.0000, +4, -6, +6, 0, 0, +6, -6, 0, 0, 0, 0, 12, 58, 0.0, "3MS4",'n',999};/*LR: 29/03/02 */ tidal_wave wSK4 = { 0.0000, +4, 0, +2, 0, 0, 0, 0, 0, -2, 0, 0, 14,103, 0.0, "SK4",'n',999}; /*----------------potentiel---T---s---h---p--p1-ksi--nu-nu1-nu2-R--shift-form-code-frq--name-spec-admit*/ tidal_wave wM6 = { 0.0000, +6, -6, +6, 0, 0, +6, -6, 0, 0, 0, 0, 18, 22, 0.0, "M6",'n',999}; tidal_wave w2MN6 = { 0.0000, +6, -7, +6, 1, 0, +6, -6, 0, 0, 0, 0, 18, 21, 0.0, "2MN6",'n',999}; tidal_wave w2MS6 = { 0.0000, +6, -4, +4, 0, 0, +4, -4, 0, 0, 0, 0, 6, 59, 0.0, "2MS6",'n',999}; tidal_wave w2MK6 = { 0.0000, +6, -4, +6, 0, 0, +4, -4, 0, -2, 0, 0, 5, 60, 0.0, "2MK6",'n',999}; tidal_wave wMSN6 = { 0.0000, +6, -5, +4, +1, 0, +4, -4, 0, 0, 0, 0, 6, 23, 0.0, "MSN6",'n',999};/*LR: 29/03/02 */ tidal_wave w2SM6 = { 0.0000, +6, -2, +2, 0, 0, +2, -2, 0, 0, 0, 0, 16,104, 0.0, "2SM6",'n',999};/*LR: 2/04/02*/ tidal_wave wMSK6 = { 0.0000, +6, -2, +4, 0, 0, +2, -2, 0, -2, 0, 0, 8,105, 0.0, "MSK6",'n',999};/*LR: 2/04/02*/ /*----------------potentiel---T---s---h---p--p1-ksi--nu-nu1-nu2-R--shift-form-code-frq--name-spec-admit*/ tidal_wave w3MS8 = { 0.0000, +8, -6, +6, 0, 0, +6, -6, 0, 0, 0, 0, 19, 61, 0.0, "3MS8",'n',999};/*LR: 2/04/02*/ /*----------------potentiel---T---s---h---p--p1-ksi--nu-nu1-nu2-R--shift-form-code-frq--name-spec-admit*/ tidal_wave wRH5 = { 0.0000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 3.0, "RH5",'a',999}; /*----------------potentiel---T---s---h---p--p1--ksi-nu-nu1-nu2-shift-form-code-frq--name-linear*/ tidal_wave wNUL = {0.0000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0.0, "NUL",'p',999}; /*TL: 08/06/2004*/ double pi = 3.14159265358979323844; double pi2 = 3.14159265358979323844*2.; double deg_to_rad = 3.14159265358979323844/180.; #else extern tidal_wave wmean; extern tidal_wave wSa ; extern tidal_wave wSsa ; extern tidal_wave wMm ; extern tidal_wave wMSm ; extern tidal_wave wMSf ; extern tidal_wave wMf ; extern tidal_wave wMtm ; extern tidal_wave wMqm ; extern tidal_wave wMStm ; extern tidal_wave wMSqm ; extern tidal_wave wO1 ; extern tidal_wave wQ1 ; extern tidal_wave w2Q1 ; extern tidal_wave wRo1 ; extern tidal_wave wSig1 ; extern tidal_wave wJ1 ; extern tidal_wave wKi1 ; extern tidal_wave wTta1 ; extern tidal_wave wS1 ; extern tidal_wave wPi1 ; extern tidal_wave wK1 ; extern tidal_wave wP1 ; extern tidal_wave wPsi1 ; extern tidal_wave wPhi1 ; extern tidal_wave wOO1 ; extern tidal_wave wMP1 ;/*LR: 2/04/02*/ extern tidal_wave wSO1 ;/*LR: 2/04/02*/ extern tidal_wave wKQ1 ;/*LR: 2/04/02*/ extern tidal_wave wM1 ;/*LR: 2/04/02*/ extern tidal_wave wE2 ; extern tidal_wave w2N2 ; extern tidal_wave wMu2 ; extern tidal_wave wN2 ; extern tidal_wave wNu2 ; extern tidal_wave wM2 ; extern tidal_wave wL2 ; extern tidal_wave wLa2 ; extern tidal_wave wT2 ; extern tidal_wave wS2 ; extern tidal_wave wK2 ; extern tidal_wave wKJ2 ; extern tidal_wave wR2 ; extern tidal_wave wOQ2 ;/*LR: 2/04/02*/ extern tidal_wave w2MK2 ;/*LR: 2/04/02*/ extern tidal_wave wMSK2 ;/*LR: 2/04/02*/ extern tidal_wave wMSN2 ;/*LR: 2/04/02*/ extern tidal_wave w2SM2 ;/*LR: 2/04/02*/ extern tidal_wave wM_SK_2 ;/*LR: 2/04/02*/ extern tidal_wave wM_KS_2;/*LR: 2/04/02*/ extern tidal_wave wMKS2 ;/*LR: 2/04/02*/ extern tidal_wave wOP2 ;/*LR: 2/04/02*/ extern tidal_wave wMNS2 ;/*LR: 2/04/02*/ extern tidal_wave wM3 ; extern tidal_wave wS3 ; extern tidal_wave w2MK3 ;/*LR: 2/04/02*/ extern tidal_wave wSO3 ;/*LR: 2/04/02*/ extern tidal_wave wMK3 ;/*LR: 2/04/02*/ extern tidal_wave wSK3 ;/*LR: 2/04/02*/ extern tidal_wave wMO3 ;/*LR: 2/04/02*/ extern tidal_wave wN4 ; extern tidal_wave wM4 ; extern tidal_wave wS4 ; extern tidal_wave wMN4 ; extern tidal_wave wMS4 ; extern tidal_wave wMK4 ; extern tidal_wave wSN4 ;/*LR: 2/04/02*/ extern tidal_wave w3MS4 ;/*LR: 2/04/02*/ extern tidal_wave wSK4 ;/*LR: 2/04/02*/ extern tidal_wave wM6 ; extern tidal_wave w2MN6 ; extern tidal_wave w2MS6 ; extern tidal_wave w2MK6 ; extern tidal_wave wMSN6 ;/*LR: 29/03/02 */ extern tidal_wave w2SM6 ;/*LR: 2/04/02*/ extern tidal_wave wMSK6 ;/*LR: 2/04/02*/ extern tidal_wave w3MS8 ;/*LR: 2/04/02*/ extern tidal_wave wRH5 ; extern tidal_wave wNUL ; extern double pi; extern double pi2; extern double deg_to_rad; #endif gerris-snapshot-131206/modules/fes2004/fes2004_prediction.c0000644000175100017510000000353612250371171020073 00000000000000#include "fes2004_lib.h" int fes2004_prediction (char *netcdf_filename,int time_reference,int nb_position,double *lat,double *lon,double *time,double *prediction,int nb_CPU) { /*####################################################*/ /* variable*/ /*####################################################*/ //classical variables int rstatus; //prediction typedef variables spectrum_struct *spectrum=NULL; mega_struct *P=NULL; /*####################################################*/ /* allocation*/ /*####################################################*/ alloc_tide_spectrum(&spectrum); P=calloc(nb_CPU,sizeof(mega_struct)); alloc_prediction_threads(P,nb_CPU); /*####################################################*/ /*init prediction spectrum*/ /*####################################################*/ rstatus=init_spectrum(spectrum,time_reference); if (rstatus != 0 ) print_error_2(); /*####################################################*/ /* load data files*/ /*####################################################*/ load_netcdf_fes2004_data(netcdf_filename,P,nb_CPU); /*####################################################*/ /*init thread struct*/ /*####################################################*/ init_thread_struct(nb_CPU, P, time_reference, lat, lon, time, prediction, spectrum,NULL,NULL); /*####################################################*/ /*Multithreaded prediction*/ /*####################################################*/ multi_t_prediction(nb_position , nb_CPU, P); /*####################################################*/ /*free memory and exit*/ /*####################################################*/ free_threads(P,nb_CPU); free(P); printf("\n------------- prediction completed -------------\n"); return 0; }/*end*/ gerris-snapshot-131206/modules/fes2004/fes.h0000644000175100017510000000250712250371171015347 00000000000000 // this file is a hearder file that prototype the libfes.a functions // The inputs are : // char an string that contain the ath to load the NETCDF SOLUTION // int time reference 0->01/01/1950 1->01/01/1958 2->01/01/1985 3->01/0/2000 // int nb_position the number of point the predict and or to extract // double lat lon time 3 tabulars(nb_position) that contain the position and time for the prediction extraction // The returns are : // double prediction tabular(nb_position) that contains the prediction in meters // double amplitude phase 2 dimension tabular[nb_position][nb_wave=14] that contain the amplitude and the phase_lag extracted for each point and all waves // the int nb_cpu can be use if chachc in the source code src/fes2004_kernel.c // and activate the multithread mode ... read the end of the README file //extern int fes2004_prediction (char *netcdf_filename,int time_reference,int nb_position,double *lat,double *lon,double *time,double *prediction,int nb_CPU); //extern int fes2004_extraction (char *netcdf_filename,int nb_position,double *lat,double *lon,double **amplitude,double **phase,int nb_CPU); // prototypes extern int fes2004_prediction (char *,int ,int ,double *,double *,double *,double *,int ); extern int fes2004_extraction (char *,int ,double *,double *,double **,double **,int ); gerris-snapshot-131206/modules/particulatecommon.c0000644000175100017510000012421412250371171017230 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2009-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include "particulatecommon.h" #include "source.h" /* Forces on the Particle */ static FttVector subs_fttvectors (FttVector *a, FttVector *b) { FttVector result; FttComponent c; for(c = 0; c< FTT_DIMENSION; c++) (&result.x)[c] = (&a->x)[c] - (&b->x)[c]; return result; } /* Same as in source.c used here to obtained viscosity */ static GfsSourceDiffusion * source_diffusion_viscosity (GfsVariable * v) { if (v->sources) { GSList * i = GTS_SLIST_CONTAINER (v->sources)->items; while (i) { GtsObject * o = i->data; if (GFS_IS_SOURCE_DIFFUSION (o)) return GFS_SOURCE_DIFFUSION (o); i = i->next; } } return NULL; } /* Similar to gfs_vorticity which returns norm of the vorticity */ static void vorticity_vector (FttCell *cell, GfsVariable **v, FttVector *vort) { gdouble size; if (cell == NULL) return; if (v == NULL) return; size = ftt_cell_size (cell); #if FTT_2D vort->x = 0.; vort->y = 0.; vort->z = (gfs_center_gradient (cell, FTT_X, v[1]->i) - gfs_center_gradient (cell, FTT_Y, v[0]->i))/size; #else /* FTT_3D */ vort->x = (gfs_center_gradient (cell, FTT_Y, v[2]->i) - gfs_center_gradient (cell, FTT_Z, v[1]->i))/size; vort->y = (gfs_center_gradient (cell, FTT_Z, v[0]->i) - gfs_center_gradient (cell, FTT_X, v[2]->i))/size; vort->z = (gfs_center_gradient (cell, FTT_X, v[1]->i) - gfs_center_gradient (cell, FTT_Y, v[0]->i))/size; #endif } /* GfsForceCoeff: object */ static void gfs_force_coeff_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_force_coeff_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_force_coeff_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != '\n') { GfsForceCoeff * force = FORCE_COEFF (*o); force->coefficient = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (force->coefficient, gfs_object_simulation (*o), fp); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o)); /* fixme: "Rep", "Urelp" etc... should be derived variables not straight variables (i.e. there is no need to allocate memory for these as they are only used temporarily to compute the coefficient) */ force->re_p = gfs_domain_get_or_add_variable (domain, "Rep", "Particle Reynolds number"); force->u_rel = gfs_domain_get_or_add_variable (domain, "Urelp", "Particle x - relative velocity"); force->v_rel = gfs_domain_get_or_add_variable (domain, "Vrelp", "Particle y - relative velocity"); #if !FTT_2D force->w_rel = gfs_domain_get_or_add_variable (domain, "Wrelp", "Particle z - relative velocity"); #endif force->pdia = gfs_domain_get_or_add_variable (domain, "Pdia", "Particle radii"); } } static void gfs_force_coeff_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_force_coeff_class ())->parent_class->write) (o, fp); GfsForceCoeff * force = FORCE_COEFF (o); if (force->coefficient) gfs_function_write (force->coefficient, fp); } static void gfs_force_coeff_destroy (GtsObject * o) { if (FORCE_COEFF (o)->coefficient) gts_object_destroy (GTS_OBJECT (FORCE_COEFF (o)->coefficient)); (* GTS_OBJECT_CLASS (gfs_force_coeff_class ())->parent_class->destroy) (o); } static void gfs_force_coeff_class_init (GtsObjectClass * klass) { klass->read = gfs_force_coeff_read; klass->write = gfs_force_coeff_write; klass->destroy = gfs_force_coeff_destroy; } GtsSListContaineeClass * gfs_force_coeff_class (void) { static GtsSListContaineeClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_force_coeff_info = { "GfsForceCoeff", sizeof (GfsForceCoeff), sizeof (GtsSListContaineeClass), (GtsObjectClassInitFunc) gfs_force_coeff_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_particle_force_class ()), &gfs_force_coeff_info); } return klass; } /* GfsForceLift: object */ static FttVector compute_lift_force (GfsParticle * p, GfsParticleForce * liftforce) { GfsParticulate * particulate = GFS_PARTICULATE (p); GfsForceCoeff * coeff = FORCE_COEFF (liftforce); GfsSimulation * sim = gfs_object_simulation (particulate); GfsDomain * domain = GFS_DOMAIN (sim); FttVector force; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&force.x)[c] = 0; FttCell * cell = gfs_domain_locate (domain, p->pos, -1, NULL); if (cell == NULL) return force; gdouble fluid_rho = sim->physical_params.alpha ? 1./ gfs_function_value (sim->physical_params.alpha, cell) : 1.; GfsVariable ** u = gfs_domain_velocity (domain); gdouble viscosity = 0.; GfsSourceDiffusion * d = source_diffusion_viscosity (u[0]); if (d) viscosity = gfs_diffusion_cell (d->D, cell); FttVector fluid_vel; for (c = 0; c < FTT_DIMENSION; c++) (&fluid_vel.x)[c] = gfs_interpolate (cell, p->pos, u[c]); FttVector relative_vel = subs_fttvectors (&fluid_vel, &particulate->vel); FttVector vorticity; vorticity_vector (cell, u, &vorticity); gdouble cl = 0.5; if (coeff->coefficient) { gdouble norm_relative_vel = sqrt (relative_vel.x*relative_vel.x + relative_vel.y*relative_vel.y + relative_vel.z*relative_vel.z); gdouble dia = 2.*pow(3.0*(particulate->volume)/4.0/M_PI, 1./3.); if (viscosity == 0) { g_warning ("Viscosity is 0. cannot compute lift force on particulate\n"); g_assert_not_reached (); } gdouble Re = norm_relative_vel*dia*fluid_rho/viscosity; GFS_VALUE (cell, coeff->re_p) = Re; GFS_VALUE (cell, coeff->pdia) = dia; GFS_VALUE (cell, coeff->u_rel) = relative_vel.x; GFS_VALUE (cell, coeff->v_rel) = relative_vel.y; #if !FTT_2D GFS_VALUE (cell, coeff->w_rel) = relative_vel.z; #endif cl = gfs_function_value (coeff->coefficient, cell); } #if FTT_2D force.x = fluid_rho*cl*relative_vel.y*vorticity.z; force.y = -fluid_rho*cl*relative_vel.x*vorticity.z; #else force.x = fluid_rho*cl*(relative_vel.y*vorticity.z -relative_vel.z*vorticity.y); force.y = fluid_rho*cl*(relative_vel.z*vorticity.x -relative_vel.x*vorticity.z); force.z = fluid_rho*cl*(relative_vel.x*vorticity.y -relative_vel.y*vorticity.x); #endif return force; } static void gfs_force_lift_init (GfsParticleForce * force) { force->force = compute_lift_force; } GtsSListContaineeClass * gfs_force_lift_class (void) { static GtsSListContaineeClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_force_lift_info = { "GfsForceLift", sizeof (GfsForceCoeff), sizeof (GtsSListContaineeClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) gfs_force_lift_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_force_coeff_class ()), &gfs_force_lift_info); } return klass; } /* GfsForceDrag: object */ static FttVector compute_drag_force (GfsParticle * p, GfsParticleForce * dragforce) { GfsParticulate * particulate = GFS_PARTICULATE (p); GfsForceCoeff * coeff = FORCE_COEFF (dragforce); GfsSimulation * sim = gfs_object_simulation (particulate); GfsDomain * domain = GFS_DOMAIN (sim); FttVector force; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&force.x)[c] = 0; FttCell * cell = gfs_domain_locate (domain, p->pos, -1, NULL); if (cell == NULL) return force; gdouble fluid_rho = sim->physical_params.alpha ? 1./ gfs_function_value (sim->physical_params.alpha,cell) : 1.; GfsVariable ** u = gfs_domain_velocity (domain); gdouble viscosity = 0.; GfsSourceDiffusion * d = source_diffusion_viscosity (u[0]); if (d) viscosity = gfs_diffusion_cell (d->D, cell); FttVector fluid_vel; for (c = 0; c < FTT_DIMENSION; c++) (&fluid_vel.x)[c] = gfs_interpolate (cell, p->pos, u[c]); FttVector relative_vel = subs_fttvectors (&fluid_vel, &particulate->vel); gdouble dia = 2.*pow(3.0*(particulate->volume)/4.0/M_PI, 1./3.); #if !FTT_2D gdouble norm_relative_vel = sqrt (relative_vel.x*relative_vel.x + relative_vel.y*relative_vel.y + relative_vel.z*relative_vel.z); #else gdouble norm_relative_vel = sqrt (relative_vel.x*relative_vel.x + relative_vel.y*relative_vel.y); #endif gdouble cd = 0.; gdouble Re; if (viscosity == 0) return force; else Re = norm_relative_vel*dia*fluid_rho/viscosity; if (coeff->coefficient) { GFS_VALUE (cell, coeff->re_p) = Re; GFS_VALUE (cell, coeff->u_rel) = relative_vel.x; GFS_VALUE (cell, coeff->v_rel) = relative_vel.y; #if !FTT_2D GFS_VALUE (cell, coeff->w_rel) = relative_vel.z; #endif GFS_VALUE (cell, coeff->pdia) = dia; cd = gfs_function_value (coeff->coefficient, cell); } else { if (Re < 1e-8) return force; else if (Re < 50.0) cd = 16.*(1. + 0.15*pow(Re,0.5))/Re; else cd = 48.*(1. - 2.21/pow(Re,0.5))/Re; } for (c = 0; c < FTT_DIMENSION; c++) (&force.x)[c] += 3./(4.*dia)*cd*norm_relative_vel*(&relative_vel.x)[c]*fluid_rho; return force; } static void gfs_force_drag_init (GfsParticleForce * force) { force->force = compute_drag_force; } GtsSListContaineeClass * gfs_force_drag_class (void) { static GtsSListContaineeClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_force_drag_info = { "GfsForceDrag", sizeof (GfsForceCoeff), sizeof (GtsSListContaineeClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) gfs_force_drag_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_force_coeff_class ()), &gfs_force_drag_info); } return klass; } /* GfsForceBuoy: object */ static FttVector compute_buoyancy_force (GfsParticle * p, GfsParticleForce * buoyforce) { GfsParticulate * particulate = GFS_PARTICULATE (p); GfsSimulation * sim = gfs_object_simulation (particulate); GfsDomain * domain = GFS_DOMAIN (sim); FttVector force; FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) (&force.x)[c] = 0; FttCell * cell = gfs_domain_locate (domain, p->pos, -1, NULL); if (cell == NULL) return force; gdouble fluid_rho = sim->physical_params.alpha ? 1./ gfs_function_value (sim->physical_params.alpha, cell) : 1.; GfsVariable ** u = gfs_domain_velocity (domain); gdouble g[3]; for (c = 0; c < FTT_DIMENSION; c++) { g[c] = 0.; if (u[c]->sources) { GSList * i = GTS_SLIST_CONTAINER (u[c]->sources)->items; while (i) { if (GFS_IS_SOURCE (i->data)) { g[c] += gfs_function_value (GFS_SOURCE ((GfsSourceGeneric *) i->data)->intensity, cell); } i = i->next; } } } for (c = 0; c < FTT_DIMENSION; c++) (&force.x)[c] += (particulate->mass/particulate->volume-fluid_rho)*g[c]; return force; } static void gfs_force_buoy_init (GfsParticleForce * force) { force->force = compute_buoyancy_force; } GtsSListContaineeClass * gfs_force_buoy_class (void) { static GtsSListContaineeClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_force_buoy_info = { "GfsForceBuoy", sizeof (GfsParticleForce), sizeof (GtsSListContaineeClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) gfs_force_buoy_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_particle_force_class ()), &gfs_force_buoy_info); } return klass; } /* GfsParticleForce: object */ static void gfs_particle_force_read (GtsObject ** o, GtsFile * fp) { GtsObjectClass *klass; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (GfsParticleClass)"); return; } klass = gfs_object_class_from_name (fp->token->str); if (klass == NULL) { gts_file_error (fp, "unknown class `%s'", fp->token->str); return; } if (!gts_object_class_is_from_class (klass, gfs_particle_force_class ())) { gts_file_error (fp, "`%s' is not a GfsParticleForce", fp->token->str); return; } gts_file_next_token (fp); } static void gfs_particle_force_write (GtsObject * o, FILE * fp) { fprintf (fp, "%s", o->klass->info.name); } static void gfs_particle_force_class_init (GtsObjectClass * klass) { GTS_OBJECT_CLASS(klass)->read = gfs_particle_force_read; GTS_OBJECT_CLASS(klass)->write = gfs_particle_force_write; } GtsSListContaineeClass * gfs_particle_force_class (void) { static GtsSListContaineeClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_particle_force_info = { "GfsParticleForce", sizeof (GfsParticleForce), sizeof (GtsSListContaineeClass), (GtsObjectClassInitFunc) gfs_particle_force_class_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_slist_containee_class ()), &gfs_particle_force_info); } return klass; } /* GfsParticulate: Object */ static void compute_forces (GfsParticleForce * event, GfsParticulate * p) { FttComponent c; FttVector new_force = (event->force) (GFS_PARTICLE (p), event); FttVector total_force; for ( c = 0 ; c < FTT_DIMENSION; c++) (&total_force.x)[c] = (&new_force.x)[c]*p->volume + (&p->force.x)[c]; p->force = total_force; } static gboolean gfs_particulate_event (GfsEvent * event, GfsSimulation * sim) { GfsParticle * p = GFS_PARTICLE (event); GfsParticulate * particulate = GFS_PARTICULATE (event); if (particulate->forces == NULL) (* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_particulate_class ())->parent_class)->event) (event, sim); else { FttVector pos = p->pos; gfs_simulation_map (sim, &pos); FttComponent c; /* Velocity Verlet Algorithm */ for (c = 0; c < FTT_DIMENSION; c++) { (&pos.x)[c] += (&particulate->force.x)[c]*sim->advection_params.dt*sim->advection_params.dt /particulate->mass/2.+ (&particulate->vel.x)[c]*sim->advection_params.dt; (&particulate->vel.x)[c] += (&particulate->force.x)[c]*sim->advection_params.dt /(2.*particulate->mass); } /* Compute forces */ for (c = 0; c < FTT_DIMENSION; c++) (&particulate->force.x)[c] = 0.; gts_container_foreach (GTS_CONTAINER (particulate->forces), (GtsFunc) compute_forces, particulate); for (c = 0; c < FTT_DIMENSION; c++) (&particulate->vel.x)[c] += (&particulate->force.x)[c]*sim->advection_params.dt/(2.*particulate->mass); gfs_simulation_map_inverse (sim, &pos); p->pos = pos; } return TRUE; } static void gfs_particulate_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_particulate_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_particulate_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsParticulate * p = GFS_PARTICULATE (*o); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (mass)"); return; } p->mass = atof (fp->token->str); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (volume)"); return; } gdouble L = gfs_object_simulation (*o)->physical_params.L; // L is not correctly initialized. WHY??? // printf("L %g \n", L); p->volume = atof (fp->token->str); // p->volume /= pow(L, FTT_DIMENSION); gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (v.x)"); return; } p->vel.x = atof (fp->token->str)/L; gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (v.y)"); return; } p->vel.y = atof (fp->token->str)/L; gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (v.z)"); return; } p->vel.z = atof (fp->token->str)/L; gts_file_next_token (fp); if (fp->type == GTS_INT || fp->type == GTS_FLOAT) { p->force.x = atof (fp->token->str)/L; gts_file_next_token (fp); } if (fp->type == GTS_INT || fp->type == GTS_FLOAT) { p->force.y = atof (fp->token->str)/L; gts_file_next_token (fp); } if (fp->type == GTS_INT || fp->type == GTS_FLOAT) { p->force.z = atof (fp->token->str)/L; gts_file_next_token (fp); } } static void gfs_particulate_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_particulate_class ())->parent_class->write) (o, fp); GfsParticulate * p = GFS_PARTICULATE (o); gdouble L = gfs_object_simulation (o)->physical_params.L; //fprintf (fp, " %g %g %g %g %g", p->mass, p->volume*pow(L, FTT_DIMENSION), // p->vel.x*L, p->vel.y*L, p->vel.z*L); fprintf (fp, " %g %g %g %g %g", p->mass, p->volume, p->vel.x*L, p->vel.y*L, p->vel.z*L); fprintf (fp, " %g %g %g", p->force.x*L, p->force.y*L, p->force.z*L); } static void gfs_particulate_class_init (GfsEventClass * klass) { klass->event = gfs_particulate_event; GTS_OBJECT_CLASS (klass)->read = gfs_particulate_read; GTS_OBJECT_CLASS (klass)->write = gfs_particulate_write; } GfsEventClass * gfs_particulate_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_particulate_info = { "GfsParticulate", sizeof (GfsParticulate), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_particulate_class_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_particle_class ()), &gfs_particulate_info); } return klass; } /* GfsParticleList: Object */ static void assign_forces(GfsParticulate *particulate, GtsSListContainer *forces) { particulate->forces = forces; } static void gfs_particle_list_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_particle_list_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_particle_list_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsParticleList * p = GFS_PARTICLE_LIST (*o); GfsEventList * l = GFS_EVENT_LIST (p); if (fp->type == '{') { fp->scope_max++; gts_file_next_token (fp); while (fp->type == '\n') gts_file_next_token (fp); GfsSimulation * sim = gfs_object_simulation (*o); GtsObjectClass * klass; while (fp->type != '}') { if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a keyword (GfsParticleForce)"); break; } klass = gfs_object_class_from_name (fp->token->str); if (klass == NULL) { gts_file_error (fp, "unknown class `%s'", fp->token->str); break; } if (!gts_object_class_is_from_class (klass, gfs_particle_force_class ())) { gts_file_error (fp, "'%s' is not a GfsParticleForce", fp->token->str); break; } GtsObject * object = gts_object_new (klass); gfs_object_simulation_set (object, sim); (* klass->read) (&object, fp); if (fp->type == GTS_ERROR) { gts_object_destroy (object); break; } while (fp->type == '\n') gts_file_next_token (fp); gts_container_add (GTS_CONTAINER (p->forces), GTS_CONTAINEE (object)); } if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); } if (p->forces->items != NULL) { p->forces->items = g_slist_reverse (p->forces->items); gts_container_foreach (GTS_CONTAINER (l->list), (GtsFunc) assign_forces, p->forces); } if(fp->type == GTS_INT){ p->idlast = atoi (fp->token->str); gts_file_next_token (fp); } } static void gfs_particle_list_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_particle_list_class ())->parent_class->write) (o, fp); GfsParticleList * p = GFS_PARTICLE_LIST (o); fputs (" {\n", fp); GSList * i = p->forces->items; while (i) { fputs (" ", fp); (* GTS_OBJECT (i->data)->klass->write) (i->data, fp); fputc ('\n', fp); i = i->next; } fputc ('}', fp); fprintf (fp, " %d", p->idlast); } static void gfs_particle_list_init (GtsObject *o){ GfsParticleList * plist = GFS_PARTICLE_LIST(o); plist->forces = GTS_SLIST_CONTAINER (gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ()))); } static void gfs_particle_list_destroy (GtsObject * o) { GfsParticleList * plist = GFS_PARTICLE_LIST(o); gts_container_foreach (GTS_CONTAINER (plist->forces), (GtsFunc) gts_object_destroy, NULL); gts_object_destroy (GTS_OBJECT (plist->forces)); (* GTS_OBJECT_CLASS (gfs_particle_list_class ())->parent_class->destroy) (o); } static void gfs_particle_list_class_init (GtsObjectClass * klass) { klass->read = gfs_particle_list_read; klass->write = gfs_particle_list_write; klass->destroy = gfs_particle_list_destroy; } GfsEventClass * gfs_particle_list_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_particle_list_info = { "GfsParticleList", sizeof (GfsParticleList), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_particle_list_class_init, (GtsObjectInitFunc) gfs_particle_list_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_event_list_class ()), &gfs_particle_list_info); } return klass; } typedef struct { FttVector pos, vel; gdouble volume; } Droplets; typedef struct { GfsVariable * tag, * c, *t; Droplets * drops; GfsVariable **u; guint * sizes; guint n, min; gdouble resetval; gdouble density; GfsFunction *fc; } DropletsPar; static int greater (const void * a, const void * b) { return *((guint *)a) > *((guint *)b) ? -1 : 1; } static void reset_small_fraction (FttCell * cell, DropletsPar * p) { gint i = GFS_VALUE (cell, p->tag); if (i > 0 && p->sizes[i - 1] < p->min) GFS_VALUE (cell, p->c) = p->resetval; } static void compute_droplet_properties (FttCell * cell, DropletsPar * p) { gint i = GFS_VALUE (cell, p->tag); gdouble h = ftt_cell_size (cell), vol; FttVector pos; ftt_cell_pos (cell, &pos); GfsVariable ** u = p->u; if (i > 0) { p->sizes[i - 1]++; vol = pow (h, FTT_DIMENSION); p->drops[i-1].volume += vol*GFS_VALUE (cell, p->c); FttComponent c; for(c = 0; c < FTT_DIMENSION; c++){ (&(p->drops[i-1].pos.x))[c] += (&pos.x)[c]; (&(p->drops[i-1].vel.x))[c] += GFS_VALUE (cell,u[c]); } } } static void convert_droplets (GfsDomain * domain, DropletsPar * pars, GfsParticleList * plist) { GfsSimulation * sim = gfs_object_simulation (plist); guint i; GfsDropletToParticle * d = DROPLET_TO_PARTICLE (plist); GfsEventList * l = GFS_EVENT_LIST (plist); pars->sizes = g_malloc0 (pars->n*sizeof (guint)); pars->drops = g_malloc0 (pars->n*sizeof (Droplets)); FttComponent c; /* Initialize drops */ for (i = 0; i < pars->n; i++){ pars->drops[i].volume = 0.; pars->sizes[i] = 0; for(c = 0; c < FTT_DIMENSION; c++) { (&(pars->drops[i].pos.x))[c] = 0.; (&(pars->drops[i].vel.x))[c] = 0.; } } gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) compute_droplet_properties, pars); #ifdef HAVE_MPI if (domain->pid >= 0) { guint * sizes = g_malloc0 (pars->n*sizeof (guint)); MPI_Allreduce (pars->sizes, sizes, pars->n, MPI_UNSIGNED, MPI_SUM, MPI_COMM_WORLD); g_free (pars->sizes); pars->sizes = sizes; } #endif if (d->min >= 0) pars->min = d->min; else { guint * tmp = g_malloc (pars->n*sizeof (guint)); memcpy (tmp, pars->sizes, pars->n*sizeof (guint)); qsort (tmp, pars->n, sizeof (guint), greater); g_assert (-1 - d->min < pars->n); /* fixme: this won't work for parallel jobs */ pars->min = tmp[-1 - d->min]; g_free (tmp); } for (i = 0; i < pars->n; i++) { if (pars->sizes[i] < pars->min){ for (c = 0; c < FTT_DIMENSION; c++) { (&pars->drops[i].pos.x)[c] = (&pars->drops[i].pos.x)[c]/pars->sizes[i]; (&pars->drops[i].vel.x)[c] = (&pars->drops[i].vel.x)[c]/pars->sizes[i]; } FttCell * cell = gfs_domain_locate (domain, pars->drops[i].pos, -1, NULL); if (cell) { /* Construct an Object */ GtsObjectClass * klass = l->klass; if (klass == NULL) { gfs_error (0, "Unknown particle class\n"); return; } GtsObject * object = gts_object_new (klass); gfs_object_simulation_set (object, sim); l->list->items = g_slist_reverse (l->list->items); gts_container_add (GTS_CONTAINER (l->list), GTS_CONTAINEE (object)); l->list->items = g_slist_reverse (l->list->items); GfsEvent * list = GFS_EVENT (l); gfs_event_set (GFS_EVENT (object), list->start, list->end, list->step, list->istart, list->iend, list->istep); GfsParticulate * drop = GFS_PARTICULATE (object); GfsParticle * p = GFS_PARTICLE (drop); drop->vel = pars->drops[i].vel; p->pos = pars->drops[i].pos; drop->volume = pars->drops[i].volume; p->id = ++plist->idlast; drop->mass = sim->physical_params.alpha ? 1./ gfs_function_value (sim->physical_params.alpha, cell) : 1.; drop->mass *= drop->volume; for (c = 0; c < FTT_DIMENSION; c++) (&drop->force.x)[c] = 0.; } } } gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) reset_small_fraction, pars); g_free (pars->drops); g_free (pars->sizes); } /* GfsDropletToParticle: object */ static void compute_v (FttCell * cell, GfsRemoveDroplets * d) { GFS_VALUE (cell, d->v) = gfs_function_value (d->fc, cell); } static gboolean gfs_droplet_to_particle_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_droplet_to_particle_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsParticleList * plist = GFS_PARTICLE_LIST (event); GfsDropletToParticle *d = DROPLET_TO_PARTICLE (event); d->v = d->fc ? gfs_function_get_variable (d->fc) : d->c; DropletsPar p ; p.resetval = d->resetwith; p.tag = gfs_temporary_variable (domain); p.u = gfs_domain_velocity (domain); p.density = d->density; p.t = d->c; if (d->v){ p.c = d->v; p.n = gfs_domain_tag_droplets (domain, p.c, p.tag); if (p.n > 0 && -d->min < (gint) p.n){ p.c = d->c; convert_droplets (domain, &p, plist); } } else { d->v = gfs_temporary_variable (domain); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1, (FttCellTraverseFunc) compute_v, d); p.c = d->v; p.n = gfs_domain_tag_droplets (domain, p.c, p.tag); if (p.n > 0 && -d->min < (gint) p.n){ p.c = d->c; convert_droplets (domain, &p, plist); } gts_object_destroy (GTS_OBJECT (d->v)); } gts_object_destroy (GTS_OBJECT (p.tag)); return TRUE; } return FALSE; } static void gfs_droplet_to_particle_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_droplet_to_particle_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_droplet_to_particle_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsDropletToParticle * r = DROPLET_TO_PARTICLE (*o); GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (r)); if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (variable)"); return; } if ((r->c = gfs_variable_from_name (domain->variables, fp->token->str)) == NULL) { gts_file_error (fp, "unknown variable `%s'", fp->token->str); return; } gts_file_next_token (fp); if (fp->type == '{') { GtsFileVariable var[] = { {GTS_INT, "min", TRUE}, {GTS_DOUBLE, "reset", TRUE}, {GTS_DOUBLE, "density", TRUE}, {GTS_NONE} }; var[0].data = &r->min; var[1].data = &r->resetwith; var[2].data = &r->density; gts_file_assign_variables (fp, var); } if (fp->type != '\n') { r->fc = gfs_function_new (gfs_function_class (), 0.); gfs_function_read (r->fc, gfs_object_simulation (r), fp); } } static void gfs_droplet_to_particle_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_droplet_to_particle_class ())->parent_class->write) (o, fp); GfsDropletToParticle * r = DROPLET_TO_PARTICLE(o); fprintf (fp, " %s { min = %d reset = %g density = %g } ", r->c->name, r->min, r->resetwith, r->density); if (r->fc) gfs_function_write (r->fc, fp); } static void gfs_droplet_to_particle_destroy (GtsObject * o) { GfsDropletToParticle * drops = DROPLET_TO_PARTICLE (o); if (drops->fc) gts_object_destroy (GTS_OBJECT (drops->fc)); (* GTS_OBJECT_CLASS (gfs_droplet_to_particle_class ())->parent_class->destroy) (o); } static void gfs_droplet_to_particle_init (GfsDropletToParticle * r) { r->resetwith = 0.; r->min = 20; r->density = 1.; } static void gfs_droplet_to_particle_class_init (GfsEventClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_droplet_to_particle_event; GTS_OBJECT_CLASS (klass)->read = gfs_droplet_to_particle_read; GTS_OBJECT_CLASS (klass)->write = gfs_droplet_to_particle_write; GTS_OBJECT_CLASS (klass)->destroy = gfs_droplet_to_particle_destroy; } GfsEventClass * gfs_droplet_to_particle_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_droplet_to_particle_info = { "GfsDropletToParticle", sizeof (GfsDropletToParticle), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_droplet_to_particle_class_init, (GtsObjectInitFunc) gfs_droplet_to_particle_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_particle_list_class ()), &gfs_droplet_to_particle_info); } return klass; } /* GfsParticulateField: object */ static void voidfraction_from_particles (FttCell * cell, GfsVariable * v, GfsParticulate * part) { GFS_VALUE (cell, v) += part->volume/ftt_cell_volume (cell); } static gboolean particulate_field_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_particulate_field_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * v = GFS_VARIABLE (event); GfsParticulateField * pfield = GFS_PARTICULATE_FIELD (v); /* Reset variable */ gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_reset, v); /* Loop over the list of particles in the selected object */ GSList * i = GFS_EVENT_LIST (pfield->plist)->list->items; while (i) { FttCell * cellpart = gfs_domain_locate (domain, GFS_PARTICLE (i->data)->pos, -1, NULL); if (cellpart) pfield->voidfraction_func (cellpart, v, i->data); i = i->next; } return TRUE; } return FALSE; } static void particulate_field_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_particulate_field_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (object name)"); return; } GfsParticulateField * pfield = GFS_PARTICULATE_FIELD (*o); GtsObject * object = gfs_object_from_name (GFS_DOMAIN (gfs_object_simulation (*o)), fp->token->str); if (object == NULL) { gts_file_error (fp, "unknown object '%s'", fp->token->str); return; } if (!GFS_IS_PARTICLE_LIST (object)) { gts_file_error (fp, "object '%s' is not a GfsParticleList", fp->token->str); return; } gts_file_next_token (fp); pfield->plist = GFS_PARTICLE_LIST (object); } static void particulate_field_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_particulate_field_class ())->parent_class->write) (o, fp); fprintf (fp, " %s", GFS_EVENT (GFS_PARTICULATE_FIELD (o)->plist)->name); } static void particulate_field_class_init (GtsObjectClass * klass) { GFS_EVENT_CLASS (klass)->event = particulate_field_event; klass->read = particulate_field_read; klass->write = particulate_field_write; } static void particulate_field_init (GfsVariable * v) { v->units = -FTT_DIMENSION; GFS_PARTICULATE_FIELD (v)->voidfraction_func = voidfraction_from_particles; } GfsVariableClass * gfs_particulate_field_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_particulate_field_info = { "GfsParticulateField", sizeof (GfsParticulateField), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) particulate_field_class_init, (GtsObjectInitFunc) particulate_field_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), &gfs_particulate_field_info); } return klass; } /** \beginobject{GfsFeedParticle} */ static void add_particulate (GfsDomain * domain, GfsFeedParticle * feedp, GfsParticleList * plist) { GfsSimulation * sim = gfs_object_simulation (plist); GfsEventList * l = GFS_EVENT_LIST (plist); guint c; FttVector pos,vel; pos.x = gfs_function_value (feedp->posx, NULL); pos.y = gfs_function_value (feedp->posy, NULL); pos.z = gfs_function_value (feedp->posz, NULL); FttCell * cell = gfs_domain_locate (domain, pos, -1, NULL); if (cell) { /* Construct an Object */ GtsObjectClass * klass = l->klass; g_assert (klass); GtsObject * object = gts_object_new (klass); gfs_object_simulation_set (object, sim); l->list->items = g_slist_reverse (l->list->items); gts_container_add (GTS_CONTAINER (l->list), GTS_CONTAINEE (object)); l->list->items = g_slist_reverse (l->list->items); GfsEvent * list = GFS_EVENT (l); gfs_event_set (GFS_EVENT (object), list->start, list->end, list->step, list->istart, list->iend, list->istep); GfsParticulate * part = GFS_PARTICULATE (object); GfsParticle * p = GFS_PARTICLE (part); vel.x = gfs_function_value (feedp->velx, cell); vel.y = gfs_function_value (feedp->vely, cell); vel.z = gfs_function_value (feedp->velz, cell); part->vel = vel; p->pos = pos; part->volume = gfs_function_value (feedp->vol, cell); p->id = ++plist->idlast; part->mass = gfs_function_value (feedp->mass, cell); for (c = 0; c < FTT_DIMENSION; c++) (&part->force.x)[c] = 0.; assign_forces ( part , plist->forces); } } static gboolean gfs_feed_particle_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_feed_particle_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsParticleList * plist = GFS_PARTICLE_LIST (event); GfsFeedParticle * feedp = GFS_FEED_PARTICLE (event); gint i; guint np = gfs_function_value (feedp->np, NULL); for (i = 0; i < np; i++) add_particulate (domain, feedp, plist); return TRUE; } return FALSE; } static void gfs_feed_particle_destroy (GtsObject * o) { gts_object_destroy (GTS_OBJECT (GFS_FEED_PARTICLE (o)->np)); gts_object_destroy (GTS_OBJECT (GFS_FEED_PARTICLE (o)->posx)); gts_object_destroy (GTS_OBJECT (GFS_FEED_PARTICLE (o)->posy)); gts_object_destroy (GTS_OBJECT (GFS_FEED_PARTICLE (o)->posz)); gts_object_destroy (GTS_OBJECT (GFS_FEED_PARTICLE (o)->velx)); gts_object_destroy (GTS_OBJECT (GFS_FEED_PARTICLE (o)->vely)); gts_object_destroy (GTS_OBJECT (GFS_FEED_PARTICLE (o)->velz)); gts_object_destroy (GTS_OBJECT (GFS_FEED_PARTICLE (o)->mass)); gts_object_destroy (GTS_OBJECT (GFS_FEED_PARTICLE (o)->vol)); (* GTS_OBJECT_CLASS (gfs_feed_particle_class ())->parent_class->destroy) (o); } static void gfs_feed_particle_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_feed_particle_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_feed_particle_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsFeedParticle * feedp = GFS_FEED_PARTICLE(*o); if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } fp->scope_max++; gts_file_next_token (fp); while (fp->type != GTS_ERROR && fp->type != '}') { if (fp->type == '\n') { gts_file_next_token (fp); continue; } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a keyword"); return; } else if (!strcmp (fp->token->str, "nparts")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (feedp->np, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "xfeed")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (feedp->posx, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "yfeed")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (feedp->posy, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "zfeed")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (feedp->posz, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "velx")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (feedp->velx, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "vely")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (feedp->vely, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "velz")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (feedp->velz, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "mass")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (feedp->mass, gfs_object_simulation (*o), fp); } else if (!strcmp (fp->token->str, "volume")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (feedp->vol, gfs_object_simulation (*o), fp); } else { gts_file_error (fp, "unknown keyword `%s'", fp->token->str); return; } } if (fp->type == GTS_ERROR) return; if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); } static void gfs_feed_particle_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_feed_particle_class ())->parent_class->write) (o, fp); GfsFeedParticle * feedp = GFS_FEED_PARTICLE(o); fputs (" {\n nparts = ", fp); gfs_function_write (feedp->np, fp); fputs (" xfeed =", fp); gfs_function_write (feedp->posx, fp); fputs (" yfeed =", fp); gfs_function_write (feedp->posy, fp); fputs (" zfeed =", fp); gfs_function_write (feedp->posz, fp); fputs ("\n velx =", fp); gfs_function_write (feedp->velx, fp); fputs (" vely =", fp); gfs_function_write (feedp->vely, fp); fputs (" velz =", fp); gfs_function_write (feedp->velz, fp); fputs ("\n mass =", fp); gfs_function_write (feedp->mass, fp); fputs ("\n volume =", fp); gfs_function_write (feedp->vol, fp); fputs ("\n}", fp); } static void gfs_feed_particle_class_init (GfsEventClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_feed_particle_event; GTS_OBJECT_CLASS (klass)->destroy = gfs_feed_particle_destroy; GTS_OBJECT_CLASS (klass)->read = gfs_feed_particle_read; GTS_OBJECT_CLASS (klass)->write = gfs_feed_particle_write; } static void gfs_feed_particle_init ( GfsFeedParticle * feedp) { feedp->np = gfs_function_new (gfs_function_class (), 0.); feedp->posx = gfs_function_new (gfs_function_class (), 0.); feedp->posy = gfs_function_new (gfs_function_class (), 0.); feedp->posz = gfs_function_new (gfs_function_class (), 0.); feedp->velx = gfs_function_new (gfs_function_class (), 0.); feedp->vely = gfs_function_new (gfs_function_class (), 0.); feedp->velz = gfs_function_new (gfs_function_class (), 0.); feedp->mass = gfs_function_new (gfs_function_class (), 0.); feedp->vol = gfs_function_new (gfs_function_class (), 0.); } GfsEventClass * gfs_feed_particle_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_feed_particle_info = { "GfsFeedParticle", sizeof (GfsFeedParticle), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_feed_particle_class_init, (GtsObjectInitFunc) gfs_feed_particle_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_particle_list_class ()), &gfs_feed_particle_info); } return klass; } /** \endobject{GfsFeedParticle} */ gerris-snapshot-131206/modules/skewsymmetric.c0000644000175100017510000006020712250371171016411 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2011-2012 Daniel Fuster * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "simulation.h" #include "source.h" #include "adaptive.h" #include "output.h" #include "init.h" /* GfsSkewSymmetric: Header */ typedef struct _GfsSkewSymmetric GfsSkewSymmetric; struct _GfsSkewSymmetric { /*< private >*/ GfsSimulation parent; GfsVariable * velold[FTT_NEIGHBORS]; /*< public >*/ gdouble beta; /* parameter to define the position of the intermediate step */ GfsVariable * velfaces[FTT_NEIGHBORS]; }; #define GFS_SKEW_SYMMETRIC(obj) GTS_OBJECT_CAST (obj, \ GfsSkewSymmetric, \ gfs_skew_symmetric_class ()) #define GFS_IS_SKEW_SYMMETRIC(obj) (gts_object_is_from_class (obj, \ gfs_skew_symmetric_class ())) GfsSimulationClass * gfs_skew_symmetric_class (void); typedef struct { GfsVariable **velfaces , **velold , **u; GfsVariable *p; gdouble * dt, beta; } FaceData; typedef struct { GfsSourceDiffusion * d; GfsFunction * alpha; FaceData * fd; } DataDif; /** \beginobject{GfsSkewSymmetric} */ static void gfs_skew_symmetric_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_skew_symmetric_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; if (fp->type != '{') return; GtsFileVariable var[] = { {GTS_DOUBLE, "beta", TRUE, &GFS_SKEW_SYMMETRIC (*o)->beta}, {GTS_NONE} }; gts_file_assign_variables (fp, var); } static void gfs_skew_symmetric_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_skew_symmetric_class ())->parent_class->write) (o, fp); fprintf (fp, " { beta = %g }", GFS_SKEW_SYMMETRIC (o)->beta); } static void gfs_skew_symmetric_run (GfsSimulation * sim); static void gfs_skew_symmetric_class_init (GfsSimulationClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_skew_symmetric_read; GTS_OBJECT_CLASS (klass)->write = gfs_skew_symmetric_write; klass->run = gfs_skew_symmetric_run; } static void gfs_skew_symmetric_init (GfsSkewSymmetric * object) { object->beta = 0.05; GfsDomain * domain = GFS_DOMAIN (object); FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { gchar * name = g_strdup_printf ("Uface%d", d); gchar * descr = g_strdup_printf ("%d-component of face velocity", d); object->velfaces[d] = gfs_domain_add_variable (domain, name, descr); object->velfaces[d]->units = 1.; g_free(name); g_free(descr); name = g_strdup_printf ("Ufaceold%d", d); descr = g_strdup_printf ("%d-component of old face velocity", d); object->velold[d] = gfs_domain_add_variable (domain, name, descr); object->velold[d]->units = 1.; g_free(name); g_free(descr); } // gfs_variable_set_vector (object->velfaces, FTT_NEIGHBORS); // gfs_variable_set_vector (object->velold, FTT_NEIGHBORS); } GfsSimulationClass * gfs_skew_symmetric_class (void) { static GfsSimulationClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_skew_symmetric_info = { "GfsSkewSymmetric", sizeof (GfsSkewSymmetric), sizeof (GfsSimulationClass), (GtsObjectClassInitFunc) gfs_skew_symmetric_class_init, (GtsObjectInitFunc) gfs_skew_symmetric_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), &gfs_skew_symmetric_info); } return klass; } static void get_face_values (FttCell * cell, FaceData * fd) { GfsStateVector * s = GFS_STATE (cell); FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { FttComponent c = d/2; s->f[d].un = GFS_VALUE (cell, fd->u[c])/2.; if (ftt_cell_neighbor (cell, d)) s->f[d].un += GFS_VALUE (ftt_cell_neighbor (cell, d), fd->u[c])/2.; else s->f[d].un = 0; } } static void reset_unold (FttCell * cell, FaceData * fd) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) GFS_VALUE (cell, fd->velold[d]) = 0.; } static void initialize_unold (FttCell * cell, FaceData * fd) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) GFS_VALUE (cell, fd->velold[d]) = GFS_VALUE (cell, fd->velfaces[d]); } static void get_velfaces (FttCell * cell, FaceData * fd) { GfsStateVector * s = GFS_STATE (cell); FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { GFS_VALUE (cell, fd->velfaces[d]) = s->f[d].un; s->f[d].un = ( fd->beta + 0.5 ) * s->f[d].un - ( fd->beta - 0.5 ) * GFS_VALUE (cell, fd->velold[d]); } } static void get_cell_values (FttCell * cell, FaceData * fd) { FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) GFS_VALUE (cell, fd->u[c]) = (GFS_VALUE (cell, fd->velfaces[2*c]) + GFS_VALUE (cell, fd->velfaces[2*c + 1]))/2.; } static void advance_face_values (FttCell * cell, FaceData * fd) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) GFS_VALUE (cell, fd->velfaces[d]) = ((1.0 + fd->beta)*GFS_VALUE (cell, fd->velfaces[d]) - fd->beta*GFS_VALUE (cell, fd->velold[d])); } /* d: direction of the face required */ /* d2: cell direction with respect to cellref */ static gdouble interpolate_value_skew (FttCell * cellref, FttDirection d, FttDirection * d2, FaceData * fd) { FttCell * cell; FttComponent c = d/2; if (d2) cell = ftt_cell_neighbor (cellref, *d2); else cell = cellref; if (!cell) { /* Symmetric BC */ if ( d == (*d2) ) return -GFS_VALUE (cellref,fd->velfaces[FTT_OPPOSITE_DIRECTION(d)]); else return GFS_VALUE (cellref,fd->velfaces[d]); } if (!FTT_CELL_IS_LEAF (cell)) { FttDirection corner[FTT_DIMENSION]; FttCell * cell2; gdouble val; #if FTT_2D if ( d == (*d2) ) { FttComponent c1 = FTT_ORTHOGONAL_COMPONENT (c); corner[0]=2*c1; corner[1]=FTT_OPPOSITE_DIRECTION(*d2); cell2 = ftt_cell_child_corner(cell, corner); val = GFS_VALUE (cell2,fd->velfaces[d]); corner[0]=2*c1+1; cell2 = ftt_cell_child_corner(cell, corner); return ( val + GFS_VALUE (cell2,fd->velfaces[d]) ) / 2. ; } else { corner[0]=d; corner[1]=FTT_OPPOSITE_DIRECTION(*d2); cell2 = ftt_cell_child_corner(cell, corner); return GFS_VALUE (cell2,fd->velfaces[d]); } #else static FttComponent orthogonal[FTT_DIMENSION][2] = { {FTT_Y, FTT_Z}, {FTT_X, FTT_Z}, {FTT_X, FTT_Y} }; val = 0.; gint i,j; if ( d == (*d2) ) { FttVector pc; ftt_cell_pos (cell, &pc); corner[0]=FTT_OPPOSITE_DIRECTION(*d2); for ( i = 0; i < 2; i++ ) { for ( j = 0; i < 2; i++ ) { corner[1]=2*orthogonal[c][0]+i; corner[2]=2*orthogonal[c][1]+j; cell2 = ftt_cell_child_corner(cell, corner); val += GFS_VALUE (cell2,fd->velfaces[d]); } } return val / 4.; } else { corner[0]=FTT_OPPOSITE_DIRECTION(*d2); corner[1]=d; FttComponent c2 = (*d2) / 2; if ( c != orthogonal[c2][0] ) c2 = orthogonal[c2][0]; else c2 = orthogonal[c2][1]; for ( i = 0; i < 2; i++ ) { corner[2]=2*c2+i; cell2 = ftt_cell_child_corner(cell, corner); val += GFS_VALUE (cell2,fd->velfaces[d]); } return val / 2.; } #endif } else { if ( ftt_cell_level(cell) == ftt_cell_level(cellref) || d == (*d2) ) return GFS_VALUE (cell,fd->velfaces[d]); else { FttVector pos_next, pos_ref; ftt_cell_pos (cellref, &pos_ref); ftt_cell_pos (cell, &pos_next); if ( ( (&(pos_ref.x))[c] < (&(pos_next.x))[c] && (d % 2) != 0 ) || ( (&(pos_ref.x))[c] > (&(pos_next.x))[c] && (d % 2) == 0 ) ) return GFS_VALUE (cell,fd->velfaces[d]); else return ( GFS_VALUE (cell,fd->velfaces[d]) + GFS_VALUE (cell,fd->velfaces[FTT_OPPOSITE_DIRECTION(d)]) ) / 2; } } } /* b Adaptative boolean */ static gdouble transverse_advection (FttCell * cell, FttComponent oc, FttDirection d, gdouble un, FaceData * fd, gboolean b) { gdouble uauxbot, uauxtop,size_ratio; gdouble vn, vntop, vnbot, vndiag; FttDirection daux; FttCell * cellnext = ftt_cell_neighbor (cell, d); if (!cellnext) cellnext = cell; size_ratio = ftt_cell_size (cell); if (!b) { size_ratio = ftt_cell_size (cellnext)/size_ratio; if (!FTT_CELL_IS_LEAF (cellnext)) size_ratio /= 2.; vn = interpolate_value_skew (cell,2*oc,NULL,fd); vntop = interpolate_value_skew (cell,2*oc,&d ,fd); vndiag = interpolate_value_skew (cell,2*oc+1,&d ,fd); vnbot = interpolate_value_skew (cell,2*oc+1,NULL,fd); daux = 2*oc; uauxtop = interpolate_value_skew (cell, d, &daux, fd); daux = 2*oc+1; uauxbot = interpolate_value_skew (cell, d, &daux, fd); } else { size_ratio = size_ratio/ftt_cell_size (cellnext); if (!FTT_CELL_IS_LEAF (cellnext)) size_ratio *= 2.; daux = FTT_OPPOSITE_DIRECTION(d); vn = interpolate_value_skew (cell,2*oc,&daux, fd); vntop = interpolate_value_skew (cell,2*oc,&daux, fd); vndiag = interpolate_value_skew (cell,2*oc+1,NULL,fd); vnbot = interpolate_value_skew (cell,2*oc,&daux ,fd); daux = 2*oc; uauxtop = interpolate_value_skew (cell, FTT_OPPOSITE_DIRECTION(d), &daux, fd); daux = 2*oc+1; uauxbot = interpolate_value_skew (cell, FTT_OPPOSITE_DIRECTION(d), &daux, fd); } return (uauxtop*(vn + vntop*size_ratio) - uauxbot*(vnbot + vndiag*size_ratio)) / 4.; } static void advection_term (FttCell * cell, FaceData * fd) { gdouble un, unext, unprev; FttDirection d0; for (d0 = 0; d0 < FTT_NEIGHBORS; d0++) { GfsStateVector * s = GFS_STATE (cell); FttComponent c = d0/2; FttDirection d; gboolean cond; un = GFS_VALUE (cell,fd->velfaces[d0]); if ((d0 % 2 ) != 0 ) { cond = TRUE; d = FTT_OPPOSITE_DIRECTION (d0); unext = interpolate_value_skew (cell, d, NULL , fd); unprev = interpolate_value_skew (cell, d0, &d0, fd); } else { cond = FALSE; d = d0; unext = interpolate_value_skew (cell, d, &d, fd); unprev = interpolate_value_skew (cell, FTT_OPPOSITE_DIRECTION(d), NULL, fd); } s->f[d0].v = ((un + unext)*unext - (un + unprev)*unprev) / 4.; #if FTT_2D s->f[d0].v += transverse_advection (cell, FTT_ORTHOGONAL_COMPONENT (c), d, un, fd, cond); #else /* FTT_3D */ static FttComponent orthogonal[FTT_DIMENSION][2] = { {FTT_Y, FTT_Z}, {FTT_X, FTT_Z}, {FTT_X, FTT_Y} }; s->f[d0].v += transverse_advection (cell, orthogonal[c][0], d, un, fd, cond); s->f[d0].v += transverse_advection (cell, orthogonal[c][1], d, un, fd, cond); #endif } } static gdouble get_size_next ( FttCell * cell, FttDirection d ) { FttCell * cellnext = ftt_cell_neighbor (cell, d); if (!cellnext) return ftt_cell_size (cell); gdouble size; if (!FTT_CELL_IS_LEAF (cellnext)) size = ftt_cell_size (cell) / 2.; else size = ftt_cell_size (cellnext); return size; } static gdouble transverse_diffusion (FttCell * cell, FttComponent oc, FttDirection d, gdouble un, FaceData * fd) { gdouble uaux, size, flux = 0; gint i; for ( i = 0; i < 2; i++ ) { FttDirection daux = 2*oc + i; uaux = interpolate_value_skew (cell, d, &daux, fd); size = ( ftt_cell_size (cell) + get_size_next (cell, daux) ) / 2; flux += (uaux - un) / size; } return flux; } static void diffusion_term (FttCell * cell, DataDif * data) { /* fixme: I need to account for the metric */ gdouble size, sizenext, size_ratio; gdouble un, unext, unprev; FttDirection d0; for (d0 = 0; d0 < FTT_NEIGHBORS; d0++) { FttCellFace face = gfs_cell_face(cell, d0); gdouble flux = 0.; gdouble invdens = data->alpha ? gfs_function_face_value (data->alpha, &face) : 1.; gdouble visc = gfs_diffusion_cell (data->d->D, cell); GfsStateVector * s = GFS_STATE (cell); FttDirection od = FTT_OPPOSITE_DIRECTION(d0); un = interpolate_value_skew (cell, d0, NULL, data->fd); if ((d0 % 2) != 0) { unext = interpolate_value_skew (cell, od , NULL, data->fd); unprev = interpolate_value_skew (cell, d0 , &(d0) , data->fd); sizenext = ftt_cell_size (cell); size = get_size_next (cell, d0); } else { unext = interpolate_value_skew (cell, d0, &(d0), data->fd); unprev = interpolate_value_skew (cell, od, NULL, data->fd); size = ftt_cell_size (cell); sizenext = get_size_next (cell, d0); } size_ratio = ( 1. + sizenext / size ) / 2; flux = ( (unext - un)/sizenext - (un - unprev)/size ); FttComponent c = d0/2; #if FTT_2D FttComponent oc = FTT_ORTHOGONAL_COMPONENT (c); flux += size_ratio * transverse_diffusion(cell, oc, d0, un, data->fd); #else static FttComponent orthogonal[FTT_DIMENSION][2] = { {FTT_Y, FTT_Z}, {FTT_X, FTT_Z}, {FTT_X, FTT_Y} }; flux += size_ratio * transverse_diffusion(cell, orthogonal[c][0], d0, un, data->fd); flux += size_ratio * transverse_diffusion(cell, orthogonal[c][1], d0, un, data->fd); #endif s->f[d0].v -= invdens*visc*flux; } } static void update_vel (FttCell * cell, FaceData * fd) { GfsStateVector * s = GFS_STATE (cell); gdouble size; FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { size = ( ftt_cell_size (cell) + get_size_next (cell, d) ) / 2; GFS_VALUE (cell, fd->velfaces[d]) = (GFS_VALUE (cell, fd->velfaces[d]) + fd->beta*GFS_VALUE (cell, fd->velold[d]))/(1.+fd->beta); s->f[d].un = (2*fd->beta*GFS_VALUE (cell, fd->velfaces[d]) + (0.5-fd->beta)*GFS_VALUE (cell, fd->velold[d]) - s->f[d].v*(*fd->dt)/size)/(0.5+fd->beta); GFS_VALUE (cell, fd->velold[d]) = GFS_VALUE (cell, fd->velfaces[d]); s->f[d].v = s->f[d].un; } } /* Same as in source.c used here to obtain viscosity (make it more general?) */ static GfsSourceDiffusion * source_diffusion_viscosity (GfsVariable * v) { if (v->sources) { GSList * i = GTS_SLIST_CONTAINER (v->sources)->items; while (i) { GtsObject * o = i->data; if (GFS_IS_SOURCE_DIFFUSION (o)) return GFS_SOURCE_DIFFUSION (o); i = i->next; } } return NULL; } static void correct_face_velocity (FttCell * cell) { FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { FttCellFace face = gfs_cell_face(cell, d); if (GFS_FACE_FRACTION_RIGHT (&face) != 0. && face.neighbor) { switch (ftt_face_type (&face)) { case FTT_FINE_FINE: GFS_STATE (face.neighbor)->f[FTT_OPPOSITE_DIRECTION(face.d)].un = GFS_STATE (cell)->f[face.d].un; break; case FTT_FINE_COARSE: GFS_STATE (cell)->f[face.d].un = GFS_STATE (face.neighbor)->f[FTT_OPPOSITE_DIRECTION(face.d)].un; break; default: g_assert_not_reached (); } } } } static void obtain_face_fluxes (const FttCell * cell) { FttCellChildren child; GfsStateVector * s = GFS_STATE (cell); FttDirection d; for (d = 0; d < FTT_NEIGHBORS; d++) { FttCell * neighbor = ftt_cell_neighbor (cell, d); if (neighbor) { if (!FTT_CELL_IS_LEAF (neighbor)) { gint i, n = ftt_cell_children_direction (neighbor, FTT_OPPOSITE_DIRECTION(d), &child); s->f[d].v = 0; for (i = 0; i < n; i++) if (child.c[i]) s->f[d].v += GFS_STATE (child.c[i])->f[FTT_OPPOSITE_DIRECTION(d)].v; s->f[d].v /= n; } else if ((d % 2) > 0 && ftt_cell_level(cell) == ftt_cell_level(neighbor)) s->f[d].v = GFS_STATE (neighbor)->f[FTT_OPPOSITE_DIRECTION(d)].v; } else s->f[d].v = 0; } } static void gfs_skew_symmetric_momentum (GfsSimulation * sim, FaceData * fd, GfsVariable **gmac) { GfsDomain * domain = GFS_DOMAIN (sim); FttComponent c; FttDirection d; /* it is used for implementation of viscosity (improve?) */ GfsSourceDiffusion * dif = source_diffusion_viscosity (fd->u[0]); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) advance_face_values, fd); /* boundary conditions */ for (d = 0; d < FTT_NEIGHBORS; d++) gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, fd->velfaces[d]); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) advection_term, fd); if (dif) { DataDif dd = { dif , sim->physical_params.alpha, fd }; gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) diffusion_term, &dd); } /* regularize flux at faces */ for (c = 0; c < FTT_DIMENSION; c++) gfs_domain_face_bc (domain, c, fd->u[c]); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) obtain_face_fluxes, NULL); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) update_vel, fd); gfs_velocity_face_sources (domain, fd->u, (*fd->dt), sim->physical_params.alpha, gmac); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) correct_face_velocity, NULL); } static void gfs_skew_symmetric_run (GfsSimulation * sim) { GfsVariable * p, * res = NULL, * gmac[FTT_DIMENSION]; GfsDomain * domain; GSList * i; domain = GFS_DOMAIN (sim); p = gfs_variable_from_name (domain->variables, "P"); g_assert (p); FttComponent c; for (c = 0; c < FTT_DIMENSION; c++) gmac[c] = gfs_temporary_variable (domain); gfs_variable_set_vector (gmac, FTT_DIMENSION); gfs_simulation_refine (sim); gfs_simulation_init (sim); i = domain->variables; while (i) { if (GFS_IS_VARIABLE_RESIDUAL (i->data)) res = i->data; i = i->next; } gfs_simulation_set_timestep (sim); GfsVariable ** u = gfs_domain_velocity (domain); GfsVariable ** velfaces = GFS_SKEW_SYMMETRIC(sim)->velfaces; GfsVariable ** velold = GFS_SKEW_SYMMETRIC(sim)->velold; FaceData fd = { velfaces, velold, u, p, &sim->advection_params.dt, GFS_SKEW_SYMMETRIC(sim)->beta}; if (sim->time.i == 0) { gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) reset_unold, &fd); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) get_face_values, &fd); gfs_mac_projection (domain, &sim->projection_params, sim->advection_params.dt/2., p, sim->physical_params.alpha, gmac, NULL); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) get_velfaces, &fd); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) initialize_unold, &fd); } while (sim->time.t < sim->time.end && sim->time.i < sim->time.iend) { gdouble tstart = gfs_clock_elapsed (domain->timer); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gfs_skew_symmetric_momentum (sim, &fd, gmac); gfs_mac_projection (domain, &sim->projection_params, sim->advection_params.dt/2., p, sim->physical_params.alpha, gmac, NULL); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) correct_face_velocity, NULL); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_half_do, sim); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) get_velfaces, &fd); gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) get_cell_values, &fd); gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_coarse_init, domain); gfs_simulation_adapt (sim); sim->time.t = sim->tnext; sim->time.i++; gfs_simulation_set_timestep (sim); gfs_advance_tracers (sim, sim->advection_params.dt); gts_range_add_value (&domain->timestep, gfs_clock_elapsed (domain->timer) - tstart); gts_range_update (&domain->timestep); gts_range_add_value (&domain->size, gfs_domain_size (domain, FTT_TRAVERSE_LEAFS, -1)); gts_range_update (&domain->size); } gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim); gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL); for (c = 0; c < FTT_DIMENSION; c++) gts_object_destroy (GTS_OBJECT (gmac[c])); } /** \endobject{GfsSkewSymmetric} */ /** \beginobject{GfsInitFaceValues} */ #define GFS_IS_INIT_FACE_VALUES(obj) (gts_object_is_from_class (obj, \ gfs_init_face_values_class ())) GfsGenericInitClass * gfs_init_face_values_class (void); typedef struct { GfsVariable * v[FTT_DIMENSION]; GfsFunction * f[FTT_DIMENSION]; guint n; } VarFunc; typedef struct { GfsVariable * v1, * v2; GfsFunction * f; } FaceInitData; static void init_fd (FttCellFace * face, FaceInitData * fd) { if (face->d % 2 != 0) GFS_VALUE (face->cell, fd->v2) = gfs_function_face_value (fd->f, face); else GFS_VALUE (face->cell, fd->v1) = gfs_function_face_value (fd->f, face); } static gboolean gfs_init_face_values_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_init_face_values_class ())->parent_class)->event) (event, sim)) { GSList * i = GFS_INIT (event)->f; while (i) { VarFunc * vf = i->data; FaceInitData data; FttComponent c = FTT_DIMENSION; if (!strcmp (vf->v[0]->name, "U")) { if (vf->n > 1) g_assert_not_implemented (); data.v1 = GFS_SKEW_SYMMETRIC(sim)->velfaces[0]; data.v2 = GFS_SKEW_SYMMETRIC(sim)->velfaces[1]; data.f = vf->f[0]; c = FTT_X; } else if (!strcmp (vf->v[0]->name, "V")) { data.v1 = GFS_SKEW_SYMMETRIC(sim)->velfaces[2]; data.v2 = GFS_SKEW_SYMMETRIC(sim)->velfaces[3]; data.f = vf->f[0]; c = FTT_Y; } #if (!FTT_2D) else if (!strcmp (vf->v[0]->name, "W")) { data.v1 = GFS_SKEW_SYMMETRIC(sim)->velfaces[4]; data.v2 = GFS_SKEW_SYMMETRIC(sim)->velfaces[5]; data.f = vf->f[0]; c = FTT_Z; } #endif if (c < FTT_DIMENSION) { gfs_catch_floating_point_exceptions (); gfs_domain_face_traverse (GFS_DOMAIN (sim), c, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttFaceTraverseFunc) init_fd, &data); gfs_restore_fpe_for_function (vf->f[0]); } i = i->next; } return TRUE; } return FALSE; } static void gfs_init_face_values_class_init (GfsGenericInitClass * klass) { GFS_EVENT_CLASS (klass)->event = gfs_init_face_values_event; } GfsGenericInitClass * gfs_init_face_values_class (void) { static GfsGenericInitClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsInitFaceValues", sizeof (GfsInit), sizeof (GfsGenericInitClass), (GtsObjectClassInitFunc) gfs_init_face_values_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_init_class ()), &info); } return klass; } /** \endobject{GfsInitFaceValues} */ /* Initialize module */ /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "skewsymmetric"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { gfs_skew_symmetric_class (); gfs_init_face_values_class (); return NULL; } gerris-snapshot-131206/modules/rsurface.c0000644000175100017510000000322112250371171015306 00000000000000#include #include #include #include "RStarTree/RStarTree.h" #include "rsurface.h" /* RSurface */ struct _RSurface { RSTREE t; char * name; }; RSurface * r_surface_open (const char * fname, const char * mode, int size) { RSurface * rt = malloc (sizeof (RSurface)); rt->t = NULL; if (!OpenRST (&rt->t, fname, "r")) { free (rt); return NULL; } rt->name = malloc (sizeof (char)*(strlen (fname) + 1)); strcpy (rt->name, fname); return rt; } int r_surface_close (RSurface * rt) { int status = 1; status = CloseRST (&rt->t); free (rt->name); free (rt); return status; } static boolean Intersects (RSTREE R, typrect RSTrect, typrect queryrect, typrect unused) { int maxdim= NumbOfDim -1; boolean inter; int d; d= -1; do { d++; inter= RSTrect[d].l <= queryrect[d].h && RSTrect[d].h >= queryrect[d].l; } while (inter && d != maxdim); return inter; } static void ManageQuery (RSTREE R, typrect rectangle, refinfo infoptr, void ** data, boolean *modify, boolean *finish) { RSurfaceQuery q = data[0]; double p[3]; p[0] = rectangle[0].l; p[1] = rectangle[1].l; p[2] = infoptr->height; (*q) (p, data[1]); *modify = FALSE; *finish = FALSE; } void r_surface_query_region (RSurface * rt, double min[2], double max[2], RSurfaceQuery q, void * user_data) { typrect rect, unused; rect[0].l = min[0]; rect[0].h = max[0]; rect[1].l = min[1]; rect[1].h = max[1]; void * data[2]; data[0] = q; data[1] = user_data; RegionQuery (rt->t, rect, unused, Intersects, Intersects, (QueryManageProc) ManageQuery, data); } gerris-snapshot-131206/modules/culvert.c0000644000175100017510000001334112250371171015164 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "river.h" #include "culvert/boyd87.h" /* GfsSourceCulvert: Header */ typedef struct _GfsSourceCulvert GfsSourceCulvert; struct _GfsSourceCulvert { /*< private >*/ GfsSourcePipe parent; /*< public >*/ gint entrance; gdouble B, n, ke; }; #define GFS_SOURCE_CULVERT(obj) GTS_OBJECT_CAST (obj,\ GfsSourceCulvert,\ gfs_source_culvert_class ()) #define GFS_IS_SOURCE_CULVERT(obj) (gts_object_is_from_class (obj,\ gfs_source_culvert_class ())) GfsSourceGenericClass * gfs_source_culvert_class (void); /* GfsSourceCulvert: Object */ static double box_flow_rate (double z1, double h1, /* terrain elevation and flow depth at inlet */ double z2, double h2, /* terrain elevation and flow depth at outlet */ double l, /* pipe length */ double g, /* acceleration of gravity */ GfsSourcePipe * p) { GfsSourceCulvert * c = GFS_SOURCE_CULVERT (p); if (z1 + h1 > z2 + h2) return + Q_box (h1, h2, c->B, p->diameter, c->entrance, (z1 - z2)/l, l, c->n, c->ke, g); else /* reverse flow: assume the culvert is symmetrical */ return - Q_box (h2, h1, c->B, p->diameter, c->entrance, (z2 - z1)/l, l, c->n, c->ke, g); } static double pipe_flow_rate (double z1, double h1, double z2, double h2, double l, double g, GfsSourcePipe * p) { GfsSourceCulvert * c = GFS_SOURCE_CULVERT (p); if (z1 + h1 > z2 + h2) return + Q_pipe (h1, h2, p->diameter, c->entrance, (z1 - z2)/l, l, c->n, c->ke, g); else /* reverse flow: assume the culvert is symmetrical */ return - Q_pipe (h2, h1, p->diameter, c->entrance, (z2 - z1)/l, l, c->n, c->ke, g); } static void gfs_source_culvert_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_source_culvert_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsSourceCulvert * c = GFS_SOURCE_CULVERT (*o); gchar * type = NULL; GtsFileVariable var[] = { {GTS_STRING, "type", TRUE, &type}, {GTS_INT, "entrance", TRUE, &c->entrance}, {GTS_DOUBLE, "B", TRUE, &c->B}, {GTS_DOUBLE, "n", TRUE, &c->n}, {GTS_DOUBLE, "ke", TRUE, &c->ke}, {GTS_NONE} }; gts_file_assign_variables (fp, var); if (fp->type == GTS_ERROR) return; if (type) { if (!strcmp (type, "box")) GFS_SOURCE_PIPE (c)->flow_rate = box_flow_rate; else if (!strcmp (type, "pipe")) GFS_SOURCE_PIPE (c)->flow_rate = pipe_flow_rate; else { gts_file_variable_error (fp, var, "type", "unknown culvert type '%s'", type); g_free (type); return; } g_free (type); } if (c->entrance < 1 || c->entrance > 3) gts_file_variable_error (fp, var, "entrance", "entrance type must be 1,2 or 3"); else if (GFS_SOURCE_PIPE (c)->flow_rate == pipe_flow_rate && var[2].set) gts_file_variable_error (fp, var, "B", "box width is irrelevant for a pipe culvert"); else if (c->B <= 0.) gts_file_variable_error (fp, var, "B", "box width must be greater than zero"); else if (c->n < 0.) gts_file_variable_error (fp, var, "n", "Manning coefficient must be greater than zero"); else if (c->ke < 0.) gts_file_variable_error (fp, var, "ke", "entrance loss coefficient must be greater than zero"); } static void gfs_source_culvert_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_source_culvert_class ())->parent_class->write) (o, fp); GfsSourceCulvert * c = GFS_SOURCE_CULVERT (o); if (GFS_SOURCE_PIPE (c)->flow_rate == box_flow_rate) fprintf (fp, " { type = box B = %g entrance = %d n = %g ke = %g }", c->B, c->entrance, c->n, c->ke); else fprintf (fp, " { type = pipe entrance = %d n = %g ke = %g }", c->entrance, c->n, c->ke); } static void gfs_source_culvert_class_init (GfsSourceGenericClass * klass) { GTS_OBJECT_CLASS (klass)->read = gfs_source_culvert_read; GTS_OBJECT_CLASS (klass)->write = gfs_source_culvert_write; } static void gfs_source_culvert_init (GfsSourceCulvert * c) { c->entrance = 1; c->B = 1.; c->n = 0.011; c->ke = 0.; GFS_SOURCE_PIPE (c)->flow_rate = box_flow_rate; } GfsSourceGenericClass * gfs_source_culvert_class (void) { static GfsSourceGenericClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo info = { "GfsSourceCulvert", sizeof (GfsSourceCulvert), sizeof (GfsSourceGenericClass), (GtsObjectClassInitFunc) gfs_source_culvert_class_init, (GtsObjectInitFunc) gfs_source_culvert_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_pipe_class ()), &info); } return klass; } /* Initialize module */ /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "culvert"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { gfs_source_culvert_class (); return NULL; } gerris-snapshot-131206/modules/bubbles.c0000644000175100017510000003535012250371171015122 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2010-2012 Daniel Fuster/CNRS * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "particulatecommon.h" #include "ftt.h" #include #include #include #include /* GfsBubble: Header */ typedef struct _GfsBubble GfsBubble; struct _GfsBubble { /*< private >*/ GfsParticulate parent; gdouble rliq; /*< public >*/ gdouble velR, p0, R0, vol_liq; }; #define GFS_BUBBLE(obj) GTS_OBJECT_CAST (obj, GfsBubble, gfs_bubble_class ()) #define GFS_IS_BUBBLE(obj) (gts_object_is_from_class (obj, gfs_bubble_class ())) static GfsEventClass * gfs_bubble_class (void); /* GfsBubble: Object */ /* The radius of each bubble varies according to the Rayleigh-Plesset equation */ typedef struct { gdouble liqpres, liqdens; GfsBubble * bubble; } RPData; static gdouble p_state_ec (GfsBubble * bubble, gdouble rb) { return bubble->p0*pow (bubble->R0/rb, 3.*1.4); } static int func (double t, const double y[], double f[], void * params) { RPData * rp = (RPData *) params; f[0] = y[1]; /* interface acceleration- incompressible RP equation */ gdouble pbubble = p_state_ec (rp->bubble, y[0]); f[1] = ((pbubble - rp->liqpres)/rp->liqdens - 3./2.*y[1]*y[1])/y[0]; return GSL_SUCCESS; } /* jacobian matrix */ int static jac (double t, const double y[], double *dfdy, double dfdt[], void *params) { RPData * rp = (RPData *) params; gdouble pbubble = p_state_ec (rp->bubble, y[0]); gdouble dddRdR = 2.*rp->liqpres-2.*(1. + 3.*1.4)*pbubble + 3.*rp->liqdens*y[1]*y[1]; dddRdR /= 2.*y[0]*y[0]*rp->liqdens; gsl_matrix_view dfdy_mat = gsl_matrix_view_array (dfdy, 2, 2); gsl_matrix * m = &dfdy_mat.matrix; gsl_matrix_set (m, 0, 0, 0.0); gsl_matrix_set (m, 0, 1, 1.0); gsl_matrix_set (m, 1, 0, dddRdR); gsl_matrix_set (m, 1, 1, - 3.*y[1]/y[0]); dfdt[0] = 0.0; dfdt[1] = 0.0; return GSL_SUCCESS; } static gboolean gfs_bubble_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_bubble_class ())->parent_class)->event) (event, sim)) { GfsParticle * p = GFS_PARTICLE (event); GfsParticulate * particulate = GFS_PARTICULATE (event); GfsBubble * bubble = GFS_BUBBLE (event); GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * liqpres = gfs_variable_from_name (domain->variables, "P"); FttCell * cell = gfs_domain_locate (domain, p->pos, -1, NULL); if (cell == NULL) return TRUE; gdouble liq_rho = sim->physical_params.alpha ? 1./ gfs_function_value (sim->physical_params.alpha, cell) : 1.; FttVector pos = p->pos; gfs_simulation_map (sim, &pos); gdouble point_pres = gfs_interpolate (cell, p->pos, liqpres); RPData rp = { point_pres, liq_rho, bubble }; const gsl_odeiv_step_type * T = gsl_odeiv_step_rk8pd; gsl_odeiv_step * s = gsl_odeiv_step_alloc (T, 2); gsl_odeiv_control * c = gsl_odeiv_control_y_new (1e-6, 0.0); gsl_odeiv_evolve * e = gsl_odeiv_evolve_alloc (2); gsl_odeiv_system sys = {func, jac, 2, &rp}; gdouble t = sim->time.t; gdouble t1 = t + sim->advection_params.dt; gdouble h = 1e-6; /* better criterion?? */ /* variables R, dot{R} */ gdouble y[2] = { pow(3./(4.*M_PI)*particulate->volume,1./3.) , bubble->velR }; while (t < t1) { int status = gsl_odeiv_evolve_apply (e, c, s, &sys, &t, t1, &h, y); if (status != GSL_SUCCESS) g_error ("Error in the RK method"); } gsl_odeiv_evolve_free (e); gsl_odeiv_control_free (c); gsl_odeiv_step_free (s); bubble->velR = y[1]; particulate->volume = 4./3.*M_PI*y[0]*y[0]*y[0]; return TRUE; } return FALSE; } static void gfs_bubble_read (GtsObject ** o, GtsFile * fp) { if (GTS_OBJECT_CLASS (gfs_bubble_class ())->parent_class->read) (* GTS_OBJECT_CLASS (gfs_bubble_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsBubble * p = GFS_BUBBLE (*o); GfsParticulate * part = GFS_PARTICULATE (*o); gdouble L = gfs_object_simulation (*o)->physical_params.L; p->vol_liq = 0; p->R0 = pow (part->volume*3./(4.*M_PI), 1./3.); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (radial velocity)"); return; } p->velR = atof (fp->token->str)/L; gts_file_next_token (fp); if (fp->type != GTS_INT && fp->type != GTS_FLOAT) { gts_file_error (fp, "expecting a number (reference pressure)"); return; } p->p0 = atof (fp->token->str)*L; gts_file_next_token (fp); } static void gfs_bubble_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_bubble_class ())->parent_class->write) (o, fp); GfsBubble * p = GFS_BUBBLE (o); gdouble L = gfs_object_simulation (o)->physical_params.L; fprintf (fp, " %g %g", p->velR*L, p->p0/L); } static void gfs_bubble_class_init (GfsEventClass * klass) { klass->event = gfs_bubble_event; GTS_OBJECT_CLASS (klass)->read = gfs_bubble_read; GTS_OBJECT_CLASS (klass)->write = gfs_bubble_write; } static GfsEventClass * gfs_bubble_class (void) { static GfsEventClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_bubble_info = { "GfsBubble", sizeof (GfsBubble), sizeof (GfsEventClass), (GtsObjectClassInitFunc) gfs_bubble_class_init, (GtsObjectInitFunc) NULL, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_particulate_class ()), &gfs_bubble_info); } return klass; } /* GfsBubbleFraction: header */ typedef struct _GfsBubbleFraction GfsBubbleFraction; struct _GfsBubbleFraction { /*< private >*/ GfsParticulateField parent; /*< public >*/ gdouble rliq; GfsFunction * kernel_function; }; #define GFS_BUBBLE_FRACTION(obj) GTS_OBJECT_CAST (obj, \ GfsBubbleFraction, \ gfs_bubble_fraction_class ()) #define GFS_IS_BUBBLE_FRACTION(obj) (gts_object_is_from_class (obj, \ gfs_bubble_fraction_class ())) GfsVariableClass * gfs_bubble_fraction_class (void); typedef struct { gdouble correction; GfsBubble * bubble; GfsVariable * v; GfsBubbleFraction * bf; } BubbleData; typedef struct { FttVector * pos; gdouble distance; } CondData; /** \beginobject{GfsBubbleFraction} */ /* do it more general? */ static void distance_normalization (FttVector * pos1, GfsParticulate * p) { gdouble rb = pow (3.*p->volume/(4.*M_PI), 1./3.); FttVector * pos2 = &(GFS_PARTICLE (p)->pos); pos1->x = (pos1->x - pos2->x)/rb; pos1->y = (pos1->y - pos2->y)/rb; pos1->z = 0.; #if !FTT_2D pos1->z = (pos1->z - pos2->z)/rb; #endif } static void voidfraction_from_bubbles (FttCell * cell, BubbleData * p) { FttVector pos; ftt_cell_pos (cell, &pos); distance_normalization (&pos, GFS_PARTICULATE (p->bubble)); GFS_VALUE (cell, p->v) += GFS_PARTICULATE (p->bubble)->volume* gfs_function_spatial_value (p->bf->kernel_function, &pos)/p->correction; } static void kernel_volume (FttCell * cell, BubbleData * p) { gdouble cellvol = gfs_cell_volume (cell, p->v->domain); p->bubble->vol_liq += cellvol; /* correction term to make a discretely conservative kernel */ FttVector pos; ftt_cell_pos (cell, &pos); distance_normalization (&pos, GFS_PARTICULATE (p->bubble)); p->correction += gfs_function_spatial_value (p->bf->kernel_function, &pos)*cellvol; } static gboolean cond_bubble (FttCell * cell, gpointer data) { CondData * p = data; FttVector pos; ftt_cell_pos (cell, &pos); gdouble radeq; gdouble size = ftt_cell_size (cell)/2.; #if FTT_2D radeq = size*sqrt(2.); #else radeq = size*sqrt(3.); #endif /* 3D */ if (ftt_vector_distance (&pos, p->pos) - radeq <= p->distance) return TRUE; /* Check also if the bubble is inside the cell*/ if (p->pos->x > pos.x + size || p->pos->x < pos.x - size || p->pos->y > pos.y + size || p->pos->y < pos.y - size #if !FTT_2D || p->pos->z > pos.z + size || p->pos->z < pos.z - size #endif ) return FALSE; return TRUE; } static gboolean bubble_fraction_event (GfsEvent * event, GfsSimulation * sim) { if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_particulate_field_class ())->parent_class)->event) (event, sim)) { GfsDomain * domain = GFS_DOMAIN (sim); GfsVariable * v = GFS_VARIABLE (event); GfsParticulateField * pfield = GFS_PARTICULATE_FIELD (v); GfsBubbleFraction * bf = GFS_BUBBLE_FRACTION (event); /* Reset variable */ gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) gfs_cell_reset, v); /* Loop over the list of particles in the selected object */ GSList * i = GFS_EVENT_LIST (pfield->plist)->list->items; while (i) { GfsBubble * bubble = GFS_BUBBLE (i->data); bubble->vol_liq = 0; bubble->rliq = pow (GFS_PARTICULATE(i->data)->volume*3./(4.*M_PI), 1./3.)*bf->rliq; BubbleData p = { 0, bubble, v, bf }; CondData cd = { &GFS_PARTICLE (i->data)->pos, bubble->rliq }; gfs_domain_cell_traverse_condition (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) kernel_volume, &p, cond_bubble, &cd); gfs_domain_cell_traverse_condition (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1, (FttCellTraverseFunc) pfield->voidfraction_func, &p, cond_bubble, &cd); i = i->next; } return TRUE; } return FALSE; } static void bubble_fraction_destroy (GtsObject * o) { gts_object_destroy (GTS_OBJECT (GFS_BUBBLE_FRACTION (o)->kernel_function)); (* GTS_OBJECT_CLASS (gfs_bubble_fraction_class ())->parent_class->destroy) (o); } static void bubble_fraction_read (GtsObject ** o, GtsFile * fp) { (* GTS_OBJECT_CLASS (gfs_bubble_fraction_class ())->parent_class->read) (o, fp); if (fp->type == GTS_ERROR) return; GfsBubbleFraction * b = GFS_BUBBLE_FRACTION (*o); if (fp->type != '{') { gts_file_error (fp, "expecting an opening brace"); return; } fp->scope_max++; gts_file_next_token (fp); while (fp->type != GTS_ERROR && fp->type != '}') { if (fp->type == '\n') { gts_file_next_token (fp); continue; } if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a keyword"); return; } else if (!strcmp (fp->token->str, "rkernel")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); b->rliq = atof (fp->token->str); gts_file_next_token (fp); } else if (!strcmp (fp->token->str, "kernel")) { gts_file_next_token (fp); if (fp->type != '=') { gts_file_error (fp, "expecting '='"); return; } gts_file_next_token (fp); gfs_function_read (b->kernel_function, gfs_object_simulation (*o), fp); } else { gts_file_error (fp, "unknown keyword `%s'", fp->token->str); return; } } if (fp->type == GTS_ERROR) return; if (fp->type != '}') { gts_file_error (fp, "expecting a closing brace"); return; } fp->scope_max--; gts_file_next_token (fp); } static void bubble_fraction_write (GtsObject * o, FILE * fp) { (* GTS_OBJECT_CLASS (gfs_bubble_fraction_class ())->parent_class->write) (o, fp); fprintf (fp, " { rkernel = %g ", GFS_BUBBLE_FRACTION (o)->rliq); fputs (" kernel =", fp); gfs_function_write (GFS_BUBBLE_FRACTION (o)->kernel_function, fp); fputc ('}', fp); } static void bubble_fraction_init (GfsVariable * v) { v->units = 0.; GFS_PARTICULATE_FIELD (v)->voidfraction_func = voidfraction_from_bubbles; GFS_BUBBLE_FRACTION (v)->kernel_function = gfs_function_new (gfs_function_spatial_class (), 0.); } static void bubble_fraction_class_init (GtsObjectClass * klass) { GFS_EVENT_CLASS (klass)->event = bubble_fraction_event; klass->destroy = bubble_fraction_destroy; klass->read = bubble_fraction_read; klass->write = bubble_fraction_write; } GfsVariableClass * gfs_bubble_fraction_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_bubble_fraction_info = { "GfsBubbleFraction", sizeof (GfsBubbleFraction), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) bubble_fraction_class_init, (GtsObjectInitFunc) bubble_fraction_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_particulate_field_class ()), &gfs_bubble_fraction_info); } return klass; } /** \endobject{GfsBubbleFraction} */ /* GfsBubbleFractionDt: header */ #define GFS_IS_BUBBLE_FRACTION_DT(obj) (gts_object_is_from_class (obj, \ gfs_bubble_fraction_dt_class ())) GfsVariableClass * gfs_bubble_fraction_dt_class (void); /** \beginobject{GfsBubbleFractionDt} */ static void dVpdt_from_particles (FttCell * cell, BubbleData * p) { gdouble rad = pow (3.0*GFS_PARTICULATE (p->bubble)->volume/(4.0*M_PI), 1./3.); GFS_VALUE (cell, p->v) += 3.0*GFS_PARTICULATE (p->bubble)->volume *p->bubble->velR/(p->bubble->vol_liq*rad); } static void bubble_fraction_dt_init (GtsObject * o) { GFS_PARTICULATE_FIELD (o)->voidfraction_func = dVpdt_from_particles; } GfsVariableClass * gfs_bubble_fraction_dt_class (void) { static GfsVariableClass * klass = NULL; if (klass == NULL) { GtsObjectClassInfo gfs_bubble_fraction_dt_info = { "GfsBubbleFractionDt", sizeof (GfsBubbleFraction), sizeof (GfsVariableClass), (GtsObjectClassInitFunc) NULL, (GtsObjectInitFunc) bubble_fraction_dt_init, (GtsArgSetFunc) NULL, (GtsArgGetFunc) NULL }; klass = gts_object_class_new (GTS_OBJECT_CLASS ( gfs_bubble_fraction_class ()), &gfs_bubble_fraction_dt_info); } return klass; } /** \endobject{GfsBubbleFractionDt} */ /* Initialize module */ const gchar gfs_module_name[] = "bubbles"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { gfs_bubble_class (); gfs_bubble_fraction_class (); gfs_bubble_fraction_dt_class (); return NULL; } gerris-snapshot-131206/modules/particulatecommon.h0000644000175100017510000001253412250371171017236 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2009-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "particle.h" /* GfsParticulate: Header */ typedef struct _GfsParticulate GfsParticulate; struct _GfsParticulate { GfsParticle parent; FttVector vel; gdouble mass, volume; FttVector force; GtsSListContainer * forces; }; #define GFS_PARTICULATE(obj) GTS_OBJECT_CAST (obj, \ GfsParticulate, gfs_particulate_class ()) #define GFS_IS_PARTICULATE(obj) (gts_object_is_from_class (obj, gfs_particulate_class ())) GfsEventClass * gfs_particulate_class (void); /* GfsParticleList: Header */ typedef struct _GfsParticleList GfsParticleList; struct _GfsParticleList { GfsEventList parent; gint idlast; GtsSListContainer * forces; }; #define GFS_PARTICLE_LIST(obj) GTS_OBJECT_CAST (obj, \ GfsParticleList, \ gfs_particle_list_class ()) #define GFS_IS_PARTICLE_LIST(obj) (gts_object_is_from_class (obj, \ gfs_particle_list_class ())) GfsEventClass * gfs_particle_list_class (void); /* GfsParticleForce: header */ typedef struct _GfsParticleForce GfsParticleForce; struct _GfsParticleForce{ GtsSListContainee parent; FttVector (* force) (GfsParticle *p, GfsParticleForce *force); }; #define GFS_PARTICLE_FORCE(obj) GTS_OBJECT_CAST (obj, \ GfsParticleForce, \ gfs_particle_force_class ()) #define GFS_IS_PARTICLE_FORCE(obj) (gts_object_is_from_class (obj, \ gfs_particle_force_class ())) GtsSListContaineeClass * gfs_particle_force_class (void); /* GfsForceCoeff: header */ typedef struct _GfsForceCoeff GfsForceCoeff; struct _GfsForceCoeff{ GfsParticleForce parent; GfsFunction * coefficient; GfsVariable *re_p, *u_rel, *v_rel, *w_rel, *pdia; GfsParticulate *p; }; #define FORCE_COEFF(obj) GTS_OBJECT_CAST (obj, \ GfsForceCoeff, \ gfs_force_coeff_class ()) #define GFS_IS_FORCE_COEFF(obj) (gts_object_is_from_class (obj, \ gfs_force_coeff_class ())) GtsSListContaineeClass * gfs_force_coeff_class (void); /* GfsForceLift: header */ #define GFS_IS_FORCE_LIFT(obj) (gts_object_is_from_class (obj, \ gfs_force_lift_class ())) GtsSListContaineeClass * gfs_force_lift_class (void); /* GfsForceDrag: header */ #define GFS_IS_FORCE_DRAG(obj) (gts_object_is_from_class (obj, \ gfs_force_drag_class ())) GtsSListContaineeClass * gfs_force_drag_class (void); /* GfsForceBuoy: header */ #define GFS_IS_FORCE_BUOY(obj) (gts_object_is_from_class (obj, \ gfs_force_buoy_class ())) GtsSListContaineeClass * gfs_force_buoy_class (void); /* GfsDropletToParticle: header */ typedef struct _GfsDropletToParticle GfsDropletToParticle; struct _GfsDropletToParticle{ /*< private >*/ GfsParticleList parent; GfsVariable * v; /*< public >*/ GfsFunction * fc; GfsVariable * c; gint min; gdouble resetwith; gdouble density; }; #define DROPLET_TO_PARTICLE(obj) GTS_OBJECT_CAST (obj,\ GfsDropletToParticle,\ gfs_droplet_to_particle_class ()) #define IS_DROPLET_TO_PARTICLE(obj) (gts_object_is_from_class (obj,\ gfs_droplet_to_particle_class ())) GfsEventClass * gfs_droplet_to_particle_class (void); /* GfsParticulateField: header */ typedef struct _GfsParticulateField GfsParticulateField; struct _GfsParticulateField { /*< private >*/ GfsVariable parent; /*< public >*/ GfsParticleList * plist; void (* voidfraction_func) (FttCell *, GfsVariable *, GfsParticulate *); }; #define GFS_PARTICULATE_FIELD(obj) GTS_OBJECT_CAST (obj,\ GfsParticulateField,\ gfs_particulate_field_class ()) #define GFS_IS_PARTICULATE_FIELD(obj) (gts_object_is_from_class (obj,\ gfs_particulate_field_class ())) GfsVariableClass * gfs_particulate_field_class (void); /* GfsFeedParticle: header */ typedef struct _GfsFeedParticle GfsFeedParticle; struct _GfsFeedParticle{ /*< private >*/ GfsParticleList parent; GfsVariable * v; /*< public >*/ GfsFunction * posx, * posy, * posz; GfsFunction * velx, * vely, * velz; GfsFunction * np, * mass, * vol; }; #define GFS_FEED_PARTICLE(obj) GTS_OBJECT_CAST (obj,\ GfsFeedParticle,\ gfs_feed_particle_class ()) #define GFS_IS_FEED_PARTICLE(obj) (gts_object_is_from_class (obj,\ gfs_feed_particle_class ())) GfsEventClass * gfs_feed_particle_class (void); gerris-snapshot-131206/modules/rsurface2kdt.c0000644000175100017510000001222612250371171016100 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include "config.h" #ifdef HAVE_GETOPT_H # include #endif /* HAVE_GETOPT_H */ #include "kdt/kdt.h" #include "rsurface.h" static int verbose = 0; static int query (double p[3], void * data) { static long n = 0; KdtHeap * h = data; KdtPoint q = { p[0], p[1], p[2] }; kdt_heap_put (h, &q); if (verbose && n % 3571 == 0) fprintf (stderr, "rsurface2kdt: reading points... %ld\r", n); n++; return 0; } static int includes_true (KdtRect rect) { return 1; } static void progress (float complete, void * data) { #if 0 /* this doesn't work yet */ struct timeval * start = data, now; gettimeofday (&now, NULL); double remaining = ((double) (now.tv_usec - start->tv_usec) + 1e6*(double) (now.tv_sec - start->tv_sec))*(1. - complete); int hours = remaining/1e6/3600.; int mins = remaining/1e6/60. - 60.*hours; int secs = remaining/1e6 - 3600.*hours - 60.*mins; fprintf (stderr, "\rrsurface2kdt: %3.0f%% complete %02d:%02d:%02d remaining", (complete > 1. ? 1. : complete)*100., hours, mins, secs); #else fprintf (stderr, "\rrsurface2kdt: %3.0f%% complete ", (complete > 1. ? 1. : complete)*100.); #endif } int main (int argc, char * argv[]) { int c = 0, pagesize = 4096; /* parse options using getopt */ while (c != EOF) { #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { {"pagesize", required_argument, NULL, 'p'}, {"verbose", no_argument, NULL, 'v'}, {"help", no_argument, NULL, 'h'}, { NULL } }; int option_index = 0; switch ((c = getopt_long (argc, argv, "p:hv", long_options, &option_index))) { #else /* not HAVE_GETOPT_LONG */ switch ((c = getopt (argc, argv, "p:hv"))) { #endif /* not HAVE_GETOPT_LONG */ case 'v': /* verbose */ verbose = 1; break; case 'p': /* pagesize */ pagesize = atoi (optarg); break; case 'h': /* help */ fprintf (stderr, "Usage: rsurface2kdt [OPTION] BASENAME\n" "\n" "Converts an existing R-tree database to the KDT format.\n" "\n" " -p N --pagesize=N sets the pagesize in bytes (default is 4096)\n" " -v --verbose display progress bar\n" " -h --help display this help and exit\n" "\n" "Report bugs to %s\n", "popinet@users.sf.net"); return 0; /* success */ break; case '?': /* wrong options */ fprintf (stderr, "Try `rsurface2kdt -h' for more information.\n"); return 1; /* failure */ } } if (optind >= argc) { /* missing BASENAME */ fprintf (stderr, "rsurface2kdt: missing BASENAME\n" "Try `rsurface2kdt -h' for more information.\n"); return 1; /* failure */ } RSurface * rs = r_surface_open (argv[optind], "r", 0); if (rs == NULL) { fprintf (stderr, "rsurface2kdt: could not open `%s'\n", argv[optind]); return 1; } if (verbose) fprintf (stderr, "rsurface2kdt: reading points...\r"); KdtHeap h; kdt_heap_create (&h, kdt_tmpfile (), 0, -1, 1000000); double min[2] = { -1e100, -1e100 }, max[2] = { 1e100, 1e100 }; r_surface_query_region (rs, min, max, query, &h); kdt_heap_flush (&h); r_surface_close (rs); if (verbose) fprintf (stderr, "rsurface2kdt: 0%% complete "); struct timeval start; gettimeofday (&start, NULL); Kdt * kdt = kdt_new (); kdt_create (kdt, argv[optind], pagesize, &h, verbose ? progress : NULL, &start); kdt_destroy (kdt); if (verbose) { Kdt * kdt = kdt_new (); KdtRect rect = {{-1e30,1e30},{-1e30,1e30}}; KdtSum sum; kdt_sum_init (&sum); assert (!kdt_open (kdt, argv[optind])); long n = kdt_query_sum (kdt, (KdtCheck) includes_true, (KdtCheck) includes_true, NULL, rect, &sum); fprintf (stderr, "\r%ld points Height min: %g average: %g max: %g\n", n, sum.Hmin, sum.H0/sum.w, sum.Hmax); kdt_destroy (kdt); } char * name = malloc (strlen (argv[optind]) + strlen (".DataPD") + 1); sprintf (name, "%s.DataPD", argv[optind]); remove (name); sprintf (name, "%s.Data", argv[optind]); remove (name); sprintf (name, "%s.DirPD", argv[optind]); remove (name); remove (argv[optind]); free (name); return 0; } gerris-snapshot-131206/modules/particulates.c0000644000175100017510000000245112250371171016200 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2009-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "particulatecommon.h" /* Initialize module */ const gchar gfs_module_name[] = "particulates"; const gchar * g_module_check_init (void); const gchar * g_module_check_init (void) { gfs_particulate_class (); gfs_particle_list_class (); gfs_force_lift_class (); gfs_force_drag_class (); gfs_force_buoy_class (); gfs_particle_force_class (); gfs_droplet_to_particle_class (); gfs_feed_particle_class (); gfs_particulate_field_class (); return NULL; } gerris-snapshot-131206/modules/kdt/0000755000175100017510000000000012250371671014201 500000000000000gerris-snapshot-131206/modules/kdt/kdt.h0000644000175100017510000000613512250371171015054 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2010 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /* padding on 32 bits systems (to match automatic 64 bits padding) */ #if defined (__LP64__) || defined (__64BIT__) || defined (_LP64) || (__WORDSIZE == 64) #define PADDING_32_BITS #else #define PADDING_32_BITS int padding; #endif FILE * kdt_tmpfile (void); typedef struct { double x, y, z; } KdtPoint; typedef struct { float l, h; } KdtInterval; typedef KdtInterval KdtRect[2]; typedef struct { KdtPoint * p; long start, len, i, end, buflen, current; FILE * fp; void * buf; } KdtHeap; void kdt_heap_create (KdtHeap * h, FILE * fp, long start, long len, long buflen); void kdt_heap_resize (KdtHeap * h, long len); int kdt_heap_get (KdtHeap * h, KdtPoint * p); void kdt_heap_split (KdtHeap * h1, long len1, KdtHeap * h2); void kdt_heap_put (KdtHeap * h, KdtPoint * p); void kdt_heap_flush (KdtHeap * h); void kdt_heap_free (KdtHeap * h); void kdt_heap_rewind (KdtHeap * h); typedef struct { /* needs to be identical to RSurfaceSum in rsurface.h */ #if AVG_TERRAIN double H0; float Hmin, Hmax; int n; #else double m01, m02, m03; double m11, m13; double m22, m23, m33; double m44, m55, m66, m77; double m67, m76; double H0, H1, H2, H3, H4; double H5, H6; float Hmin, Hmax; float coverage; int n; #endif } KdtSumCore; typedef struct { #if AVG_TERRAIN double H0; float Hmin, Hmax; int n; #else double m01, m02, m03; double m11, m13; double m22, m23, m33; double m44, m55, m66, m77; double m67, m76; double H0, H1, H2, H3, H4; double H5, H6; float Hmin, Hmax; float coverage; int n; #endif double w; } KdtSum; typedef struct _Kdt Kdt; typedef int (* KdtCheck) (const KdtRect rect, void * data); int kdt_intersects (const KdtRect rect, const KdtRect query); int kdt_includes (const KdtRect rect, const KdtRect query); Kdt * kdt_new (void); int kdt_create (Kdt * kdt, const char * name, int blksize, KdtHeap * h, void (* progress) (float complete, void * data), void * data); int kdt_open (Kdt * kdt, const char * name); void kdt_destroy (Kdt * kdt); long kdt_query (const Kdt * kdt, const KdtRect rect); long kdt_query_sum (const Kdt * kdt, KdtCheck includes, KdtCheck intersects, void * data, const KdtRect query, KdtSum * sum); void kdt_sum_init (KdtSum * s); gerris-snapshot-131206/modules/kdt/kdt.c0000644000175100017510000006305112250371171015047 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2010-2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include "kdt.h" #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define VERSION 20120405 /* the file format version */ /* same as the system tmpfile() but uses the working directory (rather than /tmp) */ FILE * kdt_tmpfile (void) { char name[] = "kdtXXXXXX"; int fd = mkstemp (name); if (fd == -1) { perror ("kdt_tmpfile"); exit (1); } FILE * fp = fdopen (fd, "r+w"); assert (unlink (name) == 0); if (fp == NULL) { perror ("kdt_tmpfile"); exit (1); } return fp; } /* refcounted buffer */ typedef struct { KdtPoint * p; int ref; } Buffer; static Buffer * buffer_new (long len) { Buffer * b = malloc (sizeof (Buffer)); b->p = malloc (len*sizeof (KdtPoint)); b->ref = 1; return b; } static Buffer * buffer_ref (Buffer * b) { b->ref++; return b; } static void buffer_unref (Buffer * b) { b->ref--; if (b->ref == 0) { free (b->p); free (b); } } /* KdtHeap */ void kdt_heap_resize (KdtHeap * h, long len) { assert (h->len < 0 || len < h->len); if (h->len == h->buflen) { h->buflen = len; h->end = h->buflen; } else if (len <= h->buflen) { h->buflen = len; kdt_heap_rewind (h); assert (h->end == len); } h->len = len; } static long heap_read (KdtHeap * h, long len) { if (ftell (h->fp) != h->current) assert (fseek (h->fp, h->current, SEEK_SET) == 0); if (h->len > 0) { long maxlen = h->start + h->len - h->current/sizeof (KdtPoint); if (len > maxlen) len = maxlen; } long n = 0; if (len > 0) { n = fread (h->p, sizeof (KdtPoint), len, h->fp); h->current = ftell (h->fp); } return n; } static void heap_write (KdtHeap * h, long len) { if (ftell (h->fp) != h->current) assert (fseek (h->fp, h->current, SEEK_SET) == 0); if (fwrite (h->p, sizeof (KdtPoint), len, h->fp) != len) { perror ("heap_write"); exit (1); } h->current = ftell (h->fp); } void kdt_heap_create (KdtHeap * h, FILE * fp, long start, long len, long buflen) { h->fp = fp; h->start = start; if (len > 0 && len < buflen) buflen = len; h->len = len; h->buflen = buflen; h->i = 0; h->buf = buffer_new (buflen); h->p = ((Buffer *) h->buf)->p; h->current = start*sizeof (KdtPoint); if (fp != NULL) { assert (fseek (fp, start*sizeof (KdtPoint), SEEK_SET) == 0); assert (ftell (fp) == h->current); h->end = heap_read (h, buflen); if (buflen == len) assert (h->end == len); } else h->end = 0; } void kdt_heap_rewind (KdtHeap * h) { if (h->len == h->buflen) { h->i = 0; assert (h->end == h->buflen); } else { assert (fseek (h->fp, h->start*sizeof (KdtPoint), SEEK_SET) == 0); h->current = ftell (h->fp); h->end = heap_read (h, h->buflen); h->i = 0; } } int kdt_heap_get (KdtHeap * h, KdtPoint * p) { if (h->len == h->buflen && h->i >= h->len) return 0; if (h->i < h->end) { *p = h->p[h->i++]; return 1; } if (h->end < h->buflen) return 0; h->end = heap_read (h, h->buflen); h->i = 0; return kdt_heap_get (h, p); } void kdt_heap_split (KdtHeap * h1, long len1, KdtHeap * h2) { assert (len1 < h1->len); if (h1->len == h1->buflen) { h2->fp = NULL; h2->start = 0; h2->len = h1->len - len1; h2->buflen = h2->len; h2->i = 0; h2->p = &h1->p[len1]; h2->buf = buffer_ref (h1->buf); h2->end = h2->len; kdt_heap_resize (h1, len1); } else { kdt_heap_create (h2, h1->fp, h1->start + len1, h1->len - len1, h1->buflen); KdtHeap h; kdt_heap_create (&h, NULL, 0, len1, h1->buflen); if (len1 > h1->buflen) h.fp = kdt_tmpfile (); else h.end = h.len; kdt_heap_rewind (h1); long i; for (i = 0; i < len1; i++) { KdtPoint p; assert (kdt_heap_get (h1, &p)); kdt_heap_put (&h, &p); } kdt_heap_flush (&h); h1->fp = NULL; kdt_heap_free (h1); *h1 = h; } } void kdt_heap_put (KdtHeap * h, KdtPoint * p) { if (h->i == h->buflen) { heap_write (h, h->buflen); h->i = 0; } h->p[h->i++] = *p; } void kdt_heap_flush (KdtHeap * h) { if (h->i > 0 && h->fp != NULL) heap_write (h, h->i); } void kdt_heap_free (KdtHeap * h) { buffer_unref (h->buf); if (h->fp != NULL) assert (fclose (h->fp) == 0); } /* sort */ static int put (KdtHeap * h, KdtPoint * p, KdtHeap * merged) { kdt_heap_put (merged, p); return kdt_heap_get (h, p); } static void kdt_write (KdtHeap * h, FILE * fp) { kdt_heap_rewind (h); long i = 0; KdtPoint p; while (kdt_heap_get (h, &p)) { fprintf (fp, "%ld %g %g\n", i, p.x, p.y); i++; } } static void merge (KdtHeap * h1, KdtHeap * h2, int (*compar) (const void *, const void *), long buflen) { KdtHeap hm; assert (h1->len + h2->len > buflen); kdt_heap_create (&hm, NULL, h2->start - h1->len, h1->len + h2->len, buflen); hm.fp = h2->fp; KdtPoint p1, p2; kdt_heap_rewind (h1); int r1 = kdt_heap_get (h1, &p1); kdt_heap_rewind (h2); int r2 = kdt_heap_get (h2, &p2); while (r1 && r2) { if ((* compar) (&p2, &p1)) r1 = put (h1, &p1, &hm); else r2 = put (h2, &p2, &hm); } while (r1) r1 = put (h1, &p1, &hm); while (r2) r2 = put (h2, &p2, &hm); kdt_heap_free (h1); h2->fp = NULL; kdt_heap_free (h2); kdt_heap_flush (&hm); *h1 = hm; } #if TIMING static double elapsed (const struct timeval * start, const struct timeval * end) { return (double) (end->tv_usec - start->tv_usec) + 1e6*(double) (end->tv_sec - start->tv_sec); } #endif static void kdt_heap_sort (KdtHeap * h, int (*compar) (const void *, const void *), void (*progress) (void *), void * data) { #if TIMING struct timeval start; gettimeofday (&start, NULL); #endif if (h->len == h->buflen) { qsort (h->p, h->len, sizeof (KdtPoint), compar); if (progress) (* progress) (data); } else { KdtHeap h2; long buflen = h->buflen; kdt_heap_split (h, h->len/2, &h2); kdt_heap_sort (h, compar, progress, data); kdt_heap_sort (&h2, compar, progress, data); merge (h, &h2, compar, buflen); } #if TIMING struct timeval end; gettimeofday (&end, NULL); fprintf (stderr, "kdt_heap_sort %ld %g\n", len, elapsed (&start, &end)); #endif } /* number of qsort() calls for a given kdt_heap_sort() */ static int kdt_heap_sort_cost (long len, long buflen) { int m = 1; while (len > buflen) { m *= 2; len /= 2; } return m; } /* Kdt */ typedef struct { KdtRect bound1, bound2; long len1; int n1; } Node; #define SYSTEM_32_BITS (!defined (__LP64__) && !defined (__64BIT__) && \ !defined (_LP64) && !(__WORDSIZE == 64)) typedef struct { KdtRect bound; long len; PADDING_32_BITS long np; int version; } Header; struct _Kdt { Header h; FILE * nodes, * sums, * leaves; KdtPoint * buffer; /* progress stuff */ void (* progress) (float complete, void * data); void * data; int i, m; }; static int check_32_bits (const Kdt * kdt) { #if SYSTEM_32_BITS long maxlen = (1 << 31)/sizeof (KdtPoint); if (kdt->h.len > maxlen) { fprintf (stderr, "kdt: 32-bits systems are limited to %ld data points\n", maxlen); return 1; } #endif return 0; } static void sizes (const Node * n, long * nodes, long * sums, long * leaves) { *nodes = n->n1*sizeof (Node); *sums = n->n1*sizeof (KdtSumCore); *leaves = n->len1*sizeof (KdtPoint); } static void relative (const KdtRect rect, double * o, double * h) { o[0] = (((double)rect[0].l) + ((double)rect[0].h))/2.; o[1] = (((double)rect[1].l) + ((double)rect[1].h))/2.; *h = ((double)rect[0].h) - ((double)rect[0].l); if (((double)rect[1].h) - ((double)rect[1].l) > *h) *h = ((double)rect[1].h) - ((double)rect[1].l); } static void sum_add_point (const KdtRect parent, KdtSumCore * sum, const KdtPoint * a, double w) { double p[3], o[2], h; relative (parent, o, &h); p[0] = (a->x - o[0])/h; p[1] = (a->y - o[1])/h; p[2] = a->z; #if AVG_TERRAIN sum->H0 += p[2]; sum->n++; if (p[2] < sum->Hmin) sum->Hmin = p[2]; if (p[2] > sum->Hmax) sum->Hmax = p[2]; #else sum->m01 += w*p[0]; sum->m02 += w*p[1]; sum->m03 += w*p[0]*p[1]; sum->m11 += w*p[0]*p[0]; sum->m13 += w*p[0]*p[0]*p[1]; sum->m22 += w*p[1]*p[1]; sum->m23 += w*p[0]*p[1]*p[1]; sum->m33 += w*p[0]*p[0]*p[1]*p[1]; sum->m44 += w*p[0]*p[0]*p[0]; sum->m55 += w*p[1]*p[1]*p[1]; sum->m66 += w*p[0]*p[0]*p[0]*p[0]; sum->m77 += w*p[1]*p[1]*p[1]*p[1]; sum->m67 += w*p[0]*p[0]*p[0]*p[1]; sum->m76 += w*p[1]*p[1]*p[1]*p[0]; sum->H0 += w*p[2]; sum->H1 += w*p[0]*p[2]; sum->H2 += w*p[1]*p[2]; sum->H3 += w*p[0]*p[1]*p[2]; sum->H4 += w*p[2]*p[2]; sum->H5 += w*p[0]*p[0]*p[2]; sum->H6 += w*p[1]*p[1]*p[2]; sum->n ++; if (p[2] < sum->Hmin) sum->Hmin = p[2]; if (p[2] > sum->Hmax) sum->Hmax = p[2]; #endif } static float area (const KdtRect rect) { return (rect[0].h - rect[0].l)*(rect[1].h - rect[1].l); } static float length (const KdtRect rect) { float w = rect[0].h - rect[0].l, h = rect[1].h - rect[1].l; return w > h ? w : h; } static void kdt_rect_write (const KdtRect rect, FILE * fp) { fprintf (fp, "%f %f\n%f %f\n%f %f\n%f %f\n%f %f\n\n", rect[0].l, rect[1].l, rect[0].h, rect[1].l, rect[0].h, rect[1].h, rect[0].l, rect[1].h, rect[0].l, rect[1].l); } static int sort_x (const void * p1, const void * p2) { return ((KdtPoint *) p1)->x > ((KdtPoint *) p2)->x ? 1 : -1; } static int sort_y (const void * p1, const void * p2) { return ((KdtPoint *) p1)->y > ((KdtPoint *) p2)->y ? 1 : -1; } static void kdt_sum_core_init (KdtSumCore * s) { memset (s, 0, sizeof (KdtSumCore)); s->Hmax = - 1e30; s->Hmin = 1e30; } #define GAP 0.2 #define MINLEN 6 static int update_sum (const KdtRect rect, KdtSumCore * n, KdtHeap * h, int index) { kdt_sum_core_init (n); long i, imax = 0; double min, x, smax = 0; KdtPoint p; kdt_heap_rewind (h); assert (kdt_heap_get (h, &p)); sum_add_point (rect, n, &p, 1.); min = x = (&p.x)[index]; for (i = 1; i < h->len; i++) { assert (kdt_heap_get (h, &p)); sum_add_point (rect, n, &p, 1.); double s = (&p.x)[index] - x; if (s > smax && i > MINLEN && i < h->len - MINLEN) { smax = s; imax = i; } x = (&p.x)[index]; } return smax/(x - min) > GAP ? imax : -1; } static long update_bounds (KdtRect rect, KdtHeap * h) { long len = 0; rect[0].h = rect[1].h = -1e30; rect[0].l = rect[1].l = 1e30; kdt_heap_rewind (h); KdtPoint p; while (kdt_heap_get (h, &p)) { if (p.x > rect[0].h) rect[0].h = p.x; if (p.x < rect[0].l) rect[0].l = p.x; if (p.y > rect[1].h) rect[1].h = p.y; if (p.y < rect[1].l) rect[1].l = p.y; len++; } return len; } static void progress (void * data) { Kdt * kdt = data; if (kdt->progress && kdt->m > 0) (* kdt->progress) (++kdt->i/(float) kdt->m, kdt->data); } static void fwrite_check (const void * ptr, size_t size, size_t nmemb, FILE * stream) { if (fwrite (ptr, size, nmemb, stream) != nmemb) { perror ("kdt_write"); exit (1); } } static void union_bound (KdtRect b, const KdtRect b1, const KdtRect b2) { b[0].l = MIN (b1[0].l, b2[0].l); b[1].l = MIN (b1[1].l, b2[1].l); b[0].h = MAX (b1[0].h, b2[0].h); b[1].h = MAX (b1[1].h, b2[1].h); } static int split (KdtHeap * h1, KdtRect bound, int index, Kdt * kdt, float * coverage) { #if TIMING struct timeval start; gettimeofday (&start, NULL); #endif int ns = 0; if (h1->len > kdt->h.np) { // fprintf (stderr, " splitting: %ld \r", len); int nindex = (bound[0].h - bound[0].l < bound[1].h - bound[1].l); if (index != nindex) { kdt_heap_sort (h1, nindex ? sort_y : sort_x, progress, kdt); index = nindex; } else /* update cost estimate */ kdt->m -= kdt_heap_sort_cost (h1->len, h1->buflen); KdtSumCore s; int imax = update_sum (bound, &s, h1, index); long spos = ftell (kdt->sums); fwrite_check (&s, sizeof (KdtSumCore), 1, kdt->sums); Node n; n.len1 = imax > 0 ? imax : h1->len/2; #if TIMING struct timeval s1; gettimeofday (&s1, NULL); #endif KdtHeap h2; kdt_heap_split (h1, n.len1, &h2); #if TIMING struct timeval end; gettimeofday (&end, NULL); fprintf (stderr, "half %ld %f\n", len, elapsed (&s1, &end)); #endif update_bounds (n.bound1, h1); update_bounds (n.bound2, &h2); long pos = ftell (kdt->nodes); fwrite_check (&n, sizeof (Node), 1, kdt->nodes); float coverage1; n.n1 = split (h1, n.bound1, index, kdt, &coverage1); float coverage2; int n2 = split (&h2, n.bound2, index, kdt, &coverage2); ns = n.n1 + n2 + 1; /* update bound */ union_bound (bound, n.bound1, n.bound2); /* update sums */ double a = area (bound); if (a > 0.) s.coverage = (coverage1*area (n.bound1) + coverage2*area (n.bound2))/a; else s.coverage = 1.; assert (fseek (kdt->sums, spos + ((long) &s.coverage - (long) &s), SEEK_SET) == 0); fwrite_check (&s.coverage, sizeof (float), 1, kdt->sums); assert (fseek (kdt->sums, 0, SEEK_END) == 0); *coverage = s.coverage; /* update node */ assert (fseek (kdt->nodes, pos, SEEK_SET) == 0); fwrite_check (&n, sizeof (Node), 1, kdt->nodes); assert (fseek (kdt->nodes, 0, SEEK_END) == 0); } else { assert (h1->len > 0); /* half the average distance between samples */ double delta = length (bound)/sqrt (h1->len)/2.; bound[0].l -= delta; bound[1].l -= delta; bound[0].h += delta; bound[1].h += delta; #if DEBUG kdt_rect_write (bound, stderr); #endif assert (h1->len <= h1->buflen); fwrite_check (h1->p, sizeof (KdtPoint), h1->len, kdt->leaves); kdt_heap_free (h1); *coverage = 1.; } #if TIMING struct timeval end; gettimeofday (&end, NULL); fprintf (stderr, "splitfile %ld %f\n", len, elapsed (&start, &end)); #endif return ns; } Kdt * kdt_new (void) { Kdt * kdt = calloc (1, sizeof (Kdt)); return kdt; } static FILE * open_ext (const char * name, const char * ext, const char * mode) { int len = strlen (name), len1 = strlen (ext); char * fname = malloc (sizeof(char)*(len + len1 + 1)); strcpy (fname, name); strcpy (&fname[len], ext); FILE * fp = fopen (fname, mode); free (fname); return fp; } static int kdt_init (Kdt * kdt, const char * name, int npmax, long len) { kdt->nodes = open_ext (name, ".kdt", "w"); if (!kdt->nodes) return -1; kdt->sums = open_ext (name, ".sum", "w"); if (!kdt->sums) return -1; kdt->leaves = open_ext (name, ".pts", "w"); if (!kdt->leaves) return -1; kdt->h.version = VERSION; kdt->h.len = len; kdt->h.np = npmax; kdt->h.bound[0].l = kdt->h.bound[1].l = 1e30; kdt->h.bound[0].h = kdt->h.bound[1].h = -1e30; if (check_32_bits (kdt)) return -1; return 0; } int kdt_create (Kdt * kdt, const char * name, int blksize, KdtHeap * h, void (* progress) (float complete, void * data), void * data) { KdtRect bound; long len = update_bounds (bound, h); kdt_heap_resize (h, len); int npmax = blksize/sizeof (KdtPoint); if (kdt_init (kdt, name, npmax, len)) return -1; kdt->h.bound[0] = bound[0]; kdt->h.bound[1] = bound[1]; fwrite_check (&kdt->h, sizeof (Header), 1, kdt->nodes); /* cost estimate kdt->m (number of qsort() calls) based on balanced binary tree */ kdt->m = kdt->i = 0; int m2 = 1; while (len > kdt->h.np) { kdt->m += kdt_heap_sort_cost (len, h->buflen)*m2; len /= 2; m2 *= 2; } kdt->progress = progress; kdt->data = data; float coverage; split (h, kdt->h.bound, -1, kdt, &coverage); /* write updated header (bounds have been updated) */ rewind (kdt->nodes); fwrite_check (&kdt->h, sizeof (Header), 1, kdt->nodes); return 0; } int kdt_open (Kdt * kdt, const char * name) { kdt->nodes = open_ext (name, ".kdt", "r"); if (!kdt->nodes) return -1; kdt->sums = open_ext (name, ".sum", "r"); if (!kdt->sums) return -1; kdt->leaves = open_ext (name, ".pts", "r"); if (!kdt->leaves) return -1; if (fread (&kdt->h, sizeof (Header), 1, kdt->nodes) != 1) return -1; if (kdt->h.version != VERSION) { fprintf (stderr, "kdt: incompatible version number. Use:\n" "%% kdt2kdt -v %s\n" "to convert to the new format.\n", name); return -1; } kdt->buffer = malloc (sizeof (KdtPoint)*kdt->h.np); if (check_32_bits (kdt)) return -1; return 0; } void kdt_destroy (Kdt * kdt) { if (kdt->nodes) fclose (kdt->nodes); if (kdt->sums) fclose (kdt->sums); if (kdt->leaves) fclose (kdt->leaves); if (kdt->buffer) free (kdt->buffer); free (kdt); } int kdt_intersects (const KdtRect rect, const KdtRect query) { return (rect[0].l <= query[0].h && rect[1].l <= query[1].h && rect[0].h >= query[0].l && rect[1].h >= query[1].l); } int kdt_includes (const KdtRect rect, const KdtRect query) { return (rect[0].h <= query[0].h && rect[1].h <= query[1].h && rect[0].l >= query[0].l && rect[1].l >= query[1].l); } static long query (const Kdt * kdt, const KdtRect rect, long len) { if (len > kdt->h.np) { Node node; if (fread (&node, sizeof (Node), 1, kdt->nodes) != 1) return -1; long pos = ftell (kdt->nodes), lpos = ftell (kdt->leaves); if (pos < 0 || lpos < 0) return -1; long n = 0; if (kdt_intersects (node.bound1, rect)) { #if DEBUG kdt_rect_write (node.bound1, stderr); #endif long n1 = query (kdt, rect, node.len1); if (n1 < 0) return -1; n += n1; } if (kdt_intersects (node.bound2, rect)) { #if DEBUG kdt_rect_write (node.bound2, stderr); #endif long snodes, ssums, sleaves; sizes (&node, &snodes, &ssums, &sleaves); if (fseek (kdt->nodes, pos + snodes, SEEK_SET)) return -1; if (fseek (kdt->leaves, lpos + sleaves, SEEK_SET)) return -1; long n1 = query (kdt, rect, len - node.len1); if (n1 < 0) return -1; n += n1; } return n; } else if (len > 0) { if (fread (kdt->buffer, sizeof (KdtPoint), len, kdt->leaves) != len) return -1; int i, n = 0; for (i = 0; i < len; i++) if (kdt->buffer[i].x >= rect[0].l && kdt->buffer[i].x <= rect[0].h && kdt->buffer[i].y >= rect[1].l && kdt->buffer[i].y <= rect[1].h) { printf ("%.8f %.8f %f\n", kdt->buffer[i].x, kdt->buffer[i].y, kdt->buffer[i].z); n++; } return n; } return 0; } long kdt_query (const Kdt * kdt, const KdtRect rect) { rewind (kdt->nodes); rewind (kdt->leaves); Header h; if (fread (&h, sizeof (Header), 1, kdt->nodes) != 1) return -1; if (!kdt_intersects (rect, h.bound)) return 0; return query (kdt, rect, h.len); } static void intersection (const KdtRect rect1, const KdtRect rect2, KdtRect inter) { inter[0].l = MAX (rect1[0].l, rect2[0].l); inter[0].h = MIN (rect1[0].h, rect2[0].h); inter[1].l = MAX (rect1[1].l, rect2[1].l); inter[1].h = MIN (rect1[1].h, rect2[1].h); assert (inter[0].h >= inter[0].l && inter[1].h >= inter[1].l); } static float intersection_area (const KdtRect rect1, const KdtRect rect2) { KdtRect inter; intersection (rect1, rect2, inter); return area (inter); } static void sum_add_sum (const KdtRect parent, KdtSum * sum, const KdtRect rect, const KdtSumCore * a) { /* weigh by effective area per sample */ double w = intersection_area (rect, parent)*a->coverage/a->n; if (w == 0.) return; double op[2], oa[2], hp, ha; relative (parent, op, &hp); relative (rect, oa, &ha); double oap0 = oa[0] - op[0], oap1 = oa[1] - op[1]; double an = a->n; double ha2 = ha*ha, hp2 = hp*hp; sum->m01 += w*(an*oap0 + a->m01*ha)/hp; sum->m02 += w*(an*oap1 + a->m02*ha)/hp; sum->m03 += w*(oap0*(an*oap1 + a->m02*ha) + ha*(a->m01*oap1 + a->m03*ha))/hp2; double m11 = (oap0*(an*oap0 + 2.*a->m01*ha) + a->m11*ha2)/hp2; sum->m11 += w*m11; double m13 = ha*(oap0*(a->m02*oap0 + 2.*a->m03*ha) + a->m13*ha2)/hp2; sum->m13 += w*(oap1*m11 + m13)/hp; double m22 = (oap1*(an*oap1 + 2.*a->m02*ha) + a->m22*ha2)/hp2; sum->m22 += w*m22; sum->m23 += w*(oap0*m22 + ha*(oap1*(oap1*a->m01 + 2.*a->m03*ha) + a->m23*ha2)/hp2)/hp; sum->m33 += w*(oap1*(oap1*m11 + 2.*m13) + ha2*(oap0*(oap0*a->m22 + 2.*a->m23*ha) + ha2*a->m33)/hp2)/hp2; double ha3 = ha2*ha, hp3 = hp2*hp; sum->m44 += w*(oap0*(oap0*(oap0*an + 3.*ha*a->m01) + 3.*ha2*a->m11) + ha3*a->m44)/hp3; sum->m55 += w*(oap1*(oap1*(oap1*an + 3.*ha*a->m02) + 3.*ha2*a->m22) + ha3*a->m55)/hp3; double ha4 = ha3*ha, hp4 = hp3*hp; sum->m66 += w*(oap0*(oap0*(oap0*(oap0*an + 4.*ha*a->m01) + 6.*ha2*a->m11) + 4.*ha3*a->m44) + ha4*a->m66)/hp4; sum->m77 += w*(oap1*(oap1*(oap1*(oap1*an + 4.*ha*a->m02) + 6.*ha2*a->m22) + 4.*ha3*a->m55) + ha4*a->m77)/hp4; sum->m67 += w*(oap1*(oap0*(oap0*(oap0*an + 3.*ha*a->m01) + 3.*ha2*a->m11) + ha3*a->m44) + oap0*(oap0*(ha*a->m02*oap0 + 3.*ha2*a->m03) + 3.*ha3*a->m13) + ha4*a->m67)/hp4; sum->m76 += w*(oap0*(oap1*(oap1*(oap1*an + 3.*ha*a->m02) + 3.*ha2*a->m22) + ha3*a->m55) + oap1*(oap1*(ha*a->m01*oap1 + 3.*ha2*a->m03) + 3.*ha3*a->m23) + ha4*a->m76)/hp4; sum->H0 += w*a->H0; sum->H1 += w*(a->H0*oap0 + a->H1*ha)/hp; sum->H2 += w*(a->H0*oap1 + a->H2*ha)/hp; sum->H3 += w*(ha*(ha*a->H3 + oap0*a->H2 + oap1*a->H1) + oap0*oap1*a->H0)/hp2; sum->H4 += w*a->H4; sum->H5 += w*(oap0*(2.*ha*a->H1 + oap0*a->H0) + ha2*a->H5)/hp2; sum->H6 += w*(oap1*(2.*ha*a->H2 + oap1*a->H0) + ha2*a->H6)/hp2; sum->n += w*a->n*a->n/area (rect); float aparent = area (parent); if (aparent > 0.) sum->coverage += w*a->n/aparent; else sum->coverage = 1.; sum->w += w*a->n; if (a->Hmin < sum->Hmin) sum->Hmin = a->Hmin; if (a->Hmax > sum->Hmax) sum->Hmax = a->Hmax; } typedef struct { long np, sp, lp; } FilePointers; static long query_sum (const Kdt * kdt, KdtCheck includes, KdtCheck intersects, void * data, KdtRect bound, long len, FilePointers * f, const KdtRect query, KdtSum * sum) { if (len > kdt->h.np) { if (length (bound) <= length (query) || (* includes) (bound, data)) { KdtSumCore s; if (fseek (kdt->sums, f->sp, SEEK_SET)) return -1; if (fread (&s, sizeof (KdtSumCore), 1, kdt->sums) != 1) return -1; #if DEBUG fprintf (stderr, "read 1 sum %ld\n", sizeof (KdtSumCore)); #endif f->sp += sizeof (KdtSumCore); sum_add_sum (query, sum, bound, &s); return len; } f->sp += sizeof (KdtSumCore); Node node; if (fseek (kdt->nodes, f->np, SEEK_SET)) return -1; if (fread (&node, sizeof (Node), 1, kdt->nodes) != 1) return -1; f->np += sizeof (Node); #if DEBUG fprintf (stderr, "read 1 node %ld\n", sizeof (Node)); #endif long pos = f->np, lpos = f->lp, spos = f->sp; long n = 0; if ((* intersects) (node.bound1, data)) { long n1 = query_sum (kdt, includes, intersects, data, node.bound1, node.len1, f, query, sum); if (n1 < 0) return -1; n += n1; } if ((* intersects) (node.bound2, data)) { long snodes, ssums, sleaves; sizes (&node, &snodes, &ssums, &sleaves); f->np = pos + snodes; f->sp = spos + ssums; f->lp = lpos + sleaves; long n1 = query_sum (kdt, includes, intersects, data, node.bound2, len - node.len1, f, query, sum); if (n1 < 0) return -1; n += n1; } return n; } else { float h = length (bound)/sqrt (len); /* average distance between samples */ if (h <= length (query)) { #if DEBUG fprintf (stderr, "# area: %f %f\n", area (query), area (bound)/len); kdt_rect_write (bound, stderr); #endif if (fseek (kdt->leaves, f->lp, SEEK_SET)) return -1; if (fread (kdt->buffer, sizeof (KdtPoint), len, kdt->leaves) != len) return -1; #if DEBUG fprintf (stderr, "read %ld leaves %ld\n", len, sizeof (KdtPoint)); #endif KdtPoint * a = kdt->buffer; int i, n = 0; for (i = 0; i < len; i++, a++) { KdtRect boundp; boundp[0].l = a->x - h/2.; boundp[0].h = a->x + h/2.; boundp[1].l = a->y - h/2.; boundp[1].h = a->y + h/2.; if ((* intersects) (boundp, data)) { double w = intersection_area (boundp, query); sum_add_point (query, (KdtSumCore *) sum, a, w); sum->w += w; sum->coverage += w/area (query); n++; } } return n; } } return 0; } long kdt_query_sum (const Kdt * kdt, KdtCheck includes, KdtCheck intersects, void * data, const KdtRect query, KdtSum * sum) { rewind (kdt->nodes); rewind (kdt->leaves); Header h; if (fread (&h, sizeof (Header), 1, kdt->nodes) != 1) return -1; FilePointers f; f.np = sizeof (Header); f.sp = f.lp = 0; if (!(* intersects) (h.bound, data)) return 0; return query_sum (kdt, includes, intersects, data, h.bound, h.len, &f, query, sum); } void kdt_sum_init (KdtSum * s) { kdt_sum_core_init ((KdtSumCore *) s); s->w = 0.; } gerris-snapshot-131206/modules/kdt/kdt2kdt.c0000644000175100017510000001150512250371171015631 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2012 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include "config.h" #ifdef HAVE_GETOPT_H # include #endif /* HAVE_GETOPT_H */ #include "kdt.h" static int includes_true (KdtRect rect) { return 1; } static void progress (float complete, void * data) { #if 0 /* this doesn't work yet */ struct timeval * start = data, now; gettimeofday (&now, NULL); double remaining = ((double) (now.tv_usec - start->tv_usec) + 1e6*(double) (now.tv_sec - start->tv_sec))*(1. - complete); int hours = remaining/1e6/3600.; int mins = remaining/1e6/60. - 60.*hours; int secs = remaining/1e6 - 3600.*hours - 60.*mins; fprintf (stderr, "\rkdt2kdt: %3.0f%% complete %02d:%02d:%02d remaining", (complete > 1. ? 1. : complete)*100., hours, mins, secs); #else fprintf (stderr, "\rkdt2kdt: %3.0f%% complete ", (complete > 1. ? 1. : complete)*100.); #endif } int main (int argc, char * argv[]) { int c = 0, pagesize = 4096; int verbose = 0; /* parse options using getopt */ while (c != EOF) { #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { {"pagesize", required_argument, NULL, 'p'}, {"verbose", no_argument, NULL, 'v'}, {"help", no_argument, NULL, 'h'}, { NULL } }; int option_index = 0; switch ((c = getopt_long (argc, argv, "p:hv", long_options, &option_index))) { #else /* not HAVE_GETOPT_LONG */ switch ((c = getopt (argc, argv, "p:hv"))) { #endif /* not HAVE_GETOPT_LONG */ case 'v': /* verbose */ verbose = 1; break; case 'p': /* pagesize */ pagesize = atoi (optarg); break; case 'h': /* help */ fprintf (stderr, "Usage: kdt2kdt [OPTION] BASENAME\n" "\n" "Converts an existing KDT database to the most recent format.\n" "\n" " -p N --pagesize=N sets the pagesize in bytes (default is 4096)\n" " -v --verbose display progress bar\n" " -h --help display this help and exit\n" "\n" "Report bugs to %s\n", "popinet@users.sf.net"); return 0; /* success */ break; case '?': /* wrong options */ fprintf (stderr, "Try `kdt2kdt -h' for more information.\n"); return 1; /* failure */ } } if (optind >= argc) { /* missing BASENAME */ fprintf (stderr, "kdt2kdt: missing BASENAME\n" "Try `kdt2kdt -h' for more information.\n"); return 1; /* failure */ } char * name = malloc (strlen (argv[optind]) + strlen (".pts") + 1); sprintf (name, "%s.pts", argv[optind]); FILE * fp = fopen (name, "r+w"); if (fp == NULL) { fprintf (stderr, "kdt2kdt: could not open '%s': ", name); perror (""); return 1; } if (verbose) fprintf (stderr, "kdt2kdt: reading points...\r"); KdtHeap h1, h; kdt_heap_create (&h1, fp, 0, -1, 1000000); kdt_heap_create (&h, kdt_tmpfile (), 0, -1, 1000000); long n = 0; KdtPoint p; while (kdt_heap_get (&h1, &p)) if (p.z < 1e100) { kdt_heap_put (&h, &p); if (verbose && n % 3571 == 0) fprintf (stderr, "kdt2kdt: reading points... %ld\r", n); n++; } kdt_heap_flush (&h); assert (unlink (name) == 0); free (name); kdt_heap_free (&h1); if (verbose) fprintf (stderr, "kdt2kdt: 0%% complete "); struct timeval start; gettimeofday (&start, NULL); Kdt * kdt = kdt_new (); kdt_create (kdt, argv[optind], pagesize, &h, verbose ? progress : NULL, &start); kdt_destroy (kdt); if (verbose) { Kdt * kdt = kdt_new (); KdtRect rect = {{-1e30,1e30},{-1e30,1e30}}; KdtSum sum; kdt_sum_init (&sum); assert (!kdt_open (kdt, argv[optind])); long n = kdt_query_sum (kdt, (KdtCheck) includes_true, (KdtCheck) includes_true, NULL, rect, &sum); fprintf (stderr, "\r%ld points Height min: %g average: %g max: %g\n", n, sum.Hmin, sum.H0/sum.w, sum.Hmax); kdt_destroy (kdt); } return 0; } gerris-snapshot-131206/modules/kdt/kdtquery.c0000644000175100017510000000366012250371171016135 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2010 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ // #include #include #include #include "kdt.h" int main (int argc, char * argv[]) { if (argc != 2) { fprintf (stderr, "Usage: %s basename\n", argv[0]); return -1; } Kdt * kdt = kdt_new (); if (kdt_open (kdt, argv[1])) { fprintf (stderr, "%s: could not open `%s'\n", argv[0], argv[1]); return -1; } KdtRect query; int count = 0; // GTimer * t = g_timer_new (); while (scanf ("%f %f %f %f", &query[0].l, &query[1].l, &query[0].h, &query[1].h) == 4) { #if 1 fprintf (stderr, "%ld\n", kdt_query (kdt, query)); #else KdtSum s; kdt_sum_init (&s); // g_timer_start (t); long n = kdt_query_sum (kdt, (KdtCheck) kdt_includes, (KdtCheck) kdt_intersects, query, query, &s); // g_timer_stop (t); // fprintf (stderr, "%d %g %g %g %g\n", n, s.H0, s.Hmax, s.Hmin, g_timer_elapsed (t, NULL)); printf ("%ld %g %g %g\n", n, s.H0, s.H1, s.H2); #endif if (count > 0 && count % 1000 == 0) fprintf (stderr, "\r%d", count); count++; } if (count >= 1000) fputc ('\n', stderr); kdt_destroy (kdt); return 0; } gerris-snapshot-131206/modules/kdt/Makefile.in0000644000175100017510000006326112250371207016171 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = xyz2kdt$(EXEEXT) kdt2kdt$(EXEEXT) kdtquery$(EXEEXT) subdir = modules/kdt DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libkdt_la_LIBADD = am_libkdt_la_OBJECTS = libkdt_la-kdt.lo libkdt_la_OBJECTS = $(am_libkdt_la_OBJECTS) libkdt_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libkdt_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_kdt2kdt_OBJECTS = kdt2kdt-kdt2kdt.$(OBJEXT) kdt2kdt_OBJECTS = $(am_kdt2kdt_OBJECTS) kdt2kdt_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(kdt2kdt_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am_kdtquery_OBJECTS = kdtquery-kdtquery.$(OBJEXT) kdtquery_OBJECTS = $(am_kdtquery_OBJECTS) kdtquery_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(kdtquery_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am_xyz2kdt_OBJECTS = xyz2kdt-xyz2kdt.$(OBJEXT) xyz2kdt_OBJECTS = $(am_xyz2kdt_OBJECTS) xyz2kdt_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(xyz2kdt_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libkdt_la_SOURCES) $(kdt2kdt_SOURCES) $(kdtquery_SOURCES) \ $(xyz2kdt_SOURCES) DIST_SOURCES = $(libkdt_la_SOURCES) $(kdt2kdt_SOURCES) \ $(kdtquery_SOURCES) $(xyz2kdt_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ noinst_LTLIBRARIES = libkdt.la libkdt_la_CFLAGS = $(AM_CFLAGS) -D_FILE_OFFSET_BITS=64 libkdt_la_SOURCES = \ kdt.c \ kdt.h xyz2kdt_SOURCES = xyz2kdt.c kdt.h xyz2kdt_LDADD = -lkdt -lm xyz2kdt_CFLAGS = $(AM_CFLAGS) xyz2kdt_DEPENDENCIES = libkdt.la kdt2kdt_SOURCES = kdt2kdt.c kdt.h kdt2kdt_LDADD = -lkdt -lm kdt2kdt_CFLAGS = $(AM_CFLAGS) kdt2kdt_DEPENDENCIES = libkdt.la kdtquery_SOURCES = kdtquery.c kdt.h kdtquery_LDADD = -lkdt -lm kdtquery_CFLAGS = $(AM_CFLAGS) kdtquery_DEPENDENCIES = libkdt.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/kdt/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/kdt/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libkdt.la: $(libkdt_la_OBJECTS) $(libkdt_la_DEPENDENCIES) $(EXTRA_libkdt_la_DEPENDENCIES) $(libkdt_la_LINK) $(libkdt_la_OBJECTS) $(libkdt_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list kdt2kdt$(EXEEXT): $(kdt2kdt_OBJECTS) $(kdt2kdt_DEPENDENCIES) $(EXTRA_kdt2kdt_DEPENDENCIES) @rm -f kdt2kdt$(EXEEXT) $(kdt2kdt_LINK) $(kdt2kdt_OBJECTS) $(kdt2kdt_LDADD) $(LIBS) kdtquery$(EXEEXT): $(kdtquery_OBJECTS) $(kdtquery_DEPENDENCIES) $(EXTRA_kdtquery_DEPENDENCIES) @rm -f kdtquery$(EXEEXT) $(kdtquery_LINK) $(kdtquery_OBJECTS) $(kdtquery_LDADD) $(LIBS) xyz2kdt$(EXEEXT): $(xyz2kdt_OBJECTS) $(xyz2kdt_DEPENDENCIES) $(EXTRA_xyz2kdt_DEPENDENCIES) @rm -f xyz2kdt$(EXEEXT) $(xyz2kdt_LINK) $(xyz2kdt_OBJECTS) $(xyz2kdt_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kdt2kdt-kdt2kdt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kdtquery-kdtquery.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkdt_la-kdt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xyz2kdt-xyz2kdt.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< libkdt_la-kdt.lo: kdt.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libkdt_la_CFLAGS) $(CFLAGS) -MT libkdt_la-kdt.lo -MD -MP -MF $(DEPDIR)/libkdt_la-kdt.Tpo -c -o libkdt_la-kdt.lo `test -f 'kdt.c' || echo '$(srcdir)/'`kdt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libkdt_la-kdt.Tpo $(DEPDIR)/libkdt_la-kdt.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kdt.c' object='libkdt_la-kdt.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libkdt_la_CFLAGS) $(CFLAGS) -c -o libkdt_la-kdt.lo `test -f 'kdt.c' || echo '$(srcdir)/'`kdt.c kdt2kdt-kdt2kdt.o: kdt2kdt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kdt2kdt_CFLAGS) $(CFLAGS) -MT kdt2kdt-kdt2kdt.o -MD -MP -MF $(DEPDIR)/kdt2kdt-kdt2kdt.Tpo -c -o kdt2kdt-kdt2kdt.o `test -f 'kdt2kdt.c' || echo '$(srcdir)/'`kdt2kdt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/kdt2kdt-kdt2kdt.Tpo $(DEPDIR)/kdt2kdt-kdt2kdt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kdt2kdt.c' object='kdt2kdt-kdt2kdt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kdt2kdt_CFLAGS) $(CFLAGS) -c -o kdt2kdt-kdt2kdt.o `test -f 'kdt2kdt.c' || echo '$(srcdir)/'`kdt2kdt.c kdt2kdt-kdt2kdt.obj: kdt2kdt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kdt2kdt_CFLAGS) $(CFLAGS) -MT kdt2kdt-kdt2kdt.obj -MD -MP -MF $(DEPDIR)/kdt2kdt-kdt2kdt.Tpo -c -o kdt2kdt-kdt2kdt.obj `if test -f 'kdt2kdt.c'; then $(CYGPATH_W) 'kdt2kdt.c'; else $(CYGPATH_W) '$(srcdir)/kdt2kdt.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/kdt2kdt-kdt2kdt.Tpo $(DEPDIR)/kdt2kdt-kdt2kdt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kdt2kdt.c' object='kdt2kdt-kdt2kdt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kdt2kdt_CFLAGS) $(CFLAGS) -c -o kdt2kdt-kdt2kdt.obj `if test -f 'kdt2kdt.c'; then $(CYGPATH_W) 'kdt2kdt.c'; else $(CYGPATH_W) '$(srcdir)/kdt2kdt.c'; fi` kdtquery-kdtquery.o: kdtquery.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kdtquery_CFLAGS) $(CFLAGS) -MT kdtquery-kdtquery.o -MD -MP -MF $(DEPDIR)/kdtquery-kdtquery.Tpo -c -o kdtquery-kdtquery.o `test -f 'kdtquery.c' || echo '$(srcdir)/'`kdtquery.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/kdtquery-kdtquery.Tpo $(DEPDIR)/kdtquery-kdtquery.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kdtquery.c' object='kdtquery-kdtquery.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kdtquery_CFLAGS) $(CFLAGS) -c -o kdtquery-kdtquery.o `test -f 'kdtquery.c' || echo '$(srcdir)/'`kdtquery.c kdtquery-kdtquery.obj: kdtquery.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kdtquery_CFLAGS) $(CFLAGS) -MT kdtquery-kdtquery.obj -MD -MP -MF $(DEPDIR)/kdtquery-kdtquery.Tpo -c -o kdtquery-kdtquery.obj `if test -f 'kdtquery.c'; then $(CYGPATH_W) 'kdtquery.c'; else $(CYGPATH_W) '$(srcdir)/kdtquery.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/kdtquery-kdtquery.Tpo $(DEPDIR)/kdtquery-kdtquery.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kdtquery.c' object='kdtquery-kdtquery.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kdtquery_CFLAGS) $(CFLAGS) -c -o kdtquery-kdtquery.obj `if test -f 'kdtquery.c'; then $(CYGPATH_W) 'kdtquery.c'; else $(CYGPATH_W) '$(srcdir)/kdtquery.c'; fi` xyz2kdt-xyz2kdt.o: xyz2kdt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xyz2kdt_CFLAGS) $(CFLAGS) -MT xyz2kdt-xyz2kdt.o -MD -MP -MF $(DEPDIR)/xyz2kdt-xyz2kdt.Tpo -c -o xyz2kdt-xyz2kdt.o `test -f 'xyz2kdt.c' || echo '$(srcdir)/'`xyz2kdt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xyz2kdt-xyz2kdt.Tpo $(DEPDIR)/xyz2kdt-xyz2kdt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xyz2kdt.c' object='xyz2kdt-xyz2kdt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xyz2kdt_CFLAGS) $(CFLAGS) -c -o xyz2kdt-xyz2kdt.o `test -f 'xyz2kdt.c' || echo '$(srcdir)/'`xyz2kdt.c xyz2kdt-xyz2kdt.obj: xyz2kdt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xyz2kdt_CFLAGS) $(CFLAGS) -MT xyz2kdt-xyz2kdt.obj -MD -MP -MF $(DEPDIR)/xyz2kdt-xyz2kdt.Tpo -c -o xyz2kdt-xyz2kdt.obj `if test -f 'xyz2kdt.c'; then $(CYGPATH_W) 'xyz2kdt.c'; else $(CYGPATH_W) '$(srcdir)/xyz2kdt.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xyz2kdt-xyz2kdt.Tpo $(DEPDIR)/xyz2kdt-xyz2kdt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xyz2kdt.c' object='xyz2kdt-xyz2kdt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xyz2kdt_CFLAGS) $(CFLAGS) -c -o xyz2kdt-xyz2kdt.obj `if test -f 'xyz2kdt.c'; then $(CYGPATH_W) 'xyz2kdt.c'; else $(CYGPATH_W) '$(srcdir)/xyz2kdt.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool clean-noinstLTLIBRARIES ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/modules/kdt/xyz2kdt.c0000644000175100017510000001102012250371171015671 00000000000000/* Gerris - The GNU Flow Solver * Copyright (C) 2010 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include "config.h" #ifdef HAVE_GETOPT_H # include #endif /* HAVE_GETOPT_H */ #include "kdt.h" static int includes_true (KdtRect rect) { return 1; } static void progress (float complete, void * data) { #if 0 /* this doesn't work yet */ struct timeval * start = data, now; gettimeofday (&now, NULL); double remaining = ((double) (now.tv_usec - start->tv_usec) + 1e6*(double) (now.tv_sec - start->tv_sec))*(1. - complete); int hours = remaining/1e6/3600.; int mins = remaining/1e6/60. - 60.*hours; int secs = remaining/1e6 - 3600.*hours - 60.*mins; fprintf (stderr, "\rxyz2kdt: %3.0f%% complete %02d:%02d:%02d remaining", (complete > 1. ? 1. : complete)*100., hours, mins, secs); #else fprintf (stderr, "\rxyz2kdt: %3.0f%% complete ", (complete > 1. ? 1. : complete)*100.); #endif } int main (int argc, char * argv[]) { int c = 0, pagesize = 4096; int verbose = 0; /* parse options using getopt */ while (c != EOF) { #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { {"pagesize", required_argument, NULL, 'p'}, {"verbose", no_argument, NULL, 'v'}, {"help", no_argument, NULL, 'h'}, { NULL } }; int option_index = 0; switch ((c = getopt_long (argc, argv, "p:hv", long_options, &option_index))) { #else /* not HAVE_GETOPT_LONG */ switch ((c = getopt (argc, argv, "p:hv"))) { #endif /* not HAVE_GETOPT_LONG */ case 'v': /* verbose */ verbose = 1; break; case 'p': /* pagesize */ pagesize = atoi (optarg); break; case 'h': /* help */ fprintf (stderr, "Usage: xyz2kdt [OPTION] BASENAME\n" "\n" "Converts the x, y and z coordinates on standard input to a\n" "2D-tree-indexed database suitable for use with the\n" "terrain module of Gerris.\n" "\n" " -p N --pagesize=N sets the pagesize in bytes (default is 4096)\n" " -v --verbose display progress bar\n" " -h --help display this help and exit\n" "\n" "Report bugs to %s\n", "popinet@users.sf.net"); return 0; /* success */ break; case '?': /* wrong options */ fprintf (stderr, "Try `xyz2kdt -h' for more information.\n"); return 1; /* failure */ } } if (optind >= argc) { /* missing BASENAME */ fprintf (stderr, "xyz2kdt: missing BASENAME\n" "Try `xyz2kdt -h' for more information.\n"); return 1; /* failure */ } if (verbose) fprintf (stderr, "xyz2kdt: reading points...\r"); KdtHeap h; kdt_heap_create (&h, kdt_tmpfile (), 0, -1, 1000000); long n = 0; KdtPoint p; while (scanf ("%lf %lf %lf", &p.x, &p.y, &p.z) == 3) { kdt_heap_put (&h, &p); if (verbose && n % 3571 == 0) fprintf (stderr, "xyz2kdt: reading points... %ld\r", n); n++; } kdt_heap_flush (&h); if (verbose) fprintf (stderr, "xyz2kdt: 0%% complete "); struct timeval start; gettimeofday (&start, NULL); Kdt * kdt = kdt_new (); kdt_create (kdt, argv[optind], pagesize, &h, verbose ? progress : NULL, &start); kdt_destroy (kdt); if (verbose) { Kdt * kdt = kdt_new (); KdtRect rect = {{-1e30,1e30},{-1e30,1e30}}; KdtSum sum; kdt_sum_init (&sum); assert (!kdt_open (kdt, argv[optind])); long n = kdt_query_sum (kdt, (KdtCheck) includes_true, (KdtCheck) includes_true, NULL, rect, &sum); fprintf (stderr, "\r%ld points Height min: %g average: %g max: %g\n", n, sum.Hmin, sum.H0/sum.w, sum.Hmax); kdt_destroy (kdt); } return 0; } gerris-snapshot-131206/modules/kdt/Makefile.am0000644000175100017510000000114312250371171016147 00000000000000## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libkdt.la bin_PROGRAMS = \ xyz2kdt \ kdt2kdt \ kdtquery libkdt_la_CFLAGS = $(AM_CFLAGS) -D_FILE_OFFSET_BITS=64 libkdt_la_SOURCES = \ kdt.c \ kdt.h xyz2kdt_SOURCES = xyz2kdt.c kdt.h xyz2kdt_LDADD = -lkdt -lm xyz2kdt_CFLAGS = $(AM_CFLAGS) xyz2kdt_DEPENDENCIES = libkdt.la kdt2kdt_SOURCES = kdt2kdt.c kdt.h kdt2kdt_LDADD = -lkdt -lm kdt2kdt_CFLAGS = $(AM_CFLAGS) kdt2kdt_DEPENDENCIES = libkdt.la kdtquery_SOURCES = kdtquery.c kdt.h kdtquery_LDADD = -lkdt -lm kdtquery_CFLAGS = $(AM_CFLAGS) kdtquery_DEPENDENCIES = libkdt.la gerris-snapshot-131206/modules/wavewatch.c0000644000175100017510000002312312250371171015470 00000000000000/* Gerris - The GNU Flow Solver (-*-C-*-) * Copyright (C) 2001-2008 National Institute of Water and Atmospheric Research * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include #include #include "init.h" #include "wave.h" #include "config.h" #if WW3_VERSION == 222 # include "wavewatch/wavewatch_222.h" #elif WW3_VERSION == 312 # include "wavewatch/wavewatch_312.h" #else /* 3.14 */ # include "wavewatch/wavewatch_314.h" #endif #define DEBUG 0 static double frequency (int ik) { return GFS_WAVE_F0*pow(GFS_WAVE_GAMMA, ik); } #if DEBUG static double theta (guint ith, guint ntheta) { return 2.*M_PI*ith/ntheta; } #endif typedef struct { GfsWave * wave; GfsVariable * ustar, * fpi, * u10, * v10, * as; REAL * A; /* Actions (NK*NTHETA) */ REAL * CG; /* Group velocities (NK) */ REAL * WN; /* Wavenumbers (NK) */ REAL * ALPHA; /* Nondimensional 1-D spectrum (NK) */ } SourceParams; static void energy_to_action (FttCell * cell, SourceParams * p) { guint i, j; REAL * A = p->A; for (i = 0; i < p->wave->nk; i++) for (j = 0; j < p->wave->ntheta; j++) { *A = GFS_VALUE (cell, p->wave->F[i][j])*p->CG[i]/(2.*M_PI*frequency (i)); if (*A < 0.) *A = 0.; A++; } } static void action_to_energy (FttCell * cell, SourceParams * p) { guint i, j; REAL * A = p->A; for (i = 0; i < p->wave->nk; i++) for (j = 0; j < p->wave->ntheta; j++) { GFS_VALUE (cell, p->wave->F[i][j]) = *A*(2.*M_PI*frequency (i))/p->CG[i]; A++; } } static void stability_correction (FttCell * cell, SourceParams * p, REAL * U10ABS, REAL * U10DIR) { double u10 = p->u10 ? GFS_VALUE (cell, p->u10) : 0.; double v10 = p->v10 ? GFS_VALUE (cell, p->v10) : 0.; *U10ABS = sqrt (u10*u10 + v10*v10); *U10DIR = atan2 (v10, u10); if (p->as) { /* see p.24 of wavewatch manual version 3.12 */ double shstab = 1.4, ofstab = -0.01, ccng = -0.1, ccps = 0.1, ffng = -150., ffps = 150.; double zwind = 10.; /* height at which the wind is defined */ double grav = 9.81; /* acceleration of gravity */ double stab0 = zwind*grav/273.; double max = MAX (5., *U10ABS); double stab = stab0*GFS_VALUE (cell, p->as)/(max*max); stab = MAX (-1., MIN (1., stab)); double tharg1 = MAX (0., ffng*(stab - ofstab)); double tharg2 = MAX (0., ffps*(stab - ofstab)); double cor1 = ccng*tanh (tharg1); double cor2 = ccps*tanh (tharg2); double cor = sqrt ((1. + cor1 + cor2)/shstab); *U10ABS /= cor; } } static void source (FttCell * cell, SourceParams * p) { energy_to_action (cell, p); REAL DEPTH = 1000.; /* fixme: depth is fixed at 1000 m for now */ REAL U10ABS, U10DIR; stability_correction (cell, p, &U10ABS, &U10DIR); REAL USTAR = GFS_VALUE (cell, p->ustar); REAL FPI = GFS_VALUE (cell, p->fpi); REAL DTG = GFS_SIMULATION (p->wave)->advection_params.dt*3600.; REAL EMEAN, FMEAN, WMEAN, AMAX; REAL CD, Z0; REAL DTDYN, FCUT; #if WW3_VERSION == 222 REAL DTMIN = DTG/10., DTMAX = DTG; W3SRCE (p->A, p->A, p->ALPHA, p->WN, p->CG, &DEPTH, &U10ABS, &U10DIR, &USTAR, &EMEAN, &FMEAN, &WMEAN, &AMAX, &FPI, &CD, &Z0, &DTDYN, &FCUT, &DTG, &DTMIN, &DTMAX); #elif WW3_VERSION == 312 INTEGER IX, IY, IMOD = 1; REAL USTDIR; W3SRCE (&IX, &IY, &IMOD, p->A, p->ALPHA, p->WN, p->CG, &DEPTH, &U10ABS, &U10DIR, &USTAR, &USTDIR, &EMEAN, &FMEAN, &WMEAN, &AMAX, &FPI, &CD, &Z0, &DTDYN, &FCUT, &DTG); #else /* 3.14 */ INTEGER IX, IY, IMOD = 1; REAL AS = p->as ? GFS_VALUE (cell, p->as) : 0.; REAL USTDIR; REAL CX = 0., CY = 0.; W3SRCE (&IX, &IY, &IMOD, p->A, p->ALPHA, p->WN, p->CG, &DEPTH, &U10ABS, &U10DIR, &AS, &USTAR, &USTDIR, &CX, &CY, &EMEAN, &FMEAN, &WMEAN, &AMAX, &FPI, &CD, &Z0, &DTDYN, &FCUT, &DTG); #endif /* 3.14 */ #if DEBUG guint i, j; for (i = 0; i < p->wave->nk; i++) { for (j = 0; j < p->wave->ntheta; j++) fprintf (stderr, "%g %g %g\n", frequency (i), theta (j, p->wave->ntheta), p->A[j + i*p->wave->ntheta]); fprintf (stderr, "\n"); } #endif action_to_energy (cell, p); GFS_VALUE (cell, p->ustar) = USTAR; GFS_VALUE (cell, p->fpi) = FPI; } static void deletedir (const char * name) { gchar * command = g_strconcat ("rm -r -f ", name, NULL); int status = system (command); if (status) g_warning ("could not cleanup wavewatch setup"); g_free (command); } static void initialize (GfsWave * wave) { static gboolean initialized = FALSE; if (!initialized) { /* Creates temporary directory */ gchar * template = gfs_template (); if (!g_mkdtemp (template)) { g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "wavewatch module: could not create temporary directory\n%s", strerror (errno)); return; } /* Creates wavewatch ww3_grid.inp input file */ gchar * sinput = g_strconcat (template, "/ww3_grid.inp", NULL); FILE * input = fopen (sinput, "w"); g_free (sinput); if (input == NULL) { g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "wavewatch module: could not create input file\n" "%s\n", strerror (errno)); deletedir (template); return; } fprintf (input, "$\n" " 'Gerris wavewatch module'\n" " %g %g %d %d 0.\n" " F F F F F T\n" " 900. 950. 900. 300.\n" "END OF NAMELISTS\n", GFS_WAVE_GAMMA, GFS_WAVE_F0, wave->nk, wave->ntheta); /* Dummy wavewatch parameters */ static gchar constant_parameters[] = " 3 3\n" " 1000. 1000. 1.\n" " -1000. -1000. 1.\n" " -0.1 2.50 10 -1000. 3 1 '(....)' 'NAME' 'bottom.inp'\n" " 1 1 1\n" " 1 1 1\n" " 1 1 1\n" #if WW3_VERSION == 222 " 0 0 F\n" #else /* version 3.12 and 3.14 */ " 10 3 1 '(....)' 'PART' 'mapsta.inp'\n" " 0 0 F\n" " 0 0 F\n" " 0 0\n" #endif /* version 3.12 and 3.14 */ " 0. 0. 0. 0. 0\n"; fputs (constant_parameters, input); fclose (input); /* Calls 'ww3_grid' of wavewatch to generate 'mod_def.w3' * required to initialize wavewatch. */ char * wdir = getcwd (NULL, 0); char * command = g_strconcat ("cd ", template, " && " "test -f $HOME/.wwatch3.env && " "`grep WWATCH3_DIR $HOME/.wwatch3.env | " "awk '{print $2}'`/exe/ww3_grid > ", wdir, "/log_grid.ww3 && " "mv mod_def.ww3 ", wdir, " && " "rm -r -f ", template, NULL); int status = system (command); deletedir (template); g_free (template); free (wdir); g_free (command); if (status == -1 || WEXITSTATUS (status) != 0) { g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "wavewatch module: error when running ww3_grid\nsee log_grid.ww3 for details"); return; } /* Initialize wavewatch */ GFSW3INIT (); /* cleanup */ remove ("mod_def.ww3"); initialized = TRUE; } } static void wavewatch_source (GfsWave * wave) { GfsDomain * domain = GFS_DOMAIN (wave); SourceParams p; gfs_domain_timer_start (domain, "wavewatch_source"); initialize (wave); p.wave = wave; p.A = g_malloc (wave->nk*wave->ntheta*sizeof (REAL)); p.CG = g_malloc (wave->nk*sizeof (REAL)); p.WN = g_malloc (wave->nk*sizeof (REAL)); p.ALPHA = g_malloc (wave->nk*sizeof (REAL)); p.ustar = gfs_variable_from_name (domain->variables, "Ustar"); p.fpi = gfs_variable_from_name (domain->variables, "Fpi"); p.u10 = gfs_variable_from_name (domain->variables, "U10"); p.v10 = gfs_variable_from_name (domain->variables, "V10"); p.as = gfs_variable_from_name (domain->variables, "AS"); guint i; for (i = 0; i < wave->nk; i++) { REAL omega = 2.*M_PI*frequency (i); p.WN[i] = omega*omega/9.81; p.CG[i] = 9.81/omega/2.; } gfs_catch_floating_point_exceptions (); gfs_domain_traverse_leaves (domain, (FttCellTraverseFunc) source, &p); if (gfs_restore_floating_point_exceptions ()) g_warning ("floating-point exceptions caught in wavewatch module"); g_free (p.A); g_free (p.CG); g_free (p.WN); g_free (p.ALPHA); gfs_domain_timer_stop (domain, "wavewatch_source"); } /* Initialize module */ /* only define gfs_module_name for "official" modules (i.e. those installed in GFS_MODULES_DIR) */ const gchar gfs_module_name[] = "wavewatch"; const gchar * g_module_check_init (void); void gfs_module_read (GtsFile * fp, GfsSimulation * sim); const gchar * g_module_check_init (void) { return NULL; } void gfs_module_read (GtsFile * fp, GfsSimulation * sim) { g_return_if_fail (fp != NULL); g_return_if_fail (sim != NULL); if (!GFS_IS_WAVE (sim)) { gts_file_error (fp, "wavewatch module can only be used with GfsWave"); return; } GFS_WAVE (sim)->source = wavewatch_source; gfs_domain_get_or_add_variable (GFS_DOMAIN (sim), "Ustar", "Friction velocity"); gfs_domain_get_or_add_variable (GFS_DOMAIN (sim), "Fpi", "Peak-input frequency"); } gerris-snapshot-131206/modules/CW263.f0000644000175100017510000005133612250371171014255 00000000000000 program CW263 c c Stream function wave theory code: c * automatic selection of order c * uniform current c * returns proportion of limiting height c j.r.chaplin@soton.ac.uk c c Subroutine cw260 solves the wave. Kinematics are then available c through subtroutine kmts as illustrated below in the main program. c Stores results in CW263.PSI in a format compatible with that used c by CW6.FOR (24/3/99) c character ans*1 c 10 write(*,'(a)') ' Water depth (m) = ' read*,d write(*,'(a)') ' Period (s) = ' read*,t write(*,'(a)') ' Wave height (m) = ' read*,h write(*,'(a)') ' Current (m/s) = ' read*,u nverb= 1 c call cw260(d,t,h,u,nverb,n,el) c 20 write(*,'(/a)') : ' (H)orizontal, (V)ertical, (S)urface, (N)ew wave, (Q)uit : ' read(*,'(a)') ans goto (20,21,22,23,10,29) (index('HhVvSsNnQq',ans)+3)/2 c c Horizontal c 21 write(*,'(a)') ' y (m) = ' read*,yy npt= 21 write(*,3) do 31 i=1,npt xx= el*(i-1)/float(npt-1) tt= 0.0 call kmts(n,xx,yy,tt,uu,vv,ut,vt,du,dv,etah) ans= ' ' if (yy.gt.etah) ans='*' 31 write(*,'(f9.3,8f8.3,1x,a)') xx,yy,uu,vv,ut,vt,du,dv,etah,ans goto 20 c c Vertical c 22 write(*,'(a)') ' x/L = ' read*,xl xx= xl*el yy= 0.0 tt= 0.0 call kmts(n,xx,yy,tt,uu,vv,ut,vt,du,dv,etah) npt= 21 write(*,3) do 32 i=1,npt yy= (d+etah)*(npt-i)/float(npt-1)-d call kmts(n,xx,yy,tt,uu,vv,ut,vt,du,dv,etah) 32 write(*,'(f9.3,8f8.3,1x,1a)') xx,yy,uu,vv,ut,vt,du,dv,etah goto 20 c c Free surface c 23 npt= 21 write(*,3) do 33 i=1,npt xx= el*(i-1)/float(npt-1) yy= h tt= 0.0 call kmts(n,xx,yy,tt,uu,vv,ut,vt,du,dv,etah) 33 write(*,'(f9.3,8f8.3)') xx,etah,uu,vv,ut,vt,du,dv,etah goto 20 c 29 stop 3 format(' x y u v ut ', : ' vt du dv eta') end c c c subroutine cw260(zd,zt,zh,zu,nverb,nfun,zel) c c Input: zd=depth; zt=period; zh=height; u=current; nverb=verbosity c Output: nfun=order; zel=wavelength c implicit double precision (a-h,o-z) parameter (nmax=25) real zd,zt,zh,zu,zel double precision k character itl*79,datim*22 common /one/ d,t,h,u,k : /two/ eta(nmax),c(nmax),amp(0:nmax) c pi= 4*atan(1.0) c d= zd t= zt hw= zh u= zu c c Get required solution order c call wavecel(t,d,u,tr,cel) call limit(hw,d,tr,rat,1) dl0= d/(9.81*t*t/(2*pi)) a= 0.86/sqrt(dl0) b= 7+2.2*log(dl0) cc= 2.7-3*log(dl0) nve= nint((a+b*rat+cc*rat**2)/2)*2 nve= nve+2 hb= hw/rat c k= 2*pi/(cel*t) c c Start with height=. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gerris-snapshot-131206/compile0000755000175100017510000001615212250371206013244 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-03-05.13; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free # Software Foundation, Inc. # Written by Tom Tromey . # # 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gerris-snapshot-131206/TODO0000644000175100017510000000257512250371171012363 00000000000000- Add corner flow test case. - The boundary conditions for the gradient of the pressure could be improved. Possible speed optimizations: - packing of parallel communications (in the case of domain composed of several boxes). - parallel match() uses doubles for cell layout description, guint would be more space efficient. - multiple calls to fl_domain_depth() are not needed => store maxlevel in FlDomain struct and update it only when necessary (i.e. when refining/coarsening etc...). Dodgy stuff: - Check that gfs_face_gradient() is used properly when not used for poisson problem (i.e. advection) (particularly in 3D with the factor of 2). Future stuff: - Richardson extrapolation => being able to compute advection terms one level above the leaf cells. - Adaptation given a constraint on maximum domain size (i.e. optimal distribution of a finite number of cells) (done 09/2003) - Generalize relaxation: (done 11/2002) * necessary for Crank-Nicholson * " for variable density (done 11/2002) - GFS -> OpenDX file conversion (done 11/2002, DX module). - Optimize parallel code by overlapping communications and computations: (done 2009) This could be done relatively easily (in Poisson relaxation for example) by first relaxing the cells close to the boundaries, start the communications, relax the remaining bulk cells then synchronize the communications. gerris-snapshot-131206/doc/0000755000175100017510000000000012250371675012520 500000000000000gerris-snapshot-131206/doc/figures/0000755000175100017510000000000012250371171014153 500000000000000gerris-snapshot-131206/doc/figures/topology.fig0000644000175100017510000001131712250371171016441 00000000000000#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 300 3225 4275 6975 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 600 3900 1800 3900 1800 5100 600 5100 600 3900 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1800 3900 4200 3900 4200 6300 1800 6300 1800 3900 2 1 0 4 4 7 50 0 -1 0.000 0 0 -1 0 0 2 4200 3300 600 6900 2 1 0 4 4 7 50 0 -1 0.000 0 0 -1 0 0 2 600 3300 4200 6900 3 0 0 2 0 7 50 0 -1 0.000 0 0 0 4 3000 3675 1650 4500 900 5325 375 6375 0.000 1.000 1.000 0.000 4 0 0 50 0 0 24 0.0000 4 255 930 2550 5175 mixed\001 4 0 0 50 0 0 18 0.0000 4 195 690 900 4575 mixed\001 -6 6 6300 3600 10200 6450 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 6600 3900 7800 3900 7800 5100 6600 5100 6600 3900 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 7800 3900 10200 3900 10200 6300 7800 6300 7800 3900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7800 5100 10200 5100 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 9000 3900 9000 6300 3 0 0 2 0 7 50 0 -1 0.000 0 0 0 4 9000 3675 7650 4500 6900 5325 6375 6375 0.000 1.000 1.000 0.000 4 0 0 50 0 0 18 0.0000 4 195 690 6900 4575 mixed\001 4 0 0 50 0 0 18 0.0000 4 195 510 9375 4575 fluid\001 4 0 0 50 0 0 18 0.0000 4 195 510 9375 5775 fluid\001 4 0 0 50 0 0 18 0.0000 4 195 510 8175 5775 fluid\001 4 0 0 50 0 0 18 0.0000 4 195 690 8100 4575 mixed\001 -6 6 6600 7200 10200 11625 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 6600 8100 7800 8100 7800 9300 6600 9300 6600 8100 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 7800 8100 10200 8100 10200 10500 7800 10500 7800 8100 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 9000 8100 9000 10500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7800 9300 9000 9300 3 0 0 2 0 7 50 0 -1 0.000 0 0 0 4 7875 7275 8325 8775 8400 10125 7800 11550 0.000 1.000 1.000 0.000 4 0 0 50 0 0 18 0.0000 4 195 510 6975 8775 fluid\001 4 0 0 50 0 0 18 0.0000 4 195 690 8100 8775 mixed\001 4 0 0 50 0 0 18 0.0000 4 195 690 8100 9975 mixed\001 -6 6 525 7425 4275 11175 2 1 0 4 4 7 50 0 -1 0.000 0 0 -1 0 0 2 4200 7500 600 11100 2 1 0 4 4 7 50 0 -1 0.000 0 0 -1 0 0 2 600 7500 4200 11100 -6 6 4425 9075 6375 9750 2 1 0 10 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 360.00 270.00 4500 9300 6300 9300 4 0 0 50 0 0 12 0.0000 4 180 1320 4725 9675 fl_refine_mixed()\001 -6 6 375 11625 4425 15825 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1800 12000 4200 12000 4200 14400 1800 14400 1800 12000 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1800 14400 3000 14400 3000 15600 1800 15600 1800 14400 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 600 14400 1800 14400 1800 15600 600 15600 600 14400 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 600 13200 1800 13200 1800 14400 600 14400 600 13200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1200 14400 1200 15600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 600 15000 1800 15000 2 1 0 4 4 7 50 0 -1 0.000 0 0 -1 0 0 2 4200 11700 450 15750 2 1 0 4 4 7 50 0 -1 0.000 0 0 -1 0 0 2 600 11700 4350 15750 -6 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 600 600 1800 600 1800 1800 600 1800 600 600 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1800 600 4200 600 4200 3000 1800 3000 1800 600 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 4800 600 6000 600 6000 1800 4800 1800 4800 600 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 6000 600 8400 600 8400 3000 6000 3000 6000 600 2 1 0 10 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 360.00 270.00 4500 5100 6300 5100 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 600 8100 1800 8100 1800 9300 600 9300 600 8100 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1800 8100 4200 8100 4200 10500 1800 10500 1800 8100 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 7800 12000 10200 12000 10200 14400 7800 14400 7800 12000 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 7800 14400 9000 14400 9000 15600 7800 15600 7800 14400 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 6600 14400 7800 14400 7800 15600 6600 15600 6600 14400 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 6600 13200 7800 13200 7800 14400 6600 14400 6600 13200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7200 14400 7200 15600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 6600 15000 7800 15000 2 1 0 10 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 360.00 270.00 4500 13800 6300 13800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 3 7800 13200 9000 13200 9000 14400 3 0 0 2 0 7 50 0 -1 0.000 0 0 0 4 6150 225 5175 675 4575 1725 4575 3075 0.000 1.000 1.000 0.000 3 0 0 2 0 7 50 0 -1 0.000 0 0 0 4 1875 7275 2325 8775 2400 10125 1800 11550 0.000 1.000 1.000 0.000 4 0 0 50 0 0 18 0.0000 4 195 510 975 1275 fluid\001 4 0 0 50 0 0 18 0.0000 4 195 690 5100 1275 mixed\001 4 0 0 50 0 0 24 0.0000 4 255 660 2700 1875 fluid\001 4 0 0 50 0 0 24 0.0000 4 255 660 6900 1875 fluid\001 4 0 0 50 0 0 12 0.0000 4 180 1320 4725 5475 fl_refine_mixed()\001 4 0 0 50 0 0 24 0.0000 4 255 930 2550 9375 mixed\001 4 0 0 50 0 0 18 0.0000 4 195 510 975 8775 fluid\001 4 0 0 50 0 0 12 0.0000 4 180 1425 4725 14175 ftt_refine_corner()\001 gerris-snapshot-131206/doc/figures/gse.tm0000644000175100017510000002665612250371171015232 00000000000000 > <\body> Following Tolman, 2002, Appendix A, the filtered value is defined as <\equation> F(\)=*F(\)+*F(\+\), with <\eqnarray*> >||+\,>>|>||+\,>>|>||-\,>>|>||-\>>>> and <\eqnarray*> >||*>>|>>>>>,>>|>||*>>|>>>>>.>>>> To third-order the Taylor expansion of can be written <\equation> F(\+\)=F(\)+\*\(\)+*\*\(\)*\, with the gradient > and Hessian > given by <\eqnarray*> >>>|>|F|\x>>>|F|\y>>>>>>,>>|>>>|>|F|\x>>|F|\x\y>>>|F|\x\y>>|F|\y>>>>>>.>>>> Using () in () gives <\eqnarray*> (\)>||*F(\)+*F(\)+\*\(\)+*\*\(\)*\>>|||)+*\(\)*\+*\*\(\)*\>>|||)+*\*\(\)*\>>>> I am lazy so I use Maxima to obtain the simplified form <\input|1) >> s:matrix([alpha*cos(theta)],[alpha*sin(theta)]); <\output> ) >*cos \>>|*sin \>>>>>> <\input|2) >> n:matrix([-beta*sin(theta)],[beta*cos(theta)]); <\output> ) >*sin \>>|*cos \>>>>>> <\input|3) >> F:matrix( [Fxx,Fxy], [Fxy,Fyy] ); <\output> ) >>|>>|>|>>>>>> <\input|4) >> r1: s+n; <\output> ) >*cos \-\*sin \>>|*sin \+\*cos \>>>>>> <\input|5) >> r2: -s+n; <\output> ) >*sin \-\*cos \>>|*cos \-\*sin \>>>>>> <\input|6) >> r3: -s-n; <\output> ) >*sin \-\*cos \>>|*sin \-\*cos \>>>>>> <\input|7) >> r4: s-n; <\output> ) >*sin \+\*cos \>>|*sin \-\*cos \>>>>>> <\input|11) >> ratsimp(transpose(r1).F.r1+transpose(r2).F.r2+transpose(r3).F.r3+transpose(r4).F.r4); <\output> ) >4*\*+4*\**sin \+8*\-8*\**cos \*sin \+4*\*+4*\**cos \> > We get <\eqnarray*> (\)>||)+>>|||**(\*cos \+\*sin \)*F*+>>|||**(\*sin \+\*cos \)*F+>>||| (\-\)*cos \*sin \*F,>>>> which can be rewritten <\eqnarray*> (\)-F(\)|\t>>||*F+D*F+2*D*F,>>>> with <\eqnarray*> >|>|*cos \+D*sin \,>>|>|>|*sin \+D*cos \,>>|>|>|-D)*cos \*sin \,>>>> and <\eqnarray*> >|>||3*\t>,>>|>|>||3*\t>.>>>> This means that to third-order accuracy the spatial-filtering scheme of Tolman is formally equivalent to a first-order time discretisation of the diffusion equation of Booij and Holthuijsen, 1987. Furthermore Tolman takes > and > as <\eqnarray*> >|>|*\c*\t,>>|>|>|*c*\\*\t,>>>> with c\>-\)*c/2>, whereas Booij and Holthuijsen take <\eqnarray*> >|>|*(\c)*T,>>|>|>|*(c*\\)*T.>>>> The two schemes are actually equivalent when >, > are identical to >, > which gives <\eqnarray*> >||*\t,>>|>||.>>>> This is obviously a much smaller value for > than the 4 days used in Tolman 2002 and I am not sure I understand where this discrepancy comes from... The stability criterion for the explicit diffusion scheme then becomes <\equation*> \t\x)|(c*\\)*4*\*\t> which simplifies as <\equation*> \t\x|2*\*c*\\> which is the standard CFL stability criterion with a CFL number of *\\)>. For 24 wave directions this number is larger than one for \2>, which means that this scheme does not restrict the timestep if wave advection is resolved using an explicit scheme (as is usually the case). <\references> <\collection> > > > <\auxiliary> <\collection> <\associate|toc> |math-font-series||1GSE alleviation using spatial filtering (or is it diffusion?)> |.>>>>|> gerris-snapshot-131206/doc/figures/indices.fig0000644000175100017510000001107612250371171016205 00000000000000#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 2250 2250 2550 2550 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 2400 2400 106 106 2400 2400 2475 2475 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 2400 2400 46 46 2400 2400 2446 2400 -6 6 1200 1200 3600 3600 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1200 1200 3600 1200 3600 3600 1200 3600 1200 1200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2400 1200 2400 3600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1200 2400 3600 2400 -6 6 5025 225 9375 4575 6 6000 1200 8400 3600 6 6000 1200 8400 3600 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 6000 1200 8400 1200 8400 3600 6000 3600 6000 1200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7200 1200 7200 3600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 6000 2400 8400 2400 -6 6 7050 2250 7350 2550 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 7200 2400 106 106 7200 2400 7275 2475 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 7200 2400 46 46 7200 2400 7246 2400 -6 4 0 0 50 0 0 18 0.0000 4 195 135 7725 1875 0\001 4 0 0 50 0 0 18 0.0000 4 195 135 6525 3075 6\001 4 0 0 50 0 0 18 0.0000 4 195 135 7725 3075 2\001 4 0 0 50 0 0 18 0.0000 4 195 135 6525 1875 4\001 4 0 0 50 0 0 18 0.0000 4 195 135 7275 2250 1\001 -6 2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 1.00 180.00 240.00 8700 2400 9300 2400 2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 1.00 180.00 240.00 5700 2400 5100 2400 2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 1.00 180.00 240.00 7200 900 7200 300 2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 1.00 180.00 240.00 7200 3900 7200 4500 4 0 0 50 0 0 18 0.0000 4 195 135 5475 2775 5\001 4 0 0 50 0 0 18 0.0000 4 195 135 7425 4200 3\001 4 0 0 50 0 0 18 0.0000 4 195 135 8850 2775 4\001 4 0 0 50 0 0 18 0.0000 4 195 135 7425 825 2\001 4 0 0 50 0 0 14 0.0000 4 150 105 6675 2025 5\001 4 0 0 50 0 0 14 0.0000 4 150 105 7875 2025 1\001 4 0 0 50 0 0 14 0.0000 4 150 105 6675 3225 7\001 4 0 0 50 0 0 14 0.0000 4 150 105 7875 3225 3\001 -6 6 1200 6000 3600 8400 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3600 6000 3600 8400 1200 8400 1200 6000 3600 6000 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3600 7200 1200 7200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2400 6000 2400 8400 -6 6 2250 7050 2550 7350 1 3 0 1 0 7 50 0 -1 0.000 1 4.7124 2400 7200 106 106 2400 7200 2325 7275 1 3 0 1 0 0 50 0 20 0.000 1 4.7124 2400 7200 46 46 2400 7200 2400 7246 -6 2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 1.00 180.00 240.00 3900 2400 4500 2400 2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 1.00 180.00 240.00 900 2400 300 2400 2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 1.00 180.00 240.00 2400 900 2400 300 2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 1.00 180.00 240.00 2400 3900 2400 4500 2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 1.00 180.00 240.00 2400 8700 2400 9300 2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 1.00 180.00 240.00 2400 5700 2400 5100 2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 1.00 180.00 240.00 3900 7200 4500 7200 2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 1.00 180.00 240.00 900 7200 300 7200 4 0 0 50 0 0 18 0.0000 4 195 135 1725 1875 0\001 4 0 0 50 0 0 18 0.0000 4 195 135 2925 1875 1\001 4 0 0 50 0 0 18 0.0000 4 195 135 1725 3075 2\001 4 0 0 50 0 0 18 0.0000 4 195 135 2925 3075 3\001 4 0 0 50 0 0 18 0.0000 4 195 135 675 2775 1\001 4 0 0 50 0 0 18 0.0000 4 195 135 2625 4200 3\001 4 0 0 50 0 0 18 0.0000 4 195 135 2625 825 2\001 4 0 0 50 0 0 18 0.0000 4 195 135 4050 2775 0\001 4 0 0 50 0 0 18 0.0000 4 195 135 2475 2250 4\001 4 0 0 50 0 0 14 0.0000 4 150 105 1875 2025 4\001 4 0 0 50 0 0 14 0.0000 4 150 105 3075 2025 5\001 4 0 0 50 0 0 14 0.0000 4 150 105 3075 3225 7\001 4 0 0 50 0 0 14 0.0000 4 150 105 1875 3225 6\001 4 0 0 50 0 0 18 0.0000 4 195 135 1725 6675 4\001 4 0 0 50 0 0 18 0.0000 4 195 135 2925 6675 5\001 4 0 0 50 0 0 18 0.0000 4 195 135 1725 7875 0\001 4 0 0 50 0 0 18 0.0000 4 195 135 2925 7875 1\001 4 0 0 50 0 0 14 0.0000 4 150 105 1875 6825 6\001 4 0 0 50 0 0 14 0.0000 4 150 105 3075 6825 7\001 4 0 0 50 0 0 14 0.0000 4 150 105 1875 8025 2\001 4 0 0 50 0 0 14 0.0000 4 150 105 3075 8025 3\001 4 0 0 50 0 0 18 0.0000 4 195 135 2475 7050 2\001 4 0 0 50 0 0 18 0.0000 4 195 135 675 7575 1\001 4 0 0 50 0 0 18 0.0000 4 195 135 4050 7575 0\001 4 0 0 50 0 0 18 0.0000 4 195 135 2625 5625 5\001 4 0 0 50 0 0 18 0.0000 4 195 135 2625 9000 4\001 4 0 0 50 0 0 14 0.0000 4 195 1830 1500 10050 children(3)={2,3,6,7}\001 4 0 0 50 0 0 14 0.0000 4 195 1830 1500 9750 children(2)={0,1,4,5}\001 4 0 0 50 0 0 14 0.0000 4 195 1830 1500 0 children(5)={4,5,6,7}\001 4 0 0 50 0 0 14 0.0000 4 195 1830 1500 -300 children(4)={0,1,2,3}\001 4 0 0 50 0 0 14 0.0000 4 195 1830 6300 -300 children(0)={1,3,5,7}\001 4 0 0 50 0 0 14 0.0000 4 195 1830 6300 0 children(1)={0,2,4,6}\001 gerris-snapshot-131206/doc/figures/cubed.fig0000644000175100017510000000557012250371171015653 00000000000000#FIG 3.2 Produced by xfig version 3.2.5 Landscape Center Metric A4 100.00 Single -2 1200 2 5 1 0 2 0 7 50 -1 -1 0.000 0 0 1 0 2812.500 5737.500 2025 5625 2250 5175 2700 4950 1 1 1.00 120.00 240.00 5 1 0 2 0 7 50 -1 -1 0.000 0 0 1 0 4162.500 4387.500 3375 4275 3600 3825 4050 3600 1 1 1.00 120.00 240.00 5 1 0 2 0 7 50 -1 -1 0.000 0 0 1 0 5512.500 3037.500 4725 2925 4950 2475 5400 2250 1 1 1.00 120.00 240.00 5 1 0 2 0 7 50 -1 -1 0.000 0 0 1 0 5738.000 4613.000 6525 4725 6300 5175 5850 5400 1 1 1.00 120.00 240.00 5 1 0 2 0 7 50 -1 -1 0.000 0 0 1 0 4388.000 5963.000 5175 6075 4950 6525 4500 6750 1 1 1.00 120.00 240.00 5 1 0 2 0 7 50 -1 -1 0.000 0 0 1 0 3038.000 7313.000 3825 7425 3600 7875 3150 8100 1 1 1.00 120.00 240.00 6 1575 5850 2925 7200 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 1575 5850 2925 5850 2925 7200 1575 7200 1575 5850 4 1 0 50 -1 0 28 0.0000 4 315 240 2250 6660 1\001 -6 6 5625 3150 6975 4500 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 5625 3150 6975 3150 6975 4500 5625 4500 5625 3150 4 1 0 50 -1 0 28 0.0000 4 315 240 6300 3960 6\001 -6 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 2925 5850 4275 5850 4275 7200 2925 7200 2925 5850 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 2925 4500 4275 4500 4275 5850 2925 5850 2925 4500 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 4275 3150 5625 3150 5625 4500 4275 4500 4275 3150 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 4275 4500 5625 4500 5625 5850 4275 5850 4275 4500 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 2925 7425 2925 8595 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 4275 7425 4275 8595 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 5625 6075 5625 8595 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 6975 4725 6975 8595 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 4500 7200 8325 7200 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 5850 5850 8325 5850 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 7200 4500 8325 4500 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 7200 3150 8325 3150 2 2 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 5 1575 7200 2925 7200 2925 8550 1575 8550 1575 7200 2 2 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 5 5625 1800 6975 1800 6975 3150 5625 3150 5625 1800 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 1575 7425 1575 8595 4 1 0 50 -1 0 28 0.0000 4 315 240 3600 6660 2\001 4 1 0 50 -1 0 28 0.0000 4 315 240 3600 5310 3\001 4 1 0 50 -1 0 28 0.0000 4 330 240 4950 3960 5\001 4 1 0 50 -1 0 28 0.0000 4 315 240 4950 5310 4\001 4 1 0 50 -1 0 28 0.0000 4 315 390 1575 9225 -1\001 4 1 0 50 -1 0 28 0.0000 4 315 240 2925 9225 1\001 4 1 0 50 -1 0 28 0.0000 4 315 240 4275 9225 3\001 4 1 0 50 -1 0 28 0.0000 4 330 240 5625 9225 5\001 4 1 0 50 -1 0 28 0.0000 4 315 240 6975 9225 7\001 4 1 0 50 -1 0 28 0.0000 4 315 390 8775 7425 -1\001 4 1 0 50 -1 0 28 0.0000 4 315 240 8775 6075 1\001 4 1 0 50 -1 0 28 0.0000 4 315 240 8775 4725 3\001 4 1 0 50 -1 0 28 0.0000 4 330 240 8775 3375 5\001 4 1 0 50 -1 0 28 0.0000 4 315 240 2250 8010 6\001 4 1 0 50 -1 0 28 0.0000 4 315 240 6300 2610 1\001 gerris-snapshot-131206/doc/figures/lonlat.tm0000644000175100017510000005716212250371171015741 00000000000000 <\body> longitude-latitude coordinate system>|>|>|> A system of conservation laws of the form <\equation> \>\*dV+\>\(\)\\*dS=0 is discretised in Gerris as <\equation*> h*c*\\+s*h*\(\)=0 or <\equation> h*c*\\+s\(\)*=0 with the dimensional cell size. The figure below illustrates the lengths of the faces of a surface element in a longitude-latitude coordinate system with > the longitude and > the latitude. |Elementary lengths for a surface element.> This leads to the discrete form for () <\equation*> r*cos \*d\*d\*\\+>>r*d\*\>>(\)+>>r*cos \*d\*\>>(\)=0, or <\equation> r*cos \*d\*d\*\\+>>d\*\>>(\)+>>cos \*d\*\>>(\)=0. Equating the terms with () gives <\with|color|blue> <\eqnarray*> >|>|*cos \ *d\*d\,>>|>>>|>|,>>|>>>|>|* d\.>>>> For the Saint-Venant equations > and (\)> are given by <\equation*> \\>>|*u>>|*v>>>>>, \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\)\*u>>|*u+g*|2>>>|*u*v>>>>>, \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\)\*v>>|*u*v>>|*v+g*|2>>>>>>. Using (), the equations in longitude-latitude coordinates can be written <\equation> r*cos \*\\+>>*\(\)+>>cos \*\(\)=0. The differential form can be recovered by taking the limit as > and > tend to zero <\eqnarray*> |*\\+\>(\*u)+\>(\*v*cos \)=0,>|>||*\(\*u)+\>\*u+g*|2>+\>\*u*v*cos \=0,>|>||*\(\*v)+\>(\*u*v)+\>\*v+g*|2>*cos \=0.>|>>> This can be rewritten in advective form as <\eqnarray*> |\+*>*\>(\*u)+\>(\*v*cos \)=0,>|>||u+*>*(u*\>u+v*cos \*\> u)*tan \>>+*>*\>\=0,>|>||v+*>*(u*\>v+v*cos \ \> v)|r>*tan \>+*\>\|2*r>*tan \>=0,>|>>> where additional terms (compared to the standard form) are indicated in red and missing terms in green. System of ``balance laws'' on general manifolds (equation (95)) <\equation> \\+>*\>\=>, with the determinant of the metric tensor and >> the geometric source terms. For the shallow-water equations <\equation*> \(\,t)\>>|*u>>|*u>>>>>,\(\,\)\**u>>|>>|>>>>>,>(\,\)\>|*T>>|*T>>>>>, and <\equation*> T\\*u*u+*g*\*h. For a spherical coordinate system with =\> the longitude and =\> the latitude, the metric is <\eqnarray*> >|>|*cos \>|>||>>>>>,>>|>|>|*cos \,>>>> so that <\equation*> h=>=*cos \>,h=>=>,h=h=0. The corresponding Christofell symbols are given by (for a general orthogonal metric) <\eqnarray*> >|>|*hk>(\>hm>+\>hn>-\>>h),>>|>|>|>*>h>|>h>>|>h>|>h>>>>>=|*>>|*>|>>>>,>>|>|>|>*>h>|>h>>|>h>|>h>>>>>=*cos \>|>||>>>>.>>>> The geometric source term is then <\equation*> >(\,\)\>|*(T+*T)>>|*cos \*T>>>>>=>|*\*u*u>>|*cos \*\*u*u-|2*r*>*tan \>>>>> Equation () can be developed as <\eqnarray*> \+>*\>(*cos \*\*u)+\>(cos \*\*u)>||>|(\*u)+>*\>(cos \*(\*u*u+|2*r*cos\>))+\>(cos \*\*u*u)>||*T,>>|(\*u)+>*\>(cos \**\*u*u)+\>(cos \*(\*u*u+|2*r*>))>||*T.>>>> Using <\equation*> u\u\r*cos \ u,v\u\r*u, (where exponents and indices indicate the covariant and contravariant vector coordinates respectively) then gives <\eqnarray*> \+>*\>(\*u)+\>(cos \*\*v)>||>|u+*>*(u*\>u+cos \*v*\>u)+>*\>\-*tan \>||>|v+>*(u*\>v+cos \*v**\>*v)+*\>\>||*tan \,>>>> which is the standard advective form. The geometric source term can be re-expressed in the covariant coordinate system as <\equation*> |^>>\>|*\**u|r*>>>|*\**u|r*>-|2*r*>*tan \>>>>> \; <\equation*> h>*h>*d\*d\*\\+>>h>*d\*\>(\)+>>h>*d\*\>(\)=0 can be rewritten <\equation*> h>*h>*\\+>*>>h>*\>(\)+>*>>h>*\>(\)=0. The differential form can be recovered by making > and > tend to zero <\with|mode|math> <\eqnarray*> |>*h>*\\+\>(h>*\*u)+\>(h>*\*v)=0,>|>||>*h>*\(\*u)+\>h>*\*u+g*|2>+\>h>*\*u*v=0,>|>||>*h>*\(\*v)+\>(h>*\*u*v)+\>h>*\*v+g*|2>=0.>|>>> which can be expanded as <\with|mode|math> <\eqnarray*> |\+>>*\>\*+>>*\>\+*|h>*h>>*\>(h>*u)+\>(h>*v)=0,>|>||u*+>>*\>u+>>*\>u*+>>*\>\+g*|2*h>*h>>*\>h>=0,>|>||v+>>*\>v+>>*\>v+>>*\>\+g*|2*h>*h>>*\>h>=0.>|>>> Introducing the notation <\equation*> d=\+>>*\>+>>*\>, this can be rewritten <\with|mode|math> <\eqnarray*> |\+*|h>*h>>*\>(h>*u)+\>(h>*v)=0,>|>||u**v>>>+>>*\>\|2*h>*h>>*\>h>>=0,>|>>||v*u>>>+>>*\>\|2*h>*h>>*\>h>>=0.>|>>> where additional and missing terms (respective to equations 43, 44 and 45 of Williamson et al, 1991) are indicated in red and green respectively and <\equation*> f\>h>-u*\>h>|h>*h>>*.* For spherical coordinates <\equation*> h>=r*cos \,h>=r,\>h>=0,\>h>=-r*sin \, which gives <\with|mode|math> <\eqnarray*> |\+*|r*cos \>*\>u+\>(v*cos \)=0,>|>||u**tan \>>>+>*\>\=0,>|>||v|r>*tan \>>>>+*\>\|2*r>*tan \>=0.>|>>> For polar coordinates <\equation*> h>=1,h>=\,\>h>=1,\>h>=0, which gives <\with|mode|math> <\eqnarray*> |\+*|\>*\>(\*u)+\>v=0,>|>||u*|\>>>>+g*\>\|2*\>>=0,>|>||v>>>>>+>*\>\=0.>|>>> From Audusse et al, 2004, the one-dimensional scheme in Cartesian coordinates can be written <\equation> \x*dU+\-\=S, with left and right numerical fluxes <\eqnarray*> >||(U,U)+*>|-\>>>>>,>>|>||(U,U)+*>|-\>>>>>,>>>> and centered source term (necessary to correct second-order imbalances) <\equation*> S=*>|+\)*(z-z)>>>>>. The lake-at-rest steady state is defined by =0> and +z=\+z=\+z=H> for all . In this case <\eqnarray*> >||*>|>>>>>+*>|-\>>>>>,>>|>||*>|>>>>>+*>|-\>>>>>.>>>> The centered source term becomes <\equation*> S=**>|+\)*(H-\-H+\)>>>>>=*>|-\>>>>>, and restores hydrostatic balance. For general orthogonal coordinates () can be rewritten <\equation*> \x*c*dU+s*\-s*\=S+S. For the lake-at-rest steady state, this gives for the velocity component <\equation*> \x*c*du+*(s*\-s*\)=S+S, with the geometric source term (red term in ()) discretised as <\equation*> S\*(\+\)*(s-s). The definition of > thus needs to be modified to maintain balance, a simple choice is <\equation*> S=*>|+s)*(\+\)*(z-z)>>>>>, which for the lake-at-rest steady-state gives <\eqnarray*> *\x*c*du>||*(s+s)*(\-\)*++\|2>*(s-s)-s*\+s*\>>|||>>> This scheme also reduces to the Cartesian scheme for =s=c=1> and to the first-order scheme for =z=z> and \=\=\>. <\references> <\collection> > > > > > > > > > > > > > <\auxiliary> <\collection> <\associate|figure> > <\associate|toc> |1Application to the Saint-Venant equations |.>>>>|> > |2Derivation using the ``manifold approach'' of Rossmanith et al., 2004 |.>>>>|> > |3The Saint-Venant equations in general orthogonal coordinates |.>>>>|> > |3.1Application to spherical coordinates |.>>>>|> > |3.2Application to polar coordinates |.>>>>|> > |4``Well-balanced'' scheme in general orthogonal coordinates |.>>>>|> > gerris-snapshot-131206/doc/figures/thin.fig0000644000175100017510000001260512250371171015530 00000000000000#FIG 3.2 Produced by xfig version 3.2.5-alpha5 Landscape Center Metric A4 100.00 Single -2 1200 2 2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 3600 450 4500 450 4500 1350 3600 1350 3600 450 2 2 0 2 0 7 50 -1 -1 0.000 0 0 7 0 0 5 4950 450 5850 450 5850 1350 4950 1350 4950 450 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4050 450 3600 900 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 5400 450 5400 1350 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3600 3600 3825 3150 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4275 3150 4500 3600 2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 3600 5850 4500 5850 4500 6750 3600 6750 3600 5850 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 3375 6075 3825 6300 3375 6525 2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5 3600 1800 4500 1800 4500 2700 3600 2700 3600 1800 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4050 1800 3600 2250 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4500 2250 4050 2700 2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 3600 3150 4500 3150 4500 4050 3600 4050 3600 3150 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 6300 3150 7200 3150 7200 4050 6300 4050 6300 3150 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 6300 3600 7200 3600 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 6750 3150 7200 3375 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 7650 3150 8550 3150 8550 4050 7650 4050 7650 3150 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 7650 3600 8100 3150 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 8775 3375 8325 3600 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 8325 3600 8775 3825 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 3600 4500 4500 4500 4500 5400 3600 5400 3600 4500 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4500 5175 4275 5400 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4500 4725 3825 5400 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 3600 4950 4050 4500 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 4950 4500 5850 4500 5850 5400 4950 5400 4950 4500 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 5850 4725 5400 4500 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4950 4950 5175 5400 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 5625 5400 5850 5175 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 3600 7200 4500 7200 4500 8100 3600 8100 3600 7200 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 3600 7875 4500 7875 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 3600 7425 4500 7425 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 4950 7200 5850 7200 5850 8100 4950 8100 4950 7200 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4950 7425 5175 7200 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4950 7875 5625 7200 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 6300 7200 7200 7200 7200 8100 6300 8100 6300 7200 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 3 6525 6975 6750 7425 6975 6975 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 3 6525 8325 6750 7875 6975 8325 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 3600 8550 4500 8550 4500 9450 3600 9450 3600 8550 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 3600 9000 4500 9000 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 3600 8775 3825 8550 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4275 8550 4500 8775 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4950 9000 5400 8550 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4950 8775 5175 8550 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 4950 8550 5850 8550 5850 9450 4950 9450 4950 8550 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 3 5175 9675 5400 9225 5625 9675 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 6300 8550 7200 8550 7200 9450 6300 9450 6300 8550 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 3 6525 8325 6750 8775 6975 8325 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 3 6525 9675 6750 9225 6975 9675 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 3 7425 8775 6975 9000 7425 9225 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 3600 9900 4500 9900 4500 10800 3600 10800 3600 9900 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 3600 10125 3825 9900 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 3825 10800 3600 10575 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4500 10575 4275 10800 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4275 9900 4500 10125 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 4950 9900 5850 9900 5850 10800 4950 10800 4950 9900 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 5400 9900 4950 10350 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 4950 10125 5175 9900 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 5850 10350 5400 10800 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 2 5850 10575 5625 10800 2 2 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 5 6300 9900 7200 9900 7200 10800 6300 10800 6300 9900 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 3 6525 9675 6750 10125 6975 9675 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 3 6075 10125 6525 10350 6075 10575 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 3 6525 11025 6750 10575 6975 11025 2 1 0 2 4 7 50 -1 -1 0.000 0 0 7 0 0 3 7425 10125 6975 10350 7425 10575 2 1 0 2 0 7 50 -1 -1 0.000 0 0 7 0 0 2 4950 3600 5850 3600 2 2 0 2 0 7 50 -1 -1 0.000 0 0 7 0 0 5 4950 3150 5850 3150 5850 4050 4950 4050 4950 3150 2 1 0 2 0 7 50 -1 -1 0.000 0 0 7 0 0 3 5175 2925 5400 3375 5625 2925 4 0 0 50 -1 16 20 0.0000 4 255 2685 450 675 odd = 2 even = 0: \001 4 0 0 50 -1 16 20 0.0000 4 255 2595 450 2025 odd = 4 even = 0:\001 4 0 0 50 -1 16 20 0.0000 4 255 2595 450 3375 odd = 2 even = 1:\001 4 0 0 50 -1 16 20 0.0000 4 255 2595 450 4725 odd = 2 even = 2:\001 4 0 0 50 -1 16 20 0.0000 4 255 2595 450 6075 odd = 0 even = 1:\001 4 0 0 50 -1 16 20 0.0000 4 255 2595 450 7425 odd = 0 even = 2:\001 4 0 0 50 -1 16 20 0.0000 4 255 2595 450 8775 odd = 0 even = 3:\001 4 0 0 50 -1 16 20 0.0000 4 255 2595 450 10125 odd = 0 even = 4:\001 4 0 4 50 -1 16 20 0.0000 4 255 1200 9450 6075 red: thin\001 4 0 0 50 -1 16 20 0.0000 4 255 1665 9450 6525 black: thick\001 gerris-snapshot-131206/doc/figures/plicheight.fig0000644000175100017510000000177312250371171016712 00000000000000#FIG 3.2 Produced by xfig version 3.2.5-alpha5 Landscape Center Metric A4 100.00 Single -2 1200 2 6 2700 2250 4950 7200 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 2700 2250 4950 2250 4950 4725 2700 4725 2700 2250 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 2700 4725 4950 4725 4950 7200 2700 7200 2700 4725 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 2700 5400 4050 4725 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4275 4725 4950 4050 2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 2.00 120.00 240.00 3825 6075 3825 4845 4 0 4 50 -1 0 20 0.0000 4 225 180 4005 5565 H\001 -6 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 5850 2250 8100 2250 8100 4725 5850 4725 5850 2250 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 5850 4725 8100 4725 8100 7200 5850 7200 5850 4725 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 5850 5400 6860 4723 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 7080 4728 8100 4050 2 1 1 2 4 7 50 -1 -1 4.500 0 0 -1 1 0 2 1 1 2.00 120.00 240.00 6975 6075 6976 4046 4 0 4 50 -1 0 20 0.0000 4 225 285 7155 5565 H?\001 gerris-snapshot-131206/doc/figures/match.fig0000644000175100017510000000725412250371171015666 00000000000000#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 3000 300 4200 1500 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3000 300 4200 300 4200 1500 3000 1500 3000 300 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3600 300 3600 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3000 900 4200 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3300 300 3300 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3900 300 3900 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3000 600 4200 600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3000 1200 4200 1200 -6 6 3000 1800 4200 3000 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3000 1800 4200 1800 4200 3000 3000 3000 3000 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3600 1800 3600 3000 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3000 2400 4200 2400 -6 6 5700 1800 6900 3000 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 5700 1800 6900 1800 6900 3000 5700 3000 5700 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 6300 1800 6300 3000 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 5700 2400 6900 2400 -6 6 7200 300 8400 1500 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 7200 300 8400 300 8400 1500 7200 1500 7200 300 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7800 300 7800 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7200 900 8400 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7500 300 7500 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 8100 300 8100 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7200 600 8400 600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7200 1200 8400 1200 -6 6 7200 1800 8400 3000 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 7200 1800 8400 1800 8400 3000 7200 3000 7200 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7800 1800 7800 3000 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7200 2400 8400 2400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7200 2100 8400 2100 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7500 1800 7500 2400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 8100 1800 8100 2400 -6 6 3000 5100 4200 6300 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3000 5100 4200 5100 4200 6300 3000 6300 3000 5100 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3600 5100 3600 6300 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3000 5700 4200 5700 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3300 5100 3300 6300 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3900 5100 3900 6300 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3000 5400 4200 5400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3000 6000 4200 6000 -6 6 3000 6600 4200 7800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3000 6600 4200 6600 4200 7800 3000 7800 3000 6600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3600 6600 3600 7800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3000 7200 4200 7200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3000 6900 4200 6900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3300 6600 3300 7200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3900 6600 3900 7200 -6 6 1500 6600 2700 7800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1500 6600 2700 6600 2700 7800 1500 7800 1500 6600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2100 6600 2100 7800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1500 7200 2700 7200 -6 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1500 1800 2700 1800 2700 3000 1500 3000 1500 1800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1500 3300 2700 3300 2700 4500 1500 4500 1500 3300 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 5700 3300 6900 3300 6900 4500 5700 4500 5700 3300 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1500 8100 2700 8100 2700 9300 1500 9300 1500 8100 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2400 6600 2400 7200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2100 6900 2700 6900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 1 5700 5550 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 1 5700 5550 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2100 8100 2100 9300 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1500 8700 2700 8700 gerris-snapshot-131206/doc/figures/viscous-metric-3D.tm0000644000175100017510000005201712250371171017662 00000000000000 <\body> The viscous terms require the expression of <\equation*> >\(2*\*) with <\equation*> 2*=u>+> in general orthogonal coordinates. This can be expressed in the general case (Germain and Muller, chapter XIII.5) <\equation*> =|||||h>+|h>*|h>+|h>*|h>>|*|h>+|h>-*h+u*h|h*h>>|*|h>+|h>-*h+u*h|h*h>>>|||>|||>>>> and <\equation*> >\(2*\*)=*h*h>*\*h*h*(D*\+D*\+D*\) The first component can then be written <\eqnarray*> *h*h*>\(2*\*)>||*h*h*D)*+(2*\*h*h*D)*+(2*\*h*h*D)*>>|||**(D*h*h+D*h*h-D*h*h-D*h*h)>>>> The divergence-free condition is written <\equation*> h*h*h*>\=(u*h*h)=0 <\eqnarray*> |(2*\*h*h*D)+(2*\*h*h*D)+(2*\*h*h*D)*=>|>||*h*h*D)+\*h*h*|h>+|h>-*h+u*h|h*h>+\*h*h*|h>+|h>-*h+u*h|h*h>>|>|||>>> Identities useful in the general case <\equation*> (\*h*u)=(\*h)*u+\*h*u <\equation*> (\*h*u)=(\*h)*u+\*h*u <\equation*> (\*h*u)=(\*h)*u-(\*h)*u+(\*h*u) <\equation*> h*h*h*>\=(uh*h)+(u*h*h)+(u*h*h)=0 <\equation> u(h*h)+h*h*u+u*(h*h)+h*h*u+u*(h*h)+h*h*u=0 Multiplying by /h> and taking the derivative gives <\equation*> \*h*h*|h>*+(\*h*u)+(\*h*u)+\**(h*h)+u*(h*h)+u*(h*h)|h>=0 <\eqnarray*> ||*h*h*D)>>|||\*h*h*|h>+|h>-*\*h*h**h+u*h|h*h>>>|||\*h*h*|h>+|h>-\*h*h**h+u*h|h*h>>>|||2*\*h*h*|h>+2*\*h*h*|h>+2*\*h*h*|h>>>|||\*h*h*|h>+(\*h*u)-*\*h**h+u*h|h>>>|||\*h*h*|h>+(\*h*u)-\*h**h+u*h|h>>>|||2*\*h*h*|h>+2*\*h*h*|h>+2*\*h*h*|h>>>|||\*h*h*|h>+(\*h)*u-(\*h)*u+(\*h*u)-*\*h**h+u*h|h>>>|||\*h*h*|h>+(\*h)*u-(\*h)*u+(\*h*u)-\*h**h+u*h|h>>>|||*\*h*h*|h>+2*\*h*h*|h>+2*\*h*h*|h>>>|||\*h*h*|h>+(\*h)*u-(\*h)*u-*\*h**h+u*h|h>>>|||\*h*h*|h>+(\*h)*u-(\*h)*u-\*h**h+u*h|h>>>|||\**(h*h)+u*(h*h)+u*(h*h)|h>>>|||*\*h*h*|h>+\*h*h*|h>+\*h*h*|h>>>|||*h*u-(\*h)*u+\*h*u-(\*h)*u>>|||\*h*h|h>-(\*h*)*u+\*h*h*|h>-(\*h*)*u>>|||\*h**h|h>-*\*h**h|h>>>|||\*h**h|h>-\*h**h|h>>>|||\**(h*h)|h>>>|||*\*h*h*|h>+\*h*h*|h>+\*h*h*|h>>>|||*h*u+*h*u+h*u+h*u-h*h|h>-h*h*|h>+*(h*h)|h>+\*h*u-|h>**(u*h+u*h)+\*h*u-|h>**(u*h+u*h)>>|||*u**h)|h>+h*|h>+h*|h>>>|||*u*h*|h>-*h*|h>-h>>|||*u*h*|h>-h*|h>-h>>|||*u**h)|h>-\**u*h+h*|h>-\*u*h+h*|h>>>|||*u*h*|h>-\*u*h*|h>>>|||*u*h|h>+\*u*h*|h>>>>> **(D*h*h+D*h*h-D*h*h-D*h*h)> <\eqnarray*> ||*\*h*h*|h>+\*h*h*|h>+\*h*h*|h>>>|||**(h*h)-h*h*u-h*h*u|h>+(h*u)+*(h*u)>>|||*h**h+u*h|h>*-u>>|||*h**h+u*h|h>**-u>>|||*u**h)|h>+h*|h>+h*|h>+*(h+2*h)|h*h>*+*(h+2*h)|h*h>>>|||*u*h*|h>-h*|h>+h+*h*h|h*h>*+2**h|h>*>>|||*u*h*|h>-h*|h>+h+*h*h|h*h>+2**h|h>>>|||*u**h)|h>+u*h+3*h*|h>+*u*h+3*h*|h>>>|||*h|h>-2*u*h*|h>>>>> Using the incompressibility condition () one gets <\eqnarray*> ||**h)|h>+u*h+3*h*|h>+*u*h+3*h*|h>-2*u*h|h>-2*u*h*|h>>>|||(h*h)-u*(h*h)-h*h*u-u*(h*h)-h*h*u|h*h>**h)|h>>>|||*h+3*h*|h>+*u*h+3*h*|h>-2*u*h|h>-2*u*h*|h>>>|||*(h*h)|h*h*h>*-u**h)*(h*h)|h*h*h>-u**h)*(h*h)|h*h*h>>>|||*h*|h>+2*u*h*|h>-2*u*h|h>-2*u*h*|h>>>>> Replacing in the above and regrouping terms then gives **(D*h*h+D*h*h-D*h*h-D*h*h)> <\eqnarray*> ||*\*h*h*|h>+\*h*h*|h>+\*h*h*|h>>>|||**(h*h)-h*h*u-h*h*u|h>+(h*u)+*(h*u)>>|||*h**h+u*h|h>*-u>>|||*h**h+u*h|h>**-u>>|||*u*h*|h>+h**|h>+h*|h>+h*|h>>>|||*+h|h*h>*+h*+h|h*h>>>|||*u*h*|h>-h*|h>+h+h**|h>*-2**|h>>>|||*u*h*|h>-h*|h>+h+h**|h>-2*|h>>>|||*u*h*|h>+u*h*|h>-u*h*|h>-u*h*|h>>>>> <\eqnarray*> =r>|=\>|=\>>|=1>|=r>|=r*sin\>>|=0>|=0>|>|=1>|=0>|>|=sin\>|=r*cos\>|>||=cte>|>>> <\eqnarray*> *sin\*>\(2*\*)>||*\*h*h*|h>+\*h*h*|h>+\*h*h*|h>>>|||*u*sin\>>|||*u>*cos\>>|||*(u,\>*sin\+u,\>*)>>|||*(r*sin\*u)+(sin\*u>)>+>|sin\>>>>|||*(u*sin\+u>*cos\+u,\>*sin\+u,\>*)>>>> which matches the result in Germain and Muller, chapter XIII.8.2.b. <\references> <\collection> > > > > > > > <\auxiliary> <\collection> <\associate|toc> |1General case |.>>>>|> > |2Viscous term |.>>>>|> > |3Application to spherical coordinates |.>>>>|> > gerris-snapshot-131206/doc/figures/parabola.fig0000644000175100017510000001211012250371171016336 00000000000000#FIG 3.2 Landscape Center Inches A4 100.00 Single -2 1200 2 6 4050 1950 4350 2250 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4275 2025 4125 2175 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4125 2025 4275 2175 -6 6 4050 5550 4350 5850 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4275 5625 4125 5775 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4125 5625 4275 5775 -6 6 4050 3150 4350 3450 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4275 3225 4125 3375 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4125 3225 4275 3375 -6 6 5775 5475 9525 5775 4 0 0 50 0 32 18 0.0000 4 195 165 5775 5700 D\001 4 0 0 50 0 1 18 0.0000 4 255 3510 6000 5700 p = -2/9 p6 - 8/27 p7 + 14/27 p\001 -6 6 5775 4875 9225 5175 4 0 0 50 0 32 18 0.0000 4 195 165 5775 5100 D\001 4 0 0 50 0 1 18 0.0000 4 255 3180 6000 5100 p = -1/3 p6 -1/5 p5 + 8/15 p\001 -6 6 7200 6600 9600 9000 6 8625 7875 8775 8025 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 8738 7912 8662 7988 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 8662 7912 8738 7988 -6 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 8250 7950 47 47 8250 7950 8235 7995 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 7800 7800 8400 7800 8400 8400 7800 8400 7800 7800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 8400 7800 9000 7800 9000 8400 8400 8400 8400 7800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 7800 7200 8400 7200 8400 7800 7800 7800 7800 7200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 8100 7800 8100 8400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 7800 8100 8400 8100 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 8400 6600 9600 6600 9600 7800 8400 7800 8400 6600 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 7200 6600 8400 6600 8400 7800 7200 7800 7200 6600 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 7200 7800 8400 7800 8400 9000 7200 9000 7200 7800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 8400 7800 9600 7800 9600 9000 8400 9000 8400 7800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 7200 6600 7800 6600 7800 7200 7200 7200 7200 6600 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 9000 8400 9600 8400 9600 9000 9000 9000 9000 8400 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 7200 8400 7800 8400 7800 9000 7200 9000 7200 8400 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 8664 8065 8739 8065 8739 8139 8664 8139 8664 8065 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 8925 7125 9075 7125 9075 7275 8925 7275 8925 7125 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 8663 8661 8738 8661 8738 8735 8663 8735 8663 8661 4 0 0 50 0 0 12 0.0000 4 135 75 8771 7998 ?\001 -6 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 3600 2100 75 75 3600 2100 3675 2100 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 4800 2100 75 75 4800 2100 4875 2100 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 3600 5700 75 75 3600 5700 3675 5700 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 4800 5700 75 75 4800 5700 4875 5700 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 2400 3300 75 75 2400 3300 2475 3300 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 1200 3300 75 75 1200 3300 1275 3300 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 1500 3000 47 47 1500 3000 1485 3045 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 1500 3600 47 47 1500 3600 1485 3645 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3000 2700 5400 2700 5400 5100 3000 5100 3000 2700 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3000 300 5400 300 5400 2700 3000 2700 3000 300 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3000 5100 5400 5100 5400 7500 3000 7500 3000 5100 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 4125 3825 4275 3825 4275 3975 4125 3975 4125 3825 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 4125 6225 4275 6225 4275 6375 4125 6375 4125 6225 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 4125 1425 4275 1425 4275 1575 4125 1575 4125 1425 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4200 300 4200 2700 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3000 1500 5400 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4200 5100 4200 7500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3000 6300 5400 6300 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 600 2700 3000 2700 3000 5100 600 5100 600 2700 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1800 2700 1800 5100 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 600 3900 3000 3900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1200 2700 1200 3900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 600 3300 1800 3300 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1425 3225 1575 3375 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1575 3225 1425 3375 2 1 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 2 3075 3225 2925 3375 2 1 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 2 2925 3225 3075 3375 4 0 0 50 0 1 12 0.0000 4 180 180 900 3150 p5\001 4 0 0 50 0 1 18 0.0000 4 255 270 4425 1350 p2\001 4 0 0 50 0 1 18 0.0000 4 255 270 4425 2475 p3\001 4 0 0 50 0 1 18 0.0000 4 180 135 4425 3375 p\001 4 0 0 50 0 1 18 0.0000 4 255 270 4425 3975 p0\001 4 0 0 50 0 1 18 0.0000 4 255 270 4425 5475 p4\001 4 0 0 50 0 1 18 0.0000 4 255 270 4425 6675 p1\001 4 0 0 50 0 32 12 0.0000 4 135 120 3150 3375 D\001 4 0 0 50 0 1 12 0.0000 4 180 180 1575 3150 p7\001 4 0 0 50 0 1 12 0.0000 4 180 180 2175 3150 p6\001 4 0 0 50 0 1 12 0.0000 4 135 90 3300 3375 p\001 4 0 0 50 0 1 18 0.0000 4 255 3615 6000 2400 p = 15/16 p0 - 3/32 p1 + 5/32 p2\001 4 0 0 50 0 1 18 0.0000 4 255 3345 6000 3000 p = 5/6 p0 - 1/14 p1 + 5/21 p3\001 4 0 0 50 0 1 18 0.0000 4 255 2670 6000 3600 p = p0 - 1/7 p4 + 1/7 p2\001 4 0 0 50 0 1 18 0.0000 4 255 3075 6000 4200 p = 8/9 p0 - 1/9 p4 + 2/9 p3\001 gerris-snapshot-131206/doc/figures/viscous-metric.tm0000644000175100017510000004106712250371171017421 00000000000000 <\body> The viscous terms require the expression of <\equation*> >\(2*\*) with <\equation*> 2*=u>+> in general orthogonal coordinates. This can be expressed in the general case (Germain and Muller, chapter XIII.5) <\equation*> =|||||h>+|h>*|h>>|*|h>+|h>-*h+u*h|h*h>>>|||h>+|h>*|h>>>>>> and <\equation*> >\(2*\*)=*h>**h*D)+(\*h*D)>>|*h*D)+(\*h*D)>>>>>+|h*h>**h-D*h>>|*h-Dh>>>>> The divergence-free condition is written <\equation*> h*h*>\=(uh)+(u*h)=0 <\eqnarray*> *h*D)+(2*\*h*D)>||*h*D)+\*h*|h>+|h>-*h+u*h|h*h>>>>> Identities useful in the general case <\equation*> (\*u)=\*u+\*u <\equation*> (\*u)=\*u+\*u <\equation*> (\*u)=\*u-\*u+(\*u) <\equation*> h*h*>\=(uh)+(u*h)=0 <\equation> h*u+h*u+u*h+u*h=0 Multiplying by /h> and taking the derivative gives <\equation*> \*h*|h>*+(\*u)+\**h+u*h|h>=0 <\eqnarray*> *h*D)+(2*\*hD)>||*h*D)+\*h*|h>+|h>>>|||\*h**h+u*h|h*h>>>|||2*\*h*|h>+\*h*|h>+(\*u)>>|||\*h*|h>-\**h+u*h|h>>>|||2*\*h*|h>+\*h*|h>+\*u-\*u+(\*u)>>|||\*h*|h>-\**h+u*h|h>>>|||\*h*|h>+\*h*|h>+\*u-\*u>>|||\*h*|h>>>|||\**h+u*h|h>>>|||\**h+u*h|h>>>|||\*h*|h>+\*h*|h>+\*u-\*u>>|||\*h*|h>-\**h**|h>>>|||*\*|h>-h*\*|h>>>|||*\*|h>-h*\**|h>>>>> =h=0>)> <\equation*> h*h*>\=(uh)+(u*h)=0 <\equation*> h*u+h*u=0 Multiplying by /h> and taking the derivative gives <\equation*> \*h*|h>*+(\*u)=0 <\eqnarray*> *h*D)+(2*\*hD)>||*h*D)+\*h*|h>+|h>>>|||2*\*h*|h>+\*h*|h>+(\*u)>>|||2*\*h*|h>+\*h*|h>+\*u-\*u+(\*u)>>|||\*h*|h>+\*h*|h>+\*u-\*u>>|||\*h*|h>+\*h*|h>+\*h*|h>+\**h*|h>>>>> =h=1>)> <\eqnarray*> *h*D)+(2*\*hD)>||\*h*|h>+\*h*|h>+\*u-\*u>>|||**u)+(\**u)+\*u+\*u>>>> <\eqnarray*> *h*>\(2*\*)>||*h*D)+(2*\*hD)+2*\**(D*h-D*h)>>|||\*h*|h>+\*h*|h>>+\*u-\*u>>|||\*h*|h>>>|||\**h+u*h|h>>>>|||\**h+u*h|h>>>>||||h>+|h>-*h+u*h|h*h>*\*h>>||||h>+|h>*|h>*\*h>>>>> Regrouping terms then gives <\eqnarray*> *h*>\(2*\*)>||*h*D)+(2*\*hD)+2*\**(D*h-D*h)>>|||\*h*|h>+\*h*|h>>>>|||**h-u*h|h>+u>**h+u*h|h>-u>>>|||*u*|h>+|h>++2*h|h*h>*>>>|||*u*|h>-|h>+*h|h*h>*>>|||*u*|h>*|h>*>-2*u*|h>>>>> Using the incompressibility condition () one gets <\eqnarray*> *|h>*|h>*>-2*u*|h>>||*|h*h>-u**h|h*h>-2*u*|h>+2*u*|h>>>>> Replacing in the above and regrouping terms then gives <\eqnarray*> *h*>\(2*\*)>||*h*D)+(2*\*hD)+2*\**(D*h-D*h)>>|||\*h*|h>+\*h*|h>>>>|||**h-u*h|h>+u>**h+u*h|h>-u>>>|||*u*|h>+|h>++h|h*h>*>>>|||*u*|h>-|h>>>|||*u**|h>-u*|h>>>>> <\eqnarray*> =r>||=\>>|=1>||=r>>|=0>||=1>>||=cte>|>>> <\eqnarray*> >\(2*\*)>||\*h*|h>+\*h*|h>>>>|||*|r>>-2*\**,\>|r>>>|||*(r*u)+*u,\>-2*,\>|r>-*|r>>>|>\(2*\*)>>||\*h*|h>+\*h*|h>>>>|||**>|r>*+2*\**>*|r>>>|||*(r*u,r>)+*u,\,\>+2*>|r>-*>|r>>>>> which matches the result in Germain and Muller, chapter XIII.8.1. \; <\references> <\collection> > > > > > > > <\auxiliary> <\collection> <\associate|toc> |1General case |.>>>>|> > |2Decoupled case (|h=h=0>) |.>>>>|> > |3Orthonormal case (|h=h=1>) |.>>>>|> > |4Viscous term |.>>>>|> > |5Application to polar coordinates |.>>>>|> > gerris-snapshot-131206/doc/figures/axi.tm0000644000175100017510000003132712250371171015224 00000000000000 <\body> The incompressible Navier--Stokes equations in cylindrical coordinates are <\eqnarray*> |v+*\(r*v)+\(v*v)=-\\+*\(r*S)+\S-\>|r>,>|>>||v+*\(r*v*v)+\(v)=-\\+*\(r*S)+\S,>|>>||*\(r*v)+\v=0,>|>>>> with =p/\> and the stress tensor <\eqnarray*> >||*\v,>>|\>>||*|r>,>>|>||*\v,>>|>||*\v+\v.>>>> Considering a control volume > with boundary \>, the integral equations can then be written <\eqnarray*> |>v*r*dr*dz+\>r*v*v*dr+\>r*v*v*dz=>|>||\>\*r*dz+>\*dr*dz+\>r*S*dr+\>r*S*dz->S\>*dr*dz,>|>||>v*r*dr*dz+\>r*v*v*dr+\>r*v*v*dz=>|>||\>\*r*dr+\>r*S*dr+\>r*S*dz,>|>||\>r*v*dr+\>r*v*dz=0.>|>|||>>> Posing <\eqnarray*> >>>|>|>dr*dz,>>|>|>|>r*dr*dz\r*a,>>|>|>|\>r*dr\r*\>dr,>>|>|>|\>r*dz=r*\>dz,>>>> we get the discrete form of the equations as <\eqnarray*> |(c*v)+(s*v*v)-(s*v*v)+(s*v)-(s*v)=>|>||\)-(s\)+)>>+>|>||*S)-(s*S)+(s*S)-(s*S)-\>)>>,>|>>> <\eqnarray*> |(c*v)+(s*v)-(s*v)+(s*v*v)-(s*v*v)=>|>||\)-(s\)+>|>||*S)-(s*S)+(s*S)-(s*S)>|>>> <\equation*> (s*v)-(s*v)+(s*v)-(s*v)=0, where only the bold terms differ from the discretisation of the N--S equations in Cartesian coordinates in \ two dimensions. The projection method relies on a decomposition of the velocity as <\eqnarray*> >||>)+t|c>(s\)-(s\)+)>>,>>|>||>)+t|c>(s\)-(s\),>>>> wich leads to the Poisson-like equation <\equation*> t>*s**(v>)-s*(v>)+s*(v>)-s*(v>)+\*s*(s/c)+(s/c)+s*(s/c)+(s/c)+s*(a*\)-s*(a*\)-(s/c)*(s\)-(s/c)*(s\)-(s/c)*(s\)-(s/c)*(s\)=0. This looks complicated though... What about just splitting the velocity as <\eqnarray*> >||>)+\t*\-\,>>|>||>)+\t*\-\,>>>> which is still consistent with equations () and (). This gives <\equation*> t>*s**(v>)-s*(v>)+s*(v>)-s*(v>)+\*(s+s+s+s)-s*\-s*\-s*\-s*\=0, together with <\eqnarray*> |*>)-v|\t>+(s*v*v)-(s*v*v)+(s*v)-(s*v)=>|>||*S)-(s*S)+(s*S)-(s*S)-\>)>>,>|>>> <\eqnarray*> |*>)-v|\t>+(s*v)-(s*v)+(s*v*v)-(s*v*v)=>|>||*S)-(s*S)+(s*S)-(s*S).>|>>> <\equation*> u=u+*\u+t|2>*\u+\(h,\t), using equations (), () and () then gives <\eqnarray*> =v+*(h*-v*\t)*\v+t|2>*(-v*\v+src),>||>|=v+*(h-v*\t)*\v+t|2>*-v*\v+src,>||>>> which is the same as in the two-dimensional case. <\eqnarray*> |>-v|\t>-\*\s*S>=src+(1-\)*\s*S>|>>> which can be rewritten <\eqnarray*> |>-\*S>=c*v+\t*src+|\>*\*S,>|>>> with <\equation*> \\*\t*s. This finally gives <\eqnarray*> |>-\*S>=v+\t*+|^>|c>*\*S,>|>>> with |^>\(1-\)/\>. To account for the axisymmetric term this needs to be rewritten <\eqnarray*> |>-v|\t>-\*\s*S>+\*a*2*\*>|r>=src+(1-\)*\s*S-(1-\)*a*2*\*|r>>|>>> which can be rewritten <\eqnarray*> |>*-\*S>+2*\*\t*a*\*>|r>=c*v+\t*src+|\>*\*S-2*(1-\)*\t*a*\*|r>>|>>> this finally gives <\eqnarray*> |>*-*\*S>+2*\*\t*\*>|r>=v+\t*+|\*c>*\*S-2*(1-\)*\t*\*|r>>|>>> Posing 2*\*\t*\/r> then gives <\eqnarray*> |>*(1+d)-*\*S>=v*1-*|^>*d+\t*+*|^>*|c>*\*S.>|>>> <\references> <\collection> > > > > > > > > > <\auxiliary> <\collection> <\associate|toc> |1Advection term |.>>>>|> > gerris-snapshot-131206/doc/figures/corner.fig0000644000175100017510000000474212250371171016061 00000000000000#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3300 5400 3300 6600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2100 5400 3300 5400 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3300 3000 5700 3000 5700 5400 3300 5400 3300 3000 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 900 5400 3300 5400 3300 7800 900 7800 900 5400 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 900 3000 3300 3000 3300 5400 900 5400 900 3000 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3300 5400 5700 5400 5700 7800 3300 7800 3300 5400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2100 5400 2100 7800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 900 6600 3300 6600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2700 6600 2700 7800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2100 7200 3300 7200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 900 6000 2100 6000 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1500 5400 1500 6600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2100 3000 2100 5400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 900 4200 3300 4200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4500 5400 4500 7800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3300 6600 5700 6600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1500 6600 1500 7800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 900 7200 2100 7200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1200 6600 1200 7200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1200 7200 1200 7800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 900 7500 1500 7500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 900 6900 1500 6900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1500 7500 2100 7500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1800 7200 1800 7800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1350 7200 1350 7500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1200 7350 1500 7350 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 1800 6600 1800 7200 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 1500 6900 2100 6900 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 17 2700 5400 2700 5475 2700 5550 2700 5700 2700 5775 2700 5850 2700 6000 2700 6075 2700 6150 2700 6225 2700 6300 2700 6375 2700 6450 2700 6525 2700 6600 2700 6675 2700 6600 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 2100 6000 3300 6000 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 4500 3000 4500 5400 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 3300 4200 5700 4200 2 1 0 4 4 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 4.00 60.00 60.00 1425 7275 1650 7050 2 1 0 4 4 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 4.00 60.00 60.00 1950 6750 2400 6300 2 1 0 4 4 7 50 0 -1 0.000 0 0 -1 1 0 2 2 1 4.00 60.00 60.00 3000 5700 3900 4800 gerris-snapshot-131206/doc/figures/lonlat.fig0000644000175100017510000000264712250371171016064 00000000000000#FIG 3.2 Produced by xfig version 3.2.5 Landscape Center Metric A4 100.00 Single -2 1200 2 5 1 0 2 0 7 50 -1 -1 0.000 0 1 0 0 3825.000 1117.500 2925 4050 3825 4185 4725 4050 5 1 0 2 0 7 50 -1 -1 0.000 0 1 0 0 6652.500 5062.500 2925 4050 2790 5085 2925 6075 5 1 0 2 0 7 50 -1 -1 0.000 0 1 0 0 8452.500 5062.500 4725 4050 4590 5040 4725 6075 5 1 0 2 0 7 50 -1 -1 0.000 0 1 0 0 3825.000 3150.000 2925 6075 3780 6210 4725 6075 5 1 0 1 0 7 50 -1 -1 0.000 0 1 0 0 5971.811 3405.259 5310 3150 5265 3465 5400 3825 5 1 0 1 0 7 50 -1 -1 0.000 0 1 0 0 5038.176 2797.906 4680 3015 4905 3195 5265 3150 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 3 2925 4050 5850 2250 2925 6075 2 1 1 1 0 7 50 -1 -1 4.000 0 0 7 0 0 2 5850 2250 4725 4050 2 1 1 1 0 7 50 -1 -1 4.000 0 0 7 0 0 2 5850 2250 4725 6075 4 0 0 50 -1 1 24 0.0000 4 180 165 3825 3330 r\001 4 0 0 50 -1 1 24 0.0000 4 180 165 2970 6615 r\001 4 0 0 50 -1 0 24 0.0000 4 180 555 3240 6615 cos\001 4 0 0 50 -1 32 24 0.0000 4 285 210 3825 6660 q\001 4 0 0 50 -1 1 24 0.0000 4 285 210 4140 6615 d\001 4 0 0 50 -1 1 24 0.0000 4 180 165 1980 5175 r\001 4 0 0 50 -1 32 24 0.0000 4 285 210 2340 5175 q\001 4 0 0 50 -1 32 24 0.0000 4 300 225 4635 3465 l\001 4 0 0 50 -1 32 24 0.0000 4 285 210 5085 4050 q\001 4 0 0 50 -1 1 24 0.0000 4 285 210 2160 5175 d\001 4 0 0 50 -1 1 24 0.0000 4 285 210 4455 3465 d\001 4 0 0 50 -1 1 24 0.0000 4 285 210 4905 4050 d\001 4 0 0 50 -1 32 24 0.0000 4 300 225 4320 6615 l\001 gerris-snapshot-131206/doc/figures/interpolate_2D.fig0000644000175100017510000001207312250371171017440 00000000000000#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 0 32 #404040 0 33 #808080 0 34 #c0c0c0 0 35 #8e8f8e 0 36 #c0c0c0 0 37 #808080 0 38 #8e8f8e 0 39 #404040 0 40 #808080 0 41 #c0c0c0 0 42 #e0e0e0 0 43 #c6b797 0 44 #eff8ff 0 45 #dccba6 0 46 #aaaaaa 0 47 #555555 0 48 #8e8f8e 0 49 #404040 0 50 #808080 0 51 #c0c0c0 0 52 #e0e0e0 0 53 #404040 0 54 #808080 0 55 #c0c0c0 0 56 #e0e0e0 0 57 #808080 0 58 #c0c0c0 0 59 #e0e0e0 0 60 #404040 0 61 #808080 0 62 #c0c0c0 0 63 #404040 0 64 #c0c0c0 0 65 #e0e0e0 0 66 #404040 0 67 #808080 0 68 #c0c0c0 0 69 #8e8f8e 0 70 #404040 0 71 #808080 0 72 #c0c0c0 0 73 #e0e0e0 0 74 #404040 0 75 #808080 0 76 #c0c0c0 0 77 #e0e0e0 0 78 #404040 0 79 #808080 0 80 #c0c0c0 0 81 #e0e0e0 0 82 #000079 0 83 #000079 0 84 #ff8200 0 85 #007d00 0 86 #007d00 0 87 #0000be 0 88 #000079 0 89 #007d00 0 90 #444444 0 91 #8e8f8e 0 92 #444444 0 93 #8e8f8e 0 94 #444444 0 95 #8e8f8e 0 96 #444444 0 97 #8e8f8e 0 98 #444444 0 99 #8e8f8e 0 100 #444444 0 101 #8e8f8e 0 102 #444444 0 103 #8e8f8e 0 104 #444444 0 105 #8e8f8e 0 106 #444444 0 107 #8e8f8e 0 108 #808080 0 109 #c0c0c0 0 110 #e0e0e0 0 111 #8e8e8e 0 112 #444444 0 113 #8e8e8e 0 114 #8e8e8e 0 115 #8e8e8e 0 116 #444444 0 117 #aaaaaa 0 118 #8e8e8e 0 119 #444444 0 120 #aaaaaa 0 121 #555555 0 122 #8e8e8e 0 123 #444444 0 124 #c0c0c0 0 125 #e0e0e0 0 126 #8e8e8e 0 127 #444444 0 128 #8e8e8e 0 129 #444444 0 130 #8e8e8e 0 131 #444444 0 132 #808080 0 133 #c0c0c0 0 134 #e0e0e0 0 135 #c0c0c0 0 136 #e0e0e0 6 3075 3075 3225 3225 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3075 3075 3225 3225 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3225 3075 3075 3225 -6 6 3450 3000 3750 3300 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3525 3075 3675 3225 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3675 3075 3525 3225 -6 6 1650 3000 1950 3300 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1725 3075 1875 3225 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1875 3075 1725 3225 -6 6 5250 3000 5550 3300 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 5325 3075 5475 3225 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 5475 3075 5325 3225 -6 6 3000 3450 3300 3750 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3075 3525 3225 3675 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3225 3525 3075 3675 -6 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 3150 2250 75 75 3150 2250 3225 2250 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 4050 2250 75 75 4050 2250 4125 2250 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 3150 4950 75 75 3150 4950 3225 4950 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 4050 4950 75 75 4050 4950 4125 4950 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 2250 3150 75 75 2250 3150 2325 3150 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 2250 4050 75 75 2250 4050 2325 4050 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 4950 4050 75 75 4950 4050 5025 4050 1 3 0 1 0 0 50 0 20 0.000 1 0.0000 4950 3150 75 75 4950 3150 5025 3150 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2700 2700 4500 2700 4500 4500 2700 4500 2700 2700 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 900 2700 2700 2700 2700 4500 900 4500 900 2700 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 900 900 2700 900 2700 2700 900 2700 900 900 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2700 900 4500 900 4500 2700 2700 2700 2700 900 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 4500 900 6300 900 6300 2700 4500 2700 4500 900 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 4500 2700 6300 2700 6300 4500 4500 4500 4500 2700 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2700 4500 4500 4500 4500 6300 2700 6300 2700 4500 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 4500 4500 6300 4500 6300 6300 4500 6300 4500 4500 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 900 4500 2700 4500 2700 6300 900 6300 900 4500 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3525 3525 3675 3525 3675 3675 3525 3675 3525 3525 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2700 1800 3600 1800 3600 2700 2700 2700 2700 1800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3600 1800 4500 1800 4500 2700 3600 2700 3600 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2700 5400 4500 5400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3600 4500 3600 5400 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 900 3150 6300 3150 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3525 1725 3675 1725 3675 1875 3525 1875 3525 1725 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3525 5325 3675 5325 3675 5475 3525 5475 3525 5325 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1800 2700 1800 4500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1800 3600 2700 3600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 5400 2700 5400 4500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4500 3600 5400 3600 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1725 3525 1875 3525 1875 3675 1725 3675 1725 3525 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 5325 3525 5475 3525 5475 3675 5325 3675 5325 3525 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 3150 900 3150 6300 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 900 3600 6300 3600 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 3600 900 3600 6300 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1725 1725 1875 1725 1875 1875 1725 1875 1725 1725 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 5325 1725 5475 1725 5475 1875 5325 1875 5325 1725 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 5325 5325 5475 5325 5475 5475 5325 5475 5325 5325 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1725 5325 1875 5325 1875 5475 1725 5475 1725 5325 gerris-snapshot-131206/doc/figures/diffusion.tm0000644000175100017510000001604112250371171016425 00000000000000 <\body> We consider the one-dimensional diffusion equation <\equation*> \u=\\*\u with boundary conditions <\eqnarray*> u>=>>||>|)=u+\*\u>>||>>> This is discretised implicitly as <\equation*> u-u=\t*\\*\u Using the finite volume approximation for each level <\equation*> \\*\u\>*\*-u|\+\>-\*-u|\+\> we get <\equation*> u*1+a+a-u*a-u*a=u with <\equation*> a\t|\>*|\+\> for l\N-1> where is the number of levels. This tridiagonal system is closed by the boundary conditions which can be discretised as <\eqnarray*> -u|\>\>>||>|+u|2>\u+\*-u|\>>||>>> from which we get the (ghost) boundary values > and > <\eqnarray*> *>||+>*\>>|*>|||2*\+\>*u+-\|2*\+\>*u>>>> This gives the additional equations <\eqnarray*> |*1+a-u*a=u+>*\*a>|>||*1+a+a--\|2*\+\>*a-u*a=u+|2*\+\>*u*a>|>>> According to Audusse, Bristeau and Decoene (2008) equation (20), the friction terms for the bottom layer () can be discretised as <\with|mode|math> <\equation*> \u=->*u+>*\*-u|\+\>, This gives the additional equation <\equation*> u*(1+a+>*\t)-u*a=u According to Audusse, Bristeau and Decoene (2008) equation (20), the friction terms for the bottom layer () can be discretised as <\equation*> \u=->*u+>*\*-u|\+\>, with the bottom friction coefficient. The boundary conditions for our system must then verify <\equation*> ->*u+>*\*-u|\+\>=>*\*-u|\+\>-\*-u|\+\> which gives <\equation*> u=1-|\>*u Identifying with () we get <\eqnarray*> >||>|>|||k*>*-|2>>>>> A more sensible discretisation seems to be <\with|mode|math> <\equation*> ->*(u+u)/2+>*\*-u|\+\>=>*\*-u|\+\>-\*-u|\+\> which gives <\equation*> u=-k*\|2*\+k*\>*u Identifying with () we get <\eqnarray*> >||>|>|||k>*>>>> which behaves as we expect i.e. \0> when \> (in contrast with the previous discretisation). <\initial> <\collection> <\references> <\collection> > > > > <\auxiliary> <\collection> <\associate|toc> |math-font-series||Vertical diffusion> |.>>>>|> |Bottom friction |.>>>>|> > |Link between Navier condition and bottom friction |.>>>>|> > gerris-snapshot-131206/doc/gerris.bib0000644000175100017510000004260712250371171014411 00000000000000@Article{almgren97, author = {A. S. Almgren and J. B. Bell and P. Colella and T. Marthaler}, title = {A Cartesian Grid Projection Method for the Incompressible Euler Equations in Complex Geometries}, journal = {SIAM J. Sci. Comp.}, year = 1997, volume = 18, number = 5, pages = {1289-1309}, url = {http://seesar.lbl.gov/ccse/Publications/almgren/abcm.sisc/paper.ps.gz}, local_url = {almgren.ps.gz} } @Article{almgren98, author = {A. S. Almgren and J. B. Bell and P. Colella and L. H. Howell and M. L. Welcome}, title = {A Conservative Adaptive Projection Method for the Variable Density Incompressible Navier-Stokes Equations}, journal = {J. Comput. Phys.}, year = 1998, volume = 142, pages = {1-46}, url = {http://seesar.lbl.gov/ccse/Publications/almgren/abchw96/paper.ps.gz}, local_url = {almgren1.ps.gz} } @Article{an2012, title = {Well-balanced shallow water flow simulation on quadtree cut cell grids}, author = {Hyunuk An and Soonyoung Yu}, journal = {Advances in Water Resources}, year = {2012}, volume = {39}, pages = {60-70}, url = {http://dx.doi.org/10.1016/j.advwatres.2012.01.003} } @TechReport{arps, author = {K. K. Droegemeier}, title = {{Advanced Regional Prediction System User guide (Version 4.0)}}, institution = {University of Oklahoma}, year = {2007}, note = {Section 13.4}, url = {http://www.caps.ou.edu/ARPS/download/code/pub/ARPS.docs/ARPS4DOC.PDF/arpsch13.pdf} } @article{audusse2008, title={Numerical simulations of {3D} free surface flows by a multilayer {S}aint-{V}enant model}, author={Audusse, E. and Bristeau, M.-O. and Decoene, A.}, journal={International journal for numerical methods in fluids}, volume={56}, number={3}, pages={331--350}, year={2008}, publisher={Wiley Online Library} } @article{audusse2011, title={A multilayer {S}aint-{V}enant system with mass exchanges for Shallow Water flows. {D}erivation and numerical validation}, author={Audusse, E. and Bristeau, M.-O. and Perthame, B. and Sainte-Marie, J.}, journal={ESAIM: Mathematical Modelling and Numerical Analysis}, volume={45}, number={01}, pages={169--200}, year={2011}, publisher={Cambridge Univ Press} } @Book{bear88, author = {J. Bear}, title = {Dynamics of Fluids in Porous Media}, publisher = {Dover}, year = 1988} @Book{bird87, author = {R. B. Bird and R. C. Armstrong and O. Hassager}, title = {Dynamics of polymeric liquids}, publisher = {Wiley-Interscience}, year = 1987, edition = {second edition} } @article{blanco1995, title = {The structure of the axisymmetric high-{R}eynolds number flow around an ellipsoidal bubble of fixed shape}, author = {Blanco, A. and Magnaudet, J.}, journal = {Physics of Fluids}, volume = 7, pages = 1265, year = 1995, publisher = {AIP} } @Article{boyd2010, author = {J. P Boyd and C. Zhou}, title = {{Three ways to solve the Poisson equation on a sphere with Gaussian forcing}}, journal = {Journal of Computational Physics}, year = 2010, volume = 228, number = 13, pages = {4702-4713} } @Article{carrier2003, title = {Tsunami run-up and draw-down on a plane beach}, author = {Carrier, G.F. and Wu, T.T. and Yeh, H.}, journal = {Journal of Fluid Mechanics}, volume = {475}, number = {79-99}, pages = {25}, year = {2003}, publisher = {Cambridge University Press} } @Article{delestre2012, author = {O. Delestre and C. Lucas and P.-A. Ksinant and F. Darboux and C. Laguerre and T. N. T. Vo and F. James and S. Cordier}, title = {{SWASHES}: a compilation of Shallow Water Analytic Solutions for Hydraulic and Environmental Studies}, journal = {arXiv}, year = 2012 } @PhdThesis{dupont, author = {F. Dupont}, title = {Comparison of numerical methods for modelling ocean circulation in basins with irregular coasts}, school = {McGill University}, year = 2001, address = {Montreal} } @article{fadlun2000, title = {Combined immersed-boundary finite-difference methods for three-dimensional complex flow simulations}, author = {Fadlun, EA and Verzicco, R. and Orlandi, P. and Mohd-Yusof, J.}, journal = {Journal of Computational Physics}, volume = 161, number = 1, pages = {35--60}, year = 2000 } @Article{fornberg1988, author = {B. Fornberg}, title = {Steady viscous flow past a sphere at high {R}eynolds number}, journal = {J. Fluid Mech.}, year = 1988, volume = 190, pages = 471 } @article{gerlach2006, author = {D. Gerlach and G. Tomar and G. Biswas and F. Durst}, title = {Comparison of surface tension methods for surface tension dominant two-phase flows}, journal = {Int. J. Heat Mass Transfer}, year = 2006, pages = {740-754}, volume = 49 } @Article{ghia82, author = {U. Ghia, K.N. Ghia, C.T. Shin}, title = {High-{R}e solution for incompressible flow using the {N}avier-{S}tokes equations and the multigrid method}, journal = {J. Comput. Phys.}, year = 1982, volume = 48, pages = {387-411} } @Book{glauert1926, author = {H. Glauert}, title = {The Elements of Aerofoil and Airscrew Theory}, publisher = {Cambridge University Press}, year = 1926 } @Article{grilli2007, title = {{Source constraints and model simulation of the December 26, 2004, Indian Ocean Tsunami}}, author = {Grilli, S.T. and Ioualalen, M. and Asavanant, J. and Shi, F. and Kirby, J.T. and Watts, P.}, journal = {Journal of Waterway, Port, Coastal, and Ocean Engineering}, volume = {133}, pages = {414--428}, year = {2007} } @Article{gueyffier98, author = {D. Gueyffier and A. Nadim and J. Li and R. Scardovelli and S. Zaleski}, title = {Volume of fluid interface tracking with smoothed surface stress methods for three-dimensional flows}, journal = {J. Comp. Phys.}, year = 1998, volume = 152, pages = {423-456} } @article{hanson1970, title = {A picture theory of theory meaning}, author = {Hanson, N.R.}, journal = {The nature and function of scientific theories}, pages = {233--274}, year = {1970} } @Book{harr77, author = {M. E. Harr}, title = {Mechanics of Particulate Media}, publisher = {McGraw-Hill}, year = 1977} @TechReport{jacobs1933, author = {E. N. Jacobs and K. E. Ward and R. M. Pinkerton}, title = {The characteristics of 78 related airfoil sections from tests in the Variable-Density wind tunnel}, institution = {NACA Technical Report 460}, year = {1933}, url = {http://hdl.handle.net/2060/19930091108} } @Article{johansen98, title = {A Cartesian Grid Embedded Boundary Method for {P}oisson Equation on Irregular Domains}, author = {Johansen, H. and Colella, P.}, journal = {Journal of Computational Physics}, volume = {147}, number = {1}, pages = {60--85}, year = {1998}, publisher = {Elsevier}, url = {https://seesar.lbl.gov/ANAG/publications/colella/A_1_35.pdf} } @Article{karman1921, author = {T. Von Karman}, title = {Uber laminare und turbulente Reibung}, journal = {Z. Angew. Math. Mech.}, year = 1921, volume = 1, number = 4, pages = {233-252} } @Article{lagree2011, author = {P.-Y. Lagr\'ee and L. Staron and S. Popinet}, title = {The granular column collapse as a continuum: validity of a {N}avier--{S}tokes model with a $\mu(I)$-rheology}, journal = {Journal of Fluid Mechanics}, year = 2011 } @Book{lamb, author = {H. Lamb}, title = {Hydrodynamics}, publisher = {Dover}, year = 1932 } @Article{leroux98, author = {D. Y. Leroux and C. A. Lin}, title = {Finite elements for shallow-water equations ocean models}, journal = {Monthly Weather Review}, year = 1998, volume = 126, pages = {1931-1951} } @Article{leveque2006, title = {High-resolution finite volume methods for the shallow water equations with bathymetry and dry states}, author = {LeVeque, R.J. and George, D.L.}, journal = {Advanced numerical models for simulating tsunami waves and runup}, volume = {10}, pages = {43--73}, year = {2006} } @Article{liang2008, title = {Adaptive quadtree simulation of shallow flows with wet--dry fronts over complex topography}, author = {Q. Liang and A.G.L. Borthwick}, journal = {Computers and Fluids}, year = 2008, publisher = {Elsevier} } @Article{lopez-herrera2011, author = {J. M. Lopez-Herrera and S. Popinet and M. A. Herrada}, title = {A charge-conservative approach for simulating electrohydrodynamic two-phase flows using Volume-Of-Fluid}, journal = {Journal of Computational Physics}, year = {2011}, volume = {230}, pages = {1939-1955}, url = {http://gfs.sf.net/papers/ehd.pdf} } @Article{lynch87, author = {D. R. Lynch and F. E. Werner}, title = {3-{D} hydrodynamics on finite elements. {P}art I: linearized harmonic model}, journal = {Int. J. for Num. Methods in Fluids}, year = 1987, number = 7, pages = {871-909} } @article{masliyah1970, title = {Numerical study of steady flow past spheroids}, author = {Masliyah, J.H. and Epstein, N.}, journal = {Journal of Fluid Mechanics}, volume = 44, number = 03, pages = {493--512}, year = 1970, publisher = {Cambridge Univ Press} } @book{milne1973, title = {Theoretical aerodynamics (4th ed.)}, author = {Milne-Thomson, L.M.}, year = {1973}, publisher= {Dover, New York} } @Article{minion96, author = {M. L. Minion}, title = {A Projection Method for Locally Refined Grids}, journal = {J. Comput. Phys.}, volume = 127, pages = {158-177}, year = 1996, url = {http://citeseer.nj.nec.com/minion96projection.html}, local_url = {minion96.ps.gz} } @Article{peraire86, author = {J. Peraire and O. C. Zienkiewicz and K. Morgan}, title = {Shallow water problems: a general explicit formulation}, journal = {Int. J. for Num. Methods in Eng.}, year = 1986, volume = 22, pages = {547-574} } @Article{popinet2003, author = {S. Popinet}, title = {Gerris: a tree-based adaptive solver for the incompressible Euler equations in complex geometries}, journal = {J. Comput. Phys.}, year = 2003, volume = 190, number = 2, pages = {572-600}, url = {http://gfs.sf.net/gerris.pdf} } @Article{popinet2009, author = {S. Popinet}, title = {An accurate adaptive solver for surface-tension-driven interfacial flows}, journal = {Journal of Computational Physics}, year = {2009}, volume = {228}, pages = {5838-5866}, url = {http://gfs.sf.net/papers/tension.pdf} } @Article{popinet2011, author = {S. Popinet}, title = {Quadtree-adaptive tsunami modelling}, journal = {Ocean Dynamics}, year = {2011}, volume = {61}, number = {9}, pages = {1261-1285} } @InProceedings{popinet2011b, author = {S. Popinet and A. Antkowiak}, title = {Breakup of cylindrical jets: Singularities and self-similar solutions}, year = {2011}, booktitle = {Lecture notes}, url = {http://gfs.sf.net/papers/course2.pdf} } @Article{popinet2011c, author = {S. Popinet}, title = {Quadtree-adaptive tsunami modelling}, journal = {Ocean Dynamics}, year = {2011}, url = {http://gfs.sf.net/papers/tsunami.pdf}, volume = {61}, number = {9}, pages = {1261-1285} } @Article{popinet99, author = {S. Popinet and S. Zaleski}, title = {A front tracking algorithm for the accurate representation of surface tension}, journal = {Int. J. Numer. Meth. Fluids}, volume = 30, pages = {775-793}, year = 1999 } @Article{prosperetti81, author = {A. Prosperetti}, title = {Motion of two superposed viscous fluids}, journal = {Phys. Fluids}, year = 1981, volume = 24, pages = {1217-1223} } @TechReport{rider95, author = {W. J. Rider}, title = {Approximate projection methods for incompressible flows: Implementation, variants and robustness}, institution = {Los Alamos National Laboratory}, year = 1995, number = {LA-UR-2000}, local_url = {rider95.ps.gz}, url = {http://www-xdiv.lanl.gov/XHM/personnel/wjr/Web_papers/proj/proj.ps.Z}, pages = {81-85} } @Article{rosales2005, title = {{Linear forcing in numerical simulations of isotropic turbulence: Physical space implementations and convergence properties}}, author = {Rosales, C. and Meneveau, C.}, journal = {Physics of Fluids}, volume = {17}, pages = {095106}, year = {2005} } @Article{rossmanith2004, author = {J. A, Rossmanith and D. S. Bale and R. J. LeVeque}, title = {A wave propagation algorithm for hyperbolic systems on curved manifolds}, journal = {Journal of Computational Physics}, year = 2004, volume = 199, pages = {631-662} } @article{rossmanith2006, title = {A wave propagation method for hyperbolic systems on the sphere}, author = {Rossmanith, J.A.}, journal = {Journal of Computational Physics}, volume = 213, number = 2, pages = {629--658}, year = 2006, publisher = {Elsevier} } @article{rudman97, title = {Volume-tracking methods for interfacial flow calculations}, author = {Rudman, M.}, journal = {International Journal for Numerical Methods in Fluids}, volume = 24, number = 7, pages = {671--691}, year = 1997 } @TechReport{rutgers-waves, author = {E. Curchitser}, title = {Waves in a circular basin}, institution = {Rutgers University}, year = 2005, url = {http://marine.rutgers.edu/po/index.php?model=test-problems&title=circle} } @Article{sampson2006, title = {Moving boundary shallow water flow above parabolic bottom topography}, author = {J. Sampson and A. Easton and M. Singh}, journal = {ANZIAM J}, volume = 47, year = 2006 } @Article{staron2005, title = {Study of the collapse of granular columns using two-dimensional discrete-grain simulation}, author = {Staron, L. and Hinch, E. J.}, journal = {Journal of Fluid Mechanics}, volume = {545}, pages = {1--27}, issn = {0022-1120}, year = {2005} } @Article{taylor64, author = {G. I. Taylor}, title = {Disintegration of water drops in an electric field}, journal = {Proc. R. Soc. Lon. A}, year = 1964, volume = 280, pages = {383-397} } @Article{taylor66, author = {G. I. Taylor}, title = {Studies in electrohydrodynamics {I}. {T}he circulation produced in a drop by an electric field}, journal = {Proc. R. Soc. Lon. A}, year = 1966, volume = 291, pages = {159-166} } @Article{tomar2007, title = {Two-phase electrohydrodynamic simulations using a volume-of-fluid approach}, author = {Tomar, G. and Gerlach, D. and Biswas, G. and Alleborn, N. and Sharma, A. and Durst, F. and Welch, S. W. J. and Delgado, A.}, journal = {Journal of Computational Physics}, volume = 227, number = 2, pages = {1267-1285}, year = 2007 } @Article{torres00, author = {D. J. Torres and J. U. Brackbill}, title = {The Point-Set method: front-tracking without connectivity}, journal = {J. Comput. Phys.}, year = 2000, volume = 165, pages = {620-644} } @Book{videler2006, author = {J. J. Videler}, title = {Avian Flight}, publisher = {Oxford Ornithological Studies. Oxford University Press}, year = 2006 } @Article{vola2004, author = {D. Vola and F. Babik and J.-C Latch\'e}, title = {On a numerical strategy to compute gravity currents of non-Newtonian fluids}, journal = {J. Comput. Phys.}, year = 2004, volume = 201, number = 2, pages = {397-420} } @Article{wannier1950, title = {A contribution to the hydrodynamics of lubrication}, author = {G. H. Wannier}, journal = {Quart. Appl. Math}, volume = {8}, number = {1}, pages = {1--32}, year = {1950} } @Article{williamson92, author = {{Williamson}, D.~L. and {Drake}, J.~B. and {Hack}, J.~J. and {Jakob}, R. and {Swarztrauber}, P.~N.}, title = {A standard test set for numerical approximations to the shallow water equations in spherical geometry}, journal = {Journal of Computational Physics}, year = 1992, volume = 102, pages = {211-224}, doi = {10.1016/S0021-9991(05)80016-6} } @Article{zhang2007, author = {N. Zhang and Z.C. Zheng}, title = {An improved direct-forcing immersed-boundary method for finite difference applications}, journal = {Journal of Computational Physics}, year = 2007, volume = 221, pages = {250-268} } gerris-snapshot-131206/doc/Makefile.in0000644000175100017510000005267012250371206014505 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = autoclass$(EXEEXT) subdir = doc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) autoclass_SOURCES = autoclass.c autoclass_OBJECTS = autoclass.$(OBJEXT) autoclass_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = autoclass.c DIST_SOURCES = autoclass.c RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ SUBDIRS = tutorial examples manpages EXTRA_DIST = figures share doxy.conf gerris.bib INCLUDES = -I$(top_srcdir)/src -I$(includedir) -DG_LOG_DOMAIN=\"Gfs-tools\"\ $(GTS_CFLAGS) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/autoclass.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstPROGRAMS ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am autoclass: autoclass.c $(top_srcdir)/src/init.c $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(INCLUDES) -DFTT_2D=1 \ autoclass.c -o autoclass $(GFS2D_LIBS) reference: Makefile.am autoclass share/autoclass.sh share/doxfilter share/renamemodules doxy.conf sh share/autoclass.sh | sort -k2,3 | ./autoclass > hierarchy.c @chmod +x share/doxfilter doxygen doxy.conf 2>&1 | grep -v 'explicit link request to .* could not be resolved' > doxy.log cd reference && sh ../share/renamemodules if grep [wW]arning doxy.log; then exit 1; fi publish: reference tar czf reference.tgz reference mv -f reference.tgz $(WEBROOT) cd $(WEBROOT) && tar xzf reference.tgz && rm -f reference.tgz Makefile.deps: Makefile.am ../src/Makefile.am ls ../src/*.[ch] | awk 'BEGIN{print "reference: \\"}{ print "\t" $$1 " \\"}' > Makefile.deps -include Makefile.deps # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/doc/autoclass.c0000644000175100017510000000136012250371171014571 00000000000000#include #include "init.h" int main (int argc, char * argv[]) { GtsObjectClass ** klass; int status = 0; klass = gfs_classes (); printf ("/** \\file\n" " * \\brief Class hierarchy definition for doxygen */\n"); char s[80]; while (fgets (s, 80, stdin)) { char * file = strtok (s, " "); char * name = strtok (NULL, "\n"); GtsObjectClass * klass = gts_object_class_from_name (name); if (klass == NULL) { fprintf (stderr, "autoclass:%s: unknown class '%s'\n", file, name); status = 1; } else printf ("/** \n" " * \\defgroup %s %s\n" " * \\ingroup %s\n" " */\n", klass->info.name, klass->info.name, klass->parent_class->info.name); } return status; } gerris-snapshot-131206/doc/tutorial/0000755000175100017510000000000012250371674014362 500000000000000gerris-snapshot-131206/doc/tutorial/depend.awk0000644000175100017510000000074312250371171016241 00000000000000BEGIN { FS = "{|=|}| |[|]"; } { if ($1 == "\\psfig" && $2 == "file") depeps = depeps " " $3; else if ($1 == "\\includegraphics[width" || $1 == "\\includegraphics[height" || $1 == "\\includegraphics[angle" || $1 == "\\includegraphics*[width" || $1 == "\\includegraphics*[height" || $1 == "\\includegraphics*[angle") { for (i = 2; i <= NF; i++) if (match ($i, "eps")) depeps = depeps " " $i; } } END { print file "1.dvi: " depeps; } gerris-snapshot-131206/doc/tutorial/Makefile.in0000644000175100017510000003233012250371207016340 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/tutorial DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FFLAGS = @FFLAGS@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GFS2D_LIBS = @GFS2D_LIBS@ GFS3D_LIBS = @GFS3D_LIBS@ GFS_COMPILATION_FLAGS = @GFS_COMPILATION_FLAGS@ GFS_MAJOR_VERSION = @GFS_MAJOR_VERSION@ GFS_MICRO_VERSION = @GFS_MICRO_VERSION@ GFS_MINOR_VERSION = @GFS_MINOR_VERSION@ GFS_VERSION = @GFS_VERSION@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_CONFIG = @GSL_CONFIG@ GSL_LIBS = @GSL_LIBS@ GTS_CFLAGS = @GTS_CFLAGS@ GTS_LIBS = @GTS_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ODE_CFLAGS = @ODE_CFLAGS@ ODE_LIBS = @ODE_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ W3INIT = @W3INIT@ WEBROOT = @WEBROOT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_m4 = @have_m4@ have_pkg_config = @have_pkg_config@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ode = @ode@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ use_mpicc = @use_mpicc@ EXTRA_DIST = tutorial.tex depend.awk all: all-am .SUFFIXES: .SUFFIXES: .agr .eps .epsf .fig .gif .jpeg .jpg .pdf .png .xmgr $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/tutorial/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/tutorial/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am Makefile.deps: Makefile.am tutorial.tex awk -f depend.awk file="tutorial" < tutorial.tex > Makefile.deps clean-generic: $(RM) *.dvi *.aux *.log *.toc *.out \ boundaries.pdf direction.eps direction.pdf dxscreen.eps dxscreen.pdf \ gfs2oogl.pdf half-cylinder.eps half-cylinder.pdf refined1.pdf refined1_cells.pdf \ refined2.pdf vorticity.eps vorticity.pdf gfsview.eps tutorial1.tex \ Makefile.deps tutorial.tar.gz: tutorial1.dvi rm -r -f tutorial sed 's/input{pdf.tex}/usepackage{graphicx}\\newcommand{\\gfx}{eps}/g' < tutorial.tex | sed "s/GFS_VERSION/`$(top_srcdir)/src/gerris2D -V 2>&1 | awk '{ if ($$5 == "version") print $$6}'`/g" | sed 's/\\today/'"`date +\"%B %e, %Y\"`/g" > tutorial1.tex hevea -fix tutorial1.tex imagen -res 600 -extra "pnmscale 0.24" tutorial1 mkdir tutorial mv -f tutorial1[0-9][0-9][0-9].png tutorial konwert iso1-utf8 < tutorial1.html > tutorial/tutorial1.html cp ../share/darcs.css tutorial/tutorial.css rm -f tutorial1.h{tml,aux,ind,toc} tutorial1.image.tex tar cf tutorial.tar tutorial gzip -f --best tutorial.tar tutorial1.dvi: tutorial.tex Makefile.deps sed "s/GFS_VERSION/`$(top_srcdir)/src/gerris2D -V 2>&1 | awk '{ if ($$5 == "version") print $$6}'`/g" < tutorial.tex | sed 's/\\today/'"`date +\"%B %e, %Y\"`/g" > tutorial1.tex latex -interaction=nonstopmode tutorial1.tex > /dev/null 2>&1 latex -interaction=nonstopmode tutorial1.tex > /dev/null 2>&1 latex -interaction=nonstopmode tutorial1.tex tutorial.pdf: tutorial1.dvi dvips -Ppdf -G0 tutorial1.dvi -o tutorial1.ps ps2pdf -sPAPERSIZE=a4 -dMaxSubsetPct=100 -dCompatibilityLevel=1.2 -dSubsetFonts=true -dEmbedAllFonts=true tutorial1.ps tutorial.pdf rm -f tutorial1.ps .xmgr.eps: /usr/local/grace/bin/xmgrace -noask -hardcopy -hdevice EPS -printfile $@ $< .agr.eps: /usr/local/grace/bin/xmgrace -noask -hardcopy -hdevice EPS -printfile $@ $< .fig.eps: fig2dev -L ps $< > $@ ; sh epsbbox.sh $@ .jpeg.eps: convert $< $@.gif convert $@.gif EPS:$@ - rm -f $@.gif .jpg.eps: convert $< $@.gif convert $@.gif EPS:$@ - rm -f $@.gif .gif.eps: convert $< EPS:$@ .png.eps: convert $< EPS:$@ .jpg.pdf: convert $< EPDF:$@ .png.pdf: convert $< EPDF:$@ .epsf.pdf: epstopdf $< .eps.pdf: epstopdf $< -include Makefile.deps # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gerris-snapshot-131206/doc/tutorial/Makefile.am0000644000175100017510000000460512250371171016333 00000000000000## Process this file with automake to produce Makefile.in EXTRA_DIST = tutorial.tex depend.awk Makefile.deps: Makefile.am tutorial.tex awk -f depend.awk file="tutorial" < tutorial.tex > Makefile.deps clean-generic: $(RM) *.dvi *.aux *.log *.toc *.out \ boundaries.pdf direction.eps direction.pdf dxscreen.eps dxscreen.pdf \ gfs2oogl.pdf half-cylinder.eps half-cylinder.pdf refined1.pdf refined1_cells.pdf \ refined2.pdf vorticity.eps vorticity.pdf gfsview.eps tutorial1.tex \ Makefile.deps tutorial.tar.gz: tutorial1.dvi rm -r -f tutorial sed 's/input{pdf.tex}/usepackage{graphicx}\\newcommand{\\gfx}{eps}/g' < tutorial.tex | sed "s/GFS_VERSION/`$(top_srcdir)/src/gerris2D -V 2>&1 | awk '{ if ($$5 == "version") print $$6}'`/g" | sed 's/\\today/'"`date +\"%B %e, %Y\"`/g" > tutorial1.tex hevea -fix tutorial1.tex imagen -res 600 -extra "pnmscale 0.24" tutorial1 mkdir tutorial mv -f tutorial1[0-9][0-9][0-9].png tutorial ## fixme: the character conversion below is a workaround for a bug in hevea version < 1.09 konwert iso1-utf8 < tutorial1.html > tutorial/tutorial1.html cp ../share/darcs.css tutorial/tutorial.css rm -f tutorial1.h{tml,aux,ind,toc} tutorial1.image.tex tar cf tutorial.tar tutorial gzip -f --best tutorial.tar tutorial1.dvi: tutorial.tex Makefile.deps sed "s/GFS_VERSION/`$(top_srcdir)/src/gerris2D -V 2>&1 | awk '{ if ($$5 == "version") print $$6}'`/g" < tutorial.tex | sed 's/\\today/'"`date +\"%B %e, %Y\"`/g" > tutorial1.tex latex -interaction=nonstopmode tutorial1.tex > /dev/null 2>&1 latex -interaction=nonstopmode tutorial1.tex > /dev/null 2>&1 latex -interaction=nonstopmode tutorial1.tex tutorial.pdf: tutorial1.dvi dvips -Ppdf -G0 tutorial1.dvi -o tutorial1.ps ps2pdf -sPAPERSIZE=a4 -dMaxSubsetPct=100 -dCompatibilityLevel=1.2 -dSubsetFonts=true -dEmbedAllFonts=true tutorial1.ps tutorial.pdf rm -f tutorial1.ps .xmgr.eps: /usr/local/grace/bin/xmgrace -noask -hardcopy -hdevice EPS -printfile $@ $< .agr.eps: /usr/local/grace/bin/xmgrace -noask -hardcopy -hdevice EPS -printfile $@ $< .fig.eps: fig2dev -L ps $< > $@ ; sh epsbbox.sh $@ .jpeg.eps: convert $< $@.gif convert $@.gif EPS:$@ - rm -f $@.gif .jpg.eps: convert $< $@.gif convert $@.gif EPS:$@ - rm -f $@.gif .gif.eps: convert $< EPS:$@ .png.eps: convert $< EPS:$@ .jpg.pdf: convert $< EPDF:$@ .png.pdf: convert $< EPDF:$@ .epsf.pdf: epstopdf $< .eps.pdf: epstopdf $< -include Makefile.deps gerris-snapshot-131206/doc/tutorial/tutorial.tex0000644000175100017510000014356512250371171016675 00000000000000\documentclass[a4paper]{article} \usepackage{hevea} \usepackage{color} \usepackage{graphicx} \oddsidemargin=4mm \evensidemargin=-1mm \topmargin=-7mm \textwidth=15.42cm \textheight=23.2cm \newcommand{\gfsweb}{http://gfs.sf.net} \newcommand{\htmladdnormallinkfoot}[2]{\footahref{#2}{#1}} \newcommand{\htmladdnormallink}[2]{\ahref{#2}{#1}} \loadcssfile{tutorial.css} \title{Gerris tutorial} \begin{document} \mbox{}\vspace{1cm} \begin{center} {\huge The Gerris Tutorial}\\ {\large Version GFS_VERSION}\\ \vspace{5mm} {\large St\'ephane Popinet\\ {\tt popinet@users.sf.net}\\ \vspace{5mm} \today} \vspace{1cm} \end{center} \tableofcontents \section{Introduction} This tutorial is a step-by-step introduction to the different concepts necessary to use Gerris. It is specifically designed for a end-user and is not a technical description of the numerical techniques used within Gerris. If you are interested by that, you should consult the bibliography section on the \htmladdnormallinkfoot{Gerris web site}{\gfsweb}. Various versions of this tutorial are available: \begin{itemize} \item Printable format: \htmladdnormallinkfoot{PDF}{\gfsweb/tutorial/tutorial.pdf}. \item HTML: \htmladdnormallinkfoot{direct link}{\gfsweb/tutorial/tutorial/tutorial1.html} or \htmladdnormallinkfoot{compressed archive}{\gfsweb/tutorial/tutorial.tar.gz}. \end{itemize} In this tutorial I will assume that you are familiar with the Unix shell (and that you are running some version of a Unix system). Some knowledge of C programming would also be very helpful if you intend to extend Gerris with your own objects. If Gerris is not already installed on your system, have a look at the \htmladdnormallinkfoot{installation instructions}{\gfsweb/wiki/index.php/Installation\_summary} on the Gerris web site. We are now ready to start. Just to check that everything is okay try: \begin{verbatim} % gerris2D -V \end{verbatim} \subsection{Simulation file} Gerris is a console-based program. It takes a {\em parameter} or {\em simulation} file as input and produces various types of files as output. Everything needed to run the simulation is specified in the parameter file, this includes: \begin{itemize} \item Layout of the simulation domain \item Initial conditions \item Boundary conditions \item Solid boundaries \item What to output (and when) \item Control parameters for the numerical schemes \end{itemize} \section{A simple simulation file} In this section we will see how to write a simulation file for the {\em initial random vorticity} example in the Gerris web site gallery. First of all, it is always a good idea to run simulations in their own directory. Type this at your shell prompt: \begin{verbatim} % mkdir vorticity % cd vorticity \end{verbatim} As a starting point we will use the following simulation file: {\tt vorticity.gfs} \begin{verbatim} 1 2 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 0 } } GfsBox {} 1 1 right 1 1 top \end{verbatim} This is a valid simulation file but it does not do much as you can see by typing \begin{verbatim} % gerris2D vorticity.gfs \end{verbatim} It is a good starting point however to explain the general structure of a simulation file. \subsection{A few comments on syntax} First of all, there are two types of parameters in a simulation file: {\em compulsory} and {\em optional} parameters. Optional parameters are always specified within a {\em braced} block (i.e. a block of text delimited by braces ({\tt \{ like this \}}). They also often take the form \begin{verbatim} parameter = value \end{verbatim} where {\tt parameter} is an unique identifier (within this braced block). All the other parameters are compulsory parameters. For example, in {\tt vorticity.gfs} both \begin{verbatim} GfsTime { end = 0 } \end{verbatim} and \begin{verbatim} end = 0 \end{verbatim} are optional parameters. The second important syntax point regards the way various fields are delimited. Newline (or ``carriage return'') characters are generally used to delimitate different ``objects'' in the simulation file. The only case where this rule does not apply is within braced blocks defining optional arguments of the form \begin{verbatim} parameter = value \end{verbatim} For example, in {\tt vorticity.gfs} the following blocks of text are all objects: \begin{itemize} \item \begin{verbatim} 1 2 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 0 } } \end{verbatim} \item \begin{verbatim} GfsTime { end = 0 } \end{verbatim} \item \begin{verbatim} GfsBox {} \end{verbatim} \item \begin{verbatim} 1 1 right \end{verbatim} \item \begin{verbatim} 1 1 top \end{verbatim} \end{itemize} Following this rule, {\tt vorticty.gfs} could have been written equivalently as: \begin{verbatim} 1 2 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 0 } } GfsBox {} 1 1 right 1 1 top \end{verbatim} \subsection{Topology description of the simulation domain} Ok, so what are all these ``objects'' for? The first line of the simulation file defines a {\em graph} representing the general layout of the simulation domain and follows this syntax: \begin{description} \item[1st field] number of nodes in the graph ({\tt 1}) \item[2nd field] number of edges connecting the nodes ({\tt 2}) \item[3rd field] object type for the graph ({\tt GfsSimulation}) \item[4th field] default object type for the nodes ({\tt GfsBox}) \item[5th field] object type for the edges ({\tt GfsGEdge}) \item[6th field] 1st optional parameters (braced block) \item[7th field] 2nd optional parameters (braced block) \end{description} We then jump to the end of the 2nd optional parameters to line \begin{verbatim} GfsBox {} \end{verbatim} which describes the first (and unique in this case) node of the graph. The first field is the object type of the node ({\tt GfsBox}), the second field contains optional parameters. The following two lines \begin{verbatim} 1 1 right 1 1 top \end{verbatim} define the edges of the graph as follows: \begin{description} \item[1st field] index of the starting node ({\tt 1}) \item[2nd field] index of the ending node ({\tt 1}) \item[3rd field] spatial direction in which the two nodes are connected ({\tt right} and {\tt top}) \end{description} The nodes are always indexed starting from one. The spatial directions are defined on figure \ref{direction}. From this, we see that this file defines a simulation domain containing one node (a {\tt GfsBox}) connected with itself in both the horizontal ({\tt right}) and vertical ({\tt top}) directions. \begin{figure}[htbp] \begin{center} \includegraphics[width=0.4\hsize]{direction.eps} \end{center} \caption{Definition of spatial directions} \label{direction} \end{figure} By default, a {\tt GfsBox} is a square (in 2D) or a cube (in 3D) of size unity. The first node of the graph is always centered on the origin and is used as the reference to position the other nodes. We have consequently defined a square simulation domain of size unity, centered on the origin and using periodic boundary conditions. \subsection{Controlling the simulation} Now that we have defined the simulation domain and the boundary conditions, we need to specify the initial conditions, numerical schemes parameters and so on. This is all done within the second optional parameters block of the graph definition. In our file we have for the moment only one object in this block: \begin{verbatim} GfsTime { end = 0 } \end{verbatim} As its name indicate, this object defines the physical and the computational time. By ``computational time'' I mean the number of time steps performed. By default both the physical time and the time step number are zero when the program starts. It is possible to set different values using for example \begin{verbatim} GfsTime { t = 1.4 i = 32 end = 0 } \end{verbatim} where {\tt i} is the time step number and {\tt t} is the physical time. The {\tt end} identifier specifies that the simulation should stop when the physical time reaches the given value. It is also possible to stop the simulation when a specified number of time steps is reached, using the {\tt iend} identifier. If both {\tt end} and {\tt iend} are specified, the simulation stops when either of these are reached. By default, both {\tt end} and {\tt iend} values are infinite. Ok, let's then change this object to \begin{verbatim} GfsTime { end = 50 } \end{verbatim} \subsubsection{Spatial discretisation} The next step is to specify what spatial resolution we want for the discretisation. For the moment, the only thing we have defined is the root of the quad/octree. The whole domain is thus discretised with only one grid point\dots We need to specify how we want to refine this initial root cell. This is done by using an {\tt GfsRefine} object. We can do this by adding the line \begin{verbatim} GfsRefine 6 \end{verbatim} to the second optional parameter block. This is the simplest possible way to refine the initial root cell. We tell the program that we want to keep refining the cell tree (by dividing each cell in four children cells (in 2D, eight in 3D)) until the {\em level} of the cell is equal to five. The level of the root cell is zero, the level of all its children cells is one and so on recursively. After this refinement process completes we have created a regular Cartesian grid with $2^6=64$ cells in each dimension on the finest level ($6$). \subsubsection{Initial conditions} We now need to specify the initial conditions and the various actions (such as writing results, information messages etc\dots) we want to perform when the simulation is running. All these things are treated by Gerris as various types of {\em events}, all represented by objects derived from the same parent object {\tt GfsEvent}. Initial conditions are a particular type of event happening only once and before any other type of event, they are all derived from the same parent object {\tt GfsInit}. Gerris comes with a few different objects describing various initial conditions. As there is no way Gerris could provide all the different initial conditions users could think of, Gerris makes it easy for users to create their own initialisation objects by extending the {\tt GfsInit} object class. In order not to have to recompile (or more exactly re-link) the whole code everytime a new class is added, Gerris uses dynamically linked {\em modules} which can be loaded at runtime. We will see later how to write your own modules. For the moment, we will use the default {\tt GfsInit} object. Just add the following lines to {\tt vorticity.gfs}: \begin{verbatim} 1 2 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 50 } GfsRefine 6 GfsInit {} { U = (0.5 - rand()/(double)RAND_MAX) V = (0.5 - rand()/(double)RAND_MAX) } } GfsBox {} 1 1 right 1 1 top \end{verbatim} Using {\tt GfsInit} it is possible to set the initial value of each of the simulation variables. By default all variables are set to zero initially. In our case we tell Gerris to define the two components of the velocity field {\tt U} and {\tt V} as C functions. The standard {\tt rand{}} function of the C library returns a (pseudo)-random number between 0 and {\tt RAND\_MAX}. The two functions we defined thus set the components of the velocities in each cell as random numbers between -0.5 and 0.5. This is a powerful feature of the parameter file. In most cases where Gerris requires a number (such as the {\tt GfsRefine 6} line, a function of space and time can be used instead. For example, a valid parameter file could include: \begin{verbatim} ... GfsRefine 6.*(1. - sqrt (x*x + y*y)) ... \end{verbatim} which would define a mesh refined in concentric circles. Using this feature, it is possible to define most initial conditions directly in the parameter file. \subsubsection{Writing results} The {\tt vorticity.gfs} file we have now is all Gerris needs to run the simulation. However, for this run to be any use, we need to specify how and when to output the results. This is done by using another class of objects: {\tt GfsOutput}, derived from {\tt GfsEvent}. Gerris comes with a number of these objects allowing to output various aspects of the simulation. The general syntax for an {\tt GfsEvent} object is as follows: \begin{verbatim} GfsEvent { start = 0.5 step = 1e-2 end = 3.4 istart = 10 iend = 46 } \end{verbatim} this defines an event: \begin{itemize} \item starting whenever the physical time is larger than (or equal to) 0.5 or the time step number is larger than (or equal to) 10, \item ending whenever the physical time is strictly larger than 3.4 or the time step number is strictly larger than 46, \item and occurring every $10^{-2}$ physical time units. \end{itemize} It is also possible to specify an event step as a number of time steps using the {\tt istep} identifier. Note, however, that you cannot specify both {\tt step} and {\tt istep} for the same event. By default, {\tt start} and {\tt istart} are zero and {\tt end}, {\tt iend}, {\tt step} and {\tt istep} are infinite. An {\tt GfsOutput} object is derived from {\tt GfsEvent} and follows this syntax: \begin{verbatim} GfsOutput {} filename-%d-%f-%ld \end{verbatim} The first part of the line {\tt GfsOutput \{\}} defines the {\tt GfsEvent} part of {\tt GfsOutput} and follows the syntax above. In the remainder of this tutorial, I will use the following notation to express this inheritance of syntax: \begin{verbatim} [GfsEvent] filename-%d-%f-%ld \end{verbatim} to avoid repeating the whole thing for every derived objects. The second part {\tt filename-\%d-\%f-\%ld} specifies where to output things. The {\tt \%d}, {\tt \%f} and {\tt \%ld} characters are formatting strings which follow the C language syntax and will be replaced every time the event takes place according to: \begin{description} \item[{\tt \%d}] integer replaced with the current process number (used when running the parallel version of Gerris). \item[{\tt \%f}] floating-point number replaced with the current physical time. \item[{\tt \%ld}] (long) integer replaced with the current time step number. \end{description} Of course, you are free not to specify any of these, in which case the output will just be appended to the same file every time the event takes place. There are also two filenames which have a special meaning: {\tt stdout} and {\tt stderr}, for the standard output and standard error of the shell respectively. We now add the following to our simulation file: \begin{verbatim} 1 2 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 50 } GfsRefine 6 GfsInit {} { U = (0.5 - rand()/(double)RAND_MAX) V = (0.5 - rand()/(double)RAND_MAX) } GfsOutputTime { istep = 10 } stdout GfsOutputProjectionStats { istep = 10 } stdout } GfsBox {} 1 1 right 1 1 top \end{verbatim} The first line we added tells the program to output information about the time every 10 time steps on the standard output. The second line outputs statistics about the projection part of the algorithm. You can now run the code like this: \begin{verbatim} % gerris2D vorticity.gfs \end{verbatim} and you should get an output in your console looking like this (you can stop the program using {\tt Ctrl-C}): \begin{verbatim} step: 0 t: 0.00000000 dt: 0.000000e+00 MAC projection before after rate niter: 0 residual.bias: 0.000e+00 0.000e+00 residual.first: 0.000e+00 0.000e+00 0.0 residual.second: 0.000e+00 0.000e+00 0.0 residual.infty: 0.000e+00 0.000e+00 0.0 Approximate projection niter: 0 residual.bias: 0.000e+00 0.000e+00 residual.first: 1.050e-14 1.050e-14 0.0 residual.second: 1.612e-14 1.612e-14 0.0 residual.infty: 7.105e-14 7.105e-14 0.0 step: 10 t: 0.02190704 dt: 2.801016e-03 MAC projection before after rate niter: 5 residual.bias: -3.053e-16 1.403e-16 residual.first: 3.365e+01 2.949e-05 16.3 residual.second: 4.274e+01 4.676e-05 15.6 residual.infty: 1.954e+02 3.285e-04 14.3 Approximate projection niter: 5 residual.bias: 9.714e-17 2.874e-16 residual.first: 3.322e+01 2.548e-05 16.7 residual.second: 4.250e+01 4.062e-05 16.0 residual.infty: 1.880e+02 3.380e-04 14.1 step: 20 t: 0.05278371 dt: 3.531551e-03 MAC projection before after rate niter: 5 ... \end{verbatim} The lines starting with {\tt step:} are written by {\tt GfsOutputTime}. They give the time step number, corresponding physical time and the time step used for the previous iteration. The other lines are written by {\tt GfsOutputProjectionStats} and give you an idea of the divergence errors and convergence rate of the two projection steps (MAC and approximate) performed during the previous iteration. The various norms of the residual of the solution of the Poisson equation are given before and after the projection step. The {\tt rate} column gives the average amount by which the divergence is reduced by each iteration of the multigrid solver. Well, numbers are great but what about some images? What we want to do, for example, is output some graphical representation of a given scalar field. In 2D, a simple way to do that is to create an image where each pixel is coloured according to the local value of the scalar. Gerris provides an object to do just that: {\tt GfsOutputPPM} which will create a {\sc PPM} (Portable PixMap) image. This object is derived from a more general class used to deal with scalar fields: {\tt GfsOutputScalar} following this syntax: \begin{verbatim} [GfsOutput] { v = U min = -1 max = 2.5 } \end{verbatim} where as before the square brackets express inheritance from the parent class. The {\tt v} identifier specifies what scalar field we are dealing with, one of: \begin{description} \item[{\tt U}, {\tt V} (and {\tt W} in 3D)]: components of the velocity. \item[{\tt P}]: pressure. \item[{\tt C}]: passive tracer. \item[{\tt Vorticity}]: vorticity (norm of the vorticity vector in 3D). \item[{\tt Velocity}]: norm of the velocity. \end{description} The {\tt min} and {\tt max} values specify the minimum and maximum values this scalar can take. If they are not given, they are computed every time the event takes place. We can now use this in our simulation file: \begin{verbatim} 1 2 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 50 } GfsRefine 6 GfsInit {} { U = (0.5 - rand()/(double)RAND_MAX) V = (0.5 - rand()/(double)RAND_MAX) } GfsOutputTime { istep = 10 } stdout GfsOutputProjectionStats { istep = 10 } stdout GfsOutputPPM { step = 1 } vorticity-%4.1f.ppm { v = Vorticity } } GfsBox {} 1 1 right 1 1 top \end{verbatim} The code will output every 1 time units a {\sc PPM} image representing the vorticity field. The result will be written in files named: {\tt vorticity-00.0.ppm}, {\tt vorticity-01.0.ppm}\dots (if the {\tt \%4.1f} thing is not familiar, consult a C book or try {\tt \% man 3 printf}). If you re-run the program using this new simulation file, you will get a number of {\sc PPM} files (51 to be precise) you can then visualise with any image editing or viewing tool. I would recommend the very good \htmladdnormallinkfoot{ImageMagick toolbox}{http://www.imagemagick.org}. If you run a Linux box, these tools are very likely to be already installed on your system. Try typing this in your working directory: \begin{verbatim} % display *.ppm \end{verbatim} If it works, you should see a small (64x64) image representing the initial vorticity field. If you click on it, a menu will appear. Select File$\rightarrow$Next and look at the evolution of the vorticity field with time (you can also use the space bar and backspace key to change back and forth). You might also want to try the {\tt animate *.ppm} command. Read the man pages of ImageMagick if you want to know more. Note that you can use these tools also while Gerris is running (and creating new images). With a bit of patience you will get the image on figure \ref{vorticity} at $t=18$ (resolution has been increased to $128\times 128$). \begin{figure} \begin{center} \includegraphics[width=0.4\hsize]{vorticity.eps} \end{center} \caption{Vorticity field for the initial random vorticity problem at $t=18$.} \label{vorticity} \end{figure} Before we carry on, we are going to make two modifications to the simulation file. First of all, it is not really handy to generate one file for every image generated. ImageMagick (and most other programs) can deal with multiple {\sc PPM} images contained within the same file. Secondly, in the sequence of images we generate, a given value of the vorticity does not always correspond to the same colour (because the minimum and maximum values of the vorticity can vary in time). We can fix that like this: \begin{verbatim} 1 2 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 50 } GfsRefine 6 GfsInit {} { U = (0.5 - rand()/(double)RAND_MAX) V = (0.5 - rand()/(double)RAND_MAX) } GfsOutputTime { istep = 10 } stdout GfsOutputProjectionStats { istep = 10 } stdout GfsOutputScalarStats { istep = 10 } stdout { v = Vorticity } GfsOutputPPM { step = 0.1 } vorticity.ppm { v = Vorticity min = -10 max = 10 } } GfsBox {} 1 1 right 1 1 top \end{verbatim} We have now specified fixed bounds for the vorticity (using the {\tt min} and {\tt max} identifiers). Each {\sc PPM} image will be appended to the same file: {\tt vorticity.ppm}. How did I choose the minimum and maximum values for the vorticity? The line {\tt GfsOutputScalarStats \{ istep = 10 \} stdout \{ v = Vorticity \}}, writes the minimum, average, standard deviation and maximum values of the vorticity. By re-running the simulation and looking at these values it is easy to find a suitable range. \section{A more complex example with solid boundaries} In this section we will see how to set up a simulation for the flow past a solid body (a half-cylinder) in a narrow channel. While doing that we will also encounter new ways of displaying simulation results. \subsection{Domain geometry and boundary conditions} What we want is a narrow channel ($4\times 1$ for example). From the previous example, we know that we can build it like this: \begin{verbatim} 4 3 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 0 } } GfsBox {} GfsBox {} GfsBox {} GfsBox {} 1 2 right 2 3 right 3 4 right \end{verbatim} i.e. four boxes, box 1 connected to box 2 horizontally (to the right), box 2 connected to box 3 horizontally and box 3 connected to box 4 horizontally. Box 1 is centered on the origin and is of size one. All the other boxes are positioned accordingly. We now have our $4\times 1$ rectangular domain. \subsubsection{Boundary conditions} What about boundary conditions? By default Gerris assumes that boundaries are solid walls with slip conditions for the velocity (i.e. the tangential stress on the wall is zero). For the moment we then have defined a rectangular box closed on all sides by solid walls. What we really want is to specify an input velocity on the left side of the box and some sort of output condition on the right side. We can do that like this: \begin{verbatim} 4 3 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 0 } } GfsBox { left = GfsBoundaryInflowConstant 1 } GfsBox {} GfsBox {} GfsBox { right = GfsBoundaryOutflow } 1 2 right 2 3 right 3 4 right \end{verbatim} The whole left side of the first (leftmost) box is now defined to be a {\tt GfsBoundaryInflowConstant} object and the whole right side of the last (rightmost) box a {\tt GfsBoundaryOutflow} object. Again, boundary conditions objects are all derived from the {\tt GfsBoundary} object and, as initial conditions, new objects can be easily written by the user (see also section \ref{morebc}). We see that {\tt GfsBoundaryInflowConstant} takes one argument which is the value of the (constant) normal velocity applied to this boundary. All the other variables (pressure, tracer concentration etc...) follow a zero gradient condition. {\tt GfsBoundaryOutflow} implements a simple outflow boundary condition where the pressure is set to zero as well as the gradient of all other quantities. \subsubsection{Solid boundaries} We now have an empty ``wind tunnel'' with a constant inlet velocity of norm unity. Gerris can deal with arbitrarily complex solid boundaries embedded in the quad/octree mesh. The geometry of the solid boundaries is described using {\sc GTS} triangulated surfaces. In 2D, using 3D triangulated surfaces seems overkill, as 2D curves would be enough. However, Gerris being both a 2D and 3D code it deals with 2D solid boundaries exactly as with 3D ones, even if the simulation is done only on a 2D cross-section. Creating 3D polygonal surfaces is not an easy job and is clearly outside the scope of this tutorial. There are a number of utilities you can use to do that, including big commercial {\sc CAD} packages. In general, once you have created a polygonal surface with one of these tools it should be relatively easy to convert it to the file format used by {\sc GTS}. In particular, most {\sc CAD} packages can export to the {\sc STL} (stereolithography) format which is easily converted to the {\sc GTS} file format using the {\tt stl2gts} utility which comes with the library. This tutorial comes (handily) with one such file: \htmladdnormallinkfoot{{\tt half-cylinder.gts}} {\gfsweb/half-cylinder.gts}. You can visualise the surface it describes using a program called \htmladdnormallinkfoot{Geomview}{http://www.geomview.org}. To do this, you first need to convert the {\sc GTS} file to a format Geomview understands. This can be done using the {\tt gts2oogl} utility like this: \begin{verbatim} % gts2oogl < half-cylinder.gts > half-cylinder.oogl \end{verbatim} ({\sc OOGL} is the file format used by Geomview). {\tt gts2oogl} has a number of options. You can have a short explanation of what they do by typing: \begin{verbatim} % gts2oogl -h \end{verbatim} If you now start geomview like this: \begin{verbatim} % geomview half-cylinder.oogl \end{verbatim} and play around with the pan/rotate/zoom functions of Geomview (read the manual for details), you should see something like the image on figure \ref{half-cylinder}. \begin{figure}[htbp] \begin{center} \includegraphics[width=0.3\hsize]{half-cylinder.eps} \end{center} \caption{Geomview representation of {\tt half-cylinder.gts}} \label{half-cylinder} \end{figure} You can notice that this is a proper 3D object, even if we are only going to simulate the flow in a 2D cross-section. It is also important that the object is ``tall'' enough so that it spans the entire ``height'' of the 2D domain, as if we were going to simulate the flow around it in a proper 3D channel with a square cross-section. The orientation of the surface is also important to define what is inside (the solid) and what is outside (the fluid). We can now insert this object in the simulation domain like this: \begin{verbatim} 4 3 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 0 } GfsSolid half-cylinder.gts } GfsBox { left = GfsBoundaryInflowConstant 1 } GfsBox {} GfsBox {} GfsBox { right = GfsBoundaryOutflow } 1 2 right 2 3 right 3 4 right \end{verbatim} add what mesh refinement we want and a few things to output: \begin{verbatim} 4 3 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 9 } GfsRefine 6 GfsSolid half-cylinder.gts GfsInit {} { U = 1 } GfsOutputBoundaries {} boundaries GfsOutputTime { step = 0.02 } stdout GfsOutputProjectionStats { step = 0.02 } stdout GfsOutputPPM { step = 0.02 } vorticity.ppm { min = -100 max = 100 v = Vorticity } GfsOutputTiming { start = end } stdout } GfsBox { left = GfsBoundaryInflowConstant 1 } GfsBox {} GfsBox {} GfsBox { right = GfsBoundaryOutflow } 1 2 right 2 3 right 3 4 right \end{verbatim} I have added a new {\tt GfsOutput} object we haven't seen yet: {\tt GfsOutputTiming}. This object writes a summary of the time taken by various parts of the solver. You might also have noticed the unusual {\tt start = end} bit ; this just specifies that this event will only happen once at the end of the simulation. Another new output object is {\tt GfsOutputBoundaries}. This object writes a geometrical summary (in {\sc OOGL}/Geomview format) of the mesh used, including boundary conditions, solid boundaries and so on. We also initialise the velocity field on the whole domain to a constant value (1,0,0). We could have left the velocity field to its default value of (0,0,0) but, given that we impose inflow boundary conditions, it would have meant that the initial velocity would have been strongly divergent. Gerris always starts a simulation by a projection step (to fix problems like this) but it is always a good idea to start with the best possible velocity field. We can now run the code: \begin{verbatim} % gerris2D half-cylinder.gfs \end{verbatim} It is going to take a while to complete, but remember that you can look at files while they are being generated. The first file which will be generated is {\tt boundaries}. If you load it in Geomview, you should get something like figure \ref{boundaries} (you probably want to disable automatic normalization in Geomview by selecting Inspect$\rightarrow$Appearance$\rightarrow$Normalize$\rightarrow$None). \begin{figure}[htbp] \begin{center} \includegraphics[angle=90,width=0.8\hsize]{boundaries.eps} \end{center} \caption{Representation of boundary conditions and solid boundaries} \label{boundaries} \end{figure} The black lines represent the boundaries between solid cells and fluid cells. If you zoom in on the half-cylinder, you will see that it is represented by lines following the grid (it is ``lego-looking''). This does not mean that the ``real'' (i.e. computational) solid boundary is also lego-looking because fluid cells can be cut by the solid boundaries, in which case the algorithm properly takes into account the corresponding cell geometry. Each {\tt GfsBoundary} object is colour-coded. From the colours in the picture we see that we have indeed an inflow boundary condition on the left side (blue) and an outflow boundary condition on the right side (green). You can also load in the full half-cylinder geometry we created before: {\tt half-cylinder.oogl} or visualise the {\sc PPM} files using {\tt animate} and {\tt display} as in the previous example. By the way, a useful feature of {\tt display} is that you can zoom in by clicking on the middle button in the image being displayed. \subsection{Saving the whole simulation} Hmm, this simulation is taking quite a while\dots What if we want to stop the simulation, make some modifications to the simulation file and restart where we left from? Or equivalently, save the whole simulation at regular intervals for latter post-processing? You can do this using the {\tt GfsOutputSimulation} object. Like this for example: \begin{verbatim} GfsOutputSimulation { step = 0.1 } half-cylinder-%3.1f.gfs { variables = U,V,P } \end{verbatim} where {\tt variables} defines which variables you want to save. By default all the variables are saved. If you now re-run the simulation, you will get a new file every 0.1 time units. This file is a valid simulation file (like {\tt half-cylinder.gfs}) and you can use it directly to restart the simulation from this point onward. If you edit it, you will see that the general structure is the same as usual but for five pretty big chunks of data. The first chunk starts with {\tt GfsSolid} and is just the data contained in {\tt half-cylinder.gts} but this time embedded directly into the simulation file. The goal there is to have fully self-contained simulations files which you can just move around without having to keep track of twenty different files. The four other chunks are each associated with a {\tt GfsBox} and contain both the topology of the corresponding cell tree but also the associated physical data, solid boundary definitions etc... You can of course edit this file, add new outputs and so on and restart the simulation from where you left it. \subsection{Visualisation} \subsubsection{\label{gfsview}GfsView} GfsView is a tool written specifically to visualise Gerris simulation files. It is still young but fully usable both for 2D and 3D simulations. Its main advantage over other options and the reason for its existence is that it makes full use of the adaptive nature of the octree representation at the visualisation level. The octree structure is used within GfsView to dynamically select the appropriate level of refinement depending on the viewpoint, zoom and rendering speed. It is also used to efficiently compute complex geometrical entities such as isosurfaces or cut-planes. The more classical viewers such as openDX or MayaVi are designed for either regular Cartesian grids or fully-unstructured meshes and do not take advantage of the octree representation (worse still, the octree representation first needs to be converted to Cartesian or fully-unstructured meshes before being imported into these programs). To install GfsView, you need to have the \htmladdnormallinkfoot{Gtk+}{http://www.gtk.org} toolkit installed on your system. If you are running a Linux machine, Gtk+ is most probably already installed. You will also need the \htmladdnormallinkfoot{GtkGlExt}{http://gtkglext.sourceforge.net/} OpenGL extension to Gtk+. If you are running a Debian-based system, you can install these packages using \begin{verbatim} % apt-get install libgtkglext1-dev \end{verbatim} If you then download a recent version of GfsView from the Gerris web site (either an official release or a snapshot) and do the now classical: \begin{verbatim} % gunzip gfsview.tar.gz % tar xvf gfsview.tar % cd gfsview % ./configure --prefix=/home/joe/local % make % make install \end{verbatim} you will be able to start GfsView using: \begin{verbatim} % gfsview2D half-cylinder-0.5.gfs \end{verbatim} Note that you can also install the most recent GfsView version using darcs and {\tt http://gerris.dalembert.upmc.fr/darcs/gfsview-stable} as source repository (you will also need to install Gerris this way, see section \ref{build_darcs} for details). Clicking on ``Linear'', ``Vectors'' and ``Solid'' in the toolbar and changing the vector length by editing the properties of the ``Vectors'' object (select the object then choose ``Edit$\rightarrow$Properties'') you should be able to get something looking like figure \ref{fig:gfsview}. You can pan by dragging the right mouse button, zoom by dragging the middle button and rotate by dragging the left button. \begin{figure}[htbp] \begin{center} %% \htmlimage{scale=2.0,external,thumbnail=1} \includegraphics[width=\hsize]{gfsview.eps} \end{center} \caption{Screenshot of a GfsView session.} \label{fig:gfsview} \end{figure} While by no means complete, you can already do many things with GfsView. I hope it is fairly user-friendly so just play with it and discover for yourself. \subsubsection{Some post-processing using {\tt gfs2oogl}} Gerris comes with a utility called {\tt gfs2oogl} which converts simulation files to various representations in {\sc OOGL} format. We are just going to look at two types of representations {\tt gfs2oogl} can do: scalar field cross-sections and vector fields. First of all, you can access a small summary of the options of {\tt gfs2oogl} by typing: \begin{verbatim} % gfs2oogl2D -h \end{verbatim} By default {\tt gfs2oogl} will generate the same output as {\tt GfsOutputBoundaries} like this: \begin{verbatim} % gfs2oogl2D < half-cylinder-0.1.gfs > boundaries.oogl \end{verbatim} To generate an {\sc OOGL} representation of a scalar field (a coloured square for each discretisation cell) do this: \begin{verbatim} % gfs2oogl2D -S -z 0 -c Vorticity < half-cylinder-0.5.gfs > squares.oogl \end{verbatim} which tells {\tt gfs2oogl} to do a cross-section for $z = 0$ ({\tt -z 0}) represented by squares ({\tt -S}) and colored according to the local vorticity ({\tt -c Vorticity}). To generate a vector field representing the velocity try: \begin{verbatim} % gfs2oogl2D -V 2 -z 0 < half-cylinder-0.5.gfs > vectors.oogl \end{verbatim} where {\tt -V 2} specifies that the maximum length of the vector is twice the dimension of the smallest cell in the domain. If you now load all these files in Geomview and do a bit of panning and zooming around (and possibly tune things like face shading) you should get an image looking like figure \ref{gfs2oogl}. \begin{figure}[htbp] \begin{center} \includegraphics[angle=90,width=0.6\hsize]{gfs2oogl.eps} \end{center} \caption{Scalar and vector representation generated using {\tt gfs2oogl}.} \label{gfs2oogl} \end{figure} \subsection{Using dynamic adaptive mesh refinement} For the moment our simulation is not very well resolved. We could always change the {\tt GfsRefine 6} line to something bigger but it would not make really good use of the quadtree approach used in Gerris. A code using a simple regular Cartesian grid approach would be faster and would produce the same results. Instead we are going to use {\em dynamic adaptive mesh refinement}, where the quadtree structure of the discretisation is used to adaptively follow the small structures of the flow, thus concentrating the computational effort on the area where it is most needed. This is done using yet another object class: {\tt GfsAdapt}, also derived from {\tt GfsEvent}. Various criteria can be used to determine where refinement is needed. In practice, each criterium will be defined through a different object derived from {\tt GfsAdapt}. If several {\tt GfsAdapt} objects are specified in the same simulation file, refinement will occur whenever at least one of the criteria is verified. For this first example, we will use a simple criterium based on the local value of the vorticity. A cell will be refined whenever $$ {|\nabla\times{\bf v}|\Delta x\over\max|{\bf v}|} > \delta, $$ where $\Delta x$ is the size of the cell and $\delta$ is a user-defined threshold which can be interpreted as the maximum angular deviation (caused by the local vorticity) of a particle traveling at speed $\max|{\bf v}|$ across the cell. This criterium is implemented by the {\tt GfsAdaptVorticity} object. The general syntax for an {\tt GfsAdapt} object is: \begin{verbatim} [GfsEvent] { mincells = 1 maxcells = 100000 minlevel = 1 maxlevel = 10 cmax = 1e-2 } \end{verbatim} where {\tt mincells} specifies the minimum number of cells in the domain, {\tt maxcells} the maximum number of cells, {\tt minlevel} the level below which it is not possible to coarsen a cell, {\tt maxlevel} the level above which it is not possible to refine a cell and {\tt cmax} the maximum cell cost. The default values are 0 for {\tt minlevel} and {\tt mincells} and infinite for {\tt maxlevel} and {\tt maxcells}. An important point is that, for the moment, it is not possible to dynamically refine solid boundaries. A simple solution to this restriction is to always refine the solid boundary with the maximum resolution at the start of the simulation and to restrict the refinement using the {\tt maxlevel} identifier in {\tt GfsAdapt}. What happens if the maximum number of cells is reached? The refinement algorithm will keep the number of cells fixed but will minimize the maximum cost over all the cells. This can be used for example to run a constant-size simulation where the cells are optimally distributed across the simulation domain. This would be done by setting {\tt maxcells} to the desired number and {\tt cmax} to zero. Following this we can modify our simulation file: \begin{verbatim} 4 3 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 9 } GfsRefine 7 GfsSolid half-cylinder.gts GfsInit {} { U = 1 } # GfsOutputBoundaries {} boundaries GfsAdaptVorticity { istep = 1 } { maxlevel = 7 cmax = 1e-2 } GfsOutputTime { step = 0.02 } stdout GfsOutputBalance { step = 0.02 } stdout GfsOutputProjectionStats { step = 0.02 } stdout GfsOutputPPM { step = 0.02 } vorticity.ppm { min = -100 max = 100 v = Vorticity } GfsOutputSimulation { step = 0.1 } half-cylinder-%3.1f.gfs { variables = U,V,P } GfsOutputTiming { start = end } stdout } GfsBox { left = GfsBoundaryInflowConstant 1 } GfsBox {} GfsBox {} GfsBox { right = GfsBoundaryOutflow } 1 2 right 2 3 right 3 4 right \end{verbatim} We have added two lines and commented out (using {\tt \#}) the line outputting the boundaries (we don't need that anymore, we have the simulation files). The first line we added says that we want to refine dynamically the mesh through the {\tt GfsAdaptVorticity} object applied every timestep ({\tt istep = 1}). The $\delta$ parameter ({\tt cmax}) is set to $10^{-2}$. The second line we added is a new {\tt GfsOutput} object which displays the ``balance'' of the domain sizes across the different processes (when Gerris is ran in parallel). We will use this to monitor how the number of cells evolves with time as the simulation refines or coarsens the mesh according to our vorticity criterium. We can now run this new simulation. If the previous simulation did not complete yet, don't be afraid to abort it ({\tt Ctrl-C}), this one is going to be better (and faster). \begin{verbatim} % gerris2D half-cylinder.gfs \end{verbatim} If we now look at the balance summary written by {\tt GfsOutputBalance}, we see that initially ({\tt step: 0}) the total number of cells (on all levels) is 86966, which corresponds to a constant resolution of $4\times 2^7\times 2^7=512\times 128$. At step 10 the number of cells is down to 990 with a corresponding increase in computational speed. If we now look at the first simulation file we saved, using: \begin{verbatim} % gfs2oogl2D < half-cylinder-0.1.gfs > boundaries % gfs2oogl2D -S -z 0 -c Vorticity < half-cylinder-0.1.gfs > squares.oogl \end{verbatim} we obtain figure \ref{refined1} showing not only the domain boundaries as usual, but also the boundaries (thin black lines) between different levels of refinement. \begin{figure}[htbp] \begin{center} \includegraphics[angle=90,width=0.6\hsize]{refined1.eps} \end{center} \caption{Dynamic adaptive mesh refinement $t=0.1$} \label{refined1} \end{figure} We see that the mesh is very refined around the solid and around the two vortices developing at the trailing edge and very coarse (one cell per box only) on the downstream part of the domain. If you are not sure what these thin black lines represent, just switch on the edge representation in Geomview (using the Inspect$\rightarrow$Appearance menu). You will get a picture looking like figure \ref{refined1-cells}, showing all the cells used for the discretisation. \begin{figure}[htbp] \begin{center} \includegraphics[angle=90,width=0.6\hsize]{refined1_cells.eps} \end{center} \caption{Dynamic adaptive mesh refinement $t=0.1$. Detail of the cells.} \label{refined1-cells} \end{figure} As the simulation goes on, you can see the number of cells in the domain increase as the trailing vortices develop. With a bit of patience you will get to figure \ref{refined2} showing the fully developed Von Karman vortex street with patches of increased resolution following each vortex. Even when the flow is fully developed using adaptive mesh refinement still saves a factor of \~{}6 in time and memory use. The advantage of adaptive mesh refinement is even more obvious in situations where it is necessary to use very large domains to avoid any contamination of the solution by the boundary conditions. \begin{figure}[htbp] \begin{center} \includegraphics[angle=90,width=0.8\hsize]{refined2.eps} \end{center} \caption{Dynamic adaptive mesh refinement $t=9$.} \label{refined2} \end{figure} You should also try to {\tt animate vorticity.ppm} which by now should give you a nice animation of the developing trailing vortices becoming unstable and generating the Von Karman street. If ImageMagick is properly installed on your system you can also try: \begin{verbatim} % convert vorticity.ppm vorticity.mpg \end{verbatim} which will produce a much smaller {\sc MPEG} video file, suitable for distribution through the network. \section{Going further} \subsection{More on boundary conditions} \label{morebc} Up to now we have only dealt with ``pre-packaged'' boundary conditions such as {\tt GfsBoundaryInflowConstant} and {\tt GfsBoundaryOutflow}. What if you need more specific boundary conditions? For most practical problems, boundary conditions can be reduced to two main categories: Dirichlet boundary conditions for which the value of the variable is set and Neumann boundary conditions for which the value of the derivative of the variable is set. As we have seen earlier, the default boundary condition in Gerris is Dirichlet (zero) for the normal components of the velocity and Neumann (zero) for all other variables. Let us say that we want to impose a Poiseuille (parabolic) profile rather than a constant inflow velocity for the half-cylinder problem i.e. we want a Dirichlet boundary condition on the normal component of the velocity ({\tt U}) with an imposed parabolic profile. This can easily be done in Gerris like this: \begin{verbatim} ... GfsBox { left = GfsBoundary { GfsBcDirichlet U { return 1. - 4.*y*y; } GfsBcDirichlet V 0 } } GfsBox {} GfsBox {} GfsBox { right = GfsBoundaryOutflow } ... \end{verbatim} Similarly a Neumann boundary condition on variable {\tt X} would use {\tt GfsBcNeumann X ...} \subsection{Adding tracers} In the half cylinder example, it would be nice to be able to visualise the flow using for example a passive tracer injected at the inlet. This is very simple, just modify the {\tt half-cylinder.gfs} parameter file like this: \begin{verbatim} 4 3 GfsSimulation GfsBox GfsGEdge {} { GfsTime { end = 9 } GfsRefine 7 GfsSolid half-cylinder.gts GfsVariableTracer {} T ... GfsOutputPPM { step = 0.02 } tracer.ppm { min = 0 max = 1 v = T } GfsOutputSimulation { step = 0.1 } half-cylinder-%3.1f.gfs { variables = U,V,P,T } ... } GfsBox { left = GfsBoundary { GfsBcDirichlet U 1 GfsBcDirichlet V 0 GfsBcDirichlet T { return y > 0. ? 1. : 0.; } } } ... \end{verbatim} which will inject tracer {\tt T} at the inlet only in the upper half of the channel. The adaptive refinement algorithm shoud also take your tracer into account. Try this \begin{verbatim} ... GfsAdaptVorticity { istep = 1 } { maxlevel = 7 cmax = 1e-2 } GfsAdaptGradient { istep = 1 } { maxlevel = 7 cmax = 1e-2 } T ... \end{verbatim} which will adapt using both the gradient of tracer {\tt T} and the vorticity. You can have any number of tracers you want, they are dynamically allocated. \subsection{Adding diffusion terms} Up to now, we have only considered inviscid, incompressible flows. Without going into the details, this type of problems require the solution of two main subproblems: solving a Poisson equation for the pressure and an advection equation for the momentum and tracers with the corresponding boundary conditions. Gerris can also solve a third class of subproblems: diffusion equations. Diffusion equations are similar to Poisson equations (they both involve Laplacian operators) and can be solved efficiently using the same multigrid solver we use for the pressure. In practice adding diffusion to a given tracer is as simple as adding: \begin{verbatim} ... GfsSourceDiffusion {} T 0.01 ... \end{verbatim} to the parameter file, where 0.01 is the value of the diffusion coefficient. \subsubsection{\label{diffusionbc}Boundary conditions for diffusion terms} What if we want to modify the tracer example above so that now the half-cylinder itself is a (diffusive) source of tracer rather than the inlet? We need to be able to impose this boundary condition on the embedded solid surface. On embedded solids, the default boundary conditions for the diffusion equation is Neumann (zero flux) for tracers and Dirichlet (no-slip) for the velocity components. To change that use \begin{verbatim} ... GfsVariableTracer T GfsSourceDiffusion {} T 0.001 GfsSurfaceBc T Dirichlet 1 ... \end{verbatim} and change the inlet boundary condition back to \begin{verbatim} ... GfsBox { left = GfsBoundary { GfsBcDirichlet U 1 GfsBcDirichlet V 0 } } ... \end{verbatim} \subsection{Outputs} \subsection{Boundary conditions} \section{Running Gerris in parallel} \section{Learning more} While this tutorial should give you a good overview of Gerris, it is by no means a complete description. To learn more you should first consult the \htmladdnormallinkfoot{Gerris Frequently Asked Questions}{\gfsweb/wiki/index.php/FAQ} and the \htmladdnormallinkfoot{Gerris object hierarchy}{\gfsweb/wiki/index.php/Object\_hierarchy} which describes each object and the corresponding file parameters in more detail. You should also have a look at the \htmladdnormallinkfoot{Gerris Examples}{\gfsweb/examples/examples} page for examples of how to use Gerris for a range of problems. The parameter files are cross-linked with the reference manual. Another source of more advanced examples is the \htmladdnormallinkfoot{Gerris test suite}{\gfsweb/tests/tests/index.html}. If things are still unclear you can ask for help on the \htmladdnormallinkfoot{{\tt gfs-users} mailing list}{\gfsweb/mailinglists.html}. Please note that you first need to subscribe to the list to be able to post messages. \section{Do you want to help?} The idea behind Gerris and other free software projects is that transparency, free exchange of information and cooperation benefit individuals but also society as a whole. If you are a scientist, you know that these same principles are also keys to the efficiency of Science. Helping with Gerris development can be done in various ways and aside from giving you this altruistic, warm fuzzy feeling of helping others will also benefit you directly. A few concrete simple ways of helping are (in approximate order of difficulty): \begin{itemize} \item Use the code, comment on the problems you find, what you like, don't like about it. \item Share your results with other Gerris users, write a web page about the problem you solved using Gerris etc\dots \item If you publish papers using Gerris, send me the reference. It is very useful to be able to show evidence of wider usage when seeking continued funding for the project. \item Also, if Gerris capabilities are central to your article feel free to ask me to be a co-author on your paper\dots \item Have a look at the Gerris internals (write your own modules) and share them with us. \item Think of ways to extend Gerris for your own problems, implement them and share them with us (you can count on my and other developers' help). \end{itemize} \end{document} gerris-snapshot-131206/doc/Makefile.am0000644000175100017510000000214412250371171014464 00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = tutorial examples manpages EXTRA_DIST = figures share doxy.conf gerris.bib noinst_PROGRAMS = autoclass INCLUDES = -I$(top_srcdir)/src -I$(includedir) -DG_LOG_DOMAIN=\"Gfs-tools\"\ $(GTS_CFLAGS) autoclass: autoclass.c $(top_srcdir)/src/init.c $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(INCLUDES) -DFTT_2D=1 \ autoclass.c -o autoclass $(GFS2D_LIBS) reference: Makefile.am autoclass share/autoclass.sh share/doxfilter share/renamemodules doxy.conf sh share/autoclass.sh | sort -k2,3 | ./autoclass > hierarchy.c @chmod +x share/doxfilter doxygen doxy.conf 2>&1 | grep -v 'explicit link request to .* could not be resolved' > doxy.log cd reference && sh ../share/renamemodules if grep [wW]arning doxy.log; then exit 1; fi publish: reference tar czf reference.tgz reference mv -f reference.tgz $(WEBROOT) cd $(WEBROOT) && tar xzf reference.tgz && rm -f reference.tgz Makefile.deps: Makefile.am ../src/Makefile.am ls ../src/*.[ch] | awk 'BEGIN{print "reference: \\"}{ print "\t" $$1 " \\"}' > Makefile.deps -include Makefile.deps gerris-snapshot-131206/doc/examples/0000755000175100017510000000000012250371674014335 500000000000000gerris-snapshot-131206/doc/examples/template.tex0000644000175100017510000001236612250371171016612 00000000000000\documentclass[a4paper]{article} \usepackage{hevea} \usepackage{color} \usepackage{graphicx} \usepackage{gfs} \oddsidemargin=4mm \evensidemargin=-1mm \topmargin=-7mm \textwidth=15.42cm \textheight=23.2cm \renewcommand{\cuttingunit}{subsection} \title{Gerris examples} \begin{document} \mbox{}\vspace{1cm} \begin{center} {\huge Gerris examples}\\ {\large Version GFS_VERSION\\ \vspace{5mm} \today} \vspace{1cm} \end{center} \tableofcontents \section{Introduction} This document is a collection of examples contributed by Gerris users and intended to illustrate the range of applications where Gerris is applicable. It should also serve as a useful starting point for customised applications. The sections in this document are a rough classification of the various applications. In particular, an example appearing in a subsection usually indicates that this example is a relatively small incremental change over the parent example appearing in the section above it. Gerris parameter files are commented and cross-linked with the \htmladdnormallinkfoot{Object Hierarchy}{\gfsweb/wiki/index.php/Object\_hierarchy} documentation. As a rule, the first examples in the document contain comments for most of the instructions in the parameter file. Latter examples only contain comments for the relevant new instructions or for more complex usage of already introduced instructions. The indicative running times given are representative of the running time on an Intel 2.4 GHz processor. The usefulness and quality of this document very much depend on the contributions of users. If you think you have used Gerris in an interesting way which is not already covered by the existing examples, you are very welcome to contribute. Have a look at section \ref{howto} for instructions on how to do so. \section{2D} \test{cylinder} \test{cylinder/heated} \test{cylinder/parallel} \test{rt} \test{boussinesq} \test{logo} \test{column} \test{starting} \test{viscmix} \test{bubble} \section{3D} \test{tangaroa} \test{plateau} \test{atomisation} \test{ship} \test{forcedturbulence} \test{wingtip} \section{Shallow-water} \test{tides} \section{Saint-Venant (non-linear shallow-water)} \test{dam} \test{hump} \test{shock} \test{monai} \test{tsunami} \section{Waves} \test{garden} \test{cyclone} \section{\label{howto}How to write examples} This document is generated automatically using self-documenting Gerris parameter files. If you look at \htmladdnormallinkfoot{any}{cylinder/cylinder.gfs} of the {\tt .gfs} files in this document you will see that apart from comments on specific instructions, the top of the file contains fields which describe the simulation. They are: \begin{description} \item[Title:] the title of the simulation. \item[Description:] a Latex block of text describing the simulation. It can contain figures, tables, equations etc\dots \item[Author:] you. \item[Command:] the exact command needed to run the example. \item[Version:] the version of Gerris you used (output of {\tt gerris2D -V}). \item[Required files:] any file (e.g. GTS files etc\dots) other than the Gerris simulation file required to run the simulation. Try to keep the total size of these files reasonable. \item[Running time:] the approximate total running time of the simulation. This is of course machine-dependent but must be appropriately scaled to be representative of the running time on an Intel 2.4 GHz processor. \item[Generated files:] any file (movies, images, curves etc\dots) generated by the simulation. \end{description} Apart from the ``Description:'' field all the fields must fit on a single line just after the field name. Any extra data you need for the description (e.g. figures as EPS files) must be generated by the simulation. Have a look at other examples to see how this can be done. Once you have an initial draft for your documented parameter file, you need to package it like this: \begin{enumerate} \item Choose a short name for your example. This short name should not already be used by any of the examples in this document. Let's say {\tt myexample}. \item Create a directory {\tt myexample}. \item Copy your parameter file in {\tt myexample/myexample.gfs}. You must use the same name for the directory and the parameter file. \item Copy any other file you need (as listed in the ``Required files:'' field) in {\tt myexample}. \item Cd to {\tt myexample} and re-run the simulation (using the command listed in the ``Command:'' field) or alternatively copy the previously generated files listed in the ``Generated files:'' field into {\tt myexample}. \item Cd to {\tt myexample/..} \item\label{gendoc} Generate the HTML and PDF documentation for your example using: \begin{verbatim} % gfs2doc myexample \end{verbatim} Note that this script requires \footahref{http://pauillac.inria.fr/\~maranget/hevea/index.html}{hevea}. \item Check that the {\tt myexample\_html/index.html} and {\tt myexample.pdf} files are to your liking. If they are not, edit your parameter file and return to \ref{gendoc}. \item Send me ({\tt s.popinet at gmail.com}) your example ({\tt myexample.tgz} as an attachment). Tell me which section, subsection you think it would most naturally fit in (or request a new section). I will then review it and integrate it in this document. \end{enumerate} \bibliographystyle{plain} \bibliography{gerris} \end{document} gerris-snapshot-131206/doc/examples/tangaroa.sh0000755000175100017510000000003312250371664016403 00000000000000python -u test.py tangaroa gerris-snapshot-131206/doc/examples/bubble/0000755000175100017510000000000012250371674015570 500000000000000gerris-snapshot-131206/doc/examples/bubble/cap/0000755000175100017510000000000012250371674016333 500000000000000gerris-snapshot-131206/doc/examples/bubble/cap/bubble.sh0000644000175100017510000000124712250371171020036 00000000000000#!/bin/bash set -e disable_hypre() { ## comment out hypre perl -wpl -i -e 's/^(\s*)(GModule hypre)/$1#$2/' $1 } enable_hypre() { ## uncomment hypre (if commented) perl -wpl -i -e 's/#(GModule hypre)/$1/' $1 } NP=4 CASEFILE=${1} [ -f "${CASEFILE}" ] || { echo "${CASEFILE} does not exist" exit 1 } ## if the hypre module is unavailable ## is there a way to automatically check whether hypre is available? #disable_hypre ${CASEFILE} ## otherwise enable_hypre ${CASEFILE} SPLITFILE="${CASEFILE%.gfs}-split.gfs" gerris2D --split=3 -m ${CASEFILE} | gerris2D --partition=2 - > ${SPLITFILE} mpirun -np $NP gerris2D ${SPLITFILE} | gfsview-batch2D bubble.gfv rm ${SPLITFILE} gerris-snapshot-131206/doc/examples/bubble/cap/cap.gfs0000644000175100017510000000620012250371171017505 00000000000000# Title: Spherical cap bubble # # Description: # # We now take Ar = 80 and Bo = 40. For these values, the bubble's shape is # that of a spherical cap, for which the terminal velocity is given # approximately as: # \begin{equation} # \frac{U}{U_c} = 0.71\left[ 1-\frac{\rho_b}{\rho_f} \right]^{1/2} # \approx 0.71. # \end{equation} # The characteristic velocity is $U_c = \sqrt{g D}$ and the characteristic # time is $t_c = D/U_c$. # \begin{figure}\centering # \includegraphics{vel.eps} # \end{figure} # # Author: Dustin Langewisch # Command: bash bubble.sh cap.gfs # Version: 130112 # Required files: bubble.sh bubble.gfv # Running time: 7 min (4 processors) # Generated files: vel.eps ## Density Ratio (rho_f / rho_v) Define RHOR 1000.0 ## ## Viscosity Ratio (mu_f / mu_v) Define MUR 100.0 ## ## Archimedes Number Define Ar 80.0 ## ## Bond Number Define Bo 40.0 ## ## Domain half-width (WIDTH*Diameter) Define WIDTH 6.0 ## ## Min/Max Refinement levels Define MINLEVEL 4 Define MIDLEVEL (MINLEVEL+2) Define MAXLEVEL (MIDLEVEL+2) Define VAR(T,min,max) (min + CLAMP(T,0,1)*(max-min)) ## ## Density Define RHO(T) VAR(T,1.0,1.0/RHOR) ## ## Viscosity (harmonic mean) Define MUHARM(T) 1.0/VAR(T,1.0,MUR) Define MAXTIME 35 8 7 GfsAxi GfsBox GfsGEdge { x = -1.0 } { Time { end = MAXTIME } PhysicalParams { L = WIDTH } GModule hypre Refine 6 VariableTracerVOFHeight T VariableFiltered T1 T 1 VariableCurvature K T Kmax InitFraction T ( -(x*x)-(y*y)+(.25) ) PhysicalParams { alpha = 1.0/RHO(T1) } Source {} U -1.0 SourceViscosity MUHARM(T1)/Ar SourceTension T 1.0/Bo K AdaptGradient { istep = 1 } { maxlevel = MAXLEVEL minlevel = MINLEVEL cmax = 1e-2 } T1 AdaptVorticity { istep = 1 } { maxlevel = MIDLEVEL minlevel = MINLEVEL cmax = 1e-2 cfactor = 1 } EventBalance { istep = 10 } 0.1 OutputProjectionStats { istep = 10 } stderr OutputDiffusionStats { istep = 10 } stderr OutputBalance { istep = 10 } stderr OutputTime { istep = 10 } stderr ## compute bubble volume (needed to compute centroid) SpatialSum { step = .1 } bubble_volume T ## write bubble position and velocity OutputScalarSum { step = .1 } { awk '{ if (NR == 1) { ## analytical solution (terminal velocity) uex = 0.71 print $3, $5, 0.0, uex; } else { print (t+$3)/2., $5, ($5-x)/($3-t), uex; } t = $3; x = $5; fflush(stdout) }' > xv } { v = x*T/bubble_volume } OutputSimulation { istep = 10 } stdout GfsEventScript { start = end } { gnuplot <<- EOF set key bottom right set xlabel "time" set ylabel "velocity" set term postscript eps lw 3 solid 20 colour set output "vel.eps" plot 'xv' u 1:3 title "computed", \ '' u 1:4 w l title "analytical approx." EOF } } GfsBox { bottom = Boundary } GfsBox { bottom = Boundary } GfsBox { bottom = Boundary } GfsBox { bottom = Boundary } GfsBox { bottom = Boundary } GfsBox { bottom = Boundary } GfsBox { bottom = Boundary } GfsBox { bottom = Boundary } 1 2 right 2 3 right 3 4 right 4 5 right 5 6 right 6 7 right 7 8 right gerris-snapshot-131206/doc/examples/bubble/cap/bubble.gfv0000644000175100017510000000306612250371171020207 00000000000000# GfsView 2D View { # translate view-point #tx = -0.0191584 ty = -0.503865 tx = 0 ty = 0 # Unit scaling in x,y, and z directions sx = 1 sy = 1 sz = 1 # Rotate view 90 degrees q0 = 0 q1 = 0 q2 = -0.707107 q3 = 0.707107 # fov determines, inversely, the zoom factor # a larger value indicates a view from further away #fov = 3.57276 fov = 10. # background color r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } # # Show Cells # Cells { r = 0.499992 g = 0.499992 b = 0.499992 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } # # Show interface # VOF { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 4 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } T { reversed = 0 use_scalar = 0 draw_edges = 0 interpolate = 0 } # # Reflect across x-axis (r-axis): # Symmetry { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 1 n.z = 0 pos = 0 } # # # Levels { r = 0.35 g = 0.35 b = 0.35 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 3 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } # # # Linear { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Velocity { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } gerris-snapshot-131206/doc/examples/bubble/bubble.sh0000644000175100017510000000124712250371171017273 00000000000000#!/bin/bash set -e disable_hypre() { ## comment out hypre perl -wpl -i -e 's/^(\s*)(GModule hypre)/$1#$2/' $1 } enable_hypre() { ## uncomment hypre (if commented) perl -wpl -i -e 's/#(GModule hypre)/$1/' $1 } NP=4 CASEFILE=${1} [ -f "${CASEFILE}" ] || { echo "${CASEFILE} does not exist" exit 1 } ## if the hypre module is unavailable ## is there a way to automatically check whether hypre is available? #disable_hypre ${CASEFILE} ## otherwise enable_hypre ${CASEFILE} SPLITFILE="${CASEFILE%.gfs}-split.gfs" gerris2D --split=3 -m ${CASEFILE} | gerris2D --partition=2 - > ${SPLITFILE} mpirun -np $NP gerris2D ${SPLITFILE} | gfsview-batch2D bubble.gfv rm ${SPLITFILE} gerris-snapshot-131206/doc/examples/bubble/bubble.gfv0000644000175100017510000000306612250371171017444 00000000000000# GfsView 2D View { # translate view-point #tx = -0.0191584 ty = -0.503865 tx = 0 ty = 0 # Unit scaling in x,y, and z directions sx = 1 sy = 1 sz = 1 # Rotate view 90 degrees q0 = 0 q1 = 0 q2 = -0.707107 q3 = 0.707107 # fov determines, inversely, the zoom factor # a larger value indicates a view from further away #fov = 3.57276 fov = 10. # background color r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } # # Show Cells # Cells { r = 0.499992 g = 0.499992 b = 0.499992 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } # # Show interface # VOF { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 4 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } T { reversed = 0 use_scalar = 0 draw_edges = 0 interpolate = 0 } # # Reflect across x-axis (r-axis): # Symmetry { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 1 n.z = 0 pos = 0 } # # # Levels { r = 0.35 g = 0.35 b = 0.35 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 3 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } # # # Linear { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 line_width = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Velocity { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } gerris-snapshot-131206/doc/examples/bubble/bubble.gfs0000644000175100017510000000737612250371171017451 00000000000000# Title: Spherical bubble rise in a quiescent bath # # Description: # # Simulates a bubble rising in a quiescent liquid. The density and viscosity # ratios are given, respectively, by $\frac{\rho_f}{\rho_b}=1000$ and # $\frac{\mu_f}{\mu_b}=100$. The bubble velocity is, in general, a # function of the Archimedes number, defined as: # \begin{equation} # \mathrm{Ar} := \frac{\rho_f \sqrt{g D^3}}{\mu_f}, # \end{equation} # and the bubble shape is a function of both the Archimedes number and the # Bond number (also known as the E\"otvos number), defined as: # \begin{equation} # \mathrm{Bo} = \frac{\rho_f g D^2}{\sigma}. # \end{equation} # We take Ar = 1 and Bo = 5. For these values, the bubble's shape remains # approximately spherical. The terminal velocity can then be determined # analytically from the Hadamard-Rybczynski equation: # \begin{equation} # \frac{U}{U_c} = \frac{\mathrm{Ar}}{18} # \left(1- \frac{\rho_b}{\rho_f}\right) # \left[ \frac{1+\frac{\mu_f}{\mu_b}}{1+\frac23\frac{\mu_f}{\mu_b}} # \right] # \end{equation} # The characteristic velocity is $U_c = \sqrt{g D}$ and the characteristic # time is $t_c = D/U_c$. # \begin{figure} # \includegraphics{vel.eps} # \end{figure} # # Author: Dustin Langewisch # Command: bash bubble.sh bubble.gfs # Version: 130112 # Required files: bubble.sh bubble.gfv # Running time: 2 min (4 processors) # Generated files: vel.eps ## Density Ratio (rho_f / rho_v) Define RHOR 1000.0 ## ## Viscosity Ratio (mu_f / mu_v) Define MUR 100.0 ## ## Archimedes Number Define Ar 1.0 ## ## Bond Number Define Bo 5.0 ## ## Domain half-width (WIDTH*Diameter) Define WIDTH 6.0 ## ## Min/Max Refinement levels Define MINLEVEL 4 Define MIDLEVEL (MINLEVEL+2) Define MAXLEVEL (MIDLEVEL+2) Define VAR(T,min,max) (min + CLAMP(T,0,1)*(max-min)) ## ## density Define RHO(T) VAR(T,1.0,1.0/RHOR) ## ## viscosity (harmonic mean) Define MUHARM(T) 1.0/VAR(T,1.0,MUR) Define MAXTIME 10.0 2 1 GfsAxi GfsBox GfsGEdge { x = -.25 } { Time { end = MAXTIME } PhysicalParams { L = WIDTH } Refine 6 ## According to my tests, this case runs significantly faster with ## the hypre module enabled. GModule hypre VariableTracerVOFHeight T VariableFiltered T1 T 1 VariableCurvature K T Kmax InitFraction T ( -(x*x)-(y*y)+(.25) ) PhysicalParams { alpha = 1.0/RHO(T1) } Source {} U -1.0 SourceViscosity MUHARM(T1)/Ar SourceTension T 1.0/Bo K AdaptGradient { istep = 1 } { maxlevel = MAXLEVEL minlevel = MINLEVEL cmax = 1e-2 } T1 AdaptVorticity { istep = 1 } { maxlevel = MIDLEVEL minlevel = MINLEVEL cmax = 1e-2 cfactor = 1 } EventBalance { istep = 10 } 0.1 OutputProjectionStats { istep = 10 } stderr OutputDiffusionStats { istep = 10 } stderr OutputBalance { istep = 10 } stderr OutputTime { istep = 10 } stderr ## compute bubble volume (needed to compute centroid) SpatialSum { step = .1 } bubble_volume T ## write bubble position and velocity OutputScalarSum { step = .1 } { awk '{ if (NR == 1) { ## analytical solution (terminal velocity) uex = (1.0+MUR)/(1.0+2.0*MUR/3.0); uex *= (Ar/18.0)*(1.0-1.0/RHOR) print $3, $5, 0.0, uex; } else { print (t+$3)/2., $5, ($5-x)/($3-t), uex; } t = $3; x = $5; fflush(stdout) }' > xv } { v = x*T/bubble_volume } OutputSimulation { istep = 10 } stdout GfsEventScript { start = end } { gnuplot <<- EOF set key bottom right set xlabel "time" set ylabel "velocity" set term postscript eps lw 3 solid 20 colour set output "vel.eps" plot 'xv' u 1:3 title "computed", \ '' u 1:4 w l title "Hadamard-Rybczynski" EOF } } GfsBox { bottom = Boundary } GfsBox { bottom = Boundary } 1 2 right gerris-snapshot-131206/doc/examples/atomisation/0000755000175100017510000000000012250371674016664 500000000000000gerris-snapshot-131206/doc/examples/atomisation/jet.gfv0000644000175100017510000000066612250371171020072 00000000000000# GfsView 3D View { tx = -0.268399 ty = 0.141883 sx = 1 sy = 1 sz = 1 q0 = -0.280401 q1 = 0.348682 q2 = 0.126751 q3 = 0.885286 fov = 10.4626 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } VOF { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } T { reversed = 0 use_scalar = 0 draw_edges = 0 interpolate = 0 } gerris-snapshot-131206/doc/examples/atomisation/atomisation.sh0000644000175100017510000000032012250371171021452 00000000000000# split three times and partition on 4 processors gerris3D -s 3 atomisation.gfs | gerris3D -p2 - > atomisation-s3-p2.gfs # run the parallel simulation mpirun -np 4 gerris3D atomisation-s3-p2.gfs < /dev/null gerris-snapshot-131206/doc/examples/atomisation/atomisation.gfs0000644000175100017510000001071212250371171021625 00000000000000# Title: Atomisation of a pulsed liquid jet # # Description: # # A dense cylindrical liquid jet is injected into a stagnant lighter # phase (density ratio 1/27.84). The inflow velocity is modulated # sinusoidally to promote the growth of primary shear # instabilities. Surface tension is included and ultimately controls # the characteristic scale of the smallest droplets. # # Animations \ref{jet} and \ref{back} illustrate the atomisation process # from two different view points. # # \begin{figure}[htbp] # \caption{\label{jet}Atomisation of a pulsed liquid jet.} # \begin{center} # \video{atomisation/jet}{640}{480} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{back}Atomisation of a pulsed liquid jet.} # \begin{center} # \video{atomisation/back}{640}{480} # \end{center} # \end{figure} # # The simulation and visualisation are computed in parallel on 4 # processors. Dynamic load-balancing is used to distribute the charge # between the processors (Figure \ref{balance}). # # \begin{figure}[htbp] # \caption{\label{balance}Number of cells per processor as a # function of time illustrating the effect of dynamic load-balancing.} # \begin{center} # \includegraphics[width=0.8\hsize]{balance.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh atomisation.sh # Version: 100715 # Required files: atomisation.sh jet.gfv back.gfv # Running time: 2 days on 4 processors # Generated files: jet.ogv back.ogv jet.eps jet.png back.eps back.png balance.eps 3 2 GfsSimulation GfsBox GfsGEdge {} { Global { #define radius 1./12. #define length 0.025 #define level 9 #define Re 5800 #define R2(y,z) ((y)*(y) + (z)*(z)) #define rho(T) (T + 1./27.84*(1. - T)) /* Weber = rhoV^2D/sigma = 5555 */ } Time { end = 1.6 } # Initial refinement of the inlet Refine (x < -0.5 + length && R2(y,z) < 2.*radius*radius ? level : 5) # Define a static field used to enforce the boundary conditions # for volume fraction corresponding to a cylindrical jet Variable T0 InitFraction T0 (radius*radius - R2(y,z)) VariableTracerVOF T VariableCurvature K T Kmax SourceTension T 0.00003 K SourceViscosity 2.*radius/Re*rho(T) PhysicalParams { alpha = 1./rho(T) } # Use constant (maximum) resolution on the interface AdaptFunction { istep = 1 } { minlevel = 0 maxlevel = level } (T > 0 && T < 1) # Initialise a short jet Init {} { T = (x < -0.5 + length ? T0 : 0) U = T } # Dynamic load-balancing EventBalance { istep = 1 } 0.1 OutputTime { istep = 1 } log OutputBalance { istep = 1 } log OutputProjectionStats { istep = 1 } log OutputTiming { istep = 100 } log # Use the gfsview module to generate movies on-the-fly and in parallel GModule gfsview OutputView { step = 4e-3 } { ppm2theora -s 640x480 > jet.ogv } { format = PPM width = 1280 height = 960 } jet.gfv OutputView { step = 4e-3 } { ppm2theora -s 640x480 > back.ogv } { format = PPM width = 1280 height = 960 } back.gfv # Save a (single) snapshot every 100 timesteps EventScript { istep = 100 } { rm -f snapshot-*.gfs } OutputSimulation { istep = 100 } snapshot-%ld.gfs { } # Generate figures OutputView { start = end } jet.ppm { format = PPM width = 1280 height = 960 } jet.gfv OutputView { start = end } back.ppm { format = PPM width = 1280 height = 960 } back.gfv EventScript { start = end } { for f in jet back; do convert $f.ppm -geometry 640x480 $f.png convert $f.png $f.eps rm -f $f.ppm done awk '{if ($1 == "step:") t = $4; else if ($1 == "domain") print t,$3,$5,$9;}' < log > balance cat < sections.mpg # Version: 0.9.2 # Required files: tangaroa.gts sections.gfv # Running time: 7 hours # Generated files: sections.mpg sections.eps # 2 1 GfsSimulation GfsBox GfsGEdge {} { Time { end = 2 } # Insert the solid boundary defined explicitly by the # triangulated surface contained in the GTS file tangaroa.gts Solid tangaroa.gts Refine 5 RefineSolid 9 Init {} { U = 1. } # Adapt only in the first GfsBox. # The coarse resolution of the second box acts as an efficient "sponge" # layer to dampen any eddy before it exits the domain. AdaptVorticity { istep = 1 } { maxlevel = (x < 0.5 ? 8 : 0) cmax = 1e-2 } OutputSolidStats {} stderr OutputTime { istep = 1 } stderr OutputBalance { istep = 1 } stderr OutputProjectionStats { istep = 1 } stderr # Store in SU the integral over time of U # At the end of the simulation SU/(Total integration time) = SU/1. # is the mean velocity EventSum { start = 1 istep = 1 } U SU EventSum { start = 1 istep = 1 } V SV EventSum { start = 1 istep = 1 } W SW # Store in SU the integral over time of U^2 (i.e. the variance) EventSum { start = 1 istep = 1 } U*U SU2 EventSum { start = 1 istep = 1 } V*V SV2 EventSum { start = 1 istep = 1 } W*W SW2 # Output simulation on standard output (to be read and displayed by GfsView) OutputSimulation { istep = 4 } stdout # Sends a command to GfsView to save a 1024x768 PPM image on standard output EventScript { istep = 4 } { echo "Save stdout { width = 1024 height = 768 }" } EventScript { start = 1.5 } { echo "Save sections.ppm { width = 1024 height = 768 }" } EventScript { start = end } { convert -colors 256 sections.ppm sections.eps ; rm -f sections.ppm } OutputSimulation { start = end } simulation-sum { variables = SU,SV,SW,SU2,SV2,SW2 } OutputTiming { start = end } stderr } GfsBox { left = Boundary { BcDirichlet U 1 } } GfsBox { right = Boundary { BcNeumann U 0 BcDirichlet P 0 } } 1 2 right gerris-snapshot-131206/doc/examples/gfs2tex.py0000644000175100017510000001575412250371171016215 00000000000000import sys import os import os.path import re import tempfile def generated(lines): for line in lines: record = line.split() if len(record) > 3 and \ record[0] == "#" and record[1] == "Generated" and record[2] == "files:": return record[3:] return [] class Example: def __init__(self,path): if path[0:2] == "./": path = path[2:] self.path, self.name = os.path.split(path) if self.name == "": self.name = self.path elif self.path == "": self.path = self.name else: self.path += "/" + self.name self.section = ["\\subsection","\\subsubsection"][self.path.count("/")] file = open(self.path + "/" + self.name + ".gfs") lines = file.readlines() self.generated = generated(lines) if os.access(self.path + "/status", os.R_OK): self.status = open(self.path + "/status").readline() self.generated.append("status") else: self.status = None p = re.compile(r"\\label\{[a-zA-Z0-9_\-]*\}") labels = [] for line in lines: for l in re.findall(p,line): labels.append(l[7:-1]) # adds the full path to references to generated files and makes labels absolute lines1 = [] path = self.path.replace("/", "-") for line in lines: for gen in self.generated: line = line.replace("{" + gen + "}", "{" + self.path + "/" + gen + "}") for l in labels: line = line.replace("{" + l + "}", "{" + path + "-" + l + "}") lines1.append(line) lines = lines1 self.title = [] self.description = [] insthg = None for line in lines: record = line.split() if len(record) > 0 and record[0] == "#": if len(record) > 1: if record[1] == "Title:": self.title.append(" ".join(record[2:])) insthg = self.title elif record[1] == "Description:": insthg = self.description elif record[1] == "Required" and record[2] == "files:": self.required = record[3:] insthg = None elif record[1] == "Command:": self.command = " ".join(record[2:]) insthg = None elif record[1] == "Author:": self.author = " ".join(record[2:]) insthg = None elif record[1] == "Running" and record[2] == "time:": self.time = " ".join(record[3:]) insthg = None elif record[1] == "Version:": self.version = " ".join(record[2:]) insthg = None elif not insthg == None: insthg.append(" ".join(record[1:])) elif not insthg == None: insthg.append(" ".join(record[1:])) if os.access(self.path + "/runtime", os.R_OK): self.runtime = float(open(self.path + "/runtime").readline()) self.time = "" m = int(self.runtime/60.) if m > 0: self.time += repr(m) + " minutes" s = int(self.runtime-60.*m) if s > 0: self.time += " " + repr(s) + " seconds" self.generated.append("runtime") else: self.runtime = None def write(self,file=None,style=""): if file == None: file = open(self.path + "/" + self.name + ".tex", 'w') file.write(self.section + "{\\label{" + self.name + "}") if self.status: file.write(self.status) file.write("\n".join(self.title) + "}\n") if self.section == "\\subsection": file.write("\\cutname{" + self.name + ".html}\n") file.write("\\begin{description}\n") file.write("\\item[Author]" + self.author + "\n") file.write("\\item[Command]" + "{\\tt " + self.command.replace('&',r'\&') + "}\n") file.write("\\item[Version]" + self.version + "\n") f = self.name + ".gfs" required = " " + f + \ " \\htmladdnormallinkfoot{(view)}{" + self.path + "/" + f + ".html}" +\ " \\htmladdnormallinkfoot{(download)}{" + self.path + "/" + f + "}\\\\" for f in self.required: required += " \\htmladdnormallinkfoot{" + f + "}{" + self.path + "/" + f + "}" file.write("\\item[Required files]" + required + "\n") file.write("\\item[Running time]" + self.time + "\n") file.write("\\end{description}\n") file.write("\n".join(self.description)) self.colorize(style) def colorize(self,style=""): basename = self.path + "/" + self.name if style != "": style = " --css=" + ["../","../../"][self.path.count("/")] + style os.system("gfs-highlight " + \ "--title=" + self.name + ".gfs" + style + \ " < " + basename + ".gfs > " + basename + ".gfs.html") def test(self): wdname = tempfile.mkdtemp() path = os.getcwd() + "/" + self.path + "/" files = path + self.name + ".gfs" for f in self.required: files += " " + path + f command = self.command for v in ["2D","3D"]: command = command.replace("gfsview" + v, "gfsview-batch" + v) out = os.popen("cd " + wdname + " && " +\ "mkdir test && cd test && " +\ "cp -f " + files + " . && " +\ "awk '{ if ($1 == \"Time\" || $1 == \"GfsTime\")" +\ " print $0 \"\\nTime { iend = 1 }\";" + "else print $0;" "}' < " + self.name + ".gfs > " + self.name + ".tmp && " +\ "mv -f " + self.name + ".tmp " + self.name + ".gfs && ( " +\ "bash -c \" set -o pipefail && " + command + "\" ) 2>&1") lines = out.readlines() status = out.close() os.system("rm -r -f " + wdname) if status != None: return status,lines else: return None,None def run(self,env=""): out = os.popen("cd " + self.path + " && ( time -p " +\ " bash -c \" set -o pipefail && " + env + " " + self.command + "\" ) 2>&1") lines = [] for l in out: record = l.split() if len(record) > 0: if record[0] == "user": self.runtime = float(record[1]) print >>open(self.path + "/runtime",'w'), self.runtime elif record[0] != "real" and record[0] != "sys": lines.append(l) else: lines.append(l) status = out.close() if status != None: return status,lines else: return None,None gerris-snapshot-131206/doc/examples/garden/0000755000175100017510000000000012250371675015576 500000000000000gerris-snapshot-131206/doc/examples/garden/garden.sh0000644000175100017510000000432412250371171017304 00000000000000#!/bin/sh if gerris2D -DMINLEVEL=6 -DNTHETA=24 garden.gfs && gerris2D -DMINLEVEL=0 -DNTHETA=24 garden.gfs && gerris2D -DMINLEVEL=0 -DNTHETA=60 garden.gfs && gerris2D -DMINLEVEL=0 -DNTHETA=120 garden.gfs; then : else exit 1 fi for i in 6-24 0-24 0-60 0-120; do echo "Save end-$i.gnu { format = Gnuplot }" | gfsview-batch2D end-$i.gfs.gz end.gfv done for i in 0 24 72 120; do echo "Save mesh-$i.gnu { format = Gnuplot }" | gfsview-batch2D sim-0-120-$i.gfs.gz mesh.gfv done cat < cpu.tex \\begin{tabular}{c|c|c} Adaptivity & \\# directions & CPU time (seconds)\\\\\\hline No & 24 & $cpu_6_24 \\\\ Yes & 24 & $cpu_0_24 \\\\ Yes & 60 & $cpu_0_60 \\\\ Yes & 120 & $cpu_0_120 \\end{tabular} EOF gerris-snapshot-131206/doc/examples/garden/garden.gfs0000644000175100017510000001062512250371171017452 00000000000000# Title: "Garden sprinkler effect" in wave model # # Description: # # The wave model is used to reproduce the classical "Garden Sprinkler # Effect" (GSE), a numerical artifact of the discrete directions of # wave propagation (see Tolman, 2002). # # A spatially-Gaussian wave spectrum is initialised in a 5000 # km-squared domain. The other parameters are those of Tolman, 2002. # # The final (t = 5 days) significant wave height for different model # runs is illustrated in Figure \ref{end}. The interval between the # isolines is 0.1 metres as in Figure 1 of Tolman, 2002. For a small # number of discrete directions (24), the GSE is evident and the # results closely match those of Tolman both for the constant # resolution and the adaptive version of the code. For larger number # of directions (60 and 120), the results do not show any obvious GSE # and match the corresponding results of Tolman (Figure 1.b of Tolman, # 2002 but note that the spatial resolution of Tolman is finer, 25 km # rather than 78 km here). # # \begin{figure}[htbp] # \caption{\label{end}Final (t = 5 days) significant wave height for # different model runs.} # \begin{center} # \includegraphics[width=\hsize]{end.eps} # \end{center} # \end{figure} # # The evolution in time of the significant wave height together with # the corresponding adaptive discretisation is illustrated in Figure # \ref{mesh} for 120 directions. The mesh is adapted according to the # spatial gradient in the significant wave height. This results in # substantial savings in computational cost as illustrated by the # timings given in Table \ref{cpu}. The computational cost with 120 # directions is comparable to the cost with 24 directions on a regular # (i.e. non-adaptive) mesh. This demonstrates that the GSE can be # alleviated -- at comparable computational cost -- by combining # adaptive refinement with a refined discretisation in direction # space. # # \begin{figure}[htbp] # \caption{\label{mesh}Evolution of the significant wave height and # adaptive mesh. 120 directions.} # \begin{center} # \includegraphics[width=\hsize]{mesh.eps} # \end{center} # \end{figure} # # \begin{table}[htbp] # \caption{\label{cpu}CPU time for the four models of Figure \ref{end}.} # \begin{center} # \input{cpu.tex} # \end{center} # \end{table} # # Author: St\'ephane Popinet # Command: sh garden.sh # Version: 1.2.1 # Required files: garden.sh end.gfv mesh.gfv # Running time: 41 minutes # Generated files: end.eps mesh.eps cpu.tex # 1 0 GfsWave GfsBox GfsGEdge {} { Refine 6 # Default time units for wave model is hours # 120 hours = 5 days Time { end = 120 } # Default length units for wave model is km PhysicalParams { L = 5000 } # Define some useful functions Global { /* gaussian distribution */ static double gaussian (double f, double fmean, double fsigma) { return exp (-((f - fmean)*(f - fmean))/(2.*fsigma*fsigma)); } /* cos(theta)^n distribution */ static double costheta (double theta, double thetam, double thetapower) { double a = cos (theta - thetam); return a > 0. ? pow (a, thetapower) : 0.; } } # Initialise the wave spectrum InitWave {} { /* This function defines the spectral distribution: * a gaussian in frequency space and * a cos(theta)^2 distribution in direction space */ return gaussian (Frequency, 0.1, 0.02)* costheta (Direction, 30.*M_PI/180., 2.); } { /* This function defines the significant wave height: * the energy is a gaussian bump in (x,y) space, * the maximum significant wave height is 2.5 */ x -= -2000.; y -= -2000.; double Hsmax = 2.5; double E = (Hsmax*Hsmax/16.)*gaussian (sqrt (x*x + y*y), 0., 150.); return 4.*sqrt (E); } AdaptGradient { istep = 1 } { cmax = 0.04 minlevel = MINLEVEL maxlevel = 6 } Hs OutputTime { istep = 1 } log-MINLEVEL-NTHETA OutputScalarStats { step = 12 } hs-MINLEVEL-NTHETA { v = Hs } OutputSimulation { step = 12 } sim-MINLEVEL-NTHETA-%g.gfs EventScript { step = 12 } { gzip -f sim-*-*-*.gfs } OutputSimulation { start = end } end-MINLEVEL-NTHETA.gfs EventScript { start = end } { gzip -f end-*-*.gfs } OutputPPM { step = 12 } { ppm2mpeg > hs-MINLEVEL-NTHETA.mpg } { v = Hs maxlevel = 7 } } { # Number of discretised directions (default is 24) ntheta = NTHETA } GfsBox {} gerris-snapshot-131206/doc/examples/garden/mesh.gfv0000644000175100017510000000074312250371171017151 00000000000000# GfsView 2D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 24.9119 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Hs { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 7 } Cells { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } gerris-snapshot-131206/doc/examples/garden/end.gfv0000644000175100017510000000063612250371171016764 00000000000000# GfsView 2D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 24.9119 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Hs { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 0 levels = .1,.2,.3,.4,.5,.6,.7,.8,.9,1 } gerris-snapshot-131206/doc/examples/logo/0000755000175100017510000000000012250371674015275 500000000000000gerris-snapshot-131206/doc/examples/logo/logo.gfv0000644000175100017510000000114212250371171016647 00000000000000# GfsView 2D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 1.37889 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 1 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Vorticity { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 0 levels = 0.555 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Vorticity > 0.55 ? Vorticity : 0.55 { amin = 0 min = -0.1348 amax = 0 max = 6.22219 cmap = Jet } gerris-snapshot-131206/doc/examples/logo/logo.gfs0000644000175100017510000000447312250371171016656 00000000000000# Title: Coalescence of a pair of Gaussian vortices (Gerris logo) # # Description: # # This example generates the Gerris desktop logo (Figure \ref{logo}). # # A pair of Gaussian vortices slowly merge. This is the primary # mechanism controlling the evolution of two-dimensional turbulence # and consequently has been studied in some detail. # # \begin{figure}[htbp] # \caption{\label{logo}Gerris logo and animation.} # \begin{center} # \htmladdnormallinkfoot{\includegraphics[width=0.15\hsize]{logo.eps}}{logo.mpg} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: gerris2D logo.gfs | gfsview2D logo.gfv # Required files: logo.gfv # Version: 100317 # Running time: 5 minutes # Generated files: logo.mpg logo.png logo.eps # 1 0 GfsSimulation GfsBox GfsGEdge {} { Time { end = 4 } Refine 6 # Initialise a vorticity field given by two gaussian distributions InitVorticity {} { /* We use nested functions for simplicity (this will not work on MACOSX) */ double vortex (double xc, double yc, double r) { double r2 = (x - xc)*(x - xc) + (y - yc)*(y - yc); return 2.*M_PI*exp (- 2.*r2/(r*r)); } double r = 0.01, theta = 30.*M_PI/180.; return vortex (-r*sin(theta), r*cos(theta), 0.01) + vortex (r*sin(theta), -r*cos(theta), 0.01); } AdaptVorticity { istep = 1 } { cmax = 1e-2 maxlevel = 12 minlevel = 6 } OutputTime { istep = 1 } stderr OutputProjectionStats { istep = 1 } stderr OutputSimulation { istep = 10 } stdout OutputPPM { istep = 2 } { ppm2mpeg > logo.mpg } { v = Vorticity min = -0.1348 max = 6.22219 # Only generate the movie in a small box centered on the # origin. We also need to make sure that box size is a multiple # of 1./64. so that the PPM image size stays constant (ffmpeg # crashes on variable image sizes). condition = (Level < 6 || (x >= -3./128. && x <= 3./128. && y >= -3./128. && y <= 3./128.)) } EventScript { start = end } { echo "Save logo.ppm { width = 1024 height = 1024 }" sleep 5 # to wait for GfsView to finish writing the image convert -transparent "#0000FF" logo.ppm -geometry 156x156 logo.png montage -background white -geometry +0+0 logo.png logo.eps rm -f logo.ppm } } GfsBox {} gerris-snapshot-131206/doc/examples/column.sh0000755000175100017510000000003112250371664016102 00000000000000python -u test.py column gerris-snapshot-131206/doc/examples/gfs-mode.el0000644000175100017510000001117412250371171016274 00000000000000;;; gfs-mode.el ;;; Copyright: (C) 2010 Stephane Popinet ;; ;; 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 2 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 GNU Emacs; if not, write to the Free Software ;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ;; 02110-1301 USA ;; ;; To use this package, you can save this file somewhere in your ;; load-path and put the following in your .emacs at a minimum: ;; ;; (require 'gfs-mode) (define-derived-mode gfs-mode shell-script-mode "Gerris" "Major mode for editing Gerris simulation files." (require 'gfs-keywords) (defvar gfs-browse-base "http://gfs.sourceforge.net/wiki/index.php/" "First part of URL used to display documentation on the Gerris website.") (defvar gfs-ref-regexp (eval-when-compile (concat "\\<" (regexp-opt gfs-abbrevs t) "\\>")) "Regular expression compiled Gerris keywords.") (defvar gfs-modules-regexp (eval-when-compile (concat "\\<" (regexp-opt gfs-modules t) "\\>")) "Regular expression compiled Gerris modules.") (define-key gfs-mode-map [mouse-2] 'gfs-mode-mouse-2) (define-key gfs-mode-map [follow-link] 'mouse-face) (defun gfs-clickable-refs (limit) "Font-lock function which finds Gerris keywords and makes them clickable." (if (re-search-forward (eval gfs-ref-regexp) limit t) (progn (add-text-properties (match-beginning 0) (match-end 0) (list 'mouse-face 'highlight 'gfs-keyword (match-string 0) 'help-echo "mouse-2: documentation" 'rear-nonsticky '(mouse-face gfs-keyword help-echo))) t))) (defun gfs-clickable-modules (limit) "Font-lock function which finds Gerris modules and makes them clickable." (if (re-search-forward (eval gfs-modules-regexp) limit t) (progn (add-text-properties (match-beginning 0) (match-end 0) (list 'mouse-face 'highlight 'gfs-module (match-string 0) 'help-echo "mouse-2: documentation" 'rear-nonsticky '(mouse-face gfs-module help-echo))) t))) (defun gfs-comments (limit) "Font-lock function which finds Gerris comments." (re-search-forward "#.*$" limit t)) (defconst gfs-font-lock-keywords (list '(gfs-clickable-refs (0 'font-lock-function-name-face t)) '(gfs-clickable-modules (0 'font-lock-type-face t)) '(gfs-comments (0 'font-lock-comment-face t))) "Font-lock-keywords to be added when gfs-mode is active.") (defun gfs-url-create (ref-string module) "Returns REF-STRING without carriage returns and with spaces converted to + signs, useful when creating a URL to lookup on the Gerris website." (with-temp-buffer (insert gfs-browse-base) (if module (progn (insert "Object_hierarchy#") (insert (capitalize ref-string))) (progn (unless (string= (substring ref-string 0 3) "Gfs") (insert "Gfs")) (insert ref-string))) (buffer-string))) (defun gfs-browse-reference (reference &optional module) "Wrapper function to call standard Emacs browser function for REFERENCE." (message "Linking to Gerris website for %s..." reference) (browse-url (gfs-url-create reference module))) (defun gfs-mode-mouse-2 (event arg) "Fetch documentation for keyword under the mouse click." (interactive "e\nP") (let (my-keyword) (save-excursion (set-buffer (window-buffer (posn-window (event-end event)))) (goto-char (posn-point (event-end event))) (setq my-keyword (get-text-property (point) 'gfs-keyword))) (if my-keyword (progn (select-window (posn-window (event-end event))) (gfs-browse-reference my-keyword)) (progn (setq my-keyword (get-text-property (point) 'gfs-module)) (if my-keyword (progn (select-window (posn-window (event-end event))) (gfs-browse-reference my-keyword t)) (mouse-yank-at-click event arg) ))))) (font-lock-add-keywords nil gfs-font-lock-keywords) ;; load keywords for autocompletion with dabbrev (find-file-noselect (locate-file "gfs-keywords.el" load-path) t) (setq case-fold-search nil) (column-number-mode 1) ) (add-to-list 'auto-mode-alist '("\\.gfs\\'" . gfs-mode)) (provide 'gfs-mode) gerris-snapshot-131206/doc/examples/cyclone.sh0000755000175100017510000000003212250371664016242 00000000000000python -u test.py cyclone gerris-snapshot-131206/doc/examples/garden.sh0000755000175100017510000000003112250371664016045 00000000000000python -u test.py garden gerris-snapshot-131206/doc/examples/test.py0000644000175100017510000000130712250371171015577 00000000000000import sys import os import os.path import gfs2tex n = 0 failed = 0 for start in sys.argv[1:]: for root, dirs, files in os.walk(start,topdown=True): if not ".xvpics" in root: example = gfs2tex.Example(root) status,msg = example.test() if status != None: print "FAIL:",root if len(msg) > 0: print " ".join(msg) failed += 1 else: print "PASS:",root n += 1 if failed: msg = repr(failed) + " of " + repr(n) + " tests failed" else: msg = "All " + repr(n) + " tests passed" print len(msg)*"=" print msg print len(msg)*"=" if failed: sys.exit(1) gerris-snapshot-131206/doc/examples/logo.sh0000755000175100017510000000002712250371664015552 00000000000000python -u test.py logo gerris-snapshot-131206/doc/examples/hump/0000755000175100017510000000000012250371675015307 500000000000000gerris-snapshot-131206/doc/examples/hump/hump.gfv0000644000175100017510000000113712250371171016675 00000000000000# GfsView 2D View { tx = -1.12721 ty = 0.409038 sx = 1 sy = 1 sz = 1 q0 = 0.44512 q1 = 0.14796 q2 = 0.310734 q3 = 0.826693 fov = 16.0939 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Linear { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } (P+Zb-1)*20 { reversed = 0 use_scalar = 0 } Linear { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } Zb { amin = 1 amax = 1 cmap = Jet } Zb/2-0.9 { reversed = 0 use_scalar = 1 } gerris-snapshot-131206/doc/examples/hump/cells.gfv0000644000175100017510000000045112250371171017024 00000000000000# GfsView 2D View { tx = -1.10977 ty = -0.473248 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 17.1233 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Cells { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } gerris-snapshot-131206/doc/examples/hump/isolines.gfv0000644000175100017510000000072212250371171017550 00000000000000# GfsView 2D View { tx = -1.10977 ty = -0.473248 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 17.1233 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P+Zb { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 30 } Boundaries { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } gerris-snapshot-131206/doc/examples/hump/hump.gfs0000644000175100017510000000774712250371171016707 00000000000000# Title: Small amplitude solitary wave interacting with a parabolic hump # # Description: # # This test case was proposed by LeVeque (JCP, 1998) as a check for # the accuracy of hydrostatic balance for the Saint-Venant equations # with variable topography. A solitary wave of small amplitude is # generated by an initial discontinuity on the left-hand-side of the # domain and moves past a parabolic hump creating complex focusing and # diffraction (Figure \ref{hump}). Any inaccuracy in hydrostatic # balance will clearly affect the solution given the small amplitude # of the initial perturbation. # # \begin{figure}[htbp] # \caption{\label{hump}Animation of the topography (coloured) and free # surface (white). The vertical scale is exagerated.} # \begin{center} # \htmladdnormallinkfoot{\includegraphics[width=0.6\hsize]{hump.eps}}{hump.mpg} # \end{center} # \end{figure} # # Figure \ref{evolution} illustrates the free surface and # corresponding adaptive mesh evolution. This figure agrees well with # the results reported by # \htmladdnormallinkfoot{LeVeque}{http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.57.5450} # using a non-adaptive high-resolution Godunov method (Figure 7, right # column, note that the resolution of the results by LeVeque is # slightly larger: $600\times 300$ compared to $512\times 256$ here). # # \begin{figure}[htbp] # \caption{\label{evolution}Evolution of the free surface and adaptive mesh.} # \begin{center} # \begin{tabular}{cc} # \includegraphics[width=0.5\hsize]{iso-0.6.eps} & # \includegraphics[width=0.5\hsize]{cells-0.6.eps} \\ # \multicolumn{2}{c}{$t = 0.6$} \\ # \includegraphics[width=0.5\hsize]{iso-0.9.eps} & # \includegraphics[width=0.5\hsize]{cells-0.9.eps} \\ # \multicolumn{2}{c}{$t = 0.9$} \\ # \includegraphics[width=0.5\hsize]{iso-1.2.eps} & # \includegraphics[width=0.5\hsize]{cells-1.2.eps} \\ # \multicolumn{2}{c}{$t = 1.2$} \\ # \includegraphics[width=0.5\hsize]{iso-1.5.eps} & # \includegraphics[width=0.5\hsize]{cells-1.5.eps} \\ # \multicolumn{2}{c}{$t = 1.5$} \\ # \includegraphics[width=0.5\hsize]{iso-1.8.eps} & # \includegraphics[width=0.5\hsize]{cells-1.8.eps} \\ # \multicolumn{2}{c}{$t = 1.8$} # \end{tabular} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: gerris2D hump.gfs | gfsview2D hump.gfv | ppm2mpeg > hump.mpg # Version: 1.3.1 # Required files: hump.gfv isolines.gfv cells.gfv # Running time: 7 minutes # Generated files: cells-0.6.eps cells-1.2.eps cells-1.8.eps iso-0.9.eps iso-1.5.eps cells-0.9.eps cells-1.5.eps iso-0.6.eps iso-1.2.eps iso-1.8.eps hump.eps hump.mpg # # Recenter the reference box on (0.5,0.5) (rather than the default (0,0)) 2 1 GfsRiver GfsBox GfsGEdge { x = 0.5 y = 0.5 } { Refine 8 Init {} { # Parabolic hump Zb = 0.8*exp(-5.*(x - 0.9)*(x - 0.9) - 50.*(y - 0.5)*(y - 0.5)) # Initial free surface and perturbation P = (0.05 < x && x < 0.15 ? 1.01 : 1) - Zb } PhysicalParams { g = 1 } AdvectionParams { cfl = 0.5 } AdaptGradient { istep = 1 } { cmax = 1e-4 cfactor = 2 maxlevel = 8 minlevel = 6 } (P + Zb) Time { end = 1.8 } OutputTime { istep = 10 } stderr OutputSimulation { istep = 10 } stdout EventScript { istep = 10 } { echo "Save stdout { width = 640 height = 480 }" } OutputSimulation { start = 0.6 step = 0.3 } sim-%g.gfs EventScript { start = end } { for i in 0.6 0.9 1.2 1.5 1.8; do echo "Save stdout { format = EPS line_width = 0.2 }" | \ gfsview-batch2D sim-$i.gfs isolines.gfv > iso-$i.eps echo "Save stdout { format = EPS line_width = 0.2 }" | \ gfsview-batch2D sim-$i.gfs cells.gfv > cells-$i.eps done echo "Save stdout { width = 1280 height = 960 }" | \ gfsview-batch2D sim-0.9.gfs hump.gfv | convert ppm:- hump.eps } } # "open" boundary conditions on all boundaries GfsBox { left = Boundary { BcNeumann U 0 } top = Boundary { BcNeumann V 0 } bottom = Boundary { BcNeumann V 0 } } GfsBox { right = Boundary { BcNeumann U 0 } top = Boundary { BcNeumann V 0 } bottom = Boundary { BcNeumann V 0 } } 1 2 right gerris-snapshot-131206/doc/examples/tsunami/0000755000175100017510000000000012250371675016016 500000000000000gerris-snapshot-131206/doc/examples/tsunami/jason.xy0000644000175100017510000001366612250371171017435 0000000000000084.2567368 -5.3499999 0 84.3860397 -5. 0 84.441452 -4.8499999 0 84.4710007 -4.76999998 0 84.5485916 -4.55999994 0 84.6446228 -4.30000019 0 84.7222214 -4.09000015 0 84.7961121 -3.8900001 0 84.8293839 -3.79999995 0 84.8700409 -3.69000006 0 84.9439621 -3.49000001 0 84.9920197 -3.3599999 0 85.069664 -3.1500001 0 85.0918579 -3.08999991 0 85.1177368 -3.01999998 0 85.1362305 -2.97000003 0 85.1658249 -2.8900001 0 85.1880188 -2.82999992 0 85.2176056 -2.75 0 85.2435074 -2.68000007 0 85.3175049 -2.48000002 0 85.3434067 -2.41000009 0 85.3989258 -2.25999999 0 85.4174347 -2.21000004 0 85.4877777 -2.01999998 0 85.5396118 -1.88 0 85.613678 -1.67999995 0 85.6396103 -1.61000001 0 85.6655426 -1.53999996 0 85.713707 -1.40999997 0 85.7396393 -1.34000003 0 85.7655792 -1.26999998 0 85.8137665 -1.13999999 0 85.8656616 -1. 0 85.8841934 -0.949999988 0 85.9138565 -0.870000005 0 85.9398117 -0.800000012 0 85.9620514 -0.74000001 0 86.0362167 -0.540000021 0 86.0881348 -0.400000006 0 86.1141052 -0.330000013 0 86.1363602 -0.270000011 0 86.1474915 -0.239999995 0 86.1675186 -0.186000004 0 86.1897812 -0.126000002 0 86.210556 -0.0700000003 0 86.2365265 0. 0 86.2624969 0.0700000003 0 86.2862396 0.134000003 0 86.2995987 0.170000002 0 86.3367081 0.270000011 0 86.366394 0.349999994 0 86.3849487 0.400000006 0 86.4109192 0.469999999 0 86.4517441 0.579999983 0 86.4777145 0.649999976 0 86.5185394 0.75999999 0 86.5630646 0.879999995 0 86.5853195 0.939999998 0 86.6521149 1.12 0 86.6743851 1.17999995 0 86.69664 1.24000001 0 86.7374573 1.35000002 0 86.7856827 1.48000002 0 86.8301926 1.60000002 0 86.8672867 1.70000005 0 86.8858261 1.75 0 86.9043732 1.79999995 0 86.941452 1.89999998 0 86.9822388 2.00999999 0 87.0230103 2.11999989 0 87.0489578 2.19000006 0 87.0711975 2.25 0 87.1119537 2.3599999 0 87.1341858 2.42000008 0 87.1601181 2.49000001 0 87.1786346 2.53999996 0 87.2008591 2.5999999 0 87.2378845 2.70000005 0 87.2897034 2.83999991 0 87.3340988 2.96000004 0 87.3562927 3.01999998 0 87.3784943 3.07999992 0 87.4450378 3.25999999 0 87.5078506 3.43000007 0 87.5337067 3.5 0 87.5521698 3.54999995 0 87.5743179 3.6099999 0 87.6186066 3.73000002 0 87.6407471 3.78999996 0 87.7070999 3.97000003 0 87.7292099 4.03000021 0 87.773407 4.1500001 0 87.8175812 4.26999998 0 87.8396606 4.32999992 0 87.8617325 4.38999987 0 87.9242172 4.55999994 0 87.9683075 4.67999983 0 87.9903107 4.73999977 0 88.0123367 4.80000019 0 88.0343475 4.86000013 0 88.0563354 4.92000008 0 88.078331 4.98000002 0 88.1003265 5.03999996 0 88.1186295 5.09000015 0 88.1662216 5.21999979 0 88.2100983 5.34000015 0 88.2320251 5.4000001 0 88.2685623 5.5 0 88.2977524 5.57999992 0 88.3159943 5.63000011 0 88.337883 5.69000006 0 88.3597488 5.75 0 88.3816071 5.80999994 0 88.4034576 5.86999989 0 88.4216614 5.92000008 0 88.4507599 6. 0 88.4653168 6.03999996 0 88.4907532 6.11000013 0 88.5125504 6.17000008 0 88.5307083 6.21999979 0 88.5778656 6.3499999 0 88.603241 6.42000008 0 88.6358414 6.51000023 0 88.6539307 6.55999994 0 88.7009659 6.69000006 0 88.7334824 6.78000021 0 88.7623596 6.86000013 0 88.7948151 6.94999981 0 88.8272629 7.03999996 0 88.8596725 7.13000011 0 88.8884583 7.21000004 0 88.9208145 7.30000019 0 88.9531174 7.38999987 0 88.9854126 7.48000002 0 89.0176849 7.57000017 0 89.0463257 7.6500001 0 89.0821228 7.75 0 89.1107101 7.82999992 0 89.1428604 7.92000008 0 89.1749573 8.01000023 0 89.2070465 8.10000038 0 89.2355423 8.18000031 0 89.2604294 8.25 0 89.29953 8.35999966 0 89.3314896 8.44999981 0 89.3953171 8.63000011 0 89.4872742 8.89000034 0 89.5261078 9. 0 89.5824585 9.15999985 0 89.6141434 9.25 0 89.6422729 9.32999992 0 89.6738968 9.42000008 0 89.7054749 9.51000023 0 89.73703 9.60000038 0 89.7685471 9.68999958 0 89.7965469 9.77000046 0 89.8280029 9.85999966 0 89.859436 9.94999981 0 89.9222183 10.1300001 0 89.9500732 10.21 0 89.9813843 10.3000002 0 90.0161591 10.3999996 0 90.0439529 10.4799995 0 90.0752029 10.5699997 0 90.1063995 10.6599998 0 90.1341324 10.7399998 0 90.1652908 10.8299999 0 90.1791306 10.8699999 0 90.1964264 10.9200001 0 90.2240906 11. 0 90.2586365 11.1000004 0 90.2862549 11.1800003 0 90.3173218 11.2700005 0 90.3483353 11.3599997 0 90.3793411 11.4499998 0 90.4103317 11.54 0 90.4412994 11.6300001 0 90.4688263 11.71 0 90.4997635 11.8000002 0 90.5306778 11.8900003 0 90.5684586 12. 0 90.5924988 12.0699997 0 90.6199341 12.1499996 0 90.6508102 12.2399998 0 90.6816635 12.3299999 0 90.7125168 12.4200001 0 90.7742081 12.6000004 0 90.8084641 12.6999998 0 90.8632584 12.8599997 0 90.8940735 12.9499998 0 90.9214935 13.0299997 0 90.9523163 13.1199999 0 90.983139 13.21 0 91.0139618 13.3000002 0 91.0448074 13.3900003 0 91.0756378 13.4799995 0 91.1030655 13.5600004 0 91.1339111 13.6499996 0 91.1647873 13.7399998 0 91.1922379 13.8199997 0 91.2265701 13.9200001 0 91.2540283 14. 0 91.2883987 14.1000004 0 91.315918 14.1800003 0 91.3468857 14.2700005 0 91.377861 14.3599997 0 91.4364624 14.5299997 0 91.4951553 14.6999998 0 91.5643616 14.8999996 0 91.6510849 15.1499996 0 91.6823959 15.2399998 0 91.7137299 15.3299999 0 91.7485962 15.4300003 0 91.8044891 15.5900002 0 91.867569 15.7700005 0 91.8991852 15.8599997 0 91.9308548 15.9499998 0 92.0226212 16.2099991 0 92.054512 16.2999992 0 92.1148987 16.4699993 0 92.1469498 16.5599995 0 92.1790619 16.6499996 0 92.2255707 16.7800007 0 92.2722244 16.9099998 0 92.3046036 17. 0 92.3406525 17.1000004 0 92.3695602 17.1800003 0 92.4021683 17.2700005 0 92.4311752 17.3500004 0 92.4966888 17.5300007 0 92.5295639 17.6200008 0 92.5625 17.7099991 0 92.5955124 17.7999992 0 92.6322784 17.8999996 0 92.6580734 17.9699993 0 92.6912918 18.0599995 0 92.7246017 18.1499996 0 92.7579651 18.2399998 0 92.7914047 18.3299999 0 92.8547745 18.5 0 92.8884201 18.5900002 0 92.922142 18.6800003 0 92.955925 18.7700005 0 92.9860001 18.8500004 0 93.0198975 18.9400005 0 93.0425339 19. 0 93.0538712 19.0300007 0 93.0879059 19.1200008 0 93.1181946 19.2000008 0 93.1371536 19.25 0 93.1865005 19.3799992 0 93.205513 19.4300003 0 93.2207336 19.4699993 0 93.2511978 19.5499992 0 93.2893143 19.6499996 0 93.3236771 19.7399998 0 93.3542328 19.8199997 0 93.3886414 19.9099998 0 gerris-snapshot-131206/doc/examples/tsunami/diegres.txt0000644000175100017510000005726112250371171020123 00000000000000-24.9833 7.579 -24.8833 7.236 -24.7833 7.807 -24.6833 7.769 -24.5833 7.835 -24.4833 6.987 -24.3833 7.968 -24.2833 7.834 -24.1833 7.701 -24.0833 6.858 -23.9833 6.424 -23.8833 5.686 -23.7833 5.762 -23.6833 5.333 -23.5833 4.599 -23.4833 5.190 -23.3833 5.375 -23.2833 4.751 -23.1833 3.822 -23.0833 4.118 -22.9833 3.498 -22.8833 4.203 -22.7833 4.198 -22.6833 3.789 -22.5833 3.484 -22.4833 4.198 -22.3833 3.389 -22.2833 3.598 -22.1833 4.218 -22.0833 3.922 -21.9833 2.718 -21.8833 3.037 -21.7833 2.546 -21.6833 3.885 -21.5833 3.194 -21.4833 3.218 -21.3833 3.242 -21.2833 2.457 -21.1833 1.976 -21.0833 2.614 -20.9833 1.529 -20.8833 1.662 -20.7833 1.391 -20.6833 1.325 -20.5833 1.158 -20.4833 0.992 -20.3833 1.945 -20.2833 1.578 -20.1833 2.431 -20.0833 1.051 -19.9833 -0.330 -19.8833 0.727 -19.7833 1.175 -19.6833 0.304 -19.5833 1.567 -19.4833 1.915 -19.3833 1.653 -19.2833 1.087 -19.1833 -0.294 -19.0833 0.663 -18.9833 0.807 -18.8833 0.340 -18.7833 0.483 -18.6833 -0.188 -18.5833 0.765 -18.4833 -0.721 -18.3833 1.147 -18.2833 -0.139 -18.1833 -0.205 -18.0833 1.657 -17.9833 1.181 -17.8833 2.329 -17.7833 0.834 -17.6833 1.368 -17.5833 -0.842 -17.4833 1.416 -17.3833 1.030 -17.2833 1.354 -17.1833 0.864 -17.0833 0.573 -16.9833 0.788 -16.8833 -0.117 -16.7833 1.212 -16.6833 1.826 -16.5833 1.421 -16.4833 1.726 -16.3833 1.216 -16.2833 3.445 -16.1833 2.931 -16.0833 2.716 -15.9833 4.636 -15.8833 5.331 -15.7833 6.331 -15.6833 5.702 -15.5833 6.188 -15.4833 7.383 -15.3833 6.849 -15.2833 8.954 -15.1833 9.535 -15.0833 10.011 -14.9833 8.758 -14.8833 10.043 -14.7833 10.615 -14.6833 11.186 -14.5833 11.552 -14.4833 10.190 -14.3833 10.656 -14.2833 10.003 -14.1833 10.365 -14.0833 10.217 -13.9833 11.593 -13.8833 10.021 -13.7833 10.278 -13.6833 9.011 -13.5833 9.672 -13.4833 9.624 -13.3833 8.762 -13.2833 10.033 -13.1833 9.780 -13.0833 9.832 -12.9833 9.579 -12.8833 10.141 -12.7833 9.178 -12.6833 9.740 -12.5833 8.678 -12.4833 8.530 -12.3833 7.977 -12.2833 7.629 -12.1833 7.890 -12.0833 7.747 -11.9833 6.894 -11.8833 7.975 -11.7833 7.227 -11.6833 6.379 -11.5833 6.650 -11.4833 6.417 -11.3833 6.388 -11.2833 5.954 -11.1833 5.626 -11.0833 5.806 -10.9833 6.092 -10.8833 6.278 -10.7833 6.058 -10.6833 6.554 -10.5833 6.239 -10.4833 7.349 -10.3833 6.125 -10.2833 7.139 -10.1833 6.225 -10.0833 6.430 -9.98333 6.434 -9.88333 5.934 -9.78334 4.420 -9.68333 6.058 -9.58333 5.158 -9.48334 4.973 -9.38333 4.992 -9.28333 4.302 -9.18334 4.630 -9.08333 4.554 -8.98333 4.074 -8.88334 4.612 -8.78333 4.541 -8.68333 4.879 -8.58334 5.727 -8.48333 5.866 -8.38333 5.599 -8.28334 5.942 -8.18333 5.781 -8.08333 5.924 -7.98334 6.272 -7.88333 4.791 -7.78333 5.954 -7.68334 7.016 -7.58333 6.859 -7.48333 6.703 -7.38334 7.970 -7.28333 7.713 -7.18333 8.675 -7.08334 8.723 -6.98333 7.857 -6.88333 7.295 -6.78334 8.258 -6.68333 8.306 -6.58333 7.539 -6.48334 7.892 -6.38333 8.445 -6.28333 8.083 -6.18334 9.551 -6.08333 8.679 -5.98333 9.737 -5.88334 9.271 -5.78333 7.990 -5.68333 7.519 -5.58334 9.791 -5.48333 8.505 -5.38333 8.639 -5.28334 10.296 -5.18333 10.020 -5.08333 9.844 -4.98334 8.344 -4.88333 9.078 -4.78333 8.692 -4.68334 9.421 -4.58333 10.555 -4.48333 10.264 -4.38334 10.274 -4.28333 10.384 -4.18333 9.679 -4.08334 9.784 -3.98333 9.684 -3.88333 9.479 -3.78334 9.474 -3.68333 9.874 -3.58333 9.560 -3.48334 10.260 -3.38333 11.160 -3.28333 9.721 -3.18334 10.616 -3.08333 10.697 -2.98333 10.878 -2.88334 10.549 -2.78333 9.506 -2.68333 9.782 -2.58334 10.158 -2.48333 10.024 -2.38333 10.295 -2.28334 9.447 -2.18333 8.699 -2.08333 9.575 -1.98334 10.756 -1.88333 9.294 -1.78333 7.931 -1.68334 9.312 -1.58333 9.574 -1.48333 8.616 -1.38334 10.097 -1.28333 8.325 -1.18333 9.501 -1.08334 10.167 -0.983333 10.429 -0.883325 9.671 -0.783341 10.947 -0.683333 9.480 -0.583325 10.351 -0.483341 10.003 -0.383333 9.655 -0.283325 11.341 -0.183341 9.878 -0.0833333 9.635 0.0166747 9.292 0.116659 9.558 0.216667 9.015 0.316675 8.472 0.416659 9.048 0.516667 9.424 0.616675 7.666 0.716659 7.233 0.816667 7.309 0.916675 8.199 1.01666 8.075 1.11667 7.142 1.21667 7.632 1.31666 6.803 1.41667 7.603 1.51667 6.679 1.61666 6.874 1.71667 7.274 1.81667 7.779 1.91666 6.965 2.01667 5.341 2.11667 6.565 2.21666 6.774 2.31667 7.189 2.41667 6.184 2.51666 5.994 2.61667 6.213 2.71667 5.722 2.81666 5.132 2.91667 6.475 3.01667 4.975 3.11666 6.118 3.21667 4.928 3.31667 6.481 3.41666 3.566 3.51667 4.919 3.61667 4.548 3.71666 4.382 3.81667 23.723 3.91667 59.727 4.01666 24.309 4.11667 12.260 4.21667 -30.574 4.31666 13.056 4.41667 1.417 4.51667 -22.110 4.61666 4.047 4.71667 11.000 4.81667 26.388 4.91666 -9.125 5.01667 -7.453 5.11667 10.983 5.21666 -1.671 5.31667 -19.506 5.41667 -1.275 5.51666 9.236 5.61667 -1.489 5.71667 -23.491 5.81666 -2.112 5.91667 12.562 6.01667 -13.203 6.11666 10.205 6.21667 9.839 6.31667 19.936 6.41666 12.149 6.51667 -18.093 6.61667 10.083 6.71666 2.596 6.81667 -9.057 6.91667 -1.308 7.01666 3.492 7.11667 9.308 7.21667 14.713 7.31666 -3.860 7.41667 -2.217 7.51667 1.455 7.61666 5.632 7.71667 3.508 7.81667 -3.293 7.91666 13.880 8.01667 -2.679 8.11667 -7.456 8.21666 1.379 8.31667 10.618 8.41667 6.951 8.51666 3.179 8.61667 -2.322 8.71667 11.884 8.81666 11.865 8.91667 -3.499 9.01667 0.440 9.11666 8.540 9.21667 19.180 9.31667 8.988 9.41666 4.382 9.51667 14.812 9.61667 13.149 9.71666 -2.029 9.81667 1.080 9.91667 12.924 10.0167 26.597 10.1167 9.890 10.2167 10.047 10.3167 24.629 10.4167 9.951 10.5167 4.821 10.6167 4.973 10.7167 6.649 10.8167 15.640 10.9167 6.648 11.0167 13.911 11.1167 19.039 11.2167 17.463 11.3167 20.153 11.4167 8.823 11.5167 3.183 11.6167 9.531 11.7167 17.303 11.8167 13.088 11.9167 11.921 12.0167 22.031 12.1167 21.069 12.2167 12.082 12.3167 -0.968 12.4167 13.110 12.5167 16.014 12.6167 7.946 12.7167 7.908 12.8167 14.880 12.9167 24.395 13.0167 12.679 13.1167 -2.694 13.2167 7.335 13.3167 8.326 13.4167 5.558 13.5167 2.591 13.6167 2.877 13.7167 11.497 13.8167 9.654 13.9167 2.734 14.0167 3.538 14.1167 8.206 14.2167 13.892 14.3167 5.967 14.4167 7.696 14.5167 12.273 14.6167 11.773 14.7167 9.954 14.8167 7.934 14.9167 11.811 15.0167 16.198 15.1167 16.826 15.2167 11.464 15.3167 11.793 15.4167 7.350 15.5167 9.817 15.6167 13.403 15.7167 5.817 15.8167 4.326 15.9167 4.770 16.0167 10.294 16.1167 10.942 16.2167 6.514 16.3167 4.828 16.4167 8.429 16.5167 14.163 16.6167 7.401 16.7167 7.244 16.8167 11.559 16.9167 14.655 17.0167 6.374 17.1167 4.188 17.2167 11.756 17.3167 16.886 17.4167 14.905 17.5167 7.233 17.6167 14.091 17.7167 18.916 17.8167 11.549 17.9167 4.791 18.0167 11.850 18.1167 17.384 18.2167 10.422 18.3167 6.912 18.4167 14.171 18.5167 14.823 18.6167 10.295 18.7167 2.818 18.8167 5.195 18.9167 16.206 19.0167 10.553 19.1167 6.624 19.2167 15.192 19.3167 20.608 19.4167 14.945 19.5167 8.064 19.6167 5.954 19.7167 3.130 19.8167 8.026 19.9167 11.803 20.0167 10.293 20.1167 19.652 20.2167 21.490 20.3167 17.432 20.4167 6.564 20.5167 2.807 20.6167 4.431 20.7167 6.764 20.8167 5.131 20.9167 8.679 21.0167 25.633 21.1167 16.475 21.2167 4.368 21.3167 9.226 21.4167 11.136 21.5167 10.197 21.6167 3.263 21.7167 8.925 21.8167 22.103 21.9167 13.130 22.0167 4.867 22.1167 6.152 22.2167 4.795 22.3167 7.399 22.4167 4.718 22.5167 10.061 22.6167 18.757 22.7167 12.313 22.8167 11.965 22.9167 12.022 23.0167 8.011 23.1167 4.311 23.2167 0.810 23.3167 4.624 23.4167 9.453 23.5167 10.524 23.6167 16.472 23.7167 16.324 23.8167 12.823 23.9167 9.932 24.0167 6.027 24.1167 6.998 24.2167 7.359 24.3167 7.826 24.4167 14.793 24.5167 12.721 24.6167 8.210 24.7167 8.986 24.8167 5.190 24.9167 1.599 25.0167 4.309 25.1167 5.294 25.2167 6.180 25.3167 12.247 25.4167 17.100 25.5167 10.370 25.6167 8.927 25.7167 3.931 25.8167 7.674 25.9167 2.783 26.0167 -3.222 26.1167 0.326 26.2167 4.078 26.3167 10.374 26.4167 8.646 26.5167 9.155 26.6167 14.037 26.7167 11.503 26.8167 5.212 26.9167 1.464 27.0167 3.002 27.1167 6.574 27.2167 2.022 27.3167 4.684 27.4167 6.332 27.5167 5.951 27.6167 8.823 27.7167 3.061 27.8167 3.499 27.9167 6.681 28.0167 9.053 28.1167 4.414 28.2167 2.929 28.3167 4.696 28.4167 6.158 28.5167 3.254 28.6167 4.821 28.7167 5.374 28.8167 7.451 28.9167 5.260 29.0167 2.565 29.1167 6.371 29.2167 0.323 29.3167 3.419 29.4167 1.028 29.5167 4.024 29.6167 8.949 29.7167 7.168 29.8167 4.983 29.9167 1.983 30.0167 2.131 30.1167 1.569 30.2167 -2.245 30.3167 0.746 30.4167 7.699 30.5167 8.862 30.6167 7.176 30.7167 8.843 30.8167 7.563 30.9167 3.029 31.0167 4.692 31.1167 5.844 31.2167 2.525 31.3167 1.235 31.4167 4.921 31.5167 5.964 31.6167 5.888 31.7167 2.660 31.8167 4.508 31.9167 4.832 32.0167 1.798 32.1167 1.608 32.2167 1.312 32.3167 3.860 32.4167 0.612 32.5167 4.780 32.6167 4.475 32.7167 5.994 32.8167 2.432 32.9167 1.203 33.0167 2.512 33.1167 8.594 33.2167 8.475 33.3167 5.508 33.4167 9.956 33.5167 9.422 33.6167 8.074 33.7167 3.268 33.8167 4.354 33.9167 12.855 34.0167 12.412 34.1167 11.459 34.2167 11.520 34.3167 14.220 34.4167 12.958 34.5167 8.747 34.6167 8.395 34.7167 13.833 34.8167 14.699 34.9167 12.718 35.0167 11.651 35.1167 13.022 35.2167 13.274 35.3167 7.125 35.4167 10.830 35.5167 13.620 35.6167 10.619 35.7167 10.362 35.8167 11.223 35.9167 12.490 36.0167 12.537 36.1167 8.827 36.2167 6.030 36.3167 8.111 36.4167 7.349 36.5167 8.010 36.6167 8.062 36.7167 8.319 36.8167 11.829 36.9167 12.495 37.0167 11.538 37.1167 9.870 37.2167 9.322 37.3167 7.760 37.4167 9.146 37.5167 9.112 37.6167 9.893 37.7167 11.388 37.8167 13.393 37.9167 12.454 38.0167 12.026 38.1167 11.397 38.2167 11.482 38.3167 10.249 38.4167 6.072 38.5167 6.062 38.6167 8.191 38.7167 9.610 38.8167 11.134 38.9167 10.120 39.0167 10.939 39.1167 11.049 39.2167 10.144 39.3167 4.467 39.4167 6.210 39.5167 7.549 39.6167 9.297 39.7167 11.454 39.8167 10.869 39.9167 13.641 40.0167 11.841 40.1167 9.231 40.2167 10.179 40.3167 10.113 40.4167 12.385 40.5167 11.509 40.6167 10.228 40.7167 11.186 40.8167 11.838 40.9167 10.053 41.0167 6.238 41.1167 6.386 41.2167 8.873 41.3167 9.835 41.4167 6.126 41.5167 6.683 41.6167 9.884 41.7167 9.527 41.8167 6.632 41.9167 8.919 42.0167 11.205 42.1167 10.443 42.2167 5.415 42.3167 4.753 42.4167 8.563 42.5167 9.121 42.6167 8.255 42.7167 5.559 42.8167 10.584 42.9167 11.342 43.0167 6.408 43.1167 8.585 43.2167 9.947 43.3167 10.495 43.4167 8.705 43.5167 6.405 43.6167 8.777 43.7167 7.387 43.8167 7.520 43.9167 6.635 44.0167 9.607 44.1167 13.288 44.2167 12.193 44.3167 11.908 44.4167 11.212 44.5167 9.703 44.6167 8.088 44.7167 8.708 44.8167 5.260 44.9167 8.412 45.0167 10.141 45.1167 9.936 45.2167 9.322 45.3167 7.588 45.4167 6.360 45.5167 5.026 45.6167 4.097 45.7167 5.502 45.8167 7.921 45.9167 9.931 46.0167 12.040 46.1167 12.116 46.2167 12.697 46.3167 10.025 46.4167 8.672 46.5167 7.115 46.6167 9.110 46.7167 9.276 46.8167 12.591 46.9167 11.228 47.0167 13.214 47.1167 12.261 47.2167 7.951 47.3167 8.922 47.4167 7.555 47.5167 6.187 47.6167 5.735 47.7167 7.111 47.8167 8.282 47.9167 8.843 48.0167 10.015 48.1167 10.576 48.2167 9.309 48.3167 9.161 48.4167 10.842 48.5167 10.694 48.6167 10.546 48.7167 10.603 48.8167 12.083 48.9167 14.174 49.0167 11.592 49.1167 10.130 49.2167 9.482 49.3167 12.086 49.4167 8.495 49.5167 8.462 49.6167 7.718 49.7167 9.618 49.8167 8.270 49.9167 3.774 50.0167 4.360 50.1167 5.355 50.2167 4.017 50.3167 3.798 50.4167 3.783 50.5167 4.178 50.6167 5.288 50.7167 3.554 50.8167 3.450 50.9167 3.550 51.0167 5.583 51.1167 5.588 51.2167 5.798 51.3167 4.283 51.4167 5.312 51.5167 5.631 51.6167 5.241 51.7167 1.907 51.8167 2.031 51.9167 4.898 52.0167 3.808 52.1167 1.194 52.2167 1.427 52.3167 3.999 52.4167 4.033 52.5167 0.309 52.6167 -1.991 52.7167 0.790 52.8167 1.948 52.9167 0.567 53.0167 -0.304 53.1167 2.482 53.2167 5.374 53.3167 2.269 53.4167 0.283 53.5167 1.551 53.6167 4.647 53.7167 2.561 53.8167 -0.234 53.9167 1.543 54.0167 2.710 54.1167 0.219 54.2167 -0.647 54.3167 0.520 54.4167 0.773 54.5167 1.126 54.6167 -0.045 54.7167 2.541 54.8167 3.299 54.9167 1.618 55.0167 0.442 55.1167 -1.039 55.2167 0.628 55.3167 -0.448 55.4167 0.200 55.5167 -0.576 55.6167 0.272 55.7167 1.220 55.8167 1.659 55.9167 1.688 56.0167 -0.012 56.1167 -1.917 56.2167 -3.622 56.3167 -3.703 56.4167 -2.364 56.5167 -1.840 56.6167 -1.626 56.7167 -1.412 56.8167 -1.812 56.9167 -2.721 57.0167 -2.212 57.1167 -2.721 57.2167 -0.997 57.3167 -1.512 57.4167 -1.216 57.5167 1.108 57.6167 2.312 57.7167 0.974 57.8167 -0.264 57.9167 0.016 58.0167 -0.617 58.1167 -0.951 58.2167 0.644 58.3167 1.120 58.4167 2.916 58.5167 3.996 58.6167 2.739 58.7167 3.410 58.8167 3.367 58.9167 2.104 59.0167 0.432 59.1167 1.808 59.2167 4.808 59.3167 4.251 59.4167 6.231 59.5167 7.603 59.6167 7.755 59.7167 7.092 59.8167 5.615 59.9167 4.343 60.0167 5.305 60.1167 6.267 60.2167 7.533 60.3167 6.666 60.4167 8.237 60.5167 8.894 60.6167 8.841 60.7167 7.264 60.8167 8.635 60.9167 7.873 61.0167 7.110 61.1167 5.234 61.2167 7.319 61.3167 7.781 61.4167 7.228 61.5167 5.661 61.6167 6.737 61.7167 6.798 61.8167 6.150 61.9167 5.912 62.0167 5.269 62.1167 5.440 62.2167 4.802 62.3167 4.368 62.4167 3.734 62.5167 4.730 62.6167 4.710 62.7167 5.810 62.8167 3.562 62.9167 3.958 63.0167 2.629 63.1167 2.319 63.2167 1.910 63.3167 0.690 63.4167 2.624 63.5167 2.629 63.6167 1.824 63.7167 1.124 63.8167 0.629 63.9167 -0.676 64.0167 -1.571 64.1167 -0.738 64.2167 -0.714 64.3167 -0.994 64.4167 -0.356 64.5167 0.282 64.6167 1.026 64.7167 1.669 64.8167 1.298 64.9167 1.031 65.0167 1.070 65.1167 0.094 65.2167 0.442 65.3167 1.094 65.4167 1.747 65.5167 2.200 65.6167 2.043 65.7167 1.177 65.8167 0.615 65.9167 -0.556 66.0167 0.002 66.1167 1.374 66.2167 0.407 66.3167 -0.049 66.4167 0.713 66.5167 -0.253 66.6167 0.509 66.7167 0.662 66.8167 0.305 66.9167 0.558 67.0167 0.506 67.1167 1.163 67.2167 1.616 67.3167 1.459 67.4167 1.912 67.5167 2.260 67.6167 2.303 67.7167 1.327 67.8167 2.485 67.9167 1.609 68.0167 1.443 68.1167 2.391 68.2167 3.439 68.3167 3.063 68.4167 1.058 68.5167 2.811 68.6167 1.920 68.7167 1.230 68.8167 0.944 68.9167 0.554 69.0167 0.973 69.1167 1.797 69.2167 -0.227 69.3167 0.592 69.4167 2.221 69.5167 2.221 69.6167 1.712 69.7167 2.316 69.8167 3.121 69.9167 2.807 70.0167 2.897 70.1167 2.373 70.2167 3.678 70.3167 2.744 70.4167 2.316 70.5167 4.120 70.6167 5.820 70.7167 4.777 70.8167 6.068 70.9167 5.324 71.0167 6.005 71.1167 5.152 71.2167 4.404 71.3167 4.975 71.4167 4.123 71.5167 4.284 71.6167 3.631 71.7167 4.807 71.8167 6.388 71.9167 4.921 72.0167 4.163 72.1167 4.930 72.2167 4.577 72.3167 4.429 72.4167 3.467 72.5167 4.943 72.6167 4.795 72.7167 5.051 72.8167 4.599 72.9167 3.941 73.0167 4.912 73.1167 3.545 73.2167 3.197 73.3167 3.558 73.4167 2.806 73.5167 2.967 73.6167 3.334 73.7167 3.600 73.8167 4.376 73.9167 3.528 74.0167 2.885 74.1167 2.446 74.2167 3.027 74.3167 2.898 74.4167 2.060 74.5167 1.936 74.6167 1.102 74.7167 2.912 74.8167 1.778 74.9167 1.054 75.0167 1.754 75.1167 1.340 75.2167 -0.698 75.3167 -0.803 75.4167 -0.398 75.5167 -0.598 75.6167 -0.798 75.7167 -0.384 75.8167 -0.679 75.9167 -1.074 76.0167 -0.755 76.1167 -0.636 76.2167 -0.922 76.3167 -1.612 76.4167 -0.674 76.5167 -0.445 76.6167 0.194 76.7167 -2.216 76.8167 -2.082 76.9167 -2.658 77.0167 -2.115 77.1167 -2.586 77.2167 -1.938 77.3167 -2.610 77.4167 -2.771 77.5167 -2.323 77.6167 -1.061 77.7167 -1.422 77.8167 -2.798 77.9167 -2.041 78.0167 -2.197 78.1167 -2.454 78.2167 -2.101 78.3167 -1.444 78.4167 -1.396 78.5167 -1.448 78.6167 -0.485 78.7167 0.072 78.8167 0.120 78.9167 0.168 79.0167 0.826 79.1167 0.569 79.2167 0.717 79.3167 -1.169 79.4167 -0.006 79.5167 -1.487 79.6167 -3.273 79.7167 -0.691 79.8167 -0.143 79.9167 -1.529 80.0167 -1.390 80.1167 -1.761 80.2167 -1.728 80.3167 -1.799 80.4167 -1.770 80.5167 -2.556 80.6167 -2.836 80.7167 -2.103 80.8167 -2.388 80.9167 -1.355 81.0167 -2.050 81.1167 -2.140 81.2167 -1.521 81.3167 -0.497 81.4167 0.522 81.5167 1.032 81.6167 -0.188 81.7167 -0.497 81.8167 0.512 81.9167 0.098 82.0167 1.203 82.1167 2.103 82.2167 2.288 82.3167 4.403 82.4167 3.974 82.5167 6.084 82.6167 6.564 82.7167 6.231 82.8167 5.792 82.9167 6.368 83.0167 6.435 83.1167 6.906 83.2167 7.272 83.3167 7.639 83.4167 9.424 83.5167 8.262 83.6167 8.319 83.7167 8.575 83.8167 7.918 83.9167 8.479 84.0167 7.922 84.1167 8.074 84.2167 9.140 84.3167 9.392 84.4167 7.815 84.5167 10.201 84.6167 10.453 84.7167 8.571 84.8167 9.738 84.9167 8.161 85.0167 8.008 85.1167 8.260 85.2167 7.803 85.3167 8.464 85.4167 8.821 85.5167 9.482 85.6167 8.520 85.7167 7.762 85.8167 8.429 85.9167 7.471 86.0167 6.818 86.1167 6.575 86.2167 6.842 86.3167 7.008 86.4167 7.074 86.5167 6.636 86.6167 8.231 86.7167 6.983 86.8167 6.754 86.9167 5.816 87.0167 5.287 87.1167 4.558 87.2167 4.644 87.3167 4.934 87.4167 4.925 87.5167 4.206 87.6167 5.725 87.7167 5.315 87.8167 5.010 87.9167 5.420 88.0167 4.815 88.1167 5.230 88.2167 4.834 88.3167 5.863 88.4167 5.473 88.5167 5.797 88.6167 5.816 88.7167 6.550 88.8167 6.474 88.9167 5.383 89.0167 5.412 89.1167 6.460 89.2167 6.898 89.3167 7.442 89.4167 7.070 89.5167 7.414 89.6167 7.047 89.7167 6.376 89.8167 5.605 89.9167 4.429 90.0167 3.762 90.1167 4.620 90.2167 4.158 90.3167 5.121 90.4167 4.354 90.5167 5.927 90.6167 5.875 90.7167 5.008 90.8167 4.347 90.9167 3.685 91.0167 4.343 91.1167 3.681 91.2167 4.848 91.3167 3.982 91.4167 5.554 91.5167 3.773 91.6167 3.007 91.7167 2.950 91.8167 3.807 91.9167 4.055 92.0167 2.979 92.1167 3.427 92.2167 3.671 92.3167 2.490 92.4167 2.323 92.5167 2.662 92.6167 3.305 92.7167 2.929 92.8167 1.334 92.9167 1.563 93.0167 3.316 93.1167 2.525 93.2167 1.935 93.3167 2.968 93.4167 3.188 93.5167 2.692 93.6167 1.383 93.7167 2.407 93.8167 4.240 93.9167 3.736 94.0167 2.516 94.1167 4.750 94.2167 4.440 94.3167 3.721 94.4167 4.321 94.5167 5.021 94.6167 5.007 94.7167 6.107 94.8167 5.988 94.9167 6.678 95.0167 6.149 95.1167 4.901 95.2167 5.077 95.3167 5.048 95.4167 5.729 95.5167 5.086 95.6167 5.967 95.7167 6.338 95.8167 5.690 95.9167 4.737 96.0167 5.103 96.1167 5.165 96.2167 5.122 96.3167 4.369 96.4167 5.035 96.5167 6.311 96.6167 5.759 96.7167 6.120 96.8167 5.667 96.9167 6.943 97.0167 6.795 97.1167 6.038 97.2167 6.499 97.3167 5.642 97.4167 6.408 97.5167 6.365 97.6167 5.507 97.7167 5.464 97.8167 6.540 97.9167 5.787 98.0167 4.934 98.1167 4.996 98.2167 4.858 98.3167 4.314 98.4167 2.857 98.5167 4.247 98.6167 4.418 98.7167 2.561 98.8167 3.551 98.9167 3.018 99.0167 3.808 99.1167 2.974 99.2167 2.550 99.3167 2.941 99.4167 3.436 99.5167 2.917 99.6167 2.502 99.7167 2.293 99.8167 2.493 99.9167 2.288 100.017 1.883 100.117 1.888 100.217 1.488 100.317 2.207 100.417 -0.017 100.517 0.302 100.617 0.522 100.717 0.336 100.817 -0.354 100.917 -0.840 101.017 -0.916 101.117 -0.687 101.217 -1.573 101.317 -2.558 101.417 -2.120 101.517 -2.391 101.617 -2.153 101.717 -2.929 101.817 -1.671 101.917 -2.038 102.017 -3.014 102.117 -1.956 102.217 -1.813 102.317 -1.565 102.417 -1.826 102.517 -2.188 102.617 -1.430 102.717 -1.792 102.817 -1.644 102.917 -1.801 103.017 -2.362 103.117 -0.385 103.217 -0.847 103.317 -0.699 103.417 -0.246 103.517 -1.317 103.617 -1.069 103.717 -0.821 103.817 -0.778 103.917 -0.430 104.017 -2.725 104.117 -2.482 104.217 -3.763 104.317 -4.029 104.417 -2.367 104.517 -1.519 104.617 -1.485 104.717 -0.132 104.817 0.506 104.917 -0.075 105.017 1.068 105.117 0.178 105.217 1.012 105.317 1.336 105.417 1.150 105.517 1.469 105.617 1.379 105.717 2.608 105.817 3.022 105.917 2.212 106.017 1.403 106.117 0.588 106.217 2.617 106.317 0.174 106.417 1.993 106.517 3.203 106.617 1.664 106.717 1.345 106.817 1.631 106.917 1.712 107.017 1.588 107.117 3.697 107.217 3.264 107.317 4.554 107.417 3.711 107.517 4.896 107.617 6.792 107.717 5.129 107.817 7.224 107.917 5.457 108.017 6.128 108.117 6.085 108.217 7.056 108.317 6.503 108.417 8.084 108.517 8.036 108.617 7.379 108.717 6.721 108.817 6.673 108.917 7.335 109.017 7.996 109.117 8.963 109.217 10.639 109.317 10.081 109.417 10.438 109.517 10.490 109.617 9.223 109.717 7.751 109.817 8.922 109.917 9.078 110.017 9.540 110.117 9.597 110.217 10.873 110.317 10.120 110.417 10.282 110.517 9.834 110.617 8.881 110.717 8.438 110.817 8.504 110.917 9.285 111.017 9.456 111.117 9.427 111.217 9.908 111.317 9.984 111.417 9.860 111.517 8.926 111.617 9.212 111.717 8.283 111.817 8.474 111.917 8.564 112.017 8.150 112.117 7.535 112.217 8.954 112.317 8.040 112.417 7.026 112.517 6.726 112.617 6.530 112.717 6.845 112.817 6.450 112.917 6.159 113.017 5.059 113.117 5.993 113.217 5.302 113.317 5.731 113.417 5.655 113.517 5.784 113.617 5.813 113.717 5.032 113.817 4.861 113.917 5.199 114.017 5.642 114.117 5.171 114.217 4.295 114.317 3.724 114.417 3.867 114.517 2.791 114.617 3.544 114.717 3.587 114.817 3.835 114.917 3.778 115.017 2.807 115.117 3.055 115.217 2.289 115.317 3.351 115.417 2.890 115.517 3.647 115.617 4.405 115.717 4.653 115.817 5.411 115.917 6.878 116.017 8.040 116.117 6.764 116.217 4.979 116.317 6.646 116.417 7.399 116.517 6.423 116.617 7.275 116.717 7.109 116.817 6.028 116.917 5.047 117.017 4.876 117.117 5.315 117.217 4.939 117.317 3.848 117.417 3.163 117.517 3.187 117.617 2.496 117.717 3.735 117.817 2.940 117.917 3.868 118.017 2.459 118.117 4.807 118.217 5.526 118.317 6.140 118.417 6.245 118.517 8.074 118.617 8.379 118.717 8.679 118.817 8.164 118.917 7.140 119.017 6.721 119.117 8.031 119.217 7.712 119.317 6.373 119.417 5.744 119.517 5.825 119.617 5.192 119.717 4.253 119.817 5.648 119.917 4.705 120.017 5.895 120.117 6.676 120.217 6.947 120.317 7.219 120.417 6.166 120.517 4.808 120.617 4.160 120.717 3.512 120.817 4.183 120.917 4.650 121.017 5.321 121.117 6.192 121.217 5.439 121.317 6.006 121.417 5.353 121.517 4.395 121.617 3.743 121.717 4.004 121.817 3.961 121.917 3.918 122.017 5.603 122.117 5.460 122.217 5.317 122.317 4.159 122.417 4.221 122.517 4.387 122.617 4.349 122.717 5.025 122.817 4.482 122.917 5.262 123.017 5.434 123.117 5.710 123.217 5.681 123.317 6.671 123.417 4.209 123.517 4.085 123.617 3.861 123.717 4.351 123.817 5.046 123.917 5.337 124.017 4.208 124.117 5.013 124.217 3.889 124.317 5.103 124.417 5.203 124.517 4.289 124.617 4.189 124.717 3.179 124.817 3.389 124.917 1.874 125.017 1.784 125.117 2.103 125.217 2.322 125.317 1.732 125.417 0.532 125.517 0.046 125.617 0.375 125.717 -0.310 125.817 -0.182 125.917 -0.762 126.017 1.505 126.117 1.029 126.217 1.367 126.317 -1.038 126.417 0.320 126.517 0.458 126.617 -1.942 126.717 0.535 126.817 0.169 126.917 0.922 127.017 1.775 127.117 1.003 127.217 1.961 127.317 2.004 127.417 1.233 127.517 0.362 127.617 0.710 127.717 0.753 127.817 1.101 127.917 2.059 128.017 2.811 128.117 2.855 128.217 1.779 128.317 1.412 128.417 1.655 128.517 0.679 128.617 -0.706 128.717 2.685 128.817 1.704 128.917 1.638 129.017 2.381 129.117 0.686 129.217 -0.300 129.317 1.253 129.417 -1.566 129.517 -0.118 129.617 -1.518 129.717 -2.513 129.817 -1.884 129.917 -1.056 130.017 -1.956 130.117 -0.317 130.217 -0.308 130.317 -0.808 130.417 -1.412 130.517 -0.393 130.617 -0.393 130.717 -0.293 130.817 2.345 130.917 1.831 131.017 2.126 131.117 3.336 131.217 1.797 131.317 2.697 131.417 2.273 131.517 5.707 131.617 2.740 131.717 2.411 131.817 3.706 131.917 6.016 132.017 3.853 132.117 4.024 132.217 6.024 132.317 5.381 132.417 5.547 132.517 4.495 132.617 5.575 132.717 5.942 132.817 6.918 132.917 7.689 133.017 8.765 133.117 7.198 133.217 8.779 133.317 7.516 133.417 5.135 133.517 6.106 133.617 7.177 133.717 6.015 133.817 7.595 133.917 6.533 134.017 6.590 134.117 6.647 134.217 6.703 134.317 6.355 134.417 6.312 134.517 7.183 134.617 5.516 134.717 6.897 134.817 6.249 134.917 7.225 135.017 6.172 135.117 6.543 135.217 6.000 135.317 6.171 135.417 5.428 135.517 6.923 135.617 6.590 135.717 6.666 135.817 6.337 135.917 6.113 136.017 5.584 136.117 6.074 136.217 6.060 136.317 5.436 136.417 5.731 136.517 5.112 136.617 4.802 136.717 3.578 136.817 4.593 136.917 5.407 137.017 4.902 137.117 4.298 137.217 4.712 137.317 3.502 137.417 4.326 137.517 2.817 137.617 3.341 137.717 3.055 137.817 2.770 137.917 2.284 138.017 1.698 138.117 2.537 138.217 1.751 138.317 1.780 138.417 2.318 138.517 2.757 138.617 1.876 138.717 1.300 138.817 1.134 138.917 1.372 139.017 0.496 139.117 -0.075 139.217 -0.646 139.317 0.206 139.417 0.450 139.517 -0.017 139.617 0.127 139.717 0.575 139.817 0.718 139.917 -0.358 140.017 0.295 140.117 -0.172 140.217 -0.029 140.317 -1.409 140.417 -2.485 140.517 -2.342 140.617 -1.794 140.717 -0.941 140.817 -0.903 140.917 -2.693 141.017 -1.436 141.117 -1.502 141.217 -1.873 141.317 -2.145 141.417 -2.416 141.517 -2.487 141.617 -2.558 141.717 -1.515 141.817 -2.301 141.917 -0.448 142.017 -1.543 142.117 -1.319 142.217 -1.605 142.317 -2.705 142.417 -0.557 142.517 0.168 142.617 0.077 142.717 -0.218 142.817 -0.313 142.917 0.706 gerris-snapshot-131206/doc/examples/tsunami/hmax-detail.gfv0000644000175100017510000000135012250371171020625 00000000000000# GfsView 2D View { tx = -0.00622686 ty = 0.033413 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 3.66678 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Linear { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P > 0.01 ? Pmax : NODATA { amin = 0 min = -9.23266e-07 amax = 0 max = 8 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P > 0.01 ? Pmax : NODATA { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 0 levels = 1,2,3,4,5,6,7,8,9,10 } gerris-snapshot-131206/doc/examples/tsunami/tsunami.gfv0000644000175100017510000000137612250371171020120 00000000000000# GfsView 2D View { tx = -0.143643 ty = -0.00866483 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 25.226 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Linear { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P > 1e-2 ? P + Zb : NODATA { amin = 0 min = -1 amax = 0 max = 1 show = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } Label { r = 0 g = 0 b = 0 shading = Constant maxlevel = 6 font_size = 3 raster_font = 1 } { x = 66.97 y = 29.0529 z = 0 label = "t = %g s" symbol = 0 } Location { r = 0 g = 0 b = 1 shading = Constant maxlevel = 5 font_size = 2 raster_font = 1 } { size = 0.4 label = 1 } gerris-snapshot-131206/doc/examples/tsunami/jasonres.txt0000644000175100017510000003056012250371171020316 00000000000000# long. lat time ( cycle 109 - cycle 109) 84.2567368 -5.3499999 6890.62598 0. 84.3860397 -5. 6897.82031 0.0445999987 84.441452 -4.8499999 6900.90332 0.0839999989 84.4710007 -4.76999998 6902.54785 0.217000008 84.5485916 -4.55999994 6906.86426 0.313199997 84.6446228 -4.30000019 6912.20898 0.502000034 84.7222214 -4.09000015 6916.52637 0.628199995 84.7961121 -3.8900001 6920.6377 0.568000019 84.8293839 -3.79999995 6922.4873 0.699999988 84.8700409 -3.69000006 6924.74805 0.349000007 84.9439621 -3.49000001 6928.85938 0.156000003 84.9920197 -3.3599999 6931.53223 0.055999998 85.069664 -3.1500001 6935.84863 0.330000013 85.0918579 -3.08999991 6937.08203 0.471199989 85.1177368 -3.01999998 6938.52148 0.513999999 85.1362305 -2.97000003 6939.54883 0.701999962 85.1658249 -2.8900001 6941.19336 0.616999984 85.1880188 -2.82999992 6942.42676 0.600000024 85.2176056 -2.75 6944.07129 0.242999986 85.2435074 -2.68000007 6945.50977 0.189999998 85.3175049 -2.48000002 6949.62109 0.167999998 85.3434067 -2.41000009 6951.06055 0.0643000007 85.3989258 -2.25999999 6954.14355 -0.100000001 85.4174347 -2.21000004 6955.17188 -0.201000005 85.4877777 -2.01999998 6959.07715 -0.182000011 85.5396118 -1.88 6961.95508 -0.213 85.613678 -1.67999995 6966.06641 -0.123000003 85.6396103 -1.61000001 6967.50488 -0.134000003 85.6655426 -1.53999996 6968.94434 -0.268000007 85.713707 -1.40999997 6971.61621 -0.39200002 85.7396393 -1.34000003 6973.05566 -0.469000012 85.7655792 -1.26999998 6974.49414 -0.45599997 85.8137665 -1.13999999 6977.16699 -0.310000002 85.8656616 -1. 6980.04492 -0.422999978 85.8841934 -0.949999988 6981.07227 -0.52700001 85.9138565 -0.870000005 6982.7168 -0.428000003 85.9398117 -0.800000012 6984.15527 -0.275000006 85.9620514 -0.74000001 6985.38867 -0.180000007 86.0362167 -0.540000021 6989.5 -0.212000012 86.0881348 -0.400000006 6992.37793 -0.160599992 86.1141052 -0.330000013 6993.81738 0.055999998 86.1363602 -0.270000011 6995.05078 0.111000001 86.1474915 -0.239999995 6995.66699 0.113000005 86.1675186 -0.186000004 6996.77637 0.0670000017 86.1897812 -0.126000002 6998.00977 0.100000001 86.210556 -0.0700000003 6999.16211 0.121000007 86.2365265 0. 7000.60059 -0.324599981 86.2624969 0.0700000003 7002.03906 -0.225699991 86.2862396 0.134000003 7003.35449 -0.5 86.2995987 0.170000002 7004.09473 -0.379999995 86.3367081 0.270000011 7006.15039 -0.181000009 86.366394 0.349999994 7007.79492 -0.0799999982 86.3849487 0.400000006 7008.82324 -0.186000004 86.4109192 0.469999999 7010.26172 -0.360000014 86.4517441 0.579999983 7012.52344 -0.0359999985 86.4777145 0.649999976 7013.96191 -0.209999993 86.5185394 0.75999999 7016.22363 -0.419999987 86.5630646 0.879999995 7018.69043 -0.100000001 86.5853195 0.939999998 7019.92383 0.189999998 86.6521149 1.12 7023.62305 -0.0299999993 86.6743851 1.17999995 7024.85645 0.209999993 86.69664 1.24000001 7026.08984 0.409000009 86.7374573 1.35000002 7028.35156 0.239999995 86.7856827 1.48000002 7031.02344 0.0889999941 86.8301926 1.60000002 7033.49023 0.312000006 86.8672867 1.70000005 7035.5459 0.055999998 86.8858261 1.75 7036.57422 0.300300002 86.9043732 1.79999995 7037.60156 0.386999995 86.941452 1.89999998 7039.65723 0.201000005 86.9822388 2.00999999 7041.91797 0.539000034 87.0230103 2.11999989 7044.17969 0.396300018 87.0489578 2.19000006 7045.61816 0.26700002 87.0711975 2.25 7046.85156 0.518999994 87.1119537 2.3599999 7049.1123 0.0120000001 87.1341858 2.42000008 7050.3457 0.134000003 87.1601181 2.49000001 7051.78516 0.513999999 87.1786346 2.53999996 7052.8125 0.417999983 87.2008591 2.5999999 7054.0459 0. 87.2378845 2.70000005 7056.10156 0.167999998 87.2897034 2.83999991 7058.97949 0.492000014 87.3340988 2.96000004 7061.44531 0.291000009 87.3562927 3.01999998 7062.67871 -0.0790000036 87.3784943 3.07999992 7063.91211 0.35799998 87.4450378 3.25999999 7067.6123 0.504000008 87.5078506 3.43000007 7071.10742 -0.123000003 87.5337067 3.5 7072.5459 0.157000005 87.5521698 3.54999995 7073.57422 0.416999996 87.5743179 3.6099999 7074.80762 0.0340000018 87.6186066 3.73000002 7077.27441 0.100000001 87.6407471 3.78999996 7078.50781 0.159999996 87.7070999 3.97000003 7082.20703 -0.223999992 87.7292099 4.03000021 7083.44043 -0.0670000017 87.773407 4.1500001 7085.90723 -0.0109999999 87.8175812 4.26999998 7088.37402 -0.111999996 87.8396606 4.32999992 7089.60742 -0.023 87.8617325 4.38999987 7090.84082 -0.0450000018 87.9242172 4.55999994 7094.33594 -0.352999985 87.9683075 4.67999983 7096.80273 0.167700008 87.9903107 4.73999977 7098.03613 -0.190400004 88.0123367 4.80000019 7099.26855 -0.537 88.0343475 4.86000013 7100.50195 -0.202999994 88.0563354 4.92000008 7101.73535 -0.30399999 88.078331 4.98000002 7102.96875 -0.310000002 88.1003265 5.03999996 7104.20215 -0.0340000018 88.1186295 5.09000015 7105.23047 -0.879999995 88.1662216 5.21999979 7107.90234 -0.460000008 88.2100983 5.34000015 7110.36914 -0.219999999 88.2320251 5.4000001 7111.60254 0.201000005 88.2685623 5.5 7113.6582 -0.157000005 88.2977524 5.57999992 7115.30273 -0.469000012 88.3159943 5.63000011 7116.33105 -0.167500004 88.337883 5.69000006 7117.56445 0.111999996 88.3597488 5.75 7118.79688 -0.178700015 88.3816071 5.80999994 7120.03027 -0.529999971 88.4034576 5.86999989 7121.26367 -0.178700015 88.4216614 5.92000008 7122.29199 -0.256300002 88.4507599 6. 7123.93652 -0.430000007 88.4653168 6.03999996 7124.75879 -0.347000003 88.4907532 6.11000013 7126.19727 -0.189999998 88.5125504 6.17000008 7127.43066 -0.212000012 88.5307083 6.21999979 7128.45898 -0.291000009 88.5778656 6.3499999 7131.13086 -0.391600013 88.603241 6.42000008 7132.57031 -0.666999996 88.6358414 6.51000023 7134.41992 -0.532999992 88.6539307 6.55999994 7135.44824 -0.449999988 88.7009659 6.69000006 7138.12012 -0.400000006 88.7334824 6.78000021 7139.96973 -0.200000003 88.7623596 6.86000013 7141.61426 -0.400000006 88.7948151 6.94999981 7143.46484 -0.466300011 88.8272629 7.03999996 7145.31445 -0.567000031 88.8596725 7.13000011 7147.16504 -0.51700002 88.8884583 7.21000004 7148.80957 -0.400000006 88.9208145 7.30000019 7150.65918 -0.416299999 88.9531174 7.38999987 7152.50977 -0.232999995 88.9854126 7.48000002 7154.35938 -0.366699994 89.0176849 7.57000017 7156.20996 -0.48299998 89.0463257 7.6500001 7157.85449 -0.316000015 89.0821228 7.75 7159.90918 -0.334000021 89.1107101 7.82999992 7161.55371 -0.182999998 89.1428604 7.92000008 7163.4043 -0.200000003 89.1749573 8.01000023 7165.25391 -0.133699998 89.2070465 8.10000038 7167.10449 -0.333700001 89.2355423 8.18000031 7168.74902 -0.221200004 89.2604294 8.25 7170.1875 -0.283300012 89.29953 8.35999966 7172.44922 -0.25 89.3314896 8.44999981 7174.29883 -0.287 89.3953171 8.63000011 7177.99902 -0.25 89.4872742 8.89000034 7183.34375 -0.233999997 89.5261078 9. 7185.60449 -0.116700001 89.5824585 9.15999985 7188.89355 -0.25 89.6141434 9.25 7190.74414 -0.182999998 89.6422729 9.32999992 7192.38867 -0.0500000007 89.6738968 9.42000008 7194.23828 -0.183300003 89.7054749 9.51000023 7196.08887 -0.167000011 89.73703 9.60000038 7197.93848 -0.26700002 89.7685471 9.68999958 7199.78809 -0.282999992 89.7965469 9.77000046 7201.43262 -0.25 89.8280029 9.85999966 7203.2832 -0.317000002 89.859436 9.94999981 7205.13281 -0.25 89.9222183 10.1300001 7208.83301 -0.25 89.9500732 10.21 7210.47754 -0.167000011 89.9813843 10.3000002 7212.32715 -0.116999999 90.0161591 10.3999996 7214.38281 -0.184 90.0439529 10.4799995 7216.02734 -0.25 90.0752029 10.5699997 7217.87695 -0.167000011 90.1063995 10.6599998 7219.72656 -0.100000001 90.1341324 10.7399998 7221.37109 -0.183300003 90.1652908 10.8299999 7223.22168 -0.200000003 90.1791306 10.8699999 7224.04395 -0.184 90.1964264 10.9200001 7225.07129 -0.317000002 90.2240906 11. 7226.71582 -0.116999999 90.2586365 11.1000004 7228.77148 -0.166299999 90.2862549 11.1800003 7230.41602 -0.0663000047 90.3173218 11.2700005 7232.2666 -0.066700004 90.3483353 11.3599997 7234.11621 -0.0670000017 90.3793411 11.4499998 7235.9668 -0.134000003 90.4103317 11.54 7237.81641 -0.183300003 90.4412994 11.6300001 7239.66602 -0.0837000012 90.4688263 11.71 7241.31055 -0.132200003 90.4997635 11.8000002 7243.16113 -0.266600013 90.5306778 11.8900003 7245.01074 -0.316599995 90.5684586 12. 7247.27246 -0.313300014 90.5924988 12.0699997 7248.71094 -0.2333 90.6199341 12.1499996 7250.35547 -0.2667 90.6508102 12.2399998 7252.20605 -0.25030002 90.6816635 12.3299999 7254.05566 -0.2333 90.7125168 12.4200001 7255.90527 -0.200000003 90.7742081 12.6000004 7259.60547 -0.300300002 90.8084641 12.6999998 7261.66113 -0.184 90.8632584 12.8599997 7264.9502 -0.150000006 90.8940735 12.9499998 7266.80078 -0.216299996 90.9214935 13.0299997 7268.44531 -0.300300002 90.9523163 13.1199999 7270.29492 -0.333300024 90.983139 13.21 7272.14551 -0.180000007 91.0139618 13.3000002 7273.99512 -0.100000001 91.0448074 13.3900003 7275.8457 -0.0659999996 91.0756378 13.4799995 7277.69531 0.0503000021 91.1030655 13.5600004 7279.33984 0.116999999 91.1339111 13.6499996 7281.18945 0.0500000007 91.1647873 13.7399998 7283.04004 0.0833000019 91.1922379 13.8199997 7284.68457 0.0340000018 91.2265701 13.9200001 7286.74023 0.0170000009 91.2540283 14. 7288.38477 0.134000003 91.2883987 14.1000004 7290.44043 0.184 91.315918 14.1800003 7292.08496 -0.0500000007 91.3468857 14.2700005 7293.93457 1.49729999E-06 91.377861 14.3599997 7295.78418 0.0670000017 91.4364624 14.5299997 7299.2793 0.0839999989 91.4951553 14.6999998 7302.77344 0.100000001 91.5643616 14.8999996 7306.88477 0.0830000043 91.6510849 15.1499996 7312.02441 0.0654999986 91.6823959 15.2399998 7313.87402 0.0500000007 91.7137299 15.3299999 7315.72363 0.0332999974 91.7485962 15.4300003 7317.7793 0.0833000019 91.8044891 15.5900002 7321.06836 -0.0665999949 91.867569 15.7700005 7324.76855 0.0500000007 91.8991852 15.8599997 7326.61914 0.0500000007 91.9308548 15.9499998 7328.46875 0.100000001 92.0226212 16.2099991 7333.81348 -0.0332999974 92.054512 16.2999992 7335.66309 -0.0500000007 92.1148987 16.4699993 7339.1582 -0.0837000012 92.1469498 16.5599995 7341.00781 -0.166600004 92.1790619 16.6499996 7342.8584 -0.0500000007 92.2255707 16.7800007 7345.53027 -0.25 92.2722244 16.9099998 7348.20312 -0.0670000017 92.3046036 17. 7350.05273 -0.134000003 92.3406525 17.1000004 7352.1084 -0.0503000021 92.3695602 17.1800003 7353.75293 0.0837000012 92.4021683 17.2700005 7355.60254 -0.133300006 92.4311752 17.3500004 7357.24707 0.0670000017 92.4966888 17.5300007 7360.94727 0.166600004 92.5295639 17.6200008 7362.79688 0.166700006 92.5625 17.7099991 7364.64746 -0.0833000019 92.5955124 17.7999992 7366.49707 0.0500000007 92.6322784 17.8999996 7368.55273 0.100000001 92.6580734 17.9699993 7369.99121 0.25 92.6912918 18.0599995 7371.8418 0.0833000019 92.7246017 18.1499996 7373.69141 0.133300006 92.7579651 18.2399998 7375.54102 0.133300006 92.7914047 18.3299999 7377.3916 0.150000006 92.8547745 18.5 7380.88574 0.116999999 92.8884201 18.5900002 7382.73633 0.249699995 92.922142 18.6800003 7384.58594 0.217000008 92.955925 18.7700005 7386.43652 0.25 92.9860001 18.8500004 7388.08105 0.334000021 93.0198975 18.9400005 7389.93066 0.5 93.0425339 19. 7391.16406 0.529999971 93.0538712 19.0300007 7391.78125 0.283300012 93.0879059 19.1200008 7393.63086 0.116999999 93.1181946 19.2000008 7395.27539 0.370000005 93.1371536 19.25 7396.30273 0. 93.1865005 19.3799992 7398.97559 0.182999998 93.205513 19.4300003 7400.00293 0.100000001 93.2207336 19.4699993 7400.8252 0.0500000007 93.2511978 19.5499992 7402.46973 0.107000001 93.2893143 19.6499996 7404.52539 0.0500000007 93.3236771 19.7399998 7406.37598 0.182999998 93.3542328 19.8199997 7408.02051 0.316000015 93.3886414 19.9099998 7409.87012 0.303000003 gerris-snapshot-131206/doc/examples/tsunami/ganares.txt0000644000175100017510000007102212250371171020110 00000000000000-24.9833 4.728 -24.9167 4.914 -24.85 4.999 -24.7833 5.695 -24.7167 6.390 -24.65 7.085 -24.5833 7.375 -24.5167 7.666 -24.45 7.956 -24.3833 7.637 -24.3167 7.218 -24.25 6.494 -24.1833 5.770 -24.1167 5.251 -24.05 4.731 -23.9833 4.517 -23.9167 4.507 -23.85 4.498 -23.7833 5.098 -23.7167 5.393 -23.65 5.893 -23.5833 6.088 -23.5167 6.183 -23.45 6.279 -23.3833 6.374 -23.3167 6.369 -23.25 6.059 -23.1833 5.750 -23.1167 5.440 -23.05 5.335 -22.9833 4.826 -22.9167 5.331 -22.85 5.331 -22.7833 5.735 -22.7167 6.345 -22.65 6.955 -22.5833 7.259 -22.5167 7.159 -22.45 7.059 -22.3833 6.555 -22.3167 5.540 -22.25 4.935 -22.1833 3.821 -22.1167 3.216 -22.05 3.221 -21.9833 3.531 -21.9167 4.045 -21.85 4.864 -21.7833 5.683 -21.7167 6.403 -21.65 7.122 -21.5833 7.536 -21.5167 7.951 -21.45 7.960 -21.3833 7.970 -21.3167 7.979 -21.25 7.989 -21.1833 7.899 -21.1167 8.113 -21.05 8.023 -20.9833 7.932 -20.9167 7.842 -20.85 7.651 -20.7833 7.461 -20.7167 7.675 -20.65 7.790 -20.5833 7.804 -20.5167 7.919 -20.45 8.338 -20.3833 8.657 -20.3167 8.467 -20.25 8.481 -20.1833 8.191 -20.1167 7.595 -20.05 7.405 -19.9833 6.505 -19.9167 6.519 -19.85 6.229 -19.7833 5.939 -19.7167 5.953 -19.65 5.967 -19.5833 6.082 -19.5167 6.401 -19.45 6.720 -19.3833 6.530 -19.3167 6.239 -19.25 6.354 -19.1833 6.163 -19.1167 5.973 -19.05 5.478 -18.9833 5.592 -18.9167 5.402 -18.85 5.311 -18.7833 5.221 -18.7167 5.131 -18.65 5.040 -18.5833 4.340 -18.5167 4.350 -18.45 4.360 -18.3833 3.760 -18.3167 3.769 -18.25 3.574 -18.1833 3.684 -18.1167 3.488 -18.05 3.698 -17.9833 3.808 -17.9167 4.322 -17.85 4.632 -17.7833 4.941 -17.7167 5.251 -17.65 5.256 -17.5833 5.360 -17.5167 4.856 -17.45 4.656 -17.3833 4.251 -17.3167 3.846 -17.25 3.541 -17.1833 3.541 -17.1167 3.541 -17.05 4.151 -16.9833 4.251 -16.9167 4.656 -16.85 4.856 -16.7833 5.056 -16.7167 5.256 -16.65 5.556 -16.5833 5.551 -16.5167 5.851 -16.45 5.946 -16.3833 6.346 -16.3167 6.746 -16.25 6.941 -16.1833 6.832 -16.1167 6.822 -16.05 6.103 -15.9833 5.788 -15.9167 5.269 -15.85 4.955 -15.7833 4.740 -15.7167 4.626 -15.65 4.716 -15.5833 4.602 -15.5167 4.792 -15.45 4.778 -15.3833 4.763 -15.3167 4.749 -15.25 4.735 -15.1833 4.515 -15.1167 4.196 -15.05 4.382 -14.9833 3.858 -14.9167 3.639 -14.85 3.519 -14.7833 3.705 -14.7167 3.891 -14.65 3.771 -14.5833 3.752 -14.5167 3.328 -14.45 3.004 -14.3833 2.680 -14.3167 2.356 -14.25 2.032 -14.1833 2.013 -14.1167 1.789 -14.05 2.075 -13.9833 2.055 -13.9167 2.441 -13.85 2.727 -13.7833 3.112 -13.7167 3.398 -13.65 3.379 -13.5833 4.069 -13.5167 3.745 -13.45 3.726 -13.3833 3.707 -13.3167 3.687 -13.25 3.363 -13.1833 3.039 -13.1167 2.920 -13.05 3.106 -12.9833 3.391 -12.9167 3.477 -12.85 3.663 -12.7833 3.543 -12.7167 3.324 -12.65 3.410 -12.5833 3.495 -12.5167 3.176 -12.45 3.162 -12.3833 2.843 -12.3167 2.728 -12.25 3.019 -12.1833 3.109 -12.1167 3.299 -12.05 3.695 -11.9833 4.090 -11.9167 4.690 -11.85 4.985 -11.7833 4.975 -11.7167 4.866 -11.65 4.756 -11.5833 4.242 -11.5167 4.032 -11.45 3.822 -11.3833 3.513 -11.3167 3.813 -11.25 3.708 -11.1833 3.908 -11.1167 4.108 -11.05 4.513 -10.9833 4.818 -10.9167 5.122 -10.85 5.732 -10.7833 6.037 -10.7167 6.242 -10.65 6.042 -10.5833 6.146 -10.5167 5.642 -10.45 5.342 -10.3833 5.042 -10.3167 4.337 -10.25 3.937 -10.1833 4.046 -10.1167 3.851 -10.05 4.266 -9.98333 4.580 -9.91666 4.895 -9.84999 5.414 -9.78334 5.628 -9.71667 5.743 -9.65 5.957 -9.58333 5.971 -9.51668 5.781 -9.45001 5.491 -9.38333 5.405 -9.31666 5.319 -9.24999 4.929 -9.18334 4.743 -9.11667 4.963 -9.05 4.677 -8.98333 4.796 -8.91668 4.815 -8.85001 4.835 -8.78333 5.059 -8.71666 5.283 -8.64999 5.507 -8.58334 5.731 -8.51667 5.855 -8.45 5.979 -8.38333 6.103 -8.31668 6.227 -8.25001 6.351 -8.18333 6.375 -8.11666 6.399 -8.04999 6.423 -7.98334 6.447 -7.91667 6.166 -7.85 6.190 -7.78333 5.809 -7.71668 5.528 -7.65001 5.552 -7.58333 5.171 -7.51666 4.891 -7.44999 4.815 -7.38334 4.534 -7.31667 4.458 -3.24999 4.244 -3.18334 4.029 -3.11667 3.815 -3.05 3.296 -2.98333 2.876 -2.91668 2.762 -2.85001 2.443 -2.78333 2.328 -2.71666 2.414 -2.58334 1.876 -2.51667 1.656 -2.45 1.437 -2.38333 1.928 -2.31668 1.808 -2.25001 1.689 -2.18333 1.875 -2.11666 1.856 -2.04999 2.346 -1.98334 2.327 -1.91667 2.612 -1.85 2.693 -1.78333 2.674 -1.71668 2.755 -1.65001 2.431 -1.44999 3.183 -1.38334 3.568 -1.31667 4.259 -1.25 4.644 -1.18333 5.335 -1.11668 6.025 -1.05001 6.311 -0.983333 5.787 -0.916661 5.863 -0.849989 5.234 -0.783341 4.705 -0.716669 4.381 -0.649997 4.057 -0.583325 3.733 -0.516677 4.019 -0.450005 4.304 -0.383333 4.185 -0.316661 4.166 -0.249989 4.047 -0.183341 3.623 -0.116669 3.099 -0.0499973 2.879 0.0166747 2.660 0.0833227 2.441 0.149995 2.831 0.216667 3.122 0.283339 3.717 0.350011 4.517 0.416659 5.012 0.483331 5.203 0.550003 5.393 0.616675 5.483 0.683323 5.879 0.749995 5.564 0.816667 5.959 0.883339 5.545 0.950011 5.231 1.01666 5.426 1.08333 5.216 1.15 4.702 1.21667 4.797 1.28332 4.587 1.34999 4.583 1.41667 5.187 1.48334 5.692 1.55001 6.197 1.61666 6.907 1.68333 7.616 1.75 8.021 1.81667 8.426 1.88332 9.035 1.94999 8.935 2.01667 8.835 2.08334 8.431 2.15001 8.331 2.21666 8.131 2.28333 7.931 2.35 7.631 2.41667 8.245 2.48332 8.250 2.54999 8.459 2.61667 8.669 2.68334 9.083 2.75001 9.598 2.81666 9.707 2.88333 10.022 2.95 9.827 3.01667 9.836 3.08332 9.541 3.14999 8.841 3.21667 8.141 3.28334 8.355 3.35001 22.895 3.41666 64.463 3.48333 63.358 3.55 96.696 3.61667 43.775 3.68332 9.751 3.74999 14.643 3.81667 -37.769 3.88334 -41.107 3.95001 -30.120 4.01666 -41.993 4.08333 -30.701 4.15 15.543 4.21667 33.746 4.28332 10.291 4.34999 17.825 4.41667 22.311 4.48334 6.986 4.55001 2.023 4.61666 -3.853 4.68333 -16.131 4.75 -14.693 4.81667 1.681 4.88332 18.460 4.94999 1.305 5.01667 26.823 5.08334 12.411 5.15001 -0.376 5.21666 17.217 5.28333 16.012 5.35 -3.885 5.41667 11.979 5.48332 0.411 5.54999 -4.352 5.61667 -3.728 5.68334 -6.661 5.75001 -8.781 5.81666 0.173 5.88333 -0.222 5.95 5.684 6.01667 17.480 6.08332 21.352 6.14999 14.556 6.21667 17.514 6.28334 19.657 6.35001 4.122 6.41666 6.365 6.48333 0.988 6.55 -1.340 6.61667 -10.985 6.68332 -2.545 6.74999 2.541 6.81667 3.665 6.88334 5.194 6.95001 4.284 7.01666 4.084 7.08333 6.018 7.15 4.294 7.21667 9.680 7.28332 12.628 7.34999 1.556 7.41667 5.213 7.48334 10.090 7.55001 3.484 7.61666 1.756 7.68333 1.246 7.75 -0.992 7.81667 1.036 7.88332 7.737 7.94999 11.085 8.01667 11.385 8.08334 10.566 8.15001 8.832 8.21666 5.065 8.28333 4.041 8.35 0.579 8.41667 -2.479 8.48332 -4.622 8.54999 -5.241 8.61667 -2.713 8.68334 2.864 8.75001 9.965 8.81666 15.947 8.88333 13.394 8.95 13.380 9.01667 6.864 9.08332 6.950 9.14999 -1.294 9.21667 -7.609 9.28334 -12.096 9.35001 -11.401 9.41666 -3.085 9.48333 3.196 9.55 8.563 9.61667 9.968 9.68332 9.339 9.74999 2.005 9.81667 3.815 9.88334 -0.472 9.95001 -5.977 10.0167 -8.130 10.0833 -5.611 10.15 -2.482 10.2167 0.342 10.2833 10.481 10.35 14.524 10.4167 12.167 10.4833 7.066 10.55 6.842 10.6167 -1.207 10.6833 -3.565 10.75 -0.741 10.8167 -0.355 10.8833 -2.003 10.95 0.821 11.0167 4.255 11.0833 4.335 11.15 7.464 11.2167 9.983 11.2833 6.611 11.35 5.778 11.4167 4.539 11.4833 1.472 11.55 -0.376 11.6167 2.043 11.6833 -1.429 11.75 -2.362 11.8167 -5.225 11.8833 -6.358 11.95 -5.868 12.0167 -1.515 12.0833 3.752 12.15 6.481 12.2167 10.429 12.2833 8.281 12.35 8.776 12.4167 7.747 12.4833 2.756 12.55 -2.030 12.6167 -6.512 12.6833 -3.983 12.75 -3.383 12.8167 -2.578 12.8833 2.798 12.95 6.346 13.0167 9.795 13.0833 13.852 13.15 10.290 13.2167 8.456 13.2833 4.694 13.35 -1.507 13.4167 -3.746 13.4833 -7.913 13.55 -10.556 13.6167 -9.946 13.6833 -3.546 13.75 0.622 13.8167 9.361 13.8833 13.833 13.95 15.767 14.0167 17.905 14.0833 17.605 14.15 15.781 14.2167 11.419 14.2833 2.384 14.35 -0.150 14.4167 -4.712 14.4833 -7.041 14.55 -5.607 14.6167 -1.940 14.6833 4.980 14.75 7.533 14.8167 10.086 14.8833 15.687 14.95 12.958 15.0167 13.582 15.0833 12.377 15.15 5.891 15.2167 -0.391 15.2833 -1.086 15.35 -2.491 15.4167 -1.253 15.4833 3.339 15.55 6.406 15.6167 7.339 15.6833 11.526 15.75 13.883 15.8167 14.312 15.8833 13.012 15.95 11.003 16.0167 6.759 16.0833 3.835 16.15 1.421 16.2167 0.226 16.2833 -0.360 16.35 -0.031 16.4167 2.636 16.4833 6.927 16.55 8.680 16.6167 10.738 16.6833 11.881 16.75 9.976 16.8167 9.900 16.8833 6.776 16.95 3.652 17.0167 3.576 17.0833 2.281 17.2167 4.163 17.2833 6.830 17.35 7.973 17.4167 10.740 17.4833 12.798 17.55 9.674 17.6167 8.174 17.6833 7.284 21.75 6.110 21.8833 8.415 21.95 8.905 22.0167 8.076 22.0833 9.176 22.15 7.633 22.2167 13.610 22.2833 11.457 22.35 10.828 22.4833 10.485 22.55 9.956 22.6167 8.818 22.6833 7.070 22.75 6.846 22.8167 5.098 22.95 5.260 23.0167 6.760 23.0833 10.093 23.15 11.188 23.2167 12.488 23.2833 13.888 23.35 13.969 23.4167 12.931 23.4833 11.792 23.55 10.654 23.6167 8.701 23.6833 10.306 23.75 11.911 23.8167 14.430 23.8833 17.254 23.95 18.759 24.0167 17.011 24.0833 13.334 24.15 10.267 24.2167 5.675 24.2833 3.118 24.35 1.575 24.4167 1.151 24.4833 2.760 24.55 7.518 24.6167 11.566 24.6833 15.309 24.75 16.919 24.8167 16.295 24.8833 14.147 24.95 12.508 25.0167 9.446 25.0833 7.098 25.15 4.850 25.2167 2.807 25.2833 3.507 25.35 6.240 25.4167 10.193 25.4833 12.012 25.55 14.951 25.6167 16.975 25.6833 15.546 25.75 15.031 25.8167 13.907 25.8833 10.855 25.95 9.021 26.0167 8.002 26.0833 10.945 26.15 13.483 26.2167 15.412 26.2833 17.036 26.35 17.341 26.4167 15.512 26.4833 14.903 26.55 13.583 26.6167 13.079 26.6833 11.050 26.75 10.240 26.8167 10.650 26.8833 10.959 26.95 13.607 27.0167 15.746 27.0833 17.175 27.15 18.808 27.2167 19.527 27.2833 18.418 27.35 17.003 27.4167 14.270 27.4833 11.231 27.55 8.398 27.6167 7.698 27.6833 10.351 27.75 12.394 27.8167 17.385 27.8833 21.157 27.95 22.795 28.0167 22.810 28.0833 20.081 28.15 15.928 28.2167 11.575 28.2833 7.627 28.35 5.103 28.4167 5.423 28.4833 7.471 28.55 10.128 28.6167 14.210 28.6833 16.258 28.75 16.477 28.8167 15.072 28.8833 13.158 28.95 9.924 29.0167 6.995 29.0833 5.691 29.15 6.419 29.2167 5.929 29.2833 7.367 29.35 8.706 29.4167 9.130 29.4833 7.825 29.55 7.335 29.6167 6.335 29.6833 5.235 29.75 6.978 29.8167 9.026 29.8833 11.074 29.95 10.479 30.0167 9.479 30.0833 7.969 30.15 5.140 30.2167 3.021 30.2833 2.831 30.35 4.064 30.4167 5.093 30.4833 8.560 30.55 10.504 30.6167 11.023 30.6833 8.799 30.75 7.489 30.8167 5.570 30.8833 3.141 30.95 2.541 31.0167 3.160 31.0833 3.575 31.15 4.904 31.2167 6.332 31.2833 6.237 31.35 5.228 31.4167 4.218 31.4833 4.528 31.55 3.413 31.6167 3.518 31.6833 3.928 31.75 5.252 31.8167 4.237 31.8833 4.847 31.95 5.761 32.0167 5.152 32.0833 4.642 32.15 4.742 32.2167 4.537 32.2833 3.213 32.35 4.328 32.4167 5.237 32.4833 6.147 32.55 6.547 32.6167 7.556 32.6833 6.737 32.75 6.932 32.8167 6.213 32.8833 4.680 32.95 4.060 33.0167 3.136 33.0833 3.227 33.15 4.841 33.2167 5.946 33.2833 7.051 33.35 8.460 33.4167 7.836 33.4833 6.908 33.55 5.674 33.6167 5.760 33.6833 4.321 33.75 4.711 33.8167 5.711 33.8833 6.507 33.95 8.521 34.0167 10.331 34.0833 10.516 34.15 10.192 34.2167 7.125 34.2833 5.377 34.35 4.139 34.4167 4.219 34.4833 4.300 34.55 6.515 34.6167 9.034 34.6833 10.639 34.75 13.563 34.8167 15.472 34.8833 14.739 34.95 12.991 35.0167 11.038 35.0833 8.780 35.15 7.132 35.2167 6.603 35.2833 6.479 35.35 6.355 35.4167 7.146 35.4833 7.836 35.55 8.627 35.6167 8.403 35.6833 10.007 35.75 10.188 35.8167 10.879 35.8833 11.264 35.95 10.940 36.0167 10.411 36.0833 9.173 36.15 7.630 36.2167 6.696 36.2833 5.967 36.35 6.763 36.4167 6.643 36.4833 7.743 36.55 8.439 36.6167 9.439 36.6833 10.134 36.75 10.729 36.8167 11.019 36.8833 10.295 36.95 9.976 37.0167 9.152 37.0833 7.209 37.15 5.166 37.2167 4.242 37.2833 3.318 37.35 3.003 37.4167 3.808 37.4833 6.137 37.55 7.451 37.6167 10.595 37.6833 13.333 37.75 14.852 37.8167 15.052 37.8833 13.728 37.95 11.490 38.0167 8.846 38.0833 6.103 38.15 3.665 38.2167 2.446 38.2833 2.955 38.35 4.379 38.4167 7.227 38.4833 10.075 38.55 10.690 38.6167 10.899 38.6833 10.599 38.75 8.575 38.8167 7.261 38.8833 6.761 38.95 5.856 39.0167 5.866 39.0833 6.690 39.15 8.733 39.2167 9.862 39.2833 11.195 39.35 11.919 39.4167 11.019 39.4833 10.424 39.55 9.729 39.6167 8.424 39.6833 6.815 39.75 6.629 39.8167 6.139 39.8833 6.258 39.95 7.191 40.0167 6.906 40.0833 7.739 40.15 7.963 40.2167 7.273 40.2833 6.887 40.35 6.707 40.4167 6.526 40.4833 6.245 40.55 5.759 40.6167 5.174 40.6833 4.893 40.75 4.307 40.8167 3.317 40.8833 2.731 40.95 2.351 41.0167 2.579 41.0833 3.113 41.15 3.647 41.2167 5.095 41.2833 6.443 41.35 6.671 41.4167 5.681 41.4833 5.200 41.55 4.515 41.6167 2.915 41.6833 2.534 45.75 3.582 45.8167 3.368 45.8833 3.558 45.95 3.953 46.0167 4.244 46.0833 4.129 46.15 3.910 46.2167 3.896 46.2833 3.067 46.35 2.543 46.4167 2.628 46.4833 3.424 46.55 4.524 46.6167 6.233 46.6833 7.128 46.75 7.109 46.8167 7.395 46.8833 6.766 46.95 6.237 47.0167 5.818 47.0833 5.994 47.15 5.565 47.2167 6.560 47.2833 7.251 47.35 7.432 47.4167 7.817 47.55 5.945 47.6167 5.821 47.6833 5.087 47.75 4.863 47.8167 5.349 47.8833 5.835 47.95 5.711 48.0167 6.401 48.0833 6.582 48.15 6.053 48.2167 6.439 48.2833 5.400 48.35 4.262 48.4167 3.938 48.4833 4.628 48.55 4.709 48.6167 5.604 48.6833 6.195 48.75 6.480 48.8167 5.851 48.8833 6.037 48.95 5.308 49.0167 4.884 49.0833 5.070 49.15 5.460 49.2167 6.460 49.2833 7.665 49.35 8.665 49.4167 8.246 49.4833 8.536 49.55 8.117 49.6167 6.174 49.6833 5.145 49.75 3.407 49.8167 2.787 49.8833 2.878 49.95 4.087 50.0167 4.892 50.0833 6.916 50.15 8.026 50.2167 9.645 50.2833 9.740 50.35 10.140 50.4167 9.221 50.4833 8.507 50.55 8.097 50.6167 7.687 50.6833 7.787 50.75 8.802 50.8167 9.511 50.8833 10.426 50.95 10.631 51.0167 10.631 51.0833 10.431 51.15 10.026 51.2167 8.911 51.2833 7.697 51.35 7.702 51.4167 8.316 51.4833 8.831 51.55 10.259 51.6167 11.079 51.6833 11.798 51.75 12.722 51.8167 13.136 51.8833 12.841 51.95 11.936 52.0167 10.322 52.0833 9.012 52.15 7.703 52.2167 7.207 52.2833 7.017 52.35 7.131 52.4167 7.451 52.4833 8.075 52.55 8.699 52.6167 9.323 52.6833 9.032 52.75 8.947 52.8167 8.556 52.8833 8.166 52.95 7.471 53.0167 6.675 53.0833 5.980 53.15 5.185 53.2167 4.695 53.2833 4.509 53.35 4.323 53.4167 4.443 53.4833 4.867 53.55 5.291 53.6167 5.410 53.6833 5.529 53.75 5.853 53.8167 5.972 53.8833 5.482 53.95 5.296 54.0167 5.720 54.0833 5.230 54.15 4.839 54.2167 4.959 54.2833 5.178 54.35 5.297 54.4167 5.211 54.4833 5.735 54.55 6.260 54.6167 6.274 54.6833 6.898 54.75 7.117 54.8167 7.536 54.8833 6.636 54.95 5.836 55.0167 4.936 55.0833 4.236 55.15 4.046 55.2167 4.565 55.2833 4.780 55.35 5.399 55.4167 5.613 55.4833 5.318 55.55 5.732 55.6167 5.232 55.6833 4.123 55.75 3.113 55.8167 2.613 55.8833 2.313 55.95 2.318 56.0167 2.628 56.0833 2.328 56.15 2.128 56.2167 2.232 56.2833 1.828 56.35 1.728 56.4167 2.032 56.4833 2.337 56.55 2.642 56.6167 3.047 56.6833 3.247 56.75 3.042 56.8167 2.328 56.8833 1.713 56.95 1.708 57.0167 1.094 57.0833 0.884 57.15 1.384 57.2167 1.480 57.2833 2.284 57.35 2.580 57.4167 2.265 57.4833 1.646 57.55 1.127 57.6167 0.912 57.6833 0.698 57.75 0.888 57.8167 1.484 57.8833 1.979 57.95 2.269 58.0167 3.474 58.0833 3.560 58.15 3.950 58.2167 3.731 58.2833 3.611 58.35 3.797 58.4167 3.983 58.4833 4.473 58.55 4.454 58.6167 4.435 58.6833 4.415 58.75 4.191 58.8167 4.172 58.8833 4.253 58.95 4.639 59.0167 4.719 59.0833 5.105 59.15 5.591 59.2167 6.586 59.2833 7.071 59.35 6.847 59.4167 7.028 59.4833 6.904 59.55 6.780 59.6167 6.047 59.6833 5.213 59.75 4.784 59.8167 3.746 59.8833 3.622 59.95 3.193 60.0167 3.274 60.0833 3.455 60.15 4.145 60.2167 4.226 60.2833 4.307 60.35 4.083 60.4167 3.859 60.4833 2.620 60.55 2.091 60.6167 1.463 60.6833 1.443 60.75 1.629 60.8167 1.915 60.8833 2.710 60.95 3.405 61.0167 4.200 61.0833 4.286 61.15 4.067 61.2167 3.443 61.2833 2.819 61.35 2.195 61.4167 1.775 61.4833 1.661 61.55 1.751 61.6167 2.146 61.6833 2.846 61.75 3.446 61.8167 3.742 61.8833 3.632 61.95 3.522 62.0167 3.313 62.0833 3.408 62.15 3.503 62.2167 3.498 62.2833 3.698 62.35 3.594 62.4167 3.794 62.4833 3.894 62.55 4.298 62.6167 4.603 62.6833 4.603 62.75 4.808 62.8167 4.913 62.8833 4.813 62.95 5.222 63.0167 5.532 63.0833 5.232 63.15 5.442 63.2167 5.956 63.2833 5.761 63.35 5.870 63.4167 5.980 63.4833 5.685 63.55 4.985 63.6167 4.995 63.6833 4.499 63.75 4.409 63.8167 4.728 63.8833 4.843 63.95 5.467 64.0167 5.786 64.0833 6.005 64.15 6.224 64.2167 6.343 64.2833 6.463 64.35 5.972 64.4167 5.991 64.4833 5.401 64.55 5.115 64.6167 4.730 64.6833 4.344 64.75 4.263 64.8167 3.778 64.8833 3.902 64.95 3.721 65.0167 3.540 65.0833 3.564 65.15 3.688 65.2167 3.407 65.2833 3.027 65.35 3.051 65.4167 2.770 65.4833 2.694 65.55 2.618 65.6167 2.847 65.6833 3.480 65.75 4.319 65.8167 4.852 65.8833 5.386 65.95 5.210 66.0167 4.524 66.0833 4.143 66.15 3.458 66.2167 2.772 66.2833 2.796 66.35 2.720 66.4167 3.254 66.4833 3.583 66.55 3.202 66.6167 -0.432 66.6833 2.640 70.75 0.738 70.8167 0.824 70.8833 1.214 70.95 2.314 71.0167 2.609 71.0833 3.600 71.15 4.090 71.2167 4.985 71.2833 4.966 71.35 5.252 71.4167 4.928 71.4833 5.313 71.55 5.699 71.6167 5.780 71.6833 6.165 71.75 6.551 71.8167 6.632 71.8833 6.408 71.95 6.284 72.0167 5.755 72.0833 5.326 72.15 5.102 72.2167 4.368 72.2833 4.244 72.35 4.325 72.4167 3.896 72.4833 3.672 72.55 4.158 72.6167 4.543 72.6833 5.234 72.75 5.315 72.8167 5.700 72.8833 5.171 72.95 4.847 73.0167 4.928 73.0833 4.299 73.15 3.975 73.2167 3.956 73.2833 3.937 73.35 3.513 73.4167 3.699 73.4833 3.579 73.55 3.460 73.6167 3.546 73.6833 3.327 73.75 3.312 73.8167 3.703 73.8833 3.993 73.95 4.283 74.0167 4.169 74.0833 4.359 74.15 4.145 74.2167 4.640 74.2833 4.326 74.35 4.416 74.4167 4.407 74.4833 4.702 74.55 4.592 74.6167 5.092 74.6833 4.883 74.75 5.283 74.8167 5.073 74.8833 5.373 74.95 5.673 75.0167 6.178 75.0833 6.378 75.15 6.883 75.2167 6.678 75.2833 6.678 75.35 6.473 75.4167 6.373 75.4833 6.068 75.55 6.273 75.6167 6.073 75.6833 6.178 75.75 6.283 75.8167 6.287 75.8833 6.292 75.95 6.197 76.0167 6.102 76.0833 6.007 76.15 5.811 76.2167 5.616 76.2833 6.031 76.35 6.040 76.4167 6.559 76.4833 6.874 76.55 7.393 76.6167 7.607 76.6833 8.027 76.75 8.141 76.8167 8.255 76.8833 7.965 76.95 7.470 77.0167 6.875 77.0833 6.179 77.15 5.584 77.2167 4.584 77.2833 3.889 77.35 4.108 77.4167 4.327 77.4833 5.056 77.55 5.785 77.6167 6.614 77.6833 7.038 77.75 7.157 77.8167 6.667 77.8833 6.176 77.95 5.586 78.0167 4.791 78.0833 4.605 78.15 4.419 78.2167 4.539 78.2833 4.558 78.35 4.677 78.4167 4.491 78.4833 4.306 78.55 3.815 78.6167 3.325 78.6833 2.630 78.75 2.444 78.8167 2.663 78.8833 3.187 78.95 3.407 79.0167 4.235 79.0833 5.064 79.15 5.384 79.2167 5.298 79.2833 5.412 79.35 5.122 79.4167 4.527 79.4833 4.336 79.55 3.841 79.6167 4.056 79.6833 4.270 79.75 4.180 79.8167 4.089 79.8833 4.404 79.95 4.413 80.0167 3.813 80.0833 3.923 80.15 3.728 80.2167 3.937 80.2833 3.742 80.35 3.747 80.4167 3.956 80.4833 3.656 80.55 3.456 80.6167 3.156 80.6833 2.752 80.75 2.552 80.8167 2.147 80.8833 2.147 80.95 2.656 81.0167 3.061 81.0833 2.756 81.15 3.466 81.2167 3.056 81.2833 2.952 81.35 2.542 81.4167 1.928 81.4833 1.313 81.55 1.104 81.6167 1.199 81.6833 0.989 81.75 1.489 81.8167 1.989 81.8833 2.284 81.95 2.884 82.0167 2.875 82.0833 3.270 82.15 3.056 82.2167 3.451 82.2833 3.032 82.35 2.712 82.4167 2.293 82.4833 2.279 82.55 2.669 82.6167 2.960 82.6833 3.655 82.75 4.045 82.8167 4.231 82.8833 4.721 82.95 4.602 83.0167 3.873 83.0833 3.549 83.15 2.920 83.2167 2.596 83.2833 2.272 83.35 2.558 83.4167 2.334 83.4833 3.024 83.55 3.410 83.6167 3.491 83.6833 4.486 83.75 4.262 83.8167 4.038 83.8833 4.219 83.95 3.995 84.0167 4.175 84.0833 3.951 84.15 4.132 84.2167 3.908 84.2833 3.784 84.35 3.560 84.4167 3.641 84.4833 3.722 84.55 3.903 84.6167 3.983 84.6833 4.064 84.75 4.655 84.8167 5.040 84.8833 5.326 84.95 5.611 85.0167 5.592 85.0833 6.183 85.15 6.468 85.2167 6.349 85.2833 6.535 85.35 6.720 85.4167 6.196 85.4833 6.282 85.55 6.367 85.6167 6.453 85.6833 6.134 85.75 6.019 85.8167 5.700 85.8833 5.586 85.95 5.776 86.0167 5.562 86.0833 5.957 86.15 6.252 86.2167 6.547 86.2833 6.843 86.35 7.038 86.4167 7.233 86.4833 7.328 86.55 6.814 86.6167 6.299 86.6833 6.295 86.75 6.190 86.8167 6.085 86.8833 5.980 86.95 6.080 87.0167 6.180 87.0833 5.875 87.15 5.875 87.2167 6.080 87.2833 5.980 87.35 6.085 87.4167 5.885 87.4833 5.990 87.55 5.690 87.6167 6.204 87.6833 6.414 87.75 6.623 87.8167 6.733 87.8833 6.843 87.95 6.852 88.0167 6.557 88.0833 6.467 88.15 6.071 88.2167 5.676 88.2833 5.181 88.35 5.295 88.4167 5.310 88.4833 5.324 88.55 5.643 88.6167 5.558 88.6833 5.777 88.75 6.301 88.8167 6.115 88.8833 5.930 88.95 5.949 89.0167 5.968 89.0833 5.987 89.15 6.311 89.2167 6.231 89.2833 6.150 89.35 6.069 89.4167 5.379 89.4833 4.893 89.55 3.188 89.6167 3.617 89.6833 3.131 89.8167 2.570 89.8833 2.694 89.95 3.023 90.0167 2.742 90.0833 3.375 90.15 3.299 90.2167 3.628 90.2833 3.957 90.35 3.981 90.4167 3.905 90.4833 3.624 90.55 3.648 90.6167 3.267 90.6833 3.291 93.75 1.616 93.8833 1.411 93.95 2.120 94.0167 2.930 94.0833 2.825 94.15 2.820 94.2167 2.816 94.2833 2.811 94.35 2.906 94.4167 2.796 94.4833 2.892 94.55 2.272 94.6167 2.468 94.6833 2.458 94.75 3.158 94.8833 3.948 94.95 4.444 95.0167 4.839 95.0833 5.129 95.15 5.420 95.2167 5.405 95.2833 4.881 95.35 4.562 95.4167 4.648 95.4833 5.138 95.55 4.919 95.6167 5.409 95.8167 7.385 95.8833 7.571 95.95 7.956 96.0833 7.004 96.15 7.084 96.35 6.922 96.4167 7.003 96.4833 7.084 96.55 6.860 96.6167 7.245 96.6833 7.326 96.75 7.102 96.8167 6.878 96.8833 6.754 96.95 6.835 97.0167 6.915 97.0833 6.896 97.15 6.977 97.2167 7.363 97.2833 7.648 97.35 8.034 97.4167 8.015 97.4833 7.995 97.55 7.671 97.6167 7.043 97.6833 6.719 97.75 6.295 97.8167 5.566 97.8833 5.142 97.95 4.923 98.0167 4.803 98.0833 5.194 98.15 5.279 98.2167 5.570 98.2833 6.165 98.35 6.455 98.4167 6.746 98.4833 6.936 98.55 7.127 98.6167 7.317 98.6833 7.103 98.75 6.888 98.8167 6.879 98.8833 6.564 98.95 6.859 99.0167 6.445 99.0833 6.640 99.15 6.835 99.2167 6.626 99.2833 6.721 99.35 6.716 99.4167 7.321 99.4833 7.216 99.55 7.821 99.6167 7.921 99.6833 7.816 99.75 7.816 99.8167 7.611 99.8833 7.002 99.95 6.697 100.017 6.292 100.083 5.887 100.15 5.383 100.217 5.183 100.283 4.883 100.35 5.292 100.417 5.502 100.483 6.116 100.55 6.631 100.617 6.740 100.683 6.545 100.75 6.350 100.817 5.850 100.883 5.250 100.95 4.245 101.017 3.950 101.083 3.555 101.15 3.769 101.217 3.883 101.283 4.303 101.35 4.417 101.417 4.836 101.483 4.851 101.55 4.865 101.617 4.575 101.683 4.284 101.75 3.894 101.817 3.808 101.883 3.418 101.95 3.332 102.017 3.551 102.083 3.771 102.15 3.890 102.217 3.704 102.283 3.923 102.35 3.738 102.417 3.857 102.483 3.976 102.55 3.791 102.617 3.605 102.683 3.419 102.75 3.234 102.817 3.453 102.883 3.572 102.95 3.691 103.017 3.811 103.083 4.030 103.15 4.149 103.217 4.063 103.283 4.283 103.35 3.892 103.417 3.197 103.483 2.502 103.55 2.211 103.617 1.921 103.683 1.935 103.75 1.645 103.817 1.760 103.883 1.774 103.95 2.498 104.017 2.712 104.083 2.217 104.15 2.127 104.217 1.732 104.283 1.436 104.35 1.041 104.417 1.051 104.483 0.856 104.55 1.270 104.617 1.380 104.683 1.489 104.75 1.394 104.817 1.604 104.883 1.304 104.95 1.308 105.017 1.008 105.083 0.708 105.15 0.813 105.217 1.018 105.283 1.223 105.35 1.428 105.417 1.632 105.483 1.937 105.55 2.342 105.617 2.037 105.683 2.137 105.75 2.337 105.817 1.928 105.883 1.213 105.95 1.208 106.017 1.508 106.083 1.504 106.15 1.904 106.217 2.404 106.283 2.804 106.35 2.999 106.417 3.599 106.483 3.489 106.55 3.480 106.617 3.570 106.683 3.356 106.75 3.446 106.817 3.536 106.883 4.032 106.95 4.222 107.017 4.208 107.083 4.803 107.15 4.788 107.217 5.079 107.283 5.469 107.35 5.250 107.417 5.031 107.483 5.216 107.55 5.402 107.617 5.283 107.683 5.163 107.75 5.044 107.817 5.025 107.883 4.906 107.95 5.496 108.017 5.477 108.083 6.167 108.15 6.453 108.217 6.739 108.283 6.819 108.35 6.800 108.417 6.881 108.483 6.352 108.55 6.638 108.617 6.414 108.683 6.395 108.75 6.171 108.817 5.947 108.883 5.623 108.95 5.399 109.017 5.075 109.083 4.751 109.15 4.731 109.217 4.407 109.283 4.693 109.35 4.674 109.417 4.859 109.483 4.840 109.55 4.721 109.617 4.602 109.683 3.773 109.75 3.654 109.817 3.435 109.883 3.215 109.95 3.201 110.017 3.187 110.083 3.477 110.15 3.767 110.217 4.263 110.283 4.453 110.35 5.253 110.417 5.039 110.483 4.824 110.55 4.305 110.617 3.686 110.683 2.762 110.75 2.043 110.817 1.323 110.883 1.114 110.95 1.004 111.017 0.999 111.083 1.704 111.15 2.004 111.217 2.204 111.283 2.709 111.35 3.214 111.417 3.314 111.483 3.414 111.55 3.109 111.617 2.804 111.683 2.704 111.75 2.299 111.817 1.895 111.883 1.999 111.95 2.409 112.017 2.414 112.083 2.723 112.15 3.238 112.217 3.752 112.283 3.962 112.35 4.071 112.417 4.181 112.483 3.886 112.55 3.895 112.617 3.600 112.683 3.205 112.817 2.619 112.883 2.124 112.95 1.629 113.017 1.643 113.083 1.658 113.15 1.672 113.217 1.891 113.283 2.111 113.35 2.025 113.417 2.144 113.483 2.668 113.55 2.687 113.617 2.502 113.683 2.216 113.75 2.235 113.817 2.559 113.883 1.664 113.95 2.193 114.017 2.112 114.083 1.727 114.15 1.341 114.217 1.260 114.283 0.470 114.35 0.389 114.417 0.513 114.483 0.332 114.55 -0.153 114.617 0.885 114.683 1.009 114.75 1.133 114.817 -0.572 114.883 1.076 114.95 1.505 115.017 0.410 115.083 0.739 115.15 1.472 115.217 0.682 115.283 0.806 115.35 0.725 115.417 0.849 115.483 0.973 115.55 0.892 115.617 0.811 115.683 0.326 118.75 1.048 118.817 1.753 118.883 2.153 118.95 2.553 119.017 3.058 119.083 3.858 119.15 4.053 119.217 4.348 119.283 4.948 119.35 5.039 119.417 5.739 119.483 6.134 119.55 6.934 119.617 7.734 119.683 8.229 119.75 4.252 119.817 4.238 119.883 4.224 119.95 4.309 120.017 4.090 120.083 4.176 120.15 3.956 120.217 3.837 120.283 4.023 120.35 4.208 120.417 4.394 120.483 4.275 120.55 4.560 120.617 4.746 120.683 5.032 120.75 4.708 120.817 4.079 120.883 4.364 120.95 4.040 121.017 3.816 121.083 3.797 121.15 4.083 121.217 4.163 121.283 4.144 121.35 4.530 121.417 4.815 121.483 4.491 121.55 4.777 121.617 4.758 121.683 5.143 121.75 5.024 121.817 4.395 121.883 4.071 121.95 3.443 122.017 3.019 122.083 2.899 122.15 2.780 122.217 2.356 122.283 2.542 122.35 2.627 122.417 3.018 122.483 3.103 122.55 3.494 122.617 3.579 122.683 3.565 122.75 3.551 122.817 3.131 122.883 2.812 122.95 2.088 123.017 1.364 123.083 0.845 123.15 0.631 123.217 1.026 123.283 1.321 123.35 1.616 123.417 2.216 123.483 2.411 123.55 2.911 123.617 3.411 123.683 3.507 123.75 3.297 123.817 3.087 123.883 2.473 123.95 2.163 124.017 1.754 124.083 1.649 124.15 1.544 124.217 1.339 124.283 1.439 124.35 1.744 124.417 2.049 124.483 2.963 124.55 3.473 124.617 3.678 124.683 4.087 124.75 3.887 124.817 3.992 124.883 3.387 124.95 3.392 125.017 3.092 125.083 2.692 125.15 1.987 125.217 1.487 125.283 1.597 125.35 1.402 125.417 1.411 125.483 1.826 125.55 2.040 125.617 2.355 125.683 2.569 125.75 2.479 125.817 2.388 125.883 2.503 125.95 2.007 126.017 1.817 126.083 1.931 126.15 1.946 126.217 2.265 126.283 2.889 126.35 3.513 126.417 4.137 126.483 4.356 126.55 4.675 126.617 4.285 126.683 3.895 126.75 3.809 126.817 3.419 126.883 2.723 126.95 2.638 127.017 2.552 127.083 2.771 127.15 2.586 127.217 2.805 127.283 2.719 127.35 2.634 127.417 2.853 127.483 2.767 127.55 2.987 127.617 2.901 127.683 2.206 127.75 2.120 127.817 2.439 127.883 2.454 127.95 2.368 128.017 2.383 128.083 2.497 128.15 2.207 128.217 2.016 128.283 1.421 128.35 1.535 128.417 0.835 128.483 0.950 128.55 1.164 128.617 1.379 128.683 1.288 128.75 1.298 128.817 1.308 128.883 1.317 128.95 0.717 129.017 0.522 129.083 0.327 129.15 0.232 129.217 -0.268 129.283 -0.364 129.35 -0.359 129.417 -0.454 129.483 -0.349 129.55 -0.040 129.617 -0.240 129.683 -0.440 129.75 -0.335 129.817 -0.130 129.883 -0.230 129.95 -0.025 130.017 -0.025 130.083 -0.025 130.15 -0.230 130.217 -0.435 130.283 -0.335 130.35 -0.135 130.417 -0.240 130.483 -0.344 130.55 0.260 130.617 0.560 130.683 1.165 130.75 1.260 130.817 1.356 130.883 1.756 130.95 1.951 131.017 1.841 131.083 1.732 131.15 2.027 131.217 2.017 131.283 2.008 131.35 2.098 131.417 2.493 131.483 2.279 131.55 2.469 131.617 2.560 131.683 2.545 131.75 2.735 131.817 3.026 131.883 3.216 131.95 3.607 132.017 3.592 132.083 3.578 132.15 3.663 132.217 3.749 132.283 3.530 132.35 3.411 132.417 3.191 132.483 3.072 132.55 3.258 132.617 3.648 132.683 4.139 132.75 4.424 132.817 4.610 132.883 4.491 132.95 4.067 133.017 4.047 133.083 3.928 133.15 3.504 133.217 3.485 133.283 3.366 133.35 3.247 133.417 3.127 133.483 3.413 133.55 3.294 133.617 3.479 133.683 3.870 133.75 3.751 133.817 3.936 133.883 4.022 133.95 3.598 134.017 3.379 134.083 3.159 134.15 2.840 134.217 2.621 134.283 1.997 134.35 1.983 134.417 2.273 134.483 2.463 134.55 2.754 134.617 2.844 134.683 3.339 134.75 3.125 134.817 3.315 134.883 3.306 134.95 3.396 135.017 3.082 135.083 2.667 135.15 2.353 135.217 2.243 135.283 1.829 135.35 1.619 135.417 1.410 135.483 1.100 135.55 0.891 135.617 0.786 135.683 0.781 135.75 0.981 135.817 1.386 135.883 1.586 135.95 1.686 136.017 1.686 136.083 1.381 136.15 1.076 136.217 0.671 136.283 0.267 136.35 0.067 136.417 -0.033 136.483 -0.029 136.55 0.076 136.617 0.081 136.683 -0.014 136.75 0.195 136.817 0.100 136.883 0.310 136.95 0.419 137.017 -0.081 137.083 -0.071 137.15 -0.061 137.217 0.253 137.283 0.163 137.35 0.172 137.417 -0.323 137.483 -0.413 137.55 -0.604 137.617 -0.489 137.683 -0.475 137.75 -0.361 137.817 -0.041 137.883 0.178 137.95 0.802 138.017 1.326 138.15 1.459 138.217 1.579 138.283 1.493 138.35 1.307 138.417 1.122 138.483 0.531 138.55 0.346 138.617 0.060 138.683 0.179 138.817 0.218 138.883 0.542 138.95 1.071 139.017 1.395 139.083 1.719 139.15 1.943 139.217 1.962 139.283 1.576 139.35 1.900 139.417 1.819 139.483 1.534 139.55 1.453 139.617 1.167 139.683 0.782 gerris-snapshot-131206/doc/examples/tsunami/maleres.txt0000644000175100017510000010534712250371171020130 00000000000000-24.9833 1.210 -24.9167 1.410 -24.85 1.400 -24.7833 1.086 -24.7167 1.381 -24.65 0.662 -24.5833 1.162 -24.5167 1.052 -24.45 0.638 -24.3833 1.038 -24.3167 1.133 -24.25 0.924 -24.1833 1.224 -24.1167 1.624 -24.05 1.619 -23.9833 1.919 -23.9167 1.509 -23.85 1.404 -23.7833 1.300 -23.7167 1.195 -23.65 0.990 -23.5833 1.090 -23.5167 1.190 -23.45 0.580 -23.3833 0.885 -23.3167 0.885 -23.25 0.580 -23.1833 0.480 -23.1167 0.075 -23.05 0.280 -22.9833 -0.225 -22.9167 -0.425 -22.85 -0.015 -22.7833 -0.215 -22.7167 0.195 -22.65 -0.105 -22.5833 -0.100 -22.5167 -0.096 -22.45 -0.396 -22.3833 -0.086 -22.3167 -0.181 -22.25 -0.581 -22.1833 -0.372 -22.1167 -0.772 -22.05 -0.257 -21.9833 0.257 -21.9167 0.062 -21.85 0.272 -21.7833 0.076 -21.7167 0.186 -21.65 -0.314 -21.5833 -0.409 -21.5167 -0.300 -21.45 0.115 -21.3833 -0.080 -21.3167 -0.276 -21.25 0.039 -21.1833 0.148 -21.1167 -0.047 -21.05 0.368 -20.9833 -0.132 -20.9167 -0.328 -20.85 -0.523 -20.7833 -0.208 -20.7167 -0.708 -20.65 0.011 -20.5833 -0.184 -20.5167 -0.075 -20.45 0.035 -20.3833 -0.160 -20.3167 -0.356 -20.25 -0.146 -20.1833 0.268 -20.1167 0.378 -20.05 0.792 -19.9833 0.697 -19.9167 0.502 -19.85 1.321 -19.7833 1.226 -19.7167 1.436 -19.65 1.545 -19.5833 1.145 -19.5167 1.150 -19.45 1.055 -19.3833 0.960 -19.3167 1.574 -19.25 0.869 -19.1833 0.874 -19.1167 1.184 -19.05 1.188 -18.9833 1.598 -18.9167 1.298 -18.85 1.403 -18.7833 1.812 -18.7167 1.612 -18.65 1.108 -18.5833 2.227 -18.5167 2.027 -18.45 1.927 -18.3833 1.827 -18.3167 1.827 -18.25 1.422 -18.1833 1.422 -18.1167 1.727 -18.05 2.132 -17.9833 1.827 -17.9167 1.927 -17.85 1.822 -17.7833 2.227 -17.7167 1.817 -17.65 1.712 -17.5833 1.303 -17.5167 1.298 -17.45 1.293 -17.3833 1.288 -17.3167 1.284 -17.25 1.379 -17.1833 1.474 -17.1167 1.264 -17.05 1.764 -16.9833 1.350 -16.9167 1.240 -16.85 0.826 -16.7833 1.731 -16.7167 1.416 -16.65 1.407 -16.5833 1.397 -16.5167 1.183 -16.45 1.578 -16.3833 1.364 -16.3167 0.944 -16.25 1.035 -16.1833 1.530 -16.1167 1.416 -16.05 1.401 -15.9833 1.592 -15.9167 1.577 -15.85 1.258 -15.7833 1.853 -15.7167 0.924 -15.65 2.129 -15.5833 2.215 -15.5167 2.505 -15.45 2.286 -15.3833 2.676 -15.3167 2.457 -15.25 1.933 -15.1833 2.324 -15.1167 2.104 -15.05 2.800 -14.9833 2.580 -14.9167 2.766 -14.85 2.851 -14.7833 2.632 -14.7167 2.718 -14.65 3.108 -14.5833 2.684 -14.5167 2.465 -14.45 3.465 -14.3833 3.551 -14.3167 2.927 -14.25 3.622 -14.1833 3.403 -14.1167 3.388 -14.05 3.474 -13.9833 3.764 -13.9167 3.445 -13.85 3.735 -13.7833 3.721 -13.7167 4.216 -13.65 3.797 -13.5833 3.683 -13.5167 4.178 -13.45 3.759 -13.3833 3.849 -13.3167 4.244 -13.25 4.030 -13.1833 4.425 -13.1167 4.111 -13.05 4.101 -12.9833 4.091 -12.9167 3.982 -12.85 3.567 -12.7833 3.458 -12.7167 3.653 -12.65 3.748 -12.5833 3.539 -12.5167 3.229 -12.45 3.529 -12.3833 3.829 -12.3167 3.519 -12.25 4.024 -12.1833 3.515 -12.1167 4.019 -12.05 4.119 -11.9833 4.119 -11.9167 4.729 -11.85 4.119 -11.7833 4.119 -11.7167 3.715 -11.65 3.819 -11.5833 4.024 -11.5167 3.724 -11.45 3.829 -11.3833 3.529 -11.3167 3.534 -11.25 3.439 -11.1833 3.953 -11.1167 4.063 -11.05 4.172 -10.9833 3.977 -10.9167 3.682 -10.85 3.691 -10.7833 3.396 -10.7167 3.001 -10.65 2.911 -10.5833 2.820 -10.5167 2.935 -10.45 2.744 -10.3833 2.759 -10.3167 2.773 -10.25 3.092 -10.1833 3.107 -10.1167 3.021 -10.05 2.935 -9.98333 2.545 -9.91666 2.764 -9.84999 2.579 -9.78334 2.393 -9.71667 2.512 -9.65 2.327 -9.58333 1.736 -9.51668 2.160 -9.45001 2.179 -9.38333 1.894 -9.31666 1.913 -9.24999 1.832 -9.18334 1.547 -9.11667 1.161 -9.05 1.180 -8.98333 1.404 -8.91668 1.324 -8.85001 1.243 -8.78333 1.162 -8.71666 1.081 -8.64999 1.610 -8.58334 0.920 -8.51667 1.144 -8.45 1.368 -8.38333 1.492 -8.31668 1.411 -8.25001 1.635 -8.18333 1.554 -8.11666 1.778 -8.04999 1.697 -7.98334 2.226 -7.91667 2.450 -7.85 1.760 -7.78333 1.374 -7.71668 1.293 -7.65001 1.312 -7.58333 1.232 -7.51666 1.556 -7.44999 1.270 -7.38334 0.984 -7.31667 1.308 -7.25 1.328 -7.18333 1.042 -7.11668 0.856 -7.05001 0.876 -6.98333 0.690 -6.91666 0.809 -6.84999 0.419 -6.78334 0.538 -6.71667 0.757 -6.65 0.672 -6.58333 0.991 -6.51668 0.600 -6.45001 0.920 -6.38333 0.629 -6.31666 0.439 -6.24999 0.553 -6.18334 0.668 -6.11667 0.172 -6.05 0.692 -5.98333 0.296 -5.91668 0.306 -5.85001 0.620 -5.78333 0.630 -5.71666 0.435 -5.64999 0.544 -5.58334 0.654 -5.51667 1.168 -5.45 1.073 -5.38333 1.383 -5.31668 1.692 -5.25001 1.697 -5.18333 1.802 -4.91667 1.302 -4.85 0.997 -4.78333 1.402 -4.71668 0.792 -4.65001 0.892 -4.58333 1.092 -4.44999 0.578 -4.25 0.259 -4.18333 0.354 -4.11668 0.549 -4.05001 0.340 -3.98333 0.230 -3.91666 0.730 -3.84999 0.416 -3.78334 0.711 -3.71667 0.092 -3.65 0.792 -3.58333 0.477 -3.51668 0.668 -3.45001 1.063 -3.38333 0.948 -3.31666 0.834 -3.24999 1.329 -3.18334 0.910 -3.11667 1.505 -3.05 1.491 -2.98333 1.476 -2.91668 1.767 -2.85001 1.448 -2.78333 1.838 -2.71666 1.519 -2.64999 1.909 -2.58334 1.385 -2.51667 2.080 -2.45 2.471 -2.38333 2.556 -2.31668 2.437 -2.25001 2.523 -2.18333 2.608 -2.11666 2.389 -2.04999 2.575 -1.98334 2.356 -1.91667 2.541 -1.85 2.932 -1.78333 3.322 -1.71668 3.508 -1.65001 3.593 -1.58333 3.374 -1.51666 3.155 -1.44999 3.545 -1.38334 3.326 -1.31667 3.412 -1.25 3.092 -1.18333 2.873 -1.11668 2.859 -1.05001 3.149 -0.983333 2.830 -0.916661 3.425 -0.849989 3.411 -0.783341 3.296 -0.716669 3.587 -0.649997 3.472 -0.583325 3.358 -0.516677 3.548 -0.450005 3.334 -0.383333 3.424 -0.316661 3.210 -0.249989 3.300 -0.183341 3.596 -0.116669 3.686 -0.0499973 3.372 0.0166747 3.567 0.0833227 3.557 0.149995 4.057 0.216667 3.848 0.283339 3.433 0.350011 3.833 0.416659 3.319 0.483331 4.024 0.550003 3.409 0.616675 4.014 0.683323 3.604 0.749995 3.295 0.816667 3.190 0.883339 2.985 0.950011 2.780 1.01666 3.185 1.08333 2.980 1.15 2.675 1.21667 2.775 1.28332 2.675 1.34999 2.675 1.41667 2.575 1.48334 2.475 1.55001 1.971 1.61666 2.380 1.68333 1.571 1.75 1.980 1.81667 2.085 1.88332 2.395 1.94999 2.400 2.01667 2.609 2.08334 2.614 2.15001 1.909 2.21666 2.119 2.28333 2.328 2.35 2.843 2.41667 2.443 2.48332 2.552 2.54999 2.357 2.61667 2.467 2.68334 2.576 2.75001 2.686 2.81666 2.186 2.88333 2.296 2.95 2.000 3.01667 1.805 3.08332 0.900 3.14999 0.400 3.21667 0.715 3.28334 28.766 3.35001 124.178 3.41666 146.538 3.48333 38.648 3.55 -68.327 3.61667 -62.526 3.68332 -65.565 3.74999 -22.783 3.81667 -47.157 3.88334 27.528 3.95001 48.569 4.01666 73.368 4.08333 55.089 4.15 40.773 4.21667 -30.441 4.28332 -85.905 4.34999 -115.056 4.41667 -82.738 4.48334 -15.876 4.55001 37.268 4.61666 8.727 4.68333 45.413 4.75 42.169 4.81667 32.525 4.88332 33.549 4.94999 -21.205 5.01667 -33.897 5.08334 -10.218 5.15001 -7.570 5.21666 8.084 5.28333 27.496 5.35 33.597 5.41667 41.122 5.48332 42.246 5.54999 11.161 5.61667 16.043 5.68334 -0.716 5.75001 -6.503 5.81666 -34.540 5.88333 -20.109 5.95 4.280 6.01667 -5.574 6.08332 -30.158 6.14999 -27.615 6.21667 -15.523 6.28334 13.638 6.35001 33.755 6.41666 32.741 6.48333 24.511 6.55 4.699 6.61667 -9.527 6.68332 -13.794 6.74999 -1.502 6.81667 -4.350 6.88334 8.856 6.95001 23.687 7.01666 15.452 7.08333 27.235 7.15 17.172 7.21667 11.171 7.28332 0.193 7.34999 -25.010 7.41667 -27.049 7.48334 -23.500 7.55001 -3.593 7.61666 18.648 7.68333 28.596 7.75 17.309 7.81667 5.717 7.88332 1.136 7.94999 -2.127 8.01667 -2.441 8.08334 -0.422 8.15001 4.545 8.21666 16.623 8.28333 4.216 8.35 26.452 8.41667 20.242 8.48332 16.570 8.54999 15.946 8.61667 4.044 8.68334 -5.419 8.75001 -4.214 8.81666 -4.738 8.88333 -5.872 8.95 -3.348 9.01667 12.283 9.08332 19.074 9.14999 15.197 9.21667 3.800 9.28334 2.057 9.35001 4.376 9.41666 7.915 9.48333 -3.277 9.55 -4.921 9.61667 -11.745 9.68332 -2.721 9.74999 9.962 9.81667 15.024 9.88334 13.991 9.95001 7.775 10.0167 6.337 10.0833 -1.402 10.15 8.842 10.2167 5.575 10.2833 4.846 10.35 6.151 10.4167 -2.908 10.4833 7.236 10.55 14.637 10.6167 11.370 10.6833 7.188 10.75 3.211 10.8167 13.255 10.8833 3.792 10.95 0.730 11.0167 -1.113 11.0833 -1.228 11.15 8.107 11.2167 21.708 11.2833 17.836 11.35 16.707 11.4167 2.472 11.4833 4.391 11.55 -3.543 11.6167 5.896 11.6833 8.530 11.75 11.263 11.8167 9.935 11.8833 10.030 11.95 16.526 12.0167 9.001 12.0833 8.487 12.15 3.910 12.2167 -1.377 12.2833 -1.077 12.35 1.257 12.4167 -6.263 12.4833 -1.591 12.55 8.872 12.6167 17.102 12.6833 22.283 12.75 21.979 12.8167 -9.516 12.8833 4.000 12.95 -4.734 13.0167 3.600 13.0833 2.181 13.15 4.624 13.2167 7.577 13.2833 15.102 13.35 12.568 13.4167 16.640 13.4833 7.301 13.55 -2.038 13.6167 9.554 13.6833 6.515 13.75 14.350 13.8167 10.602 13.8833 9.192 13.95 8.492 14.0167 5.459 14.0833 -2.047 14.15 -5.385 14.2167 -12.077 14.2833 -0.480 14.35 14.979 14.4167 19.771 14.4833 21.719 14.55 19.500 14.6167 12.303 14.6833 -0.074 14.75 2.383 14.8167 1.793 14.8833 5.265 14.95 10.975 15.0167 18.005 15.0833 6.747 15.15 11.238 15.2167 -0.121 15.2833 -0.201 15.35 1.242 15.4167 -6.459 15.4833 -5.016 15.55 -3.368 15.6167 1.124 15.6833 -0.276 15.75 2.691 15.8167 0.986 15.8833 9.340 15.95 11.392 16.0167 6.944 16.0833 1.277 16.15 0.487 16.2167 -11.276 16.2833 -1.604 16.35 -19.463 16.4167 13.884 16.4833 16.547 16.55 2.650 16.6167 3.179 16.6833 -22.605 16.75 9.318 16.8167 -2.650 16.8833 -39.102 16.95 -2.302 17.0167 -0.859 17.0833 4.952 17.15 13.710 17.2167 17.387 17.2833 1.456 17.35 -6.449 17.4167 0.071 17.4833 0.090 17.55 -0.196 17.6167 -7.696 17.6833 -0.262 17.75 4.124 17.8167 0.991 17.8833 -1.838 17.95 -2.533 18.0167 0.124 18.0833 5.625 18.15 7.468 18.2167 4.130 18.2833 -2.561 18.35 -9.762 18.4167 -7.109 18.4833 -0.899 18.55 1.449 18.6167 5.421 18.6833 2.588 18.75 0.564 18.8167 4.231 18.8833 1.292 18.95 -4.999 19.0167 -4.484 19.0833 -6.408 19.15 -3.356 19.2167 3.050 19.2833 4.579 19.35 1.026 19.4167 -5.170 19.4833 -8.723 19.55 -2.727 19.6167 1.845 19.6833 3.674 19.75 3.065 19.8167 0.726 19.8833 -2.222 19.95 -3.546 20.0167 -1.822 20.0833 -2.741 20.15 -4.880 20.2167 2.126 20.2833 6.389 20.35 7.803 20.4167 9.727 20.4833 4.741 20.55 2.497 20.6167 4.521 20.6833 4.207 20.75 4.502 20.8167 0.325 20.8833 -0.499 20.95 -1.932 21.0167 0.292 21.0833 3.225 21.15 3.111 21.2167 2.996 21.2833 2.372 21.35 9.573 21.4167 8.035 21.4833 6.901 21.55 4.144 21.6167 -2.172 21.6833 -2.186 21.75 2.167 21.8167 7.434 21.8833 4.876 21.95 1.914 22.0167 4.843 22.0833 3.100 22.15 3.285 22.2167 2.252 22.2833 0.608 22.35 4.961 22.4167 3.928 22.4833 8.380 22.55 5.823 22.6167 4.789 22.6833 0.098 22.75 0.893 22.8167 -3.188 22.8833 2.788 22.95 -0.379 23.0167 -0.903 23.0833 9.951 23.15 13.794 23.2167 15.404 23.2833 11.017 23.35 3.483 23.4167 -0.699 23.4833 1.520 23.55 8.821 23.6167 7.688 23.6833 6.454 23.75 6.744 23.8167 5.816 23.8833 8.240 23.95 4.772 24.0167 4.453 24.0833 -0.233 24.15 1.991 24.2167 1.876 24.2833 7.148 24.35 9.677 24.4167 5.400 24.4833 4.576 24.55 1.519 24.6167 -0.725 24.6833 2.009 24.75 -1.758 24.8167 1.485 24.8833 2.800 24.95 8.381 25.0167 5.428 25.0833 2.985 25.15 5.114 25.2167 4.195 25.2833 5.004 25.35 3.780 25.4167 -0.082 25.4833 0.118 25.55 3.266 25.6167 5.400 25.6833 5.500 25.75 4.280 25.8167 4.790 25.8833 2.047 25.95 3.775 26.0167 3.575 26.0833 7.133 26.15 5.409 26.2167 4.600 26.2833 3.995 26.35 6.133 26.4167 9.796 26.4833 4.619 26.55 2.390 26.6167 0.261 26.6833 1.690 26.75 3.019 26.8167 2.009 26.8833 8.215 26.95 4.667 27.0167 7.215 27.0833 8.544 27.15 4.081 27.2167 7.444 27.2833 5.115 27.35 5.124 27.4167 2.696 27.4833 4.839 27.55 3.934 27.6167 2.420 27.6833 3.039 27.75 0.305 27.8167 4.582 27.8833 8.454 27.95 8.464 28.0167 7.559 28.0833 6.859 28.15 2.601 28.2167 -0.132 28.2833 0.082 28.35 2.225 28.4167 2.844 28.4833 6.412 28.55 4.592 28.6167 5.516 28.6833 6.136 28.75 7.364 28.8167 9.103 28.8833 9.722 28.95 1.807 29.0167 -1.436 29.0833 -3.256 29.15 -1.722 29.2167 -1.712 29.2833 -2.822 29.35 -1.188 29.4167 0.955 29.4833 3.503 29.55 3.612 29.6167 4.332 29.6833 2.612 29.75 0.993 29.8167 -2.860 29.8833 -6.308 29.95 -6.808 30.0167 -3.855 30.0833 0.722 30.15 4.894 30.2167 2.156 30.2833 0.232 30.35 -1.592 30.4167 -1.183 30.4833 2.175 30.55 0.451 30.6167 -0.054 30.6833 -2.692 30.75 -2.792 30.8167 0.360 30.8833 -0.554 30.95 3.308 31.0167 3.918 31.0833 2.699 31.15 4.832 31.2167 4.628 31.2833 1.580 31.35 1.780 31.4167 -1.168 31.4833 -1.273 31.55 -0.668 31.6167 -0.164 31.6833 1.356 31.75 5.923 31.8167 7.542 31.8833 4.284 31.95 1.332 32.0167 -0.302 32.0833 -2.545 32.15 -4.484 32.2167 -3.274 32.2833 -2.674 32.35 -0.550 32.4167 3.098 32.4833 5.627 32.55 5.412 32.6167 4.688 32.6833 4.169 32.75 0.702 32.8167 4.955 32.8833 7.888 32.95 6.960 33.0167 3.897 33.0833 2.054 33.15 4.173 33.2167 0.906 33.2833 0.687 33.35 0.772 33.4167 -0.971 33.4833 -0.276 33.55 0.115 33.6167 1.824 33.6833 2.620 33.75 0.267 33.8167 -0.462 33.8833 -0.886 33.95 -2.225 34.0167 -1.025 34.0833 -0.534 34.15 1.480 34.2167 3.800 34.2833 6.424 34.35 1.527 34.4167 0.494 34.4833 -0.540 34.55 0.865 34.6167 1.965 34.6833 2.455 34.75 2.641 34.8167 0.693 34.8833 1.488 34.95 3.098 35.0167 4.198 35.0833 5.198 35.15 4.979 35.2167 6.588 35.2833 5.659 35.35 5.135 35.4167 2.987 35.4833 1.449 35.55 0.215 35.6167 -1.628 35.6833 0.696 35.75 3.325 35.8167 4.125 35.8833 4.215 35.95 4.001 36.0167 0.739 36.0833 -2.624 36.15 -3.853 36.2167 -0.814 36.2833 2.734 36.35 4.758 36.4167 4.648 36.4833 6.267 36.55 5.448 36.6167 2.800 36.6833 0.967 36.75 1.267 36.8167 0.247 36.8833 3.191 36.95 -0.062 37.0167 2.476 37.0833 2.881 37.15 3.491 37.2167 3.186 37.2833 1.867 37.35 2.986 37.4167 2.276 37.4833 1.467 37.55 1.167 37.6167 1.781 37.6833 0.871 37.75 0.267 37.8167 -0.843 37.8833 -0.329 37.95 -0.524 38.0167 0.195 38.0833 4.472 38.15 4.787 38.2167 5.306 38.2833 1.558 38.35 -0.971 38.4167 -0.857 38.4833 -2.571 38.55 -2.761 38.6167 -1.833 38.6833 -1.818 38.75 0.025 38.8167 -2.499 38.8833 -2.585 38.95 1.192 39.0167 1.411 39.0833 3.055 39.15 2.464 39.2167 4.717 39.2833 4.736 39.35 2.927 39.4167 -0.712 39.4833 -2.217 39.55 -0.469 39.6167 1.889 39.6833 1.199 39.75 4.471 39.8167 5.914 39.8833 4.514 39.95 2.300 40.0167 0.595 40.0833 -2.839 40.15 -0.276 40.2167 -0.152 40.2833 2.410 40.35 2.229 40.4167 3.268 40.4833 2.477 40.55 -0.142 40.6167 0.287 40.6833 1.020 40.75 1.449 40.8167 -0.560 40.8833 -0.132 40.95 0.907 41.0167 -0.493 41.0833 0.036 41.15 0.464 41.2167 -1.545 41.2833 -1.321 41.35 -0.183 41.4167 2.075 41.4833 2.604 41.55 4.452 41.6167 2.542 41.6833 0.023 41.75 0.347 41.8167 -0.548 41.95 4.976 42.0167 7.129 42.0833 4.505 42.15 1.881 42.2167 0.476 42.2833 0.900 42.35 -0.709 42.4167 0.424 42.4833 0.644 42.55 -0.561 42.6167 -1.256 42.6833 -0.532 42.75 0.396 42.8167 -0.708 42.8833 -0.899 42.95 -3.123 43.0167 -3.008 43.0833 -3.913 43.15 -3.699 43.2167 -2.470 43.2833 -1.751 43.35 -2.046 43.4167 -1.227 43.4833 0.102 43.55 -0.298 43.6167 0.316 43.6833 -0.593 43.75 0.326 43.8167 0.941 43.8833 -0.988 43.95 -1.493 44.0167 0.236 44.0833 0.745 44.15 -1.388 44.2167 -3.117 44.2833 -3.117 44.35 -3.932 44.4167 -3.427 44.4833 -2.008 44.55 -2.722 44.6167 -3.336 44.6833 -5.170 44.75 -5.480 44.8167 -5.384 44.8833 -4.580 44.95 -3.875 45.0167 -2.156 45.0833 -2.165 45.15 -2.884 45.2167 -2.284 45.2833 -0.365 45.35 0.640 45.4167 -0.184 45.4833 0.211 45.55 -0.208 45.6167 -0.628 45.6833 -1.656 45.75 -2.076 45.8167 -1.785 45.8833 -0.885 45.95 -2.424 46.0167 -2.438 46.0833 -1.133 46.15 -0.743 46.2167 -0.962 46.2833 -0.876 46.35 -1.096 46.4167 0.004 46.4833 -0.824 46.55 -1.248 46.6167 -0.758 46.6833 -0.572 46.75 -2.216 46.8167 -3.554 46.8833 -3.673 46.95 -1.659 47.0167 -0.454 47.0833 1.556 47.15 2.351 47.2167 1.622 47.2833 -1.240 47.35 -1.969 47.4167 -1.684 47.4833 -0.279 47.55 1.431 47.6167 1.921 47.6833 2.616 47.75 2.192 47.8167 0.854 47.8833 -0.280 47.95 0.416 48.0167 0.806 48.0833 1.196 48.15 0.977 48.2167 1.672 48.2833 2.268 48.35 1.644 48.4167 0.105 48.4833 -0.314 48.55 -0.024 48.6167 -1.357 48.6833 -0.557 48.75 1.667 48.8167 2.162 48.8833 2.862 48.95 1.633 49.0167 0.504 49.0833 0.495 49.15 1.604 49.2167 2.509 49.2833 1.790 49.35 0.666 49.4167 -0.358 49.4833 -0.263 49.55 0.037 49.6167 0.132 49.6833 -0.177 49.75 -2.111 49.8167 -3.335 49.8833 -2.930 49.95 -3.645 50.0167 -3.849 50.0833 -4.969 50.15 -6.088 50.2167 -5.478 50.2833 -3.749 50.35 -1.006 50.4167 1.027 50.4833 0.927 50.55 -0.187 50.6167 -1.811 50.6833 -2.111 50.75 -1.701 50.8167 -1.697 50.8833 -1.082 50.95 -0.773 51.0167 -1.477 51.0833 -0.963 51.15 -2.277 51.2167 -3.287 51.2833 -4.397 51.35 -5.101 51.4167 -5.906 51.4833 -6.406 51.55 -5.787 51.6167 -5.373 51.6833 -5.363 51.75 -4.744 51.8167 -3.210 51.8833 -4.420 51.95 -4.410 52.0167 -4.500 52.0833 -4.491 52.15 -4.276 52.2167 -3.352 52.2833 -2.833 52.35 -2.824 52.4167 -2.304 52.4833 -3.309 52.55 -2.485 52.6167 -2.271 52.6833 -2.361 52.75 -4.790 52.8167 -5.490 52.8833 -3.447 52.95 -2.013 53.0167 -0.275 53.0833 -0.570 53.15 -0.051 53.2167 0.164 53.2833 -0.741 53.35 -1.746 53.4167 -2.346 53.4833 -3.960 53.55 -3.341 53.6167 -3.636 53.6833 -2.712 53.75 -2.703 53.8167 -2.998 53.8833 -2.684 53.95 -2.574 54.0167 -2.260 54.0833 -2.455 54.15 -2.345 54.2167 -1.931 54.2833 -2.126 54.35 -2.016 54.4167 -2.212 54.4833 -1.392 54.55 -1.488 54.6167 -1.583 54.6833 -0.459 54.75 -1.064 54.8167 -1.768 54.8833 -1.764 54.95 -1.149 55.0167 -2.264 55.0833 -2.564 55.15 -3.068 55.2167 -2.354 55.2833 -1.540 55.35 -1.944 55.4167 -1.435 55.4833 -1.535 55.55 -1.840 55.6167 -2.449 55.6833 -3.364 55.75 -3.568 55.8167 -3.773 55.8833 -3.064 55.95 -2.559 56.0167 -2.359 56.0833 -1.449 56.15 -2.773 56.2167 -3.997 56.2833 -4.207 56.35 -5.940 56.4167 -7.369 56.4833 -8.188 56.55 -7.079 56.6167 -6.884 56.6833 -5.369 56.75 -4.260 56.8167 -4.779 56.8833 -4.788 56.95 -4.698 57.0167 -4.608 57.0833 -5.127 57.15 -5.851 57.2167 -6.270 57.2833 -5.775 57.35 -4.060 57.4167 -3.770 57.4833 -3.480 57.55 -3.189 57.6167 -2.289 57.6833 -2.813 57.75 -3.947 57.8167 -5.080 57.8833 -6.214 57.95 -6.433 58.0167 -7.162 58.0833 -7.686 58.15 -7.500 58.2167 -7.010 58.2833 -6.010 58.35 -4.605 58.4167 -4.115 58.4833 -4.134 58.55 -4.558 58.6167 -5.287 58.6833 -6.321 58.75 -6.745 58.8167 -6.459 58.8833 -5.664 58.95 -4.869 59.0167 -5.293 59.0833 -3.583 59.15 -2.788 59.2167 -2.602 59.2833 -3.636 59.35 -4.365 59.4167 -5.193 59.4833 -5.008 59.55 -5.532 59.6167 -5.141 59.6833 -5.056 59.75 -4.665 59.8167 -4.275 59.8833 -4.594 59.95 -4.304 60.0167 -4.013 60.0833 -3.723 60.15 -4.142 60.2167 -3.242 60.2833 -4.371 60.35 -4.790 60.4167 -4.090 60.4833 -4.000 60.55 -3.909 60.6167 -4.224 60.6833 -3.929 60.75 -3.633 60.8167 -1.914 60.8833 -2.024 60.95 -2.233 61.0167 -1.833 61.0833 -2.653 61.15 -3.267 61.2167 -4.491 61.2833 -3.886 61.35 -3.686 61.4167 -3.181 61.4833 -3.081 61.55 -2.067 61.6167 -2.067 61.6833 -2.372 61.75 -2.067 61.8167 -3.081 61.8833 -2.877 61.95 -3.077 62.0167 -2.972 62.0833 -2.967 62.15 -1.743 62.2167 -0.824 62.2833 -0.309 62.35 -0.405 62.4167 -1.209 62.4833 -1.405 62.55 -1.395 62.6167 -1.995 62.6833 -2.900 62.75 -2.990 62.8167 -2.776 62.8833 -2.257 62.95 -1.533 63.0167 -1.418 63.0833 -1.404 63.15 -1.999 63.2167 -2.899 63.2833 -3.289 63.35 -4.189 63.4167 -3.765 63.4833 -3.546 63.55 -2.513 63.6167 -1.784 63.6833 -1.055 63.75 -1.645 63.8167 -2.236 63.8833 -3.741 63.95 -3.721 64.0167 -3.093 64.0833 -1.649 64.15 -0.816 64.2167 0.323 64.2833 0.242 64.35 0.466 64.4167 -0.934 64.4833 -2.234 64.55 -3.939 64.6167 -3.715 64.6833 -3.286 64.75 -2.552 64.8167 -2.124 64.8833 -1.390 64.95 -1.876 65.0167 -2.261 65.0833 -3.052 65.15 -3.842 65.2167 -4.328 65.2833 -3.594 65.35 -3.165 65.4167 -2.027 65.4833 -0.684 65.55 0.050 65.6167 -0.640 65.6833 -1.026 65.75 -0.192 65.8167 0.236 65.8833 0.156 65.95 -0.435 66.0167 -0.516 66.0833 -0.192 66.15 -0.882 66.2167 -0.863 66.2833 -0.539 66.35 -0.520 66.4167 0.514 66.4833 -0.281 66.55 -0.772 66.6167 -1.262 66.6833 -2.667 66.75 -3.972 66.8167 -3.448 66.8833 -2.619 66.95 -2.300 67.0167 -1.471 67.0833 -1.456 67.15 -1.037 67.2167 -2.142 67.2833 -3.552 67.35 -3.742 67.4167 -4.137 67.4833 -3.618 67.55 -3.099 67.6167 -2.480 67.6833 -2.165 67.75 -2.360 67.8167 -1.946 67.8833 -2.446 67.95 -3.456 68.0167 -4.465 68.0833 -5.780 68.15 -5.470 68.2167 -5.160 68.2833 -5.360 68.35 -5.256 68.4167 -5.356 68.4833 -5.151 68.55 -4.641 68.6167 -4.946 68.6833 -5.556 68.75 -6.370 68.8167 -7.489 68.8833 -7.389 68.95 -7.189 69.0167 -6.380 69.0833 -6.080 69.15 -5.170 69.2167 -4.565 69.2833 -3.860 69.35 -3.765 69.4167 -4.180 69.4833 -4.594 69.55 -7.752 69.6167 -5.118 69.6833 -4.823 69.75 -4.123 69.8167 -6.571 69.8833 -3.432 69.95 -3.342 70.0167 -4.066 70.0833 -4.280 70.15 -4.395 70.2167 -4.714 70.2833 -4.828 70.35 -5.148 70.4167 -4.552 70.4833 -4.262 70.55 -4.176 70.6167 -3.886 70.6833 -3.191 70.75 -3.105 70.8167 -3.934 70.8833 -3.748 70.95 -4.272 71.0167 -4.187 71.0833 -3.087 71.15 -2.292 71.2167 -2.411 71.2833 -1.920 71.35 -2.040 71.4167 -1.549 71.4833 -1.973 71.55 -2.092 71.6167 -2.212 71.6833 -2.536 71.75 -2.350 71.8167 -1.860 71.8833 -1.064 71.95 -1.184 72.0167 -0.998 72.0833 -1.422 72.15 -1.946 72.2167 -2.065 72.2833 -2.184 72.35 -2.404 72.4167 -1.708 72.4833 -0.913 72.55 -0.828 72.6167 -1.147 72.6833 -1.366 72.75 -1.076 72.8167 -1.295 72.8833 -2.324 72.95 -2.643 73.0167 -2.962 73.0833 -2.467 73.15 -2.581 73.2167 -1.881 73.2833 -1.691 73.35 -1.905 73.4167 -2.425 73.4833 -3.349 73.55 -3.663 73.6167 -3.063 73.6833 -3.377 73.75 -3.792 73.8167 -2.987 73.8833 -3.501 73.95 -4.016 74.0167 -3.921 74.0833 -4.130 74.15 -4.440 74.2167 -4.240 74.2833 -3.940 74.35 -3.130 74.4167 -3.030 74.4833 -3.135 74.55 -3.340 74.6167 -3.645 74.6833 -4.154 74.75 -4.459 74.8167 -4.864 74.8833 -4.964 74.95 -4.149 75.0167 -3.640 75.0833 -3.840 75.15 -2.821 75.2167 -3.021 75.2833 -3.016 75.35 -2.706 75.4167 -3.006 75.4833 -3.001 75.55 -3.401 75.6167 -3.497 75.6833 -3.287 75.75 -2.873 75.8167 -2.763 75.8833 -2.653 75.95 -2.544 76.0167 -1.825 76.0833 -2.120 76.15 -2.110 76.2167 -2.710 76.2833 -2.700 76.35 -2.691 76.4167 -2.072 76.4833 -0.943 76.55 -0.324 76.6167 0.196 76.6833 -0.200 76.75 -1.509 76.8167 -1.904 76.8833 -1.385 76.95 -1.476 77.0167 -0.042 77.0833 0.172 77.15 1.301 77.2167 1.416 77.2833 1.630 77.35 1.540 77.4167 0.840 77.4833 0.140 77.55 0.049 77.6167 0.873 77.6833 1.392 77.75 1.607 77.8167 2.126 77.8833 2.036 77.95 1.336 78.0167 0.431 78.0833 -0.269 78.15 -0.260 78.2167 0.055 78.2833 0.269 78.35 1.193 78.4167 1.203 78.4833 0.703 78.55 -0.202 78.6167 -0.397 78.6833 -0.692 78.75 -0.278 78.8167 0.746 78.8833 1.465 78.95 1.065 79.0167 0.870 79.0833 0.470 79.15 0.375 79.2167 0.584 79.2833 0.284 79.35 -0.320 79.4167 0.294 79.4833 -0.616 79.55 -0.916 79.6167 -0.811 79.6833 -0.706 79.75 -0.501 79.8167 -1.311 79.8833 -1.716 79.95 -2.425 80.0167 -1.511 80.0833 -1.206 80.15 -1.206 80.2167 -0.292 80.2833 0.113 80.35 0.518 80.4167 0.413 80.4833 0.613 80.55 0.508 80.6167 0.099 80.6833 0.399 80.75 0.089 80.8167 -0.730 80.8833 -0.635 80.95 -0.540 81.0167 -0.649 81.0833 -0.859 81.15 -0.564 81.2167 -1.283 81.2833 -1.902 81.35 -2.521 81.4167 -3.040 81.4833 -2.645 81.55 -2.555 81.6167 -2.160 81.6833 -1.664 81.75 -1.474 81.8167 -1.284 81.8833 -2.008 81.95 -1.717 82.0167 -2.341 82.0833 -2.660 82.15 -2.675 82.2167 -2.384 82.2833 -1.994 82.35 -1.908 82.4167 -1.823 82.4833 -2.042 82.55 -2.261 82.6167 -2.990 82.6833 -3.209 82.75 -3.328 82.8167 -3.548 82.8833 -3.362 82.95 -2.872 83.0167 -2.381 83.0833 -2.905 83.15 -2.720 83.2167 -2.229 83.2833 -2.349 83.35 -2.163 83.4167 -2.282 83.4833 -1.892 83.55 -2.011 83.6167 -1.521 83.6833 -1.435 83.75 -0.945 83.8167 -0.554 83.8833 -0.673 83.95 -0.283 84.0167 -0.502 84.0833 -0.417 84.15 -0.431 84.2167 -0.345 84.2833 -0.360 84.35 -0.374 84.4167 0.221 84.4833 -0.098 84.55 0.497 84.6167 0.687 84.6833 -0.037 84.75 -0.556 84.8167 -0.061 84.8833 -0.580 84.95 -0.794 85.0167 -0.499 85.0833 -0.104 85.15 -0.113 85.2167 0.082 85.2833 0.277 85.35 -0.137 85.4167 0.363 85.4833 0.458 85.55 0.858 85.6167 0.853 85.6833 1.153 85.75 1.453 85.8167 1.043 85.8833 1.243 85.95 1.343 86.0167 1.443 86.0833 1.239 86.15 1.239 86.2167 1.139 86.2833 1.139 86.35 1.648 86.4167 1.143 86.4833 0.943 86.55 1.048 86.6167 0.748 86.6833 1.363 86.75 1.267 86.8167 1.782 86.8833 1.687 86.95 1.491 87.0167 1.296 87.0833 1.306 87.15 1.011 87.2167 1.020 87.2833 1.235 87.35 1.449 87.4167 0.954 87.4833 0.459 87.55 0.573 87.6167 0.992 87.6833 0.397 87.75 1.021 87.8167 0.326 87.8833 0.645 87.95 0.864 88.0167 0.983 88.0833 1.507 88.15 1.322 88.2167 0.527 88.2833 1.155 88.35 0.360 88.4167 0.684 88.4833 1.008 88.55 1.027 88.6167 1.047 88.6833 1.880 88.75 1.900 88.8167 1.819 88.8833 2.348 88.95 2.267 89.0167 2.491 89.0833 2.410 89.15 2.534 89.2167 2.148 89.2833 2.677 89.35 3.206 89.4167 3.330 89.4833 3.249 89.55 3.373 89.6167 3.292 89.6833 2.602 89.75 2.116 89.8167 2.340 89.8833 1.650 89.95 1.264 90.0167 1.793 90.0833 2.322 90.15 2.241 90.2167 3.175 90.2833 2.789 90.35 3.113 90.4167 2.828 90.4833 2.847 90.55 2.256 90.6167 2.580 90.6833 2.700 90.75 2.109 90.8167 3.448 90.8833 3.872 90.95 3.786 91.0167 4.210 91.0833 3.820 91.15 3.124 91.2167 2.429 91.2833 2.139 91.35 2.153 91.4167 1.863 91.4833 2.182 91.55 2.296 91.6167 2.106 91.6833 2.525 91.75 2.740 91.8167 2.040 91.8833 1.340 92.0167 0.954 92.0833 0.964 92.15 0.768 92.2167 1.183 92.2833 0.683 92.35 -0.022 92.4167 0.492 92.4833 0.092 92.55 0.402 92.6167 0.102 92.6833 -0.503 92.75 -1.617 92.8167 -1.717 92.8833 -2.222 92.95 -2.932 93.0167 -2.322 93.0833 -2.627 93.15 -2.932 93.2167 -3.236 93.2833 -3.136 93.35 -2.936 93.4167 -2.736 93.4833 -3.146 93.55 -3.251 93.6167 -3.256 93.6833 -3.260 93.75 -3.165 93.8167 -3.375 93.8833 -3.584 93.95 -3.694 94.0167 -3.804 94.0833 -3.508 94.15 -3.618 94.2167 -3.628 94.2833 -3.537 94.35 -3.547 94.4167 -3.152 94.4833 -3.266 94.55 -3.785 94.6167 -3.900 94.6833 -3.404 94.75 -3.824 94.8167 -3.838 94.8833 -4.562 94.95 -3.967 95.0167 -4.481 95.0833 -4.200 95.15 -3.910 95.2167 -4.129 95.2833 -4.348 95.35 -4.872 95.4167 -5.092 95.4833 -4.701 95.55 -4.920 95.6167 -4.430 95.6833 -4.649 95.75 -4.159 95.8167 -3.973 95.8833 -3.278 95.95 -3.092 96.0167 -3.212 96.0833 -3.331 96.15 -3.550 96.2167 -4.584 96.2833 -4.703 96.35 -4.212 96.4167 -4.736 96.4833 -3.941 96.55 -4.060 96.6167 -3.975 96.6833 -4.399 96.75 -4.008 96.8167 -4.228 96.8833 -3.837 96.95 -3.752 97.0167 -3.361 97.0833 -2.766 97.15 -1.766 97.2167 -1.780 97.2833 -1.795 97.35 -1.809 97.4167 -1.314 97.4833 -1.633 97.55 -1.748 97.6167 -1.657 97.6833 -2.076 97.75 -1.681 97.8167 -1.896 97.8833 -2.415 97.95 -1.715 98.0167 -2.029 98.0833 -2.344 98.15 -2.149 98.2167 -2.563 98.2833 -2.673 98.35 -2.782 98.4167 -2.992 98.4833 -2.592 98.55 -2.497 98.6167 -2.501 98.6833 -2.506 98.75 -2.611 98.8167 -2.411 98.8833 -2.516 98.95 -2.316 99.0167 -2.216 99.0833 -2.421 99.15 -2.421 99.2167 -2.725 99.2833 -2.725 99.35 -2.116 99.4167 -2.216 99.4833 -2.316 99.55 -2.821 99.6167 -2.616 99.6833 -2.306 99.75 -1.897 99.8167 -1.282 99.8833 -1.277 99.95 -0.663 100.017 -0.658 100.083 -0.753 100.15 -0.849 100.217 -0.434 100.283 -0.834 100.35 -0.725 100.417 -1.225 100.483 -1.115 100.55 -1.105 100.617 -0.691 100.683 -0.376 100.75 -0.367 100.817 -0.967 100.883 -0.957 100.95 -1.657 101.017 -1.648 101.083 -1.738 101.15 -1.524 101.217 -1.004 101.283 -0.485 101.35 -0.271 101.417 -0.056 101.483 -0.147 101.55 -0.237 101.617 -0.732 101.683 -1.128 101.75 -1.218 101.817 -1.408 101.883 -1.499 101.95 -0.370 102.017 -0.765 102.083 -0.651 102.15 -1.046 102.217 -1.136 102.283 -1.227 102.35 -1.317 102.417 -0.798 102.483 -0.584 102.55 -0.879 102.617 -0.360 102.683 0.869 102.75 0.169 102.817 0.179 102.883 0.188 102.95 0.198 103.017 0.208 103.083 0.012 103.15 -0.283 103.217 -0.478 103.283 -0.368 103.35 -0.868 103.417 -0.759 103.483 -0.854 103.55 -1.254 103.617 -1.044 103.683 -0.835 103.75 -1.235 103.817 -0.925 103.883 -1.225 103.95 -1.220 104.017 -1.216 104.083 -0.806 104.15 -1.006 104.217 -1.511 104.283 -1.611 104.35 -1.201 104.417 -1.911 104.483 -2.216 104.55 -1.401 104.617 -1.706 104.683 -2.316 104.75 -2.520 104.817 -2.725 104.883 -3.540 104.95 -3.340 105.017 -3.849 105.083 -3.549 105.15 -4.568 105.217 -4.268 105.283 -4.273 105.35 -4.278 105.417 -4.488 105.483 -5.307 105.55 -5.112 105.617 -5.016 105.683 -5.126 105.75 -5.136 105.817 -4.940 105.883 -4.950 105.95 -5.469 106.017 -5.479 106.083 -5.084 106.15 -4.993 106.217 -5.208 106.283 -4.712 106.35 -4.927 106.417 -5.041 106.483 -4.446 106.55 -4.865 106.617 -3.965 106.683 -4.284 106.75 -4.399 106.817 -4.923 106.883 -4.937 106.95 -4.952 107.017 -4.561 107.083 -3.866 107.15 -3.880 107.217 -3.795 107.283 -3.709 107.35 -3.624 107.417 -3.538 107.483 -3.757 107.55 -3.976 107.617 -3.791 107.683 -4.010 107.75 -4.229 107.817 -4.144 107.883 -3.753 107.95 -4.277 108.017 -4.497 108.083 -4.411 108.15 -4.630 108.217 -4.240 108.283 -3.340 108.35 -3.254 108.417 -2.559 108.483 -2.878 108.55 -2.588 108.617 -2.602 108.683 -2.617 108.75 -2.631 108.817 -3.050 108.883 -2.760 108.95 -3.179 109.017 -3.293 109.083 -2.493 109.15 -2.708 109.217 -2.313 109.283 -2.832 109.35 -2.437 109.417 -2.956 109.483 -2.965 109.55 -2.670 109.617 -2.475 109.683 -2.485 109.75 -2.289 109.817 -2.499 109.883 -2.609 109.95 -2.309 110.017 -2.213 110.083 -2.218 110.15 -2.223 110.217 -2.533 110.283 -2.942 110.35 -3.047 110.417 -2.947 110.483 -2.847 110.55 -2.442 110.617 -2.747 110.683 -2.747 110.75 -3.457 110.817 -3.252 110.883 -2.742 110.95 -2.333 111.017 -2.533 111.083 -2.123 111.15 -1.813 111.217 -2.213 111.283 -1.599 111.35 -1.694 111.417 -1.585 111.483 -1.475 111.55 -1.365 111.617 -1.256 111.683 -1.551 111.75 -1.946 111.817 -1.937 111.95 -1.508 112.083 -1.889 112.15 -1.469 112.217 -1.760 112.283 -1.950 112.35 -2.036 112.417 -2.021 112.483 -1.802 112.55 -1.483 112.617 -1.264 112.683 -1.145 112.75 -0.925 112.817 -0.501 112.883 -0.687 112.95 -0.873 113.017 -0.449 113.083 -0.734 113.15 -0.715 113.217 -0.291 113.283 0.033 113.35 0.357 113.417 0.376 113.483 0.091 113.55 -0.295 113.617 0.029 113.683 0.048 113.75 0.272 113.817 0.596 113.883 0.516 113.95 0.535 114.017 0.454 114.083 0.473 114.15 0.697 114.217 0.107 114.283 -0.179 114.35 -0.160 114.417 -0.850 114.483 0.084 114.55 -0.202 114.617 0.222 114.683 -0.368 114.75 -0.349 114.817 0.075 114.883 -0.211 114.95 -0.092 115.017 0.028 115.083 -0.158 115.15 -0.548 115.217 -1.039 115.283 -0.515 115.35 -1.210 115.417 -0.991 115.483 -0.976 115.55 -1.367 115.617 -1.352 115.683 -1.338 115.75 -1.833 115.817 -2.428 115.883 -2.314 115.95 -1.895 116.017 -2.595 116.083 -2.380 116.15 -2.776 116.217 -2.561 116.283 -2.956 116.35 -3.861 116.417 -3.547 116.483 -3.132 116.55 -3.328 116.617 -2.913 116.683 -3.108 116.75 -3.813 116.817 -3.908 116.883 -3.599 116.95 -4.304 117.017 -3.894 117.083 -3.889 117.15 -4.394 117.217 -7.947 117.283 -8.047 117.35 -7.637 117.417 -7.637 117.483 -7.432 117.55 -6.823 117.617 -6.213 117.683 -6.418 117.75 -6.623 117.817 -6.118 117.883 -6.628 117.95 -6.732 118.017 -6.432 118.083 -6.437 118.15 -6.442 118.217 -5.532 118.283 -5.742 118.35 -5.952 118.417 -6.061 118.483 -5.256 118.55 -5.061 118.617 -5.171 118.683 -5.180 118.75 -5.495 118.817 -5.200 118.883 -5.719 118.95 -5.324 119.017 -5.128 119.083 -4.738 119.15 -4.038 119.217 -3.543 119.283 -3.352 119.35 -3.976 119.417 -4.091 119.483 -4.715 119.55 -4.424 119.617 -4.744 119.683 -4.148 119.75 -4.163 119.817 -4.382 119.883 -4.092 119.95 -3.701 120.217 -3.359 120.283 -3.578 120.35 -3.797 120.417 -3.612 120.483 -3.526 120.55 -3.136 120.617 -2.340 120.683 -2.864 120.75 -3.388 120.817 -3.303 120.883 -2.912 120.95 -3.032 121.017 -3.251 121.083 -3.470 121.15 -3.689 121.217 -3.704 121.283 -3.313 121.35 -3.228 121.417 -3.242 121.483 -3.256 121.55 -3.476 121.617 -3.490 121.683 -3.300 121.75 -3.314 121.817 -2.719 121.883 -3.138 121.95 -3.252 122.017 -3.062 122.083 -2.872 122.15 -3.391 122.217 -2.996 122.283 -3.210 122.35 -3.120 122.417 -2.825 122.483 -2.834 122.55 -3.149 122.617 -3.158 122.683 -3.268 122.75 -3.073 122.817 -2.977 122.883 -3.087 122.95 -3.601 123.017 -3.811 123.083 -3.816 123.15 -4.125 123.217 -3.521 123.283 -3.625 123.35 -4.035 123.417 -4.140 123.483 -4.854 123.55 -5.059 123.617 -4.959 123.683 -4.349 123.75 -4.045 123.817 -3.130 123.883 -3.435 123.95 -3.230 124.017 -3.635 124.083 -3.430 124.15 -3.935 124.217 -4.135 124.283 -4.335 124.35 -4.330 124.417 -4.630 124.483 -4.016 124.55 -3.706 124.617 -3.192 124.683 -3.592 124.75 -2.773 124.817 -3.173 124.883 -3.368 124.95 -3.158 125.017 -3.353 125.083 -3.953 125.15 -2.929 125.217 -3.225 125.283 -2.505 125.35 -2.496 125.417 -1.976 125.483 -2.272 125.55 -1.652 125.617 -1.438 125.683 -1.733 125.75 -2.128 125.817 -1.914 125.883 -2.309 125.95 -2.095 126.017 -1.880 126.083 -1.971 126.15 -2.366 126.217 -2.152 126.283 -1.937 126.35 -2.028 126.417 -1.608 126.483 -2.308 126.55 -2.704 126.617 -1.880 126.683 -1.665 126.75 -2.060 126.817 -1.541 126.883 -1.327 126.95 -2.027 127.017 -2.017 127.083 -1.498 127.15 -1.488 127.217 -1.884 127.283 -2.788 127.35 -2.779 127.417 -3.074 127.483 -2.455 127.55 -2.345 127.617 -2.336 127.683 -2.531 127.75 -3.031 127.817 -3.226 127.883 -3.421 127.95 -3.212 128.017 -3.407 128.083 -3.502 128.15 -3.597 128.217 -3.592 128.283 -3.688 128.35 -3.683 128.417 -3.678 128.483 -3.064 128.55 -2.654 128.617 -3.259 128.683 -3.764 128.75 -4.168 128.817 -4.064 128.883 -4.468 128.95 -4.873 129.017 -4.668 129.083 -4.668 129.15 -4.973 129.217 -5.278 129.283 -5.583 129.35 -5.483 129.417 -5.688 129.483 -5.588 129.55 -5.388 129.617 -5.188 129.683 -5.597 129.75 -5.702 129.817 -5.707 129.883 -6.016 129.95 -6.631 130.017 -7.145 130.083 -7.050 130.15 -6.955 130.217 -6.760 130.283 -7.579 130.35 -7.688 130.417 -8.103 130.483 -7.503 130.55 -7.512 130.617 -7.522 130.683 -7.227 130.75 -7.236 130.817 -7.451 130.883 -7.360 130.95 -7.575 131.017 -7.080 131.083 -6.684 131.15 -6.189 131.217 -5.999 131.283 -6.113 131.35 -6.532 131.417 -6.647 131.483 -6.661 131.55 -6.471 131.617 -6.180 131.683 -6.500 131.75 -6.919 131.817 -6.933 131.883 -6.338 131.95 -6.048 132.017 -5.757 132.083 -5.772 132.15 -5.786 132.217 -5.800 132.283 -5.410 132.35 -4.815 132.417 -4.525 132.483 -4.234 132.55 -4.553 132.617 -4.668 132.683 -4.682 132.75 -4.087 132.817 -4.406 132.883 -4.216 132.95 -4.330 133.017 -3.735 133.083 -3.545 133.15 -3.049 133.217 -3.164 133.283 -3.378 133.35 -3.797 133.417 -3.707 133.483 -3.821 133.55 -4.341 133.617 -4.045 133.683 -3.955 133.75 -3.965 133.817 -3.669 133.883 -3.679 133.95 -3.384 134.017 -3.189 134.083 -3.298 134.15 -3.408 134.217 -3.213 134.283 -3.422 134.35 -3.632 134.417 -3.637 134.483 -3.846 134.55 -3.546 134.617 -3.651 134.683 -3.656 134.75 -3.456 134.817 -3.561 134.883 -3.461 134.95 -3.361 135.017 -3.565 135.083 -3.565 135.15 -3.565 135.217 -3.970 135.283 -4.275 135.35 -3.865 135.417 -3.965 135.483 -4.165 135.55 -3.756 135.617 -4.056 135.683 -3.951 135.75 -4.046 135.817 -3.737 135.883 -3.832 135.95 -3.722 136.017 -3.817 136.083 -3.708 136.15 -4.208 136.217 -3.893 136.283 -4.189 136.35 -4.484 136.417 -4.269 136.483 -4.260 136.55 -4.450 136.617 -3.931 136.683 -4.121 136.75 -3.907 136.817 -3.893 136.883 -4.083 136.95 -4.069 137.017 -4.259 137.083 -4.345 137.15 -4.330 137.217 -4.011 137.283 -3.792 137.35 -4.487 137.417 -4.573 137.483 -4.353 137.55 -4.134 137.617 -4.320 137.683 -4.405 137.75 -4.591 137.817 -4.776 137.883 -4.962 137.95 -5.352 138.017 -5.233 138.083 -5.519 138.15 -5.704 138.217 -5.585 138.283 -5.466 138.35 -5.347 138.417 -5.023 138.483 -4.904 138.55 -4.784 138.617 -4.970 138.683 -4.546 138.75 -5.341 138.817 -5.222 138.883 -5.103 138.95 -4.984 139.017 -5.169 139.083 -5.050 139.15 -5.136 139.217 -5.321 139.283 -5.407 139.35 -5.188 139.417 -4.968 139.483 -5.054 139.55 -4.835 139.617 -4.516 139.683 -4.906 139.75 -4.892 139.817 -4.268 139.883 -4.253 139.95 -3.834 140.017 -3.820 140.083 -4.010 140.15 -4.505 140.217 -4.291 140.283 -4.481 140.35 -4.876 140.417 -4.357 140.483 -4.143 140.55 -3.828 140.617 -3.819 140.683 -3.809 140.75 -3.495 140.817 -3.995 140.883 -3.580 140.95 -3.776 141.017 -3.666 141.083 -3.152 141.15 -3.247 141.217 -3.547 141.283 -3.947 141.35 -3.637 141.417 -3.837 141.483 -3.832 141.55 -3.423 141.617 -3.013 141.683 -3.418 141.75 -3.823 141.817 -3.618 141.883 -4.328 141.95 -4.632 142.017 -4.632 142.083 -4.837 142.15 -4.532 gerris-snapshot-131206/doc/examples/tsunami/hanires.txt0000644000175100017510000020410412250371171020120 00000000000000-24.9833 1.470 -24.95 0.865 -24.9167 0.761 -24.8833 -0.563 -24.85 -0.768 -24.8167 -0.568 -24.7833 -0.773 -24.75 -0.268 -24.7167 -0.168 -24.6833 -0.273 -24.65 -0.173 -24.6167 -0.378 -24.5833 -0.483 -24.55 0.532 -24.5167 0.327 -24.4833 1.037 -24.45 0.222 -24.4167 0.017 -24.3833 0.117 -24.35 -0.392 -24.3167 0.013 -24.2833 0.722 -24.25 -0.497 -24.2167 0.517 -24.1833 0.617 -24.15 -1.211 -24.1167 -0.197 -24.0833 -0.197 -24.05 0.208 -24.0167 0.817 -23.9833 0.817 -23.95 0.917 -23.9167 0.917 -23.8833 0.308 -23.85 1.222 -23.8167 1.017 -23.7833 1.017 -23.75 1.322 -23.7167 1.932 -23.6833 1.017 -23.65 0.613 -23.6167 0.308 -23.5833 0.003 -23.55 -0.302 -23.5167 -0.302 -23.4833 -0.402 -23.45 -0.402 -23.4167 -0.197 -23.3833 0.413 -23.35 1.327 -23.3167 1.837 -23.2833 1.432 -23.25 -0.092 -23.2167 -1.107 -23.1833 -0.497 -23.15 -0.902 -23.1167 -0.087 -23.0833 1.032 -23.05 -0.187 -23.0167 0.322 -22.9833 -0.083 -22.95 -0.183 -22.9167 0.632 -22.8833 0.532 -22.85 1.041 -22.8167 0.027 -22.7833 -0.073 -22.75 0.437 -22.7167 0.641 -22.6833 -0.373 -22.65 0.137 -22.6167 0.646 -22.5833 0.751 -22.55 0.041 -22.5167 -0.059 -22.4833 0.756 -22.45 0.656 -22.4167 0.456 -22.3833 0.661 -22.35 1.170 -22.3167 0.765 -22.2833 0.565 -22.25 0.161 -22.2167 -0.549 -22.1833 -0.444 -22.15 0.675 -22.1167 2.709 -22.0833 2.204 -22.05 2.104 -22.0167 2.209 -21.9833 2.413 -21.95 1.704 -21.9167 2.113 -21.8833 2.318 -21.85 2.828 -21.8167 2.323 -21.7833 1.309 -21.75 1.718 -21.7167 2.837 -21.6833 3.042 -21.65 2.537 -21.6167 2.742 -21.5833 2.237 -21.55 2.137 -21.5167 1.733 -21.4833 1.837 -21.45 2.652 -21.4167 3.161 -21.3833 2.657 -21.35 3.166 -21.3167 3.371 -21.2833 3.576 -21.25 4.290 -21.2167 4.190 -21.1833 3.176 -21.15 2.466 -21.1167 2.266 -21.0833 2.471 -21.05 2.676 -21.0167 2.576 -20.9833 3.390 -20.95 2.985 -20.9167 2.885 -20.8833 3.090 -20.85 2.890 -20.8167 2.181 -20.7833 2.385 -20.75 1.676 -20.7167 1.676 -20.6833 0.966 -20.65 1.781 -20.6167 3.509 -20.5833 2.495 -20.55 3.005 -20.5167 3.005 -20.4833 2.905 -20.45 2.500 -20.4167 1.790 -20.3833 2.400 -20.35 1.385 -20.3167 1.385 -20.2833 1.590 -20.25 1.895 -20.2167 2.709 -20.1833 3.624 -20.15 3.219 -20.1167 3.219 -20.0833 2.914 -20.05 2.205 -20.0167 1.900 -19.9833 1.290 -19.95 1.595 -19.9167 1.900 -19.8833 1.900 -19.85 2.205 -19.8167 1.595 -19.7833 1.900 -19.75 2.814 -19.7167 3.729 -19.6833 2.609 -19.65 2.609 -19.6167 2.305 -19.5833 1.795 -19.55 1.795 -19.5167 2.200 -19.4833 1.895 -19.45 1.690 -19.4167 1.081 -19.3833 2.400 -19.35 2.500 -19.3167 1.990 -19.2833 3.005 -19.25 2.090 -19.2167 1.276 -19.1833 0.766 -19.15 0.357 -19.1167 1.066 -19.0833 2.081 -19.05 2.790 -19.0167 2.076 -18.9833 1.871 -18.95 1.361 -18.9167 2.171 -18.8833 1.966 -18.85 2.166 -18.8167 2.366 -18.7833 1.857 -18.75 1.752 -18.7167 1.342 -18.6833 1.847 -18.65 2.961 -18.6167 3.161 -18.5833 2.142 -18.55 2.037 -18.5167 1.628 -18.4833 0.913 -18.45 0.604 -18.4167 0.804 -18.3833 2.223 -18.35 1.913 -18.3167 2.113 -18.2833 1.804 -18.25 1.494 -18.2167 1.085 -18.1833 1.994 -18.15 2.294 -18.1167 2.594 -18.0833 1.675 -18.05 1.875 -18.0167 2.175 -17.9833 1.356 -17.95 1.351 -17.9167 2.261 -17.8833 2.865 -17.85 2.251 -17.8167 2.041 -17.7833 2.037 -17.75 1.727 -17.7167 2.127 -17.6833 1.513 -17.65 1.913 -17.6167 1.908 -17.5833 1.698 -17.55 1.793 -17.5167 1.789 -17.4833 1.884 -17.45 1.979 -17.4167 2.684 -17.3833 2.474 -17.35 1.960 -17.3167 2.055 -17.2833 2.150 -17.25 1.941 -17.2167 2.341 -17.1833 2.131 -17.15 2.226 -17.1167 2.626 -17.0833 2.112 -17.05 1.697 -17.0167 2.707 -16.9833 2.497 -16.95 2.388 -16.9167 2.178 -16.8833 1.054 -16.85 1.249 -16.8167 0.735 -16.7833 0.930 -16.75 1.330 -16.7167 1.221 -16.6833 1.416 -16.65 1.511 -16.6167 1.401 -16.5833 1.497 -16.55 1.082 -16.5167 1.277 -16.4833 1.372 -16.45 1.263 -16.4167 1.763 -16.3833 1.653 -16.35 1.748 -16.3167 1.639 -16.2833 0.920 -16.25 0.505 -16.2167 1.005 -16.1833 1.405 -16.15 2.210 -16.1167 2.100 -16.0833 1.991 -16.05 1.881 -16.0167 1.772 -15.9833 1.562 -15.95 1.452 -15.9167 2.257 -15.8833 1.233 -15.85 2.038 -15.8167 1.319 -15.7833 1.414 -15.75 1.304 -15.7167 1.195 -15.6833 1.695 -15.65 2.500 -15.6167 1.680 -15.5833 2.180 -15.55 2.680 -15.5167 1.352 -15.4833 1.547 -15.45 1.947 -15.4167 2.142 -15.3833 1.728 -15.35 1.518 -15.3167 1.104 -15.2833 1.504 -15.25 1.699 -15.2167 1.894 -15.1833 1.684 -15.15 2.489 -15.1167 2.280 -15.0833 2.475 -15.05 2.875 -15.0167 2.360 -14.9833 2.556 -14.95 2.346 -14.9167 1.832 -14.8833 1.927 -14.85 2.427 -14.8167 1.912 -14.7833 1.398 -14.75 1.188 -14.7167 1.284 -14.6833 1.379 -14.65 1.169 -14.6167 1.264 -14.5833 1.260 -14.55 1.964 -14.5167 0.840 -14.4833 0.531 -14.45 0.321 -14.4167 0.112 -14.3833 0.716 -14.35 1.931 -14.3167 0.807 -14.2833 0.802 -14.25 1.102 -14.2167 0.488 -14.1833 0.788 -14.15 1.188 -14.1167 1.388 -14.0833 1.078 -14.05 1.378 -14.0167 1.678 -13.9833 1.673 -13.95 1.568 -13.9167 0.954 -13.8833 -0.065 -13.85 0.844 -13.8167 2.264 -13.7833 2.464 -13.75 2.054 -13.7167 2.354 -13.6833 2.249 -13.65 1.435 -13.6167 0.416 -13.5833 0.006 -13.55 0.816 -13.5167 1.220 -13.4833 1.116 -13.45 0.911 -13.4167 1.416 -13.3833 1.211 -13.35 0.701 -13.3167 0.192 -13.2833 0.292 -13.25 -0.218 -13.2167 0.187 -13.1833 0.896 -13.15 0.996 -13.1167 1.911 -13.0833 1.401 -13.05 2.011 -13.0167 2.111 -12.9833 1.806 -12.95 1.806 -12.9167 2.111 -12.8833 1.806 -12.85 1.806 -12.8167 1.196 -12.7833 1.401 -12.75 0.792 -12.7167 1.301 -12.6833 1.606 -12.65 2.116 -12.6167 2.320 -12.5833 2.016 -12.55 2.220 -12.5167 1.816 -12.4833 2.225 -12.45 2.125 -12.4167 1.720 -12.3833 2.230 -12.35 2.335 -12.3167 2.440 -12.2833 2.340 -12.25 2.140 -12.2167 2.549 -12.1833 2.044 -12.15 3.368 -12.1167 3.473 -12.0833 3.273 -12.05 3.278 -12.0167 2.773 -11.9833 2.878 -11.95 3.188 -11.9167 3.497 -11.8833 4.212 -11.85 4.216 -11.8167 4.831 -11.7833 4.531 -11.75 4.231 -11.7167 3.831 -11.6833 3.531 -11.65 3.231 -11.6167 3.440 -11.5833 3.750 -11.55 3.350 -11.5167 3.560 -11.4833 3.869 -11.45 3.774 -11.4167 3.374 -11.3833 3.584 -11.35 3.488 -11.3167 3.393 -11.2833 3.808 -11.25 4.017 -11.2167 4.532 -11.1833 4.641 -11.15 4.241 -11.1167 3.436 -11.0833 3.241 -11.05 3.351 -11.0167 3.865 -10.9833 4.584 -10.95 4.389 -10.9167 4.194 -10.8833 3.694 -10.85 2.789 -10.8167 2.594 -10.7833 3.008 -10.75 3.423 -10.7167 3.737 -10.6833 4.152 -10.65 3.552 -10.6167 3.052 -10.5833 3.366 -10.55 3.376 -10.5167 3.485 -10.4833 4.714 -10.45 5.028 -10.4167 4.733 -10.3833 4.743 -10.35 4.448 -10.3167 3.848 -10.2833 3.552 -10.25 3.562 -10.2167 3.876 -10.1833 3.886 -10.15 3.796 -10.1167 2.891 -10.0833 3.205 -10.05 3.824 -10.0167 2.515 -9.98333 3.744 -9.95 4.568 -9.91666 4.272 -9.88333 4.487 -9.84999 3.582 -9.81668 3.187 -9.78334 3.197 -9.75001 3.716 -9.71667 3.421 -9.68333 3.635 -9.65 3.240 -9.61666 4.164 -9.58333 4.378 -9.54999 3.373 -9.51668 3.993 -9.48334 4.207 -9.45001 3.507 -9.41667 3.417 -9.38333 2.817 -9.35 2.726 -9.31666 2.941 -9.28333 2.850 -9.24999 3.774 -9.21668 3.989 -9.18334 3.593 -9.15001 3.503 -9.11667 3.413 -9.08333 2.813 -9.05 3.027 -9.01666 2.632 -8.98333 2.641 -8.94999 2.856 -8.91668 3.070 -8.88334 3.285 -8.85001 3.194 -8.81667 2.899 -8.78333 2.504 -8.75 1.804 -8.71666 1.713 -8.68333 2.333 -8.64999 2.852 -8.61668 2.761 -8.58334 3.381 -8.55001 3.290 -8.51667 3.300 -8.48333 3.514 -8.45 3.219 -8.41666 3.129 -8.38333 2.833 -8.34999 3.048 -8.31668 3.362 -8.28334 2.967 -8.25001 3.281 -8.21667 2.886 -8.18333 2.896 -8.15 2.905 -8.11666 3.220 -8.08333 3.129 -8.04999 2.225 -8.01668 2.539 -7.98334 2.853 -7.95001 2.558 -7.91667 2.568 -7.88333 3.187 -7.85 1.977 -7.81666 2.597 -7.78333 1.997 -7.74999 2.006 -7.71668 2.116 -7.68334 2.430 -7.65001 1.830 -7.61667 2.245 -7.58333 1.645 -7.55 1.754 -7.51666 2.678 -7.48333 2.788 -7.44999 1.678 -7.41668 2.602 -7.38334 2.712 -7.35001 2.821 -7.31667 2.321 -7.28333 1.821 -7.25 2.236 -7.21666 1.126 -7.18333 0.321 -7.14999 1.445 -7.11668 1.555 -7.08334 2.274 -7.05001 2.789 -7.01667 2.289 -6.98333 1.584 -6.95 0.269 -6.91666 0.684 -6.88333 0.893 -6.84999 1.103 -6.81668 1.313 -6.78334 1.522 -6.75001 1.122 -6.71667 1.127 -6.68333 0.727 -6.65 1.241 -6.61666 1.856 -6.58333 0.237 -6.54999 0.546 -6.51668 0.551 -6.48334 1.470 -6.45001 1.680 -6.41667 1.989 -6.38333 1.485 -6.35 0.575 -6.31666 -0.030 -6.28333 -0.330 -6.24999 -0.225 -6.21668 0.085 -6.11667 0.604 -6.01666 0.918 -5.88334 1.133 -5.81667 0.223 -5.78333 0.428 -5.75 0.328 -5.71666 -0.382 -5.61668 0.537 -5.58334 -0.477 -5.55001 0.642 -5.51667 0.642 -5.48333 1.457 -5.45 0.847 -5.41666 0.542 -5.38333 -0.167 -5.34999 0.137 -5.31668 0.747 -5.28334 0.137 -5.25001 1.052 -5.21667 1.762 -5.18333 1.152 -5.15 1.152 -5.11666 0.947 -5.08333 0.642 -5.04999 0.742 -5.01668 -0.072 -4.98334 0.028 -4.95001 1.347 -4.91667 1.142 -4.88333 1.852 -4.85 2.257 -4.81666 1.442 -4.78333 1.542 -4.74999 1.742 -4.71668 0.623 -4.68334 1.128 -4.65001 1.633 -4.61667 1.123 -4.58333 1.628 -4.55 0.304 -4.51666 0.504 -4.48333 0.094 -4.44999 0.599 -4.41668 0.189 -4.38334 -0.220 -4.35001 0.994 -4.31667 0.889 -4.28333 1.189 -4.25 0.170 -4.21666 1.385 -4.18333 0.975 -4.14999 0.970 -4.11668 1.880 -4.08334 0.961 -4.05001 1.465 -4.01667 1.461 -3.98333 0.541 -3.95 0.637 -3.91666 1.241 -3.88333 0.932 -3.84999 1.537 -3.81668 0.313 -3.78334 0.103 -3.75001 0.403 -3.71667 -0.211 -3.68333 0.798 -3.65 1.098 -3.61666 0.889 -3.58333 0.679 -3.54999 1.284 -3.51668 0.769 -3.48334 0.255 -3.45001 1.265 -3.41667 1.260 -3.38333 0.441 -3.35 1.145 -3.31666 1.545 -3.28333 0.726 -3.24999 0.821 -3.21668 0.002 -3.18334 0.097 -3.15001 0.193 -3.11667 0.593 -3.08333 0.383 -3.05 1.697 -3.01666 1.793 -2.98333 1.683 -2.94999 1.473 -2.91668 0.349 -2.88334 0.445 -2.85001 0.235 -2.81667 0.430 -2.78333 1.745 -2.75 1.840 -2.71666 1.021 -2.68333 1.421 -2.64999 1.311 -2.61668 0.797 -2.58334 1.501 -2.55001 0.782 -2.51667 1.487 -2.48333 1.887 -2.45 1.677 -2.41666 1.163 -2.38333 2.273 -2.34999 1.453 -2.31668 1.853 -2.28334 1.339 -2.25001 0.620 -2.21667 0.105 -2.18333 0.201 -2.15 0.601 -2.11666 0.391 -2.08333 0.486 -2.04999 1.191 -2.01668 0.677 -1.98334 1.381 -1.95001 1.477 -1.91667 1.877 -1.88333 1.667 -1.85 1.457 -1.81666 0.638 -1.78333 1.343 -1.74999 1.438 -1.71668 1.838 -1.68334 1.629 -1.65001 1.929 -1.61667 1.719 -1.58333 2.424 -1.55 1.505 -1.51666 2.209 -1.48333 2.000 -1.44999 1.690 -1.41668 2.700 -1.38334 1.476 -1.35001 1.876 -1.31667 1.871 -1.28333 1.561 -1.25 1.657 -1.21666 1.957 -1.18333 2.561 -1.14999 2.861 -1.11668 1.942 -1.08334 2.037 -1.05001 2.947 -1.01667 2.333 -0.983333 3.042 -0.949997 2.833 -0.916661 2.218 -0.883325 2.213 -0.849989 2.209 -0.816677 2.204 -0.783341 2.404 -0.750005 1.789 -0.716669 2.699 -0.683333 2.594 -0.649997 2.285 -0.616661 2.180 -0.583325 2.075 -0.549989 2.375 -0.516677 2.880 -0.483341 2.775 -0.450005 2.670 -0.416669 2.261 -0.383333 3.170 -0.349997 3.370 -0.316661 4.080 -0.283325 3.670 -0.249989 4.175 -0.216677 4.070 -0.183341 3.356 -0.150005 3.456 -0.116669 3.961 -0.0833333 3.246 -0.0499973 3.956 -0.0166613 3.851 0.0166747 3.341 0.0500107 3.746 0.0833227 3.641 0.116659 4.351 0.149995 4.451 0.183331 4.246 0.216667 4.041 0.250003 4.446 0.283339 4.241 0.316675 4.037 0.350011 5.051 0.383323 5.761 0.416659 5.556 0.449995 4.032 0.483331 3.827 0.516667 3.927 0.550003 4.841 0.583339 4.027 0.616675 4.332 0.650011 3.722 0.683323 3.822 0.716659 5.651 0.749995 3.517 0.783331 3.822 0.816667 3.517 0.850003 4.432 0.883339 4.737 0.916675 4.127 0.950011 4.432 0.983323 3.517 1.01666 5.346 1.04999 4.127 1.08333 5.246 1.11667 5.246 1.15 5.146 1.18334 4.841 1.21667 5.451 1.25001 4.437 1.28332 4.337 1.31666 2.508 1.34999 3.322 1.38333 2.917 1.41667 3.832 1.45 3.427 1.48334 2.717 1.51667 3.532 1.55001 4.651 1.58332 3.941 1.61666 2.927 1.64999 2.217 1.68333 3.641 1.71667 3.846 1.75 2.832 1.78334 4.256 1.81667 2.937 1.85001 2.432 1.88332 3.551 1.91666 3.756 1.94999 4.470 1.98333 5.285 2.01667 4.270 2.05 2.851 2.08334 3.056 2.11667 2.956 2.15001 3.670 2.18332 3.265 2.21666 4.285 2.24999 3.270 2.28333 2.765 2.31667 2.361 2.35 1.856 2.38334 3.485 2.41667 3.994 2.45001 5.013 2.48332 4.609 2.51666 3.494 2.54999 3.294 2.58333 3.499 2.61667 2.689 2.65 3.504 2.68334 5.437 2.71667 4.933 2.75001 3.613 2.78332 3.413 2.81666 3.518 2.84999 5.247 2.88333 4.742 2.91667 5.252 2.95 5.052 2.98334 3.633 3.01667 4.142 3.05001 3.942 3.08332 3.742 3.11666 5.166 3.14999 5.576 3.18333 5.171 3.21667 4.361 3.25 3.957 3.28334 4.976 3.31667 5.081 3.35001 4.371 3.38332 4.171 3.41666 4.681 3.44999 3.666 3.48333 3.161 3.51667 5.805 3.55 17.797 3.58334 53.054 3.61667 116.657 3.65001 172.236 3.68332 174.879 3.71666 123.877 3.74999 59.669 3.78333 12.629 3.81667 -14.903 3.85 -29.328 3.88334 -41.925 3.91667 -40.906 3.95001 -4.125 3.98332 -24.647 4.01666 -69.248 4.04999 -73.310 4.08333 -73.105 4.11667 -73.815 4.15 -44.349 4.18334 -58.370 4.21667 -75.844 4.25001 -18.946 4.28332 19.054 4.31666 67.113 4.34999 99.727 4.38333 125.535 4.41667 81.948 4.45 61.426 4.48334 23.226 4.51667 -7.254 4.55001 9.715 4.58332 23.736 4.61666 -1.258 4.64999 -20.865 4.68333 -44.030 4.71667 -37.934 4.75 -53.479 4.78334 -61.404 4.81667 -40.777 4.85001 23.231 4.88332 59.198 4.91666 84.596 4.94999 80.024 4.98333 34.304 5.01667 -1.358 5.05 -23.913 5.08334 -49.721 5.11667 -46.978 5.15001 35.013 5.18332 92.721 5.21666 96.683 5.24999 82.458 5.28333 34.299 5.31667 23.731 5.35 -11.831 5.38334 -28.190 5.41667 -35.405 5.45001 -53.693 5.48332 -67.919 5.51666 -69.952 5.54999 -52.074 5.58333 5.633 5.61667 68.218 5.65 97.883 5.68334 93.106 5.71667 39.966 5.75001 -5.959 5.78332 -28.924 5.81666 -39.187 5.84999 -49.655 5.88333 -41.530 5.91667 14.044 5.95 70.632 5.98334 93.692 6.01667 99.988 6.05001 67.879 6.08332 27.236 6.11666 -8.226 6.14999 -26.924 6.18333 -14.531 6.21667 1.009 6.25 15.229 6.28334 14.210 6.31667 12.072 6.35001 20.197 6.38332 29.641 6.41666 10.129 6.44999 -36.001 6.48333 -51.856 6.51667 -32.048 6.55 3.304 6.58334 15.796 6.61667 28.897 6.65001 27.978 6.68332 2.675 6.71666 1.451 6.74999 -15.928 6.78333 -6.788 6.81667 31.102 6.85 61.273 6.88334 60.658 6.91667 40.027 6.95001 -8.746 6.98332 -23.281 7.01666 -8.246 7.04999 1.498 7.08333 14.090 7.11667 12.661 7.15 -4.412 7.18334 -35.102 7.21667 -38.360 7.25001 -26.682 7.28332 -7.384 7.31666 0.636 7.34999 26.944 7.38333 49.085 7.41667 47.961 7.45 34.340 7.48334 18.585 7.51667 20.205 7.55001 30.763 7.58332 42.441 7.61666 38.064 7.64999 10.727 7.68333 -22.606 7.71667 -32.874 7.75 -32.374 7.78334 -37.156 7.81667 -13.491 7.85001 17.694 7.88332 31.301 7.91666 49.784 7.94999 53.332 7.98333 33.005 8.01667 20.094 8.05 6.573 8.08334 -9.081 8.11667 -21.688 8.15001 -17.630 8.18332 -6.767 8.21666 18.117 8.24999 28.066 8.28333 28.871 8.31667 12.607 8.35 -12.801 8.38334 -20.531 8.41667 -13.020 8.45001 -9.777 8.48332 -12.935 8.51666 0.672 8.54999 15.497 8.58333 19.960 8.61667 23.508 8.65 27.056 8.68334 26.337 8.71667 4.891 8.75001 -13.202 8.78332 -9.044 8.81666 -8.849 8.84999 -9.873 8.88333 8.915 8.91667 13.987 8.95 -4.411 8.98334 -3.911 9.01667 -8.592 9.05001 19.645 9.08332 47.272 9.11666 42.590 9.14999 37.299 9.18333 36.885 9.21667 20.316 9.25 6.490 9.28334 4.247 9.31667 -5.007 9.35001 -15.275 9.38332 -10.812 9.41666 -13.056 9.44999 9.695 9.48333 18.629 9.51667 10.290 9.55 1.546 9.58334 -5.269 9.61667 -0.907 9.65001 -7.112 9.68332 -22.867 9.71666 -26.329 9.74999 -14.042 9.78333 10.742 9.81667 31.969 9.85 34.807 9.88334 27.282 9.91667 10.918 9.95001 -2.703 9.98332 -1.998 10.0167 -2.817 10.05 -2.112 10.0833 0.421 10.1167 -3.446 10.15 -11.580 10.1833 3.045 10.2167 28.134 10.25 32.092 10.2833 19.995 10.3167 19.380 10.35 14.294 10.3833 3.621 10.4167 -11.014 10.45 -15.896 10.4833 -7.366 10.5167 -8.285 10.55 -22.006 10.5833 -21.401 10.6167 2.978 10.65 9.984 10.6833 4.392 10.7167 1.340 10.75 -6.995 10.7833 -11.267 10.8167 -6.800 10.85 -3.552 10.8833 6.707 10.9167 17.880 10.95 20.213 10.9833 23.766 11.0167 31.586 11.05 28.433 11.0833 28.533 11.1167 29.343 11.15 29.138 11.1833 26.595 11.2167 15.112 11.25 -4.295 11.2833 -10.596 11.3167 -15.068 11.35 -19.844 11.3833 -28.584 11.4167 -30.617 11.45 -22.693 11.4833 -11.924 11.5167 -7.048 11.55 -3.390 11.5833 8.597 11.6167 21.704 11.65 29.324 11.6833 33.286 11.7167 29.933 11.75 18.960 11.7833 22.213 11.8167 25.566 11.85 16.322 11.8833 1.692 11.9167 -4.504 11.95 -5.214 11.9833 -6.533 12.0167 -11.205 12.05 -9.172 12.0833 -2.261 12.1167 -8.457 12.15 -21.764 12.1833 -25.521 12.2167 -17.187 12.25 6.183 12.2833 17.260 12.3167 14.927 12.35 19.299 12.3833 16.051 12.4167 10.060 12.45 12.603 12.4833 12.912 12.5167 12.408 12.55 7.840 12.5833 -2.113 12.6167 -5.766 12.65 -6.980 12.6833 -8.195 12.7167 0.649 12.75 9.493 12.7833 4.012 12.8167 0.664 12.85 -1.770 12.8833 -2.170 12.9167 16.428 12.95 29.744 12.9833 21.114 13.0167 20.204 13.05 14.013 13.0833 7.212 13.1167 3.155 13.15 -7.304 13.1833 -14.509 13.2167 -10.337 13.25 -8.908 13.2833 -5.751 13.3167 7.565 13.35 13.466 13.3833 20.686 13.4167 17.138 13.45 10.847 13.4833 6.080 13.5167 2.227 13.55 -4.369 13.5833 1.227 13.6167 1.946 13.65 1.956 13.6833 21.268 13.7167 29.607 13.75 26.569 13.7833 20.887 13.8167 9.314 13.85 -0.635 13.8833 -3.673 13.9167 -15.246 13.95 -14.932 13.9833 -11.569 14.0167 -7.292 14.05 -6.673 14.0833 8.272 14.1167 18.340 14.15 31.456 14.1833 34.209 14.2167 18.369 14.25 5.172 14.2833 -9.144 14.3167 -13.402 14.35 6.624 14.3833 24.313 14.4167 19.041 14.45 20.574 14.4833 9.511 14.5167 4.948 14.55 6.382 14.5833 -8.948 14.6167 -0.709 14.65 13.831 14.6833 19.837 14.7167 20.661 14.75 12.950 14.7833 0.768 14.8167 1.897 14.85 7.293 14.8833 3.240 14.9167 -2.947 14.95 -4.256 14.9833 -1.603 15.0167 -7.085 15.05 -22.816 15.0833 -17.724 15.1167 6.569 15.15 26.596 15.1833 20.714 15.2167 7.213 15.25 0.417 15.2833 -7.294 15.3167 -6.165 15.35 -12.961 15.3833 12.247 15.4167 11.852 15.45 18.162 15.4833 26.606 15.5167 28.040 15.55 31.302 15.5833 14.448 15.6167 -4.235 15.65 -10.117 15.6833 -16.303 15.7167 -14.870 15.75 -10.693 15.7833 3.847 15.8167 15.339 15.85 24.493 15.8833 26.231 15.9167 23.702 15.95 22.393 15.9833 10.720 16.0167 5.448 16.05 -7.649 16.0833 -15.969 16.1167 -18.193 16.15 -9.649 16.1833 13.425 16.2167 23.393 16.25 26.756 16.2833 23.617 16.3167 15.702 16.35 15.307 16.3833 8.916 16.4167 -4.586 16.45 -22.559 17.4833 35.122 17.5167 51.081 17.55 26.906 17.5833 5.780 17.6167 -4.779 17.65 57.001 17.6833 -7.712 17.7167 -29.448 17.75 0.327 17.7833 5.413 17.8167 13.853 17.85 12.234 17.8833 13.662 17.9167 -2.487 17.95 -6.850 17.9833 -15.379 18.0167 9.214 18.05 10.743 18.0833 -12.417 18.1167 5.571 18.15 4.662 18.1833 11.067 18.2167 19.911 18.25 22.050 18.2833 6.914 18.3167 8.748 18.35 -3.644 18.3833 -2.115 18.4167 13.534 18.45 15.163 20.4833 10.524 20.5167 15.701 20.55 9.600 20.5833 -4.731 20.6167 -11.341 20.65 -9.517 20.6833 -1.497 20.7167 -3.026 20.75 8.042 20.7833 12.000 20.8167 4.170 20.85 -7.317 20.8833 -3.664 20.9167 -1.435 20.95 3.537 20.9833 7.289 21.0167 11.652 21.05 7.785 21.0833 9.404 21.1167 18.034 21.15 15.690 21.1833 14.262 21.2167 8.565 21.25 13.333 21.2833 5.808 21.3167 -9.032 21.35 -15.643 21.3833 -12.399 21.4167 -1.331 21.45 5.165 21.4833 5.055 21.5167 -0.336 21.55 1.078 21.5833 -1.570 21.6167 5.231 21.65 6.341 21.6833 -1.184 21.7167 -9.219 21.75 -3.027 21.7833 6.312 21.8167 8.541 21.85 11.784 21.8833 18.280 21.9167 14.817 21.95 9.121 21.9833 11.755 22.0167 15.813 22.05 17.532 22.0833 9.093 22.1167 -5.647 22.15 -11.039 22.1833 -16.635 22.2167 -4.957 22.25 4.077 22.2833 6.611 22.3167 0.710 22.35 -3.462 22.3833 -8.448 22.4167 -9.877 22.45 -3.686 22.4833 6.873 22.5167 11.540 22.55 3.101 22.5833 2.077 22.6167 9.182 22.65 11.411 22.6833 14.249 22.7167 15.564 22.75 13.016 22.7833 11.892 22.8167 11.682 22.85 8.120 22.8833 8.520 22.9167 11.968 22.95 9.929 22.9833 -4.301 23.0167 -14.674 23.05 -13.659 23.0833 -11.735 23.1167 -12.250 23.15 -16.422 23.1833 -14.903 23.2167 1.042 23.25 14.449 23.2833 13.325 23.3167 1.128 23.35 -3.654 23.3833 0.913 23.4167 11.372 23.45 22.645 23.4833 17.458 23.5167 11.967 23.55 16.634 23.5833 23.335 23.6167 14.491 23.65 6.561 23.6833 7.166 23.7167 4.723 23.75 -0.768 23.7833 -7.579 23.8167 -14.594 23.85 -18.561 23.8833 -18.666 23.9167 -12.270 23.95 -3.131 23.9833 2.251 24.0167 11.085 24.05 16.772 24.0833 16.667 24.1167 19.710 24.15 13.509 24.1833 6.699 24.2167 3.241 24.25 5.575 24.2833 13.395 24.3167 12.985 24.35 10.442 24.3833 13.690 24.4167 9.218 24.45 1.189 24.4833 -3.183 24.5167 -10.094 24.55 -16.904 24.5833 -12.842 24.6167 0.465 24.65 10.318 24.6833 11.942 24.7167 9.399 24.75 5.841 24.7833 6.246 24.8167 3.603 24.85 0.045 24.8833 -1.988 24.9167 -1.279 24.95 -3.412 24.9833 -1.788 25.0167 6.846 25.05 13.247 25.0833 14.871 25.1167 23.201 25.15 24.725 25.1833 8.265 25.2167 -1.083 25.25 -6.570 25.2833 -3.827 25.3167 -2.607 25.35 -0.779 25.3833 8.770 25.4167 11.513 25.45 7.146 25.4833 3.793 25.5167 8.670 25.55 6.841 25.5833 -3.522 25.6167 -12.156 25.65 -19.167 25.6833 -17.133 25.7167 -6.465 25.75 4.408 25.7833 13.857 25.8167 13.757 25.85 18.533 25.8833 20.362 25.9167 15.081 25.95 8.885 25.9833 7.261 26.0167 2.893 26.05 8.280 26.0833 9.094 26.1167 2.289 26.15 -5.431 26.1833 0.260 26.2167 14.790 26.25 14.590 26.2833 13.881 26.3167 7.075 26.35 1.389 26.3833 -2.979 26.4167 -6.736 26.45 -5.412 26.4833 -0.026 26.5167 7.699 26.55 10.647 26.5833 17.762 26.6167 12.685 26.65 6.185 26.6833 11.471 26.7167 18.991 26.75 11.476 26.7833 5.789 26.8167 1.627 26.85 -0.911 26.8833 -1.721 26.9167 2.956 26.95 10.071 26.9833 14.138 27.0167 5.504 27.05 3.475 27.0833 8.457 27.1167 11.000 27.15 6.228 27.1833 -1.592 27.2167 -3.926 27.25 -8.698 27.2833 -4.021 27.3167 3.804 27.35 11.224 27.3833 16.815 27.4167 14.786 27.45 8.490 27.4833 1.889 27.5167 4.433 27.55 9.414 27.5833 15.920 27.6167 21.001 27.65 20.497 27.6833 22.125 27.7167 25.583 27.75 26.297 27.7833 22.440 27.8167 18.377 27.85 6.900 27.8833 -3.968 27.9167 -11.483 27.95 -15.951 27.9833 -11.783 28.0167 -4.363 28.05 0.923 28.0833 0.823 28.1167 5.500 28.15 8.957 28.1833 11.905 28.2167 16.887 28.25 19.225 28.2833 22.073 28.3167 18.316 28.35 15.373 28.3833 18.625 28.4167 27.060 28.45 31.432 28.4833 25.236 28.5167 12.639 28.55 3.295 28.5833 -1.072 28.6167 -5.744 28.65 -2.491 28.6833 -3.811 28.7167 -4.520 28.75 -3.196 28.7833 1.276 28.8167 3.614 28.85 4.529 28.8833 8.086 28.9167 12.863 28.95 14.897 28.9833 19.673 29.0167 19.878 29.05 16.525 29.0833 10.939 29.1167 6.572 29.15 6.267 29.1833 3.119 29.2167 0.376 29.25 2.814 29.2833 -0.029 29.3167 -5.515 29.35 -1.858 29.3833 6.272 29.4167 8.710 29.45 7.186 29.4833 14.806 29.5167 15.721 29.55 9.320 29.5833 2.309 29.6167 5.357 29.65 11.453 29.6833 11.149 29.7167 12.773 29.75 11.249 29.7833 7.591 29.8167 5.557 29.85 5.862 29.8833 0.171 29.9167 -3.082 29.95 -5.825 29.9833 -7.859 30.0167 -5.015 30.05 2.400 30.0833 5.753 30.1167 12.863 30.15 17.230 30.1833 11.539 30.2167 9.910 30.25 3.305 30.2833 2.795 30.3167 4.724 30.35 8.277 30.3833 5.329 30.4167 -1.787 30.45 -5.344 30.4833 -8.497 30.5167 -6.773 30.55 -1.491 30.5833 7.548 30.6167 10.491 30.65 6.729 30.6833 1.747 30.7167 -0.491 30.75 0.013 30.7833 3.566 30.8167 10.572 30.85 9.857 30.8833 7.314 30.9167 -0.006 30.95 -2.549 30.9833 2.933 31.0167 6.481 31.05 13.796 31.0833 9.524 31.1167 0.375 31.15 -7.555 31.1833 -6.645 31.2167 1.275 31.25 9.195 31.2833 11.933 31.3167 10.405 31.35 6.133 31.3833 -1.392 31.4167 -5.969 31.45 -0.792 31.4833 9.057 31.5167 17.586 31.55 18.901 31.5833 14.424 31.6167 8.323 31.65 5.980 31.6833 3.941 31.7167 3.732 31.75 3.827 31.7833 5.141 31.8167 5.237 31.85 0.760 31.8833 -3.717 31.9167 -4.536 31.95 -8.708 31.9833 -3.127 32.0167 5.603 32.05 9.661 32.0833 8.332 32.1167 8.427 32.15 9.437 32.1833 6.279 32.2167 5.460 32.25 11.141 32.2833 15.299 32.3167 5.336 32.35 -4.832 32.3833 -4.332 32.4167 -0.784 32.45 3.578 32.4833 8.955 32.5167 12.503 32.55 8.431 32.5833 -2.652 32.6167 -3.371 32.65 4.140 32.6833 9.517 32.7167 7.883 32.75 6.554 32.7833 6.445 32.8167 7.249 32.85 9.273 32.8833 12.517 32.9167 10.883 32.95 9.349 32.9833 7.716 33.0167 2.120 33.05 -0.428 33.0833 2.815 33.1167 3.924 33.15 4.829 33.1833 4.415 33.2167 5.220 33.25 8.463 33.2833 8.963 33.3167 12.001 33.35 14.025 33.3833 9.648 33.4167 4.052 33.45 3.028 33.4833 0.276 33.5167 -1.053 33.55 2.800 33.5833 6.957 33.6167 9.286 33.65 8.567 33.6833 9.372 33.7167 12.005 33.75 11.591 33.7833 11.481 33.8167 11.372 33.85 6.995 33.8833 3.532 33.9167 5.252 33.95 8.190 33.9833 10.214 34.0167 9.800 34.05 9.385 34.0833 5.518 34.1167 3.580 34.15 1.336 34.1833 0.822 34.2167 4.065 34.25 3.551 34.2833 3.441 34.3167 5.975 34.35 7.389 34.3833 7.789 34.4167 7.580 34.45 5.032 34.4833 0.860 34.5167 -0.874 34.55 0.745 34.5833 -0.684 34.6167 -2.417 34.65 1.031 34.6833 1.431 34.7167 3.355 34.75 8.836 34.7833 12.284 34.8167 15.123 34.85 11.156 34.8833 6.679 34.9167 5.150 34.95 3.621 34.9833 7.579 35.0167 12.246 35.05 11.936 35.0833 11.017 35.1167 11.927 35.15 7.860 35.1833 -0.375 35.2167 -4.647 35.25 -4.042 35.2833 0.730 35.3167 2.554 35.35 2.754 35.3833 4.173 35.4167 4.068 35.45 3.354 35.4833 3.249 35.5167 4.973 35.55 6.088 35.5833 9.031 35.6167 12.888 35.65 12.074 35.6833 6.483 35.7167 3.230 35.75 2.111 35.7833 2.920 35.8167 7.897 35.85 9.216 35.8833 6.573 35.9167 2.916 35.95 -0.642 35.9833 -3.285 36.0167 -0.542 36.05 1.692 36.0833 2.606 36.1167 1.082 36.15 0.168 36.1833 -0.137 36.2167 0.777 36.25 1.996 36.2833 2.606 36.3167 5.654 36.35 10.736 36.3833 11.650 36.4167 10.026 36.45 12.974 36.4833 12.364 36.5167 10.131 36.55 10.336 36.5833 5.968 36.6167 1.501 36.65 -0.428 36.6833 -2.661 36.7167 -1.947 36.75 -2.147 36.7833 -3.161 36.8167 0.601 36.85 7.107 36.8833 10.260 36.9167 11.584 36.95 10.774 36.9833 10.169 37.0167 9.360 37.05 7.331 37.0833 4.592 37.1167 4.902 37.15 6.836 37.1833 5.316 37.2167 0.749 37.25 -2.294 37.2833 -1.984 37.3167 0.968 37.35 4.021 37.3833 8.293 37.4167 11.856 37.45 13.689 37.4833 14.508 37.5167 12.280 37.55 11.880 37.5833 8.432 37.6167 7.727 37.65 8.241 37.6833 6.012 37.7167 3.174 37.75 3.688 37.7833 6.236 37.8167 7.360 37.85 5.336 37.8833 1.484 37.9167 0.779 37.95 5.765 37.9833 7.094 38.0167 4.156 38.05 2.436 38.0833 4.680 38.1167 6.518 38.15 10.895 38.1833 13.443 38.2167 14.976 38.25 14.476 38.2833 9.609 38.3167 5.147 38.35 2.718 38.3833 2.118 38.4167 0.908 38.45 -0.201 38.4833 1.028 38.5167 4.390 38.55 3.790 38.5833 2.176 38.6167 3.404 38.65 5.852 38.6833 6.472 38.7167 8.820 38.75 10.048 38.7833 10.668 38.8167 12.711 38.85 12.721 38.8833 10.192 38.9167 8.982 38.95 11.635 38.9833 10.325 39.0167 8.401 39.05 10.854 39.0833 10.459 39.1167 4.577 39.15 -1.000 39.1833 -3.733 39.2167 1.358 39.25 5.535 39.2833 4.835 39.3167 7.183 39.35 5.873 39.3833 3.954 39.4167 5.388 39.45 5.907 39.4833 8.865 39.5167 11.113 39.55 11.022 39.5833 8.493 39.6167 3.831 39.65 -0.222 39.6833 -0.312 39.7167 5.693 39.75 8.041 39.7833 12.728 39.8167 14.161 39.85 9.194 39.8833 7.275 39.9167 8.099 39.95 10.142 39.9833 8.528 40.0167 6.509 40.05 6.418 40.0833 5.109 40.1167 0.446 40.15 -0.559 40.1833 2.399 40.2167 5.052 40.25 6.181 40.2833 5.176 40.3167 3.257 40.35 1.033 40.3833 5.209 40.4167 11.520 40.45 12.039 40.4833 13.168 40.5167 16.430 40.55 16.645 40.5833 14.725 40.6167 12.601 40.65 12.511 40.6833 9.677 40.7167 10.806 40.75 9.901 40.7833 6.153 40.8167 0.981 40.85 2.110 40.8833 2.020 40.9167 -2.238 40.95 -3.752 40.9833 -3.538 41.0167 0.739 41.05 5.321 41.0833 10.717 41.1167 13.469 41.15 13.784 41.1833 11.355 41.2167 9.841 41.25 12.593 41.2833 13.213 41.3167 17.185 41.35 16.585 41.3833 12.632 41.4167 9.289 41.45 7.874 41.4833 4.226 41.5167 2.507 41.55 -0.531 41.5833 -2.555 41.6167 -1.631 41.65 1.526 41.6833 3.160 41.7167 5.913 41.75 8.156 41.7833 6.437 41.8167 4.413 41.85 2.084 41.8833 1.279 41.9167 2.708 41.95 10.133 41.9833 15.424 42.0167 18.986 42.05 10.562 42.0833 7.723 42.1167 4.885 42.15 4.080 42.1833 4.289 42.2167 3.585 42.25 0.137 42.2833 -4.226 42.3167 -3.407 42.35 -0.149 42.3833 6.866 42.4167 11.343 42.45 10.434 42.4833 10.338 42.5167 8.819 42.55 7.910 42.5833 7.305 42.6167 10.562 43.4833 -1.658 43.5167 -0.538 43.55 -1.148 43.5833 3.119 43.6167 4.543 43.65 7.896 43.6833 6.372 43.7167 6.372 43.75 3.729 43.7833 0.681 43.8167 1.595 43.85 2.000 43.8833 1.695 43.9167 0.576 43.95 0.981 43.9833 6.567 44.0167 9.106 44.05 8.596 44.0833 7.782 44.1167 4.224 44.15 2.190 44.1833 -3.401 44.2167 -4.520 44.25 -5.844 44.2833 0.352 44.3167 -0.058 44.35 1.362 44.3833 2.171 44.4167 1.762 44.45 1.657 44.4833 -1.801 44.5167 -1.601 44.55 -1.301 44.5833 0.423 44.6167 4.890 44.65 6.410 44.6833 6.405 44.7167 3.862 44.75 1.723 44.7833 0.499 44.8167 0.189 44.85 1.099 44.8833 1.094 44.9167 3.223 44.95 0.780 44.9833 -0.749 45.0167 -3.092 45.05 -1.878 45.0833 -0.054 45.1167 -1.483 45.15 -4.840 45.1833 -7.183 45.2167 -4.650 45.25 -0.692 45.2833 1.232 45.3167 1.327 45.35 2.337 45.3833 6.699 45.4167 7.304 45.45 5.265 45.4833 3.937 45.5167 3.422 45.55 3.517 45.5833 5.441 45.6167 5.841 45.65 4.108 45.6833 1.865 45.7167 0.436 45.75 -3.431 45.7833 -3.031 45.8167 1.126 45.85 3.355 45.8833 3.550 45.9167 -0.622 45.95 -4.084 45.9833 -5.513 46.0167 -0.441 46.05 4.836 46.0833 6.555 46.1167 7.260 46.15 5.931 46.1833 4.297 46.2167 3.173 46.25 5.502 46.2833 8.441 46.3167 6.707 46.35 4.159 46.3833 -1.232 46.4167 -3.780 46.45 0.073 46.4833 5.349 46.5167 8.288 46.55 5.130 46.5833 -1.785 46.6167 -5.552 46.65 -5.662 46.6833 -3.433 46.7167 0.115 46.75 0.310 46.7833 1.015 46.8167 1.515 46.85 -0.219 46.8833 1.501 46.9167 3.120 46.95 3.315 46.9833 3.105 47.0167 2.186 47.05 3.091 47.0833 3.591 47.1167 3.381 47.15 2.867 47.1833 0.014 47.2167 -0.805 47.25 1.729 47.2833 2.533 47.3167 2.324 47.35 1.809 47.3833 1.905 47.4167 0.781 47.45 -0.343 47.4833 0.971 47.5167 -1.372 47.55 -3.411 47.5833 -3.620 47.6167 -1.696 47.65 -1.296 47.6833 1.237 47.7167 4.076 47.75 8.643 47.7833 12.701 47.8167 10.967 47.85 8.219 47.8833 4.961 47.9167 2.518 47.95 2.918 47.9833 5.961 48.0167 2.604 48.05 1.175 48.0833 1.780 48.1167 2.385 48.15 3.904 48.1833 4.204 48.2167 5.113 48.25 2.670 48.2833 1.141 48.3167 -0.083 48.35 0.217 48.3833 1.432 48.4167 2.241 48.45 2.846 48.4833 3.451 48.5167 2.737 48.55 4.865 48.5833 6.894 48.6167 7.704 48.65 7.699 48.6833 8.204 48.7167 5.356 48.75 3.727 48.7833 3.927 48.8167 6.565 48.85 5.546 48.8833 1.174 48.9167 1.069 48.95 2.489 48.9833 5.432 49.0167 6.141 49.05 6.037 49.0833 4.003 49.1167 0.545 49.15 -2.707 49.1833 -4.436 49.2167 -1.188 49.25 3.484 49.2833 9.680 49.3167 12.828 49.35 11.099 49.3833 7.846 49.4167 6.422 49.45 6.217 49.4833 5.708 49.5167 6.013 49.55 7.637 49.5833 3.165 49.6167 -1.712 49.65 -3.441 49.6833 -2.222 49.7167 2.045 49.75 5.193 49.7833 5.498 49.8167 2.450 49.85 -0.598 49.8833 -1.817 49.9167 -0.598 49.95 2.450 49.9833 5.803 50.0167 7.022 50.05 5.498 50.0833 6.922 50.1167 6.313 50.15 7.227 50.1833 7.737 50.2167 7.737 50.25 5.503 50.2833 4.489 50.3167 3.574 50.35 2.560 50.3833 2.765 50.4167 5.408 50.45 9.270 50.4833 9.780 50.5167 8.765 50.55 4.703 50.5833 1.250 50.6167 -0.069 50.65 0.441 50.6833 3.084 50.7167 3.493 50.75 0.955 50.7833 1.465 50.8167 2.484 50.85 1.774 50.8833 2.489 50.9167 2.693 50.95 3.103 50.9833 3.917 51.0167 3.717 51.05 2.908 51.0833 2.808 51.1167 3.522 51.15 3.322 51.1833 3.122 51.2167 5.665 51.25 8.209 51.2833 8.413 51.3167 7.299 51.35 5.880 51.3833 4.461 51.4167 1.517 51.45 1.317 51.4833 2.641 51.5167 3.051 51.55 -0.807 51.5833 -2.021 51.6167 -2.831 51.65 -0.287 51.6833 3.780 51.7167 3.885 51.75 4.294 51.7833 3.485 51.8167 3.589 51.85 6.033 51.8833 7.357 51.9167 7.157 51.95 10.005 51.9833 10.109 52.0167 6.861 52.05 4.223 52.0833 3.313 52.1167 2.199 52.15 1.085 52.1833 2.409 52.2167 2.209 52.25 1.094 52.2833 0.285 52.3167 -0.525 52.35 -1.944 52.3833 -3.059 52.4167 -2.954 52.45 -0.106 52.4833 2.437 52.5167 4.371 52.55 7.524 52.5833 9.762 52.6167 8.953 52.65 8.753 52.6833 7.638 52.7167 6.829 52.75 4.190 52.7833 2.871 52.8167 2.976 52.85 4.300 52.8833 4.709 52.9167 4.609 52.95 2.276 52.9833 -0.567 53.0167 -1.072 53.05 0.657 53.0833 4.114 53.1167 5.843 53.15 5.338 53.1833 4.324 53.2167 2.600 53.25 2.195 53.2833 2.400 53.3167 3.519 53.35 4.843 53.3833 6.572 53.4167 7.691 53.45 6.372 53.4833 6.881 53.5167 8.305 53.55 9.729 53.5833 6.886 53.6167 2.924 53.65 -1.139 53.6833 -3.372 53.7167 -3.167 53.75 1.709 53.7833 4.657 53.8167 6.486 53.85 6.996 53.8833 5.777 53.9167 3.848 53.95 4.153 53.9833 5.372 54.0167 4.662 54.05 2.833 54.0833 2.833 54.1167 3.443 54.15 3.748 54.1833 6.186 54.2167 8.929 54.25 10.149 54.2833 6.491 54.3167 0.800 54.35 -1.334 54.3833 -0.724 54.4167 -0.319 54.45 2.424 54.4833 4.048 54.5167 3.438 54.55 2.014 54.5833 1.505 54.6167 3.433 54.65 5.262 54.6833 6.886 54.7167 7.291 54.75 6.477 54.7833 5.053 54.8167 4.033 54.85 4.438 54.8833 6.672 54.9167 8.601 54.95 7.581 54.9833 3.414 55.0167 -0.043 55.05 -2.077 55.0833 -0.353 55.1167 1.981 55.15 2.995 55.1833 2.281 55.2167 1.871 55.25 3.595 55.2833 5.319 55.3167 8.262 55.35 10.696 55.3833 10.286 55.4167 7.438 55.45 3.371 55.4833 1.233 55.5167 2.042 55.55 4.476 55.5833 5.081 55.6167 4.671 55.65 4.361 55.6833 5.576 55.7167 4.352 55.75 5.261 55.7833 5.866 55.8167 5.861 55.85 3.418 55.8833 1.889 55.9167 3.204 55.95 3.504 55.9833 3.804 56.0167 3.594 56.05 3.589 56.0833 3.075 56.1167 2.765 56.15 1.946 56.1833 2.346 56.2167 2.746 56.25 1.622 56.2833 1.008 56.3167 2.627 56.35 3.027 56.3833 3.832 56.4167 4.232 56.45 6.156 56.4833 6.861 56.5167 5.432 56.55 5.322 56.5833 4.503 56.6167 3.784 56.65 2.355 56.6833 2.855 56.7167 2.645 56.75 1.621 56.7833 2.021 56.8167 3.131 56.85 2.717 56.8833 1.288 56.9167 0.569 56.95 1.069 56.9833 1.569 57.0167 -0.065 57.05 -3.223 57.0833 -1.503 57.1167 1.740 57.15 6.202 57.1833 9.750 57.2167 10.860 57.25 11.055 57.2833 8.812 57.3167 5.959 57.35 4.325 57.3833 2.997 57.4167 0.853 57.45 -1.085 57.4833 -0.890 57.5167 -1.304 57.55 -0.095 57.5833 2.234 57.6167 3.953 57.65 3.844 57.6833 2.920 57.7167 0.676 57.75 -1.262 57.7833 -1.067 57.8167 0.752 57.85 2.167 57.8833 3.886 57.9167 3.167 57.95 3.157 57.9833 4.876 58.0167 6.596 58.05 6.791 58.0833 5.157 58.1167 2.404 58.15 0.771 58.1833 -0.253 58.2167 -0.363 58.25 1.052 58.2833 2.466 58.3167 2.052 58.35 1.637 58.3833 1.223 58.4167 0.808 58.45 -0.216 58.4833 -0.325 58.5167 -0.740 58.55 -0.849 58.5833 -1.568 58.6167 -2.388 58.65 -2.497 58.6833 -2.302 58.7167 -3.426 58.75 -2.316 58.7833 -0.392 58.8167 3.156 58.85 3.556 58.8833 4.056 58.9167 4.760 58.95 4.856 58.9833 3.222 59.0167 2.708 59.05 4.022 59.0833 3.812 59.1167 2.079 59.15 0.650 59.1833 -0.169 59.2167 -0.988 59.25 -1.908 59.2833 -2.727 59.3167 -2.327 59.35 -2.027 59.3833 -1.322 59.4167 -1.327 59.45 -1.636 59.4833 -0.322 59.5167 0.588 59.55 0.278 59.5833 0.578 59.6167 2.707 59.65 4.531 59.6833 6.355 59.7167 7.469 59.75 6.245 59.7833 3.497 59.8167 0.649 59.85 -1.284 59.8833 -2.204 59.9167 -2.613 59.95 -3.632 59.9833 -3.432 60.0167 -2.623 60.05 -2.118 60.0833 -1.004 60.1167 -0.904 60.15 -1.618 60.1833 -1.823 60.2167 -1.928 60.25 -0.608 60.2833 -0.508 60.3167 -1.323 60.35 -2.747 60.3833 -2.952 60.4167 -2.547 60.45 -0.923 60.4833 1.006 60.5167 1.311 60.55 0.496 60.5833 -0.418 60.6167 -1.942 60.65 -1.942 60.6833 -1.332 60.7167 0.496 60.75 2.020 60.7833 3.849 60.8167 4.459 60.85 4.664 60.8833 4.359 60.9167 1.820 60.95 0.906 60.9833 -0.718 61.0167 -0.818 61.05 -0.918 61.0833 -0.713 61.1167 -0.204 61.15 -0.099 61.1833 0.716 61.2167 1.125 61.25 1.940 61.2833 1.740 61.3167 2.149 61.35 2.659 61.3833 2.764 61.4167 3.478 61.45 3.483 61.4833 4.807 61.5167 5.521 61.55 5.526 61.5833 4.107 61.6167 3.197 61.65 1.983 61.6833 1.173 61.7167 0.264 61.75 -1.256 61.7833 -2.470 61.8167 -4.599 61.85 -3.780 61.8833 -0.422 61.9167 2.836 61.95 5.584 61.9833 6.403 62.0167 5.798 62.05 4.788 62.0833 3.474 62.1167 2.464 62.15 1.760 62.1833 2.274 62.2167 4.008 62.25 3.812 62.2833 1.888 62.3167 1.793 62.35 2.208 62.3833 2.927 62.4167 3.441 62.45 4.160 62.4833 2.746 62.5167 1.941 62.55 2.965 62.5833 3.380 62.6167 2.880 62.65 2.380 62.6833 2.389 62.7167 4.023 62.75 5.656 62.7833 5.361 62.8167 5.471 62.85 5.785 62.8833 6.100 62.9167 6.414 62.95 5.914 62.9833 5.009 63.0167 5.124 63.05 5.028 63.0833 3.819 63.1167 3.828 63.15 1.704 63.1833 0.395 63.2167 1.928 63.25 4.072 63.2833 4.591 63.3167 4.905 63.35 4.205 63.3833 3.605 63.4167 2.296 63.45 0.476 63.4833 -0.528 63.5167 0.600 63.55 1.220 63.5833 2.958 63.6167 3.172 63.65 3.692 63.6833 3.092 63.7167 3.916 63.75 4.740 63.7833 6.173 63.8167 7.607 63.85 6.907 63.8833 3.464 63.9167 3.069 63.95 2.369 63.9833 2.278 64.0167 4.626 64.05 5.960 64.0833 5.869 64.1167 4.865 64.15 2.945 64.1833 1.941 64.2167 3.069 64.25 3.589 64.2833 2.789 64.3167 2.698 64.35 3.217 64.3833 4.651 64.4167 5.780 64.45 5.994 64.4833 4.989 64.5167 6.323 64.55 7.147 64.5833 6.447 64.6167 7.271 64.65 6.266 64.6833 6.176 64.7167 5.171 64.75 4.471 64.7833 4.076 64.8167 4.290 64.85 5.114 64.8833 4.109 64.9167 4.019 64.95 2.709 64.9833 2.924 65.0167 2.224 65.05 4.267 65.0833 4.277 65.1167 4.491 65.15 4.705 65.1833 3.701 65.2167 3.101 65.25 4.534 65.2833 6.373 65.3167 7.197 65.35 6.292 65.3833 5.897 65.4167 3.773 65.45 3.377 65.4833 5.216 65.5167 6.749 65.55 5.845 65.5833 4.230 65.6167 2.716 65.65 1.506 65.6833 1.516 65.7167 1.525 65.75 3.364 65.7833 2.864 65.8167 1.959 65.85 1.664 65.8833 1.369 65.9167 2.088 65.95 5.145 65.9833 5.560 66.0167 4.045 66.05 2.631 66.0833 2.436 66.1167 4.579 66.15 4.689 66.1833 5.713 66.2167 6.127 66.25 5.017 66.2833 3.603 66.3167 3.408 66.35 5.141 66.3833 5.251 66.4167 6.580 66.45 4.961 66.4833 3.241 66.5167 2.537 66.55 1.832 66.5833 2.246 66.6167 3.370 66.65 0.837 66.6833 0.741 66.7167 0.341 66.75 1.465 66.7833 3.909 66.8167 4.118 66.85 4.937 66.8833 3.418 66.9167 2.409 66.95 0.585 66.9833 0.589 67.0167 0.899 67.05 0.294 67.0833 3.042 67.1167 2.742 67.15 1.833 67.1833 3.362 67.2167 4.990 67.25 5.300 67.2833 5.710 67.3167 0.837 67.35 -0.277 67.3833 5.924 67.4167 -1.896 67.45 -1.487 67.4833 0.447 67.5167 0.857 67.55 0.657 67.5833 1.166 67.6167 2.186 67.65 2.695 67.6833 1.681 67.7167 0.262 67.75 -1.363 67.7833 0.062 67.8167 -1.867 67.85 -1.053 67.8833 1.690 67.9167 1.895 67.95 1.590 67.9833 1.490 68.0167 0.881 68.05 1.695 68.0833 0.171 68.1167 0.781 68.15 0.476 68.1833 -0.134 68.2167 -0.034 68.2833 1.490 68.3167 1.590 68.35 0.066 68.3833 -1.358 68.4167 -3.087 68.45 -2.682 68.4833 -0.753 68.5167 -2.177 68.55 -0.553 68.5833 -0.758 68.6167 0.052 68.65 -1.067 68.6833 -0.358 68.7167 1.062 68.75 1.262 68.7833 1.766 68.8167 2.171 68.85 1.762 68.8833 1.962 68.9167 0.637 68.95 -0.282 68.9833 -1.301 69.0167 -2.320 69.05 -1.106 69.0833 0.313 69.1167 1.223 69.15 0.509 69.1833 -0.106 69.2167 -1.939 69.25 -2.249 69.2833 -2.254 69.3167 -1.954 69.35 -2.263 69.3833 -1.354 69.4167 -1.054 69.45 -0.144 69.4833 0.156 69.5167 -0.663 69.55 -0.973 69.5833 -2.402 69.6167 -1.187 69.65 -0.178 69.6833 2.661 69.7167 3.265 69.75 3.361 69.7833 1.627 69.8167 1.113 69.85 -1.231 69.8833 0.084 69.9167 -0.126 69.95 -1.250 69.9833 -3.593 70.0167 -3.498 70.05 -3.098 70.0833 -2.088 70.1167 0.241 70.15 -1.188 70.1833 -1.398 70.2167 -1.507 70.25 -3.241 70.2833 -1.622 70.3167 -0.512 70.35 3.241 70.3833 2.826 70.4167 2.312 70.45 1.288 70.4833 0.164 70.5167 1.578 70.55 1.164 70.5833 0.345 70.6167 -0.070 70.65 -1.094 70.6833 -1.303 70.7167 -0.499 70.75 -0.608 70.7833 -1.123 70.8167 -0.623 70.85 -1.037 70.8833 -0.942 70.9167 -1.051 70.95 0.058 70.9833 0.458 71.0167 1.368 71.05 1.458 71.0833 1.958 71.1167 1.749 71.15 1.944 71.1833 1.225 71.2167 -0.814 71.25 -0.923 71.2833 -1.033 71.3167 -0.023 71.35 -1.047 71.3833 -2.476 71.4167 -3.195 71.45 -3.915 71.4833 -3.210 71.5167 -2.100 71.55 -1.091 71.5833 0.324 71.6167 1.638 71.65 1.429 71.6833 1.929 71.7167 2.329 71.75 2.219 71.7833 2.009 71.8167 0.885 71.85 0.676 71.8833 0.871 71.9167 0.661 71.95 1.671 71.9833 1.461 72.0167 1.861 72.05 1.042 72.0833 0.528 72.1167 -1.206 72.15 -1.111 72.1833 0.204 72.2167 0.299 72.25 0.904 72.2833 1.609 72.3167 1.704 72.35 1.089 72.3833 2.099 72.4167 -0.039 72.45 -0.554 72.4833 -0.863 72.5167 0.146 72.55 1.056 72.5833 2.270 72.6167 3.280 72.65 3.275 72.6833 2.051 72.7167 0.827 72.75 -0.397 72.7833 -1.011 72.8167 0.203 72.85 1.417 72.8833 1.717 72.9167 1.003 72.95 -0.526 72.9833 -0.531 73.0167 -0.940 73.05 -0.640 73.0833 -1.050 73.1167 -1.969 73.15 -1.159 73.1833 -1.264 73.2167 -0.150 73.25 1.979 73.2833 1.569 73.3167 2.074 73.35 2.579 73.3833 1.765 73.4167 1.660 73.45 0.336 73.4833 1.755 73.5167 2.260 73.55 3.274 73.5833 3.474 73.6167 1.745 73.65 1.945 73.6833 1.436 73.7167 0.317 73.75 0.417 73.7833 0.312 73.8167 -0.807 73.85 -0.403 73.8833 0.307 73.9167 0.407 73.95 1.321 73.9833 1.726 74.0167 1.521 74.05 1.926 74.0833 1.012 74.1167 1.417 74.15 2.331 74.1833 3.650 74.2167 3.650 74.25 2.736 74.2833 2.226 74.3167 1.617 74.35 2.226 74.3833 2.836 74.4167 1.312 74.45 1.617 74.4833 0.397 74.5167 -1.531 74.55 -1.836 74.5833 -0.617 74.6167 -0.922 74.65 -0.412 74.6833 0.502 74.7167 -0.817 74.75 -0.307 74.7833 0.607 74.8167 0.812 74.85 0.712 74.8833 2.236 74.9167 1.221 74.95 -0.098 74.9833 0.412 75.0167 0.617 75.05 2.041 75.0833 2.145 75.1167 2.045 75.15 1.031 75.1833 0.931 75.2167 0.731 75.25 -0.283 75.2833 -0.383 75.3167 -0.583 75.35 -0.683 75.3833 1.250 75.4167 0.441 75.45 0.950 75.4833 2.579 75.5167 2.684 75.55 1.669 75.5833 0.860 75.6167 -0.255 75.65 -1.064 75.6833 -0.350 75.7167 -0.855 75.75 1.384 75.7833 1.793 75.8167 1.289 75.85 2.613 75.8833 2.413 75.9167 3.127 75.95 2.927 75.9833 2.422 76.0167 2.122 76.05 1.617 76.0833 2.637 76.1167 2.437 76.15 2.541 76.1833 4.985 76.2167 4.785 76.25 2.756 76.2833 1.541 76.3167 -0.487 76.35 -0.687 76.3833 -0.683 76.4167 -0.883 76.45 -1.083 76.4833 -1.383 76.5167 -0.973 76.55 0.251 76.5833 0.356 76.6167 0.156 76.65 1.989 76.6833 2.094 76.7167 3.418 76.75 4.947 76.7833 5.357 76.8167 6.071 76.85 5.466 76.8833 6.181 76.9167 5.981 76.95 4.561 76.9833 4.566 77.0167 3.757 77.05 3.252 77.0833 2.137 77.1167 -0.501 77.15 -0.496 77.1833 -1.001 77.2167 -0.287 77.25 1.342 77.2833 1.447 77.3167 -0.582 77.35 0.133 77.3833 0.847 77.4167 2.781 77.45 4.409 77.4833 5.224 77.5167 4.109 77.55 3.605 77.5833 2.795 77.6167 3.509 77.65 4.019 77.6833 4.733 77.7167 4.329 77.75 3.824 77.7833 1.185 77.8167 -0.134 77.85 0.376 77.8833 0.785 77.9167 0.381 77.95 -0.329 77.9833 -1.139 78.0167 -0.934 78.05 -0.119 78.0833 1.305 78.1167 4.557 78.15 3.238 78.1833 4.967 78.2167 3.648 78.25 2.938 78.2833 2.838 78.3167 3.348 78.35 3.957 78.3833 2.943 78.4167 3.453 78.45 3.757 78.4833 3.048 78.5167 3.048 78.55 2.338 78.5833 2.033 78.6167 2.338 78.65 1.424 78.6833 1.324 78.7167 1.933 78.75 1.629 78.7833 2.848 78.8167 3.457 78.85 2.848 78.8833 3.557 78.9167 2.948 78.95 3.253 78.9833 3.962 79.0167 4.272 79.05 3.962 79.0833 4.062 79.1167 3.553 79.15 2.638 79.1833 3.348 79.2167 4.362 79.25 3.243 79.2833 4.157 79.3167 5.477 79.35 4.762 79.3833 4.557 79.4167 4.657 79.45 4.757 79.4833 4.857 79.5167 4.753 79.55 3.938 79.5833 2.919 79.6167 1.800 79.65 1.085 79.6833 3.319 79.7167 4.129 79.75 3.414 79.7833 3.309 79.8167 1.985 79.85 3.100 79.8833 3.605 79.9167 5.024 79.95 5.529 79.9833 6.133 80.0167 5.724 80.05 6.229 80.0833 5.919 80.1167 4.695 80.15 5.200 80.1833 5.500 80.2167 4.885 80.25 2.952 80.2833 2.337 80.3167 2.637 80.35 3.547 80.3833 2.323 80.4167 2.318 80.45 2.109 80.4833 3.628 80.5167 4.537 80.55 5.547 80.5833 6.457 80.6167 5.333 80.65 5.023 80.6833 3.899 80.7167 4.809 80.75 5.209 80.7833 4.999 80.8167 6.009 80.85 6.104 80.8833 5.894 80.9167 5.380 80.95 6.694 80.9833 4.961 81.0167 5.056 81.05 3.322 81.0833 3.517 81.1167 3.003 81.15 1.879 81.1833 3.293 81.2167 5.827 81.25 5.717 81.2833 5.203 81.3167 5.398 81.35 3.055 81.3833 1.726 81.4167 1.617 81.45 1.812 81.4833 2.821 81.5167 4.541 81.55 3.212 81.5833 4.017 81.6167 3.297 81.65 4.712 81.6833 4.907 81.7167 4.797 81.75 4.993 81.7833 2.445 81.8167 2.030 81.85 2.530 81.8833 3.640 81.9167 3.225 81.95 1.897 81.9833 1.787 82.0167 1.982 82.05 1.568 82.0833 2.168 82.1167 1.753 82.15 1.948 82.1833 1.229 82.2167 0.510 82.25 -0.819 82.2833 -0.219 82.3167 -0.328 82.35 2.000 82.3833 4.329 82.4167 4.220 82.45 4.110 82.4833 2.881 82.5167 3.686 82.55 3.272 82.5833 2.552 82.6167 3.052 82.65 2.638 82.6833 2.224 82.7167 1.200 82.75 1.700 82.7833 2.200 82.8167 2.700 82.85 1.676 82.8833 0.956 82.9167 0.542 82.95 -0.277 82.9833 -1.301 83.0167 -2.020 83.05 -0.911 83.0833 -0.206 83.1167 1.208 83.15 1.404 83.1833 0.889 83.2167 2.304 83.25 2.704 83.2833 3.813 83.3167 3.604 83.35 3.089 83.3833 2.370 83.4167 1.856 83.45 0.732 83.4833 1.132 83.5167 -0.297 83.55 0.103 83.5833 0.503 83.6167 0.293 83.65 0.998 83.6833 1.703 83.7167 1.088 83.75 0.574 83.7833 0.874 83.8167 1.884 83.85 1.574 83.8833 1.974 83.9167 2.274 83.95 2.269 83.9833 2.264 84.0167 2.260 84.05 1.440 84.0833 1.336 84.1167 1.331 84.15 1.326 84.1833 1.016 84.2167 1.826 84.25 2.431 84.2833 2.326 84.3167 1.712 84.35 1.912 84.3833 1.502 84.4167 1.397 84.45 1.088 84.4833 -0.032 84.5167 0.168 84.55 -0.546 84.5833 -0.651 84.6167 -0.856 84.65 0.259 84.6833 1.273 84.7167 2.083 84.75 2.183 84.7833 2.283 84.8167 2.078 84.85 1.264 84.8833 0.754 84.9167 0.549 84.95 1.564 84.9833 3.392 85.0167 2.273 85.05 1.968 85.0833 2.068 85.1167 2.068 85.15 2.373 85.1833 2.373 85.2167 2.983 85.25 2.373 85.2833 2.068 85.3167 1.664 85.35 1.664 85.3833 1.664 85.4167 1.564 85.45 0.854 85.4833 1.668 85.5167 2.583 85.55 2.788 85.5833 2.078 85.6167 0.659 85.65 -0.051 85.6833 0.154 85.7167 0.259 85.75 -0.146 85.7833 1.788 85.8167 3.416 85.85 4.536 85.8833 5.250 85.9167 5.355 85.95 6.069 85.9833 4.245 86.0167 3.131 86.05 2.931 86.0833 2.326 86.1167 2.126 86.15 2.740 86.1833 1.831 86.2167 1.021 86.25 2.550 86.2833 1.640 86.3167 2.255 86.35 3.379 86.3833 3.384 86.4167 2.779 86.45 2.988 86.4833 3.298 86.5167 3.812 86.55 5.036 86.5833 4.941 86.6167 5.456 86.65 6.275 86.6833 6.789 86.7167 6.694 86.75 6.904 86.7833 5.894 86.8167 5.394 86.85 4.994 86.8833 5.104 86.9167 5.313 86.95 4.508 86.9833 4.108 87.0167 4.418 87.05 4.328 87.0833 4.437 87.1167 4.852 87.15 5.266 87.1833 5.376 87.2167 6.095 87.25 5.190 87.2833 5.604 87.3167 5.714 87.35 6.028 87.3833 7.357 87.4167 7.976 87.45 8.900 87.4833 8.400 87.5167 8.105 87.55 6.896 87.5833 6.296 87.6167 5.391 87.65 6.010 87.6833 6.324 87.7167 5.724 87.75 6.039 87.7833 5.134 87.8167 5.044 87.85 3.529 87.8833 3.539 87.9167 3.448 87.95 3.153 87.9833 3.468 88.0167 4.597 88.05 4.811 88.0833 6.345 88.1167 6.864 88.15 7.178 88.1833 7.393 88.2167 7.607 88.25 6.907 88.2833 7.526 88.3167 6.521 88.35 5.821 88.3833 5.731 88.4167 4.726 88.45 5.550 88.4833 4.950 88.5167 5.774 88.55 5.684 88.5833 4.374 88.6167 4.893 88.65 4.803 88.6833 5.017 88.7167 4.927 88.75 5.446 88.7833 4.746 88.8167 4.656 88.85 4.565 88.8833 5.389 88.9167 6.518 88.95 6.428 88.9833 7.861 89.0167 8.381 89.05 7.985 89.0833 7.895 89.1167 7.500 89.15 6.800 89.1833 5.795 89.2167 6.924 89.25 5.614 89.2833 5.524 89.3167 5.229 89.35 4.529 89.3833 4.743 89.4167 4.043 89.45 3.953 89.4833 4.877 89.5167 3.567 89.55 3.172 89.5833 2.877 89.6167 3.701 89.65 4.015 89.6833 5.144 89.7167 5.763 89.75 5.977 89.7833 5.987 89.8167 6.811 89.85 6.821 89.8833 7.440 89.9167 5.621 89.95 5.630 89.9833 4.016 90.0167 4.635 90.05 4.035 90.0833 3.740 90.1167 4.154 90.15 5.078 90.1833 4.783 90.2167 4.488 90.25 4.293 90.2833 4.912 90.3167 3.093 90.35 2.593 90.3833 3.212 90.4167 3.017 90.45 3.431 90.4833 2.931 90.5167 3.855 90.55 2.745 90.5833 3.465 90.6167 4.489 90.65 5.817 90.6833 5.622 90.7167 4.613 90.75 4.417 90.7833 3.917 90.8167 3.213 90.85 3.017 90.8833 2.313 90.9167 2.217 90.95 2.022 90.9833 0.708 91.0167 0.613 91.05 2.041 91.0833 3.470 91.1167 3.680 91.15 2.670 91.1833 1.151 91.2167 0.751 91.25 0.451 91.2833 0.965 91.3167 3.713 91.35 1.789 91.3833 1.794 91.4167 1.189 91.45 1.499 91.4833 0.894 91.5167 3.337 91.55 1.818 91.5833 1.618 91.6167 0.709 91.65 -0.101 91.6833 -0.706 91.7167 -0.601 91.75 0.113 91.8167 0.528 91.85 1.242 91.8833 0.433 91.9167 0.028 91.95 -0.172 91.9833 0.542 92.0167 1.052 92.05 -0.672 92.0833 -0.467 92.1167 -1.482 92.15 -1.072 92.1833 -0.563 92.2167 0.252 92.25 -0.458 92.2833 -1.067 92.3167 -1.167 92.35 -1.572 92.3833 -2.487 92.4167 -1.367 92.45 -0.758 92.4833 -1.063 92.5167 -1.367 92.55 -1.772 92.5833 -0.858 92.6167 -1.063 92.65 -1.672 92.6833 -1.367 92.7167 -1.572 92.75 -2.487 92.7833 -2.996 92.8167 -3.301 92.85 -3.506 92.8833 -3.101 92.9167 -3.001 92.95 -2.596 92.9833 -2.191 93.0167 -2.701 93.05 -1.991 93.0833 -1.487 93.1167 -1.996 93.15 -1.796 93.1833 -2.611 93.2167 -2.715 93.25 -2.515 93.2833 -2.315 93.3167 -2.115 93.35 -1.915 93.3833 -1.715 93.4167 -1.820 93.45 -2.535 93.4833 -1.930 93.5167 -2.644 93.55 -2.039 93.5833 -2.144 93.6167 -1.235 93.65 -2.254 93.6833 -1.954 93.7167 -2.568 93.75 -2.268 93.7833 -2.883 93.8167 -2.278 93.85 -2.892 93.8833 -1.373 93.9167 -1.583 93.95 -1.283 93.9833 -2.202 94.0167 -1.192 94.05 -0.283 94.0833 -0.797 94.1167 -0.802 94.15 -0.402 94.1833 -1.526 94.2167 -2.040 94.25 -1.435 94.2833 -2.255 94.3167 -1.245 94.35 -0.845 94.3833 -1.664 94.4167 -2.788 94.45 -3.607 94.4833 -2.903 94.5167 -2.198 94.55 -1.088 94.5833 -1.907 94.6167 -1.507 94.65 -0.803 94.6833 -1.522 94.7167 -1.427 94.75 -0.927 94.7833 -1.136 94.8167 -1.651 94.85 -3.284 94.8833 -4.103 94.9167 -2.994 94.95 -2.594 94.9833 -1.789 95.0167 -0.584 95.05 -0.889 95.0833 -1.913 95.1167 -2.732 95.15 -1.318 95.1833 -1.732 95.2167 -1.942 95.25 -2.051 95.2833 -2.466 95.3167 -2.980 95.35 -2.785 95.3833 -1.371 95.4167 -1.275 95.45 -2.299 95.4833 -2.104 95.5167 -3.838 95.55 -2.423 95.5833 -1.923 95.6167 -2.133 95.65 -2.243 95.6833 -2.352 95.7167 -1.343 95.75 -2.671 95.7833 -1.257 95.8167 -1.467 95.85 -2.491 95.8833 -2.700 95.9167 -2.810 95.95 -3.224 95.9833 -2.519 96.0167 -2.324 96.05 -2.229 96.0833 -1.729 96.1167 -2.548 96.15 -1.843 96.1833 -2.258 96.2167 -1.858 96.25 -0.543 96.2833 -0.043 96.3167 -2.082 96.35 -1.682 96.3833 -2.806 96.4167 -3.220 96.45 -2.820 96.4833 -2.725 96.5167 -3.849 96.55 -2.839 96.5833 -3.963 96.6167 -3.259 96.65 -3.163 96.6833 -2.763 96.7167 -2.768 96.75 -1.149 96.7833 -1.663 96.8167 -1.263 96.85 -1.268 96.8833 -1.173 96.9167 -2.397 96.95 -1.692 96.9833 -1.697 97.0167 -1.297 97.05 -1.911 97.0833 -1.611 97.1167 -0.907 97.15 -1.826 97.1833 -2.135 97.2167 -1.835 97.25 -1.231 97.2833 -2.150 97.3167 -2.155 97.35 -0.635 97.3833 -0.945 97.4167 -1.659 97.45 -0.140 97.4833 0.465 97.5167 0.360 97.55 0.355 97.5833 -1.274 97.6167 -1.279 97.65 -1.383 97.6833 -1.488 97.7167 -1.188 97.75 -0.379 97.7833 -0.788 97.8167 0.021 97.85 -0.083 97.8833 -0.798 97.9167 0.012 97.95 -0.193 97.9833 1.226 98.0167 1.426 98.05 1.321 98.0833 0.507 98.1167 0.097 98.15 -0.412 98.1833 -0.007 98.2167 0.802 98.25 1.512 98.2833 0.088 98.3167 -0.422 98.35 -1.236 98.3833 -1.136 98.4167 -0.122 98.45 -0.022 98.4833 0.993 98.5167 1.093 98.55 0.483 98.5833 -0.027 98.6167 -0.231 98.65 0.683 98.6833 -0.231 98.7167 0.478 98.75 0.783 98.7833 0.783 98.8167 0.273 98.85 0.273 98.8833 1.188 98.9167 0.883 98.95 1.188 98.9833 0.578 99.0167 0.273 99.05 -0.131 99.0833 -0.131 99.1167 0.783 99.15 0.378 99.1833 0.073 99.2167 -0.027 99.25 -0.331 99.2833 0.178 99.3167 -0.531 99.35 0.078 99.3833 1.197 99.4167 1.402 99.45 0.693 99.4833 1.507 99.5167 0.188 99.55 0.088 99.5833 1.207 99.6167 1.717 99.65 1.921 99.6833 1.721 99.7167 1.621 99.75 2.436 99.7833 3.455 99.8167 3.660 99.85 4.984 99.8833 3.665 99.9167 3.769 99.95 2.755 99.9833 1.945 100.017 2.355 100.05 2.765 100.083 2.665 100.117 2.769 100.15 2.569 100.183 1.455 100.217 1.865 100.25 1.665 100.283 2.989 100.317 4.008 100.35 2.893 100.383 2.998 100.417 3.408 100.45 3.413 100.483 4.432 100.517 5.146 100.55 4.641 100.583 4.037 100.617 3.532 100.65 3.332 100.683 3.946 100.717 4.051 100.75 5.070 100.783 3.856 100.817 4.265 100.85 3.965 100.883 3.156 100.917 3.161 100.95 2.961 100.983 3.270 101.017 4.289 101.05 3.175 101.083 4.094 101.117 3.894 101.15 5.118 101.183 5.223 101.217 3.704 101.25 4.723 101.283 3.509 101.317 4.223 101.35 3.618 101.383 4.333 101.417 4.947 101.45 5.052 101.483 5.666 101.517 5.771 101.55 5.776 101.583 4.966 101.617 4.766 101.65 4.771 101.683 4.571 101.717 4.371 101.75 5.595 101.783 6.005 101.817 5.195 101.85 4.995 101.883 5.000 101.917 4.800 101.95 5.514 101.983 6.229 102.017 5.419 102.05 4.000 102.083 4.409 102.117 4.514 102.15 5.229 102.183 4.419 102.217 5.133 102.25 5.543 102.283 5.138 102.317 4.329 102.35 4.738 102.383 4.638 102.417 4.133 102.45 3.933 102.483 4.138 102.517 3.938 102.55 4.753 102.583 5.567 102.617 5.672 102.65 5.572 102.683 5.777 102.717 5.677 102.75 5.172 102.783 5.681 102.817 4.362 102.85 5.481 102.883 5.481 102.917 5.077 102.95 5.586 102.983 5.486 103.017 3.967 103.05 3.557 103.083 3.457 103.117 3.153 103.15 3.357 103.183 3.053 103.217 3.562 103.25 3.562 103.283 4.781 103.317 5.086 103.35 4.781 103.383 6.915 103.417 3.867 103.45 5.086 103.483 4.477 103.517 5.086 103.55 5.086 103.583 5.186 103.617 4.881 103.65 3.662 103.683 3.153 103.717 2.543 103.75 2.948 103.783 3.048 103.817 2.438 103.85 2.538 103.883 2.943 103.917 2.433 103.95 4.362 103.983 4.157 104.017 3.343 104.05 4.762 104.083 4.253 104.117 4.657 104.15 4.857 104.183 5.567 104.217 5.767 104.25 4.953 104.283 5.153 104.317 4.133 104.35 3.014 104.383 2.605 104.417 3.414 104.45 1.785 104.483 1.681 104.517 1.576 104.55 1.571 104.583 1.466 104.617 2.276 104.65 2.881 104.683 2.776 104.717 2.161 104.75 2.971 104.783 2.052 104.817 2.047 104.85 3.161 104.883 3.157 104.917 3.761 104.95 4.366 104.983 3.752 105.017 2.833 105.05 3.437 105.083 3.128 105.117 2.309 105.15 0.780 105.183 1.080 105.217 0.870 105.25 0.561 105.283 0.961 105.317 2.275 105.35 3.185 105.383 2.365 105.417 2.156 105.45 2.456 105.483 2.246 105.517 2.037 105.55 3.656 105.583 2.837 105.617 2.322 105.65 3.027 105.683 2.917 105.717 2.403 105.75 2.498 105.783 2.289 105.817 1.874 105.85 2.579 105.883 2.369 105.917 2.869 105.95 4.489 105.983 4.989 106.017 3.865 106.05 4.669 106.083 3.545 106.117 3.741 106.15 3.021 106.183 3.117 106.217 3.312 106.25 3.507 106.283 3.702 106.317 3.797 106.35 3.688 106.383 3.273 106.417 2.249 106.45 3.359 106.483 2.235 106.517 2.735 106.55 2.625 106.583 2.821 106.617 2.406 106.65 3.516 106.683 4.930 106.717 3.906 106.75 3.697 106.783 4.501 106.817 5.001 106.85 4.587 106.883 3.868 106.917 4.063 106.95 3.344 106.983 3.439 107.017 2.720 107.05 2.915 107.083 3.720 107.117 3.915 107.15 4.010 107.183 2.986 107.217 2.572 107.25 1.548 107.283 1.033 107.317 1.838 107.35 2.643 107.383 1.824 107.417 2.019 107.45 3.028 107.483 2.309 107.517 2.100 107.55 2.600 107.583 3.000 107.617 2.790 107.65 2.376 107.683 3.385 107.717 3.480 107.75 2.966 107.783 2.452 107.817 2.037 107.85 2.437 107.883 1.923 107.917 1.408 107.95 1.708 107.983 0.889 108.017 1.289 108.05 1.384 108.083 1.380 108.117 1.170 108.15 1.875 108.183 1.565 108.217 2.575 108.25 3.180 108.283 2.870 108.317 2.965 108.35 2.656 108.383 1.736 108.417 2.951 108.45 2.032 108.483 1.417 108.517 2.632 108.55 2.017 108.583 2.827 108.617 3.736 108.65 2.817 108.683 3.017 108.717 2.708 108.75 1.993 108.783 2.193 108.817 2.393 108.85 1.474 108.883 1.369 108.917 1.264 108.95 0.550 108.983 2.174 109.017 2.984 109.05 3.488 109.083 3.588 109.117 2.874 109.15 1.755 109.183 1.650 109.217 2.055 109.25 1.850 109.283 2.864 109.317 2.964 109.35 3.369 109.383 2.860 109.417 2.960 109.45 2.655 109.483 3.364 109.517 2.450 109.55 2.245 109.583 2.855 109.617 1.940 109.65 1.940 109.683 1.940 109.717 2.245 109.75 2.855 109.783 2.855 109.817 2.855 109.85 3.669 109.883 3.669 109.917 3.264 109.95 3.569 109.983 3.469 110.017 3.674 110.05 3.574 110.083 4.084 110.117 4.288 110.15 4.188 110.183 3.784 110.217 3.584 110.25 3.484 110.283 3.893 110.317 2.779 110.35 2.984 110.383 4.003 110.417 3.498 110.45 3.908 110.483 3.403 110.517 2.898 110.55 3.003 110.583 2.398 110.617 2.198 110.65 3.422 110.683 2.917 110.717 3.836 110.75 4.756 110.783 4.456 110.817 5.375 110.85 4.770 110.883 4.165 110.917 4.475 110.95 4.480 110.983 4.789 111.017 5.199 111.05 4.394 111.083 4.604 111.117 4.508 111.15 3.904 111.183 4.723 111.217 4.323 111.25 5.447 111.283 5.656 111.317 5.256 111.35 5.161 111.383 4.356 111.417 5.176 111.45 5.995 111.483 5.800 111.517 6.009 111.55 6.119 111.583 5.619 111.617 5.828 111.65 4.414 111.683 4.828 111.717 4.633 111.75 4.743 111.783 4.852 111.817 4.962 111.85 5.681 111.883 5.386 111.917 5.800 111.95 7.129 111.983 5.615 112.017 5.420 112.05 4.210 112.083 4.015 112.117 3.720 112.15 4.034 112.183 3.839 112.217 5.068 112.25 5.382 112.283 5.697 112.317 5.706 112.35 5.106 112.383 4.506 112.417 5.430 112.45 4.830 112.483 4.535 112.517 4.240 112.55 3.845 112.583 5.073 112.617 5.388 112.65 4.383 112.683 5.307 112.717 3.793 112.75 3.093 112.783 4.017 112.817 3.317 112.85 4.241 112.883 3.845 112.917 4.160 112.95 4.374 112.983 3.469 113.017 3.074 113.05 4.203 113.083 4.822 113.117 2.598 113.15 2.913 113.183 2.822 113.217 2.427 113.25 3.046 113.283 3.870 113.317 5.304 113.35 5.618 113.383 5.223 113.417 4.828 113.45 4.533 113.483 3.223 113.517 3.742 113.55 3.447 113.583 3.966 113.617 2.657 113.65 2.666 113.683 1.966 113.717 2.890 113.75 2.495 113.783 3.724 113.817 4.548 113.85 4.557 113.883 3.553 113.917 4.477 113.95 5.301 113.983 4.701 114.017 5.625 114.05 5.229 114.083 5.239 114.117 3.115 114.15 3.025 114.183 3.339 114.217 3.653 114.25 4.577 114.283 4.587 114.317 4.292 114.35 2.168 114.383 2.482 114.417 3.711 114.45 3.516 115.483 1.217 115.517 2.341 115.55 2.651 115.583 3.165 115.617 3.475 115.65 3.989 115.683 2.775 115.717 2.170 115.75 2.785 115.783 3.299 115.817 1.780 115.85 1.885 115.883 1.280 115.917 0.675 115.95 1.289 115.983 2.004 116.017 1.399 116.05 0.589 116.083 1.509 116.117 -0.520 116.15 -0.111 116.183 -0.615 116.217 0.709 116.25 1.118 116.283 1.833 116.317 1.023 116.35 1.128 116.383 2.247 116.417 2.352 116.45 2.252 116.483 1.847 116.517 1.037 116.55 0.633 116.583 1.142 116.617 1.652 116.65 1.857 116.683 1.452 116.717 -0.377 116.75 -0.172 116.817 -0.577 116.85 -0.272 116.883 -0.372 116.917 0.847 116.95 1.152 116.983 0.847 117.017 1.457 117.05 0.542 117.083 1.152 117.117 0.947 117.15 1.557 117.183 0.133 117.217 0.437 117.25 0.537 117.283 0.333 117.317 0.433 117.35 0.128 117.383 0.228 117.417 1.037 117.45 -0.691 117.483 -0.287 117.517 -0.491 117.55 0.623 117.583 -0.496 117.617 -0.906 117.65 -2.025 117.683 -0.301 117.717 0.509 117.75 -0.511 117.783 1.213 117.817 0.499 117.85 0.089 117.883 -0.625 117.917 -1.239 117.95 -1.039 117.983 -0.535 118.017 -0.539 118.05 -0.339 118.083 -1.259 118.117 -0.044 118.15 0.561 118.183 -0.154 118.217 -0.463 118.25 -0.468 118.283 -1.997 118.317 -2.002 118.35 -0.687 118.383 -1.607 118.417 -1.611 118.45 -1.921 118.483 -0.302 118.517 -2.135 118.55 -1.431 118.583 -1.131 118.617 -1.340 118.65 -0.635 118.683 -0.640 118.717 -0.545 118.75 -1.364 118.783 -0.355 118.817 -0.869 118.85 -1.383 118.883 -0.983 118.917 0.331 118.95 -0.183 118.983 -0.698 119.017 -0.403 119.05 -0.507 119.083 -2.241 119.117 -0.927 119.15 -1.036 119.183 -1.551 119.217 -1.455 119.25 -0.651 119.283 -0.555 119.317 -0.665 119.35 -0.570 119.383 -1.389 119.417 -1.499 119.45 -2.623 119.483 -1.513 119.517 -0.808 119.55 -0.613 119.583 0.497 119.617 -0.323 119.65 -1.042 119.683 -0.642 119.717 -1.056 119.75 -1.166 119.783 -0.766 119.817 -2.095 119.85 -2.609 119.883 -2.414 119.917 -2.523 119.95 -1.514 119.983 -0.404 120.017 -1.428 120.05 -1.943 120.083 -1.747 120.117 -2.871 120.15 -2.067 120.183 -1.262 120.217 -1.167 120.25 -0.667 120.283 -0.876 120.317 -1.595 120.35 -0.891 120.383 -1.915 120.417 -2.429 120.45 -2.539 120.483 -2.139 120.517 -1.943 120.55 -0.934 120.583 -0.739 120.617 -1.558 120.65 -0.548 120.683 -0.658 120.717 0.657 120.75 -0.163 120.783 -0.677 120.817 -1.701 120.85 -3.130 120.883 -2.730 120.917 -2.939 120.95 -1.320 120.983 -0.615 121.017 -1.739 121.05 -1.035 121.083 -1.549 121.117 -1.149 121.15 -0.139 121.183 -0.044 121.217 -1.473 121.25 -2.392 121.283 -2.907 121.317 -2.202 121.35 -2.207 121.383 -0.283 121.417 1.641 121.45 2.246 121.483 0.717 121.517 -1.016 121.55 -1.935 121.583 -1.231 121.617 -2.150 121.65 -0.935 121.683 -0.026 121.717 0.579 121.75 -0.035 121.783 1.789 121.817 0.869 121.85 -0.050 121.883 -0.359 121.917 -0.059 121.95 -0.774 121.983 -1.083 122.017 -0.783 122.05 -1.498 122.083 0.326 122.117 1.136 122.15 2.350 122.183 3.160 122.217 1.836 122.25 2.036 122.283 0.507 122.317 1.926 122.35 0.602 122.383 0.802 122.417 1.307 122.45 1.202 122.483 1.302 122.517 1.807 122.55 1.397 122.583 1.802 122.617 1.393 122.65 0.578 122.683 1.388 122.717 0.573 122.75 -0.446 122.783 1.178 122.817 1.888 122.85 2.293 122.883 3.612 122.917 4.017 122.95 3.812 122.983 3.912 123.017 4.012 123.05 4.721 123.083 3.807 123.117 3.907 123.15 3.602 123.183 3.397 123.217 3.702 123.25 3.802 123.283 4.412 123.317 4.412 123.35 4.817 123.383 3.293 123.417 3.293 123.45 2.683 123.483 2.378 123.517 2.378 123.55 2.378 123.583 2.683 123.617 3.802 123.65 4.717 123.683 5.631 123.717 5.836 123.75 5.531 123.783 3.602 123.817 2.993 123.85 2.893 123.883 3.097 123.917 3.707 123.95 2.997 123.983 3.812 124.017 3.712 124.05 3.612 124.083 3.817 124.117 4.021 124.15 3.921 124.183 5.041 124.217 4.536 124.25 3.521 124.283 3.421 124.317 3.831 124.35 4.950 124.383 6.069 124.417 4.955 124.45 4.855 124.483 4.655 124.517 4.455 124.55 5.269 124.583 5.069 124.617 5.479 124.65 4.974 124.683 5.079 124.717 5.284 124.75 5.389 124.783 5.493 124.817 5.598 124.85 6.313 124.883 5.808 124.917 4.998 124.95 4.393 124.983 5.108 125.017 4.603 125.05 5.013 125.083 6.032 125.117 5.122 125.15 6.141 125.183 5.332 125.217 5.032 125.25 6.051 125.283 5.851 125.317 5.551 125.35 6.265 125.383 5.356 125.417 6.680 125.45 6.380 125.483 7.704 125.517 6.794 125.55 7.509 125.583 6.599 125.617 6.094 125.65 6.099 125.683 5.899 125.717 5.599 125.75 6.823 125.783 7.537 125.817 6.323 125.85 6.733 125.883 6.433 125.917 6.537 125.95 6.237 125.983 6.242 126.017 6.347 126.05 7.266 126.083 7.066 126.117 7.376 126.15 6.871 126.183 8.095 126.217 7.590 126.25 8.205 126.283 6.785 126.317 7.195 126.35 7.200 126.383 6.390 126.417 7.309 126.45 7.109 126.483 7.824 126.517 7.319 126.55 7.019 126.583 6.819 126.617 5.400 126.65 6.114 126.683 6.524 126.717 6.833 126.75 7.243 126.783 6.129 126.817 6.843 126.85 6.948 126.883 7.457 126.917 8.172 126.95 7.667 126.983 7.162 127.017 6.053 127.05 4.424 127.083 5.748 127.117 6.462 127.15 6.972 127.183 7.077 127.217 6.367 127.25 5.657 127.283 6.677 127.317 6.272 127.35 6.477 127.383 7.191 127.417 6.481 127.45 5.772 127.483 5.062 127.517 5.267 127.55 5.777 127.583 5.981 127.617 6.591 127.65 5.577 127.683 4.867 127.717 4.462 127.75 4.462 127.783 4.972 127.817 5.886 127.85 6.091 127.883 6.701 127.917 6.091 127.95 5.686 127.983 5.991 128.017 6.601 128.05 6.296 128.083 5.991 128.117 5.381 128.15 4.772 128.183 4.262 128.217 4.872 128.25 4.872 128.283 4.567 128.317 5.581 128.35 4.667 128.383 4.157 128.417 3.343 128.45 3.648 128.483 4.967 128.517 5.067 128.55 5.472 128.583 4.962 128.617 4.148 128.65 5.467 128.683 4.957 128.717 5.362 128.75 6.072 128.783 5.357 128.817 4.238 128.85 4.133 128.883 4.843 128.917 5.043 128.95 4.838 128.983 4.733 129.017 4.019 129.05 4.524 129.083 3.809 129.117 4.009 129.15 3.905 129.183 3.190 129.217 2.171 129.25 3.285 129.283 3.485 129.317 3.481 129.35 4.595 129.383 4.795 129.417 4.181 129.45 2.857 129.483 3.766 129.517 3.761 129.55 4.266 129.583 4.261 129.617 3.647 129.65 4.252 129.683 3.333 129.717 3.328 129.75 3.018 129.783 1.794 129.817 2.399 129.85 3.713 129.883 1.880 129.917 0.351 129.95 1.261 129.983 1.965 130.017 1.351 130.05 1.751 130.083 2.051 130.117 2.451 130.15 1.937 130.183 1.932 130.217 2.637 130.25 2.427 130.283 2.522 130.317 3.432 130.35 2.917 130.383 1.793 130.417 2.193 130.45 2.289 130.483 1.469 130.517 1.565 130.55 2.269 130.583 1.145 130.617 1.645 130.65 1.436 130.683 1.226 130.717 1.321 130.75 1.112 130.783 0.697 130.817 1.402 130.85 1.193 130.883 1.288 130.917 0.873 130.95 0.664 130.983 1.064 131.017 2.173 131.05 1.049 131.083 0.840 131.117 1.340 131.15 1.435 131.183 2.140 131.217 1.421 131.25 0.297 131.283 1.406 131.317 0.587 131.35 0.377 131.383 0.572 131.417 0.058 131.45 1.068 131.483 2.482 131.517 2.882 131.55 2.063 131.583 1.953 131.617 1.744 131.65 1.229 131.683 0.715 131.717 1.520 131.75 1.615 131.783 0.796 131.817 0.891 131.85 1.900 131.883 0.776 131.917 1.276 131.95 2.286 131.983 2.076 132.017 2.476 132.05 1.352 132.083 1.652 132.117 2.052 132.15 1.843 132.183 2.243 132.217 1.119 132.25 1.214 132.283 1.819 132.317 1.000 132.35 0.995 132.383 1.090 132.417 1.795 132.45 2.400 132.483 1.785 132.517 1.880 132.55 1.876 132.583 1.871 132.617 1.661 132.65 1.656 132.683 1.652 132.717 1.342 132.75 1.947 132.783 1.942 132.817 1.328 132.85 1.628 132.883 1.928 132.917 1.823 132.95 1.818 132.983 2.118 133.017 2.013 133.05 1.704 133.083 0.989 133.117 1.289 133.15 1.184 133.183 1.080 133.217 0.975 133.25 0.565 133.283 0.460 133.317 0.965 133.35 -0.359 133.383 0.756 133.417 0.651 133.45 0.241 133.483 0.036 133.517 0.236 133.55 -0.273 133.583 0.841 133.617 1.246 133.65 1.346 133.683 2.156 133.717 1.341 133.75 1.441 133.783 1.236 133.817 1.641 133.85 0.727 133.883 1.741 133.917 1.841 133.95 1.232 133.983 1.332 134.017 0.722 134.05 0.517 134.083 0.517 134.117 0.517 134.15 1.127 134.183 2.346 134.217 1.432 134.25 1.432 134.283 1.736 134.317 0.822 134.35 1.332 134.383 1.636 134.417 1.232 134.45 1.841 134.483 2.351 134.517 1.946 134.55 1.236 134.583 1.441 134.617 1.341 134.65 0.632 134.683 1.751 134.717 2.260 134.75 2.465 134.783 1.960 134.817 1.556 134.85 1.660 134.883 1.765 134.917 1.056 134.95 1.160 134.983 1.875 135.017 2.894 135.05 2.084 135.083 1.275 135.117 0.670 135.15 0.470 135.183 0.880 135.217 1.494 135.25 1.599 135.283 2.518 135.317 2.523 135.35 2.323 135.383 2.328 135.417 2.332 135.45 2.032 135.483 2.342 135.517 3.261 135.55 2.861 135.583 2.256 135.617 1.956 135.65 1.252 135.683 1.256 135.717 1.771 135.75 1.980 135.783 2.290 135.817 2.500 135.85 3.014 135.883 3.224 135.917 2.214 135.95 2.119 135.983 1.719 136.017 2.233 136.05 2.648 136.083 2.248 136.117 2.457 136.15 1.652 136.183 1.862 136.217 1.362 136.25 1.776 136.283 2.291 136.317 2.096 136.35 2.205 136.383 2.620 136.417 2.120 136.45 2.229 136.483 2.034 136.517 2.144 136.55 2.863 136.583 3.277 136.617 3.387 136.65 3.192 136.683 2.897 136.717 3.616 136.75 3.625 136.783 2.821 136.817 2.625 136.85 1.721 136.883 1.425 136.917 2.145 136.95 1.849 136.983 2.264 137.017 2.883 137.05 3.502 137.083 3.512 137.117 3.826 137.15 3.936 137.183 3.945 137.217 3.345 137.25 3.660 137.283 3.974 137.317 3.984 137.35 3.993 137.383 4.308 137.417 3.708 137.45 2.803 137.483 4.032 137.517 3.737 137.55 3.441 137.583 3.146 137.617 3.461 137.65 3.980 137.683 3.989 137.717 4.304 137.75 4.009 137.783 4.018 137.817 2.809 137.85 2.818 137.883 3.337 137.917 4.566 137.95 3.661 137.983 4.890 138.017 4.900 138.05 4.605 138.083 4.919 138.117 4.929 138.15 5.853 138.183 5.862 138.217 5.162 138.25 5.477 138.283 4.572 138.317 3.972 138.35 5.301 138.383 5.615 138.417 4.710 138.45 4.415 138.483 4.425 138.517 4.434 138.55 4.444 138.583 4.249 138.617 5.477 138.65 4.877 138.683 4.582 138.717 4.692 138.75 4.092 138.783 4.201 138.817 3.906 138.85 4.321 138.883 3.416 138.917 2.916 138.95 3.330 138.983 3.035 139.017 3.449 139.05 2.949 139.083 3.059 139.117 3.169 139.15 3.278 139.183 3.388 139.217 3.497 139.25 3.912 139.283 4.021 139.317 3.621 139.35 3.426 139.383 3.536 139.417 3.745 139.45 3.245 139.483 3.760 139.517 2.650 139.55 2.250 139.583 1.850 139.617 1.450 139.65 2.574 139.683 1.869 139.717 2.993 139.75 2.289 139.783 2.193 139.817 2.403 139.85 2.408 139.883 2.313 139.917 1.913 139.95 1.308 139.983 1.008 140.017 2.132 140.05 1.222 140.083 1.532 140.117 0.927 140.15 0.322 140.183 0.937 140.217 0.637 140.25 0.337 140.283 1.051 140.317 1.056 140.35 0.756 140.383 0.861 140.417 0.661 140.45 1.580 140.483 0.770 140.517 1.180 140.55 1.589 140.583 1.085 140.617 0.885 140.65 1.904 140.683 1.094 140.717 0.689 140.75 0.185 140.783 0.389 140.95 -0.311 140.983 -0.106 141.017 0.404 141.05 0.099 141.083 1.523 141.117 0.813 141.25 0.309 141.283 1.223 141.317 0.918 141.35 0.918 141.383 0.918 141.517 0.309 141.55 0.104 141.583 -0.201 141.617 0.509 141.65 -0.101 141.683 -0.611 141.717 1.623 141.75 1.113 141.783 1.113 141.817 1.213 141.85 1.109 141.883 0.294 141.917 1.004 141.95 2.018 141.983 2.218 142.017 1.404 142.05 0.994 142.083 0.789 142.117 0.380 142.15 0.885 142.183 1.085 142.217 0.980 142.25 -0.039 142.283 0.161 142.317 0.056 142.35 0.865 142.383 1.065 142.417 0.451 142.45 0.956 gerris-snapshot-131206/doc/examples/tsunami/hmax.gfv0000644000175100017510000000134512250371171017371 00000000000000# GfsView 2D View { tx = 0.16753 ty = 0.0144384 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 14.4012 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Linear { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P > 0.01 ? Pmax : NODATA { amin = 0 min = -9.23266e-07 amax = 0 max = 5 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } Isoline { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P > 0.01 ? Pmax : NODATA { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } { n = 0 levels = 1,2,3,4,5,6,7,8,9,10 } gerris-snapshot-131206/doc/examples/tsunami/tsunami.gfs0000644000175100017510000002774612250371171020126 00000000000000# Title: The 2004 Indian Ocean tsunami # # Description: # # The 2004 Indian Ocean tsunami was caused by a large-scale fault # rupture ($> 1000$ km) at the Indian--Australian and # Eurasian--Andaman plate boundaries. This example uses the fault # model of Grilli et al. \cite{grilli2007} as initial conditions to a # Saint-Venant solution of the subsequent tsunami. The evolution of # the wave elevation is illustrated in the animation of Figure # \ref{h}.a. Adaptivity is used to track the various wave fronts # (Figure and animation \ref{h}.b) and the terrain is reconstructed # dynamically based on the # \htmladdnormallinkfoot{ETOPO1}{http://www.ngdc.noaa.gov/mgg/global/global.html} # dataset. # # \begin{figure}[htbp] # \caption{\label{h}(a) Animation of wave elevation. Dark red is # larger than 2 m, dark red smaller than -2 m. (b) Animation of # adaptive level of refinement. Dark red is 0.8 nautical miles, dark # blue is 101 nautical miles.} # \begin{center} # \begin{tabular}{cc} # \htmladdnormallinkfoot{\includegraphics[width=0.5\hsize]{h.eps}}{h.mpg} & # \htmladdnormallinkfoot{\includegraphics[width=0.5\hsize]{level.eps}}{level.mpg} \\ # (a) & (b) # \end{tabular} # \end{center} # \end{figure} # # The maximum wave elevation reached over 10 hours after fault rupture # is illustrated on Figure \ref{elevation}. # # \begin{figure}[htbp] # \caption{\label{elevation}Maximum wave elevation reached over 10 # hours, 1 metre interval contours. (a) Bay of Bengal, dark blue zero, # dark red $>5$ m. (b) Detail near Northern Sumatra and Thailand, dark # blue zero, dark red $> 8$ m.} # \begin{center} # \begin{tabular}{cc} # \includegraphics[width=0.5\hsize]{hmax.eps} & # \includegraphics[width=0.5\hsize]{hmax-detail.eps} \\ # (a) & (b) # \end{tabular} # \end{center} # \end{figure} # # Finally Figure \ref{data} gives a comparison of the observed (using # tide gauges) and modelled timeseries at specific locations in the # Indian Ocean. Figure \ref{jason} gives a comparison of the modelled wave # profile with the profile observed by the Jason-1 satellite altimeter. # # \begin{figure}[htbp] # \caption{\label{data}Observed and modelled time-series of wave # elevation (metres) at different tide gauge locations. Horizontal # axis is time in hours after the initial fault rupture.} # \begin{center} # \begin{tabular}{cc} # \includegraphics[width=0.5\hsize]{hani.eps} & # \includegraphics[width=0.5\hsize]{dieg.eps} \\ # Hannimaadhoo, Maldives & Diego Garcia \\ # \includegraphics[width=0.5\hsize]{male.eps} & # \includegraphics[width=0.5\hsize]{colo.eps} \\ # Male, Maldives & Columbo, Sri Lanka \\ # \includegraphics[width=0.5\hsize]{gana.eps} \\ # Gan, Maldives # \end{tabular} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{jason}Observed (Jason-1 satellite altimeter) and modelled wave profiles.} # \begin{center} # \includegraphics[width=0.8\hsize]{jason.eps} # \end{center} # \end{figure} # # More details on this simulation and the method used is given in # \cite{popinet2011}. # # Author: St\'ephane Popinet # Command: gerris2D -m tsunami.gfs | gfsview2D tsunami.gfv # Required files: output.gfs tsunami.gfv h.gfv level.gfv hmax.gfv hmax-detail.gfv hanires.txt diegres.txt maleres.txt colores.txt ganares.txt jason.xy jasonres.txt # Version: 110107 # Running time: # Generated files: h.eps level.eps h.mpg level.mpg hmax.eps hmax-detail.eps hani.eps dieg.eps male.eps colo.eps gana.eps jason.eps # the radius of the Earth (in meters) Define RADIUS 6371220. # the size of the domain Define LENGTH 6000e3 # the domain is centered on 94E, 8N Define LONGITUDE 94. Define LATITUDE 8. # anywhere with a fluid depth < 1 cm is considered dry Define DRY 0.01 # 12 levels of refinement max i.e. a maximum resolution of 6000e3/2^12 = 1464 m Define MAXLEVEL 12 # keep a coarse band, 0.04 wide, on all boundaries of the domain # these act as "sponges" before the waves exit the domain Define LEVEL (fabs (rx) < 0.46 && fabs (ry) < 0.46 ? MAXLEVEL : 5) 1 0 GfsRiver GfsBox GfsGEdge {} { PhysicalParams { # length of the domain (m) L = LENGTH # gravity is 9.81 m/s^2 g = 9.81 # from now on, units have been chosen to be metres and seconds } # use the longitude/latitude metric. x and y coordinates are now # longitude and latitude in degrees MetricLonLat M RADIUS # shift the origin to where we want it MapTransform { tx = LONGITUDE ty = LATITUDE } # 10 hours Time { end = 36000 } # use the terrain module for topography GModule terrain # use the okada module for initial deformations GModule okada Refine 5 # maintain Zb as the terrain elevation defined by the samples in # ETOPO1 # the 'etopo1' database needs to have been created beforehand and # be accessible within GFS_TERRAIN_PATH, see the 'terrain' module # documentation above VariableTerrain Zb { basename = etopo1 } { # preserve lake-at-rest balance (but not volume) when # reconstructing bathymetry reconstruct = 1 } # the default minmod limiter is too dissipative for tsunamis AdvectionParams { gradient = gfs_center_sweby_gradient } # deformation from Grilli et al, 2007, Table 1 # 5 segments triggered at different times # Segment 1 Init {} { D = 0 } InitOkada D { x = 94.57 y = 3.83 depth = 11.4857e3 strike = 323 dip = 12 rake = 90 length = 220e3 width = 130e3 U = 18 } # Initial water level is at z = D Init { start = 0 } { P = MAX (0., D - Zb) } # Segment 2 EventList { start = 212 step = 6 end = 272 } { Init {} { D = 0 } InitOkada D { x = 93.90 y = 5.22 depth = 11.4857e3 strike = 348 dip = 12 rake = 90 length = 150e3 width = 130e3 U = 23 } } # make sure the deformation is well resolved AdaptGradient { start = 212 istep = 1 end = 272 } { cmax = 0.05 cfactor = 2 minlevel = 5 maxlevel = LEVEL } D # add it to the current elevation field (only if wet) Init { start = 272 } { P = (P < DRY ? P : MAX (0., P + D)) } # Segment 3 EventList { start = 528 step = 6 end = 588 } { Init {} { D = 0 } InitOkada D { x = 93.21 y = 7.41 depth = 12.525e3 strike = 338 dip = 12 rake = 90 length = 390e3 width = 120e3 U = 12 } } # make sure the deformation is well resolved AdaptGradient { start = 528 istep = 1 end = 588 } { cmax = 0.05 cfactor = 2 minlevel = 5 maxlevel = LEVEL } D # add it to the current elevation field (only if wet) Init { start = 588 } { P = (P < DRY ? P : MAX (0., P + D)) } # Segment 4 EventList { start = 853 step = 6 end = 913 } { Init {} { D = 0 } InitOkada D { x = 92.60 y = 9.70 depth = 15.12419e3 strike = 356 dip = 12 rake = 90 length = 150e3 width = 95e3 U = 12 } } # make sure the deformation is well resolved AdaptGradient { start = 853 istep = 1 end = 913 } { cmax = 0.05 cfactor = 2 minlevel = 5 maxlevel = LEVEL } D # add it to the current elevation field (only if wet) Init { start = 913 } { P = (P < DRY ? P : MAX (0., P + D)) } # Segment 5 EventList { start = 1213 step = 6 end = 1273 } { Init {} { D = 0 } InitOkada D { x = 92.87 y = 11.70 depth = 15.12419e3 strike = 10 dip = 12 rake = 90 length = 350e3 width = 95e3 U = 12 } } # make sure the deformation is well resolved AdaptGradient { start = 1213 istep = 1 end = 1273 } { cmax = 0.05 cfactor = 2 minlevel = 5 maxlevel = LEVEL } D # add it to the current elevation field (only if wet) Init { start = 1273 } { P = (P < DRY ? P : MAX (0., P + D)) } # we don't want the arrival time to be interpolated from coarse # to fine, so we make it a "boolean" variable VariableBoolean Atime Init {} { P = MAX (0., D - Zb) Pmax = 0. Atime = -1. } Init { istep = 1 } { # elevation of the wet surface Hwet = (P > DRY ? H : NODATA) # maximum amplitude Pmax = (P > DRY && H > Pmax ? H : Pmax) # arrival time for an amplitude of +- 5 cm Atime = (Atime >= 0. ? Atime : P > DRY && fabs (H) > 5e-2 ? t : -1.) # implicit scheme for quadratic bottom friction with coefficient 1e-3 U = P > DRY ? U/(1. + dt*Velocity*1e-3/P) : 0 V = P > DRY ? V/(1. + dt*Velocity*1e-3/P) : 0 } # adapt on gradient of wet surface elevation # with a tolerance of 5 cm AdaptGradient { istep = 1 } { cmax = 0.05 cfactor = 2 minlevel = 5 maxlevel = LEVEL } (P < DRY ? 0. : P + Zb) # also keep enough resolution to resolve the maximum elevation # field with a 5 cm discretisation error max AdaptError { istep = 1 } { cmax = 0.05 minlevel = 5 maxlevel = LEVEL } Pmax Global { #define RESOLUTION (LENGTH/pow (2, MAXLEVEL)) #define close_enough(x,y) (distance(x,y,0.) < RESOLUTION) } # include a list of locations for which to output timeseries Include output.gfs # Jason profiles OutputLocation { start = 6900 } jason.txt jason.xy OutputTime { istep = 1 } stderr OutputBalance { istep = 1 } stderr OutputTiming { istep = 100 } stderr # save a snapshot every 100 iterations EventScript { istep = 100 } { rm -f snapshot-*.gfs } OutputSimulation { istep = 100 } snapshot-%ld.gfs # output solution on standard output every 20 timesteps # for on-the-fly visualisation with GfsView OutputSimulation { istep = 20 } stdout # ouput solution every 900 seconds (15 minutes) OutputSimulation { step = 900 } sim-%g.gfs EventScript { step = 900} { gzip -f sim-*.gfs } OutputScalarStats { istep = 1 } p { v = P } OutputScalarNorm { istep = 1 } u { v = Velocity } OutputScalarNorm { istep = 1 } U { v = U } OutputScalarNorm { istep = 1 } V { v = V } OutputScalarNorm { istep = 1 } hwet { v = Hwet } # animation of the wave elevation GModule gfsview OutputView { step = 60 } { ppm2mpeg > h.mpg } { width = 800 height = 700 } h.gfv OutputView { start = 7200 } { convert ppm:- eps2:h.eps } { width = 800 height = 700 } h.gfv # animation of the level of refinement OutputView { step = 60 } { ppm2mpeg > level.mpg } { width = 800 height = 700 } level.gfv OutputView { start = 7200 } { convert ppm:- eps2:level.eps } { width = 800 height = 700 } level.gfv # animation of the velocity OutputPPM { step = 60 } { ppm2mpeg > velocity.mpg } { maxlevel = 10 v = Velocity min = 0 max = 0.25 } # animation of the topography OutputPPM { step = 60 } { ppm2mpeg > zb.mpg } { maxlevel = 10 v = Zb } # graphics OutputView { start = end } { convert ppm:- eps2:hmax.eps } { width = 1600 height = 1600 } hmax.gfv OutputView { start = end } { convert ppm:- eps2:hmax-detail.eps } { width = 1600 height = 1600 } hmax-detail.gfv EventScript { start = end } { # timeseries at specific locations gnuplot < 19.2 ? 0 : \$8) w l t 'modelled' EOF } } { dry = DRY } GfsBox { # inflow/outflow on all boundaries with a reference water level at # z = 0 top = Boundary { BcSubcritical V -Zb } bottom = Boundary { BcSubcritical V -Zb } right = Boundary { BcSubcritical U -Zb } left = Boundary { BcSubcritical U -Zb } } gerris-snapshot-131206/doc/examples/tsunami/output.gfs0000644000175100017510000001130412250371171017765 00000000000000# Cocos Islands, Australia OutputScalarStats { istep = 1 } coco.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(96.88,-12.13) } OutputLocation { istep = 1 } cocoloc.txt 96.88 -12.13 -1 { interpolate = 0 } # Colombo, Sri Lanka OutputScalarStats { istep = 1 } colo.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(79.83,6.93) } OutputLocation { istep = 1 } cololoc.txt 79.83 6.93 -1 { interpolate = 0 } # Hanimaadhoo, Maldives OutputScalarStats { istep = 1 } hani.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(73.18,6.77) } OutputLocation { istep = 1 } haniloc.txt 73.18 6.77 -1 { interpolate = 0 } # Male, Maldives OutputScalarStats { istep = 1 } male.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(73.52,4.18) } OutputLocation { istep = 1 } maleloc.txt 73.52 4.18 -1 { interpolate = 0 } # Gan, Maldives OutputScalarStats { istep = 1 } gana.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(73.17,-0.68) } OutputLocation { istep = 1 } ganaloc.txt 73.17 -0.68 -1 { interpolate = 0 } # Diego Garcia, UK OutputScalarStats { istep = 1 } dieg.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(72.38,-7.3) } OutputLocation { istep = 1 } diegloc.txt 72.38 -7.3 -1 { interpolate = 0 } # Rodriguez I., Mauritius OutputScalarStats { istep = 1 } rodr.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(63.42,-19.67) } OutputLocation { istep = 1 } rodrloc.txt 63.42 -19.67 -1 { interpolate = 0 } # Port Louis, Mauritius OutputScalarStats { istep = 1 } loui.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(57.5,-20.15) } OutputLocation { istep = 1 } louiloc.txt 57.5 -20.15 -1 { interpolate = 0 } # La Reunion, France OutputScalarStats { istep = 1 } lare.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(55.3,-20.92) } OutputLocation { istep = 1 } lareloc.txt 55.3 -20.92 -1 { interpolate = 0 } # Hillarys, Australia OutputScalarStats { istep = 1 } hill.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(115.73,-31.82) } OutputLocation { istep = 1 } hillloc.txt 115.73 -31.82 -1 { interpolate = 0 } # Salalah, Oman OutputScalarStats { istep = 1 } sala.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(54,17) } OutputLocation { istep = 1 } salaloc.txt 54 17 -1 { interpolate = 0 } # Pointe La Rue, Seychelles OutputScalarStats { istep = 1 } laru.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(55.53,-4.68) } OutputLocation { istep = 1 } laruloc.txt 55.53 -4.68 -1 { interpolate = 0 } # Lamu, Kenya OutputScalarStats { istep = 1 } lamu.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(40.9,-2.27) } OutputLocation { istep = 1 } lamuloc.txt 40.9 -2.27 -1 { interpolate = 0 } # Zanzibar, Tanzania OutputScalarStats { istep = 1 } zanz.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(39.18,-6.15) } OutputLocation { istep = 1 } zanzloc.txt 39.18 -6.15 -1 { interpolate = 0 } # Chennai, India OutputScalarStats { istep = 1 } chen.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(80.3,13.1) } OutputLocation { istep = 1 } chenloc.txt 80.3 13.1 -1 { interpolate = 0 } # Paradip, India OutputScalarStats { istep = 1 } para.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(86.7,20.26) } OutputLocation { istep = 1 } paraloc.txt 86.7 20.26 -1 { interpolate = 0 } # Visakhapatnam, India OutputScalarStats { istep = 1 } visa.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(83.28,17.68) } OutputLocation { istep = 1 } visaloc.txt 83.28 17.68 -1 { interpolate = 0 } # Kochi, India OutputScalarStats { istep = 1 } koch.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(76.26,9.96) } OutputLocation { istep = 1 } kochloc.txt 76.26 9.96 -1 { interpolate = 0 } # Mormugao, India OutputScalarStats { istep = 1 } morm.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(73.8,15.42) } OutputLocation { istep = 1 } mormloc.txt 73.8 15.42 -1 { interpolate = 0 } # Okha, India OutputScalarStats { istep = 1 } okha.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(69.08,22.47) } OutputLocation { istep = 1 } okhaloc.txt 69.08 22.47 -1 { interpolate = 0 } # Tuticorin, India OutputScalarStats { istep = 1 } tuti.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(78.15,8.8) } OutputLocation { istep = 1 } tutiloc.txt 78.15 8.8 -1 { interpolate = 0 } # Tarutao, Thailand OutputScalarStats { istep = 1 } taru.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(99.65,6.702) } OutputLocation { istep = 1 } taruloc.txt 99.65 6.702 -1 { interpolate = 0 } # Tapaonoi, Thailand OutputScalarStats { istep = 1 } tapa.txt { v = (P > 0.01 ? H : NODATA) condition = close_enough(98.425,7.765) } OutputLocation { istep = 1 } tapaloc.txt 98.425 7.765 -1 { interpolate = 0 } gerris-snapshot-131206/doc/examples/tsunami/level.gfv0000644000175100017510000000107012250371171017536 00000000000000# GfsView 2D View { tx = 0.00158982 ty = 0.0784271 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.6736 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P > 0.01 ? Level : NODATA { amin = 1 amax = 1 cmap = Jet } Label { r = 0 g = 0 b = 0 shading = Constant maxlevel = 6 font_size = 2.3 raster_font = 1 } { x = 72.678 y = 23.2591 z = 0 label = "t = %5.0f s" symbol = 0 } gerris-snapshot-131206/doc/examples/tsunami/colores.txt0000644000175100017510000021357612250371171020152 00000000000000-24.9833 -0.445 -24.95 -0.550 -24.9167 -1.064 -24.8833 -0.360 -24.85 -0.974 -24.8167 -0.269 -24.7833 -0.884 -24.75 -1.093 -24.7167 -0.793 -24.6833 -1.408 -24.65 -2.227 -24.6167 -1.927 -24.5833 -2.236 -24.55 -4.070 -24.5167 -2.451 -24.4833 -1.846 -24.45 -2.460 -24.4167 -1.551 -24.3833 -2.775 -24.35 -4.304 -24.3167 -3.799 -24.2833 -5.937 -24.25 -5.332 -24.2167 -5.032 -24.1833 -5.137 -24.15 -5.752 -24.1167 -5.552 -24.0833 -6.166 -24.05 -5.661 -24.0167 -4.752 -23.9833 -5.466 -23.95 -4.047 -23.9167 -3.542 -23.8833 -4.156 -23.85 -2.432 -23.8167 -2.232 -23.7833 -3.556 -23.75 -2.442 -23.7167 -2.547 -23.6833 -2.447 -23.65 -2.856 -23.6167 -2.047 -23.5833 -2.456 -23.55 -2.052 -23.5167 -1.547 -23.4833 -1.752 -23.45 -0.942 -23.4167 -2.366 -23.3833 -2.266 -23.35 -2.980 -23.3167 -2.576 -23.2833 -3.390 -23.25 -3.290 -23.2167 -5.019 -23.1833 -4.614 -23.15 -5.124 -23.1167 -4.414 -23.0833 -4.924 -23.05 -4.519 -23.0167 -4.519 -22.9833 -4.724 -22.95 -4.014 -22.9167 -4.319 -22.8833 -4.524 -22.85 -3.000 -22.8167 -2.390 -22.7833 -2.290 -22.75 -2.900 -22.7167 -2.595 -22.6833 -1.680 -22.65 -2.495 -22.6167 -3.104 -22.5833 -2.495 -22.55 -3.104 -22.5167 -3.204 -22.4833 -3.204 -22.45 -4.119 -22.4167 -2.900 -22.3833 -3.204 -22.35 -3.609 -22.3167 -2.390 -22.2833 -1.576 -22.25 -2.795 -22.2167 -1.980 -22.1833 -1.371 -22.15 -2.690 -22.1167 -2.790 -22.0833 -2.180 -22.05 -1.976 -22.0167 -2.685 -21.9833 -1.566 -21.95 -1.666 -21.9167 -3.290 -21.8833 -3.695 -21.85 -3.185 -21.8167 -4.200 -21.7833 -3.995 -21.75 -4.400 -21.7167 -4.804 -21.6833 -5.309 -21.65 -6.019 -21.6167 -5.814 -21.5833 -4.490 -21.55 -3.980 -21.5167 -3.571 -21.4833 -3.366 -21.45 -2.956 -21.4167 -3.766 -21.3833 -3.256 -21.35 -2.542 -21.3167 -2.132 -21.2833 -2.637 -21.25 -2.432 -21.2167 -3.242 -21.1833 -3.137 -21.15 -3.947 -21.1167 -3.537 -21.0833 -3.432 -21.05 -3.328 -21.0167 -2.918 -20.9833 -2.813 -20.95 -3.013 -20.9167 -2.704 -20.8833 -2.904 -20.85 -4.018 -20.8167 -3.608 -20.7833 -3.299 -20.75 -3.194 -20.7167 -3.089 -20.6833 -4.304 -20.65 -4.504 -20.6167 -4.704 -20.5833 -5.918 -20.55 -6.423 -20.5167 -6.418 -20.4833 -7.228 -20.45 -7.223 -20.4167 -7.828 -20.3833 -6.808 -20.35 -7.413 -20.3167 -7.004 -20.2833 -6.389 -20.25 -6.994 -20.2167 -6.280 -20.1833 -6.275 -20.15 -5.660 -20.1167 -5.351 -20.0833 -5.856 -20.05 -4.936 -20.0167 -4.017 -19.9833 -4.622 -19.95 -4.922 -19.9167 -4.512 -19.8833 -4.203 -19.85 -5.112 -19.8167 -5.412 -19.7833 -5.408 -19.75 -5.303 -19.7167 -5.298 -19.6833 -5.293 -19.65 -5.898 -19.6167 -5.893 -19.5833 -5.888 -19.55 -6.088 -19.5167 -5.474 -19.4833 -5.774 -19.45 -5.769 -19.4167 -6.374 -19.3833 -5.660 -19.35 -5.350 -19.3167 -5.650 -19.2833 -6.255 -19.25 -6.150 -19.2167 -6.450 -19.1833 -6.750 -19.15 -6.645 -19.1167 -6.336 -19.0833 -6.940 -19.05 -7.140 -19.0167 -6.831 -18.9833 -6.826 -18.95 -7.636 -18.9167 -6.716 -18.8833 -6.307 -18.85 -5.997 -18.8167 -5.588 -18.7833 -4.668 -18.75 -3.649 -18.7167 -3.849 -18.6833 -4.149 -18.65 -4.349 -18.6167 -3.940 -18.5833 -4.544 -18.55 -3.830 -18.5167 -3.725 -18.4833 -3.925 -18.45 -3.820 -18.4167 -3.716 -18.3833 -3.611 -18.35 -4.725 -18.3167 -4.316 -18.2833 -4.820 -18.25 -5.020 -18.2167 -5.220 -18.1833 -5.725 -18.15 -5.011 -18.1167 -5.111 -18.0833 -3.787 -18.05 -3.682 -18.0167 -4.392 -17.9833 -4.896 -17.95 -4.387 -17.9167 -4.587 -17.8833 -4.382 -17.85 -5.192 -17.8167 -4.682 -17.7833 -5.392 -17.75 -4.882 -17.7167 -4.777 -17.6833 -4.877 -17.65 -4.368 -17.6167 -4.163 -17.5833 -4.263 -17.55 -3.448 -17.5167 -3.853 -17.4833 -4.868 -17.45 -4.258 -17.4167 -5.272 -17.3833 -5.982 -17.35 -4.458 -17.3167 -4.558 -17.2833 -4.658 -17.25 -3.439 -17.2167 -3.234 -17.1833 -3.844 -17.15 -2.624 -17.1167 -2.115 -17.0833 -1.810 -17.05 -3.029 -17.0167 -3.029 -16.9833 -3.029 -16.95 -4.348 -16.9167 -4.348 -16.8833 -4.044 -16.85 -4.248 -16.8167 -4.858 -16.7833 -4.553 -16.75 -5.163 -16.7167 -4.553 -16.6833 -4.148 -16.65 -3.539 -16.6167 -3.844 -16.5833 -4.048 -16.55 -3.744 -16.5167 -4.253 -16.4833 -4.458 -16.45 -4.153 -16.4167 -4.358 -16.3833 -4.258 -16.35 -4.463 -16.3167 -4.768 -16.2833 -4.668 -16.25 -4.263 -16.2167 -4.163 -16.1833 -4.672 -16.15 -4.572 -16.1167 -3.763 -16.0833 -4.577 -16.05 -3.868 -16.0167 -3.768 -15.9833 -3.568 -15.95 -3.163 -15.9167 -3.672 -15.8833 -3.777 -15.85 -3.677 -15.8167 -4.087 -15.7833 -3.887 -15.75 -3.482 -15.7167 -4.196 -15.6833 -3.387 -15.65 -2.577 -15.6167 -3.696 -15.5833 -3.801 -15.55 -3.906 -15.5167 -3.096 -15.4833 -4.725 -15.45 -3.611 -15.4167 -4.630 -15.3833 -4.430 -15.35 -3.216 -15.3167 -3.016 -15.2833 -3.425 -15.25 -3.225 -15.2167 -2.925 -15.1833 -2.420 -15.15 -2.120 -15.1167 -2.530 -15.0833 -1.925 -15.05 -2.335 -15.0167 -2.644 -14.9833 -3.664 -14.95 -3.973 -14.9167 -3.368 -14.8833 -4.388 -14.85 -4.088 -14.8167 -4.092 -14.7833 -4.197 -14.75 -3.897 -14.7167 -3.902 -14.6833 -2.688 -14.65 -2.083 -14.6167 -2.088 -14.5833 -2.092 -14.55 -2.707 -14.5167 -3.016 -14.4833 -2.716 -14.45 -2.416 -14.4167 -3.336 -14.3833 -3.036 -14.35 -3.345 -14.3167 -4.264 -14.2833 -4.269 -14.25 -3.360 -14.2167 -4.584 -14.1833 -3.879 -14.15 -3.579 -14.1167 -2.974 -14.0833 -3.284 -14.05 -2.679 -14.0167 -2.684 -13.9833 -2.284 -13.95 -1.984 -13.9167 -2.293 -13.8833 -1.993 -13.85 -1.388 -13.8167 -1.393 -13.7833 -2.517 -13.75 -2.217 -13.7167 -2.222 -13.6833 -3.446 -13.65 -4.060 -13.6167 -3.456 -13.5833 -3.460 -13.55 -3.465 -13.5167 -3.165 -13.4833 -1.951 -13.45 -2.260 -13.4167 -1.656 -13.3833 -1.356 -13.35 -2.580 -13.3167 -3.194 -13.2833 -2.284 -13.25 -3.204 -13.2167 -3.818 -13.1833 -2.908 -13.15 -3.623 -13.1167 -4.237 -13.0833 -3.937 -13.05 -3.432 -13.0167 -3.132 -12.9833 -3.637 -12.95 -2.937 -12.9167 -4.161 -12.8833 -3.961 -12.85 -3.356 -12.8167 -3.766 -12.7833 -3.566 -12.75 -2.961 -12.7167 -3.371 -12.6833 -4.085 -12.65 -3.276 -12.6167 -3.990 -12.5833 -3.790 -12.55 -4.200 -12.5167 -4.000 -12.4833 -3.190 -12.45 -3.600 -12.4167 -3.095 -12.3833 -2.690 -12.35 -2.490 -12.3167 -1.985 -12.2833 -2.800 -12.25 -1.990 -12.2167 -2.195 -12.1833 -2.400 -12.15 -3.114 -12.1167 -3.319 -12.0833 -3.828 -12.05 -4.338 -12.0167 -4.543 -11.9833 -4.648 -11.95 -4.343 -11.9167 -4.548 -11.8833 -4.448 -11.85 -3.738 -11.8167 -3.028 -11.7833 -3.638 -11.75 -3.538 -11.7167 -3.743 -11.6833 -3.438 -11.65 -2.424 -11.6167 -2.424 -11.5833 -2.728 -11.55 -2.119 -11.5167 -2.628 -11.4833 -3.238 -11.45 -3.543 -11.4167 -3.238 -11.3833 -3.848 -11.35 -3.238 -11.3167 -2.933 -11.2833 -3.033 -11.25 -1.509 -11.2167 -2.119 -11.1833 -3.133 -11.15 -3.438 -11.1167 -3.233 -11.0833 -3.843 -11.05 -3.638 -11.0167 -3.028 -10.9833 -3.433 -10.95 -3.533 -10.9167 -2.719 -10.8833 -2.209 -10.85 -2.614 -10.8167 -2.714 -10.7833 -2.814 -10.75 -2.304 -10.7167 -2.100 -10.6833 -2.200 -10.65 -3.214 -10.6167 -2.804 -10.5833 -2.904 -10.55 -2.700 -10.5167 -2.595 -10.4833 -3.000 -10.45 -2.285 -10.4167 -1.876 -10.3833 -1.671 -10.35 -1.261 -10.3167 -1.461 -10.2833 -1.661 -10.25 -1.252 -10.2167 -0.437 -10.1833 -0.637 -10.15 -0.532 -10.1167 -0.528 -10.0833 -0.423 -10.05 -1.232 -10.0167 -0.823 -9.98333 -1.328 -9.95 -1.932 -9.91666 -1.523 -9.88333 -1.723 -9.84999 -2.328 -9.81668 -2.528 -9.78334 -2.828 -9.75001 -3.942 -9.71667 -3.328 -9.68333 -3.018 -9.65 -3.523 -9.61666 -3.518 -9.58333 -3.208 -9.54999 -3.508 -9.51668 -3.199 -9.48334 -3.194 -9.45001 -2.784 -9.41667 -1.865 -9.38333 -1.046 -9.35 -0.736 -9.31666 -0.122 -9.28333 -0.422 -9.24999 -0.112 -9.21668 0.197 -9.18334 -1.422 -9.15001 -0.503 -9.11667 -0.803 -9.08333 -0.898 -9.05 -1.198 -9.01666 -1.598 -8.98333 -1.288 -8.94999 -1.993 -8.91668 -1.174 -8.88334 -1.779 -8.85001 -1.874 -8.81667 -1.664 -8.78333 -1.355 -8.75 -0.536 -8.71666 -0.021 -8.68333 0.798 -8.64999 -0.516 -8.61668 -0.002 -8.58334 0.208 -8.55001 0.417 -8.51667 0.017 -8.48333 0.227 -8.45 -0.173 -8.41666 -1.183 -8.38333 -1.888 -8.34999 -1.678 -8.31668 -2.992 -8.28334 -3.088 -8.25001 -2.368 -8.21667 -3.378 -8.18333 -2.559 -8.15 -2.044 -8.11666 -1.935 -8.08333 -1.420 -8.04999 -2.125 -8.01668 -2.625 -7.98334 -2.111 -7.95001 -2.206 -7.91667 -2.401 -7.88333 -1.277 -7.85 -1.472 -7.81666 -0.653 -7.78333 0.371 -7.74999 0.580 -7.71668 0.485 -7.68334 -0.015 -7.65001 0.195 -7.61667 -0.000 -7.58333 -0.096 -7.55 -0.900 -7.51666 -0.996 -7.48333 0.029 -7.44999 -0.676 -7.41668 -0.262 -7.38334 -0.357 -7.35001 -0.147 -7.31667 0.572 -7.28333 -0.438 -7.25 -0.633 -7.21666 -0.728 -7.18333 -0.823 -7.14999 -1.323 -7.11668 -0.809 -7.08334 -0.904 -7.05001 -1.099 -7.01667 -1.195 -6.98333 -0.375 -6.95 -1.385 -6.91666 -1.580 -6.88333 -0.761 -6.84999 -1.161 -6.81668 -0.647 -6.78334 -0.742 -6.75001 -2.056 -6.71667 -0.932 -6.68333 -0.418 -6.65 -0.818 -6.61666 -0.303 -6.58333 -0.703 -6.54999 0.421 -6.51668 -0.589 -6.48334 -1.499 -6.45001 -0.984 -6.41667 -1.689 -6.38333 -1.075 -6.35 -1.170 -6.31666 -0.555 -6.28333 -0.041 -6.24999 0.269 -6.21668 -0.131 -6.18334 -0.127 -6.15001 0.183 -6.11667 -0.117 -6.08333 -0.417 -6.05 -0.512 -6.01666 0.102 -5.98333 -0.503 -5.94999 0.112 -5.91668 -0.088 -5.88334 0.526 -5.85001 -0.383 -5.81667 0.231 -5.78333 0.336 -5.75 -0.879 -5.71666 -0.164 -5.68333 -1.074 -5.64999 -1.579 -5.61668 -2.083 -5.58334 -2.079 -5.55001 -2.583 -5.51667 -1.869 -5.48333 -2.374 -5.45 -2.574 -5.41666 -2.469 -5.38333 -0.840 -5.34999 -1.855 -5.31668 -1.445 -5.28334 -1.340 -5.25001 -0.526 -5.21667 -0.421 -5.18333 -1.740 -5.15 -1.231 -5.11666 -1.431 -5.08333 -1.226 -5.04999 -1.021 -5.01668 -0.511 -4.98334 -0.307 -4.95001 -0.711 -4.91667 -0.202 -4.88333 -0.911 -4.85 -0.302 -4.81666 -0.097 -4.78333 -0.707 -4.74999 0.108 -4.71668 0.108 -4.68334 -0.602 -4.65001 0.008 -4.61667 -0.297 -4.58333 -0.602 -4.55 0.617 -4.51666 0.008 -4.48333 0.313 -4.44999 0.617 -4.41668 0.717 -4.38334 -0.197 -4.35001 1.022 -4.31667 -0.097 -4.28333 -0.402 -4.25 -0.911 -4.21666 -1.726 -4.18333 -1.626 -4.14999 -2.235 -4.11668 -2.440 -4.08334 -2.340 -4.05001 -1.531 -4.01667 -1.735 -3.98333 -1.635 -3.95 -1.840 -3.91666 -1.945 -3.88333 -2.150 -3.84999 -2.255 -3.81668 -1.850 -3.78334 -1.955 -3.75001 -2.364 -3.71667 -1.350 -3.68333 -0.540 -3.65 -0.340 -3.61666 -1.359 -3.58333 -0.855 -3.54999 -0.959 -3.51668 -1.574 -3.48334 -1.679 -3.45001 -2.088 -3.41667 -1.483 -3.38333 -1.893 -3.35 -1.593 -3.31666 -1.393 -3.28333 -1.093 -3.24999 -0.488 -3.21668 0.117 -3.18334 0.112 -3.15001 0.412 -3.11667 -0.203 -3.08333 0.402 -3.05 -0.822 -3.01666 -1.131 -2.98333 -0.831 -2.94999 -0.736 -2.91668 -1.960 -2.88334 -1.965 -2.85001 -1.870 -2.81667 -1.875 -2.78333 -1.475 -2.75 -1.075 -2.71666 -1.079 -2.68333 -0.375 -2.64999 -0.889 -2.61668 -1.099 -2.58334 -1.003 -2.55001 -0.908 -2.51667 -1.218 -2.48333 -1.937 -2.45 -2.451 -2.41666 -2.661 -2.38333 -3.480 -2.34999 -3.690 -2.31668 -4.204 -2.28334 -4.009 -2.25001 -3.914 -2.21667 -3.209 -2.18333 -3.014 -2.15 -2.004 -2.11666 -1.604 -2.08333 -0.495 -2.04999 -0.399 -2.01668 0.101 -1.98334 0.196 -1.95001 0.086 -1.91667 -0.328 -1.88333 0.072 -1.85 0.267 -1.81666 -0.452 -1.78333 -0.662 -1.74999 0.448 -1.71668 0.338 -1.68334 0.129 -1.65001 -0.286 -1.61667 -0.091 -1.58333 -0.810 -1.55 -1.020 -1.51666 -1.129 -1.48333 -2.153 -1.44999 -2.263 -1.41668 -2.472 -1.38334 -2.277 -1.35001 -2.387 -1.31667 -3.106 -1.28333 -3.011 -1.25 -3.120 -1.21666 -2.925 -1.18333 -3.035 -1.14999 -2.940 -1.11668 -3.964 -1.08334 -2.549 -1.05001 -2.454 -1.01667 -2.259 -0.983333 -1.959 -0.949997 -1.359 -0.916661 -1.468 -0.883325 -1.578 -0.849989 -2.092 -0.816677 -2.507 -0.783341 -2.716 -0.750005 -2.826 -0.716669 -2.121 -0.683333 -1.416 -0.649997 -1.526 -0.616661 -2.345 -0.583325 -0.626 -0.549989 -0.531 -0.516677 -0.436 -0.483341 -0.340 -0.450005 -0.550 -0.416669 -0.660 -0.383333 -0.869 -0.349997 -1.993 -0.316661 -1.898 -0.283325 -2.108 -0.249989 -2.927 -0.216677 -3.236 -0.183341 -3.446 -0.150005 -2.741 -0.116669 -3.256 -0.0833333 -3.260 -0.0499973 -2.251 -0.0166613 -1.241 0.0166747 -2.770 0.0500107 -2.065 0.0833227 -2.375 0.116659 -2.684 0.149995 -2.589 0.183331 -2.289 0.216667 -1.989 0.250003 -2.299 0.283339 -1.694 0.316675 -0.784 0.350011 -0.484 0.383323 -1.099 0.416659 -1.104 0.449995 -0.499 0.483331 -0.504 0.516667 -0.608 0.550003 -0.613 0.583339 -0.413 0.616675 -1.028 0.650011 -1.437 0.683323 -0.528 0.716659 -0.937 0.749995 -1.347 0.783331 -1.756 0.816667 -0.947 0.850003 -1.052 0.883339 -0.852 0.916675 -0.652 0.950011 -0.452 0.983323 -1.166 1.01666 -1.371 1.04999 -1.780 1.08333 -0.361 1.11667 -0.261 1.15 -0.976 1.18334 -1.180 1.21667 -0.166 1.25001 0.339 1.28332 0.439 1.31666 -0.680 1.34999 -0.580 1.38333 -0.176 1.41667 -0.685 1.45 0.024 1.48334 -0.890 1.51667 -0.485 1.55001 0.834 1.58332 0.224 1.61666 0.020 1.64999 0.324 1.68333 -0.185 1.71667 0.120 1.75 -0.085 1.78334 0.524 1.81667 1.134 1.85001 1.134 1.88332 1.439 1.91666 2.353 1.94999 2.353 1.98333 2.353 2.01667 1.134 2.05 1.034 2.08334 1.644 2.11667 0.729 2.15001 0.324 2.18332 -0.285 2.21666 0.224 2.24999 -0.080 2.28333 -0.485 2.31667 0.939 2.35 1.244 2.38334 1.448 2.41667 1.044 2.45001 1.248 2.48332 2.063 2.51666 1.658 2.54999 2.472 2.58333 1.458 2.61667 1.053 2.65 0.548 2.68334 1.972 2.71667 1.568 2.75001 1.368 2.78332 0.658 2.81666 -0.456 2.84999 4.016 2.88333 21.799 2.91667 67.724 2.95 155.002 2.98334 213.324 3.01667 208.956 3.05001 177.057 3.08332 116.202 3.11666 28.219 3.14999 -62.507 8.88333 -78.426 8.91667 -162.351 8.95 -129.537 8.98334 -105.563 9.01667 -61.471 9.05001 -0.006 9.08332 4.256 9.11666 15.124 9.14999 42.451 9.18333 47.628 9.21667 59.716 9.25 90.700 9.28334 85.514 9.31667 68.745 9.35001 100.340 9.38332 73.208 9.41666 44.247 9.44999 20.063 9.48333 -32.368 9.51667 -98.515 9.55 -117.722 9.58334 -117.422 9.61667 -117.122 9.65001 -116.617 9.68332 -85.227 9.71666 -34.535 9.74999 8.132 9.78333 29.159 9.81667 58.720 9.85 100.168 9.88334 96.810 9.91667 73.945 9.95001 43.865 9.98332 6.979 10.0167 -13.447 10.05 -15.586 10.0833 4.931 10.1167 21.081 10.15 37.231 10.1833 45.860 10.2167 36.407 10.25 13.032 10.2833 -11.966 10.3167 -28.940 10.35 -64.911 10.3833 -75.279 10.4167 -37.389 10.45 6.193 10.4833 35.549 10.5167 63.586 10.55 77.092 10.5833 60.628 10.6167 22.928 10.65 -8.776 10.6833 -57.754 10.7167 -73.913 10.75 -69.551 10.7833 -34.198 10.8167 -8.195 10.85 10.393 10.8833 7.745 10.9167 6.216 10.95 -27.317 10.9833 -40.023 11.0167 -38.814 11.05 -59.440 11.0833 -46.034 11.1167 -21.045 11.15 -15.768 11.1833 -1.142 11.2167 28.419 11.25 41.825 11.2833 38.467 11.3167 43.439 11.35 30.938 11.3833 16.607 11.4167 -9.001 11.45 -28.208 11.4833 -45.891 11.5167 -68.756 11.55 -66.018 11.5833 -61.246 11.6167 -52.107 11.65 -31.080 11.6833 -8.530 11.7167 7.215 11.75 18.793 11.7833 30.675 11.8167 18.074 11.85 15.935 11.8833 30.766 11.9167 36.452 11.95 41.324 11.9833 46.096 12.0167 53.916 12.05 49.544 12.0833 38.162 12.1167 31.961 12.15 11.739 12.1833 -8.787 12.2167 -35.714 12.25 -55.631 12.2833 -60.613 12.3167 -62.951 12.35 -57.265 12.3833 -76.267 12.4167 -54.527 12.45 -29.433 12.4833 -3.630 12.5167 1.347 12.55 9.677 12.5833 30.808 12.6167 33.651 12.65 20.440 12.6833 32.327 12.7167 26.941 12.75 6.010 12.7833 10.986 12.8167 8.343 12.85 8.648 12.8833 23.683 12.9167 22.464 12.95 2.752 12.9833 -2.430 13.0167 -14.622 13.05 -13.302 13.0833 -1.110 13.1167 -11.169 13.15 -12.693 13.1833 -0.806 13.2167 2.547 13.25 -7.206 13.2833 1.228 13.3167 17.078 13.35 16.773 13.3833 23.988 13.4167 28.255 13.45 33.642 13.4833 43.091 13.5167 23.179 13.55 12.410 13.5833 7.129 13.6167 -14.917 13.65 -40.010 13.6833 -52.303 13.7167 -51.488 13.75 -62.561 13.7833 -64.795 13.8167 -58.799 13.85 -48.535 13.8833 -36.848 13.9167 -19.574 13.95 -12.154 13.9833 -1.586 14.0167 0.042 14.05 3.905 14.0833 -1.172 14.1167 6.858 14.15 4.524 14.1833 1.886 14.2167 7.577 14.25 29.323 14.2833 38.267 14.3167 30.142 14.35 19.174 14.3833 9.220 14.4167 -13.230 14.45 -6.420 14.4833 -8.549 14.5167 -16.369 14.55 -8.949 14.5833 -0.105 14.6167 2.743 14.65 1.834 14.6833 9.763 14.7167 25.413 14.75 32.123 14.7833 36.700 14.8167 36.705 14.85 22.994 14.8833 5.725 14.9167 -19.569 14.95 -29.622 14.9833 -26.570 15.0167 -26.055 15.05 -13.858 15.0833 -2.576 15.1167 -13.544 15.15 -16.892 15.1833 -13.025 15.2167 -12.106 15.25 -14.539 15.2833 -17.073 15.3167 -15.239 15.35 6.611 15.3833 21.856 15.4167 33.953 15.45 42.797 15.4833 32.339 15.5167 22.490 15.55 3.497 15.5833 -19.663 15.6167 -49.934 15.65 -61.611 15.6833 -52.562 15.7167 -45.342 15.75 -27.150 15.7833 -12.005 15.8167 4.969 15.85 21.333 15.8833 28.553 15.9167 24.495 15.95 15.561 15.9833 20.038 16.0167 14.456 16.05 17.104 16.0833 22.395 16.1167 29.006 16.15 40.188 16.1833 39.993 16.2167 38.679 16.25 22.124 16.2833 13.699 16.3167 -10.170 16.35 -35.259 16.3833 -67.763 16.4167 -79.441 16.45 -61.348 16.4833 -56.871 16.5167 -42.131 16.55 -23.938 16.5833 -2.797 16.6167 9.299 16.65 21.601 16.6833 23.944 16.7167 10.643 16.75 9.838 16.7833 3.647 16.8167 -3.864 16.85 -3.654 16.8833 4.075 16.9167 24.707 16.95 27.255 16.9833 9.991 17.0167 1.361 17.05 4.823 17.0833 4.119 17.1167 -4.001 17.15 -13.545 17.1833 -11.912 17.2167 -14.850 17.25 -13.421 17.2833 3.147 17.3167 14.025 17.35 25.107 17.3833 22.269 17.4167 19.026 17.45 18.321 17.4833 12.130 17.5167 10.106 17.55 9.706 17.5833 12.963 17.6167 15.511 17.65 12.063 17.6833 12.578 17.7167 14.311 17.75 -1.124 17.7833 -6.705 17.8167 -16.249 17.85 -23.660 17.8833 -21.621 17.9167 -13.487 17.95 -8.096 17.9833 -8.496 18.0167 -1.581 18.05 5.030 18.0833 13.469 18.1167 22.923 18.15 9.721 18.1833 -19.330 18.2167 -28.165 18.25 -28.565 18.2833 -30.084 18.3167 -20.121 18.35 -6.705 18.3833 7.221 18.4167 22.161 18.45 35.577 18.4833 38.325 18.5167 36.401 18.55 37.625 18.5833 34.582 18.6167 22.395 18.65 9.903 18.6833 14.579 18.7167 9.403 18.75 -5.223 18.7833 -15.581 18.8167 -19.439 18.85 -16.386 18.8833 -19.329 18.9167 -18.920 18.95 -16.172 18.9833 -17.286 19.0167 -17.181 19.05 -25.916 19.0833 -34.041 19.1167 -30.583 19.15 -22.858 19.1833 -27.021 19.2167 -27.525 19.25 -21.225 19.2833 -4.356 19.3167 10.379 19.35 23.386 19.3833 27.248 19.4167 34.973 19.45 33.044 19.4833 25.629 19.5167 19.738 19.55 11.713 19.5833 5.517 19.6167 2.369 19.65 5.317 19.6833 -0.269 19.7167 -6.975 19.75 -11.952 19.7833 -2.503 19.8167 1.359 19.85 -3.213 19.8833 -7.175 19.9167 -4.127 19.95 2.274 19.9833 -2.908 20.0167 -5.041 20.05 -14.185 20.0833 -12.052 20.1167 0.445 20.15 4.507 20.1833 -0.674 20.2167 -10.023 20.25 -13.376 20.2833 -17.543 20.3167 -22.015 20.35 -19.781 20.3833 -18.562 20.4167 -16.938 20.45 -11.961 20.4833 -3.532 20.5167 0.835 20.55 -2.722 20.5833 3.779 20.6167 8.551 20.65 1.945 20.6833 11.594 20.7167 25.815 20.75 24.696 20.7833 28.858 20.8167 27.229 20.85 19.809 20.8833 17.875 20.9167 18.075 20.95 10.351 20.9833 4.859 21.0167 4.755 21.05 -8.761 21.0833 -11.509 21.1167 -8.261 21.15 -4.304 21.1833 -10.709 21.2167 -14.372 21.25 -17.220 21.2833 -16.615 21.3167 -21.801 21.35 -21.501 21.3833 -18.763 21.4167 -16.329 21.45 -15.929 21.4833 -25.078 21.5167 -27.826 21.55 -14.625 21.5833 -2.742 21.6167 1.925 21.65 5.578 21.6833 7.807 21.7167 7.597 21.75 2.106 21.7833 -4.809 21.8167 -1.666 21.85 12.450 21.8833 12.240 21.9167 13.555 21.95 13.345 21.9833 10.697 22.0167 5.306 22.05 -1.000 22.0833 -7.205 22.1167 -4.367 22.15 3.958 22.1833 17.259 22.2167 19.793 22.25 12.978 22.2833 13.378 22.3167 20.583 22.35 13.973 22.3833 2.891 22.4167 0.343 22.45 1.047 22.4833 2.157 22.5167 0.523 22.55 -8.425 22.5833 -21.742 22.6167 -25.509 22.65 -31.105 22.6833 -36.091 22.7167 -38.334 22.75 -33.872 22.7833 -22.704 22.8167 -11.841 22.85 -11.950 22.8833 -12.669 22.9167 -8.512 22.95 0.218 22.9833 -1.111 23.0167 1.927 23.05 0.499 23.0833 -5.707 23.1167 -0.940 23.15 -1.964 23.1833 -10.913 23.2167 -9.803 23.25 -5.645 23.2833 6.437 23.3167 6.937 23.35 9.571 23.3833 9.461 23.4167 9.961 23.45 13.814 23.4833 22.239 23.5167 21.519 23.55 20.091 23.5833 24.248 23.6167 14.690 23.65 0.864 23.6833 -6.256 23.7167 -16.424 23.75 -21.510 23.7833 -25.278 23.8167 -36.970 23.85 -39.822 23.8833 -39.422 23.9167 -35.265 23.95 -27.245 23.9833 -24.611 24.0167 -19.639 24.05 -13.043 24.0833 -2.890 24.1167 2.487 24.15 2.278 24.1833 -0.066 24.2167 -1.190 24.25 0.225 24.2833 10.379 24.3167 10.169 24.35 6.911 24.3833 5.482 24.4167 -0.518 24.45 1.406 24.4833 7.597 24.5167 14.603 24.55 16.527 24.5833 20.279 24.6167 18.446 24.65 12.140 24.6833 8.782 24.7167 -1.181 24.75 -9.110 24.7833 -20.293 24.8167 -31.880 24.85 -39.200 24.8833 -35.852 24.9167 -35.552 24.95 -25.803 24.9833 -13.616 25.0167 -7.525 25.05 -7.834 25.0833 -7.330 25.1167 -7.639 25.15 -9.168 25.1833 -12.016 25.2167 -15.069 25.25 -12.735 25.2833 -3.391 25.3167 -2.886 25.35 0.766 25.3833 1.576 25.4167 -9.806 25.45 -14.178 25.4833 -20.989 25.5167 -18.755 25.55 -13.374 25.5833 -2.506 25.6167 4.910 25.65 8.158 25.6833 11.001 25.7167 18.516 25.75 18.921 25.7833 21.155 25.8167 16.682 25.85 0.018 25.8833 -10.550 25.9167 -10.145 25.95 -9.130 25.9833 -8.421 26.0167 -6.187 26.05 4.581 26.0833 12.506 26.1167 11.691 26.15 8.948 26.1833 8.948 26.2167 6.000 26.25 -1.925 26.2833 -8.935 26.3167 -17.165 26.35 -26.614 26.3833 -31.490 26.4167 -27.528 26.45 -31.490 26.4833 -39.415 26.5167 -43.073 26.55 -45.916 26.5833 -37.077 26.6167 -33.214 26.65 -24.680 26.6833 -13.502 26.7167 9.358 26.75 20.231 26.7833 20.435 26.8167 29.479 26.85 29.684 26.8833 22.269 26.9167 16.378 26.95 10.486 26.9833 7.948 27.0167 12.420 27.05 12.930 27.0833 10.596 27.1167 6.229 27.15 3.081 27.1833 -1.386 27.2167 4.610 27.25 3.495 27.2833 -3.715 27.3167 -9.302 27.35 -15.293 27.3833 -18.846 27.4167 -20.570 27.45 -18.331 27.4833 -15.788 27.5167 -13.245 27.55 -10.397 27.5833 -9.682 27.6167 -10.492 27.65 -4.291 27.6833 1.300 27.7167 1.100 27.75 3.848 27.7833 2.429 27.8167 4.667 27.85 7.415 27.8833 -0.405 27.9167 -9.544 27.95 -23.460 27.9833 -24.979 28.0167 -24.670 28.05 -24.260 28.0833 -18.159 28.1167 -12.058 28.15 -3.724 28.1833 7.863 28.2167 12.440 28.25 15.188 28.2833 22.813 28.3167 27.390 28.35 23.737 28.3833 21.303 28.4167 11.250 28.45 0.586 28.4833 -4.286 28.5167 -1.842 28.55 -2.142 28.5833 -13.720 28.6167 -17.982 28.65 -19.502 28.6833 -20.511 28.7167 -14.715 28.75 -11.053 28.7833 -14.706 28.8167 -16.934 28.85 -17.844 28.8833 -16.010 28.9167 -10.010 28.95 -7.566 28.9833 -2.990 29.0167 -2.170 29.05 -8.262 29.0833 -12.524 29.1167 -22.982 29.15 -20.844 29.1833 -10.881 29.2167 -4.170 29.25 2.440 29.2833 4.274 29.3167 9.460 29.35 15.156 29.3833 22.476 29.4167 18.723 29.45 13.851 29.4833 3.393 29.5167 -7.880 29.55 -7.366 29.5833 -0.960 29.6167 -2.174 29.65 -4.403 29.6833 -3.484 29.7167 -8.456 29.75 -6.318 29.7833 -4.179 29.8167 -6.103 29.85 -9.146 29.8833 -11.680 29.9167 -14.114 29.95 -8.318 29.9833 -9.532 30.0167 -2.007 30.05 2.265 30.0833 -1.693 30.1167 -7.479 30.15 -8.489 30.1833 -6.045 30.2167 -6.345 30.25 -9.389 30.2833 -12.127 30.3167 -9.074 30.35 -7.545 30.3833 -11.503 30.4167 -8.755 30.45 -6.617 30.4833 -9.660 30.5167 -11.179 30.55 -9.550 30.5833 -14.118 30.6167 -17.161 30.65 -16.851 30.6833 -15.222 30.7167 -14.608 30.75 -5.054 30.7833 0.132 30.8167 1.456 30.85 6.033 30.8833 13.758 30.9167 13.253 30.95 16.915 30.9833 17.020 31.0167 9.200 31.05 -1.363 31.0833 -13.145 31.1167 -16.394 31.15 -12.936 31.1833 -17.403 31.2167 -20.042 31.25 -21.156 31.2833 -26.133 31.3167 -34.867 31.35 -33.848 31.3833 -32.119 31.4167 -22.870 31.45 -12.302 31.4833 -10.878 31.5167 -10.164 31.55 -10.264 31.5833 -8.535 31.6167 -8.940 31.65 -4.163 31.6833 2.138 31.7167 7.524 31.75 8.643 31.7833 4.276 31.8167 3.262 31.85 -0.396 31.8833 -7.506 31.9167 -5.168 31.95 -8.216 31.9833 -11.364 32.0167 -10.754 32.05 -11.059 32.0833 -7.097 32.1167 -3.234 32.15 -2.320 32.1833 4.691 32.2167 4.995 32.25 7.739 32.2833 4.386 32.3167 -5.268 32.35 -5.268 32.3833 0.523 32.4167 1.843 32.45 -0.901 32.4833 -0.496 32.5167 -0.496 32.55 -2.834 32.5833 -3.649 32.6167 -9.135 32.65 -12.388 32.6833 -15.641 32.7167 -17.979 32.75 -20.318 32.7833 -21.132 32.8167 -19.508 32.85 -16.260 32.8833 -8.845 32.9167 -8.440 32.95 -0.925 32.9833 2.833 33.0167 4.557 33.05 3.743 33.0833 7.600 33.1167 6.176 33.15 -0.939 33.1833 -3.482 33.2167 -6.025 33.25 -5.825 33.2833 -6.540 33.3167 -9.693 33.35 -13.150 33.3833 -12.341 33.4167 -14.884 33.45 -15.294 33.4833 -8.693 33.5167 -6.869 33.55 -0.573 33.5833 6.638 33.6167 9.071 33.65 6.223 33.6833 2.561 33.7167 -5.978 33.75 -6.388 33.7833 -5.173 33.8167 -6.397 33.85 -13.208 33.8833 -17.480 33.9167 -21.142 33.95 -22.366 33.9833 -16.275 34.0167 -12.622 34.05 -4.397 34.0833 1.694 34.1167 0.165 34.15 -3.193 34.1833 -10.818 34.2167 -18.342 34.25 -22.005 34.2833 -20.181 34.3167 -18.662 34.35 -17.652 34.3833 -17.047 34.4167 -20.710 34.45 -18.481 34.4833 -11.170 34.5167 -5.284 34.55 3.855 34.5833 13.399 34.6167 14.919 34.65 14.099 34.6833 14.095 34.7167 15.104 34.75 14.185 34.7833 4.222 34.8167 0.255 34.85 -5.137 34.8833 -5.042 34.9167 -7.790 34.95 -12.266 34.9833 -12.476 35.0167 -15.419 35.05 -16.958 35.0833 -16.253 35.1167 -20.220 35.15 -17.077 35.1833 -11.800 35.2167 -5.709 35.25 -2.566 35.2833 -0.337 35.3167 4.535 35.35 4.326 35.3833 5.540 35.4167 4.721 35.45 5.121 35.4833 3.287 35.5167 -0.885 35.55 -8.205 35.5833 -12.072 35.6167 -12.991 35.65 -11.372 35.6833 -10.767 35.7167 -13.110 35.75 -8.543 35.7833 -3.062 35.8167 1.606 35.85 0.686 35.8833 1.291 35.9167 -4.405 35.95 -10.201 35.9833 -12.339 36.0167 -18.440 36.05 -21.798 36.0833 -16.011 36.1167 -9.006 36.15 -6.572 36.1833 -2.005 36.2167 4.086 36.25 7.739 36.2833 6.820 36.3167 4.886 36.35 0.310 36.3833 -1.524 36.4167 1.724 36.45 4.462 36.4833 4.662 36.5167 1.305 36.55 -3.067 36.5833 -0.734 36.6167 0.076 36.65 0.986 36.6833 3.624 36.7167 3.824 36.75 1.281 36.7833 -3.396 36.8167 -7.768 36.85 -13.459 36.8833 -13.564 36.9167 -11.840 36.95 -16.922 36.9833 -18.246 37.0167 -24.242 37.05 -29.528 37.0833 -30.952 37.1167 -27.499 37.15 -25.875 37.1833 -18.460 37.2167 -6.982 37.25 0.028 37.2833 1.652 37.3167 2.666 37.35 6.119 37.3833 8.962 37.4167 7.438 37.45 5.100 37.4833 1.747 37.5167 -0.896 37.55 -3.030 37.5833 -0.591 37.6167 3.981 37.65 3.166 37.6833 8.043 37.7167 6.519 37.75 3.371 37.7833 -4.249 37.8167 -4.249 37.85 -2.725 37.8833 -2.825 37.9167 -0.691 37.95 -0.486 37.9833 -1.401 38.0167 -3.939 38.05 -8.916 38.0833 -16.536 38.1167 -21.513 38.15 -22.832 38.1833 -21.408 38.2167 -23.032 38.25 -24.961 38.2833 -22.418 38.3167 -17.946 38.35 -12.864 38.3833 -9.711 38.4167 -5.849 38.45 0.962 38.4833 7.262 38.5167 8.282 38.55 6.253 38.5833 1.886 38.6167 -2.277 38.65 -5.830 38.6833 -9.992 38.7167 -16.898 38.75 -22.889 38.7833 -23.698 38.8167 -22.070 38.85 -16.883 38.8833 -11.597 38.9167 -9.054 38.95 0.095 38.9833 12.392 39.0167 13.411 39.05 14.026 39.0833 15.555 39.1167 11.087 39.15 4.082 39.1833 -0.181 39.2167 -4.443 39.25 -8.606 39.2833 -11.954 39.3167 -10.730 39.35 -7.982 39.3833 -2.186 39.4167 1.172 39.45 3.820 39.4833 3.825 39.5167 0.782 39.55 -3.481 39.5833 -7.843 39.6167 -12.715 39.65 -13.320 39.6833 -14.939 39.7167 -18.897 39.75 -19.906 39.7833 -17.158 39.8167 -14.510 39.85 -9.729 39.8833 -3.018 39.9167 0.849 39.95 4.411 39.9833 8.074 40.0167 8.893 40.05 10.931 40.0833 12.055 40.1167 15.008 40.15 11.865 40.1833 6.588 40.2167 1.616 40.25 -4.880 40.2833 -8.328 40.3167 -10.252 40.35 -6.385 40.3833 -0.079 40.4167 3.688 40.45 3.288 40.4833 8.679 40.5167 13.156 40.55 16.109 40.5833 14.999 40.6167 11.247 40.65 6.275 40.6833 -2.760 40.7167 -7.732 40.75 -14.023 40.7833 -16.862 40.8167 -15.738 40.85 -15.323 40.8833 -9.322 40.9167 -7.079 40.95 -4.736 40.9833 -3.102 41.0167 -1.369 41.05 -1.564 41.0833 -1.964 41.1167 -0.940 41.15 0.084 41.1833 2.732 41.2167 8.328 41.25 10.671 41.2833 13.829 41.3167 15.867 41.35 8.662 41.3833 4.199 41.4167 0.142 41.45 -5.540 41.4833 -10.817 41.5167 -8.573 41.55 -4.097 41.5833 -7.340 41.6167 -5.706 41.65 -7.325 41.6833 -7.521 41.7167 -7.006 41.75 -6.287 41.7833 -6.077 41.8167 -3.225 41.85 0.338 41.8833 1.462 41.9167 0.047 41.95 -0.657 41.9833 -1.157 42.0167 0.271 42.05 1.395 42.0833 3.029 42.1167 5.372 42.15 8.325 42.1833 7.011 42.2167 5.901 42.25 3.672 42.2833 -1.300 42.3167 -4.748 42.35 -9.110 42.3833 -12.558 42.4167 -13.263 42.45 -16.406 42.4833 -17.111 42.5167 -15.073 42.55 -11.815 42.5833 -7.238 42.6167 -3.371 42.65 -0.418 42.6833 0.096 42.7167 -0.813 42.75 -2.737 42.7833 -5.476 42.8167 -3.437 42.85 -0.080 42.8833 2.973 42.9167 5.011 42.95 10.198 42.9833 11.727 43.0167 8.988 43.05 5.335 43.0833 7.169 43.1167 3.821 43.15 1.692 43.1833 0.173 43.2167 -0.737 43.25 -3.780 43.2833 -6.113 43.3167 -6.718 43.35 -9.052 43.3833 -10.571 43.4167 -8.028 43.45 -11.581 43.4833 -18.281 43.5167 -18.481 43.55 -16.548 43.5833 -14.919 43.6167 -9.023 43.65 -6.785 43.6833 -2.108 43.7167 5.412 43.75 8.870 43.7833 7.146 43.8167 8.875 43.85 5.931 43.8833 4.917 43.9167 2.988 43.95 0.045 43.9833 -2.189 44.0167 -3.203 44.05 -3.608 44.0833 -3.403 44.1167 -7.770 44.15 -9.904 44.1833 -7.565 44.2167 -4.313 44.25 -1.874 44.2833 2.293 44.3167 7.170 44.35 9.203 44.3833 10.423 44.4167 7.070 44.45 -0.245 44.4833 -4.208 44.5167 -6.646 44.55 -12.133 44.5833 -14.166 44.6167 -13.252 44.65 -15.995 44.6833 -13.761 44.7167 -7.665 44.75 -4.822 44.7833 -2.589 44.8167 3.203 44.85 4.217 44.8833 2.488 44.9167 -0.765 44.95 -4.627 44.9833 -1.989 45.0167 -2.498 45.05 -4.532 45.0833 -6.770 45.1167 -4.841 45.15 -4.641 45.1833 -3.017 45.2167 0.231 45.25 2.564 45.2833 2.764 45.3167 5.707 45.35 6.822 45.3833 7.327 45.4167 6.917 45.45 7.727 45.4833 4.574 45.5167 2.740 45.55 0.502 45.5833 -3.161 45.6167 -4.789 45.65 -9.671 45.6833 -13.943 45.7167 -12.524 45.75 -11.309 45.7833 -9.485 45.8167 -10.405 45.85 -11.629 45.8833 -11.633 45.9167 -12.757 45.95 -14.591 45.9833 -13.986 46.0167 -14.501 46.05 -14.201 46.0833 -13.191 46.1167 -11.062 46.15 -7.919 46.1833 -5.485 46.2167 -0.513 46.25 3.849 46.2833 6.383 46.3167 7.392 46.35 4.439 46.3833 3.620 46.4167 1.887 46.45 0.153 46.4833 -3.409 46.5167 -5.753 46.55 -6.472 46.5833 -8.510 46.6167 -8.720 46.65 -10.658 46.6833 -14.221 46.7167 -13.721 46.75 -10.577 46.7833 -8.249 46.8167 -6.020 46.85 -2.777 46.8833 -0.448 46.9167 0.867 46.95 1.671 46.9833 0.952 47.0167 -1.501 47.05 -3.839 47.0833 -7.097 47.1167 -9.035 47.15 -10.669 47.1833 -15.350 47.2167 -18.508 47.25 -18.313 47.2833 -21.166 47.3167 -24.933 47.35 -25.042 47.3833 -22.714 47.4167 -17.032 47.45 -13.484 47.4833 -9.021 47.5167 -5.473 47.55 0.003 47.5833 2.637 47.6167 5.575 47.65 7.599 47.6833 13.586 47.7167 14.086 47.75 15.195 47.7833 12.647 47.8167 9.490 47.85 3.589 47.8833 -1.093 47.9167 0.322 47.95 2.955 47.9833 1.931 48.0167 1.822 48.05 2.017 48.0833 -4.189 48.1167 -7.042 48.15 -9.590 48.1833 -13.662 48.2167 -16.819 48.25 -17.843 48.2833 -18.258 48.3167 -18.977 48.35 -20.101 48.3833 -20.515 48.4167 -19.101 48.45 -18.091 48.4833 -14.543 48.5167 -12.519 48.55 -11.205 48.5833 -10.400 48.6167 -6.342 48.65 -3.809 48.6833 -3.004 48.7167 0.139 48.75 0.844 48.7833 -0.790 48.8167 -1.609 48.85 -3.952 48.8833 -4.466 48.9167 -7.114 48.95 -5.190 48.9833 -3.876 49.0167 -0.733 49.05 1.496 49.0833 1.796 49.1167 4.025 49.15 6.863 49.1833 8.078 49.2167 7.563 49.25 8.168 49.2833 7.958 49.3167 3.382 49.35 0.329 49.3833 -3.638 49.4167 -7.301 49.45 -8.830 49.4833 -9.139 49.5167 -9.449 49.55 -8.539 49.5833 -8.239 49.6167 -7.939 49.65 -5.910 49.6833 -5.610 49.7167 -9.068 49.75 -12.730 49.7833 -13.750 49.8167 -17.207 49.85 -17.617 49.8833 -16.707 49.9167 -14.678 49.95 -13.869 49.9833 -13.464 50.0167 -10.826 50.05 -10.321 50.0833 -8.902 50.1167 -4.230 50.15 0.238 50.1833 4.605 50.2167 7.243 50.25 9.782 50.2833 9.272 50.3167 7.238 50.35 3.986 50.3833 0.733 50.4167 -2.520 50.45 -3.944 50.4833 -5.063 50.5167 -6.587 50.55 -8.621 50.5833 -11.569 50.6167 -9.740 50.65 -8.116 50.6833 -6.287 50.7167 -4.763 50.75 -2.934 50.7833 -3.239 50.8167 -2.630 50.85 -4.154 50.8833 -5.373 50.9167 -9.640 50.95 -15.736 50.9833 -18.579 51.0167 -22.542 51.05 -23.456 51.0833 -21.422 51.1167 -19.998 51.15 -16.646 51.1833 -12.174 51.2167 -9.226 51.25 -8.411 51.2833 -5.668 51.3167 -4.549 51.35 -2.006 51.3833 1.857 51.4167 3.890 51.45 5.314 51.4833 6.129 51.5167 5.929 51.55 3.086 51.5833 1.057 51.6167 -0.872 51.65 -4.730 51.6833 -4.525 51.7167 -4.115 51.75 -5.534 51.7833 -7.563 51.8167 -8.678 51.85 -11.011 51.8833 -11.211 51.9167 -12.021 51.95 -12.526 51.9833 -14.554 52.0167 -16.888 52.05 -19.526 52.0833 -22.470 52.1167 -24.598 52.15 -22.970 52.1833 -22.355 52.2167 -18.898 52.25 -17.064 52.2833 -15.740 52.3167 -14.211 52.35 -10.754 52.3833 -9.225 52.4167 -6.782 52.45 -3.019 52.4833 0.338 52.5167 3.391 52.55 4.006 52.5833 4.925 52.6167 3.406 52.65 2.801 52.6833 0.977 52.7167 -2.676 52.75 -6.938 52.7833 -9.677 52.8167 -11.196 52.85 -8.753 52.8833 -5.700 52.9167 -5.695 52.95 -5.181 52.9833 -1.823 53.0167 -1.818 53.05 -2.828 53.0833 -3.433 53.1167 -3.428 53.15 -4.438 53.1833 -4.433 53.2167 -4.428 53.25 -4.523 53.2833 -3.909 53.3167 -8.271 53.35 -12.838 53.3833 -15.677 53.4167 -15.977 53.45 -15.767 53.4833 -16.067 53.5167 -17.991 53.55 -17.682 53.5833 -18.082 53.6167 -16.248 53.65 -16.038 53.6833 -14.914 53.7167 -14.300 53.75 -11.957 53.7833 -9.818 53.8167 -5.037 53.85 -2.084 53.8833 -0.860 53.9167 0.569 53.95 3.012 53.9833 4.746 54.0167 4.346 54.05 3.741 54.0833 2.427 54.1167 -0.007 54.15 -7.113 54.1833 -10.461 54.2167 -13.604 54.25 -17.257 54.2833 -17.657 54.3167 -18.666 54.35 -19.576 54.3833 -17.438 54.4167 -12.961 54.45 -9.298 54.4833 -4.821 54.5167 -1.769 54.55 -0.949 54.5833 -0.335 54.6167 -2.159 54.65 -5.202 54.6833 -8.955 54.7167 -11.998 54.75 -15.346 54.7833 -17.780 54.8167 -19.704 54.85 -21.528 54.8833 -19.694 54.9167 -18.470 54.95 -16.637 54.9833 -14.498 55.0167 -13.274 55.05 -12.355 55.0833 -12.860 55.1167 -10.112 55.15 -9.802 55.1833 -10.407 55.2167 -10.607 55.25 -8.469 55.2833 -8.464 55.3167 -7.140 55.35 -5.611 55.3833 -6.116 55.4167 -5.501 55.45 -4.482 55.4833 -4.987 55.5167 -3.053 55.55 -3.963 55.5833 -5.382 55.6167 -6.801 55.65 -6.392 55.6833 -5.982 55.7167 -6.182 55.75 -6.992 55.7833 -8.921 55.8167 -12.169 55.85 -14.807 55.8833 -17.650 55.9167 -21.508 55.95 -23.132 55.9833 -24.856 56.0167 -24.346 56.05 -22.922 56.0833 -19.769 56.1167 -17.126 56.15 -14.483 56.1833 -10.621 56.2167 -8.587 56.25 -8.077 56.2833 -3.605 56.3167 0.052 56.35 3.000 56.3833 3.815 56.4167 3.815 56.45 4.629 56.4833 4.934 56.5167 2.191 56.55 -2.481 56.5833 -7.663 56.6167 -13.759 56.65 -15.588 56.6833 -16.807 56.7167 -14.978 56.75 -16.807 56.7833 -16.197 56.8167 -13.964 56.85 -12.440 56.8833 -11.525 56.9167 -14.169 56.95 -15.083 56.9833 -14.373 57.0167 -14.273 57.05 -14.273 57.0833 -10.516 57.1167 -8.892 57.15 -4.829 57.1833 -4.425 57.2167 -6.458 57.25 -10.016 57.2833 -12.049 57.3167 -12.459 57.35 -13.273 57.3833 -12.259 57.4167 -12.669 57.45 -13.178 57.4833 -13.893 57.5167 -12.878 57.55 -11.764 57.5833 -10.649 57.6167 -8.925 57.65 -6.997 57.6833 -5.273 57.7167 -6.901 57.75 -5.177 57.7833 -5.587 57.8167 -5.387 57.85 -4.782 57.8833 -4.582 57.9167 -3.163 57.95 -1.134 57.9833 -0.225 58.0167 -3.073 58.05 -5.516 58.0833 -8.364 58.1167 -13.245 58.15 -17.008 58.1833 -18.842 58.2167 -21.285 58.25 -20.780 58.2833 -19.261 58.3167 -17.132 58.35 -16.222 58.3833 -12.874 58.4167 -13.184 58.45 -11.360 58.4833 -11.060 58.5167 -11.674 58.55 -10.765 58.5833 -9.550 58.6167 -8.945 58.65 -8.036 58.6833 -9.465 58.7167 -9.469 58.75 -9.474 58.7833 -10.294 58.8167 -8.774 58.85 -8.474 58.8833 -7.160 58.9167 -7.165 58.95 -7.679 58.9833 -7.989 59.0167 -9.922 59.05 -10.337 59.0833 -11.156 59.1167 -11.466 59.15 -13.809 59.1833 -13.814 59.2167 -15.547 59.25 -15.147 59.2833 -13.323 59.3167 -8.656 59.35 -6.427 59.3833 -4.298 59.4167 -2.984 59.45 -4.108 59.4833 -6.551 59.5167 -7.370 59.55 -10.628 59.5833 -13.376 59.6167 -14.805 59.65 -17.148 59.6833 -17.458 59.7167 -18.277 59.75 -18.182 59.7833 -16.562 59.8167 -15.958 59.85 -16.472 59.8833 -18.206 59.9167 -19.734 59.95 -17.810 59.9833 -16.596 60.0167 -13.453 60.05 -9.700 60.0833 -7.571 60.1167 -5.342 60.15 -5.347 60.1833 -4.033 60.2167 -4.952 60.25 -8.210 60.2833 -9.738 60.3167 -6.086 60.35 -5.686 60.3833 -5.081 60.4167 -3.866 60.45 -2.552 60.4833 -3.471 60.5167 -3.476 60.55 -5.310 60.5833 -8.362 60.6167 -12.634 60.65 -18.430 60.6833 -20.264 60.7167 -19.050 60.75 -18.445 60.7833 -15.097 60.8167 -10.530 60.85 -6.877 60.8833 -6.067 60.9167 -5.767 60.95 -4.858 60.9833 -4.048 61.0167 -4.358 61.05 -5.072 61.0833 -6.091 61.1167 -5.486 61.15 -6.201 61.1833 -5.696 61.2167 -6.106 61.25 -7.734 61.2833 -10.582 61.3167 -10.382 61.35 -12.621 61.3833 -12.726 61.4167 -12.830 61.45 -15.169 61.4833 -17.407 61.5167 -16.902 61.55 -16.498 61.5833 -13.959 61.6167 -11.321 61.65 -9.392 61.6833 -7.768 61.7167 -4.925 61.75 -3.910 61.7833 -4.115 61.8167 -4.930 61.85 -8.487 61.8833 -9.302 61.9167 -10.421 61.95 -12.554 61.9833 -12.759 62.0167 -11.845 62.05 -11.540 62.0833 -9.611 62.1167 -5.039 62.15 -1.991 62.1833 -1.382 62.2167 -0.467 62.25 -1.686 62.2833 -3.515 62.3167 -7.478 62.35 -10.221 62.3833 -12.759 62.4167 -13.978 62.45 -15.298 62.4833 -17.736 62.5167 -17.226 62.55 -16.107 62.5833 -15.193 62.6167 -14.378 62.65 -14.478 62.6833 -14.274 62.7167 -14.678 62.75 -12.035 62.7833 -8.882 62.8167 -7.154 62.85 -4.815 62.8833 -3.491 62.9167 -4.506 62.95 -1.048 62.9833 -1.453 63.0167 -3.177 63.05 -4.291 63.0833 -7.134 63.1167 -9.163 63.15 -9.973 63.1833 -11.392 63.2167 -10.982 63.25 -9.658 63.2833 -8.739 63.3167 -6.806 63.35 -5.786 63.3833 -5.377 63.4167 -5.067 63.45 -6.486 63.4833 -7.091 63.5167 -10.339 63.55 -10.639 63.5833 -10.939 63.6167 -11.444 63.65 -11.134 63.6833 -12.958 63.7167 -12.649 63.75 -12.644 63.7833 -10.810 63.8167 -10.806 63.85 -10.496 63.8833 -10.796 63.9167 -10.791 63.95 -10.277 63.9833 -9.053 64.0167 -8.134 64.05 -5.386 64.0833 -3.957 64.1167 -3.952 64.15 -4.047 64.1833 -4.042 64.2167 -6.271 64.25 -8.400 64.2833 -10.019 64.3167 -11.029 64.35 -12.548 64.3833 -12.034 64.4167 -12.738 64.45 -10.395 64.4833 -8.562 64.5167 -7.133 64.55 -7.228 64.5833 -5.494 64.6167 -5.285 64.65 -5.685 64.6833 -4.561 64.7167 -5.570 64.75 -4.142 64.7833 -2.408 64.8167 -3.418 64.85 -3.513 64.8833 -2.794 64.9167 -4.108 64.95 -6.337 64.9833 -7.956 65.0167 -11.404 65.05 -14.038 65.0833 -14.742 65.1167 -14.838 65.15 -15.642 65.1833 -17.262 65.2167 -16.442 65.25 -13.894 65.2833 -13.075 65.3167 -10.427 65.35 -8.489 65.3833 -9.498 65.4167 -9.389 65.45 -10.094 65.4833 -8.969 65.5167 -6.117 65.55 -5.602 65.5833 -5.493 65.6167 -4.978 65.65 -4.869 65.6833 -4.659 65.7167 -3.940 65.75 -1.597 65.7833 -0.877 65.8167 -0.973 65.85 -1.473 65.8833 -3.701 65.9167 -5.016 65.95 -5.516 65.9833 -7.440 66.0167 -10.073 66.05 -11.388 66.0833 -11.278 66.1167 -10.154 66.15 -9.335 66.1833 -10.445 66.2167 -9.625 66.25 -7.077 66.2833 -4.734 66.3167 -5.134 66.35 -6.449 66.3833 -7.253 66.4167 -6.129 66.45 -7.749 66.4833 -9.063 66.5167 -7.125 66.55 -6.305 66.5833 -5.181 66.6167 -3.143 66.65 -0.190 66.6833 0.019 66.7167 -0.990 66.75 -2.609 66.7833 -2.705 66.8167 -2.495 66.85 -2.590 66.8833 -4.514 66.9167 -6.133 66.95 -7.448 66.9833 -9.272 67.0167 -9.367 67.05 -9.157 67.0833 -9.762 67.1167 -11.686 67.15 -11.781 67.1833 -10.862 67.2167 -10.857 67.25 -9.733 67.2833 -8.814 67.3167 -10.129 67.35 -10.429 67.3833 -11.948 67.4167 -10.419 67.45 -11.024 67.4833 -9.800 67.5167 -9.185 67.55 -8.571 67.5833 -7.042 67.6167 -6.733 67.65 -4.594 67.6833 -3.575 67.7167 -5.399 67.75 -5.699 67.7833 -6.204 67.8167 -7.723 67.85 -5.789 67.8833 -5.380 67.9167 -5.985 67.95 -5.270 67.9833 -1.508 68.0167 -0.489 68.05 0.835 68.0833 0.026 68.1167 -0.479 68.15 -3.117 68.1833 -5.046 68.2167 -7.075 68.25 -7.785 68.2833 -8.594 68.3167 -8.999 68.35 -10.723 68.3833 -11.128 68.4167 -11.228 68.45 -11.633 68.4833 -11.733 68.5167 -12.442 68.55 -13.152 68.5833 -13.252 68.6167 -12.437 68.65 -10.404 68.6833 -10.709 68.7167 -10.504 68.75 -9.285 68.7833 -7.861 68.8167 -8.165 68.85 -6.641 68.8833 -6.032 68.9167 -6.641 68.95 -6.032 68.9833 -5.727 69.0167 -5.422 69.05 -5.422 69.0833 -5.322 69.1167 -5.627 69.15 -4.917 69.1833 -6.441 69.2167 -7.561 69.25 -8.170 69.2833 -8.375 69.3167 -7.665 69.35 -6.956 69.3833 -5.637 69.4167 -4.317 69.45 -2.389 69.4833 -1.884 69.5167 -1.784 69.55 -2.903 69.5833 -3.922 69.6167 -3.822 69.65 -5.756 69.6833 -7.080 69.7167 -7.589 69.75 -9.218 69.7833 -10.237 69.8167 -10.952 69.85 -10.447 69.8833 -10.247 69.9167 -10.861 69.95 -10.966 69.9833 -11.071 70.0167 -12.295 70.05 -12.705 70.0833 -16.062 70.1167 -14.948 70.15 -14.343 70.1833 -12.519 70.2167 -11.000 70.25 -10.090 70.2833 -10.195 70.3167 -9.185 70.35 -7.666 70.3833 -6.757 70.4167 -6.761 70.45 -5.242 70.4833 -3.623 70.5167 -2.713 70.55 -1.804 70.5833 -1.709 70.6167 -1.104 70.65 -1.923 70.6833 -3.657 70.7167 -4.476 70.75 -5.395 70.7833 -6.519 70.8167 -5.509 70.85 -4.500 70.8833 -5.319 70.9167 -5.224 70.95 -6.957 70.9833 -7.777 71.0167 -9.110 71.05 -9.315 71.0833 -10.439 71.1167 -11.868 71.15 -11.368 71.1833 -11.273 71.2167 -10.568 71.25 -9.153 71.2833 -9.058 71.3167 -7.949 71.35 -7.144 71.3833 -8.268 71.4167 -9.597 71.45 -9.197 71.4833 -11.135 71.5167 -9.721 71.55 -9.221 71.5833 -8.211 71.6167 -8.321 71.65 -6.601 71.6833 -6.711 71.7167 -5.906 71.75 -7.845 71.7833 -7.649 71.8167 -8.773 71.85 -8.883 71.8833 -8.383 71.9167 -8.188 71.95 -7.688 71.9833 -6.578 72.0167 -5.773 72.05 -4.969 72.0833 -4.164 72.1167 -4.273 72.15 -4.383 72.1833 -6.017 72.2167 -7.041 72.25 -8.065 72.2833 -9.698 72.3167 -10.722 72.35 -9.613 72.3833 -7.589 72.4167 -6.784 72.45 -7.503 72.4833 -8.527 72.5167 -9.551 72.55 -10.880 72.5833 -12.614 72.6167 -14.247 72.65 -15.576 72.6833 -15.076 72.7167 -14.881 72.75 -15.700 72.7833 -13.676 72.8167 -13.481 72.85 -11.152 72.8833 -8.923 72.9167 -8.728 72.95 -6.804 72.9833 -4.780 73.0167 -3.161 73.05 -1.137 73.0833 0.787 73.1167 1.592 73.15 1.382 73.1833 -0.046 73.2167 -2.390 73.25 -4.023 73.2833 -4.842 73.3167 -7.186 73.35 -7.395 73.3833 -8.214 73.4167 -7.814 73.45 -8.024 73.4833 -7.624 73.5167 -7.629 73.55 -8.143 73.5833 -8.353 73.6167 -10.796 73.65 -10.701 73.6833 -12.230 73.7167 -12.134 73.75 -11.225 73.7833 -10.315 73.8167 -10.525 73.85 -10.530 73.8833 -9.620 73.9167 -12.063 73.95 -12.678 73.9833 -13.597 74.0167 -14.821 74.05 -14.926 74.0833 -14.626 74.1167 -12.802 74.15 -11.687 74.1833 -10.473 74.2167 -8.444 74.25 -7.534 74.2833 -6.420 74.3167 -5.915 74.35 -6.630 74.3833 -4.906 74.4167 -2.877 74.45 -2.372 74.4833 -2.782 74.5167 -3.191 74.55 -4.310 74.5833 -4.720 74.6167 -7.668 74.65 -8.382 74.6833 -8.892 74.7167 -8.997 74.75 -11.030 74.7833 -11.540 74.8167 -12.050 74.85 -11.950 74.8833 -12.459 74.9167 -10.835 74.95 -11.445 74.9833 -11.345 75.0167 -11.854 75.05 -12.464 75.0833 -12.974 75.1167 -11.754 75.15 -11.450 75.1833 -10.740 75.2167 -11.350 75.25 -10.740 75.2833 -10.130 75.3167 -8.911 75.35 -7.997 75.3833 -8.097 75.4167 -9.926 75.45 -9.621 75.4833 -10.026 75.5167 -9.111 75.55 -7.687 75.5833 -7.078 75.6167 -6.568 75.65 -6.668 75.6833 -7.378 75.7167 -7.173 75.75 -5.749 75.7833 -6.154 75.8167 -6.558 75.85 -6.963 75.8833 -6.149 75.9167 -6.554 75.95 -5.839 75.9833 -5.634 76.0167 -6.749 76.05 -7.763 76.0833 -8.573 76.1167 -10.602 76.15 -11.006 76.1833 -12.426 76.2167 -13.235 76.25 -13.130 76.2833 -13.330 76.3167 -14.140 76.35 -12.206 76.3833 -10.882 76.4167 -10.473 76.45 -9.454 76.4833 -10.058 76.5167 -11.173 76.55 -10.458 76.5833 -10.758 76.6167 -10.044 76.65 -9.430 76.6833 -9.020 76.7167 -8.710 76.75 -7.182 76.7833 -7.077 76.8167 -5.853 76.85 -5.543 76.8833 -6.148 76.9167 -6.348 76.95 -8.172 76.9833 -7.862 77.0167 -7.248 77.05 -6.024 77.0833 -5.410 77.1167 -4.490 77.15 -4.790 77.1833 -5.395 77.2167 -5.795 77.25 -7.619 77.2833 -9.748 77.3167 -10.048 77.35 -11.058 77.3833 -11.053 77.4167 -10.134 77.45 -10.838 77.4833 -10.224 77.5167 -9.305 77.55 -9.095 77.5833 -11.529 77.6167 -12.234 77.65 -12.229 77.6833 -12.629 77.7167 -12.319 77.75 -11.500 77.7833 -9.057 77.8167 -8.238 77.85 -7.318 77.8833 -6.804 77.9167 -6.494 77.95 -7.809 77.9833 -7.904 78.0167 -8.509 78.05 -8.909 78.0833 -8.699 78.1167 -8.694 78.15 -10.009 78.1833 -11.223 78.2167 -11.014 78.25 -11.414 78.2833 -10.799 78.3167 -9.066 78.35 -8.551 78.3833 -5.803 78.4167 -3.155 78.45 -3.555 78.4833 -2.026 78.5167 -1.817 78.55 -3.641 78.5833 -5.869 78.6167 -6.269 78.65 -8.094 78.6833 -9.713 78.7167 -9.403 78.75 -10.108 78.7833 -10.713 78.8167 -10.503 78.85 -11.718 78.8833 -13.337 78.9167 -13.637 78.95 -14.342 78.9833 -14.642 79.0167 -12.908 79.05 -11.989 79.0833 -11.984 79.1167 -10.860 79.15 -10.855 79.1833 -11.155 79.2167 -9.931 79.25 -8.807 79.2833 -8.497 79.3167 -9.102 79.35 -9.097 79.3833 -10.312 79.4167 -10.002 79.45 -9.083 79.4833 -9.993 79.5167 -8.769 79.55 -6.021 79.5833 -6.016 79.6167 -6.521 79.65 -7.125 79.6833 -6.511 79.7167 -7.725 79.75 -7.925 79.7833 -8.225 79.8167 -9.035 79.85 -9.030 79.8833 -9.535 79.9167 -9.430 79.95 -9.425 79.9833 -10.540 80.0167 -10.130 80.05 -10.635 80.0833 -10.835 80.1167 -12.254 80.15 -12.454 80.1833 -10.825 80.2167 -11.635 80.25 -10.921 80.2833 -10.511 80.3167 -12.135 80.35 -12.945 80.3833 -13.959 80.4167 -13.854 80.45 -13.649 80.4833 -13.545 80.5167 -13.035 80.55 -11.306 80.5833 -10.492 80.6167 -8.458 80.65 -6.425 80.6833 -4.696 80.7167 -5.101 80.75 -3.067 80.7833 -2.862 80.8167 -2.962 80.85 -2.048 80.8833 -2.148 80.9167 -2.453 80.95 -2.857 80.9833 -4.077 81.0167 -5.905 81.05 -6.820 81.0833 -8.139 81.1167 -9.053 81.15 -10.882 81.1833 -12.101 81.2167 -12.306 81.25 -11.392 81.2833 -10.173 81.3167 -9.258 81.35 -9.158 81.3833 -9.158 81.4167 -9.363 81.45 -10.177 81.4833 -11.701 81.5167 -11.906 81.55 -13.025 81.5833 -12.621 81.6167 -13.740 81.65 -12.421 81.6833 -12.016 81.7167 -12.221 81.75 -11.206 81.7833 -11.411 81.8167 -12.430 81.85 -13.549 81.8833 -13.449 81.9167 -13.249 81.95 -11.525 81.9833 -11.121 82.0167 -9.701 82.05 -8.587 82.0833 -7.268 82.1167 -7.373 82.15 -7.173 82.1833 -6.363 82.2167 -5.858 82.25 -5.963 82.2833 -6.982 82.3167 -6.782 82.35 -7.092 82.3833 -5.977 82.4167 -6.997 82.45 -7.001 82.4833 -9.545 82.5167 -10.769 82.55 -12.397 82.5833 -12.707 82.6167 -12.812 82.65 -14.036 82.6833 -14.041 82.7167 -14.755 82.75 -14.455 82.7833 -15.679 82.8167 -14.769 82.85 -15.689 82.8833 -15.794 82.9167 -17.627 82.95 -18.242 82.9833 -17.332 83.0167 -17.532 83.05 -15.718 83.0833 -13.284 83.1167 -11.765 83.15 -10.550 83.1833 -9.031 83.2167 -9.341 83.25 -8.331 83.2833 -6.812 83.3167 -6.207 83.35 -7.026 83.3833 -6.726 83.4167 -6.426 83.45 -6.636 83.4833 -6.641 83.5167 -8.374 83.55 -10.208 83.5833 -10.722 83.6167 -12.251 83.65 -13.375 83.6833 -14.294 83.7167 -14.504 83.75 -15.118 83.7833 -14.109 83.8167 -14.114 83.85 -14.018 83.8833 -14.228 83.9167 -13.014 83.95 -12.918 83.9833 -13.228 84.0167 -14.352 84.05 -13.342 84.0833 -12.128 84.1167 -13.557 84.15 -13.562 84.1833 -12.857 84.2167 -12.762 84.25 -13.071 84.2833 -12.366 84.3167 -12.066 84.35 -11.971 84.3833 -11.876 84.4167 -12.186 84.45 -11.786 84.4833 -12.705 84.5167 -11.695 84.55 -11.700 84.5833 -11.300 84.6167 -10.390 84.65 -9.381 84.6833 -9.081 84.7167 -10.000 84.75 -9.905 84.7833 -9.910 84.8167 -9.914 84.85 -9.210 84.8833 -7.995 84.9167 -6.476 84.95 -7.700 84.9833 -8.519 85.0167 -9.134 85.05 -11.882 85.0833 -13.410 85.1167 -14.025 85.15 -14.639 85.1833 -14.949 85.2167 -14.954 85.25 -14.958 85.2833 -13.844 85.3167 -13.239 85.35 -13.244 85.3833 -12.030 85.4167 -10.001 85.45 -10.310 85.4833 -10.415 85.5167 -9.810 85.55 -11.134 85.5833 -10.530 85.6167 -8.196 85.65 -10.130 85.6833 -9.930 85.7167 -10.644 85.75 -11.663 85.7833 -11.973 85.8167 -12.482 85.85 -12.587 85.8833 -11.778 85.9167 -12.187 85.95 -10.768 85.9833 -8.534 86.0167 -7.725 86.05 -6.406 86.0833 -6.206 86.1167 -5.191 86.15 -5.396 86.1833 -4.891 86.2167 -5.401 86.25 -6.215 86.2833 -7.030 86.3167 -8.149 86.35 -9.268 86.3833 -9.878 86.4167 -10.387 86.45 -9.982 86.4833 -9.982 86.5167 -9.578 86.55 -9.578 86.5833 -10.187 86.6167 -10.087 86.65 -10.392 86.6833 -11.002 86.7167 -11.611 86.75 -11.916 86.7833 -12.830 86.8167 -13.135 86.85 -12.321 86.8833 -11.406 86.9167 -10.797 86.95 -9.982 86.9833 -10.592 87.0167 -9.778 87.05 -8.658 87.0833 -6.830 87.1167 -5.406 87.15 -4.591 87.1833 -3.777 87.2167 -3.877 87.25 -3.672 87.2833 -3.567 87.3167 -2.753 87.35 -3.462 87.3833 -4.577 87.4167 -4.677 87.45 -5.182 87.4833 -7.720 87.5167 -9.139 87.55 -9.339 87.5833 -10.658 87.6167 -11.163 87.65 -10.754 87.6833 -10.649 87.7167 -11.154 87.75 -11.658 87.7833 -10.739 87.8167 -10.634 87.85 -11.139 87.8833 -9.815 87.9167 -9.810 87.95 -7.877 87.9833 -7.567 88.0167 -8.377 88.05 -7.153 88.0833 -6.538 88.1167 -5.214 88.15 -3.381 88.1833 -3.681 88.2167 -3.371 88.25 -4.281 88.2833 -4.276 88.3167 -4.576 88.35 -5.181 88.3833 -6.090 88.4167 -5.171 88.45 -4.862 88.4833 -4.652 88.5167 -3.733 88.55 -3.118 88.5833 -4.128 88.6167 -5.038 88.65 -6.252 88.6833 -6.652 88.7167 -7.257 88.75 -8.266 88.7833 -7.752 88.8167 -6.833 88.85 -6.928 88.8833 -7.633 88.9167 -7.628 88.95 -7.418 88.9833 -7.818 89.0167 -7.609 89.05 -7.909 89.0833 -8.614 89.1167 -7.794 89.15 -8.194 89.1833 -7.070 89.2167 -6.556 89.25 -7.261 89.2833 -5.527 89.3167 -5.927 89.35 -6.632 89.3833 -5.813 89.4167 -5.603 89.45 -5.394 89.4833 -3.965 89.5167 -3.755 89.55 -2.936 89.5833 -2.826 89.6167 -2.617 89.65 -3.017 89.6833 -3.721 89.7167 -3.817 89.75 -3.912 89.7833 -3.193 89.8167 -4.202 89.85 -3.688 89.8833 -4.697 89.9167 -3.978 89.95 -3.769 89.9833 -4.473 90.0167 -3.959 90.05 -5.069 90.0833 -4.554 90.1167 -4.954 90.15 -5.659 90.1833 -5.854 90.2167 -5.949 90.25 -3.606 90.2833 -3.701 90.3167 -3.897 90.35 -3.992 90.3833 -4.087 90.4167 -4.487 90.45 -4.073 90.4833 -4.473 90.5167 -5.787 90.55 -4.968 90.5833 -4.149 90.6167 -3.939 90.65 -3.220 90.6833 -3.315 90.7167 -1.886 90.75 -0.457 90.7833 -0.248 90.8167 1.486 90.85 1.391 90.8833 1.905 90.9167 1.810 90.95 2.629 90.9833 3.753 91.0167 2.743 91.05 2.953 91.0833 2.553 91.1167 0.629 91.15 0.229 91.1833 -0.681 91.2167 -1.385 91.25 -1.176 91.2833 -1.271 91.3167 -0.961 91.35 0.772 91.3833 0.372 91.4167 0.987 91.45 -0.023 91.4833 0.591 91.5167 0.496 91.55 0.196 91.5833 -1.118 91.6167 -1.113 91.65 -2.633 91.6833 -2.933 91.7167 -3.028 91.75 -3.023 91.7833 -2.713 91.8167 -1.489 91.85 -2.094 91.8833 -1.785 91.9167 -1.170 91.95 -1.775 91.9833 -0.551 92.0167 0.468 92.05 1.387 92.0833 1.697 92.1167 2.411 92.15 2.416 92.1833 1.911 92.2167 1.307 92.25 0.192 92.2833 -2.446 92.3167 -2.746 92.35 -2.641 92.3833 -4.670 92.4167 -3.956 92.45 -2.632 92.4833 -2.832 92.5167 -2.422 92.55 -0.998 92.5833 -1.198 92.6167 -0.789 92.65 -0.584 92.6833 -1.089 92.7167 -0.579 92.75 -0.169 92.7833 0.035 92.8167 -0.065 92.85 0.040 92.8833 1.159 92.9167 -0.160 92.95 0.350 92.9833 -0.869 93.0167 0.250 93.05 -1.679 93.0833 -2.693 93.1167 -1.779 93.15 -2.793 93.1833 -3.708 93.2167 -3.198 93.25 -2.893 93.2833 -2.893 93.3167 -2.284 93.35 -2.589 93.3833 -2.589 93.4167 -0.455 93.45 -0.150 93.4833 0.155 93.5167 0.155 93.55 0.255 93.5833 -0.050 93.6167 -0.865 93.65 -1.169 93.6833 -1.069 93.7167 -1.274 93.75 -0.869 93.7833 0.350 93.8167 -1.074 93.85 -1.279 93.8833 -1.079 93.9167 -0.979 93.95 -1.793 93.9833 -1.693 94.0167 -0.884 94.05 0.435 94.0833 0.635 94.1167 0.735 94.15 1.850 94.1833 1.745 94.2167 1.945 94.25 2.450 94.2833 1.735 94.3167 1.631 94.35 1.526 94.3833 0.811 94.4167 0.097 94.45 -1.127 94.4833 -2.451 94.5167 -1.337 94.55 -1.341 94.5833 -1.446 94.6167 -0.537 94.65 0.068 94.6833 -1.256 94.7167 -0.651 94.75 -1.265 94.7833 -1.575 94.8167 -0.056 94.85 0.244 94.8833 -0.980 94.9167 -1.289 94.95 -1.194 94.9833 -1.504 95.0167 -1.613 95.05 -1.718 95.0833 -2.028 95.1167 -2.847 95.15 -2.852 95.1833 -1.842 95.2167 -0.628 95.25 -1.142 95.2833 -1.352 95.3167 -1.866 95.35 -1.261 95.3833 -0.861 95.4167 -1.071 95.45 -0.366 95.4833 -1.795 95.5167 -2.309 95.55 -2.214 95.5833 -2.324 95.6167 -1.314 95.65 -1.524 95.6833 -1.124 95.7167 -0.419 95.75 0.386 95.7833 -0.433 95.8167 -0.338 95.85 -1.667 95.8833 -3.401 95.9167 -3.510 95.95 -4.634 95.9833 -4.439 96.0167 -3.734 96.05 -5.368 96.0833 -5.882 96.1167 -4.468 96.15 -4.577 96.1833 -4.787 96.2167 -3.068 96.25 -2.363 96.2833 -3.387 96.3167 -2.887 96.35 -2.082 96.3833 -1.987 96.4167 -0.268 96.45 -0.377 96.4833 -1.197 96.5167 -0.697 96.55 -2.330 96.5833 -3.659 96.6167 -2.040 96.65 -2.149 96.6833 -3.173 96.7167 -2.978 96.75 -3.493 96.7833 -3.297 96.8167 -3.102 96.85 -3.212 96.8833 -4.945 96.9167 -5.360 96.95 -5.165 96.9833 -5.984 97.0167 -5.789 97.05 -5.289 97.0833 -5.498 97.1167 -5.608 97.15 -5.108 97.1833 -5.927 97.2167 -4.818 97.25 -5.027 97.2833 -4.222 97.3167 -5.042 97.35 -4.846 97.3833 -4.142 97.4167 -4.351 97.45 -3.546 97.4833 -2.842 97.5167 -1.832 97.55 -1.942 97.5833 -1.542 97.6167 -1.142 97.65 -1.656 97.6833 -1.256 97.7167 -0.551 97.75 -1.675 97.7833 -1.580 97.8167 -1.790 97.85 -2.609 97.8833 -2.818 97.9167 -2.518 97.95 -3.338 97.9833 -3.547 98.0167 -4.466 98.05 -5.895 98.0833 -7.424 98.1167 -7.024 98.15 -6.419 98.1833 -6.119 98.2167 -6.329 98.25 -6.334 98.2833 -5.119 98.3167 -5.124 98.35 -4.824 98.3833 -3.000 98.4167 -3.310 98.45 -3.924 98.4833 -2.810 98.5167 -2.510 98.55 -2.210 98.5833 -2.010 98.6167 -2.624 98.65 -2.729 98.6833 -2.834 98.7167 -3.753 98.75 -3.553 98.7833 -3.658 98.8167 -4.372 98.85 -3.258 98.8833 -3.058 98.9167 -2.858 98.95 -2.658 98.9833 -2.253 99.0167 -2.053 99.05 -2.158 99.0833 -2.362 99.1167 -3.482 99.15 -4.196 99.1833 -5.010 99.2167 -3.691 99.25 -4.201 99.2833 -4.406 99.3167 -4.001 99.35 -4.815 99.3833 -4.715 99.4167 -5.225 99.45 -6.444 99.4833 -6.039 99.5167 -6.649 99.55 -7.768 99.5833 -6.854 99.6167 -6.549 99.65 -7.058 99.6833 -6.754 99.7167 -5.839 99.75 -5.839 99.7833 -4.925 99.8167 -4.415 99.85 -4.720 99.8833 -3.806 99.9167 -3.501 99.95 -2.991 99.9833 -3.906 100.017 -2.786 100.05 -3.191 100.083 -3.191 100.117 -2.072 100.15 -1.258 100.183 -1.053 100.217 0.066 100.25 0.271 100.283 -1.353 100.317 -2.062 100.35 -1.653 100.383 -2.667 100.417 -2.462 100.45 -3.272 100.483 -4.286 100.517 -4.486 100.55 -4.282 100.583 -4.786 100.617 -6.206 100.65 -5.796 100.683 -6.910 100.717 -7.925 100.75 -8.125 100.783 -8.325 100.817 -6.796 100.85 -7.301 100.883 -7.806 100.917 -6.177 100.95 -5.462 100.983 -6.067 101.017 -5.353 101.05 -4.334 101.083 -3.719 101.117 -2.700 101.15 -3.000 101.183 -2.386 101.217 -2.586 101.25 -2.276 101.283 -1.662 101.317 -1.657 101.35 -1.552 101.383 -1.852 101.417 -2.457 101.45 -2.147 101.483 -1.228 101.517 -0.614 101.55 -0.914 101.583 -1.214 101.617 -0.599 101.65 0.015 101.683 -1.604 101.717 -1.904 101.75 -1.594 101.783 -3.114 101.817 -4.023 101.85 -4.728 101.883 -6.247 101.917 -7.462 101.95 -9.081 101.983 -8.771 102.017 -8.866 102.05 -9.776 102.083 -9.466 102.117 -8.038 102.15 -7.423 102.183 -8.128 102.217 -7.209 102.25 -7.304 102.283 -6.690 102.317 -6.785 102.35 -5.966 102.383 -5.961 102.417 -5.142 102.45 -3.003 102.483 -3.098 102.517 -2.484 102.55 -2.274 102.583 -2.065 102.617 -1.145 102.65 -1.545 102.683 -1.336 102.717 -1.636 102.75 -2.036 102.783 -2.641 102.817 -2.431 102.85 -3.136 102.883 -2.826 102.917 -3.531 102.95 -4.136 102.983 -3.926 103.017 -4.226 103.05 -5.541 103.083 -5.636 103.117 -7.765 103.15 -8.165 103.183 -8.160 103.217 -8.560 103.25 -7.945 103.283 -7.026 103.317 -7.121 103.35 -6.507 103.383 -5.993 103.417 -6.902 103.45 -5.983 103.483 -7.297 103.517 -7.597 103.55 -7.288 103.583 -7.078 103.617 -8.293 103.65 -8.288 103.683 -7.978 103.717 -8.888 103.75 -8.578 103.783 -8.269 103.817 -8.569 103.85 -7.345 103.883 -5.816 103.917 -3.677 103.95 -2.149 103.983 -2.144 104.017 -0.920 104.05 -1.729 104.083 -1.420 104.117 -1.110 104.15 -2.225 104.183 -2.220 104.217 -3.129 104.25 -3.939 104.283 -3.629 104.317 -4.439 104.35 -4.334 104.383 -4.634 104.417 -6.358 104.45 -6.863 104.483 -6.758 104.517 -8.177 104.55 -8.987 104.583 -8.882 104.617 -9.082 104.65 -8.673 104.683 -10.092 104.717 -9.887 104.75 -8.868 104.783 -8.458 104.817 -7.949 104.85 -6.320 104.883 -5.505 104.917 -5.401 104.95 -4.281 104.983 -3.162 105.017 -2.348 105.05 -1.838 105.083 -0.719 105.117 0.400 105.15 0.605 105.183 0.505 105.217 0.405 105.25 -0.305 105.283 -0.305 105.317 -1.319 105.35 -1.419 105.383 -2.943 105.417 -2.333 105.45 -3.348 105.483 -4.262 105.517 -5.177 105.55 -6.091 105.583 -7.615 105.617 -8.529 105.65 -9.139 105.683 -8.529 105.717 -8.529 105.75 -8.834 105.783 -8.429 105.817 -8.429 105.85 -9.244 105.883 -9.853 105.917 -10.058 105.95 -9.144 105.983 -9.653 106.017 -9.249 106.05 -8.234 106.083 -7.829 106.117 -6.510 106.15 -6.715 106.183 -5.396 106.217 -4.381 106.25 -4.891 106.283 -4.181 106.317 -3.981 106.35 -1.748 106.383 -2.767 106.417 -2.057 106.45 -1.248 106.483 -1.453 106.517 -1.253 106.55 -1.053 106.583 -1.157 106.617 -2.277 106.65 -1.162 106.683 -3.401 106.717 -4.420 106.75 -5.134 106.783 -7.068 106.817 -8.392 106.85 -7.482 106.883 -8.806 106.917 -9.825 106.95 -9.321 106.983 -9.935 107.017 -11.254 107.05 -10.045 107.083 -10.759 107.117 -9.240 107.15 -8.125 107.183 -7.521 107.217 -6.711 107.25 -6.411 107.283 -5.806 107.317 -4.897 107.35 -5.306 107.383 -5.311 107.417 -4.706 107.45 -5.016 107.483 -4.106 107.517 -3.197 107.55 -3.201 107.583 -4.121 107.617 -2.601 107.65 -2.606 107.683 -2.306 107.717 -2.311 107.75 -1.706 107.783 -1.711 107.817 -1.411 107.85 -1.316 107.883 -1.625 107.917 -2.545 107.95 -3.769 107.983 -4.688 108.017 -4.897 108.05 -6.121 108.083 -8.565 108.117 -8.165 108.15 -9.084 108.183 -7.869 108.217 -7.165 108.25 -8.084 108.283 -7.784 108.317 -7.384 108.35 -6.779 108.383 -6.074 108.417 -6.384 108.45 -5.474 108.483 -5.989 108.517 -5.079 108.55 -4.374 108.583 -4.074 108.617 -4.994 108.65 -4.289 108.683 -4.294 108.717 -2.674 108.75 -2.984 108.783 -2.379 108.817 -2.894 108.85 -1.984 108.883 -0.669 108.917 -1.589 108.95 -1.289 108.983 -0.279 109.017 -1.503 109.05 -0.898 109.083 -0.803 109.117 -0.808 109.15 -0.203 109.183 0.402 109.217 -0.418 109.25 -0.727 109.283 -1.646 109.317 -1.651 109.35 -2.266 109.383 -3.694 109.417 -4.309 109.45 -4.618 109.483 -5.842 109.517 -5.542 109.55 -6.462 109.583 -6.162 109.617 -5.962 109.65 -6.576 109.683 -5.666 109.717 -5.366 109.75 -4.762 109.783 -4.562 109.817 -4.566 109.85 -3.047 109.883 -1.628 109.917 -2.547 109.95 -2.652 109.983 -2.047 110.017 -2.152 110.05 -1.647 110.083 -0.433 110.117 -0.538 110.15 -1.252 110.183 0.167 110.217 -0.547 110.25 -0.957 110.283 -0.452 110.317 0.662 110.35 0.558 110.383 2.586 110.417 0.958 110.45 0.448 110.483 1.258 110.517 0.748 110.55 -0.576 110.583 -0.476 110.617 -1.495 110.65 -2.310 110.683 -3.124 110.717 -3.634 110.75 -5.058 110.783 -3.434 110.817 -4.553 110.85 -4.758 110.883 -3.743 110.917 -2.729 110.95 -3.034 110.983 -2.934 111.017 -3.848 111.05 -2.834 111.083 -3.443 111.117 -3.138 111.15 -2.429 111.183 -1.819 111.217 -1.514 111.25 -0.295 111.283 -0.905 111.317 -1.819 111.35 -2.224 111.383 -2.224 111.417 -2.224 111.45 -1.714 111.483 -1.105 111.517 -0.900 111.55 -1.000 111.583 -0.086 111.617 0.119 111.65 0.019 111.683 1.138 111.717 1.343 111.75 2.158 111.783 2.058 111.817 2.262 111.85 1.148 111.883 2.267 111.917 2.067 111.95 1.053 111.983 0.853 112.017 -0.466 112.05 -0.666 112.083 -1.781 112.117 -2.490 112.15 -3.910 112.183 -4.719 112.217 -6.138 112.25 -5.424 112.283 -5.624 112.317 -6.229 112.35 -6.429 112.383 -6.934 112.417 -5.610 112.45 -5.300 112.483 -3.366 112.517 -2.752 112.55 -1.428 112.583 -2.642 112.617 -2.538 112.65 -1.923 112.683 -1.918 112.717 -1.609 112.75 -0.590 112.783 -0.890 112.817 0.030 112.85 -0.880 112.883 -0.875 112.917 -0.566 112.95 -0.256 112.983 0.663 113.017 1.178 113.05 1.487 113.083 2.406 113.117 1.802 113.15 1.706 113.183 1.102 113.217 0.497 113.25 -0.818 113.283 -2.032 113.317 -3.246 113.35 -3.951 113.383 -5.166 113.417 -5.870 113.45 -6.575 113.483 -5.961 113.517 -5.446 113.55 -5.746 113.583 -5.842 113.617 -5.022 113.65 -4.713 113.683 -4.198 113.717 -4.903 113.75 -4.389 113.783 -3.774 113.817 -4.174 113.85 -3.965 113.883 -3.450 113.917 -3.445 113.95 -2.626 113.983 -1.502 114.017 -1.293 114.05 -0.778 114.083 0.651 114.117 1.470 114.15 1.070 114.183 2.803 114.217 1.894 114.25 1.799 114.283 1.399 114.317 0.389 114.35 -0.011 114.383 -0.106 114.417 -1.421 114.45 -1.516 114.483 -1.916 114.517 -1.706 114.55 -2.411 114.583 -1.592 114.617 -1.382 114.65 -0.258 114.683 -0.963 114.717 -1.058 114.75 -1.763 114.783 -1.149 114.817 -2.463 114.85 -2.863 114.883 -3.568 114.917 -4.273 114.95 -4.063 114.983 -3.244 115.017 -3.339 115.05 -2.825 115.083 -1.091 115.117 1.047 115.15 0.647 115.183 0.247 115.217 -0.457 115.25 0.362 115.283 0.976 115.317 0.576 115.35 0.786 115.383 0.995 115.417 1.610 115.45 1.210 115.483 1.115 115.517 0.510 115.55 1.024 115.583 1.943 115.617 0.934 115.65 1.243 115.683 0.539 115.717 0.239 115.75 -0.466 115.783 -1.071 115.817 -1.981 115.85 -3.600 115.883 -2.985 115.917 -3.895 115.95 -3.990 115.983 -2.766 116.017 -3.066 116.05 -3.671 116.083 -2.447 116.117 -1.223 116.15 -1.828 116.183 -2.128 116.217 -0.904 116.25 -0.899 116.283 -0.894 116.317 -0.180 116.35 -0.785 116.383 -0.780 116.417 -0.980 116.45 -1.585 116.483 -2.494 116.517 -1.475 116.55 -1.065 116.583 -1.365 116.617 -0.346 116.65 -0.546 116.683 -2.065 116.717 -0.741 116.75 -0.941 116.783 -1.751 116.817 0.487 116.85 -0.017 116.883 -0.217 116.917 -0.622 116.95 -1.432 116.983 -1.022 117.017 -1.732 117.05 -1.932 117.083 -2.032 117.117 -2.537 117.15 -2.941 117.183 -2.837 117.217 -1.717 117.25 -2.122 117.283 -2.527 117.317 -1.103 117.35 -0.898 117.383 -0.693 117.417 -1.098 117.45 -0.793 117.483 -0.589 117.517 -0.993 117.55 -0.384 117.583 0.126 117.617 -0.179 117.65 -0.789 117.683 0.026 117.717 -0.279 117.75 -1.193 117.783 -0.279 117.817 -0.279 117.85 -0.584 117.883 0.940 117.917 0.940 117.95 1.040 117.983 1.345 118.017 0.835 118.05 1.750 118.083 0.631 118.117 0.326 118.15 1.035 118.183 0.831 118.217 0.626 118.25 0.421 118.283 0.521 118.317 -0.293 118.35 -0.193 118.383 -0.093 118.417 0.007 118.45 -0.708 118.483 -0.303 118.517 -0.408 118.55 -0.003 118.583 1.111 118.617 -0.008 118.65 -1.332 118.683 -0.827 118.717 -0.322 118.75 -0.427 118.783 0.078 118.817 0.887 118.85 0.173 118.883 0.678 118.917 -0.341 118.95 -0.041 118.983 -0.451 119.017 -0.346 119.05 0.354 119.083 0.249 119.117 0.244 119.15 0.239 119.183 -0.170 119.217 -0.785 119.25 -0.485 119.283 -0.794 119.317 0.115 119.35 0.011 119.383 -1.213 119.417 -0.813 119.45 0.096 119.483 -0.213 119.517 -0.828 119.55 -1.747 119.583 -2.261 119.617 -2.876 119.65 -2.881 119.683 -3.395 119.717 -3.705 119.75 -4.524 119.783 -5.443 119.817 -4.738 119.85 -3.524 119.883 -3.124 119.917 -2.114 119.95 0.115 119.983 -0.195 120.017 0.510 120.05 0.605 120.083 -1.129 120.117 -0.729 120.15 -1.243 120.183 -2.977 120.217 -3.186 120.25 -4.005 120.283 -4.825 120.317 -4.425 120.35 -4.634 120.383 -4.844 120.417 -4.444 120.45 -4.249 120.483 -4.763 120.517 -4.058 120.55 -3.049 120.583 -3.158 120.617 -2.758 120.65 -2.358 120.683 -1.349 120.717 -2.677 120.75 -2.887 120.783 -1.877 120.817 -3.206 120.85 -4.025 120.883 -3.221 120.917 -3.430 120.95 -2.116 120.983 -3.140 121.017 -3.959 121.05 -4.373 121.083 -4.583 121.117 -4.997 121.15 -5.817 121.183 -6.331 121.217 -5.221 121.25 -5.736 121.283 -6.150 121.317 -6.360 121.35 -5.655 121.383 -4.850 121.417 -5.060 121.45 -4.965 121.483 -4.769 121.517 -4.369 121.55 -4.884 121.583 -4.384 121.617 -3.984 121.65 -3.584 121.683 -2.169 121.717 -2.989 121.75 -2.894 121.783 -3.713 121.817 -3.008 121.85 -3.422 121.883 -3.632 121.917 -3.232 121.95 -3.442 121.983 -2.127 122.017 -2.337 122.05 -2.851 122.083 -2.146 122.117 -1.846 122.15 -2.970 122.183 -3.485 122.217 -3.390 122.25 -4.514 122.283 -5.738 122.317 -6.862 122.35 -7.171 122.383 -5.857 122.417 -6.371 122.45 -5.157 122.483 -4.552 122.517 -4.457 122.55 -4.157 122.583 -4.162 122.617 -4.776 122.65 -5.900 122.683 -6.210 122.717 -5.910 122.75 -6.829 122.783 -6.224 122.817 -5.110 122.85 -4.200 122.883 -4.814 122.917 -4.819 122.95 -5.229 122.983 -5.538 123.017 -5.034 123.05 -4.734 123.083 -4.534 123.117 -4.029 123.15 -4.338 123.183 -4.443 123.217 -3.938 123.25 -4.348 123.283 -4.453 123.317 -3.643 123.35 -4.053 123.383 -4.258 123.417 -3.753 123.45 -4.162 123.483 -5.282 123.517 -4.472 123.55 -4.677 123.583 -4.882 123.617 -4.072 123.65 -4.886 123.683 -3.872 123.717 -3.162 123.75 -4.282 123.783 -4.182 123.817 -4.082 123.85 -6.115 123.883 -5.201 123.917 -5.101 123.95 -6.320 123.983 -5.915 124.017 -6.525 124.05 -7.034 124.083 -7.949 124.117 -8.254 124.15 -7.644 124.183 -8.863 124.217 -8.863 124.25 -7.949 124.283 -7.339 124.317 -7.644 124.35 -6.220 124.383 -5.915 124.417 -5.610 124.45 -5.406 124.483 -4.591 124.517 -5.506 124.55 -4.996 124.583 -4.182 124.617 -4.891 124.65 -4.586 124.683 -3.467 124.717 -4.177 124.75 -4.377 124.783 -4.172 124.817 -4.577 124.85 -3.458 124.883 -4.267 124.917 -4.672 124.95 -5.991 124.983 -5.582 125.017 -6.086 125.05 -6.186 125.083 -6.996 125.117 -6.891 125.15 -6.382 125.183 -5.362 125.217 -5.867 125.25 -4.238 125.283 -3.829 125.317 -3.114 125.35 -3.010 125.383 -2.395 125.417 -2.595 125.45 -2.186 125.483 -2.386 125.517 -3.600 125.55 -3.190 125.583 -2.476 125.617 -3.081 125.65 -2.976 125.683 -2.666 125.717 -3.271 125.75 -3.166 125.783 -4.381 125.817 -4.986 125.85 -4.271 125.883 -3.352 125.917 -3.957 125.95 -3.952 125.983 -4.252 126.017 -4.552 126.05 -3.938 126.083 -2.104 126.117 -3.014 126.15 -2.399 126.183 -0.870 126.217 -2.390 126.25 -1.775 126.283 -1.466 126.317 -2.170 126.35 -2.166 126.383 -2.466 126.417 -2.461 126.45 -2.456 126.483 -2.246 126.517 -3.461 126.55 -4.675 126.583 -4.466 126.617 -4.461 126.65 -3.542 126.683 -3.027 126.717 -3.022 126.75 -1.898 126.783 -1.284 126.817 -0.769 126.85 -1.374 126.883 -2.284 126.917 -2.379 126.95 -2.984 126.983 -3.384 127.017 -3.379 127.05 -3.779 127.083 -4.079 127.117 -4.479 127.15 -4.474 127.183 -3.045 127.217 -3.041 127.25 -3.441 127.283 -3.436 127.317 -3.431 127.35 -2.917 127.383 -1.997 127.417 -2.397 127.45 -1.783 127.483 -1.269 127.517 -1.264 127.55 -1.359 127.583 -1.354 127.617 -2.264 127.65 -1.749 127.683 -1.745 127.717 -2.349 127.75 -2.749 127.783 -3.049 127.817 -3.349 127.85 -4.054 127.883 -3.745 127.917 -3.740 127.95 -3.430 127.983 -4.340 128.017 -3.725 128.05 -4.430 128.083 -4.121 128.117 -3.506 128.15 -3.501 128.183 -3.497 128.217 -2.577 128.25 -4.097 128.283 -3.787 128.317 -3.682 128.35 -3.068 128.383 -3.063 128.417 -1.534 128.45 -2.444 128.483 -2.949 128.517 -2.639 128.55 -2.329 128.583 -2.529 128.617 -2.829 128.65 -2.725 128.683 -4.244 128.717 -3.529 128.75 -3.120 128.783 -3.420 128.817 -3.925 128.85 -4.734 128.883 -3.715 128.917 -3.915 128.95 -4.115 128.983 -3.401 129.017 -4.515 129.05 -4.715 129.083 -4.305 129.117 -4.810 129.15 -6.534 129.183 -5.110 129.217 -4.396 129.25 -3.986 129.283 -4.086 129.317 -4.186 129.35 -4.996 129.383 -6.315 129.417 -6.820 129.45 -6.920 129.483 -7.325 129.517 -6.815 129.55 -5.391 129.583 -5.186 129.617 -4.372 129.65 -2.948 129.683 -3.353 129.717 -3.962 129.75 -4.672 129.783 -6.601 129.817 -8.125 129.85 -7.615 129.883 -7.615 129.917 -7.615 129.95 -6.191 129.983 -6.801 130.017 -5.581 130.05 -5.581 130.083 -6.496 130.117 -4.362 130.15 -4.362 130.183 -4.362 130.217 -4.362 130.25 -3.753 130.283 -3.348 130.317 -3.348 130.35 -2.943 130.383 -3.248 130.417 -3.453 130.45 -3.757 130.483 -3.962 130.517 -4.777 130.55 -6.301 130.583 -6.201 130.617 -5.796 130.65 -5.696 130.683 -6.205 130.717 -3.972 130.75 -3.567 130.783 -4.586 130.817 -5.401 130.85 -5.910 130.883 -7.234 130.917 -8.353 130.95 -7.034 130.983 -7.444 131.017 -7.244 131.05 -6.534 131.083 -7.249 131.117 -6.844 131.15 -6.644 131.183 -6.749 131.217 -6.853 131.25 -5.739 131.283 -5.539 131.317 -5.949 131.35 -5.444 131.383 -5.549 131.417 -5.653 131.45 -6.368 131.483 -7.082 131.517 -6.882 131.55 -7.192 131.583 -6.992 131.617 -6.487 131.65 -5.068 131.683 -5.377 131.717 -6.397 131.75 -5.487 131.783 -6.201 131.817 -5.597 131.85 -5.092 131.883 -5.097 131.917 -4.897 131.95 -4.901 131.983 -4.906 132.017 -4.401 132.05 -4.101 132.083 -4.106 132.117 -2.587 132.15 -2.692 132.183 -3.001 132.217 -3.311 132.25 -4.535 132.283 -5.454 132.317 -6.373 132.35 -5.159 132.383 -4.959 132.417 -5.269 132.45 -5.578 132.483 -6.497 132.517 -6.807 132.55 -5.593 132.583 -6.512 132.617 -7.431 132.65 -8.045 132.683 -6.221 132.717 -4.907 132.75 -4.912 132.783 -4.917 132.817 -6.445 132.85 -6.145 132.883 -5.845 132.917 -5.241 132.95 -5.245 132.983 -4.336 133.017 -4.341 133.05 -4.550 133.083 -4.555 133.117 -3.950 133.15 -4.565 133.183 -3.960 133.217 -4.574 133.25 -5.494 133.283 -3.974 133.317 -5.198 133.35 -4.189 133.383 -4.803 133.417 -4.808 133.45 -4.508 133.483 -4.208 133.517 -3.908 133.55 -2.998 133.583 -3.003 133.617 -3.922 133.65 -3.013 133.683 -3.322 133.717 -3.632 133.75 -4.551 133.783 -4.556 133.817 -5.475 133.85 -5.480 133.883 -4.875 133.917 -5.490 133.95 -6.104 133.983 -7.123 134.017 -7.128 134.05 -6.828 134.083 -6.528 134.117 -7.242 134.15 -5.723 134.183 -5.423 134.217 -5.528 134.25 -5.533 134.283 -4.014 134.317 -4.728 134.35 -5.342 134.383 -4.533 134.417 -4.333 134.45 -4.338 134.483 -3.833 134.517 -4.242 134.55 -3.333 134.583 -3.438 134.617 -5.066 134.65 -4.866 134.683 -4.666 134.717 -6.295 134.75 -7.010 134.783 -5.590 134.817 -5.390 134.85 -3.971 134.883 -3.871 134.917 -3.671 134.95 -3.776 134.983 -3.981 135.017 -4.390 135.05 -4.900 135.083 -5.714 135.117 -5.514 135.15 -6.024 135.183 -6.838 135.217 -6.434 135.25 -6.029 135.283 -5.929 135.317 -4.610 135.35 -4.510 135.383 -4.714 135.417 -4.310 135.45 -4.310 135.483 -4.819 135.517 -5.329 135.55 -4.414 135.583 -4.314 135.617 -4.314 135.65 -3.705 135.683 -1.571 135.717 -1.266 135.75 -1.876 135.783 -1.571 135.817 -0.962 135.85 -0.962 135.883 -0.657 135.917 -0.047 135.95 -1.366 135.983 -1.671 136.017 -2.686 136.05 -2.686 136.083 -2.786 136.117 -3.090 136.15 -1.666 136.183 -1.157 136.217 -1.866 136.25 -1.662 136.283 -2.371 136.317 -2.776 136.35 -3.181 136.383 -3.076 136.417 -3.176 136.45 -2.362 136.483 -2.562 136.517 -2.966 136.55 -3.471 136.583 -4.486 136.617 -4.990 136.65 -5.800 136.683 -5.900 136.717 -5.795 136.75 -5.081 136.783 -4.671 136.817 -3.652 136.85 -2.938 136.883 -1.918 136.917 -2.423 136.95 -2.014 136.983 -1.704 137.017 -0.990 137.05 0.030 137.083 0.644 137.117 0.444 137.15 -0.466 137.183 -0.056 137.217 1.473 137.25 0.663 137.283 -0.856 137.317 -1.461 137.35 -1.356 137.383 -1.961 137.417 -3.175 137.45 -4.390 137.483 -3.775 137.517 -4.280 137.55 -3.970 137.583 -3.051 137.617 -3.351 137.65 -3.042 137.683 -1.818 137.717 -1.813 137.75 -1.808 137.783 -1.598 137.817 -1.289 137.85 -0.674 137.883 -0.974 137.917 -0.969 137.95 -1.065 137.983 0.159 138.017 0.164 138.05 -0.136 138.083 0.988 138.117 0.688 138.15 0.083 138.183 0.598 138.217 -0.312 138.25 -1.221 138.283 -1.317 138.317 -1.921 138.35 -2.017 138.383 -2.012 138.417 -2.107 138.45 -3.017 138.483 -3.012 138.517 -3.412 138.55 -4.017 138.583 -4.112 138.617 -3.193 138.65 -3.897 138.683 -2.369 138.717 -3.073 138.75 -2.459 138.783 -2.249 138.817 -2.549 138.85 -2.949 138.883 -1.521 138.917 -1.821 138.95 -3.135 138.983 -2.825 139.017 -4.140 139.05 -4.135 139.083 -4.230 139.117 -4.530 139.15 -5.235 139.183 -4.316 139.217 -4.716 139.25 -4.101 139.283 -3.282 139.317 -2.668 139.35 -2.763 139.383 -1.844 139.417 -3.463 139.45 -3.153 139.483 -2.944 139.517 -3.244 139.55 -3.949 139.583 -3.029 139.617 -4.039 139.65 -5.253 139.683 -4.029 139.717 -4.734 139.75 -6.253 139.783 -5.739 139.817 -5.734 139.85 -5.120 139.883 -4.910 139.917 -5.515 139.95 -5.815 139.983 -3.677 140.017 -4.077 140.05 -4.377 140.083 -4.372 140.117 -3.148 140.15 -3.143 140.183 -2.529 140.217 -1.609 140.25 -1.705 140.283 -2.005 140.317 -2.305 140.35 -2.300 140.383 -1.890 140.417 -1.885 140.45 -1.576 140.483 -2.485 140.517 -2.176 140.55 -1.866 140.583 -2.066 140.617 -3.585 140.65 -3.276 140.683 -5.000 140.717 -4.995 140.75 -4.585 140.783 -4.581 140.817 -3.866 140.85 -4.166 140.883 -5.281 140.917 -4.057 140.95 -4.257 140.983 -3.237 141.017 -3.437 141.05 -3.028 141.083 -3.228 141.117 -3.733 141.15 -2.713 141.183 -2.609 141.217 -2.504 141.25 -3.009 141.283 -2.904 141.317 -2.089 141.35 -2.899 141.383 -3.709 141.417 -3.809 141.45 -3.399 141.483 -3.804 141.517 -4.309 141.55 -2.885 141.583 -3.594 141.617 -2.475 141.65 -1.965 141.683 -0.846 141.717 -1.861 141.75 -1.351 141.783 -1.756 141.817 -2.465 141.85 -2.261 141.883 -2.361 141.917 -2.056 141.95 -3.680 141.983 -2.461 142.017 -3.475 142.05 -3.475 142.083 -2.561 142.117 -2.356 142.15 -2.051 142.183 -1.746 142.217 -2.661 142.25 -2.051 142.283 -2.965 142.317 -3.270 142.35 -2.865 142.383 -3.475 142.417 -3.780 142.45 -3.070 142.483 -2.765 142.517 -2.970 142.55 -3.885 142.583 -4.089 142.617 -5.209 142.65 -4.499 142.683 -4.399 142.717 -4.704 142.75 -4.299 142.783 -4.099 142.817 -3.389 142.85 -3.289 142.883 -2.275 142.917 -2.785 142.95 -1.670 142.983 -2.180 gerris-snapshot-131206/doc/examples/tsunami/h.gfv0000644000175100017510000000110512250371171016655 00000000000000# GfsView 2D View { tx = 0.00158982 ty = 0.0784271 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.6736 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 font_size = 1 raster_font = 1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P > 0.01 ? H : NODATA { amin = 0 min = -2 amax = 0 max = 2 cmap = Jet } Label { r = 0 g = 0 b = 0 shading = Constant maxlevel = 6 font_size = 2.3 raster_font = 1 } { x = 72.678 y = 23.2591 z = 0 label = "t = %5.0f s" symbol = 0 } gerris-snapshot-131206/doc/examples/tides.sh0000755000175100017510000000003012250371664015714 00000000000000python -u test.py tides gerris-snapshot-131206/doc/examples/ship.sh0000755000175100017510000000002712250371664015555 00000000000000python -u test.py ship gerris-snapshot-131206/doc/examples/gfs.sty0000644000175100017510000000032212250371171015562 00000000000000\newcommand{\gfsweb}{http://gfs.sf.net} \newcommand{\htmladdnormallinkfoot}[2]{\footahref{#2}{#1}} \newcommand{\htmladdnormallink}[2]{\ahref{#2}{#1}} \newcommand{\video}[3]{\includegraphics[scale=0.5]{#1.eps}} gerris-snapshot-131206/doc/examples/tides/0000755000175100017510000000000012250371675015446 500000000000000gerris-snapshot-131206/doc/examples/tides/coefficients0000644000175100017510000071360112250371171017751 00000000000000177.924 -39.191 0.631087 171.060089 177.91 -39.223 0.635039 170.582474 177.863 -39.264 0.649093 169.029022 177.857 -39.239 0.656701 168.606400 177.847 -39.236 0.657167 168.458893 177.851 -39.215 0.660134 168.330734 177.839 -39.182 0.662873 168.126251 177.819 -39.1662 0.664021 167.970688 177.839 -39.145 0.666840 167.943222 177.716 -39.055 0.666941 167.428055 177.661 -39.0565 0.666507 167.245270 177.607 -39.0544 0.666602 167.058472 177.559 -39.0555 0.666578 166.865646 177.513 -39.056 0.666692 166.692261 177.453 -39.0637 0.666332 166.470123 177.391 -39.069 0.666249 166.258682 177.336 -39.0818 0.666094 166.061386 177.274 -39.097 0.666111 165.842758 177.223 -39.1163 0.666015 165.655167 177.17 -39.1345 0.665873 165.464554 177.118 -39.153 0.665614 165.280838 177.077 -39.1745 0.665160 165.121796 177.04 -39.201 0.664504 164.986267 177.034 -39.237 0.663245 164.891800 177.017 -39.263 0.662591 164.803055 176.98 -39.2986 0.662254 164.643585 176.938 -39.338 0.662377 164.468811 176.917 -39.3486 0.662621 164.399292 176.891 -39.384 0.662657 164.247482 176.874 -39.434 0.662600 164.040237 176.875 -39.466 0.662388 163.916183 176.889 -39.481 0.661677 163.851562 176.922 -39.478 0.660297 163.872009 176.922 -39.556 0.656803 163.467453 176.961 -39.622 0.653155 163.224960 177.025 -39.651 0.648965 163.112518 177.076 -39.637 0.643537 163.175140 177.096 -39.646 0.638060 163.191528 177.074 -39.6649 0.634243 163.049561 177.052 -39.6888 0.632055 162.985306 177.011 -39.7312 0.629521 162.825211 176.995 -39.7876 0.627297 162.682053 177.003 -39.841 0.624912 162.555237 176.979 -39.863 0.623987 162.442871 176.965 -39.883 0.623547 162.376068 176.959 -39.91 0.623114 162.294907 176.931 -39.938 0.622908 162.161346 176.907 -39.9855 0.622665 161.970398 176.887 -40.0275 0.622587 161.761780 176.878 -40.062 0.622346 161.571167 176.892 -40.079 0.621935 161.489594 176.869 -40.1 0.621950 161.263535 176.87 -40.132 0.620752 161.050461 176.845 -40.144 0.620464 160.884048 176.83 -40.176 0.619402 160.705017 176.787 -40.22 0.618298 160.435318 176.74 -40.229 0.618170 160.314011 176.708 -40.247 0.618050 160.235168 176.682 -40.2806 0.618069 160.140213 176.665 -40.313 0.618321 160.051086 176.67 -40.326 0.618402 160.022278 176.638 -40.384 0.619886 159.797592 176.633 -40.415 0.620930 159.627441 176.623 -40.431 0.621815 159.503372 176.631 -40.454 0.622385 159.324356 176.622 -40.49 0.623745 158.837585 176.556 -40.498 0.625845 158.333908 176.492 -40.531 0.625932 157.904007 176.472 -40.557 0.625585 157.715073 176.469 -40.575 0.625330 157.598480 176.42 -40.6109 0.625296 157.210129 176.39 -40.64 0.625080 156.971954 176.367 -40.677 0.624927 156.692703 176.311 -40.717 0.625292 156.289459 176.288 -40.75 0.625086 156.066727 176.285 -40.768 0.624970 155.959686 176.269 -40.782 0.625231 155.818756 176.256 -40.8186 0.624940 155.535110 176.242 -40.859 0.624614 155.169250 176.222 -40.88 0.624611 154.926300 176.219 -40.899 0.624078 154.754257 176.227 -40.905 0.623625 154.732620 176.19 -40.9306 0.623166 154.357269 176.145 -40.96 0.622889 154.052826 176.125 -41.002 0.622192 153.763168 176.105 -41.022 0.622004 153.575836 176.098 -41.057 0.621252 153.337204 176.068 -41.103 0.620721 152.929672 176.062 -41.13 0.620276 152.682266 176.031 -41.1542 0.620282 152.299286 175.995 -41.178 0.620126 151.968765 175.985 -41.2056 0.619103 151.737793 175.962 -41.245 0.617588 151.355042 175.912 -41.256 0.617618 150.980621 175.88 -41.275 0.617238 150.758041 175.862 -41.317 0.615556 150.444809 175.808 -41.36 0.613665 149.923676 175.741 -41.391 0.612254 149.510025 175.675 -41.415 0.611056 149.216019 175.636 -41.4454 0.611211 149.061966 175.598 -41.478 0.611590 148.797821 175.513 -41.508 0.612288 148.242798 175.469 -41.5417 0.612361 147.823532 175.43 -41.573 0.609695 147.283463 175.365 -41.572 0.608354 146.858749 175.358 -41.586 0.607767 146.819275 175.293 -41.614 0.603611 146.302292 175.236 -41.6086 0.595152 145.607147 175.218 -41.5431 0.578007 144.252487 175.193 -41.5264 0.571785 144.307388 175.208 -41.5004 0.565256 144.018677 175.207 -41.4754 0.561694 144.020844 175.221 -41.4552 0.559586 143.953964 175.218 -41.4488 0.558973 143.965317 175.216 -41.4344 0.557814 143.942200 175.201 -41.4224 0.556469 143.961044 175.116 -41.3892 0.548922 144.212372 175.047 -41.3745 0.544152 144.401733 175.014 -41.3912 0.543433 144.540512 174.991 -41.3932 0.542138 144.546844 174.918 -41.4399 0.534035 144.927902 174.902 -41.4211 0.517274 143.745743 174.867 -41.4089 0.492092 142.893280 174.875 -41.3882 0.475397 142.043411 174.849 -41.3585 0.460849 142.136688 174.858 -41.3374 0.462661 142.862854 174.874 -41.327 0.467102 143.295700 174.89 -41.3061 0.470843 143.387589 174.904 -41.2838 0.472304 143.372726 174.912 -41.2592 0.472701 143.334457 174.901 -41.255 0.472586 143.310501 174.9 -41.2378 0.472518 143.301315 174.879 -41.2297 0.472317 143.271057 174.842 -41.2297 0.472035 143.231827 174.787 -41.2652 0.472178 143.117477 174.789 -41.2826 0.472434 143.098328 174.804 -41.2879 0.472514 143.099548 174.804 -41.3044 0.473842 143.129379 174.796 -41.3139 0.474550 143.148209 174.801 -41.318 0.474696 143.126724 174.81 -41.3137 0.474456 143.104980 174.825 -41.2863 0.472022 143.088104 174.833 -41.2917 0.471124 143.053238 174.827 -41.3158 0.467100 142.623993 174.833 -41.3317 0.462001 142.329178 174.809 -41.3472 0.452767 142.221466 174.802 -41.3303 0.446537 142.096878 174.796 -41.3301 0.445966 142.126144 174.791 -41.3483 0.445085 142.388077 174.786 -41.3435 0.441903 142.364838 174.766 -41.3509 0.434411 142.858658 174.744 -41.3484 0.420737 143.252930 174.716 -41.363 0.397206 144.726257 174.693 -41.348 0.344829 145.593307 174.66 -41.3423 0.285130 148.238083 174.631 -41.321 0.187961 157.826126 174.613 -41.278 0.101240 -151.027298 174.641 -41.2409 0.164284 -85.741188 174.662 -41.2482 0.182516 -80.882942 174.693 -41.2216 0.228769 -74.566513 174.714 -41.2191 0.240281 -73.411301 174.739 -41.1732 0.280281 -71.998169 174.78 -41.1424 0.317540 -69.151886 174.804 -41.1151 0.348403 -66.509895 174.832 -41.1074 0.374998 -63.473213 174.838 -41.0942 0.384488 -63.154381 174.852 -41.091 0.389932 -63.116241 174.859 -41.0952 0.390989 -63.076469 174.861 -41.102 0.392076 -62.963745 174.854 -41.1076 0.392936 -62.878696 174.85 -41.1133 0.393395 -62.837658 174.841 -41.1154 0.393665 -62.812031 174.837 -41.1203 0.393718 -62.822529 174.837 -41.1247 0.393749 -62.829735 174.84 -41.1277 0.393744 -62.834282 174.842 -41.1247 0.393717 -62.832291 174.848 -41.1203 0.393650 -62.841949 174.855 -41.1156 0.393334 -62.883820 174.861 -41.1084 0.392766 -62.946308 174.867 -41.1032 0.392131 -63.028503 174.865 -41.0979 0.391571 -63.060642 174.866 -41.0917 0.391290 -63.144852 174.864 -41.0836 0.391373 -63.205147 174.861 -41.075 0.392132 -63.287270 174.855 -41.0721 0.392725 -63.374924 174.851 -41.0656 0.394791 -63.424564 174.838 -41.0638 0.397577 -63.702412 174.841 -41.0556 0.406009 -63.588306 174.853 -41.0449 0.420023 -62.984119 174.87 -41.0306 0.437318 -61.983463 174.896 -41.0297 0.450852 -60.980698 174.912 -41.0178 0.458605 -60.777813 174.94 -40.9974 0.475029 -60.157875 174.966 -40.9614 0.498498 -59.708817 174.973 -40.9242 0.521544 -59.522144 174.982 -40.8844 0.570873 -57.717476 175.035 -40.8512 0.622244 -56.202415 175.058 -40.8277 0.635991 -56.474842 175.086 -40.7801 0.657980 -56.784992 175.113 -40.7356 0.678176 -56.918472 175.142 -40.6919 0.695729 -56.932354 175.162 -40.6433 0.715147 -57.002567 175.182 -40.5966 0.732236 -56.989220 175.198 -40.5375 0.751430 -57.177864 175.214 -40.4793 0.767944 -57.249847 175.223 -40.4254 0.779556 -57.431568 175.228 -40.372 0.789930 -57.440578 175.226 -40.321 0.800310 -57.467419 175.217 -40.274 0.809164 -57.464180 175.2 -40.188 0.826331 -57.358261 175.183 -40.143 0.834621 -57.322521 175.151 -40.09 0.845571 -57.247757 175.099 -40.0406 0.857752 -57.253334 175.046 -39.985 0.872451 -57.162022 174.978 -39.945 0.886594 -57.229633 174.953 -39.915 0.894308 -57.159145 174.927 -39.899 0.898920 -57.164513 174.864 -39.873 0.909760 -57.246044 174.794 -39.857 0.919142 -57.375340 174.763 -39.865 0.922968 -57.476482 174.709 -39.865 0.935164 -57.502399 174.651 -39.836 0.954940 -57.261997 174.554 -39.817 0.990449 -57.116985 174.504 -39.778 1.025227 -56.658066 174.429 -39.741 1.071955 -56.676838 174.388 -39.699 1.105503 -56.961685 174.346 -39.655 1.127203 -57.373100 174.292 -39.624 1.141034 -57.866447 174.254 -39.615 1.148441 -58.175213 174.177 -39.5873 1.165531 -58.923275 174.085 -39.578 1.178041 -59.925858 174.048 -39.563 1.184747 -60.367531 173.987 -39.553 1.192066 -61.044228 173.95 -39.539 1.197906 -61.582233 173.933 -39.523 1.201375 -61.875221 173.901 -39.502 1.204791 -62.292358 173.857 -39.459 1.209885 -62.884937 173.846 -39.458 1.209818 -62.954590 173.819 -39.429 1.212750 -63.395229 173.797 -39.418 1.213107 -63.654831 173.778 -39.388 1.215131 -64.156143 173.764 -39.3338 1.217985 -64.993393 173.75 -39.277 1.216005 -65.842270 173.77 -39.249 1.215900 -66.357025 173.77 -39.23 1.214294 -66.593544 173.802 -39.1864 1.211537 -67.216904 173.849 -39.15 1.210253 -67.726501 173.912 -39.12 1.209792 -68.153473 173.938 -39.116 1.210066 -68.275436 173.995 -39.086 1.210065 -68.557503 174.024 -39.054 1.210144 -68.763832 174.045 -39.06 1.211624 -68.830589 174.079 -39.051 1.212482 -68.965813 174.135 -39.0217 1.213792 -69.226059 174.183 -38.994 1.215771 -69.463867 174.238 -38.983 1.219438 -69.686798 174.305 -38.983 1.224221 -69.898773 174.339 -38.994 1.226611 -69.979897 174.403 -38.984 1.228338 -70.172470 174.452 -38.943 1.227801 -70.411278 174.501 -38.888 1.226978 -70.717995 174.52 -38.887 1.227592 -70.767578 174.561 -38.855 1.227633 -70.948563 174.588 -38.804 1.225938 -71.185074 174.602 -38.7517 1.222784 -71.418213 174.615 -38.701 1.219360 -71.654945 174.623 -38.6383 1.213546 -71.935768 174.63 -38.58 1.207919 -72.157402 174.633 -38.529 1.202987 -72.342384 174.627 -38.501 1.199951 -72.415482 174.637 -38.454 1.195417 -72.595909 174.631 -38.387 1.187214 -72.783768 174.674 -38.353 1.183834 -72.942780 174.708 -38.309 1.180919 -73.066818 174.706 -38.2509 1.177764 -73.151787 174.708 -38.195 1.174230 -73.273880 174.692 -38.1574 1.171162 -73.326340 174.682 -38.1324 1.168936 -73.362724 174.68 -38.11 1.166660 -73.390320 174.689 -38.12 1.167053 -73.396072 174.736 -38.122 1.166826 -73.464478 174.755 -38.108 1.166360 -73.505341 174.77 -38.079 1.165237 -73.560265 174.778 -38.04 1.163668 -73.622154 174.798 -38.019 1.163043 -73.683441 174.779 -37.972 1.160758 -73.741966 174.779 -37.938 1.158997 -73.800499 174.756 -37.892 1.156144 -73.850250 174.763 -37.878 1.155302 -73.882050 174.757 -37.864 1.154358 -73.888657 174.774 -37.836 1.153223 -73.939064 174.825 -37.822 1.153340 -74.006905 174.833 -37.786 1.152794 -74.070992 174.82 -37.7342 1.151063 -74.151970 174.808 -37.679 1.148566 -74.262291 174.794 -37.634 1.145705 -74.349777 174.77 -37.6 1.142820 -74.390465 174.764 -37.552 1.139828 -74.476830 174.731 -37.4937 1.134874 -74.543587 174.7 -37.433 1.129676 -74.581718 174.704 -37.381 1.127280 -74.633522 174.677 -37.3326 1.124544 -74.669716 174.653 -37.2871 1.121835 -74.716530 174.613 -37.2136 1.117777 -74.781883 174.576 -37.1423 1.114599 -74.841858 174.533 -37.068 1.112498 -74.936310 174.496 -37.051 1.110161 -74.961563 174.486 -37.043 1.108594 -74.974068 174.483 -37.018 1.106207 -75.011131 174.154 -41.5921 0.579793 168.414474 174.166 -41.6076 0.589661 166.927673 174.163 -41.6375 0.607131 164.373489 174.158 -41.667 0.614103 162.933289 174.179 -41.7087 0.619008 161.092911 174.213 -41.7292 0.621802 159.811508 174.253 -41.7338 0.622626 158.264725 174.276 -41.7294 0.624850 156.699677 174.273 -41.7473 0.639791 153.946793 174.218 -41.7938 0.653979 150.355423 174.195 -41.8376 0.652106 148.936340 174.163 -41.8732 0.653018 147.866089 174.105 -41.9148 0.654685 146.723785 174.083 -41.947 0.654340 146.184860 174.017 -41.9943 0.656143 145.207428 173.964 -42.05 0.655784 144.379242 173.946 -42.0786 0.655169 144.063599 173.922 -42.127 0.654047 143.592819 173.938 -42.166 0.651690 143.280975 173.897 -42.186 0.651308 142.934631 173.854 -42.2291 0.650579 142.611725 173.805 -42.265 0.651007 142.358749 173.759 -42.284 0.651925 142.195465 173.749 -42.32 0.652043 142.043243 173.692 -42.358 0.653412 141.801697 173.68 -42.399 0.653891 141.612656 173.716 -42.425 0.652970 141.501480 173.692 -42.433 0.653266 141.405533 173.632 -42.417 0.653212 141.335541 173.582 -42.448 0.653441 141.245972 173.537 -42.469 0.653705 141.200439 173.501 -42.529 0.655129 141.104172 173.516 -42.555 0.655846 141.073868 173.482 -42.586 0.657504 141.097534 173.448 -42.6416 0.661628 141.068619 173.417 -42.6985 0.668032 140.985229 173.386 -42.7554 0.675134 140.833359 173.367 -42.799 0.682222 140.686600 173.339 -42.8262 0.688892 140.600052 173.312 -42.854 0.695450 140.468063 173.316 -42.885 0.700820 140.168259 173.266 -42.927 0.717920 139.753708 173.223 -42.962 0.731011 139.191437 173.132 -42.99 0.747935 138.662094 173.073 -43.053 0.763126 137.804794 173.039 -43.048 0.770669 137.777328 172.982 -43.076 0.780812 137.281570 172.927 -43.0887 0.789876 136.959732 172.875 -43.102 0.795881 136.665329 172.828 -43.136 0.801355 136.268585 172.807 -43.134 0.803336 136.245773 172.767 -43.1785 0.807657 135.828720 172.741 -43.2255 0.812062 135.403122 172.717 -43.279 0.817374 134.918716 172.713 -43.336 0.821173 134.397583 172.714 -43.4 0.826863 133.766632 172.713 -43.445 0.831351 133.235092 172.72 -43.4992 0.834591 132.677032 172.748 -43.554 0.836788 132.137405 172.775 -43.57 0.836891 131.963242 172.773 -43.581 0.838131 131.916428 172.78 -43.585 0.838417 131.876831 172.796 -43.581 0.837816 131.805344 172.803 -43.588 0.840577 131.859283 172.777 -43.595 0.849464 132.424133 172.753 -43.6009 0.856523 132.820328 172.723 -43.607 0.869941 134.261353 172.711 -43.603 0.873033 134.635712 172.703 -43.61 0.875348 134.681107 172.672 -43.607 0.879246 134.890335 172.65 -43.62 0.881200 134.832642 172.643 -43.637 0.882003 134.766190 172.653 -43.64 0.881707 134.745895 172.662 -43.631 0.880871 134.766815 172.654 -43.65 0.882139 134.736374 172.67 -43.662 0.882907 134.687958 172.678 -43.636 0.880318 134.699936 172.684 -43.638 0.879854 134.659256 172.685 -43.651 0.880869 134.623306 172.694 -43.653 0.880942 134.600342 172.711 -43.625 0.876249 134.519135 172.735 -43.622 0.865618 133.299362 172.746 -43.624 0.862264 132.854599 172.759 -43.617 0.856787 132.450424 172.781 -43.62 0.851472 132.033875 172.8 -43.611 0.846372 131.822327 172.812 -43.616 0.844548 131.560303 172.822 -43.604 0.840257 131.439819 172.826 -43.611 0.839848 131.323517 172.821 -43.6278 0.841534 131.301468 172.817 -43.645 0.843167 131.320679 172.815 -43.66 0.844148 131.317261 172.829 -43.649 0.843368 131.287857 172.83 -43.6335 0.841945 131.271454 172.834 -43.6207 0.840553 131.267685 172.842 -43.6108 0.838894 131.246262 172.852 -43.601 0.835996 131.187088 172.863 -43.612 0.835209 130.933075 172.873 -43.61 0.834242 130.888916 172.869 -43.617 0.834613 130.826019 172.877 -43.621 0.834385 130.780579 172.887 -43.614 0.833332 130.750366 172.899 -43.619 0.832912 130.597488 172.898 -43.628 0.833610 130.525620 172.907 -43.624 0.833012 130.515579 172.892 -43.647 0.837040 130.590607 172.893 -43.661 0.838513 130.567352 172.881 -43.671 0.839840 130.623718 172.888 -43.68 0.840311 130.589905 172.896 -43.682 0.840516 130.571640 172.899 -43.665 0.838846 130.543427 172.913 -43.6432 0.835810 130.475189 172.927 -43.622 0.830928 130.301300 172.942 -43.637 0.830654 129.942902 172.958 -43.639 0.829646 129.806808 172.974 -43.634 0.827992 129.657349 172.996 -43.646 0.828116 129.062317 173.004 -43.654 0.827702 128.822083 173.019 -43.65 0.826134 128.662292 173.043 -43.653 0.824679 128.049133 173.031 -43.662 0.826799 127.799919 173.067 -43.677 0.826100 126.513542 173.056 -43.691 0.827755 126.269768 173.072 -43.697 0.826863 126.099617 173.082 -43.683 0.824471 126.046227 173.104 -43.702 0.821508 124.618797 173.097 -43.719 0.822548 123.700310 173.125 -43.74 0.817742 122.468239 173.123 -43.776 0.816342 120.399460 173.1 -43.775 0.818316 119.879753 173.109 -43.798 0.815001 119.109367 173.091 -43.81 0.814846 118.296089 173.101 -43.817 0.813649 118.192780 173.09 -43.824 0.813409 117.652542 173.099 -43.832 0.811587 117.401421 173.078 -43.833 0.813348 116.599709 173.071 -43.852 0.811833 115.796478 173.058 -43.849 0.812364 115.389717 173.039 -43.865 0.810808 114.558525 173.016 -43.874 0.809584 113.815178 172.995 -43.885 0.807536 113.193649 172.977 -43.889 0.807247 112.721413 172.964 -43.883 0.809589 112.594551 172.96 -43.869 0.814589 113.014893 172.941 -43.864 0.821285 113.510139 172.937 -43.854 0.827599 114.039040 172.942 -43.815 0.838660 114.481499 172.963 -43.799 0.842194 114.594063 172.94 -43.797 0.841109 114.469887 172.937 -43.79 0.842505 114.479752 172.96 -43.783 0.844193 114.578987 172.944 -43.773 0.844128 114.498947 172.955 -43.765 0.844563 114.522781 172.926 -43.759 0.844487 114.454285 172.922 -43.774 0.843819 114.439850 172.915 -43.76 0.844292 114.434967 172.905 -43.777 0.843775 114.398712 172.915 -43.781 0.843484 114.407692 172.92 -43.793 0.841721 114.365707 172.912 -43.795 0.840978 114.288445 172.916 -43.803 0.839584 114.270004 172.898 -43.82 0.836560 114.068260 172.91 -43.849 0.830633 113.884605 172.907 -43.861 0.829112 113.661545 172.938 -43.88 0.815218 112.678093 172.943 -43.893 0.807426 112.083664 172.93 -43.899 0.804989 111.634743 172.899 -43.888 0.806042 110.957390 172.867 -43.893 0.804500 110.518867 172.858 -43.889 0.805194 110.333344 172.853 -43.875 0.807001 110.192741 172.831 -43.888 0.804861 109.946312 172.821 -43.885 0.805034 109.779160 172.83 -43.875 0.806948 109.741608 172.807 -43.875 0.806051 109.544090 172.804 -43.869 0.806685 109.464813 172.793 -43.867 0.806571 109.360718 172.794 -43.861 0.807136 109.339859 172.78 -43.8663 0.806439 109.226273 172.756 -43.848 0.808112 108.900635 172.738 -43.852 0.807258 108.769150 172.736 -43.831 0.809127 108.629990 172.704 -43.826 0.808512 108.408508 172.633 -43.8297 0.805531 107.918289 172.562 -43.833 0.803819 107.525177 172.507 -43.8386 0.803033 107.284180 172.423 -43.8478 0.804087 106.888092 172.317 -43.864 0.805975 106.218521 170.793 -42.884 1.007543 -34.088470 170.848 -42.8383 1.006619 -34.345062 170.894 -42.7834 1.005917 -34.537476 170.935 -42.733 1.006774 -34.664307 170.978 -42.6963 1.008805 -34.739227 171.019 -42.663 1.011307 -34.813328 171.046 -42.651 1.012837 -34.840660 171.093 -42.604 1.016356 -34.970547 171.124 -42.5648 1.019358 -35.071407 171.153 -42.527 1.022737 -35.187763 171.175 -42.4824 1.026112 -35.338535 171.19 -42.443 1.029377 -35.484814 171.208 -42.421 1.031803 -35.557945 171.217 -42.383 1.035401 -35.728668 171.238 -42.378 1.037181 -35.730072 171.27 -42.3192 1.043154 -35.992485 171.304 -42.267 1.049476 -36.219879 171.309 -42.2138 1.054330 -36.521011 171.317 -42.1618 1.060106 -36.873032 171.327 -42.114 1.065791 -37.233311 171.341 -42.087 1.069580 -37.455517 171.363 -42.065 1.073365 -37.625027 171.366 -42.036 1.075927 -37.850323 171.392 -42.022 1.079156 -37.978127 171.397 -41.996 1.080827 -38.156693 171.409 -41.9556 1.085219 -38.458538 171.417 -41.919 1.089727 -38.754322 171.452 -41.89 1.095874 -38.989525 171.456 -41.807 1.104675 -39.749191 171.451 -41.777 1.109752 -40.133915 171.468 -41.748 1.118741 -40.588017 171.548 -41.75 1.142732 -41.165642 171.586 -41.731 1.146586 -41.592083 171.621 -41.743 1.152919 -41.730854 171.659 -41.742 1.156146 -41.935825 171.715 -41.721 1.159469 -42.288181 171.767 -41.686 1.162309 -42.718723 171.807 -41.6603 1.164545 -43.017632 171.86 -41.624 1.167919 -43.371468 171.901 -41.5748 1.171363 -43.792469 171.929 -41.5321 1.174240 -44.165356 171.957 -41.4893 1.177756 -44.607155 171.985 -41.446 1.180906 -45.113560 172.021 -41.4215 1.182950 -45.460648 172.063 -41.386 1.184663 -45.781471 172.08 -41.335 1.184934 -46.137272 172.088 -41.2667 1.184783 -46.651188 172.095 -41.2125 1.185067 -47.073570 172.101 -41.1508 1.185557 -47.565552 172.097 -41.098 1.185895 -48.013577 172.109 -41.032 1.187956 -48.631454 172.1 -40.975 1.188344 -49.213261 172.091 -40.916 1.188975 -49.943249 172.107 -40.886 1.192243 -50.430214 172.132 -40.85 1.196070 -51.039520 172.175 -40.81 1.201366 -51.767502 172.214 -40.777 1.206652 -52.400169 172.25 -40.768 1.212327 -52.809010 172.286 -40.751 1.216409 -53.217525 172.325 -40.719 1.219004 -53.843143 172.364 -40.701 1.222750 -54.279514 172.394 -40.667 1.223964 -54.823059 172.441 -40.631 1.226641 -55.634060 172.496 -40.6038 1.228755 -56.290920 172.548 -40.569 1.230186 -56.889812 172.589 -40.546 1.232709 -57.394913 172.643 -40.506 1.235745 -58.297760 172.695 -40.499 1.241810 -59.089813 172.735 -40.51 1.247186 -59.584999 172.813 -40.504 1.251218 -60.586197 172.868 -40.5104 1.254423 -61.395954 172.927 -40.517 1.257306 -62.300949 172.985 -40.531 1.261268 -63.378880 173.005 -40.543 1.266994 -63.878864 173.017 -40.553 1.275602 -64.256950 172.975 -40.537 1.323611 -63.960159 172.898 -40.52 1.357409 -64.136993 172.838 -40.5165 1.370120 -64.417580 172.777 -40.513 1.376379 -64.697067 172.733 -40.525 1.377142 -64.905190 172.721 -40.548 1.374518 -65.045815 172.685 -40.585 1.372253 -65.320656 172.678 -40.626 1.368277 -65.532448 172.682 -40.6675 1.364783 -65.729836 172.686 -40.71 1.361799 -65.937508 172.7 -40.735 1.359432 -66.052620 172.732 -40.774 1.355728 -66.243309 172.768 -40.795 1.352929 -66.389076 172.794 -40.815 1.350814 -66.535408 172.838 -40.833 1.346784 -66.717339 172.89 -40.833 1.342354 -66.854767 172.91 -40.815 1.338677 -66.906166 172.919 -40.801 1.334461 -66.969467 172.94 -40.813 1.330216 -67.045227 172.956 -40.812 1.328531 -67.106247 172.954 -40.789 1.324203 -67.145988 172.985 -40.782 1.312242 -67.380066 172.995 -40.795 1.307045 -67.633003 173.014 -40.816 1.301973 -67.891167 173.015 -40.851 1.299873 -68.168716 173.042 -40.854 1.297552 -68.208511 173.056 -40.859 1.296428 -68.285255 173.064 -40.879 1.297125 -68.435310 173.045 -40.889 1.300230 -68.443909 173.062 -40.912 1.300984 -68.623116 173.053 -40.9336 1.304363 -68.699593 173.066 -40.95 1.305778 -68.816063 173.067 -40.963 1.308067 -68.877457 173.051 -40.967 1.311505 -68.822128 173.033 -40.991 1.317080 -68.861984 173.007 -40.993 1.320660 -68.785255 173.008 -41.01 1.321299 -68.866226 173.018 -41.017 1.320800 -68.933182 173.02 -41.046 1.323843 -69.059937 173.004 -41.052 1.326121 -69.018013 172.998 -41.065 1.327886 -69.031509 173.03 -41.09 1.328336 -69.247116 173.02 -41.139 1.334587 -69.360695 173.076 -41.205 1.339381 -69.733246 173.089 -41.2372 1.342883 -69.833870 173.088 -41.239 1.343026 -69.837021 173.117 -41.256 1.343658 -69.978134 173.184 -41.277 1.342930 -70.305222 173.203 -41.299 1.343858 -70.404938 173.232 -41.28 1.340446 -70.506355 173.249 -41.28 1.339286 -70.581345 173.275 -41.257 1.334427 -70.703506 173.283 -41.266 1.334172 -70.745178 173.303 -41.253 1.331916 -70.816978 173.327 -41.221 1.325685 -70.947006 173.321 -41.204 1.322215 -70.961555 173.361 -41.18 1.311371 -71.192139 173.401 -41.158 1.302739 -71.337379 173.414 -41.16 1.301864 -71.368958 173.409 -41.142 1.299126 -71.351524 173.415 -41.137 1.296961 -71.387772 173.434 -41.142 1.293887 -71.524582 173.437 -41.162 1.294071 -71.595436 173.48 -41.158 1.289968 -71.731354 173.505 -41.135 1.286173 -71.774529 173.512 -41.106 1.280927 -71.806503 173.544 -41.098 1.274972 -71.982430 173.571 -41.065 1.266048 -72.084694 173.584 -41.066 1.263514 -72.182388 173.593 -41.052 1.259543 -72.227066 173.614 -41.07 1.257200 -72.383240 173.632 -41.075 1.256351 -72.408745 173.624 -41.09 1.257308 -72.355637 173.628 -41.097 1.257558 -72.363548 173.638 -41.099 1.257432 -72.387550 173.647 -41.091 1.257119 -72.408371 173.657 -41.1 1.259337 -72.316238 173.65 -41.11 1.260107 -72.264870 173.665 -41.112 1.260283 -72.297989 173.673 -41.097 1.259593 -72.368156 173.659 -41.09 1.257494 -72.431465 173.663 -41.079 1.256098 -72.464882 173.693 -41.0763 1.257097 -72.435776 173.721 -41.07 1.260248 -72.329926 173.722 -41.061 1.261490 -72.335495 173.751 -41.056 1.264883 -72.208511 173.746 -41.0523 1.264624 -72.245178 173.739 -41.048 1.264534 -72.286209 173.751 -41.037 1.266402 -72.247658 173.744 -41.034 1.266524 -72.267479 173.726 -41.048 1.263451 -72.338600 173.718 -41.039 1.263660 -72.391098 173.71 -41.051 1.261391 -72.423187 173.689 -41.057 1.256571 -72.532898 173.672 -41.035 1.248165 -72.623192 173.715 -41.007 1.235392 -72.849770 173.724 -41.015 1.233020 -72.913979 173.733 -41.011 1.231798 -72.918404 173.734 -41.001 1.229932 -72.925323 173.748 -41.006 1.228083 -72.994965 173.765 -40.975 1.217561 -72.932594 173.776 -40.991 1.208994 -72.973022 173.797 -40.985 1.204242 -73.043594 173.785 -40.968 1.200515 -73.059204 173.794 -40.964 1.186517 -73.177353 173.804 -40.973 1.174966 -73.363060 173.81 -40.963 1.169686 -73.426353 173.805 -40.955 1.155518 -73.674957 173.835 -40.942 1.043110 -76.739914 173.834 -40.9264 0.875429 -84.528023 173.856 -40.931 0.846866 -85.538971 173.844 -40.945 0.845017 -85.594482 173.844 -40.959 0.844559 -85.600250 173.834 -40.963 0.844848 -85.584076 173.84 -40.975 0.844728 -85.610657 173.833 -40.984 0.844930 -85.608994 173.846 -40.992 0.844669 -85.645050 173.868 -40.985 0.844142 -85.676361 173.884 -40.958 0.842935 -85.644249 173.897 -40.961 0.842123 -85.679619 173.915 -40.945 0.840539 -85.652321 173.905 -40.93 0.839280 -85.541710 173.915 -40.925 0.834716 -85.612297 173.931 -40.9254 0.829381 -85.712189 173.951 -40.9089 0.821286 -85.622269 173.978 -40.8887 0.807588 -85.402687 173.979 -40.9043 0.796826 -85.716225 174.001 -40.9063 0.787450 -85.854820 174.022 -40.9107 0.776212 -85.802101 174.012 -40.9182 0.775006 -85.685837 174.018 -40.9243 0.774666 -85.655014 174.011 -40.9295 0.776817 -85.331909 174.013 -40.9371 0.778991 -85.148643 173.998 -40.9459 0.792698 -83.000404 174.001 -40.9338 0.795926 -81.958672 173.982 -40.9078 0.798575 -81.774620 173.973 -40.9241 0.797969 -81.865532 173.975 -40.9379 0.798461 -81.851730 173.97 -40.9468 0.803628 -81.219742 173.966 -40.9363 0.804857 -80.874382 173.95 -40.9404 0.806639 -80.622688 173.958 -40.958 0.811966 -80.163788 173.95 -40.971 0.827950 -78.462334 173.945 -40.9637 0.831664 -77.783173 173.917 -40.9646 0.839157 -77.033585 173.904 -40.969 0.842004 -76.887512 173.898 -40.979 0.843428 -76.897491 173.901 -40.99 0.843754 -76.952141 173.914 -40.985 0.843031 -76.995857 173.929 -40.9848 0.842803 -77.160385 173.917 -40.9952 0.852965 -76.567047 173.892 -41.002 0.861202 -75.789650 173.888 -41.01 0.863822 -75.689957 173.878 -41.003 0.866071 -75.309738 173.869 -41.019 0.872795 -74.905228 173.85 -41.024 0.879488 -74.636719 173.814 -41.019 0.884757 -74.490654 173.836 -40.995 0.887048 -74.416420 173.815 -40.993 0.886894 -74.454552 173.803 -41.014 0.885764 -74.478523 173.783 -41.008 0.887906 -74.378929 173.78 -41.012 0.887873 -74.405800 173.787 -41.014 0.887329 -74.423492 173.77 -41.024 0.888105 -74.443459 173.792 -41.033 0.886546 -74.511345 173.806 -41.028 0.884846 -74.562126 173.809 -41.035 0.884205 -74.607803 173.795 -41.038 0.885106 -74.590965 173.791 -41.046 0.885429 -74.605438 173.783 -41.041 0.886161 -74.555420 173.776 -41.047 0.886466 -74.568924 173.78 -41.05 0.886317 -74.584373 173.767 -41.054 0.886825 -74.574661 173.786 -41.062 0.886051 -74.629921 173.774 -41.071 0.886929 -74.601311 173.781 -41.083 0.887455 -74.624046 173.771 -41.095 0.889156 -74.577988 173.752 -41.099 0.890045 -74.549698 173.756 -41.103 0.889881 -74.566154 173.754 -41.113 0.889783 -74.579124 173.76 -41.12 0.889693 -74.592888 173.772 -41.106 0.889417 -74.599335 173.778 -41.115 0.889348 -74.608139 173.785 -41.112 0.889389 -74.615547 173.79 -41.103 0.889345 -74.630798 173.778 -41.1 0.889023 -74.613747 173.791 -41.094 0.887929 -74.668594 173.791 -41.086 0.887187 -74.667511 173.796 -41.086 0.886916 -74.687485 173.796 -41.095 0.887147 -74.691582 173.806 -41.094 0.887021 -74.714119 173.813 -41.074 0.885575 -74.734840 173.822 -41.073 0.885309 -74.753624 173.816 -41.064 0.884866 -74.728355 173.83 -41.055 0.882807 -74.779320 173.855 -41.066 0.879508 -75.027878 173.864 -41.055 0.878064 -75.039162 173.882 -41.064 0.876409 -75.051529 173.915 -41.058 0.880059 -74.881752 173.95 -41.0632 0.892242 -74.771126 173.917 -41.0664 0.905227 -73.182114 173.905 -41.072 0.908151 -73.162735 173.91 -41.081 0.910131 -73.087959 173.902 -41.086 0.914940 -72.635071 173.885 -41.077 0.917650 -72.259087 173.878 -41.079 0.918551 -72.261368 173.88 -41.086 0.918727 -72.317245 173.868 -41.082 0.919486 -72.269524 173.868 -41.092 0.919513 -72.292953 173.857 -41.1 0.919780 -72.269493 173.873 -41.1 0.919698 -72.301872 173.887 -41.103 0.921151 -72.309166 173.883 -41.123 0.933922 -71.401505 173.876 -41.125 0.939319 -70.838799 173.863 -41.113 0.943217 -70.154373 173.844 -41.116 0.944900 -70.160912 173.855 -41.126 0.944504 -70.227676 173.851 -41.136 0.949227 -69.841560 173.83 -41.139 0.953895 -69.118042 173.837 -41.147 0.954745 -69.252411 173.827 -41.149 0.957675 -69.000633 173.823 -41.142 0.957557 -68.922279 173.817 -41.155 0.961160 -68.786499 173.801 -41.151 0.963821 -68.629112 173.791 -41.156 0.964830 -68.634064 173.781 -41.148 0.966084 -68.587357 173.775 -41.155 0.965917 -68.619148 173.783 -41.159 0.965366 -68.629303 173.775 -41.158 0.965748 -68.623520 173.779 -41.164 0.965462 -68.639183 173.772 -41.174 0.965763 -68.650612 173.784 -41.179 0.965510 -68.679161 173.796 -41.165 0.964372 -68.692307 173.819 -41.1665 0.961233 -68.864273 173.847 -41.155 0.956108 -69.316025 173.85 -41.163 0.960540 -68.880264 173.829 -41.175 0.961442 -68.522392 173.857 -41.171 0.964068 -68.666748 173.865 -41.193 0.977197 -67.128693 173.858 -41.208 0.984095 -63.900768 173.849 -41.21 0.987474 -63.440918 173.851 -41.217 0.990973 -63.173275 173.84 -41.22 0.995054 -62.545738 173.847 -41.226 0.997025 -62.534645 173.849 -41.243 1.007648 -61.899616 173.824 -41.253 1.018075 -61.365646 173.796 -41.243 1.025136 -60.848820 173.801 -41.257 1.024014 -61.060879 173.766 -41.257 1.030182 -60.682964 173.757 -41.27 1.030435 -60.727207 173.774 -41.285 1.030499 -60.747040 173.782 -41.274 1.030345 -60.764565 173.772 -41.267 1.029726 -60.765697 173.784 -41.266 1.026572 -60.968868 173.806 -41.289 1.027472 -61.082104 173.823 -41.295 1.028766 -61.015015 173.845 -41.293 1.030108 -61.004227 173.847 -41.284 1.030580 -61.025745 173.824 -41.287 1.028823 -61.058773 173.81 -41.279 1.026936 -61.105095 173.809 -41.265 1.023862 -61.172485 173.834 -41.2623 1.015237 -61.718700 173.868 -41.259 1.007563 -62.169395 173.915 -41.233 1.008071 -62.361217 173.859 -41.229 1.002160 -62.369461 173.86 -41.222 0.991276 -63.420216 173.88 -41.223 0.980835 -62.931793 173.911 -41.211 0.960302 -56.940090 173.917 -41.2107 0.927494 -50.051743 173.946 -41.2019 0.930120 -30.648726 173.937 -41.2206 0.932562 -30.284122 173.955 -41.2103 0.932615 -30.497316 173.97 -41.2185 0.936546 -30.155329 173.97 -41.2113 0.936025 -30.265955 173.997 -41.2109 0.943748 -29.703615 174.013 -41.2003 0.952638 -28.767950 174.032 -41.2033 0.955487 -28.455736 174.032 -41.1926 0.955495 -28.549633 174.016 -41.1907 0.955929 -28.609886 174.023 -41.1863 0.961080 -28.356436 174.047 -41.1971 0.965778 -28.109898 174.053 -41.1915 0.966465 -28.153357 174.074 -41.1961 0.968646 -28.060865 174.081 -41.1896 0.969246 -28.092203 174.11 -41.1804 0.971411 -28.080883 174.12 -41.168 0.972430 -28.109606 174.08 -41.1728 0.970047 -28.160702 174.053 -41.1789 0.966510 -28.264942 174.041 -41.1749 0.963943 -28.397655 174.05 -41.165 0.965094 -28.416719 174.046 -41.1589 0.965320 -28.445234 174.002 -41.1711 0.960067 -28.630178 174.01 -41.1797 0.959001 -28.614561 173.986 -41.1828 0.955380 -29.174482 174.001 -41.1952 0.950286 -29.290785 173.982 -41.1876 0.940696 -30.532558 173.978 -41.1942 0.939230 -30.432388 173.965 -41.1902 0.934401 -30.721258 173.973 -41.1849 0.936453 -30.577719 173.966 -41.1729 0.939789 -30.534756 173.929 -41.1985 0.920891 -31.687433 173.915 -41.201 0.950218 -54.219864 173.889 -41.2017 0.979870 -60.988674 173.873 -41.212 0.986714 -64.103134 173.887 -41.192 0.979752 -68.053070 173.88 -41.182 0.974163 -68.442581 173.895 -41.172 0.972544 -68.782684 173.875 -41.169 0.969373 -68.762535 173.867 -41.156 0.961309 -69.441933 173.884 -41.159 0.960260 -69.764153 173.885 -41.1521 0.960777 -69.697945 173.866 -41.146 0.954233 -70.076454 173.872 -41.139 0.946498 -70.838570 173.894 -41.139 0.938532 -71.768913 173.915 -41.126 0.932723 -72.057297 173.901 -41.125 0.933888 -71.938530 173.908 -41.112 0.924149 -72.712250 173.931 -41.113 0.919026 -73.262360 173.934 -41.1023 0.917763 -73.186485 173.927 -41.0972 0.916267 -73.228104 173.933 -41.0846 0.907337 -73.947830 173.944 -41.09 0.904353 -74.478165 173.954 -41.0807 0.899356 -74.757843 173.966 -41.0854 0.897349 -74.928001 173.976 -41.0782 0.896955 -74.933128 173.978 -41.0857 0.898077 -74.917389 173.964 -41.0983 0.899370 -74.886131 173.951 -41.1149 0.899989 -74.884247 173.957 -41.1478 0.899901 -74.919662 173.968 -41.151 0.899807 -74.934540 173.963 -41.1374 0.899748 -74.919022 173.975 -41.1295 0.899572 -74.931183 173.993 -41.1364 0.899581 -74.951118 173.985 -41.1231 0.899555 -74.942749 173.994 -41.1059 0.899135 -74.968552 173.986 -41.1001 0.898810 -74.952415 174.013 -41.0954 0.898107 -75.003777 174.037 -41.1138 0.898234 -75.020470 174.047 -41.1063 0.898278 -75.037071 174.032 -41.0946 0.898188 -75.026299 174.023 -41.0717 0.898197 -75.031723 174.015 -41.075 0.898026 -75.025513 174.018 -41.0639 0.898132 -75.039856 174.01 -41.0584 0.898255 -75.039986 174.017 -41.0594 0.898523 -75.037941 174.032 -41.062 0.898899 -75.046989 174.048 -41.0549 0.899119 -75.058647 174.054 -41.0282 0.900112 -75.076172 174.049 -41.0215 0.900291 -75.077888 174.035 -41.0269 0.899988 -75.076050 174.038 -41.0196 0.900217 -75.073341 174.021 -41.0174 0.900378 -75.076736 174.009 -41.0172 0.900428 -75.082191 173.998 -41.0401 0.899075 -75.088905 173.978 -41.0569 0.895286 -75.079300 173.991 -41.0367 0.893946 -75.278526 173.984 -41.032 0.894370 -75.253212 173.96 -41.0451 0.891495 -75.200562 173.95 -41.0375 0.887655 -75.471397 173.935 -41.0411 0.880282 -75.619301 173.938 -41.0347 0.876098 -76.063843 173.953 -41.0331 0.874504 -76.393440 173.937 -41.0194 0.863135 -76.984535 173.95 -41.0134 0.854843 -77.788307 173.955 -41.0225 0.853119 -78.153992 173.966 -41.0175 0.850777 -78.270195 173.972 -41.0226 0.850755 -78.323547 173.989 -41.0151 0.849773 -78.441338 173.969 -41.0037 0.846172 -78.525536 173.97 -40.9844 0.831864 -79.449226 173.983 -40.9961 0.825633 -80.755928 173.996 -40.9953 0.823779 -80.956863 174.003 -40.9853 0.822638 -81.026718 173.991 -40.9831 0.822234 -81.013100 173.993 -40.9705 0.809743 -82.750618 174.014 -40.965 0.792180 -85.215813 174.023 -40.9763 0.784140 -85.979408 174.013 -40.9887 0.780702 -86.172058 174.009 -41.0104 0.778397 -86.238167 174.017 -41.0087 0.778375 -86.218147 174.022 -41.0157 0.777684 -86.239883 174.033 -41.0097 0.777160 -86.231438 174.048 -41.0135 0.773876 -86.342293 174.051 -41.0033 0.772601 -86.334015 174.056 -41.0071 0.767427 -86.746078 174.067 -40.9969 0.737769 -88.886276 174.071 -41.0068 0.734254 -89.131462 174.066 -41.0142 0.734188 -89.165726 174.082 -41.0193 0.733094 -89.188713 174.104 -41.0521 0.733299 -89.272552 174.109 -41.0518 0.733308 -89.278809 174.103 -41.0248 0.733033 -89.246490 174.096 -40.9999 0.731758 -89.166084 174.1 -40.9935 0.728531 -89.200935 174.124 -41.0069 0.721951 -89.391281 174.131 -41.0187 0.720908 -89.408676 174.142 -41.0192 0.720788 -89.411758 174.147 -41.0109 0.720759 -89.400604 174.143 -40.9974 0.720089 -89.329231 174.152 -40.9996 0.718776 -89.354309 174.162 -40.9828 0.715640 -89.256203 174.149 -40.9803 0.716019 -89.203773 174.148 -40.9736 0.713210 -89.141991 174.164 -40.9692 0.689565 -89.788124 174.171 -40.9882 0.674978 -90.611183 174.173 -41.0084 0.666621 -90.945488 174.183 -41.0109 0.665236 -90.971573 174.195 -41.0018 0.663670 -90.944511 174.207 -41.0038 0.658383 -91.014763 174.231 -40.9854 0.645534 -90.923119 174.216 -41.0086 0.622415 -93.256783 174.195 -41.0104 0.621567 -93.372955 174.198 -41.0417 0.618544 -93.438644 174.19 -41.0427 0.618755 -93.424477 174.184 -41.0289 0.619411 -93.385635 174.166 -41.043 0.619214 -93.421936 174.182 -41.0592 0.618438 -93.461502 174.215 -41.0711 0.617797 -93.507835 174.225 -41.0692 0.617794 -93.517151 174.224 -41.0559 0.617765 -93.488510 174.239 -41.0495 0.616715 -93.491669 174.242 -41.0412 0.615879 -93.485222 174.258 -41.0442 0.610099 -93.754478 174.27 -41.029 0.603594 -93.867302 174.289 -41.0345 0.594532 -94.060623 174.312 -41.0004 0.573679 -92.848587 174.298 -41.0345 0.538961 -97.524818 174.285 -41.0383 0.532271 -98.683472 174.273 -41.0423 0.528254 -99.287041 174.272 -41.0684 0.515619 -100.054581 174.249 -41.0772 0.510232 -100.350143 174.248 -41.0883 0.508459 -100.290436 174.234 -41.0897 0.507896 -100.218277 174.236 -41.1031 0.507532 -100.175194 174.249 -41.1057 0.507457 -100.166389 174.242 -41.1261 0.507467 -100.043495 174.225 -41.1118 0.508758 -99.829094 174.208 -41.1181 0.509005 -99.864265 174.211 -41.1281 0.508707 -99.907829 174.222 -41.1322 0.508171 -99.955009 174.22 -41.1425 0.508098 -99.959900 174.209 -41.1333 0.508577 -99.876083 174.188 -41.1408 0.509086 -99.890106 174.197 -41.1239 0.510189 -99.816063 174.183 -41.1237 0.510115 -99.847137 174.188 -41.0965 0.510999 -99.808319 174.18 -41.0875 0.511250 -99.793221 174.164 -41.1156 0.510427 -99.831955 174.149 -41.1091 0.510592 -99.813942 174.149 -41.128 0.510148 -99.848778 174.167 -41.1364 0.509699 -99.873512 174.16 -41.1506 0.509293 -99.925995 174.182 -41.1586 0.508687 -99.966545 174.2 -41.1548 0.508238 -99.952538 174.199 -41.1732 0.507540 -99.953766 174.203 -41.1833 0.507149 -99.911057 174.191 -41.1841 0.506521 -99.872932 174.186 -41.1951 0.505959 -99.790909 174.17 -41.203 0.504658 -99.681633 174.171 -41.1858 0.505004 -99.662270 174.158 -41.1779 0.505183 -99.646164 174.155 -41.1808 0.505084 -99.648071 174.149 -41.1825 0.505043 -99.647713 174.155 -41.1953 0.504688 -99.661461 174.148 -41.2075 0.504024 -99.644348 174.156 -41.2144 0.503702 -99.626328 174.145 -41.2167 0.503698 -99.561806 174.145 -41.2089 0.504125 -99.459145 174.126 -41.205 0.505175 -99.401352 174.125 -41.1931 0.505441 -99.326279 174.112 -41.2061 0.505713 -99.367142 174.119 -41.2217 0.506071 -99.479820 174.102 -41.2212 0.509323 -99.263695 174.106 -41.2124 0.509862 -99.180954 174.094 -41.2033 0.510263 -99.136139 174.085 -41.2148 0.510372 -99.169426 174.086 -41.2254 0.510867 -99.238853 174.077 -41.2305 0.512523 -99.221199 174.077 -41.2237 0.513068 -99.142326 174.065 -41.2248 0.513879 -99.150345 174.074 -41.212 0.514285 -99.101318 174.061 -41.2066 0.514483 -99.091026 174.056 -41.2171 0.514350 -99.118217 174.048 -41.2097 0.514602 -99.075371 174.044 -41.2132 0.514595 -99.084518 174.04 -41.2301 0.514755 -99.160576 174.031 -41.2109 0.516183 -99.005753 174.02 -41.2244 0.515760 -99.113312 174.029 -41.2288 0.515301 -99.131645 174.03 -41.24 0.515404 -99.181602 174.018 -41.24 0.516065 -99.162987 174.02 -41.23 0.516360 -99.114998 174.014 -41.2339 0.516292 -99.130821 174.008 -41.2405 0.516469 -99.154648 174.008 -41.2247 0.516997 -99.107040 173.991 -41.2206 0.517159 -99.086205 173.995 -41.2443 0.516726 -99.157898 173.986 -41.2436 0.516999 -99.136192 173.982 -41.2514 0.517183 -99.158714 173.982 -41.2374 0.518000 -99.107185 173.975 -41.2348 0.518161 -99.099838 173.979 -41.229 0.518318 -99.095955 173.97 -41.224 0.518480 -99.075172 173.969 -41.2316 0.518297 -99.088486 173.965 -41.2244 0.518515 -99.071205 173.96 -41.2273 0.518563 -99.069244 173.971 -41.2533 0.517524 -99.155998 173.939 -41.2542 0.518468 -99.108955 173.917 -41.2651 0.518581 -99.117027 173.944 -41.2691 0.518133 -99.164177 173.964 -41.2668 0.517683 -99.195763 174.008 -41.2598 0.516106 -99.246597 173.994 -41.2791 0.516063 -99.306992 174.009 -41.2728 0.515908 -99.297455 174.004 -41.2848 0.515981 -99.319748 174.01 -41.2857 0.515903 -99.335793 174.039 -41.2689 0.515343 -99.347168 174.065 -41.2527 0.513873 -99.367371 174.075 -41.2694 0.513933 -99.428413 174.086 -41.2695 0.514061 -99.459938 174.074 -41.2547 0.513614 -99.404922 174.082 -41.2473 0.512387 -99.438972 174.106 -41.2413 0.509416 -99.567535 174.111 -41.25 0.509440 -99.677727 174.114 -41.2373 0.507939 -99.631073 174.132 -41.2426 0.504480 -99.859093 174.14 -41.2349 0.503000 -99.786667 174.146 -41.2334 0.501560 -99.760551 174.145 -41.24 0.499240 -99.877411 174.15 -41.2499 0.495559 -100.033699 174.157 -41.2535 0.493648 -100.111855 174.157 -41.2661 0.494097 -100.412506 174.176 -41.2528 0.483389 -100.817123 174.179 -41.2668 0.479448 -101.417503 174.202 -41.2787 0.480050 -101.381088 174.213 -41.2722 0.480311 -101.414970 174.21 -41.2675 0.480305 -101.411469 174.185 -41.2592 0.479934 -101.397263 174.186 -41.2515 0.471116 -102.660988 174.196 -41.2463 0.436155 -112.001930 174.207 -41.2469 0.415551 -124.474792 174.21 -41.2571 0.413270 -126.933670 174.22 -41.2544 0.412894 -126.827156 174.219 -41.2467 0.410456 -127.271645 174.226 -41.2531 0.406913 -128.071335 174.23 -41.247 0.405485 -128.184692 174.243 -41.2524 0.400640 -129.320694 174.247 -41.2464 0.398815 -129.539581 174.254 -41.2512 0.395372 -132.624039 174.253 -41.2609 0.395446 -132.661392 174.266 -41.2541 0.395419 -132.710449 174.256 -41.2457 0.394628 -132.729492 174.277 -41.245 0.392820 -138.624588 174.271 -41.2366 0.389937 -138.474457 174.303 -41.219 0.378643 -146.113937 174.314 -41.2142 0.372896 -150.284851 174.289 -41.2342 0.377912 -154.641922 174.292 -41.2513 0.382764 -157.020767 174.274 -41.2576 0.394856 -159.825226 174.268 -41.2759 0.406511 -162.847015 174.257 -41.2699 0.410025 -163.192749 174.257 -41.2878 0.416350 -165.298889 174.25 -41.2829 0.419123 -165.624237 174.224 -41.2942 0.429785 -167.452545 174.243 -41.3104 0.431950 -168.859421 174.237 -41.3204 0.440760 -170.401978 174.22 -41.3182 0.455061 -171.775162 174.214 -41.3266 0.459982 -172.589157 174.208 -41.3134 0.466874 -172.866150 174.201 -41.3119 0.467748 -172.998047 174.191 -41.3191 0.468441 -173.277008 174.197 -41.3333 0.469622 -173.965515 174.191 -41.3391 0.472943 -174.633804 174.18 -41.335 0.480037 -175.166275 174.166 -41.3384 0.486425 -175.786407 174.152 -41.342 0.490630 -176.233459 174.156 -41.3531 0.491635 -176.619507 174.123 -41.3541 0.504743 -177.827942 174.146 -41.337 0.509386 -177.522415 174.132 -41.3342 0.508898 -177.676682 174.139 -41.3291 0.510048 -177.651566 174.158 -41.3302 0.511271 -177.619049 174.159 -41.3214 0.511303 -177.642746 174.174 -41.3169 0.511933 -177.615402 174.166 -41.3096 0.511856 -177.635208 174.178 -41.3063 0.512364 -177.614059 174.176 -41.2992 0.512389 -177.627609 174.189 -41.2968 0.512675 -177.612152 174.181 -41.2882 0.512535 -177.611496 174.16 -41.2899 0.512169 -177.626587 174.161 -41.3013 0.511973 -177.642471 174.139 -41.3169 0.510421 -177.700455 174.15 -41.2944 0.510917 -177.684738 174.148 -41.2855 0.510859 -177.678864 174.114 -41.301 0.510214 -177.719757 174.113 -41.3064 0.510227 -177.738922 174.122 -41.3085 0.510239 -177.734482 174.109 -41.321 0.509117 -177.822968 174.11 -41.331 0.508374 -177.862640 174.098 -41.3361 0.507864 -177.983536 174.104 -41.3419 0.507474 -177.985382 174.093 -41.3462 0.507653 -178.155487 174.088 -41.3608 0.507571 -178.469131 174.071 -41.3588 0.509950 -178.657227 174.076 -41.366 0.509062 -178.696533 174.069 -41.3803 0.510022 -179.104614 174.066 -41.3901 0.511557 -179.414215 174.056 -41.3885 0.513378 -179.522324 174.041 -41.4042 0.516020 -179.998886 174.034 -41.4367 0.519564 179.177307 174.028 -41.4671 0.524068 178.425461 174.043 -41.4936 0.525860 177.682953 174.061 -41.4982 0.526003 177.371765 174.067 -41.5106 0.528918 176.832001 174.108 -41.5345 0.536626 174.862793 174.148 -41.5584 0.552655 171.898926 174.251 -41.1779 0.508071 -100.060043 174.241 -41.1795 0.507897 -100.000526 174.224 -41.1905 0.507601 -99.934219 174.233 -41.1628 0.508145 -100.023071 174.245 -41.1597 0.508106 -100.082253 174.247 -41.1669 0.508029 -100.097549 174.29 -41.1567 0.508047 -100.262177 174.286 -41.1613 0.508377 -100.214226 174.273 -41.1642 0.508277 -100.177299 174.275 -41.157 0.508075 -100.203178 174.284 -41.1583 0.508078 -100.243217 174.302 -41.1059 0.501051 -100.894600 174.292 -41.1153 0.503765 -100.329567 174.28 -41.1173 0.506911 -100.174026 174.28 -41.1143 0.507038 -100.209335 174.227 -41.2046 0.507760 -99.925354 174.235 -41.2149 0.507949 -99.975441 174.255 -41.2043 0.508079 -100.012947 174.265 -41.1976 0.508246 -100.029076 174.25 -41.1928 0.508103 -100.009026 174.258 -41.1836 0.508234 -100.079689 174.284 -41.177 0.508530 -100.214554 174.29 -41.1768 0.508556 -100.236931 174.292 -41.1676 0.508488 -100.232582 174.32 -41.1613 0.508594 -100.342628 174.312 -41.1779 0.509083 -100.324577 174.34 -41.1775 0.508945 -100.408661 174.333 -41.1675 0.508793 -100.364876 174.362 -41.1564 0.509274 -100.398430 174.376 -41.1345 0.510177 -100.391235 174.371 -41.1245 0.510553 -100.384644 174.344 -41.1461 0.509303 -100.385246 174.33 -41.1473 0.508876 -100.372322 174.329 -41.1333 0.508762 -100.396408 174.321 -41.1307 0.508613 -100.385757 174.293 -41.1358 0.507448 -100.306564 174.303 -41.1272 0.503475 -100.737236 174.318 -41.1256 0.498769 -101.270508 174.317 -41.1184 0.497177 -101.187210 174.325 -41.129 0.493263 -101.622025 174.336 -41.1288 0.490850 -101.683533 174.36 -41.108 0.483595 -101.306213 174.38 -41.0896 0.462050 -101.314308 174.391 -41.095 0.438235 -103.720100 174.391 -41.1183 0.394345 -113.929298 174.378 -41.1474 0.362730 -124.199142 174.367 -41.1738 0.346516 -130.893814 174.375 -41.1831 0.340908 -133.205185 174.364 -41.2012 0.346821 -141.474869 174.343 -41.193 0.365334 -145.811020 174.324 -41.2121 0.369187 -149.569626 174.311 -41.2024 0.371929 -148.261597 174.296 -41.2108 0.374482 -144.554993 174.282 -41.2097 0.376832 -142.574814 174.279 -41.217 0.379466 -142.262482 174.261 -41.2271 0.386159 -138.199493 174.259 -41.2307 0.386648 -136.307816 174.252 -41.2384 0.393561 -130.602081 174.231 -41.2371 0.404780 -127.386841 174.231 -41.2232 0.407377 -126.745850 174.215 -41.2275 0.407716 -126.924423 174.219 -41.2334 0.407910 -126.867088 174.209 -41.2379 0.413343 -125.082298 174.19 -41.2357 0.445579 -107.096207 174.185 -41.2426 0.462495 -103.348770 174.163 -41.2456 0.495351 -99.685753 174.166 -41.2306 0.502223 -99.531151 174.184 -41.2182 0.505404 -99.624657 174.195 -41.2206 0.506303 -99.669388 174.195 -41.2106 0.506327 -99.738953 174.215 -41.2076 0.507388 -99.855888 174.073 -40.9583 0.778874 -86.176331 174.064 -40.9509 0.778239 -86.147385 174.051 -40.9519 0.777825 -86.106201 174.056 -40.9467 0.770754 -86.504723 174.08 -40.9393 0.748582 -87.759895 174.077 -40.9572 0.738300 -88.700005 174.088 -40.9645 0.733171 -88.837860 174.073 -40.9718 0.733548 -88.929863 174.073 -40.9854 0.733746 -88.937180 174.061 -40.9948 0.763399 -86.761971 174.049 -40.9794 0.781917 -85.955467 174.089 -40.8956 0.757342 -86.046227 174.079 -40.9034 0.755703 -86.232925 174.056 -40.9092 0.768907 -85.717308 174.061 -40.8983 0.771643 -85.458466 174.083 -40.8911 0.762713 -85.734444 174.779 -41.0788 0.367990 -67.350555 174.8 -41.077 0.380667 -65.293083 174.789 -41.0921 0.360365 -67.025208 174.773 -41.0983 0.342340 -69.817711 174.951 -40.827 0.609663 -58.517418 174.913 -40.8697 0.544999 -61.786823 174.885 -40.8891 0.520500 -62.638897 174.868 -40.8863 0.524978 -62.388920 174.869 -40.8747 0.541265 -61.699673 174.906 -40.8477 0.578001 -59.965687 174.921 -40.8208 0.599927 -59.435238 173.903 -40.852 0.826759 -84.841148 173.912 -40.862 0.825949 -84.932182 173.906 -40.875 0.829096 -84.975060 173.9 -40.858 0.836702 -84.550514 173.883 -40.862 0.839046 -84.635063 173.872 -40.873 0.840849 -84.748566 173.875 -40.879 0.840820 -84.807915 173.852 -40.901 0.849295 -85.059654 173.837 -40.905 0.855245 -84.930695 173.832 -40.921 0.870479 -84.595985 173.819 -40.928 1.055337 -75.877380 173.803 -40.929 1.121241 -73.790756 173.787 -40.943 1.178967 -72.918495 173.771 -40.943 1.217995 -72.759659 173.777 -40.938 1.219086 -72.822807 173.773 -40.93 1.219643 -72.895782 173.788 -40.917 1.217827 -73.046150 173.786 -40.91 1.216893 -73.062775 173.794 -40.91 1.216763 -73.095856 173.788 -40.896 1.214553 -73.124306 173.797 -40.891 1.214381 -73.123337 173.783 -40.882 1.213883 -73.109787 173.771 -40.891 1.212419 -73.100143 173.777 -40.876 1.205669 -73.265846 173.771 -40.86 1.198347 -73.344307 173.781 -40.835 1.181631 -73.680016 173.787 -40.834 1.176504 -73.756584 173.791 -40.858 1.176747 -73.792496 173.817 -40.857 1.177388 -73.805611 173.83 -40.87 1.178938 -73.757133 173.843 -40.865 1.179104 -73.795425 173.834 -40.858 1.178644 -73.797523 173.828 -40.858 1.178241 -73.800446 173.809 -40.849 1.176552 -73.828773 173.814 -40.834 1.174958 -73.869194 173.805 -40.83 1.174139 -73.854591 173.809 -40.819 1.170323 -73.998718 173.804 -40.812 1.168259 -74.033447 173.795 -40.816 1.167274 -74.000732 173.833 -40.772 1.123343 -75.024429 173.83 -40.755 1.111327 -75.118065 173.838 -40.769 1.110899 -75.175163 173.841 -40.75 1.097928 -75.448746 173.854 -40.747 1.085635 -75.762665 173.865 -40.731 1.064554 -75.959450 173.881 -40.737 1.048421 -76.471275 173.86 -40.769 1.044743 -76.749748 173.861 -40.775 1.044225 -76.755455 173.872 -40.776 1.043701 -76.745872 173.866 -40.808 1.044212 -76.729912 173.887 -40.789 1.043747 -76.761681 173.887 -40.78 1.043506 -76.750679 173.903 -40.803 1.044942 -76.720200 173.909 -40.782 1.044062 -76.769691 173.932 -40.7688 1.044775 -76.818893 173.884 -40.7693 1.043128 -76.752563 173.939 -40.7454 1.029188 -76.750015 173.943 -40.7334 1.019312 -76.881432 173.937 -40.7257 1.012994 -76.927078 173.956 -40.721 0.998660 -77.057678 173.96 -40.7094 0.990190 -77.097633 173.952 -40.6926 0.976574 -77.166817 173.968 -40.7058 0.926275 -79.373543 173.956 -40.7426 0.874754 -82.365753 173.962 -40.7562 0.862876 -82.709442 173.94 -40.7842 0.843379 -83.955399 173.946 -40.794 0.838760 -84.036011 173.936 -40.8057 0.832775 -84.350540 173.94 -40.8131 0.830049 -84.394356 173.929 -40.8177 0.828150 -84.545502 173.939 -40.8235 0.826565 -84.529434 173.917 -40.8373 0.825696 -84.702789 173.98 -41.1064 0.899198 -74.933998 173.894 -40.879 0.834964 -84.870621 171.985 -37.8093 1.027920 -69.750641 171.812 -37.9882 1.025460 -68.733551 172.912 -37.1963 1.052815 -73.228249 173.162 -37.2501 1.064209 -73.295601 172.238 -37.7001 1.036742 -70.568672 172.586 -37.4876 1.046320 -71.857178 172.333 -38.2033 1.058423 -68.796608 172.704 -37.6384 1.056000 -71.474457 171.471 -38.4705 1.024684 -65.855270 172.483 -37.6531 1.046701 -71.118790 172.937 -37.7274 1.068515 -71.513840 172.572 -38.2805 1.072355 -69.001579 173.251 -37.737 1.081090 -71.950691 173.116 -37.9067 1.081402 -71.241348 173.464 -37.0215 1.070310 -74.217476 173.374 -36.6998 1.061249 -75.124123 172.921 -38.2496 1.086020 -69.851746 173.528 -37.4753 1.083316 -73.014435 171.924 -38.6181 1.055037 -66.070267 173.635 -37.1716 1.079254 -73.927795 173.515 -37.6778 1.088638 -72.455833 172.739 -38.3146 1.081120 -69.249496 171.655 -38.6723 1.042701 -65.154167 173.718 -37.3687 1.086521 -73.496628 171.844 -38.7691 1.057222 -65.068230 173.718 -37.5623 1.091779 -73.003029 172.651 -38.4417 1.082647 -68.558670 171.397 -38.6912 1.029141 -64.420204 172.491 -38.5757 1.081554 -67.590736 173.287 -38.0786 1.093827 -71.041283 173.121 -38.3257 1.097323 -70.014259 171.536 -38.827 1.042314 -63.951694 171.89 -38.9333 1.067483 -64.273422 171.35 -38.8459 1.032309 -63.337650 171.159 -38.7672 1.018409 -63.351669 173.27 -38.2631 1.100284 -70.488533 173.895 -37.6452 1.099484 -73.022781 173.266 -38.4092 1.107480 -70.028648 172.454 -38.7575 1.089132 -66.603233 171.219 -38.9641 1.029002 -62.230385 172.254 -39.0774 1.095484 -64.412933 172.836 -38.4036 1.088917 -69.161835 171.441 -38.9757 1.042745 -62.764580 170.921 -38.7536 1.003945 -62.820602 172.03 -39.1139 1.084374 -63.690861 170.964 -38.9429 1.012692 -61.674644 173.552 -36.5691 1.065481 -75.579140 171.319 -39.1259 1.041133 -61.438335 171.798 -39.1079 1.070094 -63.019978 170.783 -38.8598 0.999118 -61.741035 171.072 -39.1432 1.026172 -60.628956 171.556 -39.141 1.056792 -62.061012 171.402 -39.2697 1.052175 -60.692257 173.62 -36.4323 1.065825 -75.998695 170.733 -39.0049 1.000434 -60.610302 172.695 -38.5989 1.092409 -68.000778 173.718 -36.6333 1.072239 -75.439125 174.053 -37.1594 1.091606 -74.296127 171.221 -39.2615 1.040078 -60.235031 171.561 -39.2969 1.063797 -60.996872 171.475 -39.4093 1.062782 -59.903522 172.418 -39.1046 1.107209 -64.592606 170.551 -39.7481 1.008536 -54.920387 170.556 -39.3557 0.998913 -57.662102 170.632 -39.8563 1.017002 -54.396568 170.856 -39.9088 1.035099 -54.663342 170.585 -39.6121 1.007523 -55.960888 170.634 -39.1874 0.999341 -59.068790 171.057 -39.8514 1.048455 -55.641209 171.386 -39.5413 1.061898 -58.713669 171.188 -39.5505 1.048134 -58.116997 170.62 -39.4716 1.006350 -57.029694 171.017 -39.582 1.037022 -57.409012 170.812 -39.5535 1.021843 -57.014423 170.752 -39.3658 1.012140 -58.154892 171.028 -39.3875 1.031528 -58.801907 171.282 -39.3992 1.049245 -59.443062 171.319 -39.6914 1.062780 -57.478985 171.125 -39.7136 1.049337 -56.801205 170.935 -39.7257 1.035734 -56.170315 170.73 -39.7353 1.021096 -55.527573 171.265 -39.8704 1.065248 -56.091389 174.087 -37.0827 1.091587 -74.490952 171.46 -39.8081 1.077492 -57.038952 174.045 -37.2518 1.093445 -74.082527 171.719 -39.2619 1.072610 -61.773483 171.665 -39.4159 1.076242 -60.433735 172.994 -38.4024 1.095412 -69.534126 171.497 -39.6644 1.074705 -58.124821 171.559 -39.5359 1.074048 -59.217297 172.339 -39.1828 1.106565 -64.011307 174.038 -37.8745 1.112412 -72.736862 172.495 -39.0397 1.108738 -65.098213 173.126 -38.4394 1.102972 -69.672318 171.448 -39.9367 1.081862 -56.137196 171.623 -39.761 1.088040 -57.793835 173.961 -38.042 1.117376 -72.250969 171.904 -39.2429 1.083362 -62.531651 172.052 -39.2571 1.093338 -62.894978 172.199 -39.2285 1.100405 -63.461494 171.654 -39.6405 1.085381 -58.725082 172.517 -38.8683 1.099000 -66.170166 172.623 -38.7065 1.095123 -67.279282 171.624 -39.9102 1.094561 -56.801960 173.697 -38.1323 1.110538 -71.599480 171.765 -39.8184 1.101526 -57.813332 171.833 -39.3697 1.085440 -61.369404 171.742 -39.7177 1.095407 -58.431183 171.816 -39.9356 1.111320 -57.232559 174.046 -37.3787 1.096864 -73.795937 171.975 -39.9498 1.125143 -57.721863 171.805 -39.6218 1.095865 -59.335640 171.922 -39.8409 1.115135 -58.213123 171.811 -39.4956 1.090147 -60.311050 172.477 -39.2139 1.117871 -64.093040 171.867 -39.735 1.105773 -58.738197 174.108 -37.7381 1.109667 -73.104469 171.987 -39.3511 1.094553 -62.020844 172.102 -39.9658 1.136550 -58.147873 171.698 -39.5421 1.084208 -59.577675 172.811 -38.5237 1.093665 -68.618179 172.348 -39.2856 1.113441 -63.420910 171.938 -39.6542 1.107362 -59.582150 172.083 -39.8584 1.128956 -58.739445 172.027 -39.7361 1.118307 -59.344303 172.127 -39.3407 1.102792 -62.514801 174.071 -37.9638 1.118956 -72.602875 174.136 -37.1439 1.094831 -74.407707 174.246 -37.3166 1.104295 -74.151886 171.929 -39.5605 1.101904 -60.230999 172.203 -39.9162 1.141458 -58.850216 171.941 -39.4559 1.097304 -61.055702 172.062 -39.6112 1.114298 -60.318256 172.151 -39.7738 1.129603 -59.548084 172.207 -39.834 1.137025 -59.366802 173.704 -38.2572 1.118794 -71.270790 172.551 -39.1118 1.117329 -64.804855 172.247 -39.3383 1.110218 -62.842251 174.052 -37.0053 1.088959 -74.631638 172.07 -39.4357 1.105013 -61.624794 172.166 -39.6928 1.126336 -60.123753 172.291 -39.9549 1.150432 -58.991058 172.027 -39.5172 1.106649 -60.878815 172.215 -39.6036 1.124717 -60.867912 172.148 -39.5178 1.115163 -61.245369 172.498 -39.4239 1.133065 -62.809200 172.32 -39.869 1.147137 -59.589005 172.207 -39.4258 1.113301 -62.098072 172.274 -39.7625 1.137756 -60.049866 172.381 -39.7014 1.141513 -60.779202 172.442 -39.554 1.137055 -61.850090 172.478 -39.3321 1.125785 -63.368717 172.416 -39.7903 1.148896 -60.388977 172.277 -39.675 1.133015 -60.601231 172.358 -39.3994 1.121564 -62.672092 172.348 -39.6146 1.134368 -61.202660 172.477 -39.6411 1.144384 -61.427219 172.306 -39.5137 1.125526 -61.738651 172.507 -38.956 1.104099 -65.629532 172.392 -39.9519 1.157177 -59.421333 172.428 -39.479 1.131639 -62.295036 172.458 -39.8782 1.156801 -60.079479 172.921 -38.488 1.096791 -69.055092 172.761 -38.7035 1.103549 -67.607864 172.613 -38.8172 1.101640 -66.668785 172.834 -38.6284 1.102150 -68.167702 172.928 -38.5745 1.103469 -68.649643 173.416 -38.431 1.117421 -70.204521 172.715 -38.7799 1.106391 -67.083878 172.619 -39.1903 1.127488 -64.481773 172.621 -38.9169 1.109813 -66.092186 172.618 -39.0193 1.116695 -65.464241 172.591 -39.2818 1.130940 -63.885597 172.867 -38.7078 1.111345 -67.758873 172.532 -39.5013 1.140010 -62.408615 172.593 -39.3707 1.136545 -63.348602 173.045 -38.5259 1.104701 -69.177643 172.596 -39.4444 1.141132 -62.904343 174.146 -37.2996 1.098735 -74.071724 173.349 -38.5308 1.121306 -69.698425 172.942 -38.6622 1.112155 -68.177734 172.84 -38.7891 1.116173 -67.242561 173.376 -38.3359 1.108214 -70.470886 172.679 -39.109 1.127069 -65.067284 172.745 -38.8701 1.115694 -66.600868 173.018 -38.6153 1.112271 -68.606186 172.715 -38.9591 1.119926 -66.010918 172.51 -39.7278 1.151234 -61.051163 172.543 -39.8145 1.158192 -60.720909 172.567 -39.5807 1.146658 -62.034149 172.957 -38.7451 1.120487 -67.720772 172.571 -39.8989 1.164868 -60.429237 172.718 -39.1773 1.134188 -64.742683 173.509 -38.3455 1.115141 -70.685852 172.658 -39.5102 1.148701 -62.677624 172.691 -39.3274 1.141063 -63.811535 172.504 -39.9609 1.165072 -59.863388 172.871 -38.8724 1.124846 -66.813515 173.531 -38.4515 1.127435 -70.297462 172.755 -39.0355 1.128135 -65.645027 172.697 -39.2481 1.136862 -64.286041 173.05 -38.692 1.121568 -68.215096 172.963 -38.8302 1.127986 -67.234276 173.382 -38.6347 1.136399 -69.173744 172.838 -38.9539 1.128646 -66.269875 172.703 -39.4144 1.146626 -63.328579 172.806 -39.1268 1.137736 -65.213074 172.683 -39.6009 1.154753 -62.257267 173.72 -38.3572 1.130685 -70.957397 173.125 -38.6184 1.118644 -68.798851 173.195 -38.5251 1.111993 -69.465782 172.598 -39.9665 1.170923 -60.254574 172.796 -39.219 1.142422 -64.649124 173.069 -38.7814 1.130920 -67.721603 172.77 -39.286 1.144274 -64.209091 172.873 -39.045 1.137423 -65.804184 172.761 -39.4761 1.153476 -63.116840 172.956 -38.9117 1.133888 -66.745346 172.602 -39.6649 1.153341 -61.681110 173.806 -38.2066 1.120914 -71.580894 172.643 -39.7546 1.160487 -61.374451 174.06 -38.0404 1.124203 -72.427010 172.767 -39.545 1.157028 -62.771885 174.167 -37.4739 1.104098 -73.726135 172.654 -39.8446 1.165972 -61.000809 172.795 -39.351 1.149585 -63.887650 172.912 -39.1114 1.144398 -65.493065 173.073 -38.8782 1.139365 -67.169006 172.956 -38.9878 1.139391 -66.296478 173.803 -38.2958 1.129923 -71.294540 173.546 -38.5344 1.137477 -69.944252 172.791 -39.6208 1.161843 -62.468269 172.91 -39.1906 1.148863 -65.030289 172.877 -39.2853 1.151689 -64.424171 173.183 -38.7189 1.132347 -68.313690 173.402 -38.7014 1.145100 -68.834137 173.623 -38.3196 1.119499 -70.945496 172.825 -39.4241 1.155056 -63.536774 173.62 -38.4029 1.128543 -70.620346 172.716 -39.6817 1.160638 -61.964016 172.672 -39.9261 1.171887 -60.749367 172.978 -39.0623 1.145999 -65.900345 173.18 -38.8232 1.141924 -67.702721 172.849 -39.4944 1.159579 -63.225910 173.462 -38.5068 1.127804 -69.948189 173.033 -38.9476 1.141921 -66.675507 173.258 -38.6232 1.127043 -69.013405 174.117 -37.8212 1.114249 -72.959389 172.997 -39.1333 1.151642 -65.522858 172.865 -39.567 1.163417 -62.908779 172.97 -39.255 1.156325 -64.770393 172.879 -39.6314 1.166566 -62.657150 173.957 -38.1343 1.124954 -72.030518 173.024 -39.204 1.157396 -65.162483 172.904 -39.3698 1.157525 -63.999214 173.63 -38.4883 1.138697 -70.280716 173.465 -38.755 1.154905 -68.661156 172.834 -39.6988 1.167345 -62.255703 173.284 -38.7832 1.145312 -68.135979 173.313 -38.704 1.139449 -68.646889 173.181 -38.8996 1.148496 -67.254646 173.464 -38.5795 1.136087 -69.595062 173.052 -39.0099 1.147524 -66.346603 172.729 -39.8018 1.167414 -61.474968 173.122 -38.9545 1.148582 -66.811104 172.751 -39.7457 1.165602 -61.795891 172.984 -39.3204 1.160224 -64.427719 173.283 -38.8776 1.153712 -67.589554 172.929 -39.4438 1.162146 -63.649040 173.073 -39.0793 1.153702 -65.980583 172.949 -39.5155 1.165763 -63.329666 174.033 -36.924 1.087184 -74.811905 173.897 -38.1848 1.125457 -71.791405 173.095 -39.1484 1.159117 -65.619331 172.97 -39.5958 1.169338 -63.016411 173.78 -38.4119 1.141255 -70.845215 174.034 -38.0977 1.127151 -72.249367 172.769 -39.8722 1.172937 -61.367474 173.149 -39.0278 1.155590 -66.433510 172.768 -39.956 1.177885 -61.092285 173.811 -38.3674 1.138559 -71.057404 174.276 -37.4918 1.109981 -73.828209 172.945 -39.6738 1.170902 -62.650620 174.124 -37.8896 1.118466 -72.842323 173.645 -38.5739 1.148910 -69.922523 174.216 -37.6275 1.111517 -73.481071 172.833 -39.7917 1.171404 -61.901390 173.057 -39.2708 1.162615 -64.835258 173.494 -38.8322 1.164120 -68.301048 173.237 -38.9705 1.157852 -66.948318 173.122 -39.2175 1.164543 -65.257988 173.711 -38.4417 1.139574 -70.602776 174.163 -37.0846 1.095332 -74.557793 173.009 -39.3931 1.164638 -64.069695 173.166 -39.0979 1.161193 -66.050735 172.932 -39.7452 1.172955 -62.365562 173.891 -38.2531 1.131950 -71.572731 173.032 -39.4654 1.168370 -63.733429 173.368 -38.7535 1.148069 -68.476334 173.037 -39.6549 1.173485 -62.928799 173.549 -38.5992 1.144729 -69.636864 173.489 -38.6629 1.147195 -69.200371 173.344 -38.9522 1.163746 -67.275795 173.051 -39.5375 1.171342 -63.428387 173.377 -38.8951 1.161621 -67.685303 173.084 -39.3411 1.167136 -64.482880 174.029 -36.8287 1.085966 -75.038162 174.214 -37.7058 1.115092 -73.328613 173.386 -38.8247 1.156087 -68.109413 173.24 -39.0563 1.163800 -66.442757 173.069 -39.5991 1.173386 -63.202381 172.871 -39.8614 1.175796 -61.807926 173.017 -39.7166 1.174460 -62.671761 173.187 -39.1625 1.166197 -65.704132 173.519 -38.8969 1.171205 -67.993195 174.22 -37.2398 1.101210 -74.287453 173.155 -39.2866 1.169584 -64.911720 173.327 -39.0266 1.167839 -66.802185 172.844 -39.983 1.182019 -61.382500 173.221 -39.2287 1.171551 -65.359337 173.553 -38.7881 1.164066 -68.666107 173.242 -39.1168 1.167494 -66.087143 173.729 -38.5165 1.148902 -70.326988 173.188 -39.3579 1.173799 -64.547234 173.112 -39.4141 1.171137 -64.130722 173.568 -38.7243 1.159184 -69.035698 173.863 -38.4237 1.148762 -70.940933 173.008 -39.7715 1.175720 -62.486656 172.853 -39.9235 1.178659 -61.565674 174.136 -37.0207 1.093089 -74.668846 173.134 -39.4888 1.173966 -63.784393 173.602 -38.6524 1.154117 -69.470337 172.954 -39.8229 1.176397 -62.198109 173.32 -39.098 1.171919 -66.349655 173.155 -39.5677 1.175926 -63.461098 173.896 -38.3419 1.142170 -71.297600 173.401 -39.0015 1.171224 -67.110703 173.441 -38.9421 1.169580 -67.549782 173.088 -39.699 1.175753 -62.878559 173.136 -39.6485 1.176037 -63.128391 173.291 -39.1714 1.173595 -65.833382 173.699 -38.6458 1.160350 -69.692986 173.266 -39.2977 1.176914 -65.006195 174.201 -37.1358 1.098081 -74.491310 174.191 -37.779 1.117189 -73.149261 173.303 -39.2364 1.177251 -65.435165 173.758 -38.589 1.158651 -70.070084 173.524 -38.9561 1.176302 -67.660774 173.045 -39.8129 1.177332 -62.482513 174.05 -36.7495 1.086483 -75.252220 173.417 -39.0703 1.177004 -66.722725 173.09 -39.7617 1.176802 -62.710953 173.66 -38.7085 1.163939 -69.307007 173.287 -39.3732 1.179724 -64.576622 173.443 -38.8781 1.164486 -67.930153 173.225 -39.4348 1.177350 -64.166443 174.027 -38.1567 1.132482 -72.092865 172.943 -39.9015 1.179450 -61.971832 172.92 -39.9689 1.182569 -61.756767 173.796 -38.4694 1.148671 -70.646210 173.231 -39.5134 1.178193 -63.785313 173.359 -39.2718 1.182183 -65.288025 173.392 -39.1466 1.179635 -66.183342 173.214 -39.6209 1.177739 -63.332695 173.978 -38.2096 1.134036 -71.854713 173.609 -38.9318 1.180263 -68.015411 173.042 -39.8779 1.179282 -62.348267 173.571 -39.0034 1.183151 -67.509026 173.973 -38.2884 1.142028 -71.609001 174.303 -37.4382 1.109940 -73.973206 173.316 -39.4273 1.181766 -64.296417 173.257 -39.576 1.179076 -63.546215 173.645 -38.7807 1.169669 -68.907204 173.596 -38.851 1.172720 -68.430847 173.792 -38.653 1.167562 -69.850029 173.378 -39.2125 1.181505 -65.712044 173.163 -39.7192 1.177089 -62.955601 173.479 -39.0084 1.177110 -67.248489 173.357 -39.331 1.183283 -64.905235 173.867 -38.485 1.155616 -70.719315 173.009 -39.9502 1.182039 -62.134632 173.742 -38.7031 1.169016 -69.503555 173.117 -39.8292 1.178092 -62.624519 173.47 -39.1286 1.184232 -66.461021 173.31 -39.4816 1.181467 -64.004913 173.833 -38.5368 1.158507 -70.444252 173.71 -38.7475 1.171028 -69.222511 173.225 -39.679 1.177845 -63.153881 173.439 -39.2584 1.187470 -65.493950 173.244 -39.7432 1.177500 -63.018223 173.306 -39.535 1.180823 -63.749161 173.181 -39.7848 1.177545 -62.841759 173.531 -39.0753 1.185357 -66.964584 174.261 -37.7581 1.121403 -73.300903 173.416 -39.3051 1.186924 -65.137642 173.374 -39.3923 1.184909 -64.534637 173.298 -39.6376 1.179339 -63.348911 173.474 -39.1964 1.187807 -65.988632 173.341 -39.5813 1.181202 -63.567707 173.827 -38.7171 1.176070 -69.625221 173.138 -39.8917 1.179109 -62.601963 173.67 -38.8871 1.180565 -68.414345 174.229 -37.0887 1.098784 -74.617241 173.683 -38.8393 1.177377 -68.697060 173.198 -39.8478 1.177546 -62.779957 174.116 -36.9513 1.091436 -74.807220 173.768 -38.7484 1.174935 -69.344818 173.625 -39.0544 1.190520 -67.353668 173.308 -39.7053 1.178082 -63.159157 173.086 -39.9359 1.180907 -62.416386 173.547 -39.1512 1.191043 -66.489372 173.432 -39.3541 1.188470 -64.813629 173.261 -39.807 1.176731 -62.931938 173.384 -39.4544 1.185112 -64.173546 173.852 -38.605 1.166942 -70.187874 173.377 -39.6268 1.180720 -63.409122 173.955 -38.4089 1.153806 -71.170738 173.662 -38.9952 1.188543 -67.806770 173.454 -39.4166 1.189495 -64.406082 173.994 -38.3537 1.150756 -71.435944 173.51 -39.257 1.192625 -65.604156 174.126 -38.0218 1.128235 -72.573296 173.378 -39.6772 1.178861 -63.255627 173.743 -38.7995 1.177874 -69.040756 173.49 -39.3143 1.192195 -65.138496 173.154 -39.9543 1.179930 -62.624260 173.386 -39.5247 1.183953 -63.816288 173.822 -38.7761 1.181069 -69.339310 173.215 -39.9078 1.177384 -62.781391 173.671 -39.0911 1.196087 -67.264542 173.906 -38.5169 1.161741 -70.659355 173.323 -39.7678 1.176355 -63.050491 173.494 -39.3719 1.192426 -64.706528 173.457 -39.4825 1.188061 -64.010811 173.575 -39.2258 1.196878 -65.965622 174.24 -37.18 1.100972 -74.435829 174.001 -36.6996 1.083710 -75.367226 173.42 -39.5901 1.182863 -63.523331 173.613 -39.1129 1.193768 -66.937538 173.711 -38.9365 1.187064 -68.259628 173.932 -38.4713 1.159060 -70.896606 173.682 -39.1346 1.200023 -67.013817 173.275 -39.8674 1.175631 -62.908363 173.528 -39.4125 1.193960 -64.409752 173.385 -39.7365 1.176542 -63.129395 173.754 -38.8732 1.184848 -68.705048 173.751 -38.9941 1.193817 -68.090126 174.299 -37.5489 1.113754 -73.750046 174.242 -37.8042 1.122710 -73.180214 174.035 -38.2561 1.143481 -71.813660 173.63 -39.1733 1.198782 -66.541344 173.712 -39.0521 1.195893 -67.642982 174.289 -37.6011 1.115440 -73.638809 174.109 -38.0803 1.132011 -72.413055 173.23 -39.965 1.177210 -62.839413 173.876 -38.6648 1.174469 -69.977257 174.287 -37.6623 1.118398 -73.528442 173.507 -39.4522 1.191453 -64.153915 173.481 -39.5474 1.186185 -63.665222 173.288 -39.9248 1.174507 -62.939495 173.877 -38.7558 1.182849 -69.570435 173.568 -39.2959 1.198168 -65.348671 173.823 -38.8306 1.185646 -69.088364 173.387 -39.7872 1.174314 -63.064445 173.449 -39.6494 1.180477 -63.310356 174.073 -38.2032 1.141099 -72.039017 173.562 -39.3632 1.197537 -64.776009 173.345 -39.831 1.174103 -63.007198 173.915 -38.5669 1.167670 -70.477409 174.146 -37.9331 1.123334 -72.791931 173.702 -39.1859 1.205325 -66.686066 173.483 -39.6048 1.183144 -63.426720 174.194 -37.847 1.121557 -73.026253 173.584 -39.4153 1.197599 -64.338737 173.451 -39.712 1.176933 -63.155403 173.661 -39.2295 1.204695 -66.126122 173.834 -38.8798 1.190151 -68.891251 174.052 -38.3119 1.150777 -71.676682 173.818 -38.9377 1.193577 -68.564873 173.926 -38.6238 1.174133 -70.266541 173.528 -39.4979 1.190426 -63.858986 173.783 -39.042 1.199113 -67.951836 173.295 -39.9739 1.173807 -63.008617 174.105 -36.8828 1.090271 -74.951187 174.289 -37.7142 1.121197 -73.428947 173.72 -39.1016 1.200027 -67.378006 174.156 -37.9753 1.127353 -72.720047 173.564 -39.4555 1.194425 -64.072105 174.091 -38.1387 1.136052 -72.243202 173.634 -39.2814 1.204002 -65.553406 174.112 -36.8331 1.090199 -75.070953 173.552 -39.5426 1.188640 -63.591454 173.338 -39.8893 1.172623 -63.000538 173.885 -38.8016 1.187216 -69.385666 173.46 -39.7762 1.172713 -63.064156 173.908 -38.7165 1.181580 -69.818993 173.526 -39.6407 1.181142 -63.251637 173.63 -39.3366 1.203725 -64.997169 173.42 -39.8244 1.171408 -63.053680 174.022 -38.4023 1.158123 -71.313011 173.541 -39.5879 1.185188 -63.412895 173.688 -39.7533 1.164399 -62.666264 173.65 -39.6514 1.179544 -62.936829 173.526 -39.7343 1.173582 -63.051765 173.678 -39.4876 1.198151 -63.569038 173.674 -39.7985 1.158585 -62.733627 173.682 -39.7009 1.172361 -62.730942 173.748 -39.826 1.148055 -62.530544 173.833 -39.8955 1.124914 -62.445873 173.728 -39.7759 1.158276 -62.529675 173.982 -38.5278 1.168435 -70.771393 173.538 -39.787 1.168481 -63.004921 173.597 -39.8226 1.161037 -62.939041 173.775 -39.0871 1.202127 -67.683746 173.753 -39.9074 1.133414 -62.790401 173.661 -39.9128 1.143932 -63.040714 173.61 -39.9403 1.146634 -63.200085 173.371 -39.9487 1.169183 -63.110374 173.683 -39.9743 1.132648 -63.285866 173.605 -39.5677 1.188042 -63.354500 173.527 -39.9378 1.156226 -63.205357 173.451 -39.9174 1.164434 -63.141399 173.453 -39.9664 1.161826 -63.253662 173.845 -39.948 1.112700 -62.701714 173.596 -39.6242 1.182790 -63.166534 173.632 -39.3946 1.202102 -64.439178 174.018 -38.4587 1.163945 -71.105835 173.593 -39.8866 1.154136 -63.052193 173.507 -39.6857 1.177885 -63.161938 173.585 -39.6863 1.176725 -63.029057 173.604 -39.5069 1.193118 -63.668179 173.828 -39.008 1.199034 -68.275253 173.889 -38.9795 1.200225 -68.599190 173.592 -39.9947 1.143588 -63.437637 173.878 -38.9002 1.194357 -68.921333 173.612 -39.7547 1.168136 -62.883926 173.625 -39.4498 1.198209 -63.990963 173.983 -38.5931 1.175028 -70.513062 173.885 -39.0281 1.203084 -68.385895 173.848 -39.0682 1.204168 -68.076927 173.888 -38.8551 1.191665 -69.150032 173.67 -39.5427 1.192182 -63.278481 173.499 -39.8518 1.165366 -63.052143 173.981 -38.6391 1.179245 -70.326729 173.67 -39.8582 1.150383 -62.848022 173.406 -39.8766 1.169546 -63.064468 173.778 -39.9853 1.116504 -63.161846 173.946 -38.6736 1.180138 -70.097153 173.898 -38.9331 1.197656 -68.831383 174.29 -37.3825 1.108001 -74.062202 173.946 -38.8929 1.197834 -69.150818 173.67 -39.6005 1.185692 -63.022400 173.807 -39.859 1.135471 -62.393681 174.282 -37.213 1.103919 -74.414848 174.065 -38.5146 1.173002 -70.988739 173.764 -39.145 1.206276 -67.284515 174.069 -38.3671 1.157947 -71.523590 174.104 -38.2674 1.150244 -71.899147 174.179 -37.8993 1.123840 -72.907166 174.049 -38.5725 1.177533 -70.740288 173.899 -39.979 1.097020 -62.719261 173.936 -38.765 1.187572 -69.674850 174.183 -38.015 1.132973 -72.678162 174.135 -38.1754 1.143463 -72.222168 174.079 -38.4188 1.164259 -71.369431 174.136 -38.3275 1.158998 -71.776878 174.172 -36.906 1.093729 -74.947273 174.176 -38.0609 1.136198 -72.561928 173.976 -38.7209 1.186421 -69.960411 174.268 -37.8436 1.127574 -73.149292 174.296 -37.7971 1.126783 -73.282639 174.201 -37.9374 1.128591 -72.863937 174.011 -38.6765 1.184654 -70.237381 174.17 -38.1238 1.141540 -72.414078 174.036 -38.6283 1.181992 -70.499329 174.104 -36.785 1.089471 -75.186440 174.206 -37.0354 1.096796 -74.701355 173.728 -39.235 1.211461 -66.305901 174.149 -38.2228 1.149338 -72.113976 174.348 -37.5217 1.115898 -73.875671 174.351 -37.5755 1.118629 -73.777473 174.259 -37.132 1.101060 -74.557533 174.1 -38.4678 1.170757 -71.238510 174.351 -37.6308 1.121433 -73.678650 174.325 -37.7499 1.126162 -73.420242 174.238 -37.892 1.128394 -73.010651 174.128 -38.5078 1.176707 -71.154854 174.224 -37.9829 1.134034 -72.805443 174.133 -38.3889 1.165056 -71.577644 174.178 -38.2714 1.156448 -72.026146 173.746 -39.7344 1.164441 -62.444458 174.197 -38.1822 1.149170 -72.308151 174.198 -36.9694 1.095625 -74.834732 174.357 -37.6924 1.125198 -73.575058 174.235 -38.0332 1.139104 -72.720062 174.134 -38.4336 1.169584 -71.426865 173.787 -39.7727 1.154669 -62.274715 174.326 -37.8335 1.131686 -73.265747 174.237 -38.0864 1.143746 -72.601929 174.318 -37.3263 1.108129 -74.216751 174.119 -38.554 1.180582 -70.960976 174.271 -37.9395 1.134688 -72.969406 173.891 -39.908 1.113862 -62.250610 174.351 -37.4674 1.113925 -73.984444 174.04 -38.7219 1.190617 -70.117996 174.248 -38.1407 1.149440 -72.494949 173.715 -39.6435 1.179941 -62.714180 174.298 -37.1694 1.103750 -74.518013 173.907 -39.9469 1.102477 -62.437130 174.076 -38.6732 1.188655 -70.408493 173.719 -39.5685 1.190304 -62.959846 174.355 -37.4138 1.112431 -74.090401 173.689 -39.4321 1.204011 -63.955719 174.113 -38.6165 1.186103 -70.719666 173.959 -38.823 1.193624 -69.482887 174.221 -38.3181 1.164181 -71.971100 174.211 -38.2276 1.154538 -72.206604 174.359 -37.7922 1.131411 -73.390007 173.954 -38.9543 1.201958 -68.911804 174.278 -37.0935 1.101251 -74.654716 173.827 -39.8117 1.143166 -62.155651 173.733 -39.602 1.185824 -62.761841 174.309 -37.2657 1.106345 -74.332680 174.317 -37.8858 1.134511 -73.147751 174.174 -38.4729 1.176342 -71.378685 174.198 -38.3699 1.167726 -71.765984 174.161 -36.8547 1.092727 -75.054192 174.3 -37.996 1.141360 -72.897675 173.773 -39.6768 1.173279 -62.372192 174.19 -38.5313 1.183012 -71.209419 174.272 -38.1982 1.156357 -72.393639 174.298 -38.0546 1.145763 -72.775978 174.364 -37.3611 1.111446 -74.205078 174.251 -37.0016 1.098453 -74.810944 174.391 -37.8414 1.137061 -73.353989 173.946 -39.0157 1.205037 -68.640854 174.261 -38.2643 1.161746 -72.196388 174.004 -38.7699 1.192319 -69.827423 173.742 -39.5227 1.196863 -63.092621 174.187 -38.4203 1.172038 -71.581589 174.302 -38.1045 1.150216 -72.674713 174.343 -37.9428 1.140609 -73.080971 174.18 -38.5838 1.187380 -70.995567 174.315 -38.15 1.155017 -72.591019 174.16 -36.807 1.092366 -75.164200 174.41 -37.5487 1.121542 -73.921272 174.413 -37.6005 1.124286 -73.828430 174.418 -37.6521 1.127394 -73.745628 174.291 -38.3174 1.168672 -72.107681 174.108 -38.7223 1.194981 -70.285866 174.392 -37.744 1.130779 -73.531624 173.875 -39.8544 1.128293 -62.048370 174.147 -38.6745 1.193527 -70.575226 174.409 -37.4963 1.118981 -74.012405 174.24 -36.9131 1.096865 -74.983757 174.19 -38.6316 1.192411 -70.847534 174.392 -37.9005 1.141101 -73.238525 173.951 -39.9714 1.088494 -62.427608 174.432 -37.7001 1.130999 -73.678558 174.266 -38.3598 1.171329 -71.939850 174.069 -38.7692 1.196233 -69.999786 174.017 -38.8628 1.199762 -69.476318 174.242 -38.4523 1.178790 -71.596100 174.376 -37.985 1.146001 -73.048531 174.25 -38.4056 1.174781 -71.765854 174.348 -38.1868 1.160276 -72.561691 174.424 -37.7859 1.135717 -73.511101 174.242 -38.4985 1.183210 -71.442703 174.334 -38.2353 1.163771 -72.418564 174.361 -38.0308 1.148465 -72.933144 174.334 -38.2855 1.168314 -72.285896 174.356 -38.077 1.151717 -72.823532 174.345 -37.2078 1.107126 -74.492287 174.251 -38.5347 1.187192 -71.337654 173.817 -39.7216 1.162810 -62.093506 173.705 -39.3682 1.210274 -64.574265 174.357 -38.1184 1.155075 -72.740013 174.41 -37.9453 1.145404 -73.183174 174.365 -38.1516 1.158426 -72.681709 174.237 -38.5675 1.189444 -71.187126 174.341 -38.3227 1.172225 -72.203262 174.465 -37.821 1.140789 -73.512138 174.452 -37.8707 1.143035 -73.395386 174.274 -37.048 1.100268 -74.741089 174.411 -37.4422 1.116981 -74.117455 174.216 -36.866 1.095382 -75.065277 174.345 -37.1595 1.106007 -74.589081 174.316 -37.1208 1.103701 -74.634697 174.136 -38.771 1.200621 -70.168846 173.695 -39.2763 1.210193 -65.699570 174.325 -38.3541 1.174325 -72.080849 174.313 -38.3939 1.177470 -71.933899 174.274 -36.957 1.098780 -74.917664 174.183 -38.7266 1.200129 -70.464096 174.215 -38.6776 1.197946 -70.734375 173.855 -39.7601 1.151937 -61.903725 174.38 -37.3035 1.110979 -74.334351 174.303 -38.4368 1.181062 -71.781975 173.948 -39.9241 1.100268 -62.063366 174.439 -37.9798 1.149629 -73.165085 174.405 -38.1721 1.162397 -72.708138 174.413 -37.3913 1.115245 -74.209572 174.453 -37.9143 1.146006 -73.319145 174.397 -38.2143 1.165648 -72.592079 174.452 -37.7408 1.134913 -73.634361 173.777 -39.6225 1.182427 -62.479465 174.416 -38.0132 1.150598 -73.055832 174.23 -38.6039 1.192387 -71.040810 174.2 -36.8272 1.094346 -75.140755 173.895 -39.7972 1.139482 -61.736263 174.397 -38.2648 1.170008 -72.469612 174.311 -37.0775 1.102529 -74.713341 174.036 -38.8143 1.197653 -69.731033 174.298 -38.4801 1.184916 -71.634010 174.424 -38.0577 1.154465 -72.983017 173.779 -39.5706 1.190839 -62.654930 174.298 -38.5199 1.188638 -71.501030 174.477 -37.5714 1.127182 -73.985901 174.401 -38.0984 1.156255 -72.856209 174.384 -38.3095 1.173383 -72.331116 174.465 -37.6223 1.129055 -73.872185 174.378 -38.3465 1.176542 -72.220634 174.025 -38.9203 1.203721 -69.271255 174.374 -37.2528 1.109644 -74.435120 174.459 -37.9486 1.148625 -73.260384 174.457 -37.5215 1.123368 -74.038841 174.407 -38.1328 1.159290 -72.797493 174.485 -37.6661 1.132853 -73.825066 174.483 -37.7734 1.138995 -73.620735 174.37 -38.3837 1.179602 -72.096359 174.292 -38.5586 1.191833 -71.351608 174.423 -37.3443 1.114327 -74.312675 173.937 -39.8776 1.113842 -61.822575 174.017 -38.988 1.206794 -68.978951 174.48 -37.7083 1.134870 -73.738930 173.742 -39.4678 1.203653 -63.453045 174.201 -38.7785 1.205192 -70.312340 173.822 -39.6403 1.178625 -62.165657 174.262 -38.6398 1.197574 -70.988464 174.281 -38.5967 1.194725 -71.190308 174.474 -37.4702 1.122084 -74.160797 174.363 -38.4234 1.183109 -71.961845 174.519 -37.8492 1.145748 -73.544846 174.497 -37.894 1.147207 -73.423653 173.676 -39.3161 1.208707 -65.212776 174.249 -38.7145 1.203044 -70.673431 174.438 -38.3022 1.175463 -72.466187 174.099 -38.8133 1.201275 -69.904060 174.269 -38.6814 1.201469 -70.848114 174.458 -38.1534 1.163719 -72.854156 174.515 -37.8009 1.142692 -73.626617 174.358 -38.4645 1.186746 -71.825516 174.454 -38.1946 1.166853 -72.752075 174.496 -37.9703 1.152176 -73.284416 174.45 -38.2363 1.170249 -72.647812 174.422 -38.3338 1.177551 -72.353333 174.456 -38.2706 1.173483 -72.576424 174.48 -38.016 1.154420 -73.165985 174.012 -39.9473 1.082353 -61.912067 174.235 -38.7493 1.204994 -70.510353 174.463 -37.4138 1.119061 -74.248848 174.054 -39.983 1.063727 -62.038406 174.498 -38.0653 1.158876 -73.101959 174.393 -37.1707 1.108759 -74.617569 174.46 -38.1064 1.160062 -72.953995 174.309 -36.9979 1.100847 -74.862564 174.502 -37.9308 1.149913 -73.370720 174.309 -36.9093 1.099551 -75.035316 173.849 -39.674 1.170811 -61.938049 174.353 -38.5052 1.190356 -71.679359 174.432 -38.3726 1.181608 -72.270882 173.796 -39.4883 1.203645 -63.017269 174.498 -37.7356 1.137720 -73.712601 174.347 -38.5467 1.193918 -71.530144 174.068 -38.8458 1.201671 -69.694016 173.916 -39.0684 1.206912 -68.346077 174.412 -38.4094 1.184249 -72.119667 174.163 -38.8186 1.205576 -70.054169 174.375 -37.1254 1.106670 -74.690887 173.992 -39.8931 1.100725 -61.596546 174.457 -37.3724 1.117175 -74.308426 174.258 -38.7812 1.208687 -70.450607 173.941 -39.8293 1.126000 -61.563148 174.529 -38.1035 1.162984 -73.088264 174.334 -38.5861 1.196797 -71.358551 174.495 -38.2939 1.177013 -72.612495 173.998 -39.0303 1.208043 -68.759712 173.884 -39.7097 1.161026 -61.682568 174.507 -38.137 1.164733 -72.983276 174.423 -38.4492 1.188610 -72.033485 174.306 -38.7069 1.205802 -70.844681 174.548 -37.9509 1.153567 -73.408844 174.518 -38.1808 1.168591 -72.911438 174.541 -37.7561 1.141526 -73.744354 174.323 -38.6248 1.199818 -71.195976 174.496 -38.219 1.170757 -72.783714 174.48 -38.3382 1.180379 -72.479477 174.066 -38.8802 1.203606 -69.548363 174.501 -38.2546 1.173919 -72.716057 174.542 -37.9928 1.155843 -73.316757 174.55 -37.5637 1.131232 -74.114296 174.527 -37.621 1.132952 -73.971802 173.921 -39.7449 1.149716 -61.456158 173.75 -39.4209 1.209697 -63.834229 174.59 -37.847 1.149218 -73.654663 174.404 -38.4886 1.191398 -71.860992 174.513 -37.5189 1.126734 -74.135910 174.555 -37.8999 1.150688 -73.510033 174.409 -37.2181 1.110683 -74.541054 174.545 -38.035 1.158788 -73.247856 174.317 -38.6661 1.202993 -71.026001 174.553 -38.0712 1.161518 -73.192558 174.234 -38.8242 1.210238 -70.229362 174.53 -37.6615 1.135407 -73.904465 174.439 -37.3043 1.114156 -74.408997 174.563 -37.804 1.145510 -73.689919 174.285 -38.7455 1.207626 -70.648605 174.487 -38.3785 1.184390 -72.390549 174.531 -37.6997 1.137681 -73.831093 174.52 -37.4246 1.122831 -74.316887 174.426 -37.2643 1.112469 -74.471367 174.47 -38.4136 1.187173 -72.251854 174.08 -38.958 1.208426 -69.291290 173.978 -39.8542 1.113984 -61.444218 174.413 -38.5318 1.196020 -71.742447 173.835 -39.5991 1.186188 -62.209400 174.356 -37.0837 1.104670 -74.749611 174.551 -38.28 1.177702 -72.774834 174.544 -37.4715 1.126109 -74.274406 174.391 -38.5783 1.199244 -71.523956 174.368 -38.6115 1.201158 -71.353722 174.544 -38.3254 1.181223 -72.663223 174.314 -38.7801 1.211910 -70.598465 174.337 -37.0406 1.102740 -74.809502 174.631 -37.8881 1.153295 -73.647270 173.803 -39.5276 1.198039 -62.739826 174.605 -37.9366 1.155141 -73.524193 174.482 -38.4529 1.191569 -72.175110 174.343 -36.9493 1.101186 -74.981041 174.591 -38.0953 1.164514 -73.230392 174.571 -38.1426 1.167483 -73.101021 174.501 -37.3795 1.119859 -74.360809 174.581 -38.1889 1.171421 -73.029175 173.96 -39.7808 1.136490 -61.261433 174.554 -38.2296 1.173833 -72.886436 173.753 -39.1965 1.210116 -66.827583 173.829 -39.1146 1.206823 -67.785988 174.121 -38.8611 1.205731 -69.776550 174.464 -38.4936 1.194796 -71.995575 174.588 -37.9739 1.156749 -73.431511 174.286 -38.81 1.212393 -70.422028 174.622 -37.8 1.148138 -73.783913 174.535 -38.368 1.184776 -72.546593 174.596 -38.0104 1.159252 -73.374466 174.053 -39.8991 1.087883 -61.266804 174.363 -38.6923 1.207987 -71.041733 174.574 -37.5151 1.129909 -74.241203 174.483 -37.332 1.117093 -74.414825 174.594 -37.765 1.144871 -73.810356 174.6 -38.0534 1.161957 -73.313934 174.437 -37.1257 1.109628 -74.764809 174.519 -38.4002 1.187459 -72.416794 174.106 -39.9873 1.049949 -61.850410 174.457 -39.9846 0.964805 -60.088573 174.352 -38.7404 1.211205 -70.839813 174.371 -38.6482 1.204589 -71.229027 174.396 -39.9701 0.982333 -60.249981 174.449 -38.5739 1.201795 -71.693199 173.877 -39.628 1.179440 -61.819038 174.467 -37.2279 1.113524 -74.591621 174.423 -38.6202 1.204795 -71.466248 174.45 -37.1807 1.111677 -74.667496 174.47 -38.5377 1.199273 -71.871140 174.159 -39.9935 1.034257 -61.684837 174.079 -39.9457 1.068365 -61.532925 174.616 -38.2198 1.174757 -73.039055 173.845 -39.5519 1.194862 -62.345062 174.657 -38.0789 1.164633 -73.387268 174.606 -38.2635 1.177696 -72.927498 174.096 -38.9111 1.206993 -69.518127 174.658 -37.8383 1.151553 -73.771660 173.949 -39.6959 1.159557 -61.197216 174.289 -38.8397 1.214466 -70.319077 174.605 -38.3133 1.181329 -72.838005 174.482 -37.2768 1.115441 -74.518593 173.914 -39.6619 1.170122 -61.486301 174.191 -38.8648 1.210138 -69.958763 174.599 -37.7133 1.142283 -73.906883 174.027 -39.8531 1.106553 -61.103413 174.365 -38.7816 1.214926 -70.725998 174.339 -39.9839 0.991450 -60.746918 174.601 -37.603 1.136295 -74.119850 174.524 -38.4338 1.191105 -72.339645 174.426 -38.6743 1.209827 -71.276314 174.524 -38.4758 1.195434 -72.214516 174.573 -37.6592 1.137807 -73.978104 174.138 -39.9512 1.052430 -61.285828 173.996 -39.8149 1.122577 -61.125748 173.985 -39.7306 1.147343 -60.947628 174.275 -39.9747 1.009755 -60.934372 174.602 -37.5522 1.133398 -74.217438 174.653 -38.0273 1.161840 -73.447044 174.646 -37.7517 1.146668 -73.908203 174.503 -38.5669 1.203421 -71.863159 174.577 -37.4292 1.125728 -74.396332 174.596 -38.3588 1.184812 -72.738663 174.258 -38.8728 1.214581 -70.114464 174.404 -37.0899 1.106900 -74.796638 174.532 -39.9749 0.950531 -59.579075 174.402 -38.717 1.212046 -71.050659 174.156 -38.9039 1.210175 -69.717812 174.645 -37.976 1.158834 -73.520447 174.52 -38.5222 1.199682 -72.050308 174.338 -38.8192 1.215920 -70.523109 173.718 -39.3143 1.213363 -65.243561 174.021 -39.7678 1.133034 -60.755463 174.379 -36.9906 1.103035 -74.937958 174.639 -39.9812 0.927967 -59.102848 174.636 -38.1216 1.167366 -73.281296 174.552 -37.3858 1.122883 -74.426781 174.587 -39.9692 0.940375 -59.225689 174.223 -39.9976 1.016466 -61.448383 174.683 -37.7888 1.150063 -73.891663 174.667 -37.9269 1.156616 -73.637215 174.71 -37.8799 1.154933 -73.792046 174.482 -38.6081 1.206442 -71.661171 174.644 -38.1717 1.171705 -73.198982 174.421 -39.9423 0.984367 -59.741802 174.079 -39.0054 1.210535 -69.112350 174.637 -37.6563 1.141251 -74.078392 174.467 -38.6449 1.209199 -71.492226 174.098 -39.8496 1.095439 -60.567883 174.604 -37.4735 1.129108 -74.365204 174.416 -38.759 1.216000 -70.940727 174.136 -38.9417 1.210676 -69.514023 174.119 -39.9052 1.072078 -60.898731 173.969 -39.0622 1.208321 -68.544899 174.217 -38.9094 1.214155 -69.873161 174.729 -37.8262 1.152627 -73.900017 174.531 -37.3484 1.120192 -74.459572 174.401 -38.8072 1.218688 -70.730080 174.671 -37.7016 1.145194 -74.037903 173.98 -39.6463 1.169794 -60.934883 174.487 -38.6829 1.213494 -71.401260 174.056 -39.8063 1.116704 -60.632633 174.696 -37.9584 1.159194 -73.631355 174.703 -39.9838 0.915974 -58.813110 174.701 -37.9968 1.161255 -73.575851 174.327 -38.8718 1.218766 -70.309494 174.454 -38.7192 1.214925 -71.174019 174.015 -39.6814 1.157718 -60.623188 174.481 -39.9282 0.974193 -59.223850 174.67 -37.6067 1.139910 -74.227417 174.615 -39.9476 0.939565 -58.823524 174.706 -37.7399 1.148597 -74.012260 174.496 -37.1931 1.113793 -74.694664 174.186 -39.9609 1.036917 -61.167103 174.719 -38.0464 1.163719 -73.524857 174.38 -38.8441 1.219859 -70.550690 174.051 -39.7187 1.143720 -60.362614 173.902 -39.5776 1.190000 -61.786640 174.541 -37.3017 1.119000 -74.549400 173.94 -39.6142 1.180137 -61.338161 174.084 -39.7584 1.127720 -60.192226 174.631 -37.5181 1.132804 -74.333481 174.568 -38.5594 1.204879 -72.057388 174.649 -37.5618 1.136312 -74.283577 174.649 -38.2483 1.177283 -73.048050 174.29 -38.9246 1.219602 -70.032906 174.665 -38.2167 1.175390 -73.143738 174.4 -37.0441 1.105133 -74.871109 174.529 -38.5982 1.207351 -71.822868 174.532 -37.2357 1.116430 -74.660934 173.85 -39.5029 1.203238 -62.591408 174.7 -37.6505 1.143741 -74.187408 174.363 -39.9286 1.002758 -59.892326 174.741 -37.775 1.151100 -73.989449 174.658 -38.29 1.180104 -72.996895 173.897 -39.5328 1.199262 -62.078934 174.471 -38.7547 1.218508 -71.093834 174.117 -39.7958 1.110283 -60.082298 174.181 -38.9348 1.213080 -69.670830 174.767 -39.9826 0.905845 -58.489086 174.461 -38.7936 1.220802 -70.932198 174.583 -38.4995 1.199402 -72.299385 174.724 -37.9258 1.157874 -73.736427 174.606 -37.3897 1.125204 -74.499878 174.18 -39.9195 1.052439 -60.713421 174.666 -39.9464 0.929943 -58.578293 174.634 -37.4328 1.128064 -74.481651 174.734 -37.6914 1.147248 -74.144608 174.577 -37.3462 1.122256 -74.524887 174.491 -37.1493 1.112607 -74.769768 174.522 -38.6426 1.211318 -71.646423 174.563 -39.9279 0.954986 -58.826546 174.686 -39.9081 0.932616 -58.052967 174.293 -39.9338 1.018801 -60.323547 174.232 -39.9445 1.030685 -60.749020 174.047 -39.6321 1.167914 -60.277573 174.832 -39.9821 0.896648 -58.183731 174.367 -39.8804 1.020355 -59.141502 174.728 -39.9435 0.919025 -58.286182 174.084 -39.6688 1.154449 -59.960125 174.443 -38.8428 1.222806 -70.719109 174.125 -39.7082 1.137918 -59.635883 174.574 -38.4077 1.189569 -72.560608 174.627 -39.9136 0.944096 -58.345345 173.791 -39.4472 1.209119 -63.365227 174.39 -38.8812 1.222676 -70.451653 174.766 -37.7307 1.150033 -74.101143 174.152 -39.8243 1.093595 -59.992580 174.17 -38.962 1.213570 -69.540878 174.893 -39.9842 0.888406 -57.907455 174.165 -39.8679 1.074958 -60.264240 174.434 -37.0022 1.104697 -74.978882 174.518 -38.7741 1.221805 -71.138855 174.138 -39.7542 1.120875 -59.690063 174.781 -37.8016 1.152667 -73.997322 174.007 -39.5947 1.180963 -60.715717 174.35 -38.9123 1.222379 -70.241150 174.727 -37.6033 1.141895 -74.325401 174.739 -37.9662 1.160220 -73.692032 174.313 -39.8841 1.032465 -59.532570 174.521 -39.8897 0.976249 -58.455170 174.799 -39.937 0.908911 -57.946438 174.756 -37.6433 1.145408 -74.284302 174.7 -37.5701 1.139042 -74.347290 174.341 -39.8423 1.043003 -58.764259 174.416 -39.9 0.999873 -59.158497 174.582 -39.8725 0.963805 -57.940300 174.514 -38.8221 1.224582 -70.954720 174.788 -37.7655 1.151749 -74.062874 174.599 -37.3101 1.121522 -74.614670 174.753 -38.0068 1.162304 -73.639389 174.748 -39.9017 0.921526 -57.817596 174.651 -39.8789 0.945771 -57.802803 174.664 -37.4789 1.131777 -74.461334 174.569 -38.4539 1.194436 -72.407120 174.447 -38.8912 1.225486 -70.566734 174.466 -39.8735 0.996743 -58.454597 174.405 -39.8476 1.023888 -58.380474 174.574 -38.6127 1.210262 -71.898003 174.452 -37.0688 1.108266 -74.894012 174.956 -39.9878 0.880865 -57.606232 174.489 -37.0974 1.111469 -74.869713 174.398 -38.9277 1.225494 -70.322746 173.958 -39.576 1.188531 -61.270348 174.715 -38.0952 1.165813 -73.464577 174.462 -39.8281 1.014894 -57.691395 174.251 -39.7759 1.092487 -58.789440 174.194 -39.7267 1.121325 -59.035454 174.321 -39.7972 1.068574 -58.336258 174.422 -39.797 1.041302 -57.430901 174.515 -39.8431 0.993096 -57.657219 174.209 -39.8287 1.079632 -59.598171 174.18 -39.6801 1.138740 -59.009666 174.147 -39.6516 1.151731 -59.276752 174.278 -39.8354 1.061607 -59.127598 174.239 -39.8872 1.050137 -60.024487 174.372 -39.8109 1.049454 -58.067303 174.267 -39.7148 1.113953 -58.264385 174.803 -39.8904 0.914655 -57.560421 174.872 -39.9428 0.898063 -57.691849 174.37 -39.7706 1.069978 -57.534843 174.176 -39.7835 1.103554 -59.522057 174.316 -39.7484 1.092074 -57.927658 174.231 -39.674 1.133436 -58.480358 174.639 -37.3487 1.124478 -74.606972 174.563 -38.7423 1.221305 -71.359726 174.69 -37.5288 1.136092 -74.412964 174.929 -39.9457 0.891152 -57.456963 174.539 -37.1759 1.114828 -74.767281 174.13 -38.9807 1.211984 -69.351830 174.327 -39.7017 1.110884 -57.570145 174.657 -37.3971 1.127034 -74.562073 174.108 -39.6236 1.163880 -59.647499 174.198 -39.6416 1.148003 -58.743172 174.852 -39.9089 0.906030 -57.511978 174.587 -37.2689 1.119455 -74.667313 174.286 -39.6641 1.129343 -57.913250 174.347 -38.9547 1.224782 -70.103020 174.039 -39.0316 1.209928 -68.893913 174.498 -38.8644 1.226108 -70.780502 174.226 -38.9563 1.217189 -69.736946 174.366 -39.7319 1.091531 -57.250015 174.451 -37.0348 1.106429 -74.950401 174.575 -38.6576 1.214548 -71.735710 174.526 -37.1261 1.113384 -74.836639 177.338 -39.8116 0.623034 163.650635 177.579 -39.6698 0.624796 165.132797 177.43 -39.7558 0.623832 164.215958 177.63 -39.6119 0.627056 165.620041 177.262 -39.8573 0.622267 163.238937 177.481 -39.6773 0.626972 164.717148 177.474 -39.4716 0.641014 165.547745 177.703 -39.5546 0.628392 166.225586 177.272 -39.6683 0.632457 163.945221 177.308 -39.5652 0.639016 164.498108 177.428 -39.5226 0.638697 165.151962 177.997 -39.3344 0.626698 169.649368 177.606 -39.4474 0.639342 166.253922 177.067 -39.876 0.623828 162.639450 177.73 -39.4777 0.632953 166.760513 177.961 -39.3894 0.627207 168.846115 177.225 -39.7309 0.629233 163.554291 177.27 -39.6055 0.637068 164.184189 177.111 -39.7895 0.627202 163.004395 177.535 -39.4368 0.641943 165.961380 177.351 -39.519 0.641140 164.850922 177.647 -39.4117 0.640841 166.602158 177.582 -39.4002 0.643580 166.315063 177.391 -39.4725 0.643279 165.197510 177.776 -39.4303 0.634774 167.278030 177.48 -39.4231 0.644368 165.767731 177.516 -39.3893 0.646052 166.043335 177.624 -39.3707 0.644876 166.630920 177.999 -39.2729 0.627220 170.341690 177.279 -39.5149 0.643609 164.603165 177.711 -39.4222 0.638005 166.915192 177.425 -39.4277 0.645452 165.502594 177.564 -39.3435 0.648463 166.410995 177.32 -39.4699 0.645602 164.926865 177.358 -39.425 0.647657 165.244949 177.886 -39.3981 0.631449 168.264771 177.452 -39.3835 0.647933 165.776520 177.484 -39.3404 0.650358 166.051361 177.642 -39.3235 0.648552 166.875061 177.691 -39.3714 0.643033 167.011063 177.391 -39.3813 0.649728 165.530869 177.232 -39.5583 0.641801 164.235229 177.516 -39.2934 0.653193 166.329895 177.75 -39.3922 0.639139 167.311249 177.245 -39.4637 0.648470 164.691177 177.812 -39.386 0.636795 167.789932 177.329 -39.3767 0.651675 165.312515 177.198 -39.6166 0.638193 163.841141 177.293 -39.4199 0.649878 165.029282 177.954 -39.2977 0.630870 169.820984 177.223 -39.5099 0.645817 164.424225 177.584 -39.2869 0.652608 166.667740 177.054 -39.8286 0.625583 162.727112 177.42 -39.3385 0.651909 165.796204 177.917 -39.3379 0.632821 169.079117 177.364 -39.3344 0.653517 165.583984 177.004 -39.8936 0.623385 162.434998 177.446 -39.2898 0.654708 166.032318 177.64 -39.2754 0.652742 166.991440 177.394 -39.3021 0.654851 165.795471 177.705 -39.327 0.646793 167.264130 177.27 -39.3697 0.653690 165.134018 177.485 -39.2561 0.656265 166.272903 177.306 -39.3262 0.655378 165.398254 176.971 -39.9871 0.622042 162.078583 177.233 -39.4071 0.652515 164.881195 177.967 -39.2319 0.629039 170.705093 177.189 -39.433 0.652277 164.650665 177.021 -39.8612 0.624295 162.554764 177.176 -39.4824 0.649559 164.389862 177.248 -39.32 0.656948 165.226562 177.215 -39.361 0.655567 164.990326 177.345 -39.2811 0.657059 165.671478 177.61 -39.2404 0.655875 166.886078 177.759 -39.3483 0.642996 167.576645 177.541 -39.2422 0.656469 166.548431 177.813 -39.3422 0.641030 168.063736 177.162 -39.5654 0.643832 163.938354 177.689 -39.2873 0.651078 167.264542 177.398 -39.2671 0.656920 165.896912 177.099 -39.6723 0.634338 163.164490 177.436 -39.2336 0.658363 166.116791 177.188 -39.3937 0.654564 164.801773 176.989 -39.9367 0.622635 162.281799 177.856 -39.3544 0.636887 168.373734 177.281 -39.2772 0.658442 165.455124 177.184 -39.5286 0.645914 164.206421 177.371 -39.2314 0.659389 165.884521 177.948 -39.261 0.631468 170.272903 177.582 -39.201 0.659117 166.814285 177.492 -39.2224 0.658331 166.369675 177.191 -39.3137 0.658432 165.078781 177.225 -39.2726 0.659639 165.300781 177.137 -39.3046 0.659958 164.963104 177.747 -39.2978 0.648988 167.654282 177.793 -39.3164 0.645312 167.987106 177.154 -39.3564 0.657394 164.834473 177.677 -39.239 0.655717 167.258514 177.725 -39.2608 0.653505 167.547073 177.311 -39.2331 0.660096 165.670715 177.147 -39.4064 0.655264 164.637131 177.046 -39.7815 0.627710 162.828552 177.641 -39.1977 0.659231 167.106552 177.169 -39.2676 0.660844 165.142578 177.401 -39.1888 0.661367 166.089188 177.145 -39.445 0.653213 164.468475 177.847 -39.3057 0.643371 168.650589 177.097 -39.3321 0.659743 164.788986 177.774 -39.2566 0.653646 167.919388 177.796 -39.2869 0.649309 168.098206 177.254 -39.23 0.661150 165.496307 177.131 -39.5217 0.648794 164.073654 177.137 -39.6011 0.641927 163.656998 177.115 -39.2625 0.661921 165.017731 177.135 -39.6444 0.637344 163.431122 177.101 -39.3801 0.657842 164.622055 177.527 -39.1961 0.659800 166.574753 177.741 -39.223 0.657219 167.657852 177.704 -39.1902 0.659990 167.429565 177.612 -39.1639 0.661627 167.000320 177.47 -39.1838 0.661025 166.359406 177.667 -39.1545 0.662382 167.262070 177.092 -39.2934 0.661168 164.883591 177.826 -39.257 0.653638 168.401093 177.101 -39.4266 0.655803 164.440674 177.078 -39.7377 0.629913 163.016037 177.808 -39.2143 0.658795 168.084549 177.336 -39.185 0.662213 165.863876 177.197 -39.2269 0.662160 165.332062 177.112 -39.4732 0.652943 164.256866 177.429 -39.1463 0.663403 166.275024 177.628 -39.1246 0.663995 167.105057 177.766 -39.1798 0.661565 167.749054 177.095 -39.5646 0.647706 163.718384 177.727 -39.1446 0.663595 167.521957 177.561 -39.1658 0.661626 166.775345 177.376 -39.1535 0.663334 166.068085 177.048 -39.3544 0.660121 164.609833 177.142 -39.226 0.662925 165.175980 177.683 -39.1036 0.665153 167.327499 177.05 -39.4016 0.658623 164.438538 177.518 -39.1631 0.662009 166.593704 177.586 -39.1373 0.663302 166.922897 177.053 -39.4519 0.656648 164.229233 177.49 -39.1371 0.663603 166.530624 177.949 -39.1992 0.629299 171.034470 177.281 -39.1955 0.662379 165.666687 176.994 -39.3739 0.660936 164.435883 177.748 -39.1009 0.666023 167.557602 177.065 -39.2632 0.662394 164.898804 176.994 -39.4234 0.659805 164.242584 177.545 -39.1334 0.663616 166.753647 177.044 -39.3052 0.661509 164.751572 177.061 -39.5076 0.653402 163.968246 177.632 -39.0876 0.665441 167.136200 177.454 -39.0982 0.665373 166.437851 176.993 -39.4774 0.657868 163.983063 177.224 -39.1771 0.663800 165.528732 177.002 -39.3338 0.661483 164.589294 177.386 -39.1135 0.664994 166.179001 177.04 -39.5485 0.652239 163.699249 177.331 -39.1303 0.664710 165.958954 177.584 -39.0988 0.665058 166.949203 177.084 -39.2223 0.663618 165.038162 177.525 -39.0969 0.665330 166.713181 177.907 -39.2825 0.637033 169.646317 177.011 -39.5207 0.655170 163.801498 176.935 -39.3923 0.661899 164.273026 176.933 -39.4449 0.661005 164.053894 177.045 -39.5951 0.649653 163.425613 177.161 -39.1849 0.664286 165.326553 177.024 -39.8097 0.626456 162.698303 176.968 -39.5175 0.657001 163.742554 177.097 -39.6144 0.643097 163.398636 176.996 -39.5556 0.654335 163.595978 177.279 -39.151 0.664297 165.757919 177.117 -39.192 0.664404 165.192795 176.989 -39.5959 0.653093 163.368057 175.899 -42.8735 0.580898 143.579880 174.51 -44.9685 0.605404 111.995079 174.776 -45.0243 0.591383 112.748497 174.167 -44.6006 0.637465 113.610954 173.645 -44.532 0.670773 111.518440 174.906 -44.7125 0.595943 115.801842 174.402 -44.5829 0.625286 114.869919 176.387 -42.9031 0.566141 144.609268 173.559 -42.513 0.654649 141.135437 174.682 -44.6334 0.609143 115.592468 173.763 -44.4441 0.669551 113.103752 175.062 -44.6133 0.591760 117.291222 175.216 -44.5102 0.587503 118.786438 174.89 -44.5811 0.600663 116.910591 174.914 -42.989 0.605593 139.690247 173.6 -44.4249 0.680962 112.344986 175.388 -44.3863 0.582894 120.505562 174.135 -43.3607 0.658789 133.125824 174.601 -44.4796 0.618312 116.743660 174.519 -43.1271 0.626718 136.790955 175.005 -44.4832 0.597884 118.266289 175.6 -44.305 0.575256 121.970757 174.057 -44.3759 0.654515 115.446106 175.915 -43.0084 0.579576 142.144440 174.797 -44.4684 0.608548 117.627869 175.15 -44.3725 0.593798 119.888741 174.297 -43.3162 0.645142 133.717545 174.441 -44.4012 0.629748 116.937759 174.415 -43.2218 0.634754 135.234238 173.273 -44.3973 0.703057 110.365562 175.26 -44.2749 0.590796 121.273949 175.251 -44.1601 0.593446 122.526505 175.216 -44.0258 0.597262 124.026108 173.709 -42.9253 0.670140 138.842468 174.108 -43.4871 0.665386 131.083054 174.68 -44.3193 0.618618 118.811440 173.973 -43.4046 0.673624 132.684433 175.428 -44.2275 0.584257 122.312866 174.927 -44.3449 0.605157 119.406082 175.604 -44.1666 0.577563 123.573959 174.463 -44.2392 0.633307 118.998627 174.109 -44.2336 0.657467 117.533966 175.081 -44.2417 0.599725 121.071236 173.708 -44.341 0.679982 113.924072 173.59 -42.5726 0.656098 141.011917 176.224 -42.9828 0.569536 143.150421 175.631 -44.0544 0.578735 125.003784 176.362 -43.0234 0.564409 143.019043 175.439 -44.0747 0.586781 124.113899 174.432 -44.0932 0.638980 120.908089 174.87 -44.1988 0.611057 120.897507 175.079 -42.9973 0.598685 140.247849 174.115 -44.1007 0.662587 119.504623 174.471 -43.3347 0.632764 133.413193 174.248 -43.5681 0.655269 129.504303 174.549 -44.0024 0.632818 122.581329 174.648 -44.1292 0.624746 121.069763 174.519 -43.4442 0.631346 131.550644 174.893 -43.1089 0.604406 137.984253 173.964 -44.1656 0.671884 117.726013 174.396 -41.9607 0.628715 146.959015 175.56 -43.9509 0.584038 125.979485 175.05 -44.1088 0.603566 122.528641 174.577 -43.2438 0.624078 134.998703 175.771 -43.9684 0.574795 126.594177 174.709 -44.0064 0.622847 122.909332 174.283 -43.9219 0.653635 123.129189 174.462 -43.885 0.639931 124.180016 173.156 -44.369 0.712586 109.749611 175.764 -44.1076 0.571345 124.866653 175.022 -43.9766 0.606711 124.100502 174.857 -44.058 0.614018 122.610535 174.659 -43.9063 0.626596 124.239899 175.683 -43.8494 0.581272 127.662224 175.359 -43.935 0.592577 125.517670 174.61 -43.7934 0.629946 125.861534 174.575 -43.6737 0.631284 127.698029 174.434 -43.7538 0.642300 126.280067 174.548 -43.5564 0.631404 129.629196 174.318 -43.8207 0.651727 124.957596 174.707 -43.5921 0.621440 129.035049 174.674 -43.4769 0.621281 130.968597 174.632 -43.3591 0.621947 133.055817 174.245 -43.7095 0.657912 126.879997 175.958 -43.9151 0.568932 127.997490 174.761 -41.7753 0.589001 148.339218 174.742 -43.7043 0.621088 127.328758 174.836 -43.9333 0.616334 124.217857 173.806 -44.2357 0.679997 115.816292 173.576 -43.1496 0.695092 136.364609 175.222 -43.0252 0.593770 140.571747 175.478 -43.8237 0.589830 127.206001 174.094 -43.6137 0.670687 128.707443 175.834 -43.8565 0.575151 128.191360 175.926 -43.1496 0.579017 140.226364 174.79 -43.817 0.619123 125.747459 175.341 -43.0701 0.590911 140.562271 175.177 -43.8997 0.600579 125.439308 176.258 -43.1185 0.566289 141.369736 176.126 -43.8458 0.563955 129.343521 176.102 -43.1881 0.571508 139.900223 173.469 -43.4205 0.723622 132.229752 174.993 -43.8373 0.608917 125.808075 175.769 -43.1799 0.586366 139.639191 175.303 -43.8396 0.596228 126.476089 174.1 -43.9583 0.668889 121.821701 175.178 -43.7863 0.601531 126.792747 174.788 -43.3916 0.612072 132.535583 176.293 -43.6607 0.559720 132.307083 175.961 -43.789 0.571556 129.529358 175.628 -43.7397 0.586027 128.858154 175.012 -43.0842 0.599189 138.839355 174.904 -43.7247 0.612762 127.157143 176 -41.2569 0.616471 151.495163 176.208 -43.5689 0.564105 133.580688 175.559 -43.1156 0.590979 140.615372 174.169 -43.8318 0.665057 124.405716 173.953 -44.042 0.679184 119.621620 176.114 -43.6959 0.566800 131.337784 174.594 -41.5541 0.491275 155.045242 175.86 -43.2477 0.582422 138.571518 175.064 -43.7139 0.605943 127.468452 175.216 -43.682 0.600734 128.087372 173.236 -44.3156 0.713664 110.908508 175.989 -43.2643 0.576244 138.432358 173.813 -44.1107 0.687617 117.637573 174.667 -41.8336 0.601071 148.034729 174.827 -43.51 0.612688 130.383423 176.243 -43.2469 0.565291 139.233795 175.472 -43.7021 0.592739 128.707962 175.332 -43.7477 0.596448 127.626694 176.117 -43.2849 0.570198 138.293701 175.915 -43.6733 0.575704 131.066559 175.845 -43.5711 0.580709 132.541351 175.885 -43.3402 0.581232 136.887924 173.441 -44.1988 0.711413 113.878586 174.977 -43.161 0.599309 137.347778 175.922 -43.4595 0.578552 134.787811 173.971 -43.531 0.679635 130.502441 176.039 -43.3615 0.573391 136.793579 176.304 -43.4535 0.560833 135.693512 175.592 -43.6348 0.590001 130.240631 175.695 -43.5595 0.587597 132.081512 175.355 -43.6479 0.597550 128.919769 175.113 -43.6143 0.603544 128.752167 175.738 -43.2922 0.589079 137.548279 175.136 -43.0912 0.594214 139.281677 174.011 -43.8406 0.680903 123.710602 176.205 -43.3568 0.565748 137.197586 175.777 -43.4931 0.585170 133.692734 175.256 -43.1156 0.590803 139.479065 175.472 -43.6135 0.595054 129.975708 175.541 -43.5334 0.595066 131.718613 173.147 -44.3047 0.720540 110.331284 175.254 -43.5843 0.600389 129.403076 175.658 -43.4673 0.591498 133.644363 173.786 -43.9935 0.697516 119.454407 173.919 -43.9245 0.687978 121.574493 175.769 -43.4042 0.586944 135.336151 175.643 -43.2004 0.592022 139.216583 175.635 -43.3726 0.594060 135.463760 173.932 -43.6528 0.688328 127.838844 175.591 -43.2818 0.595308 137.341095 175.019 -43.2449 0.596755 135.733917 175.151 -43.5165 0.601226 130.191757 174.602 -41.4873 0.445426 155.555832 173.875 -43.8207 0.695718 123.561012 175.439 -43.1316 0.590568 140.070831 175.344 -43.1449 0.589970 139.358673 173.604 -42.9809 0.680746 138.415176 174.992 -43.5388 0.605734 129.814041 173.494 -44.0489 0.721861 116.631073 174.541 -41.8647 0.610704 148.311859 173.65 -43.9948 0.710558 118.602928 173.835 -43.7283 0.699099 125.750137 175.392 -43.5568 0.598769 130.442184 175.536 -43.4311 0.597540 133.726578 173.065 -44.3292 0.722244 109.430176 173.842 -43.5555 0.692499 129.969772 173.38 -43.3819 0.733267 132.797684 175.12 -43.3055 0.595124 134.681396 173.781 -43.8855 0.703470 121.631729 175.191 -43.4291 0.598509 132.079865 175.186 -43.1694 0.591392 138.062332 173.468 -44.1291 0.716354 115.109085 173.786 -43.6399 0.701588 127.776428 173.759 -43.7911 0.706977 123.863594 173.602 -42.7664 0.665733 140.209198 173.586 -43.0631 0.688289 137.501266 175.066 -43.4389 0.600084 131.595963 175.122 -43.3752 0.597158 133.132568 175.52 -43.2037 0.593852 138.908112 175.077 -43.1628 0.594935 137.744064 175.286 -43.1893 0.590158 138.096924 173.191 -44.2452 0.725020 111.329315 173.725 -43.7076 0.709547 125.885185 174.561 -41.777 0.588905 150.496719 173.358 -44.1476 0.724091 113.988358 175.42 -43.4683 0.599933 132.255829 175.205 -43.3519 0.595344 133.868912 173.677 -43.9247 0.712157 120.204720 172.677 -40.0125 1.178262 -60.454941 174.436 -41.888 0.620985 148.472290 174.403 -41.4382 0.413306 171.976349 173.659 -43.4895 0.705867 131.004272 174.459 -41.8099 0.606676 150.601044 173.724 -43.5618 0.703615 129.511139 175.515 -43.3458 0.598117 135.526321 173.514 -43.1054 0.699166 136.978683 174.348 -41.9057 0.631214 148.213028 173.593 -42.9056 0.676212 139.167664 174.335 -42.0156 0.633949 146.165543 173.467 -43.976 0.731589 117.868767 173.675 -43.6325 0.712175 127.657867 172.789 -40.0281 1.183651 -60.982586 174.413 -41.3282 0.315490 -170.365707 173.093 -44.2637 0.728984 110.321747 175.287 -43.494 0.600480 131.030273 173.655 -43.7618 0.717910 124.241020 173.668 -43.841 0.715990 122.238396 173.269 -44.1887 0.726534 112.666336 175.138 -43.2317 0.592941 136.467148 172.73 -40.0905 1.186646 -60.495693 173.596 -43.9472 0.719244 119.275742 173.431 -43.4977 0.732836 130.881653 173.626 -43.6928 0.719977 125.969330 172.823 -40.0838 1.188996 -61.048836 172.89 -40.038 1.186639 -61.498093 172.671 -40.1663 1.191311 -59.930302 173.185 -44.184 0.733517 112.030296 173.002 -44.2801 0.732125 109.403877 175.484 -43.2733 0.596084 137.070740 173.517 -43.0109 0.691411 138.156433 175.211 -43.2827 0.592916 135.485153 174.467 -41.7247 0.581518 153.579483 173.493 -43.2111 0.708456 135.565018 174.573 -41.6937 0.559020 152.721252 173.388 -44.0794 0.729385 115.368782 172.96 -40.0656 1.188714 -61.813534 174.553 -40.9973 0.446675 -82.973625 175.399 -43.2179 0.591962 138.016891 173.395 -44.0096 0.736522 116.685768 174.439 -40.9416 0.540416 -84.306816 173.279 -44.1317 0.733041 113.582741 172.802 -40.15 1.194524 -60.794498 175.437 -43.3924 0.599512 134.045746 173.49 -43.0625 0.698760 137.547333 174.661 -41.7389 0.573948 150.159409 174.178 -42.1326 0.642599 144.403442 172.91 -40.1091 1.192266 -61.514763 172.748 -40.2072 1.198762 -60.326794 173.476 -43.1483 0.706729 136.417252 173.606 -43.563 0.715603 129.321793 172.981 -40.014 1.185426 -61.955860 173.586 -43.6302 0.722320 127.544945 173.119 -44.2052 0.735360 111.187935 174.501 -41.6483 0.544279 155.821075 173.58 -43.7358 0.726556 124.672806 172.674 -40.2418 1.199710 -59.724174 173.524 -43.9355 0.728131 119.153503 175.224 -43.2267 0.591208 136.910233 175.284 -43.3227 0.594538 134.841904 175.316 -43.3977 0.598381 133.219711 172.99 -40.0992 1.190901 -61.956635 172.833 -40.2179 1.202263 -60.909431 173.029 -40.0596 1.187413 -62.151093 172.911 -40.1775 1.198443 -61.467758 173.314 -44.0962 0.734499 114.467262 173.078 -40.0014 1.183490 -62.362091 174.378 -41.7723 0.612318 152.694656 172.765 -40.2606 1.205916 -60.345463 174.367 -40.9603 0.564039 -87.927292 172.993 -40.1448 1.194440 -61.973675 173.214 -44.1395 0.737606 112.886482 173.108 -40.0658 1.185450 -62.508709 173.179 -40.0201 1.180790 -62.735966 174.463 -40.2264 0.901639 -63.011791 172.696 -40.3125 1.209967 -59.669937 173.056 -40.1095 1.189890 -62.307125 173.568 -43.7979 0.728042 122.944656 173.331 -43.4951 0.749290 130.697922 173.576 -43.8825 0.724928 120.743492 172.85 -40.2737 1.209467 -60.990856 173.039 -44.2205 0.738415 110.327095 173.175 -40.0776 1.182841 -62.800220 173.256 -40.0097 1.176297 -62.961597 174.42 -41.6645 0.563230 157.123856 175.394 -43.3171 0.596604 135.592163 173.833 -40.0962 1.087772 -63.961197 174.266 -40.8767 0.674875 -83.809906 174.255 -40.9628 0.638830 -89.544380 174.044 -42.1733 0.647801 143.632660 174.189 -40.392 0.924488 -67.518532 174.209 -40.3011 0.944197 -65.720016 173.881 -40.1418 1.069203 -64.360039 174.826 -40.3705 0.802039 -61.175968 173.927 -40.6566 0.997941 -75.298546 174.124 -40.3587 0.955254 -67.122269 173.886 -40.3374 1.036910 -67.087784 174.258 -40.7906 0.728631 -79.422615 173.804 -40.044 1.102325 -63.543270 174.305 -40.9276 0.623517 -86.616432 174.137 -40.3047 0.965032 -66.084709 173.931 -40.1858 1.048835 -64.800735 174.893 -40.4627 0.766757 -60.882977 174.076 -40.26 0.993764 -65.542252 174.34 -41.3536 0.380691 -173.850616 174.872 -40.8448 0.565692 -61.440628 174.291 -40.3007 0.921362 -65.263512 174.142 -40.6607 0.850545 -75.512497 174.114 -40.6159 0.881478 -74.122910 174.074 -40.6613 0.885496 -76.166046 173.54 -43.5903 0.725281 128.590103 173.915 -40.2881 1.035626 -66.288383 173.904 -40.2313 1.047992 -65.458855 174.597 -40.2778 0.860997 -62.591812 174.183 -40.3432 0.940511 -66.594154 174.16 -40.2491 0.971825 -65.070938 173.791 -40.1464 1.088951 -64.521881 174.037 -40.713 0.879892 -78.970894 174.827 -40.4706 0.766857 -61.816845 174.843 -40.4202 0.784182 -61.302715 174.138 -40.5269 0.901951 -71.064247 174.164 -40.4837 0.905783 -69.750458 174.117 -40.4229 0.940924 -68.482979 173.952 -40.3483 1.014384 -67.278381 173.901 -40.0989 1.072418 -63.839226 172.793 -40.3116 1.213791 -60.479889 174.038 -40.4291 0.968320 -68.846214 173.98 -40.4638 0.984405 -69.704659 173.992 -40.6628 0.939371 -76.685089 174.181 -42.0033 0.645816 146.007034 174.872 -40.5745 0.722815 -61.616085 174.859 -40.5169 0.747261 -61.589153 174.767 -40.4459 0.780835 -62.466846 174.769 -40.3913 0.800355 -61.992195 174.705 -40.358 0.818974 -62.410862 174.075 -40.5562 0.920448 -72.237686 174.075 -40.4852 0.940603 -70.141586 173.983 -40.237 1.025310 -65.410873 173.847 -40.1949 1.068468 -65.039284 173.999 -40.1838 1.031517 -64.618683 174.202 -40.6915 0.806910 -76.052620 174.192 -40.6312 0.839204 -73.984077 174.166 -40.5756 0.872756 -72.390709 174.211 -40.5341 0.869936 -70.808578 174.385 -40.6768 0.741818 -72.896309 174.407 -40.6276 0.761128 -71.071571 174.433 -40.5761 0.779487 -69.367477 174.46 -40.524 0.796800 -67.833656 174.496 -40.4738 0.810277 -66.411072 174.538 -40.4217 0.822384 -65.067200 174.58 -40.3711 0.833503 -63.895466 174.635 -40.3232 0.840502 -62.760281 174.24 -40.7471 0.760955 -77.786026 174.262 -40.3614 0.911349 -66.517105 174.372 -40.2955 0.901958 -64.642975 174.245 -42.0609 0.639906 145.412674 174.55 -40.315 0.857680 -63.470501 173.663 -40.1032 1.121443 -64.127739 174.486 -40.362 0.854817 -64.716499 174.461 -40.2919 0.882818 -63.924309 174.449 -40.4214 0.841622 -66.040138 174.409 -40.4737 0.830827 -67.439812 174.416 -40.3353 0.879059 -64.924911 174.411 -40.3773 0.866377 -65.658394 174.377 -40.5298 0.816122 -69.026451 174.322 -40.48 0.852567 -68.481003 174.352 -40.583 0.800111 -70.677109 174.327 -40.6384 0.782167 -72.608437 174.302 -40.6989 0.760260 -75.010132 174.313 -40.7619 0.721035 -77.280197 173.593 -40.0922 1.135062 -63.983067 173.515 -40.0782 1.148457 -63.783897 173.441 -40.0617 1.159038 -63.567371 173.412 -40.012 1.163920 -63.329277 173.381 -40.0531 1.165975 -63.401985 173.328 -40.0211 1.171009 -63.177620 173.572 -40.0469 1.142073 -63.682644 173.741 -40.0887 1.107579 -64.005226 173.654 -40.0474 1.128732 -63.725979 173.733 -40.0285 1.117504 -63.544552 173.502 -40.0162 1.153700 -63.470486 174.205 -41.9442 0.645785 147.003128 173.252 -40.0648 1.177445 -63.055637 174.26 -41.9842 0.640072 146.568634 174.218 -41.8846 0.647143 148.191223 173.133 -40.1158 1.187013 -62.695805 173.004 -40.2022 1.199459 -62.086636 174.864 -40.7278 0.644849 -62.007896 172.929 -40.2441 1.205727 -61.603397 173.621 -40.1404 1.126391 -64.373360 173.448 -43.1028 0.707020 137.044998 174.04 -40.3703 0.980523 -67.587891 174.241 -40.4843 0.877238 -69.278450 174.257 -40.6505 0.803005 -73.925621 173.904 -40.4995 1.013053 -70.320152 173.901 -40.4379 1.019950 -68.963135 173.894 -40.3836 1.028578 -67.903374 173.537 -43.6799 0.730859 126.072906 173.513 -43.7408 0.735508 124.303024 173.208 -40.117 1.182431 -63.029495 173.967 -40.4062 0.999013 -68.397003 173.972 -40.1252 1.050215 -63.945610 173.996 -40.5184 0.967726 -71.130867 173.999 -40.5657 0.956712 -72.575272 174.034 -40.6105 0.924805 -74.315613 173.941 -40.5483 0.990861 -71.759247 173.945 -40.6027 0.983517 -73.537903 174.273 -41.9231 0.639755 147.678207 174.229 -40.8317 0.719302 -81.806702 174.188 -40.8756 0.718112 -84.453346 174.533 -40.2565 0.878790 -62.872780 174.089 -42.1198 0.647561 144.273682 174.046 -40.2085 1.013555 -64.835640 174.863 -40.6677 0.678188 -62.033466 173.523 -42.9498 0.685765 138.831757 174.357 -41.0032 0.539360 -92.035782 174.145 -42.0647 0.646225 145.067032 174.942 -40.4987 0.752848 -60.318836 174.922 -40.5426 0.736367 -60.705826 175.301 -43.2603 0.592200 136.445724 173.702 -40.1457 1.108836 -64.516953 173.334 -40.0787 1.170471 -63.360516 174.394 -40.2421 0.912527 -63.701706 174.322 -41.9579 0.634865 147.117447 173.522 -43.6259 0.730370 127.554291 174.891 -40.6175 0.703842 -61.364140 173.305 -44.0373 0.743229 115.420723 174.773 -40.5018 0.758027 -62.842712 173.393 -40.0877 1.164225 -63.568985 173.834 -40.2507 1.064159 -65.761818 174.648 -40.3777 0.820029 -63.242466 173.087 -40.1669 1.192872 -62.543690 173.067 -44.1661 0.744674 111.182465 174.701 -40.412 0.800535 -63.001236 173.138 -44.1452 0.742786 112.104645 173.241 -44.0847 0.743023 113.987778 173.833 -40.3058 1.057257 -66.547867 173.447 -40.119 1.156809 -63.868874 172.691 -40.3729 1.218585 -59.443699 174.916 -40.4194 0.780579 -60.419453 173.879 -40.0575 1.085119 -63.475090 172.958 -44.2262 0.742324 109.563637 173.857 -40.0066 1.099190 -63.090176 174.784 -40.5649 0.729580 -63.149063 174.826 -40.6179 0.702912 -62.673416 173.288 -40.1213 1.175627 -63.351906 172.879 -44.2224 0.747014 108.925865 173.538 -40.1332 1.142102 -64.165909 174.319 -40.2478 0.929286 -64.263275 174.718 -40.8821 0.527475 -69.030258 174.338 -41.4643 0.450200 172.840408 173.654 -40.1805 1.116372 -64.775490 173.367 -43.4411 0.737924 131.875015 173.168 -40.154 1.187047 -62.943001 173.45 -43.9184 0.738402 119.154991 174.399 -41.487 0.451235 168.113831 173.455 -43.0247 0.700018 138.052094 173.435 -43.2741 0.720146 134.556122 173.365 -40.1241 1.167405 -63.645439 174.241 -40.2475 0.949900 -64.691811 173.48 -43.5928 0.733920 128.442535 174.688 -40.4729 0.778129 -63.814629 173.739 -40.2089 1.093629 -65.198547 173.082 -44.123 0.750373 111.839127 174.11 -40.2026 0.997438 -64.546333 174.707 -40.5325 0.750340 -64.179764 175.054 -41.5523 0.563633 145.492004 174.95 -40.5861 0.719387 -60.286831 174.775 -40.3394 0.816727 -61.495079 173.774 -40.3275 1.073101 -66.754646 173.489 -43.7866 0.738873 122.931709 173.832 -40.3568 1.052594 -67.328468 174.807 -40.7557 0.623183 -63.815285 173.578 -40.1818 1.132210 -64.627708 174.797 -40.7035 0.655961 -63.816593 172.868 -40.3187 1.216108 -61.140018 174.626 -40.4228 0.806867 -64.037704 173.391 -43.9469 0.743566 118.044250 173.468 -43.6407 0.739294 127.005989 173.634 -40.2224 1.117729 -65.141479 173.938 -40.073 1.069113 -63.451248 174.439 -41.5386 0.483103 162.917587 173.497 -43.8888 0.734278 120.190384 174.716 -40.3037 0.834927 -61.774723 174.459 -40.1807 0.915171 -62.446270 173.176 -44.1025 0.746203 113.071358 173.403 -40.161 1.162415 -63.961571 174.055 -40.1609 1.021576 -64.142792 174.371 -41.6284 0.552229 160.334595 174.601 -40.2284 0.874731 -61.994171 173.765 -40.2771 1.079869 -66.053566 173.322 -43.9693 0.749874 116.956650 172.996 -44.173 0.748276 110.438553 173.886 -40.6979 1.039201 -75.704071 173.481 -40.183 1.150184 -64.366196 173.087 -40.2284 1.198280 -62.692493 174.698 -40.5818 0.727623 -64.903236 174.66 -40.2642 0.854708 -61.888435 173.239 -40.1636 1.181774 -63.310493 173.021 -40.2563 1.204704 -62.299297 173.461 -43.6946 0.742618 125.445030 176.223 -41.0325 0.619108 153.905121 173.428 -43.1787 0.714944 135.997971 174.746 -40.6223 0.703184 -64.365280 174.846 -40.324 0.814666 -60.664772 174.645 -40.5176 0.764475 -64.989357 173.546 -40.2304 1.137017 -64.949074 174.271 -41.3516 0.424904 -173.137573 174.407 -40.19 0.924131 -62.898144 174.901 -40.3694 0.797085 -60.360592 173.327 -40.1751 1.172866 -63.739933 173.72 -40.3452 1.088130 -66.834946 173.689 -40.2651 1.101389 -65.739235 174.588 -40.4817 0.788980 -65.328682 173.444 -43.7478 0.746086 123.850449 172.911 -40.2906 1.211886 -61.497417 172.756 -40.3549 1.219160 -60.086246 174.79 -40.6585 0.682002 -63.676155 174.966 -40.4466 0.770412 -59.902557 174.526 -40.1932 0.898009 -62.145119 173.774 -40.3773 1.069837 -67.490089 174.117 -40.7043 0.843145 -77.472153 173.231 -44.0303 0.752216 114.824455 173.422 -43.0601 0.707158 137.629456 173.176 -40.2053 1.189884 -63.154785 173.724 -40.3044 1.089378 -66.312798 174.343 -40.1959 0.937647 -63.365810 173.831 -40.7087 1.081286 -74.681442 173.316 -43.4035 0.743846 132.468140 173.369 -43.322 0.731949 133.761703 174.654 -40.5537 0.746496 -65.342743 174.66 -40.8683 0.542783 -71.286987 173.532 -40.2712 1.139282 -65.259491 173.497 -43.837 0.736463 121.571114 174.316 -41.7749 0.629589 152.810623 174.984 -40.5354 0.740041 -59.770927 173.439 -43.5561 0.737372 129.374588 173.509 -42.8906 0.681597 139.463715 173.121 -44.0925 0.752442 112.637962 174.713 -40.8324 0.567225 -68.227104 172.848 -44.1688 0.756643 109.090599 173.027 -44.1252 0.753952 111.249916 173.399 -40.2027 1.163453 -64.196770 174.755 -40.7895 0.598625 -65.896500 173.606 -40.2748 1.122000 -65.580559 173.454 -40.253 1.154946 -64.786415 174.734 -40.7386 0.634519 -65.941887 173.833 -40.408 1.047987 -68.191078 173.512 -42.7936 0.672021 140.226303 174.272 -40.1965 0.954987 -63.762024 174.672 -40.6279 0.706120 -66.033310 173.387 -43.893 0.749049 119.389381 174.529 -40.5185 0.783953 -66.766769 173.263 -40.2076 1.181566 -63.609520 173.437 -43.8639 0.743703 120.510033 174.191 -40.1896 0.978183 -64.046089 173.087 -40.2723 1.202789 -62.833332 173.059 -44.0846 0.758577 112.064529 172.976 -40.2932 1.210878 -62.028023 172.921 -44.1719 0.752513 109.747040 173.67 -40.3124 1.104015 -66.232323 174.947 -40.6492 0.692173 -60.266003 173.331 -43.9124 0.755351 118.432480 174.588 -40.548 0.759131 -66.364357 173.501 -40.2927 1.145888 -65.325264 173.714 -40.3951 1.088714 -67.501297 173.168 -44.0507 0.755276 113.791878 174.631 -40.5904 0.731101 -66.305511 173.665 -40.3586 1.104023 -66.781990 173.407 -43.5993 0.746339 128.087555 174.128 -40.1471 1.005508 -63.704559 173.251 -43.9828 0.757120 115.964661 174.974 -40.3948 0.786077 -59.686272 173.427 -43.8034 0.747984 122.150887 174.789 -40.2874 0.830779 -60.949482 174.715 -40.6776 0.673865 -65.701424 173.383 -43.0954 0.715300 137.172073 173.556 -40.3067 1.133571 -65.701157 174.918 -40.3097 0.812970 -59.901081 173.338 -40.2407 1.173793 -64.161018 173.451 -42.976 0.695941 138.661896 174.735 -40.2487 0.848642 -61.096416 173.402 -43.6553 0.750814 126.427742 173.772 -40.4298 1.068877 -68.308884 173.934 -40.0223 1.080765 -62.958164 174.51 -40.5665 0.765387 -67.961166 173.154 -40.2629 1.196441 -63.256763 174.482 -40.1447 0.920051 -61.860111 174.603 -40.1717 0.889778 -61.351562 173.382 -40.2932 1.168872 -64.748604 173.399 -43.219 0.721408 135.402115 173.239 -40.2528 1.187089 -63.712101 173.406 -43.1388 0.715248 136.557892 173.614 -40.3276 1.118911 -66.179916 174.612 -40.628 0.713753 -67.294922 172.828 -40.3532 1.221098 -60.758312 173.393 -43.7059 0.754245 124.892761 173.453 -40.3095 1.156164 -65.246147 172.781 -44.1652 0.760083 108.515282 173.65 -40.4027 1.108555 -67.278038 174.424 -40.1452 0.932396 -62.217159 173.834 -40.4601 1.044891 -69.141220 172.959 -44.1235 0.758322 110.570992 174.866 -40.2675 0.828459 -60.119671 174.592 -40.8596 0.560156 -73.842445 174.072 -40.0976 1.031381 -63.276943 172.705 -40.41 1.225702 -59.451195 174 -40.0593 1.057782 -63.093151 174.68 -40.7793 0.609425 -68.377190 173.379 -43.7539 0.757078 123.364929 174.679 -40.2015 0.869551 -61.091633 174.644 -40.7226 0.652271 -68.308044 174.363 -40.1477 0.945657 -62.604156 174.632 -40.8204 0.584152 -71.064430 173.049 -40.3016 1.208830 -62.645550 174.379 -40.7301 0.713379 -74.839134 173.512 -40.3288 1.144137 -65.716972 173.353 -40.3265 1.175805 -64.838943 174.491 -40.626 0.739264 -69.604698 174.543 -40.1394 0.909098 -61.398392 173.7 -40.4568 1.094016 -68.330368 174.632 -40.667 0.688560 -67.574783 173.349 -43.2625 0.731185 134.729599 173.095 -44.0452 0.762720 113.003387 173.567 -40.3479 1.131050 -66.185593 175.023 -40.4843 0.758238 -59.236076 174.565 -40.6024 0.735785 -67.727615 173.299 -40.3007 1.182665 -64.339966 173.257 -43.9198 0.765517 117.479210 173.615 -40.367 1.118423 -66.642929 173.338 -43.8701 0.758484 119.639381 174.983 -40.3382 0.801560 -59.404743 173.404 -40.3363 1.167074 -65.212517 174.301 -40.1488 0.960183 -62.958065 173.185 -43.9941 0.763190 114.977798 172.937 -40.3276 1.216995 -61.766972 173.375 -43.8425 0.754550 120.701744 173.626 -40.4373 1.117016 -67.592888 172.816 -44.1234 0.765108 109.122421 173.821 -40.509 1.049156 -70.036163 174.237 -40.1456 0.977051 -63.233540 173.468 -40.3582 1.154894 -65.774315 173.011 -40.3391 1.216277 -62.454018 174.03 -40.7577 0.849945 -81.160408 172.996 -44.0799 0.763592 111.403465 173.073 -40.3371 1.211983 -62.975533 173.125 -40.314 1.204672 -63.282017 174.449 -40.6649 0.728766 -71.389778 173.394 -43.0141 0.707088 138.264847 174.183 -40.1353 0.993558 -63.329987 174.313 -40.8208 0.686249 -79.950478 173.776 -40.4738 1.067284 -69.078773 173.211 -40.3046 1.194599 -63.831123 173.372 -43.545 0.747338 129.528259 173.317 -40.3501 1.183742 -64.806580 174.566 -40.6514 0.708502 -68.725540 174.584 -40.6926 0.680331 -69.230652 173.031 -44.0393 0.768832 112.268745 173.628 -40.479 1.119011 -68.163315 172.741 -40.3919 1.224627 -59.860153 174.974 -40.2923 0.814093 -59.317959 173.574 -40.3981 1.130513 -66.790428 173.526 -40.3638 1.141531 -66.152229 173.364 -40.3564 1.175929 -65.149857 174.939 -40.2623 0.823865 -59.466331 174.294 -41.8581 0.637617 149.319962 175.023 -40.5698 0.728641 -59.165707 174.149 -40.0971 1.011634 -62.973454 173.351 -43.7946 0.760998 121.969154 174.603 -40.7729 0.624023 -70.701805 175.043 -40.4183 0.778202 -59.002911 172.885 -44.1156 0.763458 109.878021 174.805 -40.2367 0.843103 -60.404991 173.366 -43.1743 0.723027 136.060226 173.345 -43.6252 0.759248 127.217941 174.372 -41.5782 0.520750 163.267029 173.286 -43.8692 0.767454 119.181213 174.525 -40.8555 0.579299 -76.205315 173.574 -40.4493 1.132907 -67.414291 175.029 -40.3707 0.791295 -59.067287 174.005 -40.0034 1.069687 -62.478653 173.794 -40.547 1.062491 -70.595894 172.755 -44.12 0.767971 108.580986 174.661 -40.1427 0.887515 -60.644039 173.407 -40.3784 1.169154 -65.607147 173.344 -43.6728 0.762432 125.756424 173.749 -40.5126 1.078808 -69.572937 173.195 -43.9435 0.770886 116.155212 173.123 -44.0011 0.768538 114.035690 174.555 -40.8113 0.605764 -73.430580 173.511 -40.3899 1.146378 -66.341690 174.497 -40.1041 0.927268 -61.282085 174.601 -40.1229 0.902373 -60.841541 173.061 -40.3685 1.217723 -63.018734 173.464 -42.9263 0.689373 139.202271 173.256 -40.3461 1.192644 -64.392776 173.988 -42.175 0.649780 143.417038 174.761 -40.1988 0.858460 -60.438320 173.615 -40.5168 1.126466 -68.578758 174.488 -40.8957 0.558757 -79.567299 173.185 -40.354 1.203083 -63.942066 174.444 -40.1058 0.938054 -61.611874 174.566 -40.7302 0.659687 -70.620476 173.52 -40.4265 1.146108 -66.802719 173.335 -43.7174 0.765427 124.318306 174.023 -42.1333 0.650102 143.909576 174.387 -40.1023 0.951683 -61.895500 174.545 -40.7677 0.639214 -72.289848 174.515 -40.6871 0.698581 -70.689674 172.794 -40.3906 1.226712 -60.401863 174.857 -40.222 0.841168 -59.879913 174.326 -40.1021 0.965638 -62.223526 173.341 -43.5828 0.756411 128.452911 174.356 -41.523 0.485528 167.516632 174.91 -40.2249 0.835466 -59.492939 173.867 -40.5584 1.028759 -71.486504 172.961 -40.3693 1.223190 -62.088703 172.932 -44.0756 0.768036 110.709457 174.216 -40.9249 0.677935 -87.242897 174.12 -40.7937 0.790312 -81.358177 173.567 -40.4935 1.138744 -67.912125 173.361 -43.0548 0.715468 137.749695 173.475 -42.8375 0.678594 140.016708 173.06 -44.001 0.774288 113.146507 174.07 -40.0311 1.047301 -62.491982 174.922 -40.7617 0.633904 -60.169132 174.55 -40.0958 0.918605 -60.860035 173.675 -40.5164 1.106284 -69.051399 174.646 -40.0986 0.900411 -60.296791 173.316 -43.8307 0.765382 120.611214 173.115 -40.366 1.212530 -63.471931 174.139 -40.912 0.728729 -86.605377 174.268 -40.1017 0.979765 -62.516167 173.462 -40.4047 1.158659 -66.215202 173.287 -40.3793 1.191416 -64.845718 173.214 -43.8601 0.781970 118.614784 173.575 -40.5332 1.140860 -68.466339 172.897 -40.359 1.222689 -61.435280 174.119 -40.0589 1.028194 -62.621006 173.527 -40.4632 1.146899 -67.276993 174.729 -40.1534 0.874472 -60.271698 174.21 -40.0969 0.995616 -62.717403 173.307 -43.3576 0.742695 133.214828 175.029 -40.2932 0.811067 -58.859001 173.861 -40.627 1.035487 -73.291801 173.018 -40.3863 1.223788 -62.703152 175.04 -40.5293 0.743757 -58.990398 173.234 -40.3899 1.200890 -64.553719 174.464 -40.075 0.941234 -61.123066 173.193 -43.9003 0.779244 117.185883 174.598 -40.0869 0.911566 -60.467251 172.785 -44.0898 0.771512 109.036163 174.502 -40.7388 0.669191 -72.491875 173.081 -43.9606 0.781173 114.076950 175.093 -40.4548 0.768377 -58.467289 175.988 -41.2354 0.617659 151.562408 172.694 -44.1073 0.771899 108.110085 172.88 -44.0656 0.772000 110.199203 175.016 -40.6611 0.692481 -58.962742 173.728 -40.5724 1.093511 -70.415573 174.446 -40.7083 0.704239 -72.776924 173.537 -40.5183 1.149926 -67.993004 173.327 -43.7564 0.767004 123.014221 173.467 -40.4541 1.161400 -66.774460 173.284 -40.4181 1.196509 -65.141350 172.962 -44.0309 0.774651 111.467384 174.326 -41.606 0.548056 163.068436 174.825 -40.192 0.852085 -59.902321 175.058 -40.3308 0.800640 -58.721565 173.629 -40.5622 1.128097 -69.308357 173.138 -43.9543 0.776326 115.101074 174.496 -40.8204 0.614781 -75.616341 175.086 -40.3706 0.790296 -58.543251 173.284 -43.3005 0.742757 134.146866 173.332 -43.1292 0.725181 136.716522 173.508 -40.4926 1.154805 -67.483070 173.083 -40.4166 1.224190 -63.505276 173.002 -43.9972 0.779168 112.345299 172.736 -44.0748 0.775525 108.638908 175.126 -41.5085 0.563452 144.665756 175 -40.2566 0.821179 -58.946140 173.939 -42.2146 0.649679 142.947723 174.498 -40.7833 0.640610 -74.102882 172.694 -40.4392 1.230121 -59.236023 173.537 -40.5433 1.153439 -68.285576 173.327 -43.2109 0.731030 135.523727 173.257 -43.8211 0.778275 120.359612 173.389 -42.9694 0.703224 138.871017 173.34 -40.4441 1.189009 -65.774231 173.806 -40.5856 1.060748 -71.526787 174.507 -40.065 0.934534 -60.762878 174.461 -40.8486 0.605449 -77.937103 174.442 -40.7571 0.674945 -74.523010 174.082 -42.0678 0.649738 144.789230 173.296 -43.6883 0.772866 125.154175 173.397 -40.4716 1.179932 -66.461182 172.858 -40.3922 1.228516 -61.072823 172.975 -40.4035 1.229153 -62.341698 173.166 -40.4036 1.212330 -64.136673 173.33 -43.0854 0.722397 137.343246 174.275 -41.4633 0.469291 175.062683 174.969 -40.2228 0.831067 -59.029030 174.416 -40.0635 0.954378 -61.255146 174.418 -40.8851 0.594917 -81.184792 173.496 -40.5278 1.162287 -67.795174 173.276 -43.7317 0.778440 123.583916 173.782 -40.6241 1.079246 -72.013130 173.449 -40.5008 1.170758 -67.150986 174.35 -40.0494 0.972803 -61.458546 174.446 -40.8042 0.642669 -76.279663 173.567 -40.5652 1.148153 -68.786110 174.704 -40.1075 0.889105 -60.015804 174.278 -41.8044 0.641611 150.998917 174.24 -41.8365 0.646826 149.513260 173.221 -40.4368 1.209406 -64.831932 173.26 -43.4977 0.762195 130.614182 174.315 -41.6448 0.572444 161.152313 174.794 -40.1548 0.865076 -59.824562 174.295 -40.0652 0.981804 -61.926552 173.278 -40.4663 1.203884 -65.528908 174.627 -40.059 0.912748 -59.999580 173.293 -43.7844 0.773208 121.880569 173.291 -43.6471 0.771666 126.481125 174.177 -40.0448 1.016401 -62.219482 172.826 -40.4192 1.233188 -60.726120 172.834 -44.0778 0.771832 109.613228 174.243 -40.0532 0.997537 -62.028973 173.274 -43.4461 0.754415 131.685760 173.013 -40.4215 1.230880 -62.835194 174.383 -40.7849 0.678792 -76.923325 173.027 -43.9629 0.785251 113.129898 174.883 -40.1859 0.847079 -59.433662 173.336 -40.4929 1.196011 -66.221176 173.146 -43.9098 0.784984 116.193909 173.255 -43.3909 0.753241 132.693008 172.905 -44.0388 0.775823 110.683105 173.195 -43.8088 0.793823 120.112473 173.507 -40.5712 1.165893 -68.365318 172.671 -44.0509 0.780707 108.143456 173.277 -43.2419 0.740377 135.070587 173.444 -40.5439 1.178066 -67.572433 173.576 -40.6159 1.154650 -69.473343 174.459 -40.0372 0.951173 -60.702591 175.115 -40.4089 0.780663 -58.296238 174.564 -40.0571 0.925048 -60.343006 174.944 -40.187 0.841202 -59.010429 174.679 -40.0715 0.901266 -59.818748 175.031 -40.7029 0.677484 -58.411114 173.233 -43.7729 0.787664 121.837296 173.093 -40.4646 1.232501 -63.958237 173.29 -43.5985 0.767709 127.977356 173.391 -40.5186 1.187099 -66.907501 172.922 -40.399 1.229720 -61.757969 172.783 -44.0509 0.777792 109.210922 174.768 -40.1141 0.878094 -59.660900 173.492 -40.6215 1.178959 -68.782310 175.063 -40.2493 0.819562 -58.440952 175.082 -40.5526 0.737748 -58.376266 173.308 -43.1693 0.731272 136.140808 173.817 -40.6692 1.072617 -73.562920 173.152 -40.4563 1.223125 -64.426735 173.235 -43.6777 0.786515 125.432755 174.394 -40.8353 0.641167 -79.015511 173.337 -43.0229 0.716261 138.217331 175.027 -40.2146 0.828914 -58.562897 173.698 -40.6618 1.125180 -71.414330 174.289 -41.5065 0.490914 171.188522 173.212 -40.4857 1.218728 -65.197311 174.852 -40.1497 0.859072 -59.390942 175.093 -40.2884 0.809560 -58.333336 173.03 -40.4629 1.238785 -63.296364 172.843 -44.0219 0.780895 110.030312 174.319 -41.7379 0.619094 155.131714 173.239 -43.343 0.752394 133.498566 174.127 -40.0229 1.034922 -62.166451 173.27 -40.5173 1.212996 -65.968979 173.582 -40.6689 1.164390 -70.118546 175.068 -40.5978 0.720728 -58.437443 175.121 -40.3275 0.799952 -58.198238 173.434 -40.5884 1.187496 -67.966896 172.728 -44.0282 0.782637 108.746094 173.39 -40.5597 1.193378 -67.324036 173.291 -43.546 0.761899 129.430145 173.475 -40.6585 1.190441 -69.009071 172.761 -40.4315 1.233102 -59.976982 172.601 -44.0437 0.783866 107.584084 173.234 -43.6201 0.781345 127.367668 173.429 -42.8836 0.687745 139.755280 173.122 -40.4866 1.233191 -64.434219 174.402 -40.0142 0.969600 -60.749790 174.248 -41.3881 0.446956 -177.468689 173.758 -40.6636 1.101571 -72.345528 176.169 -41.0384 0.620175 153.689865 173.208 -43.727 0.795570 123.487526 174.052 -40.9281 0.769520 -86.102173 174.298 -41.5632 0.526885 166.836258 173.633 -40.662 1.147382 -70.603477 174.591 -40.0131 0.929639 -59.704166 174.287 -40.0194 0.994586 -61.415745 172.883 -40.4285 1.236138 -61.378849 174.994 -40.1886 0.836697 -58.671944 173.529 -40.6605 1.177092 -69.507080 172.909 -43.9997 0.783105 110.985924 173.426 -40.6346 1.197757 -68.369324 172.776 -44.0106 0.784419 109.294456 173.019 -40.5091 1.252054 -63.574318 174.86 -40.9558 0.478725 -63.358944 174.987 -40.7392 0.656259 -58.877529 175.089 -40.5047 0.753530 -58.430256 173.334 -40.5445 1.203815 -66.738541 174.92 -40.1397 0.853919 -58.872383 174.819 -40.1211 0.869736 -59.392467 175.141 -40.4379 0.774031 -58.023022 173.409 -42.9314 0.696093 139.294693 174.044 -42.0937 0.650717 144.363953 173.349 -40.6045 1.210494 -67.469048 173.239 -43.575 0.775186 128.696289 175.139 -40.239 0.818249 -57.867470 172.683 -44.0043 0.786870 108.358963 173.431 -40.6774 1.205054 -68.815666 172.629 -44.0019 0.788233 107.845108 172.832 -40.452 1.240447 -60.790169 174.74 -40.0645 0.893210 -59.384426 174.518 -40.022 0.942300 -60.200592 173.159 -40.4971 1.229642 -64.870850 173.566 -40.8185 1.210804 -71.077515 173.788 -40.6944 1.098692 -73.408897 173.17 -43.7643 0.805647 121.639465 175.151 -40.3676 0.790493 -57.996384 174.675 -40.0277 0.911462 -59.404514 174.05 -40.7934 0.820231 -82.173080 173.341 -42.9864 0.711946 138.739120 173.672 -40.6959 1.145433 -71.441513 173.541 -40.7833 1.205855 -70.630127 173.549 -40.8604 1.225123 -71.134537 173.479 -40.76 1.212704 -69.911942 173.368 -40.7208 1.227817 -68.713326 173.428 -40.7188 1.214448 -69.160576 173.404 -40.7584 1.228107 -69.288773 173.549 -40.739 1.191669 -70.394234 173.712 -40.7835 1.170036 -72.628654 175.091 -40.2014 0.827898 -58.077438 173.297 -43.0508 0.725004 137.852249 173.3 -40.6611 1.231375 -67.666939 173.62 -40.7807 1.188070 -71.446098 173.537 -40.9011 1.237177 -71.229828 175.046 -40.1644 0.838053 -58.211010 173.694 -40.8677 1.207355 -72.511871 173.496 -40.8189 1.223843 -70.460114 173.145 -40.5735 1.247907 -65.623489 173.594 -40.9 1.228860 -71.680496 173.374 -40.6587 1.214572 -68.186943 173.39 -40.6926 1.217536 -68.627838 173.263 -40.6195 1.231978 -66.991508 173.268 -40.5715 1.222687 -66.515594 173.198 -40.5964 1.241725 -66.275742 173.188 -40.5391 1.232826 -65.552315 173.748 -40.8165 1.179111 -73.252815 173.348 -40.6888 1.225867 -68.279396 173.554 -40.6965 1.179171 -70.089958 173.624 -40.8495 1.210121 -71.784698 173.689 -40.825 1.191708 -72.432617 173.737 -40.7046 1.126166 -72.514648 173.686 -40.7384 1.157197 -71.987175 173.613 -40.7118 1.167489 -70.865891 173.493 -40.7015 1.195562 -69.563148 173.437 -40.7941 1.228993 -69.817345 173.43 -40.8341 1.239352 -70.031151 173.797 -40.7257 1.109976 -74.077362 173.764 -40.7524 1.141155 -73.404442 173.769 -40.788 1.160193 -73.586128 173.2 -40.6599 1.252534 -66.990250 173.128 -40.5473 1.245540 -65.160187 173.277 -43.0931 0.731022 137.255127 173.252 -43.1377 0.737806 136.617920 173.263 -43.1921 0.739568 135.820648 173.312 -40.7102 1.237350 -68.226021 173.178 -43.121 0.748789 136.876740 174.812 -40.082 0.879097 -59.116161 173.476 -40.8805 1.241898 -70.654785 173.558 -40.9418 1.243566 -71.560677 174.985 -40.8497 0.602026 -57.497566 173.508 -40.9228 1.246416 -71.110489 173.836 -40.7362 1.093803 -75.236145 173.658 -40.8998 1.220907 -72.212097 173.384 -40.7993 1.240203 -69.456009 173.333 -40.7589 1.242011 -68.790199 172.863 -43.9629 0.791173 110.508156 173.198 -43.1674 0.748289 136.193924 173.241 -43.0607 0.734446 137.734924 173.258 -40.6968 1.246409 -67.737633 174.867 -40.1049 0.867392 -58.965328 175.072 -40.6717 0.693779 -57.975357 173.269 -40.7363 1.250575 -68.178940 173.13 -40.6142 1.259950 -66.032249 175.144 -40.4746 0.764599 -57.891754 173.509 -40.954 1.253008 -71.252716 176.246 -40.9391 0.621882 154.566040 173.213 -43.2166 0.748816 135.466919 175.173 -40.4084 0.781403 -57.811344 174.984 -40.1524 0.845291 -58.545563 172.957 -40.44 1.237737 -62.287575 173.413 -40.8682 1.249335 -70.120880 173.076 -40.5008 1.242957 -64.133606 175.027 -40.7834 0.644843 -57.537258 173.292 -43.007 0.721776 138.501404 173.373 -40.8406 1.250340 -69.674950 173.222 -43.265 0.750326 134.734879 173.325 -40.8093 1.252729 -69.136528 174.086 -40.7526 0.830186 -79.970589 173.738 -40.8478 1.195808 -73.048111 172.567 -43.9973 0.789497 107.436371 172.662 -43.964 0.792208 108.194344 173.275 -40.7801 1.256721 -68.594048 173.414 -40.9017 1.256026 -70.324234 173.458 -40.9372 1.256860 -70.813972 173.22 -43.3047 0.753171 134.122086 173.135 -43.1455 0.757160 136.517136 173.149 -43.1928 0.757730 135.830917 175.024 -40.1184 0.849132 -58.102692 173.213 -40.7186 1.259183 -67.681046 174.273 -41.6135 0.565243 164.272095 174.213 -41.3501 0.461260 -174.376419 173.212 -43.0898 0.741055 137.321426 172.514 -43.9953 0.790324 107.153313 172.899 -40.4743 1.246956 -61.659660 173.37 -40.8789 1.258329 -69.897423 173.323 -40.8536 1.260997 -69.436455 174.803 -40.0297 0.891516 -58.729282 173.153 -40.7069 1.269881 -67.234192 175.005 -40.8205 0.626116 -57.311234 175.151 -40.2903 0.807239 -57.921413 174.307 -41.6927 0.599364 158.631195 173.369 -40.9111 1.264532 -70.086067 174.139 -41.956 0.650549 146.457962 173.633 -40.9489 1.235591 -72.131523 172.728 -43.9766 0.790253 108.863464 173.991 -40.7434 0.871776 -81.589478 173.273 -40.8246 1.264303 -68.933273 174.165 -41.9141 0.650604 147.247894 174.864 -40.0567 0.877740 -58.613075 173.482 -40.9903 1.264137 -71.221924 173.397 -40.9335 1.264880 -70.382500 173.789 -42.3259 0.651309 142.083191 173.23 -40.7574 1.261557 -68.140396 174.738 -40.0181 0.903342 -58.964886 172.796 -43.9733 0.790214 109.631683 173.243 -43.0259 0.731608 138.246277 176.185 -40.997 0.621226 153.986420 173.326 -40.8949 1.267936 -69.725639 173.275 -40.8696 1.271109 -69.264107 174.971 -40.1133 0.854741 -58.391533 174.232 -41.4901 0.497082 174.090302 173.223 -40.7954 1.268189 -68.434090 173.409 -40.9738 1.270850 -70.660553 173.198 -43.4213 0.765490 132.206528 173.192 -43.3729 0.762488 133.055969 173.123 -43.1041 0.756608 137.124710 173.098 -43.218 0.767549 135.478226 174.93 -40.0798 0.865774 -58.403381 172.719 -40.471 1.238381 -59.414890 173.203 -43.4731 0.769927 131.209595 173.539 -41.0174 1.261788 -71.713959 173.223 -40.8421 1.274633 -68.799934 173.164 -43.6895 0.805738 125.016312 173.099 -40.7315 1.284394 -67.231583 173.335 -40.9435 1.275295 -70.057198 173.207 -43.5308 0.775983 129.911163 173.341 -42.9371 0.705887 139.453735 173.16 -43.2407 0.759010 135.132370 173.128 -40.5174 1.238989 -64.815125 173.353 -41.0017 1.283257 -70.453094 174.097 -42.012 0.651109 145.499130 173.179 -43.33 0.761598 133.760956 174.224 -41.4368 0.473892 178.287735 173.283 -40.9085 1.276339 -69.561485 174.253 -41.6603 0.593229 162.036316 173.23 -40.8899 1.280723 -69.165710 173.086 -40.668 1.280204 -66.423363 174.198 -40.9683 0.673375 -89.778770 173.518 -42.6081 0.657930 140.992020 173.151 -43.0817 0.750332 137.449966 173.171 -40.7575 1.272655 -67.834084 173.087 -43.1698 0.766484 136.159241 173.077 -43.1192 0.765345 136.892807 173.083 -40.5705 1.260371 -65.110588 173.359 -41.0458 1.290187 -70.688011 173.544 -41.0498 1.267205 -71.866737 173.292 -40.9813 1.287403 -70.007462 173.489 -42.7373 0.668185 140.604172 173.17 -40.8123 1.279154 -68.311714 173.171 -40.8618 1.284609 -68.696449 173.74 -42.3692 0.652415 141.817764 173.947 -42.1776 0.650891 143.225174 175.079 -40.1207 0.844344 -57.788826 172.76 -43.9352 0.796290 109.240913 173.985 -40.7849 0.843440 -82.986961 175.183 -40.3244 0.799499 -57.736794 173.052 -40.7622 1.296661 -67.380409 173.247 -40.9406 1.286353 -69.554680 172.97 -40.489 1.249697 -62.718735 173.175 -40.9113 1.290428 -69.039856 174.238 -41.5381 0.524474 170.605560 174.954 -40.8646 0.573636 -59.213535 173.329 -41.0711 1.298017 -70.617355 174.263 -41.1151 0.507405 -100.152542 176.114 -41.0847 0.620183 153.215149 175.082 -40.7089 0.681664 -57.548599 173.18 -43.0434 0.742772 137.998047 173.646 -41.008 1.245628 -72.422699 173.112 -40.7845 1.286211 -67.826591 172.594 -43.9516 0.793275 107.631638 173.167 -43.2872 0.760814 134.431274 173.176 -43.6419 0.796954 126.828346 173.523 -41.0734 1.274342 -71.802917 173.292 -41.0297 1.295436 -70.237762 173.231 -40.9903 1.295888 -69.735817 173.118 -40.8334 1.288708 -68.280655 173.113 -40.8832 1.293411 -68.613594 173.331 -41.1078 1.303861 -70.775177 173.149 -43.4995 0.782780 130.788895 172.463 -43.9693 0.793080 106.917358 173.396 -41.0907 1.293176 -71.089798 173.177 -40.9583 1.296926 -69.308533 174.861 -40.0163 0.886332 -58.314617 174.177 -41.4748 0.503810 176.318466 173.174 -43.5869 0.789623 128.569382 173.261 -41.081 1.306994 -70.287491 174.001 -40.8297 0.815590 -84.005112 172.525 -43.9589 0.792911 107.251434 175.117 -40.1512 0.836091 -57.709503 173.106 -43.2655 0.769323 134.796722 173.277 -41.1278 1.313044 -70.543190 175.18 -41.4948 0.564107 144.216141 174.914 -40.0266 0.878122 -58.111019 172.918 -40.6786 1.328015 -65.919319 172.891 -40.6248 1.336468 -65.317261 173.048 -43.2868 0.779908 134.535583 172.989 -43.2947 0.788978 134.493683 172.924 -43.2442 0.794070 135.173477 172.99 -40.7524 1.311597 -67.026665 173.402 -42.8334 0.683744 140.297104 172.97 -40.7109 1.315144 -66.442619 173.037 -43.1964 0.775734 135.787079 172.966 -43.265 0.789967 134.900513 173.031 -40.7155 1.299559 -66.746300 172.963 -43.3261 0.794784 134.114014 173.048 -43.2427 0.776809 135.152817 173.008 -43.2634 0.784027 134.895615 173.028 -43.1472 0.774798 136.448593 173.206 -41.0357 1.305554 -69.816147 172.953 -40.6302 1.319555 -65.388802 173.174 -40.996 1.302722 -69.486992 175.001 -40.0784 0.858906 -57.988255 173.107 -43.3184 0.772968 134.015625 173.362 -42.8634 0.691361 140.192093 173.975 -42.145 0.651512 143.623993 172.996 -40.6717 1.306643 -66.049889 172.697 -43.9244 0.797503 108.565811 173.14 -43.357 0.770260 133.386078 174.98 -40.0334 0.869596 -57.802902 173.025 -43.3345 0.786991 133.902893 172.886 -43.2196 0.797487 135.464340 173.286 -42.9684 0.718968 139.117691 172.966 -43.3609 0.797365 133.647812 172.479 -43.9319 0.795449 107.054482 172.924 -43.2924 0.797191 134.591904 175.064 -40.0816 0.852741 -57.657383 173.11 -40.9325 1.299573 -68.892532 175.146 -40.1845 0.828488 -57.665176 173.189 -41.0779 1.313674 -69.905891 173.084 -43.368 0.780731 133.309097 172.966 -43.3869 0.799718 133.291977 172.843 -40.6597 1.344542 -65.645203 172.641 -43.9274 0.796253 108.028320 172.921 -40.738 1.328386 -66.525993 173.135 -43.3971 0.774477 132.734314 173.013 -43.3862 0.793142 133.184799 173.468 -41.0777 1.281980 -71.467392 172.977 -43.1765 0.783627 136.019592 173.692 -40.9718 1.233180 -72.592262 172.984 -43.227 0.785217 135.378723 173.503 -42.6673 0.661842 140.875229 175.055 -40.7417 0.665585 -57.622231 173.114 -40.9754 1.305421 -69.124588 172.859 -43.2592 0.802771 135.035828 172.912 -43.3417 0.802481 134.007904 173.372 -42.8998 0.695854 139.796127 172.968 -43.4125 0.802066 132.926010 172.928 -43.2018 0.791534 135.678726 173.134 -41.0203 1.310180 -69.412888 173.071 -43.4129 0.786957 132.625473 175.148 -40.532 0.748135 -57.652687 173.016 -43.4228 0.796290 132.629395 173.111 -43.5803 0.800465 129.163300 174.159 -41.429 0.493620 179.267563 173.288 -41.1577 1.317003 -70.696236 176.283 -40.8213 0.624236 155.597443 173.127 -43.4506 0.781384 131.817932 173.25 -42.9931 0.727955 138.749359 175.119 -40.582 0.730032 -57.788548 172.918 -43.3881 0.805807 133.401962 172.84 -40.4832 1.247836 -60.902447 172.849 -40.7159 1.342405 -66.116989 173.046 -43.4537 0.795202 132.035522 173.202 -41.1207 1.318988 -70.120621 173.131 -43.542 0.791456 129.942566 173.142 -43.799 0.808958 119.768074 172.982 -43.4488 0.803877 132.352127 172.854 -43.3144 0.807132 134.423752 173.004 -43.488 0.804948 131.655594 174.752 -41.3642 0.429782 143.593506 173.149 -41.0559 1.314019 -69.633034 172.784 -40.4756 1.243499 -60.175392 172.6 -43.9022 0.798373 107.737534 172.852 -43.363 0.811145 133.872620 172.917 -43.4398 0.811150 132.719330 172.952 -43.4769 0.810706 132.067749 173.077 -43.5027 0.795829 131.050476 173.014 -43.5319 0.808853 130.897247 175.038 -40.0437 0.861910 -57.584583 173.121 -43.6173 0.804854 128.048996 172.791 -40.6891 1.352098 -65.844887 176.128 -41.047 0.620948 153.498505 172.854 -43.4099 0.815277 133.302704 172.845 -43.214 0.801843 135.522949 173.993 -42.096 0.652825 144.129105 173.026 -43.0952 0.773696 137.165787 172.959 -43.5151 0.814122 131.487427 173.068 -43.5552 0.803859 130.079987 172.875 -43.1782 0.797089 135.917480 172.946 -40.773 1.324793 -66.992386 172.424 -43.9275 0.797476 106.742531 172.792 -43.2895 0.811539 134.767365 172.922 -40.5917 1.331808 -64.892502 172.899 -43.4935 0.818805 132.098251 172.929 -43.1629 0.789980 136.138611 172.789 -40.7269 1.351293 -66.081680 172.857 -43.4551 0.819402 132.743301 172.918 -43.5424 0.822192 131.367905 173.015 -43.5757 0.814517 130.134048 172.968 -43.5582 0.818240 130.801422 172.965 -43.1257 0.784076 136.653198 173.316 -41.1738 1.316640 -70.910965 173.179 -41.1624 1.327464 -70.112915 172.786 -43.3381 0.815651 134.267334 173.239 -41.1567 1.321507 -70.414803 172.529 -43.9105 0.796563 107.311462 173.019 -40.6269 1.296450 -65.515007 173.127 -41.0966 1.321658 -69.685219 172.79 -43.3855 0.819192 133.756577 172.791 -43.2328 0.807997 135.341965 173.204 -43.0024 0.736312 138.588760 174.033 -42.0517 0.652945 144.729996 172.778 -40.6422 1.356769 -65.519630 174.118 -41.4658 0.512049 177.739136 172.751 -40.5945 1.365868 -65.232620 172.823 -40.6031 1.353895 -65.153091 172.653 -43.8987 0.799848 108.143410 172.734 -40.6759 1.359733 -65.756844 172.788 -43.4379 0.824449 133.167221 173.438 -42.7927 0.676078 140.448227 172.744 -40.7147 1.356485 -65.976051 172.979 -40.5839 1.313287 -64.685699 173.213 -41.1911 1.329373 -70.342812 172.811 -40.7643 1.348610 -66.343178 172.899 -43.1324 0.793121 136.436066 172.457 -43.8955 0.799252 106.977608 174.199 -41.655 0.603590 163.282928 173.272 -41.1828 1.323123 -70.658760 172.819 -43.1789 0.803195 135.862579 172.693 -43.8774 0.803329 108.458633 173.144 -41.1377 1.326331 -69.882370 173.955 -42.1225 0.653270 143.750549 172.874 -40.5867 1.345151 -64.919395 172.718 -40.6319 1.364840 -65.511993 173.251 -41.2159 1.330857 -70.567085 173.127 -41.1686 1.332014 -69.876617 172.628 -43.8623 0.803087 107.937920 175.114 -40.6312 0.712303 -57.615364 172.752 -43.3114 0.816517 134.592133 172.75 -43.3652 0.820715 134.058578 172.757 -40.7514 1.354297 -66.174110 172.775 -40.5566 1.369352 -64.909622 172.494 -43.871 0.800854 107.185097 173.286 -41.234 1.331025 -70.743919 174.214 -41.6264 0.588372 164.848907 174.912 -40.9575 0.486868 -61.379868 173.459 -41.1215 1.289488 -71.561401 173.149 -41.1972 1.334712 -70.032814 172.766 -43.4804 0.830082 132.752808 172.396 -43.8897 0.801725 106.645233 173.086 -41.14 1.330899 -69.628670 175.179 -40.4447 0.773846 -57.673386 172.554 -43.8693 0.801062 107.480194 174.162 -41.2058 0.504374 -99.661774 172.935 -40.5591 1.334443 -64.414467 172.894 -40.5617 1.345521 -64.584496 172.862 -40.8144 1.343967 -66.718117 173.092 -43.6726 0.821153 126.354256 173.122 -41.2254 1.339953 -69.949532 173.18 -41.2307 1.337537 -70.227516 172.84 -40.5513 1.361479 -64.628242 173.237 -41.2533 1.336919 -70.522408 174.094 -41.4997 0.524824 176.750412 176.714 -42.6976 0.563429 147.773315 176.896 -42.7733 0.557588 147.814026 177.059 -42.8456 0.552143 147.704773 176.565 -42.9067 0.561370 145.175293 176.727 -42.8593 0.558772 146.345764 176.507 -43.0056 0.560454 143.705872 177.069 -40.2322 0.615289 161.176056 176.672 -42.9891 0.556704 144.478470 177.035 -42.9496 0.549497 146.304443 176.908 -42.9044 0.553418 146.440582 176.668 -40.795 0.614501 157.011627 176.808 -42.9702 0.553869 145.200104 176.444 -43.1119 0.560225 142.007690 176.616 -43.1033 0.555425 142.659912 176.413 -43.5686 0.555436 133.974396 176.802 -43.0871 0.550924 143.513245 176.375 -43.2062 0.560916 140.287415 176.487 -40.9371 0.615495 155.458206 176.938 -43.0141 0.549530 145.049316 176.487 -43.4387 0.553919 136.356155 176.541 -43.2293 0.555141 140.379959 176.727 -43.2071 0.550179 141.287338 176.389 -43.3244 0.558644 138.212982 176.549 -43.344 0.553116 138.295746 176.676 -43.3143 0.549806 139.195129 176.568 -40.7918 0.617347 156.699890 176.509 -40.8599 0.617134 156.073242 176.952 -40.0979 0.620414 161.528259 176.873 -40.2315 0.617847 160.626007 176.724 -40.3623 0.618013 159.947983 176.904 -40.1037 0.621142 161.362900 176.72 -40.3109 0.617887 160.099609 176.665 -40.4763 0.621308 159.183289 176.682 -40.435 0.620012 159.542709 176.868 -40.1822 0.619178 160.800705 176.461 -40.625 0.624221 157.291107 176.514 -40.6019 0.623671 157.621109 176.823 -40.2345 0.618003 160.484619 176.916 -40.0619 0.621733 161.644608 176.68 -40.3926 0.619258 159.784103 176.521 -40.555 0.624767 157.911133 176.686 -40.3557 0.618554 159.937683 169.074 -41.6999 0.907109 -38.543705 169.307 -41.7881 0.921421 -38.320011 169.517 -41.8897 0.933993 -37.960800 169.286 -41.5829 0.922669 -39.539455 169.554 -41.6703 0.939447 -39.339615 168.554 -41.3162 0.878225 -40.020248 168.374 -41.1028 0.868869 -40.938038 169.046 -41.5172 0.907537 -39.606880 168.369 -40.8987 0.869797 -42.096889 168.63 -41.1291 0.884401 -41.239983 168.584 -40.9619 0.882556 -42.141193 168.811 -41.4312 0.893179 -39.766392 168.811 -41.2346 0.895017 -40.934380 169.03 -41.3369 0.908464 -40.678528 169.25 -41.4159 0.922096 -40.527496 169.699 -41.823 0.947200 -38.552113 169.479 -41.4652 0.937068 -40.555733 169.041 -41.1614 0.910525 -41.769253 168.84 -41.0299 0.898163 -42.220264 169.246 -41.2564 0.923335 -41.516560 169.416 -41.3325 0.934312 -41.318150 169.724 -41.4908 0.953814 -40.705479 169.859 -41.6797 0.960576 -39.617470 169.075 -41.0149 0.913560 -42.747002 168.752 -40.8586 0.893284 -43.072987 169.265 -41.0917 0.925969 -42.611252 168.543 -40.7521 0.880823 -43.279953 168.999 -40.854 0.909089 -43.595146 169.494 -41.1889 0.940861 -42.363319 168.813 -40.703 0.897562 -44.135120 169.614 -41.3364 0.947999 -41.582897 169.254 -40.9281 0.925963 -43.638260 169.482 -41.0005 0.941108 -43.582664 169.05 -40.6671 0.912764 -44.861515 169.237 -40.76 0.925200 -44.679897 168.895 -40.5362 0.902741 -45.311913 169.721 -41.2206 0.956750 -42.518616 169.85 -41.3266 0.964899 -41.981342 169.989 -41.4769 0.973263 -41.128220 169.091 -40.5286 0.915332 -45.795410 169.453 -40.8229 0.939679 -44.706387 169.71 -41.0821 0.956885 -43.443401 169.252 -40.6025 0.926203 -45.703831 169.408 -40.6804 0.936775 -45.544941 169.006 -40.3755 0.909182 -46.528629 169.917 -41.1682 0.971688 -43.191402 169.723 -40.8807 0.958812 -44.850418 169.246 -40.4433 0.925230 -46.695728 169.932 -41.0046 0.974013 -44.372734 170.132 -41.6258 0.981512 -40.279961 169.219 -40.2812 0.922659 -47.632908 169.482 -40.5259 0.941710 -46.718555 170.125 -41.2841 0.986605 -42.683754 169.613 -40.6879 0.951152 -45.940964 170.194 -42.1631 0.974282 -36.889069 170.243 -41.4546 0.993395 -41.627697 169.983 -40.8433 0.978406 -45.633148 170.13 -41.0918 0.988912 -44.097836 169.437 -40.3383 0.937604 -47.825378 170.172 -41.9149 0.978442 -38.380054 170.259 -41.7638 0.988325 -39.454033 169.749 -40.5431 0.960640 -47.221027 169.394 -40.1707 0.933342 -48.775730 170.112 -40.9484 0.988276 -45.131592 170.126 -40.4432 0.987842 -48.810856 170.194 -40.5817 0.993950 -47.977695 170.249 -40.7058 0.998924 -47.199993 170.187 -40.8281 0.994327 -46.166214 170.328 -40.4726 1.003837 -49.104019 170.381 -41.3225 1.006839 -42.783886 170.339 -41.1634 1.005248 -43.914986 170.616 -40.0326 1.019796 -53.103245 169.57 -40.0436 0.944015 -50.077709 169.8 -40.1 0.960583 -50.341824 169.846 -40.262 0.965625 -49.375278 170.068 -40.2986 0.982067 -49.686317 170.274 -40.331 0.998054 -49.986267 170.215 -40.1912 0.991708 -50.822990 170.141 -40.0673 0.984476 -51.496346 170.332 -40.0482 0.998469 -52.175194 170.444 -40.3722 1.012040 -50.146660 170.462 -40.2203 1.011292 -51.313293 170.732 -40.2204 1.032829 -52.068481 170.885 -40.1057 1.042339 -53.337555 169.906 -40.4149 0.971257 -48.474335 170.009 -40.1545 0.976095 -50.526848 170.32 -40.9723 1.004930 -45.344296 170.63 -40.3574 1.027047 -50.775791 170.405 -40.6316 1.011456 -48.115440 170.546 -41.2282 1.022483 -43.777130 170.441 -41.4426 1.010100 -41.969547 171.109 -40.025 1.057883 -54.563564 170.394 -41.5941 1.002879 -40.780258 170.918 -40.2446 1.048462 -52.420979 170.529 -40.4921 1.020550 -49.483349 170.528 -41.0776 1.022159 -44.922710 171.351 -40.0389 1.077884 -55.158741 170.85 -40.3579 1.045379 -51.374088 170.346 -41.8919 0.991675 -38.655025 170.563 -40.9021 1.025815 -46.396275 170.626 -40.6295 1.030223 -48.699184 170.586 -41.3648 1.024241 -42.760994 171.075 -40.2004 1.060365 -53.192135 170.703 -40.771 1.038192 -47.801857 170.747 -40.4942 1.039017 -50.049477 171.048 -40.3383 1.061780 -52.081238 171.268 -40.1752 1.075804 -53.940830 170.855 -40.6532 1.050864 -49.112534 170.599 -41.4969 1.022780 -41.740959 170.676 -41.1512 1.035057 -44.621883 170.998 -40.4947 1.060945 -50.732250 171.545 -40.0467 1.094044 -55.674160 170.713 -41.0323 1.039342 -45.671654 170.865 -40.7956 1.053427 -48.013920 171.205 -40.2926 1.074123 -52.889957 170.779 -40.9017 1.045722 -46.913090 171.469 -40.1733 1.092869 -54.547768 170.414 -42.0067 0.993450 -37.947418 171.06 -40.626 1.069024 -49.870113 170.747 -41.2715 1.040837 -43.776505 171.235 -40.4326 1.080945 -51.904846 170.461 -41.758 1.004280 -39.663567 170.513 -41.8905 1.004524 -38.769375 171.039 -40.7604 1.069325 -48.753185 170.949 -40.8914 1.061904 -47.410801 171.181 -40.5582 1.079087 -50.750267 170.778 -41.4181 1.041349 -42.619854 171.399 -40.3163 1.092152 -53.292000 170.472 -42.1039 0.994731 -37.374245 170.766 -41.5446 1.037381 -41.582672 170.885 -41.011 1.055895 -46.224850 170.627 -41.6431 1.021626 -40.652637 171.231 -40.6764 1.086581 -49.952526 170.844 -41.1463 1.051298 -44.998459 171.432 -40.447 1.099814 -52.390530 171.37 -40.5603 1.097554 -51.297146 171.887 -40.0344 1.122239 -56.878468 171.6 -40.2773 1.108614 -54.217979 171.657 -40.1606 1.108766 -55.243275 171.731 -40.0425 1.109528 -56.291027 171.109 -40.8872 1.077690 -47.856415 171.744 -40.2473 1.120984 -54.951324 171.864 -40.1595 1.127250 -56.006138 170.572 -42.0132 1.005180 -37.982616 171.576 -40.395 1.111470 -53.250008 171.22 -40.8012 1.088008 -48.895767 172.038 -40.0695 1.137216 -57.241314 171.036 -40.9893 1.070883 -46.764030 171.75 -40.3534 1.126732 -54.175560 171.423 -40.6766 1.106310 -50.510067 171.85 -40.2758 1.132434 -55.154129 170.786 -41.6351 1.037226 -40.891647 172.037 -40.181 1.143966 -56.555668 171.973 -40.2627 1.143244 -55.751427 170.631 -41.7863 1.017714 -39.584274 171.571 -40.5174 1.115976 -52.255825 170.896 -41.2472 1.055926 -44.258701 170.994 -41.0936 1.066746 -45.772141 171.344 -40.7526 1.099941 -49.646061 171.259 -40.9039 1.093967 -48.119453 170.759 -41.7187 1.031910 -40.207664 171.173 -40.9834 1.085634 -47.186649 171.915 -40.3539 1.143274 -54.841702 172.213 -40.0274 1.149146 -58.241589 171.7 -40.4517 1.126392 -53.225731 172.194 -40.1566 1.156329 -57.399788 171.516 -40.6104 1.113930 -51.336658 170.662 -41.9012 1.016592 -38.781895 172.055 -40.3445 1.156876 -55.540962 171.361 -40.8348 1.103678 -48.981289 170.895 -41.3363 1.054638 -43.496635 172.114 -40.2565 1.156441 -56.419312 171.855 -40.4558 1.142876 -53.789368 171.116 -41.0685 1.079720 -46.285267 170.925 -41.417 1.056610 -42.869907 170.71 -41.9913 1.017704 -38.194508 171.65 -40.6113 1.127921 -51.738922 172.004 -40.4302 1.157410 -54.640430 172.179 -40.3398 1.169178 -56.171028 171.297 -40.991 1.099440 -47.452000 171.742 -40.5347 1.134737 -52.689701 172.335 -40.0165 1.157554 -58.831497 171.567 -40.6866 1.121955 -50.846664 172.34 -40.1054 1.164380 -58.373348 171.227 -41.0607 1.092212 -46.651642 170.991 -41.1953 1.066121 -44.898155 171.882 -40.5549 1.151253 -53.048683 170.9 -41.4931 1.052422 -42.190193 171.631 -40.7608 1.131183 -50.375237 170.503 -42.5747 0.987315 -34.931263 170.875 -41.6808 1.045324 -40.633221 171.399 -40.9264 1.109703 -48.283962 172.32 -40.1939 1.169909 -57.794598 171.481 -40.7731 1.115250 -49.843498 170.765 -41.8208 1.029048 -39.428947 171.971 -40.5056 1.158485 -53.856850 170.813 -42.5349 1.006231 -35.263840 172.444 -40.0384 1.166808 -59.218063 171.789 -40.6179 1.143713 -52.137848 170.905 -41.5924 1.050804 -41.381866 172.132 -40.4166 1.170405 -55.371288 170.808 -41.9872 1.026969 -38.274860 171.179 -41.1222 1.087203 -45.985699 170.996 -41.5344 1.062562 -41.999798 171.703 -40.6884 1.136798 -51.243454 170.788 -41.9131 1.027850 -38.775333 172.454 -40.1134 1.173372 -58.906609 171.468 -40.8568 1.115775 -49.066914 171.015 -41.4612 1.066219 -42.656387 172.26 -40.2676 1.170849 -57.052486 171.916 -40.6346 1.159200 -52.449280 170.77 -42.056 1.020595 -37.794331 170.948 -42.1768 1.029617 -37.040512 170.87 -41.7648 1.041927 -39.959976 170.881 -41.8498 1.039764 -39.308792 171.005 -41.2866 1.067250 -44.140144 171.095 -41.1511 1.077730 -45.512012 172.423 -40.1779 1.176643 -58.419678 171.575 -40.836 1.127097 -49.532803 170.969 -41.6565 1.056259 -40.930424 171.041 -41.6056 1.065938 -41.455387 171.018 -41.3755 1.067924 -43.408321 171.396 -41.0065 1.110666 -47.561203 171.268 -41.1321 1.097271 -46.119568 172.096 -40.5047 1.172912 -54.459995 170.967 -41.7238 1.053765 -40.376717 171.101 -41.2355 1.078500 -44.803158 171.338 -41.0665 1.104879 -46.883999 170.875 -42.0378 1.030782 -37.945526 171.765 -40.7589 1.146622 -50.777992 170.901 -41.9407 1.037726 -38.641960 171.533 -40.9091 1.124084 -48.766941 172.388 -40.2501 1.180506 -57.849537 171.191 -41.1882 1.088848 -45.434597 172.277 -40.3469 1.179406 -56.636673 171.838 -40.6933 1.152681 -51.619347 172.561 -40.026 1.173136 -59.826038 171.118 -41.3234 1.080038 -44.062912 171.389 -41.1432 1.111478 -46.305050 172.524 -40.0857 1.175762 -59.388756 170.957 -42.2932 1.023999 -36.370792 171.493 -40.9832 1.121120 -48.007278 171.694 -40.822 1.140272 -49.988361 170.973 -41.7986 1.051373 -39.767822 171.647 -40.8857 1.136595 -49.268192 171.11 -41.5251 1.076139 -42.267242 171.135 -41.6 1.077371 -41.638088 171.207 -41.2663 1.090763 -44.775654 171.461 -41.0635 1.118813 -47.204033 172.014 -40.5814 1.168268 -53.365807 171.294 -41.2073 1.100775 -45.503868 170.885 -42.4109 1.014181 -35.805367 171.053 -41.6838 1.064815 -40.794186 170.987 -41.8754 1.049298 -39.167809 172.238 -40.4053 1.180839 -56.015617 172.497 -40.2344 1.187536 -58.581230 171.564 -41.0277 1.130080 -47.768398 171.14 -41.4209 1.081817 -43.253429 171.488 -41.127 1.122603 -46.676960 170.896 -42.488 1.012053 -35.463707 170.859 -42.6013 1.006914 -35.028336 170.585 -42.5535 0.992727 -35.082851 171.402 -41.2269 1.113488 -45.578167 171.733 -40.8712 1.146207 -49.626209 171.312 -41.2859 1.103063 -44.833252 170.967 -42.0596 1.037813 -37.801189 171.116 -41.649 1.073411 -41.168449 171.472 -41.1794 1.121336 -46.166367 170.989 -42.1222 1.036091 -37.378662 171.228 -41.3475 1.092963 -44.095127 171.568 -41.0895 1.131462 -47.208405 172.206 -40.4737 1.183424 -55.312317 171.625 -40.9622 1.135803 -48.513210 171.064 -41.7541 1.063242 -40.205822 171.711 -40.9175 1.144758 -49.133728 172.618 -40.0917 1.181721 -59.868366 172.361 -40.3235 1.185300 -57.269363 171.01 -41.9458 1.048146 -38.640087 170.957 -41.9983 1.040180 -38.233208 172.54 -40.1565 1.183035 -59.178272 171.071 -41.8273 1.060574 -39.591213 171.559 -41.1579 1.131201 -46.556362 171.944 -40.6983 1.165743 -51.940304 171.266 -41.4214 1.097186 -43.522812 171.815 -40.8329 1.154812 -50.203640 171.337 -41.3599 1.106087 -44.224186 171.22 -41.4914 1.090635 -42.786209 170.991 -42.226 1.030117 -36.730957 171.222 -41.5746 1.088996 -42.019791 171.083 -41.8969 1.058031 -39.031342 171.192 -41.6442 1.082914 -41.305977 171.531 -41.2403 1.128838 -45.751564 170.888 -42.5499 1.009588 -35.216721 170.958 -42.4377 1.017286 -35.668232 172.464 -40.3035 1.192371 -58.028336 171.155 -41.71 1.075660 -40.659531 170.957 -42.3709 1.020214 -35.975224 171.419 -41.3025 1.115971 -44.928844 171.674 -41.0403 1.142961 -47.894039 172.591 -40.2177 1.192206 -59.248146 171.792 -40.9022 1.153795 -49.465385 171.759 -40.9678 1.151439 -48.763004 171.667 -41.1227 1.143209 -47.115482 171.516 -41.3261 1.127454 -44.936756 171.638 -41.1915 1.140686 -46.431858 171.365 -41.427 1.109262 -43.685764 170.642 -42.6031 0.996326 -34.910942 171.282 -41.6413 1.094761 -41.476898 172.127 -40.5842 1.182462 -53.895321 171.799 -41.0343 1.156961 -48.205452 171.642 -41.243 1.141587 -45.982040 171.312 -41.4811 1.102180 -43.077183 172.011 -40.6569 1.172046 -52.621689 171.286 -41.5305 1.098323 -42.564701 171.717 -41.1687 1.149279 -46.804489 171.434 -41.3748 1.117789 -44.316402 172.578 -40.2892 1.199617 -58.865540 171.243 -41.6905 1.087391 -40.932831 171.899 -40.7615 1.162706 -51.150410 171.044 -42.2682 1.031322 -36.463116 172.347 -40.3982 1.191427 -56.702332 171.157 -41.7865 1.072092 -39.975063 171.396 -41.4877 1.112800 -43.198990 171.019 -42.1716 1.035563 -37.049381 171.62 -41.3005 1.139462 -45.414581 171.347 -41.5245 1.106248 -42.745632 171.715 -41.2163 1.149451 -46.377567 171.582 -41.3538 1.135412 -44.853344 171.847 -40.9371 1.160996 -49.240959 171.931 -40.8304 1.168781 -50.538513 171.748 -41.0832 1.151801 -47.650654 171.457 -41.4397 1.120762 -43.785309 171.157 -41.8549 1.068277 -39.387634 171.521 -41.3903 1.128404 -44.377769 171.251 -41.7549 1.084873 -40.316994 171.168 -41.9178 1.065440 -38.861542 171.033 -42.0107 1.046607 -38.149815 171.333 -41.5799 1.103554 -42.186691 171.042 -42.339 1.027079 -36.089550 171.708 -41.2688 1.149240 -45.899342 171.1 -41.9629 1.055832 -38.512428 171.233 -41.8215 1.078625 -39.690289 172.525 -40.353 1.203178 -58.179920 171.866 -40.9865 1.163881 -48.787956 170.978 -42.4906 1.016092 -35.431618 171.884 -40.8866 1.164355 -49.829758 172.297 -40.4582 1.192234 -55.983109 172.199 -40.5426 1.188363 -54.680180 171.047 -42.1303 1.040433 -37.309685 171.49 -41.5059 1.124857 -43.255417 171.711 -41.321 1.149918 -45.450272 171.373 -41.6462 1.107371 -41.585972 171.768 -41.1297 1.154487 -47.261269 171.409 -41.5435 1.114247 -42.705788 171.654 -41.3589 1.143689 -44.982288 171.547 -41.4478 1.131633 -43.926247 171.984 -40.7384 1.172332 -51.671761 171.996 -40.7834 1.175662 -51.235920 171.021 -42.4057 1.022233 -35.780453 171.801 -41.1847 1.158581 -46.836178 171.832 -41.0903 1.161109 -47.738724 171.33 -41.7079 1.098026 -40.849476 172.018 -40.7054 1.175266 -52.150543 171.423 -41.5991 1.115535 -42.191116 172.438 -40.3676 1.197082 -57.487621 171.602 -41.4011 1.137951 -44.483040 171.113 -42.0232 1.053215 -38.044601 171.475 -41.5651 1.122799 -42.657185 171.786 -41.243 1.157493 -46.300777 171.293 -41.8024 1.086687 -39.865314 170.946 -42.5364 1.012769 -35.260738 170.838 -42.6735 1.004933 -34.779964 171.236 -41.8807 1.074893 -39.171532 171.629 -41.4521 1.141440 -44.098415 172.614 -40.3568 1.210785 -58.849182 171.061 -42.2113 1.036175 -36.788723 171.729 -41.3696 1.152366 -45.070667 171.777 -41.2948 1.157018 -45.827808 171.933 -40.9406 1.170972 -49.370258 171.846 -41.1383 1.162977 -47.327732 171.586 -41.5025 1.136810 -43.540443 171.677 -41.4089 1.146743 -44.600063 171.45 -41.6528 1.118823 -41.699669 171.016 -42.4545 1.019579 -35.568184 171.502 -41.6163 1.126638 -42.233219 171.335 -41.7719 1.094192 -40.176399 171.186 -41.9826 1.062863 -38.342583 171.053 -42.0766 1.044361 -37.676067 171.55 -41.564 1.132892 -42.884567 172.022 -40.8353 1.180391 -50.738052 172.438 -40.4241 1.203612 -57.138039 172.277 -40.5149 1.195369 -55.400730 172.495 -40.3969 1.205854 -57.715794 171.774 -41.3378 1.157061 -45.452396 171.699 -41.4552 1.149614 -44.247219 171.419 -41.7003 1.112109 -41.058800 171.938 -40.9939 1.171867 -48.829666 171.504 -41.6646 1.127854 -41.755630 172.08 -40.631 1.179369 -53.187233 171.865 -41.2245 1.165579 -46.617893 171.906 -41.0449 1.168676 -48.286133 171.661 -41.5 1.145702 -43.764004 172.054 -40.7431 1.181671 -51.894653 171.562 -41.6151 1.135238 -42.451042 171.92 -41.1117 1.170398 -47.689594 171.847 -41.2737 1.164414 -46.164623 171.339 -41.8136 1.091019 -39.749290 171.244 -41.9372 1.071740 -38.698132 172.089 -40.6896 1.183768 -52.616558 171.973 -40.8828 1.175124 -50.075378 171.746 -41.4181 1.154772 -44.688099 171.304 -41.8503 1.084235 -39.418686 170.522 -42.6551 0.988858 -34.577007 171.174 -42.0368 1.058034 -37.927135 170.669 -42.6737 0.998199 -34.652935 171.629 -41.551 1.142677 -43.242905 172.336 -40.4969 1.200578 -55.930584 171.904 -41.1744 1.169040 -47.110680 171.133 -42.0736 1.051604 -37.667355 172.017 -40.9244 1.180591 -49.688805 170.928 -42.5877 1.010285 -35.080666 172.559 -40.4011 1.212421 -58.179558 171.101 -42.1165 1.045974 -37.383499 171.082 -42.1621 1.041127 -37.085075 172.377 -40.4615 1.201374 -56.464691 171.259 -41.9822 1.070035 -38.315357 171.754 -41.4597 1.156137 -44.351696 171.808 -41.3791 1.161450 -45.185226 171.833 -41.3241 1.163408 -45.711815 170.571 -42.6116 0.991696 -34.817272 171.927 -41.2172 1.171584 -46.790882 171.98 -41.0731 1.176149 -48.120331 171.725 -41.4966 1.153112 -43.964172 171.112 -42.2419 1.037870 -36.574989 172.139 -40.7477 1.193730 -52.228867 172.455 -40.48 1.211734 -56.869526 172.639 -40.4143 1.221414 -58.804150 172.151 -40.6457 1.189841 -53.401981 171.99 -41.1114 1.177068 -47.784954 172.083 -40.794 1.187558 -51.444023 171.401 -41.7509 1.105188 -40.424221 171.987 -41.0236 1.176957 -48.596455 171.55 -41.6546 1.134622 -42.035332 170.749 -42.6901 1.001606 -34.664257 171.244 -42.0309 1.064943 -37.937603 171.303 -41.9083 1.079658 -38.909855 171.125 -42.1931 1.042276 -36.859894 172.209 -40.6058 1.194823 -54.148590 171.196 -42.0751 1.057252 -37.624828 171.09 -42.3898 1.027060 -35.810570 171.914 -41.2552 1.170830 -46.454521 171.157 -42.1075 1.051367 -37.409966 171.978 -41.1496 1.175967 -47.432686 172.507 -40.4387 1.212198 -57.537182 171.61 -41.6015 1.141244 -42.741966 172.39 -40.5119 1.208312 -56.182232 170.988 -42.5695 1.013391 -35.130051 171.11 -42.2949 1.034180 -36.276085 171.808 -41.4384 1.162044 -44.664948 171.697 -41.5419 1.150742 -43.517971 172.336 -40.5396 1.205079 -55.597702 172.445 -40.535 1.216817 -56.398083 171.791 -41.4932 1.160657 -44.159428 171.001 -42.5282 1.015577 -35.271736 172.179 -40.7006 1.197161 -52.971783 172.279 -40.5743 1.201345 -54.899986 171.307 -41.9574 1.076257 -38.498932 171.124 -42.3459 1.031846 -35.996307 170.685 -42.7334 0.999448 -34.441353 171.48 -41.698 1.124064 -41.275974 171.142 -42.1472 1.047189 -37.149925 171.072 -42.439 1.023295 -35.601139 170.91 -42.6426 1.008070 -34.899082 171.887 -41.355 1.169601 -45.581951 172.573 -40.451 1.220553 -57.991383 171.974 -41.1949 1.175801 -47.048889 171.257 -42.0837 1.062150 -37.518631 172.043 -41.0536 1.182196 -48.355957 172.505 -40.5151 1.220904 -56.967632 171.361 -41.8421 1.090949 -39.464710 171.749 -41.531 1.156466 -43.748528 172.03 -41.0932 1.180721 -47.982815 170.597 -42.6661 0.993844 -34.605022 172.523 -40.4771 1.218538 -57.389534 172.04 -41.1298 1.181403 -47.671734 171.901 -41.3034 1.170203 -46.030045 171.865 -41.4709 1.168407 -44.522175 171.876 -41.4101 1.169266 -45.084892 171.17 -42.2189 1.043811 -36.662518 171.21 -42.1247 1.054496 -37.252743 171.36 -41.886 1.086975 -39.063431 172.389 -40.5604 1.213678 -55.805050 172.036 -41.1755 1.180922 -47.283752 171.394 -41.8027 1.098600 -39.824135 171.316 -42.0052 1.073653 -38.103905 172.051 -40.8806 1.184911 -50.278816 172.241 -40.7126 1.207609 -53.255455 172.342 -40.5807 1.209981 -55.276814 172.269 -40.6242 1.204692 -54.355450 172.305 -40.6612 1.212662 -54.225376 172.322 -40.6174 1.210907 -54.774857 172.217 -40.7432 1.205593 -52.758263 171.972 -41.236 1.176028 -46.714836 171.835 -41.516 1.165534 -44.078117 171.054 -42.4958 1.019502 -35.373241 171.795 -41.5428 1.161640 -43.772594 170.9 -42.6916 1.006710 -34.751991 171.672 -41.5904 1.148895 -43.047428 170.806 -42.7294 1.003723 -34.589046 170.626 -42.7151 0.996369 -34.430275 171.165 -42.2644 1.040189 -36.400154 171.187 -42.1744 1.048717 -36.934803 172.235 -40.6647 1.203317 -53.723583 171.594 -41.6419 1.140686 -42.335587 170.685 -42.7862 1.000514 -34.217861 172.647 -40.4695 1.231397 -58.583073 171.313 -42.0568 1.069278 -37.691040 170.981 -42.6225 1.011268 -34.955769 171.968 -41.2806 1.176180 -46.347980 170.628 -42.7659 0.997338 -34.200901 172.383 -40.6131 1.218543 -55.273769 172.022 -41.2146 1.179987 -46.957447 171.359 -41.9351 1.082725 -38.646751 171.957 -41.3306 1.175981 -45.929195 171.74 -41.5764 1.156437 -43.373169 172.575 -40.5009 1.227046 -57.615726 172.292 -40.702 1.213975 -53.732155 170.725 -42.8106 1.002937 -34.194878 172.087 -40.8439 1.189500 -50.862053 172.049 -41.0022 1.183375 -48.864086 172.354 -40.651 1.217967 -54.658588 171.171 -42.3101 1.037461 -36.143864 172.029 -41.2534 1.180804 -46.657097 171.707 -41.6192 1.154054 -42.945507 171.04 -42.5487 1.016462 -35.184029 171.883 -41.5211 1.170146 -44.140965 170.75 -42.7653 1.002441 -34.407879 171.932 -41.4328 1.175424 -45.037914 171.845 -41.5486 1.166698 -43.854328 171.359 -41.9766 1.079437 -38.309986 171.539 -41.7016 1.135635 -41.532730 171.943 -41.382 1.175666 -45.500374 171.649 -41.6435 1.148123 -42.544659 171.155 -42.3841 1.031410 -35.782810 171.814 -41.5883 1.164041 -43.488251 172.022 -41.3041 1.180847 -46.253426 171.925 -41.4824 1.174581 -44.561939 171.224 -42.203 1.049194 -36.707161 171.123 -42.4638 1.024624 -35.460712 171.187 -42.3545 1.035481 -35.892677 170.866 -42.7334 1.005406 -34.626747 171.278 -42.1222 1.060656 -37.203953 171.303 -42.0925 1.065554 -37.416111 170.953 -42.6756 1.008731 -34.798866 171.035 -42.5909 1.014627 -35.043694 171.209 -42.2394 1.045264 -36.500225 171.134 -42.4217 1.027760 -35.632748 171.757 -41.6217 1.159403 -43.097996 170.778 -42.822 1.004895 -34.259682 171.6 -41.6881 1.144291 -41.970352 171.248 -42.163 1.054497 -36.942055 171.717 -41.6638 1.157025 -42.663094 171.366 -42.0072 1.077881 -38.076946 171.228 -42.279 1.043517 -36.249882 171.219 -42.3282 1.039294 -35.997826 171.408 -41.8576 1.094471 -39.276516 170.824 -42.7793 1.004907 -34.465740 172.01 -41.3571 1.180700 -45.844833 171.801 -41.6297 1.163407 -43.173878 171.994 -41.405 1.180554 -45.468788 171.509 -41.7244 1.131269 -41.114887 171.093 -42.5343 1.019587 -35.203930 171.66 -41.7005 1.152991 -42.172672 171.076 -42.5689 1.017187 -35.093262 171.035 -42.6263 1.013186 -34.928272 171.18 -42.41 1.031083 -35.640518 171.119 -42.5007 1.022463 -35.309746 170.215 -39.604 0.981731 -54.939274 170.384 -39.4788 0.990573 -56.307205 169.843 -39.7551 0.959141 -52.793663 170.002 -39.6474 0.968123 -54.007217 170.39 -39.2751 0.986100 -57.757374 170.197 -39.7555 0.983418 -53.832642 170.173 -39.9281 0.984639 -52.558670 169.993 -39.8321 0.970539 -52.701149 170.107 -39.4788 0.972003 -55.482006 170.39 -39.6759 0.995532 -54.956680 170.413 -39.8635 1.001093 -53.721333 174.566 -45.1619 0.595416 110.827141 172.828 -43.6233 0.840923 131.288162 172.899 -43.6541 0.837546 130.544754 172.922 -43.8548 0.828320 113.842743 172.922 -43.8182 0.837141 114.268814 172.948 -43.878 0.813442 112.601387 172.96 -43.8917 0.807213 112.410362 172.891 -43.6718 0.839692 130.584717 172.928 -43.8325 0.833856 114.229622 172.937 -43.7699 0.844203 114.483948 172.914 -43.773 0.843891 114.424232 172.93 -43.7926 0.841906 114.428017 172.67 -43.6265 0.880136 134.767532 172.69 -43.6241 0.878295 134.701080 172.667 -43.6412 0.881319 134.728775 172.693 -43.6382 0.879426 134.625458 172.777 -43.6103 0.851521 132.214127 172.835 -43.6062 0.838684 131.302444 172.743 -43.6137 0.861807 133.045380 173.77 -41.2725 1.030294 -60.745758 173.766 -41.2666 1.030086 -60.732265 174.111 -41.3362 0.507928 -177.879944 174.122 -41.3306 0.508787 -177.765198 174.12 -41.3408 0.507372 -177.806427 173.848 -41.222 0.994887 -62.714558 173.853 -41.2251 0.997105 -62.638035 173.855 -41.2353 1.003626 -62.172089 173.856 -41.2465 1.007783 -62.004868 173.863 -41.2421 1.006037 -62.147346 174.154 -41.239 0.499207 -99.713844 174.183 -41.2475 0.471048 -102.320221 174.231 -41.2421 0.404856 -127.873619 174.16 -41.2485 0.494530 -99.843079 174.288 -41.219 0.380046 -143.327301 174.281 -41.2249 0.383817 -141.844696 174.268 -41.2299 0.386726 -139.104950 174.269 -41.2401 0.391305 -136.881592 174.264 -41.2419 0.392253 -135.590805 174.194 -41.2659 0.480032 -101.394905 174.182 -41.2576 0.480092 -101.285126 174.179 -41.2501 0.477727 -101.539970 174.165 -41.254 0.491135 -100.254242 174.214 -41.2499 0.413090 -126.433540 174.212 -41.2445 0.412820 -125.994926 174.239 -41.246 0.402083 -128.638000 174.225 -41.2321 0.406809 -127.002853 174.222 -41.2291 0.407274 -126.916603 174.19 -41.2443 0.450623 -106.605591 174.201 -41.2426 0.425089 -116.811584 173.942 -41.2615 0.518294 -99.135559 174.282 -41.2214 0.381582 -142.168472 174.282 -41.2185 0.380019 -142.524902 174.262 -41.237 0.389746 -135.721436 174.243 -41.242 0.399538 -128.636063 174.173 -41.2488 0.485788 -100.292824 173.952 -41.2576 0.518150 -99.133644 173.955 -41.2616 0.517991 -99.156639 173.97 -41.2366 0.518158 -99.104385 173.976 -41.2426 0.517866 -99.126373 174.019 -41.2643 0.515791 -99.280434 174.018 -41.2497 0.515932 -99.210373 174 -41.2325 0.516863 -99.126266 174.254 -41.2418 0.394085 -131.480804 174.221 -41.2427 0.409039 -127.424599 173.799 -41.2652 1.025305 -61.052864 173.843 -41.2533 1.011662 -61.805882 173.829 -41.2561 1.016550 -61.531776 173.816 -41.2561 1.020530 -61.252789 173.835 -41.2897 1.029610 -61.024471 173.816 -41.2875 1.028115 -61.065617 173.801 -41.2728 1.026216 -61.073975 173.876 -41.2408 1.006209 -62.248436 174.011 -41.2438 0.516269 -99.177330 174.013 -41.2395 0.516258 -99.156158 174.016 -41.2753 0.515762 -99.315849 174.008 -41.2687 0.515949 -99.284325 173.991 -41.2471 0.516838 -99.158142 173.973 -41.2299 0.518346 -99.087616 173.966 -41.2298 0.518371 -99.083817 174 -41.2491 0.516549 -99.182411 174.199 -41.2702 0.480097 -101.396996 174.253 -41.2489 0.395602 -132.205109 174.256 -41.2522 0.395332 -132.639191 174.223 -41.2377 0.407476 -127.224800 174.275 -41.2232 0.382686 -141.015884 174.134 -41.2979 0.510511 -177.699753 174.116 -41.3258 0.508988 -177.791992 174.125 -41.3201 0.509675 -177.745468 174.129 -41.3109 0.510284 -177.718948 174.135 -41.305 0.510509 -177.707596 174.124 -41.3049 0.510353 -177.722626 174.175 -41.2949 0.512421 -177.622162 174.136 -41.3254 0.509959 -177.677017 174.147 -41.3204 0.510763 -177.667206 174.155 -41.314 0.511246 -177.660431 174.161 -41.3098 0.511682 -177.645615 174.169 -41.3002 0.512229 -177.627975 174.148 -41.3253 0.510658 -177.653244 174.163 -41.3143 0.511612 -177.644180 173.819 -41.0038 0.886191 -74.453979 173.813 -41.0075 0.886007 -74.465439 173.887 -41.0909 0.918335 -72.388008 173.876 -41.0893 0.919096 -72.312805 173.869 -41.0969 0.919554 -72.293121 173.876 -41.0955 0.919446 -72.320404 173.861 -41.1221 0.943317 -70.281128 173.858 -41.1331 0.946826 -70.178505 173.847 -41.1437 0.952368 -69.533165 173.837 -41.1517 0.956038 -69.222160 173.851 -41.1572 0.958045 -69.207573 173.848 -41.1688 0.962095 -68.726982 173.863 -41.2079 0.983584 -64.398888 173.861 -41.2104 0.985098 -63.994717 173.95 -41.2087 0.931879 -30.521097 173.962 -41.2018 0.933842 -30.571903 173.986 -41.2041 0.941263 -30.043491 174.031 -41.1796 0.962561 -28.381910 173.987 -41.1972 0.942666 -30.124090 173.952 -41.191 0.931959 -30.849886 173.927 -41.203 0.912516 -39.075584 173.901 -41.2064 0.968773 -58.856712 173.888 -41.2117 0.977147 -61.299927 173.865 -41.2125 0.986141 -64.050774 173.867 -41.2003 0.980358 -65.762291 173.873 -41.1988 0.981027 -66.342194 173.879 -41.1746 0.971715 -68.625725 173.872 -41.1726 0.969453 -68.623535 173.898 -41.1291 0.935452 -71.824783 173.896 -41.1204 0.931273 -71.967590 173.903 -41.1094 0.924010 -72.544548 173.914 -41.1063 0.920589 -72.939735 173.996 -41.0884 0.898055 -74.979111 174.001 -41.0925 0.898175 -74.985123 174.036 -41.1047 0.898232 -75.028358 174.037 -41.1015 0.898226 -75.029587 174.032 -41.0445 0.899314 -75.066574 174.041 -41.0402 0.899524 -75.068176 173.975 -41.0504 0.894129 -75.141106 173.98 -41.0395 0.893948 -75.220222 173.896 -41.1079 0.923539 -72.338829 173.89 -41.1132 0.926612 -72.023979 173.89 -41.1233 0.932972 -71.680992 173.865 -41.1309 0.944806 -70.488586 173.848 -41.1514 0.955308 -69.388924 173.855 -41.1606 0.960378 -69.065071 173.857 -41.166 0.962733 -68.880920 173.866 -41.1791 0.969997 -68.283051 173.864 -41.203 0.980918 -65.121361 173.857 -41.2133 0.987044 -63.719471 173.868 -41.2058 0.983377 -64.928162 173.875 -41.1898 0.977333 -67.769989 173.874 -41.1777 0.971830 -68.489044 173.861 -41.1609 0.961991 -69.100563 173.857 -41.1488 0.955560 -69.684525 173.882 -41.1347 0.940979 -71.325714 173.901 -41.1161 0.928396 -72.278183 173.916 -41.0997 0.917899 -72.976341 173.925 -41.1038 0.918565 -73.111664 173.96 -41.0736 0.896712 -74.833649 173.966 -41.0718 0.896157 -74.898865 173.966 -41.0773 0.896924 -74.896210 173.963 -41.1246 0.899717 -74.909256 173.97 -41.1253 0.899629 -74.920273 173.966 -41.13 0.899678 -74.918480 173.976 -41.1234 0.899527 -74.929741 174.024 -41.0909 0.898159 -75.018532 174.023 -41.0857 0.898233 -75.023094 173.987 -41.0731 0.897201 -74.980347 173.999 -41.0786 0.897748 -74.993019 174.034 -41.0521 0.899116 -75.059265 174.039 -41.0479 0.899266 -75.063126 174.042 -41.0303 0.899928 -75.073051 173.964 -41.0537 0.892792 -75.071846 173.973 -41.0478 0.893633 -75.158539 174.092 -41.0157 0.732842 -89.198601 173.891 -40.9446 0.842063 -85.598793 173.953 -41.0715 0.896562 -74.705872 173.939 -41.0736 0.900402 -74.138603 173.914 -41.0744 0.907405 -73.268517 173.925 -41.0782 0.906643 -73.594269 173.913 -41.0917 0.914664 -72.955574 173.902 -41.0996 0.919290 -72.649323 173.891 -41.1188 0.930112 -71.869133 173.876 -41.1317 0.941817 -71.017723 173.86 -41.1397 0.950308 -70.095856 173.894 -41.1254 0.934035 -71.757484 173.896 -41.1142 0.927385 -72.163490 173.939 -41.0814 0.904134 -74.182739 173.978 -41.0742 0.896804 -74.951706 173.974 -41.0675 0.896030 -74.970840 173.985 -41.0854 0.897904 -74.948761 173.97 -41.1083 0.899425 -74.912163 174.023 -41.0942 0.898155 -75.014503 174.018 -41.0319 0.899709 -75.075928 174.009 -41.0329 0.899607 -75.078140 174.013 -41.0416 0.899179 -75.071541 174.006 -41.052 0.898460 -75.055359 173.994 -41.0555 0.897585 -75.054314 173.987 -41.0636 0.896865 -75.020889 173.966 -41.0488 0.892853 -75.141953 173.857 -41.1558 0.958889 -69.322548 173.866 -41.166 0.965499 -68.902328 173.865 -41.1718 0.966753 -68.622635 173.872 -41.1831 0.973499 -68.201653 173.87 -41.1768 0.970247 -68.450912 173.954 -41.1964 0.931584 -30.742674 173.945 -41.197 0.928830 -30.891184 174.244 -41.1868 0.507936 -99.999748 174.237 -41.1966 0.507823 -99.966476 173.945 -41.0525 0.887892 -75.073029 173.949 -41.0454 0.888372 -75.266090 173.957 -41.0577 0.892124 -74.971321 173.936 -41.0567 0.885658 -74.960152 173.933 -41.0522 0.883851 -75.064240 173.957 -41.0506 0.891058 -75.120651 173.968 -41.0591 0.894107 -75.014717 173.961 -41.0664 0.894773 -74.878265 174.29 -41.2126 0.376172 -143.582474 174.282 -41.2151 0.378340 -142.722733 174.311 -41.2096 0.372766 -148.654816 174.203 -41.0584 0.618116 -93.474457 174.183 -41.0447 0.618846 -93.425827 174.103 -41.0398 0.733111 -89.259079 174.097 -41.0304 0.733125 -89.237206 174.033 -41.1004 0.898227 -75.026962 174.029 -41.1007 0.898161 -75.020546 173.986 -41.1129 0.899386 -74.945801 173.979 -41.1145 0.899424 -74.931938 173.982 -41.1282 0.899595 -74.938156 173.962 -41.1425 0.899767 -74.921982 173.96 -41.133 0.899760 -74.911316 173.984 -41.0382 0.893988 -75.235497 173.979 -41.0445 0.893950 -75.197067 174.295 -41.2147 0.376672 -144.368073 174.241 -41.2038 0.507957 -99.974136 174.178 -41.1023 0.510822 -99.818581 174.171 -41.1267 0.510035 -99.854401 174.018 -41.0815 0.898122 -75.019890 174.018 -41.089 0.898155 -75.014503 174.009 -41.086 0.898064 -75.001717 173.985 -41.108 0.899268 -74.944435 173.968 -41.1187 0.899623 -74.914246 173.98 -41.082 0.897621 -74.934662 173.981 -41.0785 0.897343 -74.949059 173.972 -41.0738 0.896533 -74.929848 173.974 -41.0429 0.893492 -75.195274 173.971 -41.0527 0.893739 -75.107941 174.316 -41.2105 0.371886 -149.331116 174.286 -41.215 0.377898 -143.188629 174.25 -41.199 0.508042 -100.002228 174.205 -41.146 0.508412 -99.927353 174.181 -41.1327 0.509735 -99.863686 174.178 -41.1097 0.510634 -99.827934 174.161 -41.1252 0.510150 -99.849884 174.156 -41.1196 0.510311 -99.842194 174.178 -41.1446 0.509182 -99.906487 174.19 -41.1489 0.508758 -99.927414 174.209 -41.0502 0.618214 -93.455338 174.194 -41.0497 0.618419 -93.447685 173.861 -40.9547 0.844068 -85.608582 173.861 -40.9667 0.844071 -85.632431 173.849 -40.977 0.844498 -85.627831 173.827 -41.1558 0.958524 -69.033554 173.813 -41.1576 0.961941 -68.752174 173.804 -41.1593 0.963280 -68.706566 173.977 -41.2017 0.938650 -30.303186 174.021 -41.1964 0.954649 -28.595707 174.002 -41.1862 0.955467 -28.923264 174.031 -41.1714 0.963212 -28.443495 174.018 -41.1809 0.960180 -28.495354 174.041 -41.1847 0.964257 -28.279547 174.069 -41.1858 0.968274 -28.139004 174.098 -41.1777 0.970913 -28.108589 173.876 -41.1533 0.959627 -69.694199 173.887 -41.1289 0.936833 -71.455589 173.922 -41.0866 0.911337 -73.357239 173.977 -41.0973 0.898886 -74.922043 174.021 -41.0515 0.898894 -75.055489 174.002 -41.065 0.897643 -75.025574 174.215 -41.0612 0.617946 -93.490273 174.305 -41.2118 0.374065 -146.857529 173.774 -41.0981 0.889036 -74.598595 173.762 -41.1088 0.889640 -74.585930 173.781 -41.1072 0.889325 -74.611076 173.783 -41.0907 0.888116 -74.627075 173.769 -41.1018 0.889414 -74.587921 173.779 -41.0956 0.888634 -74.617531 173.783 -41.1559 0.965458 -68.618683 173.786 -41.1615 0.965169 -68.641296 173.783 -41.1687 0.965335 -68.658531 173.799 -40.8267 1.173173 -73.841942 173.805 -40.8402 1.175795 -73.824684 173.815 -40.8536 1.177076 -73.815903 173.806 -40.8502 1.176563 -73.814728 173.797 -40.8434 1.176170 -73.798523 173.83 -40.8616 1.178564 -73.784752 173.799 -40.8349 1.175280 -73.806236 174.108 -40.9438 0.732602 -88.125008 174.156 -40.9511 0.705160 -88.668968 174.079 -40.842 0.784039 -83.865837 173.957 -40.8127 0.830014 -84.183220 173.95 -40.8381 0.822022 -84.604836 173.886 -40.9082 0.840889 -85.216667 173.918 -40.9006 0.830068 -85.336327 173.891 -41.0383 0.871323 -75.408424 173.916 -41.0182 0.864363 -76.322113 173.341 -40.3924 1.183301 -65.312920 173.402 -40.4236 1.173984 -66.008675 177.79 -39.1372 0.665340 167.765884 177.824 -39.1227 0.667078 167.831635 172.895 -43.602 0.831507 130.826035 172.931 -43.5872 0.826316 130.700943 172.951 -43.6195 0.828230 130.115143 172.782 -43.5254 0.832705 132.263641 172.826 -43.4945 0.826286 132.408768 173.128 -43.7104 0.817259 124.134956 173.159 -43.7263 0.809482 123.355553 174.692 -41.1877 0.248104 -76.461693 174.882 -40.9224 0.500268 -62.738346 176.025 -41.2838 0.614903 151.475204 176.923 -40.1515 0.619545 161.148010 177.018 -40.0901 0.619357 161.734436 177.11 -40.0877 0.617783 161.980057 177.047 -40.0214 0.620321 162.104828 172.795 -43.8819 0.804703 109.495049 172.788 -43.904 0.801348 109.507179 172.812 -43.8934 0.803427 109.740799 172.74 -43.8962 0.801880 108.963226 172.768 -43.8803 0.804421 109.194916 172.825 -43.9074 0.801410 109.970459 172.813 -43.9337 0.796757 109.885483 172.853 -43.901 0.802966 110.358032 172.856 -43.9231 0.798886 110.447510 172.884 -43.9055 0.802809 110.817329 172.901 -43.9294 0.797945 111.140976 172.955 -43.9901 0.783203 111.709709 172.976 -43.9609 0.788681 112.281937 172.951 -43.9269 0.797945 112.061554 172.998 -43.9315 0.794950 112.932564 172.926 -43.9615 0.790396 111.442268 172.952 -43.9027 0.804132 112.192787 172.978 -43.9043 0.803196 112.725662 173.042 -43.9278 0.792998 113.852081 173.09 -43.9149 0.791680 115.024895 173.013 -43.9029 0.802190 113.515396 173.044 -43.8939 0.802755 114.347374 173.152 -43.8682 0.793271 117.420090 173.151 -43.8308 0.801508 118.650848 173.07 -43.8804 0.804271 115.222702 173.105 -43.8764 0.800493 116.199821 173.115 -43.686 0.817968 125.440941 173.118 -43.6577 0.812921 126.661133 173.08 -43.6595 0.821181 127.105865 173.076 -43.637 0.816740 128.018219 173.034 -43.6336 0.821944 128.779129 173.062 -43.6015 0.811995 129.153168 172.974 -43.5976 0.822909 130.189713 173.01 -43.6138 0.821429 129.506027 172.79 -43.6015 0.847235 132.131073 172.807 -43.6022 0.843432 131.763123 172.761 -43.609 0.855252 132.512711 172.772 -43.6033 0.851750 132.403915 172.71 -43.6143 0.874603 134.567337 172.724 -43.6164 0.870295 134.037720 172.816 -43.5923 0.839105 131.587784 172.836 -43.5882 0.835946 131.420944 172.866 -43.5895 0.833015 131.184631 172.888 -43.5698 0.828560 131.241028 172.814 -43.5791 0.836687 131.673462 173.814 -42.3881 0.650663 141.854401 173.65 -42.4557 0.653539 141.284332 173.631 -42.5058 0.654409 141.165710 174.133 -41.386 0.498249 -178.645248 174.189 -41.3889 0.476158 -177.940720 174.089 -41.3903 0.507524 -179.241333 174.102 -41.3682 0.505577 -178.484634 174.105 -41.3519 0.506483 -178.085571 173.939 -40.883 0.821550 -85.234680 173.968 -40.862 0.815416 -84.870079 173.869 -40.9438 0.843863 -85.577545 173.877 -40.9294 0.843484 -85.479492 173.854 -40.9174 0.848828 -85.321785 173.799 -40.9441 1.152265 -73.450256 173.812 -40.9396 1.114293 -74.303642 173.73 -40.9805 1.228552 -72.820641 173.747 -40.9857 1.225009 -72.916733 173.76 -40.9659 1.219670 -72.832756 173.786 -40.9547 1.195674 -72.885788 173.731 -40.9541 1.225699 -72.729965 173.695 -40.9348 1.225896 -72.525192 173.74 -40.9287 1.221569 -72.774849 173.637 -41.0497 1.253840 -72.448586 173.661 -41.0638 1.255311 -72.495186 173.534 -40.9784 1.254605 -71.535736 173.583 -40.9903 1.250457 -71.932655 173.337 -41.1476 1.309695 -70.947479 173.381 -41.1305 1.301444 -71.149338 173.066 -41.004 1.314358 -69.058540 173.088 -41.0522 1.318612 -69.360649 173.016 -40.7863 1.303828 -67.564362 173.062 -40.8103 1.295374 -67.918671 173.044 -40.8402 1.297430 -68.131676 173.077 -40.8508 1.294318 -68.280464 172.889 -40.7995 1.339876 -66.779678 172.899 -40.7762 1.335906 -66.726227 172.866 -40.7571 1.340245 -66.465111 172.853 -40.7877 1.343844 -66.590462 172.441 -40.5835 1.221980 -56.003551 172.495 -40.5579 1.224328 -56.574711 172.542 -40.538 1.226988 -57.059311 172.125 -40.8174 1.194595 -51.367683 172.148 -40.7891 1.196936 -51.813118 171.997 -40.9737 1.178143 -49.119820 172.051 -40.9582 1.183973 -49.344482 171.77 -41.6525 1.161458 -42.932430 171.258 -42.2317 1.049288 -36.485043 171.272 -42.1939 1.053529 -36.697605 173.907 -40.7313 1.033133 -76.579269 173.894 -40.7507 1.041065 -76.630241 173.876 -40.7736 1.043569 -76.750366 173.903 -40.775 1.043846 -76.769730 173.878 -40.7882 1.043796 -76.747665 173.759 -40.9089 1.217221 -72.947868 173.714 -40.9029 1.217090 -72.654228 173.746 -40.8792 1.208623 -72.994896 173.855 -41.038 0.878539 -74.806313 173.825 -41.0356 0.882779 -74.640877 173.81 -41.0479 0.884483 -74.664490 173.801 -41.0615 0.885386 -74.671776 173.792 -41.0748 0.886435 -74.668915 174.241 -41.0159 0.618012 -93.180656 174.22 -41.0343 0.618346 -93.396118 174.297 -41.0626 0.518437 -99.464500 174.34 -41.0427 0.517258 -96.771507 174.269 -40.995 0.612018 -92.193062 174.31 -40.9753 0.591831 -90.346588 173.933 -41.0038 0.853620 -77.134476 173.95 -40.9914 0.842593 -77.912033 173.957 -40.9745 0.827154 -78.954018 173.941 -40.9751 0.833119 -77.837898 174.041 -40.9118 0.772996 -85.749672 174.03 -40.9258 0.773980 -85.828575 174.035 -40.9423 0.776864 -85.852959 174.013 -40.9502 0.786233 -84.761826 173.993 -40.9551 0.800746 -82.844719 173.973 -40.9649 0.814094 -81.171860 174.022 -40.8978 0.782741 -85.634583 174.026 -40.8724 0.794106 -84.922562 174.095 -40.919 0.745786 -87.113197 174.072 -40.92 0.757535 -86.534584 174.126 -40.9854 0.722439 -89.155327 174.037 -40.9871 0.780572 -86.030899 174.086 -40.9935 0.731974 -89.080223 174.082 -41.0054 0.733073 -89.136314 174.096 -40.98 0.729100 -89.051445 174.121 -40.966 0.724140 -88.832069 173.682 -41.068 1.256588 -72.483421 173.703 -41.0638 1.258832 -72.442635 173.728 -41.0521 1.263256 -72.318642 173.648 -41.0815 1.256510 -72.429688 174.273 -41.0886 0.509938 -100.312782 174.263 -41.1023 0.508077 -100.204285 174.341 -41.0846 0.493171 -100.438164 174.244 -41.1469 0.507906 -100.064507 174.223 -41.1547 0.508167 -99.984856 174.214 -41.17 0.507860 -99.970337 174.205 -41.1946 0.506954 -99.857529 174.27 -41.1383 0.507583 -100.175308 174.281 -41.1279 0.507028 -100.209534 174.267 -41.1249 0.507303 -100.152306 174.257 -41.161 0.508113 -100.131371 174.26 -41.1711 0.508191 -100.122925 174.274 -41.1726 0.508359 -100.171074 174.292 -41.1238 0.505475 -100.331108 174.304 -41.1194 0.501816 -100.731316 174.332 -41.1091 0.492221 -101.215881 174.292 -41.1505 0.507952 -100.279022 174.317 -41.1446 0.508469 -100.353226 174.332 -41.1531 0.508920 -100.367981 174.35 -41.1516 0.509212 -100.391701 174.191 -41.2034 0.506124 -99.758980 174.178 -41.2096 0.505111 -99.672859 174.167 -41.2173 0.504067 -99.605461 174.153 -41.2252 0.502659 -99.633781 174.136 -41.2252 0.504032 -99.636124 174.121 -41.2307 0.506423 -99.614281 174.103 -41.2319 0.509463 -99.421829 174.087 -41.2358 0.511334 -99.357506 174.071 -41.2381 0.513135 -99.279121 174.051 -41.2373 0.514348 -99.222054 174.037 -41.2521 0.515207 -99.261757 174.221 -41.1988 0.507550 -99.907730 174.051 -41.2245 0.514419 -99.145180 174.064 -41.2151 0.514246 -99.116684 174.094 -41.2154 0.510042 -99.193611 174.13 -41.2139 0.504846 -99.481163 174.163 -41.194 0.504823 -99.663467 173.873 -41.2164 0.985421 -63.672874 173.999 -41.2005 0.946682 -29.593317 174.01 -41.1951 0.953092 -28.838737 174.01 -41.1879 0.955988 -28.736355 173.985 -41.2561 0.516985 -99.189209 174.137 -41.0106 0.721051 -89.388138 174.023 -41.0013 0.778775 -86.186172 174.031 -40.998 0.778521 -86.156898 174.029 -40.9557 0.783941 -85.599503 174.034 -40.9692 0.784219 -85.877266 174.023 -41.0409 0.899362 -75.067390 174.031 -41.0343 0.899666 -75.073875 174.025 -41.0245 0.900060 -75.078590 174.285 -41.3102 0.401853 -166.765366 174.319 -41.2141 0.370626 -149.980911 174.322 -41.2196 0.367684 -150.409744 174.309 -41.2304 0.369862 -152.559921 174.328 -41.2334 0.359217 -151.427979 174.339 -41.2142 0.362294 -148.235840 174.385 -41.1658 0.348510 -126.965248 174.35 -41.2576 0.342826 -154.325912 174.355 -41.2275 0.345990 -148.182785 174.609 -41.421 0.383574 155.403992 174.836 -41.3444 0.459372 142.233536 174.847 -41.3281 0.464600 142.784058 174.856 -41.3092 0.469162 143.122040 174.866 -41.2836 0.471617 143.240906 174.786 -41.1114 0.338959 -68.772072 174.811 -41.1014 0.364678 -65.100426 174.815 -41.0857 0.379617 -64.267227 174.648 -41.1976 0.220833 -83.005959 174.595 -41.2073 0.193920 -98.439308 174.811 -41.2766 0.472256 143.123062 174.836 -41.2763 0.471896 143.150986 173.987 -40.9414 0.796601 -82.088997 173.983 -40.929 0.797339 -81.897537 174.349 -40.3484 0.891333 -65.666595 174.352 -40.4134 0.868924 -66.831970 173.423 -41.0337 1.279993 -71.021057 173.497 -41.0411 1.271805 -71.519463 172.944 -43.8044 0.840324 114.490509 172.928 -43.7984 0.840870 114.382996 172.932 -43.8059 0.839674 114.394539 172.927 -43.7848 0.842938 114.439453 172.938 -43.7791 0.843634 114.485886 172.916 -43.8328 0.834063 114.117050 172.923 -43.8446 0.830926 114.038666 173.034 -40.5903 1.284317 -65.027847 173.07 -40.614 1.275692 -65.641129 173.049 -40.535 1.256727 -64.267670 173.093 -40.5342 1.248656 -64.690514 173.665 -40.617 1.125777 -70.414238 173.726 -40.6277 1.104727 -71.313133 174.007 -40.3042 1.004889 -66.430893 174.076 -40.3191 0.980077 -66.535347 175.77 -42.5274 0.588639 145.676865 175.954 -42.5533 0.583995 146.090607 176.135 -42.577 0.579322 146.537872 174.709 -42.6858 0.618122 141.820236 174.858 -42.7427 0.611665 141.799835 174.12 -42.7168 0.643910 140.469681 174.446 -42.0415 0.627311 145.885117 175.598 -42.7317 0.590098 144.013321 176.008 -42.6723 0.580664 145.527756 176.035 -42.7998 0.577962 144.606369 174.328 -42.2399 0.634399 143.938629 174.117 -42.83 0.645898 139.611542 175.132 -42.7839 0.601437 142.340332 174.979 -42.794 0.606456 141.763657 175.001 -42.694 0.606980 142.563721 174.722 -42.814 0.616757 140.833405 173.981 -42.7762 0.650961 139.952805 176.168 -42.7184 0.575824 145.688156 174.457 -43.0177 0.629799 138.154999 174.36 -43.1169 0.636714 136.770477 174.875 -42.8612 0.609561 140.863098 175.026 -42.8881 0.603092 141.139008 175.181 -42.917 0.597516 141.459839 178.59 -41.2953 0.557216 160.470810 178.339 -40.7235 0.576267 162.597641 178.674 -40.7431 0.568179 163.485428 178.371 -41.3985 0.559686 159.307129 177.809 -41.5439 0.568592 156.829865 177.652 -41.7084 0.568041 155.540192 177.86 -41.1946 0.575894 158.712204 177.919 -41.3927 0.569831 157.920013 178.911 -40.8896 0.559454 163.422394 178.997 -40.6837 0.562157 164.722000 178.141 -41.0643 0.572625 160.246765 177.335 -42.436 0.557330 151.259338 177.505 -42.2593 0.558015 152.576691 178.43 -41.5992 0.553752 158.516769 177.331 -41.1814 0.588216 157.073456 177.583 -41.1932 0.582094 157.838150 177.882 -42.0797 0.554252 154.550568 177.784 -42.2734 0.551688 153.366669 177.076 -42.5113 0.560709 150.084274 177.481 -41.0443 0.588122 158.285965 177.601 -40.8923 0.589108 159.447021 177.818 -40.7607 0.587333 160.787018 177.401 -40.8013 0.595846 159.316101 177.61 -42.4392 0.551570 152.076004 177.768 -40.5411 0.593806 161.750870 177.209 -40.4657 0.607722 160.476181 177.273 -42.6207 0.554071 150.153412 177.306 -40.2891 0.609536 161.607849 176.755 -40.9856 0.607099 156.169266 176.89 -42.6185 0.561780 148.885468 177.077 -42.6972 0.555938 149.033600 177.394 -40.0972 0.612482 162.683029 177.501 -40.0157 0.612847 163.378845 177.179 -40.2582 0.612694 161.381699 177.199 -40.3587 0.610138 160.963409 176.792 -40.7976 0.611045 157.404221 176.846 -40.896 0.607118 157.006119 175.319 -41.6362 0.603852 146.557831 178.626 -39.8611 0.590241 168.201187 178.028 -39.8526 0.606694 166.030411 178.034 -40.0388 0.600907 165.069687 177.705 -39.8116 0.615606 165.014511 177.82 -39.943 0.608720 164.801926 177.752 -39.6963 0.618985 165.727585 177.862 -39.7758 0.613339 165.789078 177.614 -39.9265 0.613518 164.169800 177.997 -39.7009 0.612538 166.749405 178.224 -39.7156 0.605440 167.681305 178.264 -39.4166 0.611750 170.077911 177.662 -39.6666 0.622772 165.494278 177.632 -39.7301 0.620399 165.086136 178.191 -39.5348 0.611897 168.812546 178.365 -39.5531 0.605358 169.395813 177.872 -39.672 0.617029 166.373199 177.935 -39.5999 0.618277 167.078171 178.068 -39.5915 0.614311 167.770340 178.08 -39.4907 0.617526 168.589447 178.151 -39.4458 0.615769 169.368912 177.712 -39.6252 0.623671 165.914734 177.807 -39.5981 0.622244 166.483887 178.146 -39.3736 0.617368 170.006104 178.068 -39.3534 0.621785 169.816727 178.079 -39.4159 0.619883 169.262527 178.021 -39.3875 0.623654 169.230957 178.002 -39.4445 0.622556 168.574921 177.787 -39.5258 0.627286 166.802948 177.879 -39.5215 0.623998 167.299393 177.882 -39.4554 0.627868 167.783569 177.934 -39.4326 0.626575 168.287994 178.752 -39.6878 0.590856 169.605988 178.89 -39.8688 0.583068 168.874298 179.03 -40.059 0.575274 168.162491 178.495 -39.7049 0.597738 168.798157 178.738 -40.0464 0.582876 167.432281 179.329 -40.0286 0.568598 169.126617 178.857 -40.2771 0.574636 166.500626 179.226 -40.2511 0.566357 167.640060 178.529 -40.1949 0.584528 165.969696 178.79 -40.5241 0.570582 164.976868 179.094 -40.4713 0.564666 166.112396 179.442 -40.4668 0.556834 167.067627 178.267 -40.1196 0.592928 165.491730 178.469 -40.0001 0.590950 166.874069 177.65 -40.064 0.608548 163.643982 174.701 -42.002 0.613546 146.244141 174.357 -42.3466 0.633021 143.246857 176.214 -42.0639 0.588605 149.044754 173.917 -42.3707 0.648184 142.111221 174.02 -42.3429 0.645487 142.469513 173.989 -42.6672 0.648373 140.671112 174.357 -42.4661 0.633034 142.468826 175.036 -42.1218 0.606790 145.732208 176.343 -42.5398 0.575389 147.455872 176.517 -42.4616 0.573509 148.437592 176.955 -42.3606 0.566837 150.366821 176.912 -41.9253 0.578313 152.088776 173.971 -43.0354 0.659188 137.644989 174.117 -42.9509 0.648344 138.537231 173.738 -42.7687 0.660357 140.050903 173.878 -43.3098 0.677076 134.217300 174.02 -43.2789 0.664849 134.483246 173.953 -42.8991 0.655735 138.964172 173.692 -42.565 0.654786 141.025879 174.262 -42.7677 0.638150 140.260300 174.407 -42.703 0.631229 140.988922 175.445 -42.5163 0.596310 144.809692 175.596 -42.5902 0.591838 144.849121 175.746 -42.3715 0.591555 146.330353 174.394 -43.5118 0.642136 130.422150 174.407 -43.6307 0.643226 128.367249 175.602 -42.8672 0.588845 143.043304 175.758 -42.9423 0.584629 142.640671 174.275 -44.1705 0.647852 119.198914 174.266 -44.3177 0.643345 117.180809 178.239 -39.9333 0.598767 166.421188 178.412 -39.8452 0.596516 167.621948 177.811 -40.3288 0.598102 162.928680 178.04 -40.2297 0.595431 164.145416 178.42 -41.0197 0.567432 161.323013 178.475 -40.8679 0.569766 162.252258 179.248 -40.6315 0.557674 165.681427 173.055 -37.0911 1.056188 -73.700951 173.247 -37.0602 1.063127 -73.950523 170.855 -39.1069 1.011110 -60.255188 170.868 -39.2382 1.015983 -59.383453 172.027 -38.7865 1.068173 -65.423004 172.244 -38.8027 1.080658 -65.854424 172.13 -38.5345 1.062116 -66.936203 172.199 -38.3772 1.058859 -67.794754 173.021 -38.0727 1.083457 -70.583870 173.124 -38.1979 1.092160 -70.400383 173.518 -38.1027 1.102917 -71.370712 173.646 -37.9906 1.103141 -71.862831 173.598 -37.8465 1.096671 -72.143311 173.789 -37.8788 1.103754 -72.347267 173.73 -37.7333 1.097265 -72.600929 173.869 -37.7689 1.102512 -72.711388 173.668 -36.9789 1.076232 -74.450302 173.836 -36.9267 1.080501 -74.678841 173.906 -37.483 1.095206 -73.410797 173.468 -37.9585 1.096028 -71.657295 172.436 -37.8288 1.050095 -70.404976 172.379 -38.0015 1.053317 -69.664810 173.311 -37.901 1.088532 -71.568047 173.434 -37.824 1.090395 -71.959694 173.356 -37.3749 1.074595 -73.111542 173.321 -37.5471 1.078060 -72.580727 173.402 -37.2014 1.072002 -73.655731 173.532 -37.3191 1.079338 -73.443985 173.521 -36.8529 1.069079 -74.726738 173.606 -36.7195 1.069756 -75.148727 173.121 -36.7617 1.052325 -74.818520 172.891 -37.0127 1.047415 -73.830162 173.087 -36.9368 1.054180 -74.223854 173.302 -36.8854 1.061772 -74.514915 173.088 -37.5579 1.069498 -72.259659 173.184 -37.4247 1.069538 -72.784355 172.788 -38.0885 1.074497 -70.108330 172.86 -37.9256 1.071839 -70.762756 172.121 -38.6764 1.068075 -66.219162 172.287 -38.6404 1.074855 -66.785522 171.663 -38.1279 1.022397 -67.861313 171.688 -38.3108 1.030281 -67.075684 172.739 -37.3332 1.048763 -72.588715 173.825 -37.2366 1.086430 -73.924866 173.949 -37.1806 1.088693 -74.159500 174.13 -37.2134 1.096065 -74.249268 174.184 -37.1836 1.098133 -74.370735 173.881 -36.7994 1.079888 -75.038750 173.978 -36.7591 1.083167 -75.193466 174.191 -37.382 1.102974 -73.949783 174.246 -37.4337 1.106933 -73.909630 174.043 -37.6558 1.104282 -73.185509 174.142 -37.661 1.108552 -73.306152 173.423 -38.2265 1.104428 -70.881264 173.577 -38.2316 1.110822 -71.136230 173.944 -37.8353 1.107065 -72.675247 173.935 -37.9348 1.110770 -72.443466 174.005 -37.5719 1.100703 -73.318405 174.052 -37.4977 1.100288 -73.535233 173.985 -37.7408 1.105089 -72.934212 174.04 -37.8023 1.109362 -72.884171 173.813 -38.0165 1.109813 -72.069527 173.853 -38.1205 1.116871 -71.891129 172.39 -39.0023 1.099573 -65.102287 172.4 -38.8892 1.093566 -65.768860 171.661 -38.969 1.055683 -63.439560 171.717 -38.8341 1.053023 -64.379852 171.21 -38.5641 1.013949 -64.729942 171.734 -38.4936 1.039696 -66.282143 171.946 -38.3919 1.046705 -67.208588 172.843 -37.5246 1.058576 -72.051666 172.989 -37.3862 1.060803 -72.686768 173.835 -37.0747 1.083292 -74.316437 173.985 -37.0814 1.087796 -74.410927 173.847 -36.6857 1.077221 -75.337570 173.931 -36.7182 1.080732 -75.285988 173.839 -36.5801 1.075579 -75.632751 174.125 -37.5778 1.104967 -73.450104 174.23 -37.5545 1.109467 -73.637070 172.122 -38.943 1.081139 -64.814445 172.282 -38.9429 1.090003 -65.187485 172.566 -38.1197 1.066050 -69.583099 172.717 -38.2092 1.075968 -69.567169 172.303 -38.5028 1.069231 -67.469086 172.424 -38.3945 1.070203 -68.213203 172.618 -37.958 1.062658 -70.247124 172.674 -37.7934 1.059611 -70.903641 172.101 -38.038 1.041346 -69.021507 172.227 -37.874 1.041791 -69.887207 171.882 -38.1787 1.035425 -68.035622 172.092 -38.2378 1.048146 -68.178085 173.889 -37.3486 1.091052 -73.715431 173.95 -37.2796 1.091092 -73.932556 173.946 -36.8923 1.083504 -74.832489 173.948 -36.9825 1.084936 -74.611580 173.72 -36.5207 1.070488 -75.765144 173.712 -36.8317 1.075009 -74.871002 173.753 -36.7328 1.074786 -75.169098 173.448 -36.44 1.060211 -75.949211 173.368 -36.545 1.058697 -75.613823 178.008 -39.2321 0.625979 170.807632 178.048 -39.3033 0.623659 170.222626 178.112 -39.3069 0.619809 170.461395 177.527 -39.6063 0.630395 165.206757 177.561 -39.4894 0.637491 165.868713 177.597 -39.5492 0.632306 165.771896 177.669 -39.4506 0.637136 166.557007 177.644 -39.495 0.634667 166.235260 177.816 -39.4743 0.629654 167.267090 177.835 -39.4296 0.631984 167.671402 177.938 -39.4755 0.624069 167.955063 177.986 -39.5208 0.619967 167.859024 179.552 -40.2025 0.559769 168.758926 177.61 -40.2283 0.604958 162.757446 177.825 -40.1399 0.602684 163.856766 177.338 -39.6193 0.634330 164.395676 177.378 -39.6805 0.629278 164.309738 177.385 -39.5702 0.636577 164.777008 177.427 -39.6219 0.631963 164.732712 177.456 -39.5719 0.634586 165.061951 177.508 -39.5356 0.635684 165.433197 174.346 -40.877 0.633959 -82.447876 174.376 -40.918 0.589603 -84.481537 174.415 -40.9951 0.509486 -89.541168 174.481 -40.9904 0.479402 -86.466087 174.529 -41.1007 0.343675 -95.327553 174.518 -40.9455 0.505730 -81.344368 174.556 -40.9012 0.533336 -77.121735 174.51 -41.1437 0.300876 -104.847755 174.552 -41.1759 0.245937 -103.875771 174.485 -41.2957 0.233670 -163.219971 174.347 -41.409 0.411190 178.041870 174.409 -41.3837 0.364774 178.567352 174.463 -41.473 0.431603 165.281174 174.525 -41.5131 0.460646 159.441772 174.47 -41.2384 0.241970 -139.127487 174.492 -41.1885 0.260848 -118.618523 174.424 -41.0834 0.425007 -101.367569 174.401 -41.1765 0.330867 -127.891991 174.43 -41.1999 0.296007 -130.985077 174.405 -41.1483 0.355068 -120.441818 174.448 -41.1571 0.319670 -116.749413 174.397 -41.2335 0.309130 -144.712036 174.412 -41.2766 0.291497 -155.929535 174.31 -41.2794 0.378128 -160.875992 174.352 -41.3009 0.348505 -163.813644 174.289 -41.4235 0.442518 178.376144 174.299 -41.3853 0.420044 -177.646362 174.378 -41.0731 0.474188 -99.517944 174.395 -41.0391 0.486129 -94.917313 174.585 -40.9481 0.485266 -78.055824 174.62 -40.9059 0.516467 -74.395187 174.702 -41.1235 0.309212 -76.079254 174.7 -41.1536 0.281247 -76.193016 174.568 -41.1336 0.294404 -94.416321 174.536 -41.2184 0.201787 -120.120316 174.578 -41.2477 0.139185 -122.551704 174.607 -41.1669 0.249800 -91.146912 174.847 -40.8708 0.539165 -62.773872 174.844 -40.9198 0.499465 -63.899235 174.927 -40.9251 0.508979 -61.078239 174.939 -40.8929 0.534217 -60.817577 174.823 -40.8424 0.560914 -63.694878 174.259 -40.5935 0.827879 -72.098846 174.294 -40.5362 0.839333 -70.121170 174.471 -41.4159 0.377250 169.439499 174.535 -41.4507 0.406061 161.386124 174.477 -41.3569 0.305121 178.026031 174.773 -41.3769 0.444320 143.719681 174.732 -41.3872 0.424960 145.305099 174.436 -41.6066 0.528753 159.481873 174.514 -41.5816 0.505733 157.808121 174.585 -41.6214 0.525204 154.413681 174.665 -41.6596 0.544560 151.723831 174.802 -41.5235 0.521009 147.890060 174.778 -41.4036 0.456637 144.752441 174.776 -41.3606 0.441193 142.992966 174.796 -41.3632 0.450295 142.774078 174.805 -41.383 0.459384 143.295242 174.824 -41.4094 0.478729 143.780716 174.823 -41.3636 0.458450 142.431717 174.84 -41.3849 0.469182 142.550766 174.885 -41.2578 0.472352 143.281723 174.827 -41.2611 0.472080 143.167725 174.856 -41.2564 0.472127 143.225006 174.992 -41.4334 0.543607 144.851959 175.166 -41.4636 0.559190 144.205399 174.621 -41.9305 0.613198 146.994614 174.869 -41.809 0.594825 147.319290 174.852 -41.7293 0.581067 147.966080 174.958 -41.7563 0.588674 147.088745 174.755 -41.6967 0.566440 149.497681 174.683 -41.4653 0.448924 150.871887 174.737 -41.4293 0.450422 147.275238 174.763 -41.4734 0.486131 147.870682 174.798 -41.4379 0.484151 145.658722 174.859 -41.4376 0.508214 144.435059 174.987 -41.4718 0.545759 145.209229 174.928 -41.4997 0.541348 145.836151 174.668 -41.593 0.518301 152.053528 174.648 -42.0946 0.618413 145.562149 174.503 -41.9492 0.621084 146.972107 174.575 -42.0178 0.619752 146.149414 174.866 -42.6067 0.612558 142.776718 174.893 -42.391 0.612557 144.130798 175.053 -42.3973 0.607563 144.438965 174.465 -42.27 0.628261 144.039749 174.571 -42.1834 0.623029 144.856705 174.391 -42.5871 0.631709 141.765854 174.55 -42.6352 0.624963 141.790924 174.502 -42.39 0.627096 143.290726 174.528 -42.5118 0.626002 142.567566 174.423 -42.1532 0.629620 144.850449 174.532 -42.0981 0.623662 145.447144 175.155 -42.1716 0.604715 145.684235 173.457 -43.3434 0.721711 133.408890 173.545 -43.2879 0.706955 134.453278 173.557 -42.8404 0.673378 139.792969 173.658 -42.8442 0.668040 139.598907 173.711 -42.4802 0.653261 141.295120 173.635 -42.6319 0.657421 140.826920 173.672 -42.6953 0.659317 140.526672 173.567 -42.6335 0.658672 140.875168 173.581 -42.6887 0.661433 140.658478 174.003 -42.2079 0.648145 143.223633 174.112 -42.1879 0.644438 143.714951 174.204 -42.2137 0.640079 143.780518 173.9 -42.2672 0.649291 142.567093 173.994 -42.2599 0.647080 142.851532 174.052 -42.2198 0.646116 143.285110 174.107 -42.2701 0.643372 143.099289 173.862 -42.3208 0.649599 142.238342 173.94 -42.3108 0.647902 142.444031 173.886 -42.4516 0.649274 141.673706 174.637 -42.3018 0.621350 144.158325 174.257 -42.6563 0.637573 141.057541 174.263 -42.8838 0.639377 139.291306 174.276 -43.0078 0.640283 138.066528 173.976 -42.414 0.646625 142.014816 174.064 -42.425 0.643901 142.125793 173.989 -42.4812 0.646508 141.692307 173.787 -42.4536 0.651666 141.517044 173.802 -42.5271 0.652006 141.224777 173.707 -42.634 0.656142 140.784317 173.77 -42.6727 0.655721 140.583755 173.865 -42.7223 0.654063 140.293686 173.706 -43.0224 0.675890 137.875427 174.724 -42.1864 0.616952 145.044113 174.812 -42.2871 0.614831 144.566864 174.789 -42.0811 0.612777 145.742508 174.899 -42.1759 0.611075 145.312851 174.286 -42.1494 0.636521 144.569580 174.347 -42.0852 0.633242 145.338730 174.564 -42.8997 0.623892 139.651413 174.75 -42.9416 0.614236 139.675720 174.164 -43.2399 0.652907 134.948502 174.286 -43.2031 0.643306 135.479904 174.961 -42.4967 0.609955 143.692032 175.591 -42.3115 0.595526 146.130356 175.6 -42.4495 0.593549 145.563217 176.2 -42.8517 0.572517 144.580170 177.017 -42.0662 0.572687 151.854889 175.447 -42.2464 0.599035 145.999557 175.727 -42.2274 0.594165 146.839493 176.335 -42.1267 0.584892 149.219360 176.337 -42.2464 0.582101 148.745224 176.193 -42.1745 0.586487 148.538803 176.183 -42.3015 0.583939 148.005844 176.861 -42.2159 0.572256 150.676117 176.723 -41.8989 0.582889 151.530273 176.762 -42.0582 0.578111 151.002670 175.001 -41.6145 0.569420 146.390579 174.907 -41.6039 0.558746 147.172852 174.935 -41.674 0.574757 147.210754 174.82 -41.5861 0.543393 148.212906 174.838 -41.6514 0.562338 148.264404 174.74 -41.5611 0.519182 149.721954 174.75 -41.6246 0.542893 149.842239 175.339 -41.6194 0.605577 146.690430 175.32 -41.7617 0.601280 146.786179 175.29 -41.8165 0.600679 146.725815 175.365 -41.8102 0.601840 146.925690 175.553 -41.5503 0.610474 148.275360 174.836 -41.9854 0.608148 146.330307 174.929 -42.0572 0.608038 145.950058 176.065 -41.259 0.615067 151.825424 176.345 -42.3811 0.578903 148.215881 175.304 -42.8462 0.595686 142.436981 175.447 -42.7888 0.593069 143.243713 175.747 -42.808 0.585627 143.823593 175.883 -42.7467 0.582735 144.633423 175.29 -42.7167 0.597870 143.271545 175.442 -42.653 0.594781 144.074188 175.149 -42.2854 0.605148 145.182266 175.285 -42.2142 0.602233 145.753433 174.689 -42.5586 0.619514 142.643997 174.803 -42.4777 0.615486 143.427628 175.146 -42.6468 0.602890 143.288437 175.293 -42.5828 0.599374 144.054718 175.021 -42.5917 0.607352 143.281036 175.139 -42.5085 0.604369 144.057312 176.503 -42.3132 0.577280 149.033691 177.009 -41.5477 0.586069 154.106079 176.001 -41.2127 0.618493 151.772583 175.58 -41.5208 0.610962 148.530426 176.069 -41.2217 0.616444 152.069778 176.025 -41.2132 0.617909 151.899200 176.119 -41.209 0.615675 152.385269 176.161 -41.1411 0.617030 152.996414 176.165 -41.1868 0.615276 152.717377 176.035 -41.3275 0.612961 151.298752 176.163 -41.232 0.613740 152.444595 176.571 -41.1416 0.607190 154.550369 176.668 -41.0718 0.606905 155.327591 176.091 -41.2943 0.613136 151.762665 176.095 -41.3492 0.611054 151.477539 176.172 -41.386 0.608305 151.620850 176.201 -40.963 0.621906 154.233047 176.24 -40.9882 0.620211 154.232330 176.266 -40.8944 0.622991 154.984497 176.299 -40.7933 0.624316 155.842392 176.333 -40.7767 0.623797 156.041336 176.316 -40.75 0.624611 156.144714 176.363 -40.7366 0.623915 156.358261 176.331 -40.8181 0.623023 155.765884 176.109 -41.248 0.614461 152.112091 175.978 -41.315 0.614393 151.065414 176.292 -41.0325 0.617242 154.141510 176.698 -40.8888 0.611172 156.544388 177.117 -41.2435 0.591688 156.018143 176.376 -40.7711 0.622898 156.200760 176.625 -40.7228 0.617552 157.298706 176.63 -40.6529 0.619306 157.724945 176.702 -40.6143 0.618202 158.236969 176.301 -40.8587 0.622939 155.382568 176.634 -40.9837 0.610239 155.710526 176.295 -40.9283 0.620996 154.842529 176.296 -40.9698 0.619429 154.558533 176.343 -40.9409 0.619276 154.918045 176.363 -40.7961 0.622670 156.007339 176.416 -40.6452 0.624558 157.033295 176.442 -40.6731 0.623444 156.970963 176.911 -40.2048 0.618182 160.846069 176.976 -40.2025 0.617468 161.057693 177.274 -40.1748 0.612752 162.017761 176.457 -41.0107 0.613864 154.837173 176.469 -41.1013 0.610765 154.370117 176.605 -40.8494 0.614768 156.465240 176.582 -40.9173 0.613532 155.938232 177.027 -41.398 0.589669 154.898636 177.238 -41.3598 0.585919 155.840912 177.455 -41.3511 0.581196 156.625885 177.535 -39.7287 0.622819 164.715759 177.543 -39.8147 0.618870 164.402542 177.102 -39.7028 0.632004 163.146881 177.145 -39.7296 0.630267 163.257660 177.249 -39.7911 0.625518 163.432800 177.316 -39.7415 0.627021 163.847870 177.106 -39.8388 0.624942 162.842270 176.723 -40.2654 0.618010 160.218079 176.764 -40.2588 0.617880 160.298462 176.79 -40.2932 0.617334 160.241852 176.853 -40.2804 0.616918 160.396652 176.734 -40.4887 0.618737 159.285934 176.723 -40.398 0.618324 159.804565 176.764 -40.3346 0.617345 160.080414 176.817 -40.3338 0.616551 160.161392 176.504 -40.6512 0.622545 157.304382 176.69 -40.555 0.619756 158.613358 176.757 -40.4234 0.617526 159.750626 176.801 -40.4507 0.616468 159.700455 176.77 -40.374 0.617107 159.961761 176.83 -40.3957 0.615912 159.981598 176.9 -40.3339 0.615449 160.303467 176.916 -40.2564 0.616780 160.630554 176.987 -40.2861 0.615197 160.679413 176.983 -40.1388 0.618870 161.398468 177.048 -40.153 0.617426 161.509003 177.355 -39.9885 0.616367 163.027054 177.427 -39.836 0.620384 163.882843 177.467 -39.9099 0.616903 163.727493 177.424 -40.2078 0.609164 162.291702 177.518 -40.1217 0.609517 162.950424 177.447 -40.3289 0.605841 161.817459 177.598 -40.4006 0.600952 161.926254 177.573 -40.695 0.594422 160.374374 176.42 -40.7502 0.622272 156.462891 176.408 -40.7097 0.623395 156.657074 176.446 -40.7137 0.622410 156.758255 176.492 -40.699 0.621657 156.991043 176.557 -40.6819 0.620401 157.308670 176.657 -40.5136 0.621621 158.812210 176.784 -40.5657 0.616538 158.889236 176.826 -40.4967 0.615705 159.504410 176.774 -40.6498 0.615252 158.274673 176.852 -40.7075 0.611729 158.164322 176.855 -40.4488 0.615170 159.815567 177.084 -40.3219 0.613054 160.790405 177.096 -40.417 0.611022 160.411774 176.93 -40.0208 0.622070 161.868256 176.972 -40.0453 0.621078 161.839279 177.029 -39.9657 0.621783 162.273163 177.048 -39.924 0.622563 162.454483 177.18 -39.7747 0.627315 163.256668 177.174 -39.8305 0.624644 163.065994 177.134 -39.6856 0.633348 163.314102 177.184 -39.6795 0.633325 163.556030 177.322 -40.4005 0.606726 161.121887 177.342 -40.5153 0.603777 160.598129 177.352 -40.6545 0.600389 159.927368 177.442 -40.4372 0.603402 161.282791 177.509 -40.5394 0.599538 160.963638 177.091 -39.964 0.621107 162.426514 177.115 -39.9119 0.622294 162.656082 177.129 -39.8696 0.623554 162.819244 177.186 -39.8909 0.622045 162.904449 177.169 -39.9526 0.620324 162.656342 177.137 -40.0153 0.619073 162.346512 177.229 -40.0036 0.618059 162.610199 177.259 -39.9299 0.619753 162.970810 177.352 -39.8886 0.619725 163.407547 177.189 -40.0591 0.617181 162.292542 177.273 -40.0722 0.615402 162.450699 176.575 -40.5406 0.623936 158.215820 176.606 -40.5195 0.623643 158.505508 176.571 -40.5789 0.622935 157.971771 176.567 -40.6277 0.621726 157.661926 176.622 -40.5509 0.622256 158.360168 176.63 -40.5971 0.620768 158.079987 176.404 -40.7937 0.621704 156.151199 176.475 -40.7866 0.619997 156.422684 176.472 -40.7373 0.621248 156.706223 176.53 -40.7368 0.619750 156.900101 177.699 -41.3673 0.575255 157.335007 177.149 -41.6476 0.580504 154.136795 176.795 -41.0871 0.603408 155.739700 176.955 -41.6767 0.583856 153.321716 177.03 -41.8011 0.579062 153.035370 177.071 -42.2311 0.567560 151.322510 177.141 -42.3594 0.563078 150.985519 177.386 -42.0975 0.564322 152.916412 178.228 -41.7724 0.554115 157.059509 177.927 -41.735 0.561489 156.288757 178.033 -41.933 0.554546 155.693634 178.129 -41.3016 0.567365 159.030853 178.375 -41.2021 0.564165 160.283524 177.396 -41.6807 0.574258 154.829468 177.551 -41.5253 0.574719 156.090454 177.229 -41.8224 0.574350 153.615189 177.47 -41.8959 0.567398 154.082092 178.603 -41.1267 0.560872 161.333755 178.651 -40.9508 0.563865 162.352646 178.036 -40.426 0.590482 163.176498 178.05 -40.6343 0.585044 162.165558 178.829 -41.073 0.557108 162.264297 178.532 -40.5801 0.575286 163.917114 178.549 -40.4005 0.579163 164.928131 178.081 -40.8413 0.579341 161.196014 178.291 -40.9025 0.573084 161.525528 178.761 -41.2131 0.555391 161.373550 178.591 -41.4556 0.553486 159.691605 178.287 -40.3149 0.587434 164.544022 178.299 -40.512 0.582288 163.569641 177.085 -41.9212 0.574860 152.697678 177.232 -41.986 0.570262 152.905640 173.5 -44.4976 0.681577 110.961708 173.831 -44.5512 0.658977 112.380562 173.947 -44.6823 0.645520 111.739273 174.718 -44.83 0.600835 114.016518 173.399 -44.2614 0.708295 112.762672 173.435 -44.403 0.693019 111.476700 173.592 -43.22 0.697023 135.516159 173.665 -43.2681 0.692180 134.932693 173.749 -43.3287 0.687978 134.110153 173.826 -43.4009 0.685719 132.912140 173.632 -43.3472 0.700075 133.649155 173.705 -43.4105 0.696911 132.690292 174.268 -44.0386 0.652297 121.156120 174.397 -43.989 0.643553 122.373344 173.87 -44.3537 0.668059 114.719849 173.962 -44.2726 0.666203 116.236198 173.909 -44.4506 0.660022 113.843765 174.024 -44.5223 0.649328 113.679199 174.231 -44.4685 0.639459 115.254631 173.505 -44.257 0.700874 113.596939 173.635 -44.2491 0.691932 114.571968 173.683 -44.6619 0.660378 110.531570 173.687 -44.0686 0.701661 117.507263 173.556 -43.9919 0.720350 118.091576 173.595 -44.0427 0.712278 117.384567 173.488 -44.6046 0.674456 109.890862 173.347 -44.3262 0.705387 111.640167 173.448 -44.3169 0.699620 112.483795 173.553 -44.3319 0.691243 113.045021 173.553 -44.1832 0.703784 114.881302 173.581 -44.105 0.708310 116.215958 173.683 -44.1589 0.695124 116.088791 173.301 -44.258 0.715749 112.047127 173.355 -44.2114 0.716971 113.050110 173.992 -44.8768 0.633588 110.298637 169.856 -40.7017 0.968874 -46.374199 170.077 -40.7 0.985509 -46.866722 169.769 -39.911 0.956165 -51.525768 169.982 -39.9992 0.972085 -51.525398 169.983 -40.5604 0.977944 -47.643627 169.62 -40.2218 0.949270 -49.048519 169.672 -40.3857 0.954205 -48.095890 176.057 -42.9325 0.575565 143.322632 176.081 -43.0641 0.573331 141.721481 176.527 -42.7739 0.565636 146.482437 172.932 -43.8653 0.823109 113.538422 172.826 -43.5658 0.833774 131.692490 172.851 -43.5647 0.831494 131.542831 172.781 -43.5576 0.835509 132.001434 172.805 -43.5575 0.834245 131.887466 172.826 -43.5394 0.830737 131.935852 172.868 -43.5341 0.826415 131.769073 174.854 -41.0813 0.429540 -60.913784 174.846 -41.0744 0.429561 -61.128841 174.845 -41.084 0.425460 -60.584515 174.859 -41.0886 0.428612 -60.525883 174.841 -41.1211 0.431375 -60.162037 174.833 -41.0786 0.388552 -63.692799 170.124 -42.4285 0.965000 -35.371132 170.238 -42.48 0.971434 -35.180801 170.24 -42.3736 0.973062 -35.739056 170.147 -42.3001 0.968519 -36.083305 170.298 -42.2592 0.978961 -36.398983 170.306 -42.4224 0.976483 -35.526218 170.388 -42.4328 0.981516 -35.525871 170.343 -42.3578 0.979824 -35.886875 170.412 -42.2962 0.985471 -36.253712 170.344 -42.1249 0.985288 -37.192406 170.427 -42.2031 0.988833 -36.778694 170.422 -42.3675 0.984649 -35.879822 170.489 -42.4148 0.988000 -35.672977 170.538 -42.4956 0.990032 -35.312237 170.325 -42.4762 0.977050 -35.267250 170.316 -42.5504 0.975929 -34.896885 170.519 -42.2617 0.993496 -36.491112 170.52 -42.1739 0.996160 -36.984585 170.479 -42.338 0.988978 -36.064003 170.585 -42.4339 0.994107 -35.634560 170.65 -42.3773 0.999838 -35.939106 170.615 -42.1874 1.002741 -36.942463 170.704 -42.2293 1.008373 -36.736938 170.569 -42.1135 1.001666 -37.358395 170.667 -42.0904 1.010338 -37.536816 170.731 -42.3193 1.007238 -36.254971 170.788 -42.2492 1.014042 -36.638916 170.605 -42.4972 0.994594 -35.346352 170.67 -42.4696 0.999277 -35.502617 170.736 -42.4121 1.004906 -35.792458 170.809 -42.3744 1.010856 -35.985535 170.768 -42.1762 1.015443 -37.055195 170.859 -42.1908 1.021934 -36.969471 170.869 -42.27 1.019087 -36.517040 170.924 -42.2322 1.024814 -36.717827 170.699 -42.1597 1.010511 -37.136387 170.744 -42.1184 1.015841 -37.395237 170.815 -42.3107 1.013551 -36.306625 170.881 -42.3389 1.016855 -36.155300 170.41 -42.5666 0.981753 -34.901707 170.645 -42.5352 0.996737 -35.199886 170.717 -42.5526 1.000834 -35.159874 170.82 -42.1149 1.022399 -37.430313 170.909 -42.1162 1.029755 -37.426754 170.38 -42.504 0.980263 -35.170292 170.452 -42.4979 0.984629 -35.246872 170.443 -42.636 0.983823 -34.598026 170.558 -42.3514 0.993952 -36.032757 170.628 -42.2864 1.000658 -36.399345 170.015 -41.9504 0.966673 -38.033588 170.093 -42.0585 0.969753 -37.434620 170.749 -42.4837 1.003898 -35.464497 170.814 -42.451 1.008625 -35.622799 169.891 -42.0832 0.955755 -37.142185 170.029 -42.209 0.962484 -36.520935 169.866 -41.892 0.957501 -38.277210 170.051 -41.8033 0.972048 -39.003078 170.378 -40.7948 1.009894 -46.826450 170.534 -40.7448 1.023033 -47.580551 170.262 -42.0257 0.982124 -37.743843 169.696 -41.9956 0.944260 -37.503147 170.712 -42.6271 1.000063 -34.864262 170.781 -42.615 1.003262 -34.948605 176.379 -41.0655 0.613941 154.231720 176.097 -41.113 0.619747 152.963608 176.109 -41.1378 0.618671 152.821136 175.23 -41.7633 0.598497 146.564560 175.281 -41.7097 0.600170 146.570465 175.204 -41.6484 0.594037 145.996674 175.21 -41.6961 0.596023 146.325394 176.215 -41.2061 0.613386 152.804993 175.929 -41.3391 0.614027 150.689728 175.606 -41.55 0.609835 148.530624 175.629 -41.5154 0.610314 148.794418 175.984 -41.3545 0.612632 150.884445 176.377 -40.821 0.621719 155.889572 176.426 -40.8363 0.620031 155.946320 176.698 -41.1841 0.602969 154.812790 175.954 -41.4815 0.608295 150.198578 176.009 -41.5056 0.606778 150.350342 175.927 -41.3 0.615738 150.876068 175.973 -41.2812 0.615853 151.220108 175.32 -41.6675 0.602795 146.646317 175.357 -41.7132 0.602879 146.889038 175.255 -41.6616 0.598863 146.262695 175.284 -41.638 0.601356 146.286148 175.479 -41.5767 0.610184 147.711441 175.508 -41.5521 0.611019 148.036560 175.526 -41.5821 0.609671 147.992920 176.047 -41.1856 0.618549 152.186707 176.076 -41.161 0.618789 152.501541 176.324 -40.8988 0.621193 155.159409 176.364 -40.8616 0.621096 155.568344 175.493 -41.6085 0.608612 147.684769 175.5 -41.6454 0.607088 147.635071 175.357 -41.642 0.605035 146.818680 176.037 -41.3664 0.611389 151.098221 176.217 -41.266 0.611380 152.485626 176.246 -41.3308 0.608676 152.251938 176.204 -41.1635 0.615105 153.017960 176.258 -41.1673 0.613636 153.203613 175.811 -41.5259 0.608298 149.439270 176.275 -41.223 0.611461 152.957642 176.297 -41.2779 0.609242 152.754852 176.074 -41.401 0.609507 151.101532 176.542 -40.9804 0.612703 155.363647 176.557 -41.0482 0.610265 155.007156 176.148 -41.2722 0.612697 152.155960 176.162 -41.3173 0.610881 151.962936 176.361 -40.994 0.616846 154.608932 176.408 -40.9474 0.617268 155.100189 176.197 -41.0723 0.618369 153.575012 175.727 -41.4324 0.610932 149.353104 175.765 -41.4224 0.611359 149.550903 175.775 -41.5477 0.608005 149.223557 175.816 -41.5609 0.607263 149.348694 176.001 -41.398 0.610690 150.762497 176.028 -41.4546 0.608275 150.652359 175.544 -41.6177 0.608124 147.945175 175.579 -41.5845 0.609092 148.260254 175.453 -41.5992 0.608821 147.436279 175.452 -41.6273 0.607470 147.385147 176.086 -41.1901 0.617292 152.352737 176.119 -41.1715 0.617091 152.625641 175.374 -41.6188 0.606563 146.920898 175.411 -41.6078 0.607790 147.153412 175.775 -41.5882 0.606951 149.093872 175.856 -41.5372 0.607547 149.596664 175.038 -41.4495 0.547876 144.833725 175.049 -41.4934 0.553339 145.076096 175.05 -41.6903 0.584569 146.517075 175.146 -41.6656 0.589705 146.109985 175.095 -41.617 0.578927 145.842468 175.17 -41.6142 0.587327 145.585876 176.135 -41.1097 0.618859 153.116959 176.153 -41.0767 0.619404 153.397308 176.373 -40.9087 0.619513 155.259674 176.429 -40.8928 0.618447 155.568771 175.938 -41.3822 0.612030 150.512665 175.949 -41.4306 0.610095 150.368805 175.139 -41.5653 0.575413 145.102448 175.192 -41.5725 0.582484 144.900162 175.608 -41.6254 0.607493 148.242355 175.937 -41.2701 0.616819 151.076401 175.972 -41.2585 0.616866 151.338470 176.009 -41.2327 0.617375 151.685287 176.032 -41.2454 0.616327 151.730972 175.878 -41.3669 0.613193 150.285141 175.889 -41.4099 0.611356 150.167358 175.656 -41.4835 0.610420 149.019669 175.687 -41.4551 0.610509 149.181091 176.174 -41.1033 0.617988 153.295227 176.22 -41.1177 0.616207 153.363846 175.8 -41.4056 0.611947 149.759003 175.843 -41.394 0.612268 150.011246 175.749 -41.4982 0.609408 149.275848 175.797 -41.4955 0.609195 149.475937 175.839 -41.4279 0.611011 149.870590 175.885 -41.4595 0.609663 149.973022 176.247 -41.0729 0.617047 153.740997 176.302 -41.1097 0.614376 153.706467 175.61 -41.672 0.606012 148.093338 175.614 -41.7144 0.604748 148.000839 175.742 -41.5301 0.608756 149.158279 175.775 -41.5192 0.608748 149.312271 175.845 -41.4981 0.608790 149.678329 175.9 -41.5098 0.607939 149.868179 175.733 -41.5631 0.608050 149.027359 175.505 -41.6934 0.605440 147.578812 175.558 -41.7431 0.604137 147.717056 175.399 -41.7587 0.602862 147.069366 175.478 -41.7523 0.603748 147.387817 175.447 -41.8159 0.602454 147.192551 175.53 -41.7986 0.602870 147.511459 175.556 -41.6587 0.606623 147.879776 175.568 -41.6952 0.605424 147.848755 175.429 -41.7085 0.604362 147.211060 175.447 -41.6639 0.605985 147.322205 175.794 -41.4387 0.610837 149.628708 175.823 -41.4643 0.609928 149.685349 175.386 -41.6721 0.604709 146.999771 175.404 -41.6388 0.606301 147.099655 175.657 -41.5454 0.609328 148.798706 175.702 -41.5397 0.608918 148.997360 175.678 -41.5148 0.609676 148.997406 175.716 -41.5144 0.609299 149.118652 175.703 -41.4892 0.609879 149.150146 175.733 -41.4653 0.610229 149.304184 175.759 -41.4459 0.610653 149.456390 175.776 -41.4683 0.610027 149.465363 175.86 -41.5753 0.606410 149.477646 175.871 -42.1723 0.592484 147.486389 175.686 -41.5732 0.608282 148.819458 175.72 -41.5998 0.607240 148.852585 175.657 -41.6501 0.606396 148.384827 175.704 -41.6381 0.606331 148.639191 175.635 -41.5816 0.608619 148.549957 175.668 -41.6111 0.607432 148.592026 175.141 -41.7306 0.593517 146.441391 175.01 -40.6166 0.709972 -59.254089 175.055 -40.6355 0.705827 -58.455570 174.507 -38.7277 1.218064 -71.280495 174.545 -38.6925 1.216715 -71.513382 177.264 -40.8886 0.596969 158.437057 176.951 -40.7946 0.606989 157.964584 176.848 -41.7887 0.583159 152.447144 176.852 -41.1908 0.599168 155.366577 177.114 -40.8445 0.601662 158.214157 176.764 -41.2587 0.599302 154.648865 176.759 -41.3425 0.597077 154.188980 177.139 -40.9671 0.598093 157.608871 177.149 -41.1003 0.594546 156.910736 177.293 -41.0173 0.593156 157.834290 177.406 -40.9275 0.592722 158.669617 176.886 -41.0013 0.603421 156.546936 177.014 -41.0385 0.599332 156.790863 176.973 -40.6708 0.609307 158.791946 177.091 -40.7262 0.605017 158.810059 176.57 -41.243 0.604250 153.996399 176.667 -41.2972 0.600435 154.074661 176.992 -40.9237 0.602753 157.351105 176.91 -41.0928 0.600453 156.129074 177.001 -41.1544 0.596685 156.104401 176.331 -41.2352 0.609816 153.116028 177.149 -41.492 0.584487 154.876099 177.322 -41.5067 0.580293 155.413528 177.677 -41.0582 0.583276 158.823898 177.858 -40.9667 0.581364 159.858170 175.885 -42.2932 0.590045 147.067276 176.027 -42.2114 0.588836 147.842178 174.983 -41.8504 0.598076 146.781021 177.091 -40.6208 0.607291 159.413147 177.215 -40.5741 0.605336 159.961426 177.145 -40.1697 0.615305 161.698151 177.198 -40.1127 0.615686 162.086823 177.197 -40.6693 0.603687 159.422516 177.237 -40.7641 0.600585 159.025574 176.976 -40.5615 0.611236 159.481918 177.096 -40.5188 0.609143 159.956863 176.872 -40.6166 0.613069 158.844193 176.873 -40.5456 0.614071 159.318802 176.914 -40.4166 0.614299 160.042953 176.993 -40.3723 0.613558 160.359238 176.695 -40.6718 0.616964 157.839554 176.735 -40.7236 0.614513 157.659775 176.906 -40.4877 0.613801 159.727798 176.999 -40.4616 0.612199 160.019379 176.48 -42.1783 0.580881 149.514801 177.632 -42.0845 0.559437 153.753738 177.765 -41.9011 0.561016 155.001740 175.157 -41.8566 0.599407 146.571594 175.216 -41.8323 0.599589 146.612869 176.635 -41.5181 0.594797 152.858536 176.762 -41.4476 0.594088 153.679932 176.019 -41.5491 0.605265 150.217545 175.246 -42.0269 0.602355 146.322067 175.331 -42.0019 0.601486 146.537933 175.349 -42.0599 0.601363 146.412460 176.179 -41.6237 0.600551 150.600311 176.219 -41.5656 0.601643 151.000244 174.864 -41.8936 0.602449 146.838547 174.97 -41.955 0.603831 146.416519 175.264 -42.1162 0.602543 146.069672 175.386 -42.1414 0.600716 146.231628 175.456 -42.0674 0.600156 146.634827 175.516 -42.1441 0.598787 146.538162 175.407 -42.0034 0.600965 146.698105 175.505 -41.9924 0.600263 146.983688 175.587 -41.8929 0.600926 147.491806 175.667 -41.8633 0.600858 147.831879 175.572 -41.9482 0.600219 147.298035 175.054 -42.0315 0.604835 146.115250 175.09 -41.961 0.602518 146.365585 175.131 -41.904 0.600741 146.507004 175.194 -41.9544 0.601818 146.440109 176.355 -41.4241 0.603442 152.213638 176.446 -41.3871 0.602643 152.768677 176.214 -41.4499 0.605362 151.489624 176.17 -41.5088 0.604221 151.040359 176.287 -41.4541 0.603845 151.785751 176.871 -41.3728 0.593779 154.453842 176.887 -41.4862 0.590342 153.956680 176.503 -41.5354 0.597082 152.268448 176.536 -41.4444 0.599004 152.832642 175.943 -41.7394 0.600754 149.223526 175.905 -41.7878 0.599998 148.918823 175.982 -41.8095 0.598425 149.134109 175.645 -41.8052 0.602249 147.903854 175.709 -41.8149 0.601524 148.113251 175.59 -41.7883 0.602935 147.744904 175.625 -41.7587 0.603487 147.941681 175.338 -41.8605 0.601349 146.814407 175.36 -41.9537 0.601335 146.712143 175.437 -41.9423 0.601113 146.923782 175.94 -41.6808 0.602399 149.420547 176.002 -41.6414 0.602702 149.805634 176.03 -41.592 0.603764 150.099869 176.09 -41.6224 0.601993 150.236710 176.263 -41.6267 0.599021 150.927933 176.299 -41.7 0.596306 150.770691 176.359 -41.6248 0.597364 151.312912 176.464 -41.6142 0.595606 151.765503 176.27 -41.3974 0.605999 151.998871 176.349 -41.3395 0.606199 152.634354 176.052 -41.86 0.596120 149.220032 176.077 -41.7998 0.597261 149.527008 176.124 -41.8442 0.595369 149.546066 175.747 -41.858 0.600207 148.127274 175.773 -41.81 0.601007 148.362961 175.817 -41.8528 0.599525 148.392441 175.9 -41.8479 0.598614 148.703506 176.264 -41.7858 0.594593 150.291809 176.376 -41.7746 0.592943 150.763794 176.423 -41.6935 0.594220 151.272339 175.963 -41.5837 0.604946 149.854752 175.206 -41.8902 0.600610 146.567368 175.272 -41.8709 0.600844 146.668839 175.256 -41.9182 0.601222 146.586411 175.286 -41.9619 0.601553 146.549011 175.668 -41.7289 0.604007 148.187180 175.683 -41.771 0.602777 148.135880 175.822 -41.5932 0.606293 149.262497 175.859 -41.6188 0.605140 149.316513 175.878 -41.6646 0.603625 149.227844 175.89 -41.706 0.602335 149.134781 175.735 -41.7779 0.602164 148.316757 175.788 -41.7541 0.602243 148.588211 175.84 -41.7991 0.600522 148.641083 175.723 -41.7397 0.603270 148.381607 175.76 -41.7053 0.603842 148.636414 175.828 -41.6994 0.603256 148.916855 175.865 -41.7472 0.601538 148.900497 175.784 -41.6639 0.604731 148.870499 175.831 -41.6543 0.604464 149.079803 175.656 -41.6892 0.605246 148.253204 175.705 -41.7004 0.604512 148.427338 175.692 -41.6691 0.605551 148.473328 175.732 -41.6683 0.605162 148.646057 175.902 -41.5914 0.605475 149.586899 175.924 -41.63 0.604068 149.534988 175.59 -41.8348 0.601965 147.641586 175.976 -41.8724 0.596954 148.899628 176.025 -41.9274 0.594944 148.888596 175.566 -42.0668 0.598864 146.929810 175.669 -42.0584 0.597605 147.259018 175.585 -42.2116 0.596891 146.491501 175.397 -41.8543 0.601755 146.978333 175.448 -41.8816 0.601594 147.084167 175.519 -41.8573 0.601836 147.356125 175.51 -41.9186 0.601000 147.189392 176.666 -41.7598 0.587605 151.912033 176.799 -41.6703 0.587238 152.785233 176.562 -41.5962 0.594140 152.221695 176.663 -41.6314 0.591089 152.451294 176.772 -41.5573 0.590824 153.193390 176.883 -41.59 0.587603 153.455002 175.854 -41.8997 0.598023 148.375870 175.926 -41.9217 0.596539 148.556412 175.841 -41.9699 0.596775 148.100967 175.859 -42.068 0.594583 147.824951 175.051 -41.905 0.600845 146.528397 175.089 -41.8498 0.598460 146.601227 176.145 -41.6815 0.599402 150.232712 176.218 -41.6728 0.598473 150.557449 176.164 -41.7953 0.595987 149.877121 176.2 -41.7295 0.597165 150.265823 175.74 -41.9573 0.598329 147.805099 175.759 -42.0294 0.596822 147.633362 175.64 -42.1373 0.596940 146.905716 175.755 -42.1157 0.595423 147.327621 175.653 -41.9381 0.599640 147.579956 175.719 -41.904 0.599580 147.895050 175.787 -41.9059 0.598752 148.122925 175.969 -42.0115 0.593961 148.394012 176.127 -41.9067 0.593799 149.330307 176.108 -41.9926 0.592093 148.946960 176.365 -41.2721 0.607933 153.051392 176.451 -41.2867 0.605600 153.309280 176.429 -41.4747 0.600389 152.262924 176.554 -41.3437 0.601610 153.403854 176.652 -41.3989 0.597831 153.500092 175.316 -41.911 0.601312 146.701584 175.384 -41.9011 0.601429 146.870621 175.062 -41.7795 0.593625 146.679626 175.15 -41.8017 0.597255 146.574402 175.904 -42.429 0.587264 146.556442 176.037 -42.3589 0.585743 147.287460 176.328 -41.8581 0.591573 150.255356 176.84 -41.2876 0.596792 154.778946 176.952 -41.2729 0.594649 155.273911 176.079 -41.5152 0.605466 150.628845 176.122 -41.452 0.606883 151.085510 175.307 -42.3273 0.601310 145.336304 175.45 -42.3835 0.597652 145.445755 175.146 -42.0119 0.603154 146.245911 175.149 -42.0822 0.604096 146.015579 175.958 -42.1093 0.592137 148.001694 176.075 -42.0928 0.590443 148.456253 176.209 -41.8572 0.593661 149.816025 176.249 -41.9529 0.590604 149.597260 176.03 -41.7481 0.599328 149.532364 176.113 -41.7415 0.598252 149.881165 176.305 -41.5631 0.600173 151.361725 176.399 -41.5514 0.598718 151.787460 176.391 -41.2194 0.608975 153.436218 176.475 -41.1899 0.607973 153.920059 176.456 -42.0614 0.584125 149.908493 176.586 -41.9907 0.583346 150.658249 175.907 -41.5544 0.606502 149.739075 175.959 -41.5301 0.606637 150.039093 175.752 -41.6305 0.606002 148.863556 175.804 -41.6247 0.605613 149.078751 175.609 -42.0014 0.599180 147.254669 175.687 -41.9975 0.598306 147.507874 176.072 -41.5688 0.603858 150.372803 176.136 -41.5675 0.602930 150.650223 176.255 -41.5045 0.602869 151.416092 176.339 -41.4954 0.601589 151.805542 176.325 -41.1833 0.611605 153.375046 176.391 -41.1448 0.611262 153.838211 176.335 -42.0322 0.587128 149.595062 176.424 -41.9422 0.587670 150.272659 175.997 -41.7006 0.601078 149.574081 176.063 -41.6905 0.600407 149.874695 174.976 -42.2935 0.609801 144.813705 175.043 -42.2096 0.607514 145.340759 176.04 -42.4716 0.583507 146.787888 176.176 -42.4377 0.581226 147.400879 176.59 -42.1027 0.580531 150.208969 176.666 -42.2248 0.576077 149.960770 176.439 -41.8414 0.589968 150.731171 176.557 -41.868 0.586975 151.060394 177.197 -42.1257 0.567545 152.191483 177.277 -42.2533 0.562835 151.888702 174.653 -42.4335 0.621099 143.352234 174.757 -42.377 0.617147 143.925400 174.114 -42.5072 0.642388 141.753204 174.121 -42.6117 0.642735 141.151962 175.457 -43.0339 0.590879 141.376083 175.612 -43.0101 0.588700 141.835556 175.747 -43.6558 0.583152 130.663422 175.796 -43.7604 0.578861 129.296234 174.754 -43.2601 0.612376 134.915985 174.893 -43.209 0.603419 136.088425 176.022 -43.5731 0.572429 133.074524 176.117 -43.4633 0.568941 135.178024 175.327 -42.9683 0.593135 141.558640 175.455 -42.9183 0.591640 142.339645 176.699 -42.5449 0.567634 148.641724 176.871 -42.4824 0.565596 149.527206 176.278 -42.653 0.574457 146.533997 176.326 -42.7618 0.570896 145.859558 174.623 -43.0324 0.620285 138.289139 174.776 -43.0622 0.611421 138.284439 174.674 -43.1458 0.617128 136.758377 174.798 -43.1576 0.609306 136.829514 173.767 -42.6031 0.654053 140.900620 173.872 -42.6121 0.651417 140.895813 173.91 -42.5275 0.649208 141.342117 174 -42.567 0.646729 141.248047 173.905 -43.2118 0.670724 135.506790 174.042 -43.1537 0.658648 136.213089 173.771 -43.4822 0.694555 131.502625 173.877 -43.4749 0.684971 131.670502 173.944 -43.7555 0.688890 125.401932 174.067 -43.735 0.675646 126.161110 174.122 -43.055 0.650389 137.432617 174.206 -43.1271 0.646823 136.551682 174.396 -42.9245 0.632651 139.076309 173.538 -43.3657 0.712909 133.115189 173.591 -43.4201 0.709196 132.262009 173.754 -42.8517 0.663777 139.428284 173.851 -42.82 0.657963 139.625015 174.261 -43.443 0.651129 131.669266 174.388 -43.4109 0.640417 132.141891 173.819 -43.0716 0.670672 137.253815 173.909 -43.126 0.666807 136.598160 174.903 -43.3108 0.603452 134.123825 175.026 -43.3504 0.598232 133.455719 174.138 -42.3642 0.641608 142.614304 174.231 -42.3062 0.638393 143.201370 173.819 -42.8951 0.662594 139.014999 173.829 -42.9772 0.665685 138.246231 173.781 -43.2444 0.681549 135.206268 173.801 -43.1581 0.676330 136.216125 173.685 -43.1917 0.687261 135.835358 173.694 -43.1102 0.682431 136.813385 174.411 -42.8222 0.631425 140.045258 174.566 -42.7589 0.624092 140.902313 174.861 -43.6187 0.613385 128.634857 174.99 -43.6425 0.608038 128.326477 175.673 -43.1161 0.588857 140.603180 175.775 -43.07 0.584738 141.223740 175.745 -42.6759 0.587140 144.761353 175.872 -42.6351 0.584606 145.367203 174.26 -44.9228 0.618762 111.211960 175.195 -42.3943 0.603629 144.769958 175.307 -42.4499 0.600349 144.773193 174.934 -43.4243 0.604452 131.895828 174.212 -44.7412 0.628907 112.522453 174.463 -44.7789 0.614826 113.350571 176.501 -41.7684 0.590680 151.261108 176.546 -41.678 0.592225 151.806183 176.404 -42.6678 0.571155 146.871124 176.538 -42.6133 0.569442 147.709854 176.677 -42.3916 0.571866 149.286255 176.806 -42.3351 0.570538 149.969742 178.071 -41.5967 0.561627 157.413330 178.192 -41.4458 0.562514 158.524292 174.157 -42.4327 0.640755 142.254654 174.244 -42.3979 0.637530 142.649826 174.224 -42.4693 0.638268 142.169189 174.244 -42.5496 0.637657 141.719086 173.507 -43.5474 0.726780 129.683228 173.544 -43.4897 0.718320 130.989410 174.699 -41.0256 0.401199 -73.877464 174.823 -41.0029 0.436844 -65.238327 174.678 -40.9131 0.503848 -71.755638 174.748 -41.0176 0.412537 -69.984619 174.741 -41.0513 0.380000 -70.927551 174.853 -41.0117 0.440078 -63.270172 174.855 -40.9904 0.454816 -63.457485 174.736 -41.1372 0.305143 -72.525223 174.762 -41.1199 0.323746 -70.822372 174.702 -41.0941 0.335677 -75.647476 174.703 -41.0636 0.364294 -74.740326 174.735 -41.1102 0.325355 -72.910606 174.739 -41.0827 0.349457 -71.992798 174.671 -41.0479 0.378309 -77.099602 174.816 -40.8008 0.592350 -63.705742 174.867 -40.8127 0.589122 -61.696213 174.767 -40.8608 0.543920 -66.421593 174.775 -40.8256 0.571949 -65.543274 174.934 -40.7981 0.618654 -59.230972 174.973 -40.7882 0.633097 -58.476868 174.863 -40.7753 0.615272 -61.938030 174.901 -40.7937 0.610847 -60.400314 174.729 -40.9236 0.492866 -69.432388 174.774 -40.9338 0.485370 -67.262543 174.825 -41.038 0.412826 -64.677658 174.838 -41.0244 0.425988 -64.065941 174.744 -40.958 0.463539 -69.336899 174.767 -40.8993 0.513153 -67.051529 174.807 -40.9122 0.504332 -65.319206 174.88 -41.0112 0.450042 -61.933952 174.893 -40.9878 0.465600 -61.801342 174.763 -40.9877 0.439502 -68.699951 174.816 -40.9426 0.482249 -65.198723 174.821 -40.9731 0.459686 -65.184380 174.807 -40.881 0.528812 -64.849968 174.834 -40.8946 0.518189 -63.815208 174.618 -40.989 0.441158 -78.235153 174.649 -41.022 0.405040 -77.705177 174.451 -41.0344 0.453746 -92.361977 174.489 -41.0691 0.397385 -94.715744 174.427 -41.1243 0.370830 -111.261147 174.47 -41.113 0.357709 -103.789169 174.505 -41.029 0.431858 -88.780647 174.552 -41.0541 0.388233 -87.812317 174.789 -41.0138 0.421720 -67.218147 174.816 -41.0234 0.420510 -65.464478 174.602 -41.0296 0.402363 -81.771019 174.636 -41.0547 0.372139 -80.504776 174.626 -41.1272 0.297130 -85.490814 174.666 -41.1078 0.319684 -79.667259 174.646 -40.9493 0.475124 -74.725311 174.697 -40.9527 0.468524 -71.872879 174.525 -41.2574 0.184114 -143.160599 174.556 -41.2871 0.160574 -165.372665 174.547 -41.3378 0.246810 171.969376 174.59 -41.3138 0.181604 170.100952 174.686 -41.3707 0.377671 146.540085 174.68 -41.4073 0.406002 149.175400 174.608 -41.3447 0.248003 157.078369 174.638 -41.3766 0.340945 151.133102 174.195 -40.4423 0.907411 -68.582596 174.26 -40.4289 0.890212 -67.871468 174.67 -40.9876 0.438046 -74.630623 174.719 -40.9879 0.437100 -71.445259 174.584 -41.0935 0.337434 -88.325546 174.601 -41.0638 0.366669 -84.305885 174.538 -41.3927 0.338483 164.715195 174.589 -41.3737 0.309109 158.702850 174.826 -41.4744 0.510352 146.342621 174.878 -41.4708 0.525992 145.516556 174.63 -41.0873 0.339431 -82.834366 174.668 -41.0762 0.350400 -78.463028 174.785 -40.9637 0.461554 -67.104263 174.796 -40.9879 0.442792 -66.794952 174.928 -40.7059 0.663510 -60.472012 174.981 -40.6916 0.676280 -59.416199 174.14 -41.5088 0.524416 175.336166 174.187 -41.5225 0.525352 173.231171 174.16 -40.7467 0.798427 -78.781120 174.194 -40.7909 0.758092 -80.320732 174.122 -40.875 0.751398 -84.940193 174.155 -40.8353 0.752773 -82.838165 175.097 -41.4612 0.553803 144.603516 175.132 -41.4316 0.553596 144.274033 174.961 -41.5551 0.554831 146.232315 174.996 -41.515 0.551651 145.567856 174.863 -41.5029 0.529009 146.473953 174.88 -41.5463 0.542893 146.938385 174.658 -41.1613 0.263156 -81.930557 174.67 -41.1349 0.293135 -79.786064 174.068 -41.4155 0.512642 179.833466 174.106 -41.4222 0.506090 179.632050 174.071 -41.4482 0.516095 178.793152 174.069 -41.4788 0.521585 177.857437 174.188 -41.5664 0.555144 170.101608 174.23 -41.5846 0.558861 167.531464 174.358 -41.668 0.576150 158.584366 174.375 -41.7096 0.592406 155.883820 174.328 -41.8112 0.629787 151.102600 174.374 -41.8413 0.624002 150.010712 174.209 -41.6877 0.611316 161.581360 174.253 -41.7059 0.612233 159.633667 174.67 -41.5282 0.486680 151.941635 174.732 -41.5103 0.492965 149.572647 174.745 -41.9146 0.607115 146.896255 174.781 -41.8452 0.600202 147.397903 175.027 -41.4108 0.544826 144.626755 175.076 -41.4195 0.548473 144.490982 174.776 -41.0429 0.396539 -67.703018 174.804 -41.0381 0.407096 -65.975494 174.817 -41.0694 0.389887 -64.545692 174.799 -41.0592 0.392035 -65.734940 174.819 -41.0529 0.401189 -64.750763 174.833 -41.0499 0.406932 -64.019928 174.843 -41.0404 0.417341 -63.563881 gerris-snapshot-131206/doc/examples/tides/phase.gfv0000644000175100017510000000053212250371171017161 00000000000000# GfsView 3D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.1745 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } atan2(B0,A0)*180./M_PI { amin = 1 amax = 1 cmap = Jet } gerris-snapshot-131206/doc/examples/tides/amplitude.gfv0000644000175100017510000000053212250371171020045 00000000000000# GfsView 3D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.1745 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Squares { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } sqrt(A0*A0+B0*B0)/9.81 { amin = 1 amax = 1 cmap = Jet } gerris-snapshot-131206/doc/examples/tides/tides.gfv0000644000175100017510000000055712250371171017200 00000000000000# GfsView 3D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 19.1745 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Linear { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P/9.81 { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } gerris-snapshot-131206/doc/examples/tides/tides.gfs0000644000175100017510000001555212250371171017176 00000000000000# Title: Lunar tides in Cook Strait, New Zealand # # Description: # # The shallow-water equations are solved using the "ocean" version of # Gerris. The tidal elevations for the lunar (M2) component obtained # from a larger-area tidal model are imposed as conditions on # the boundaries of the domain. # # The comments in the \htmladdnormallinkfoot{tides.sh}{tides/tides.sh} # script describe how to generate the appropriate GTS files from the # tidal elevation and bathymetry data. # # After an initial transient ($t < \approx 1$ day) due to relaxation of # the model toward a state consistent with the mathematical model and # with the imposed boundary conditions, the model reaches a periodic # regime (Figure \ref{periodic}). # # \begin{figure}[htbp] # \caption{\label{periodic}Evolution of the maximum velocity and # elevation with time.} # \begin{center} # \includegraphics[width=0.8\hsize]{pv.eps} # \end{center} # \end{figure} # # Online harmonic decomposition can then be used to extract the # amplitudes and phases of the computed M2 tidal components. The # simulation stops automatically when convergence of the harmonic # decomposition is reached (Figure \ref{harmcon}). # # \begin{figure}[htbp] # \caption{\label{harmcon}Convergence of the maximum tidal amplitude # (estimated from harmonic decomposition) with time.} # \begin{center} # \includegraphics[width=0.8\hsize]{a0.eps} # \end{center} # \end{figure} # # The final tidal amplitudes and phases are illustrated in Figures # \ref{amplitude} and \ref{phase} respectively. The harmonic # decomposition is also applied to the velocity field. The results can # be represented as tidal ellipses (Figure \ref{ellipses}) and # residual currents (Figure \ref{residual}). # # Note that the results for this simulation will not be as good as # these described in Rym Msadek's \htmladdnormallinkfoot{technical # report}{http://gfs.sf.net/tides.pdf} because iterative Flather # conditions have not been applied. See the report for details. # # \begin{figure}[htbp] # \caption{\label{amplitude}Tidal amplitude estimated from the harmonic # decomposition. Dark red is 1.4 metres, dark blue is 0.} # \begin{center} # \includegraphics[width=0.8\hsize]{amplitude.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{phase}Tidal phase estimated from the harmonic # decomposition. Dark red is 180 degrees, dark blue -180 degrees.} # \begin{center} # \includegraphics[width=0.8\hsize]{phase.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{ellipses}Detail of tidal ellipses estimated from the harmonic # decomposition coloured according to maximum current speed. Dark red # is 2 metres/sec, dark blue is zero.} # \begin{center} # \includegraphics[width=0.8\hsize]{ellipses.eps} # \end{center} # \end{figure} # # \begin{figure}[htbp] # \caption{\label{residual}Detail of residual tidal currents estimated from the # harmonic decomposition coloured according to residual current speed. # Dark red is 0.6 metres/sec, dark blue is zero.} # \begin{center} # \includegraphics[width=0.8\hsize]{residual.eps} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: sh tides.sh # Version: 1.3.1 # Required files: tides.sh bathymetry coefficients amplitude.gfv ellipses.gfv phase.gfv residual.gfv tides.gfv # Running time: 2 hours # Generated files: a0.eps amplitude.eps ellipses.eps phase.eps pv.eps residual.eps # M2 tidal frequency. The period is 12h25 (44700 seconds). Define M2F (2.*M_PI/44700.) # M2 tidal elevation Define M2(t) (A_amp*cos (M2F*t)+B_amp*sin (M2F*t)) # Use the "GfsOcean" model 1 0 GfsOcean GfsBox GfsGEdge {} { # Set the timestep to sthg small compared to the tidal period Time { dtmax = 100. } # Set the box size to 500 km PhysicalParams { L = 500e3 } # Use cartographic projection module GModule map # Use a Lambert conformal conic projection centered on 174 degrees # longitude and -40.8 degrees latitude. Rotate the domain 40 # degrees counter-clockwise. MapProjection { lon = 174 lat = -40.8 angle = 40 } # Refine to six levels Refine 6 # We want more accuracy in the projection than the default 1e-3 ApproxProjectionParams { tolerance = 1e-6 nitermax = 10 } # Initialise tidal amplitudes Init {} { A_amp = AM2.gts B_amp = BM2.gts } # Bathymetry Solid bath.gts # Refine the coastline to 10 levels RefineSurface 10 bath.gts { twod = 1 } # Acceleration of gravity PhysicalParams { g = 9.81 } # Add Coriolis source term SourceCoriolis -1e-4 # Bottom friction parameterisation: # Quadratic drag with friction coefficient of 4e-4. Init { istep = 1 } { U = U/(1. + dt*Velocity*4e-4/H) V = V/(1. + dt*Velocity*4e-4/H) } # Weak exponential filtering of the velocity field # EventFilter { istep = 1 } U 40000 # EventFilter { istep = 1 } V 40000 # After t=100000, starts on-the-fly harmonic decomposition of the pressure field... EventHarmonic { start = 100000 istep = 10 } P A B Z EP M2F # ... and of the velocity field EventHarmonic { start = 100000 istep = 10 } U AU BU ZU EU M2F EventHarmonic { start = 100000 istep = 10 } V AV BV ZV EV M2F # After t=100000, stops the simulation if the variations of the A0 # harmonic component are less than 0.025 in 100 timesteps. EventStop { start = 100000 istep = 100 } A0 0.025 OutputTime { istep = 1 } stderr OutputProjectionStats { istep = 1 } stderr # Output solution on standard output every 20 timesteps # for on-the-fly visualisation with GfsView. # Do not include the GTS file for the embedded surface to save bandwidth. OutputSimulation { istep = 20 } stdout { solid = 0 } # Output solution in file 'end.gfs' at the end of the simulation OutputSimulation { start = end } end.gfs # Output curves using gnuplot EventScript { start = end } { cat < bath.gts # # M2 tidal coefficients # # 'coefficients' contains the amplitude and phase of the M2 # tide as a function of space i.e. four columns: # lon (deg) lat (deg) amplitude (m) phase (degree) # just counts the number of lines in the input file lines=`wc -l coefficients | awk '{print $1}'` # Gerris defines the tidal M2 mode as: # AM2*cos (omega*t) + BM2*sin (omega*t) # # We first compute AM2 from the amplitude and phase. awk -v lines=$lines ' BEGIN { print lines " 0 0" } { print $1 " " $2 " " $3*cos($4*3.14159265357/180.) }' < coefficients | delaunay > AM2.gts # Now compute BM2 awk -v lines=$lines ' BEGIN { print lines " 0 0" } { print $1 " " $2 " " $3*sin($4*3.14159265357/180.) }' < coefficients | delaunay > BM2.gts # Run the simulation gerris3D -m tides.gfs | gfsview3D tides.gfv # Use batch mode of gfsview to generate figures echo "Save amplitude.eps { format = EPS }" | gfsview-batch3D end.gfs amplitude.gfv echo "Save phase.eps { format = EPS }" | gfsview-batch3D end.gfs phase.gfv echo "Save ellipses.eps { format = EPS }" | gfsview-batch3D end.gfs ellipses.gfv echo "Save residual.eps { format = EPS }" | gfsview-batch3D end.gfs residual.gfv gerris-snapshot-131206/doc/examples/tides/residual.gfv0000644000175100017510000000062412250371171017673 00000000000000# GfsView 3D View { tx = -0.11839 ty = 0.0263953 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 2.92707 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Vectors { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } sqrt(ZU*ZU+ZV*ZV) { amin = 1 amax = 0 max = 0.6 cmap = Jet } ZU ZV 0 { scale = 0.02 use_scalar = 1 } gerris-snapshot-131206/doc/examples/tides/bathymetry0000644000175100017510000271714512250371171017511 00000000000000156.75 -58 -3725.55 156.75 -58.4398 -3130.63 156.75 -58.8734 -3190.48 156.75 -59.2987 -3035.08 156.75 -59.7468 -3152.65 156.75 -60.1725 -3100.64 156.75 -60.6202 -2997 156.75 -61.0592 -2997 156.75 -61.4937 -2997 156.75 -61.9098 -2497 156.75 -62.3671 -1997.01 156.75 -62.8059 -2372 156.75 -63.2405 -2747 156.75 -63.6928 -2872 156.75 -64.1541 -2997 156.75 -64.5795 -3036.33 156.75 -65 -3075.2 157.774 -65 -3049.74 158.805 -65 -3024.11 159.896 -65 -2997 160.792 -65 -2997 161.69 -65 -2997 162.475 -65 -2997 163.248 -65 -2997 164.305 -65 -2997 165.704 -65 -2997 166.975 -65 -2997 168.28 -65 -2997 169.544 -65 -2997 171.144 -65 -2497.01 172.429 -65 -2997 173.84 -65 -2997 175.364 -65 -2997 176.593 -65 -2997 177.47 -65 -2493.85 178.335 -65 -1997.01 179.38 -65 -1997 180.341 -65 -1997 181.199 -65 -2456.31 182.209 -65 -2997 183.064 -65 -2997 183.855 -65 -2997 184.891 -65 -2997 185.961 -65 -2997 186.741 -65 -2997 187.373 -65 -2997 188.061 -65 -2997 188.836 -65 -2997 189.683 -65 -2997 190.42 -65 -2997 191.231 -65 -2997 191.972 -65 -2997 192.687 -65 -2997 193.441 -65 -2997 194.34 -65 -2997 195.157 -65 -2997 196.068 -65 -2997 196.953 -65 -2997 198.054 -65 -3542.24 198.973 -65 -3997 199.768 -65 -3997 200.516 -65 -3997 201.239 -65 -3997 201.941 -65 -3997 202.908 -65 -3997 203.888 -65 -3997 205.092 -65 -3997 206.239 -65 -3997 207.699 -65 -3997 208.883 -65 -3997 210 -65 -3997 210 -64.5455 -3997 210 -64.1541 -3997 210 -63.6714 -3468.69 210 -63.2405 -2997.01 210 -62.7973 -2997 210 -62.3671 -2997 210 -61.9232 -2997 210 -61.4937 -2997 210 -61.0239 -2997 210 -60.6202 -2997 210 -60.1546 -2997 210 -59.7468 -2997 210 -59.293 -2997 210 -58.8734 -2997 210 -58.4188 -2972.56 210 -58 -2950.05 210 -57.6891 -2981.57 210 -57.3927 -3011.61 210 -57.1325 -3038 210 -56.879 -3063.69 210 -56.5115 -3229.41 210 -56.2065 -3366.91 210 -55.912 -3499.69 210 -55.588 -3645.79 210 -55.1451 -3810.47 210 -54.7371 -3962.21 210 -54.3421 -4109.08 210 -53.995 -4238.09 210 -53.4898 -4159.06 210 -52.9864 -4057.29 210 -52.454 -3997 210 -51.9265 -4039.19 210 -51.4447 -4077.69 210 -50.959 -4116.54 210 -50.4211 -4200.34 210 -49.9285 -4277.07 210 -49.45 -4351.58 210 -48.566 -4256.36 210 -47.9089 -4346.04 210 -47.3737 -4419.11 210 -46.803 -4497.02 210 -46.2601 -4565.15 210 -45.7462 -4628.77 210 -45.298 -4684.06 210 -44.6743 -4851.3 210 -44.13 -4997 210 -43.5714 -4997 210 -42.973 -4997 210 -42.2961 -4997 210 -41.729 -4997 210 -41.0543 -4975.38 210 -40.3369 -4952.38 210 -39.581 -4928.15 210 -38.7562 -5212.58 210 -38.1354 -5302.61 210 -37.385 -5496.99 210 -36.6726 -5367.51 210 -36.0302 -5293.49 210 -35.281 -5181.15 210 -34.5419 -5129.04 210 -33.889 -5072.27 210 -33.222 -5035.97 210 -32.5707 -5052.16 210 -31.9712 -5067.11 210 -31.376 -5081.99 210 -30.7933 -4944.6 210 -30.1617 -4900.44 210 -29.538 -4807.19 210 -28.8812 -4698.89 210 -28.2709 -4598.42 210 -27.654 -4497 210 -27.093 -4524.65 210 -26.5044 -4553.69 210 -25.914 -4582.78 210 -25.4094 -4756.52 210 -24.9063 -4811.36 210 -24.387 -4930.2 210 -23.75 -4797 209.22 -23.75 -4797 208.457 -23.75 -4797 207.679 -23.75 -4797 207.227 -23.75 -4797 206.708 -23.75 -4797 205.929 -23.75 -4797 205.081 -23.75 -4797 204.577 -23.75 -4797 204.049 -23.75 -4797 203.419 -23.75 -4797 202.847 -23.75 -4797 202.149 -23.75 -4797 201.392 -23.75 -4797 200.814 -23.75 -4797 200.164 -23.75 -4797 199.381 -23.75 -4738.84 198.585 -23.75 -4679.68 197.773 -23.75 -4736.87 196.919 -23.75 -4797 196.246 -23.75 -4517.78 195.532 -23.75 -4221.66 194.815 -23.75 -4844.12 194.063 -23.75 -5497 193.557 -23.75 -5498.33 193.01 -23.75 -5499.76 192.467 -23.75 -5565.35 191.873 -23.75 -5640.08 191.022 -23.75 -5747 190.293 -23.75 -5747 189.564 -23.75 -5747 188.835 -23.75 -4797 188.106 -23.75 -5497 187.376 -23.75 -5497 186.647 -23.75 -5497.01 185.918 -23.75 -5747.06 185.189 -23.75 -7996.93 184.46 -23.75 -5497 184.092 -23.75 -3229.03 183.73 -23.75 -997.03 183.384 -23.75 -1472.04 183.001 -23.75 -1997 182.652 -23.75 -1997 182.272 -23.75 -1997 181.942 -23.75 -1997 181.543 -23.75 -1996.99 181.175 -23.75 -1744.53 180.814 -23.75 -1497.02 180.454 -23.75 -1989.76 180.084 -23.75 -2497.03 179.763 -23.75 -2937.34 179.355 -23.75 -3497.01 179.016 -23.75 -3729.72 178.626 -23.75 -3997.01 177.897 -23.75 -4247 177.168 -23.75 -4247.01 176.438 -23.75 -4497 176.107 -23.75 -4497 175.709 -23.75 -4497 175.346 -23.75 -4497 174.98 -23.75 -4496.99 174.638 -23.75 -4379.57 174.251 -23.75 -4247 173.901 -23.75 -4247 173.522 -23.75 -4247 173.18 -23.75 -4129.74 172.792 -23.75 -3997 172.443 -23.75 -3997 172.063 -23.75 -3997 171.722 -23.75 -3997 171.334 -23.75 -3996.98 171.004 -23.75 -3657.67 170.605 -23.75 -3246.98 170.283 -23.75 -2915.92 169.876 -23.75 -2496.99 169.548 -23.75 -2272.53 169.146 -23.75 -1997 168.797 -23.75 -1997 168.417 -23.75 -1996.99 168.084 -23.75 -1768.46 167.688 -23.75 -1497.03 167.34 -23.75 -2212.46 166.959 -23.75 -2997 166.63 -23.75 -2997 166.23 -23.75 -2997.01 165.882 -23.75 -3235.08 165.5 -23.75 -3497 165.17 -23.75 -3497 164.771 -23.75 -3496.98 164.413 -23.75 -3128.96 164.042 -23.75 -2746.99 163.691 -23.75 -2626.8 163.313 -23.75 -2496.99 162.946 -23.75 -2245.62 162.584 -23.75 -1996.97 162.216 -23.75 -1492.88 161.854 -23.75 -997.01 161.525 -23.75 -1448.73 161.125 -23.75 -1997 160.786 -23.75 -1997 160.396 -23.75 -1997.01 160.057 -23.75 -2229.66 159.667 -23.75 -2497 159.295 -23.75 -2497 158.938 -23.75 -2497 158.56 -23.75 -2497 158.208 -23.75 -2497 157.833 -23.75 -2497 157.479 -23.75 -2497 157.119 -23.75 -2497 156.75 -23.75 -2497 156.75 -24.0711 -2497 156.75 -24.429 -2497 156.75 -24.7595 -3144.87 156.75 -25.108 -3727 156.75 -25.4381 -4521.78 156.75 -25.788 -4616.48 156.75 -26.1179 -4683.47 156.75 -26.467 -4729.7 156.75 -26.7965 -4683.4 156.75 -27.146 -4806.83 156.75 -27.4651 -4578.21 156.75 -27.825 -4518.5 156.75 -28.1535 -4642.03 156.75 -28.504 -4632.45 156.75 -28.8479 -4618.64 156.75 -29.184 -4628.01 156.75 -29.5265 -4708.36 156.75 -29.863 -4831.02 156.75 -30.205 -4776.25 156.75 -30.542 -4560.52 156.75 -30.854 -4423.76 156.75 -31.221 -4545.54 156.75 -31.5684 -4560.61 156.75 -31.9 -4486.62 156.75 -32.2273 -4600.16 156.75 -32.58 -4540.46 156.75 -32.9058 -4752.16 156.75 -33.259 -4739.81 156.75 -33.5943 -4839.79 156.75 -33.938 -4740.68 156.75 -34.2445 -4714.94 156.75 -34.617 -4624.96 156.75 -34.9526 -4592.94 156.75 -35.296 -4676.02 156.75 -35.6509 -4620.2 156.75 -35.976 -4639.38 156.75 -36.3096 -4651 156.75 -36.655 -4502.89 156.75 -37.008 -4593.6 156.75 -37.334 -4644.42 156.75 -37.652 -4571.03 156.75 -38.013 -4559.06 156.75 -38.3578 -4740.84 156.75 -38.692 -4682.94 156.75 -39.0393 -4775.23 156.75 -39.372 -4784.23 156.75 -39.7114 -4877.75 156.75 -40.051 -4546.21 156.75 -40.402 -4602.25 156.75 -40.73 -4481.06 156.75 -41.066 -4526.2 156.75 -41.409 -4417.56 156.75 -41.7381 -4469.51 156.75 -42.088 -4643.66 156.75 -42.4195 -4776.83 156.75 -42.768 -4691.59 156.75 -43.1196 -4658.47 156.75 -43.447 -4878.57 156.75 -43.7974 -5002.07 156.75 -44.126 -4671.1 156.75 -44.4601 -4584.23 156.75 -44.805 -4687.98 156.75 -45.1416 -4557.73 156.75 -45.484 -4956.78 156.75 -45.8323 -4650.78 156.75 -46.164 -4627.06 156.75 -46.4962 -4634.92 156.75 -46.843 -4790.89 156.75 -47.1869 -4684.25 156.75 -47.522 -4637.72 156.75 -47.8684 -4695.77 156.75 -48.201 -4578.35 156.75 -48.5311 -4729.45 156.75 -48.88 -4684.75 156.75 -49.2418 -4751.12 156.75 -49.56 -4547.7 156.75 -49.8951 -4522.25 156.75 -50.239 -4371.93 156.75 -50.5671 -4397.55 156.75 -50.918 -4470.87 156.75 -51.2672 -4537.39 156.75 -51.597 -4532.24 156.75 -51.936 -4280.34 156.75 -52.276 -4432.12 156.75 -52.6266 -4471.85 156.75 -52.956 -4397.02 156.75 -53.336 -4116.72 156.75 -53.635 -4044.86 156.75 -53.9707 -4186.02 156.75 -54.314 -4242.03 156.75 -54.644 -4017.41 156.75 -54.993 -4019.91 156.75 -55.3443 -4158.7 156.75 -55.672 -3958.87 156.75 -56.0163 -3633.15 156.75 -56.36 -3657.1 156.75 -56.6884 -3569.28 156.75 -57.009 -3412.77 156.75 -57.3476 -3587.77 156.75 -57.713 -3831.02 173.052 -35.19 2.99 173.065 -35.165 2.99 173.095 -35.174 3 173.124 -35.182 3 173.151 -35.164 3 173.168 -35.133 2.98 173.172 -35.06 2.98 173.146 -34.993 2.98 173.111 -34.9432 3 173.077 -34.8971 3 173.039 -34.845 2.98 172.997 -34.7977 2.99 172.956 -34.7544 1.08 172.903 -34.693 2.99 172.849 -34.63 2.99 172.797 -34.5867 1.51 172.741 -34.538 2.99 172.702 -34.525 3 172.688 -34.492 2.99 172.641 -34.478 2.97 172.673 -34.467 3 172.676 -34.423 3 172.738 -34.4383 3 172.804 -34.456 3 172.846 -34.44 3 172.857 -34.43 3 172.854 -34.417 2.99 172.916 -34.4209 3 172.965 -34.428 3 173.002 -34.398 2.96 173.021 -34.398 3 173.046 -34.413 3 173.024 -34.417 3 173.005 -34.434 3 173.001 -34.466 3 172.998 -34.487 3 173.004 -34.513 3 172.989 -34.53 3 172.999 -34.5791 3 173.011 -34.629 3 173.034 -34.672 3 173.058 -34.703 3 173.086 -34.725 3 173.112 -34.735 3 173.128 -34.762 3 173.139 -34.769 3 173.151 -34.767 3 173.145 -34.783 3 173.164 -34.791 3 173.172 -34.803 3 173.163 -34.805 3 173.161 -34.813 3 173.167 -34.823 3 173.162 -34.851 3 173.205 -34.876 3 173.266 -34.884 3 173.285 -34.878 3 173.287 -34.857 2.99 173.307 -34.863 3 173.349 -34.856 2.99 173.389 -34.839 2.99 173.396 -34.816 3 173.384 -34.811 2.99 173.387 -34.8 3 173.397 -34.799 3 173.397 -34.783 2.98 173.411 -34.795 3 173.407 -34.807 3 173.416 -34.818 3 173.407 -34.823 3 173.423 -34.835 3 173.425 -34.827 3 173.45 -34.825 2.99 173.441 -34.838 3 173.467 -34.847 3 173.459 -34.861 3 173.437 -34.863 3 173.412 -34.881 3 173.376 -34.876 3 173.369 -34.911 3 173.388 -34.95 3 173.408 -34.971 3 173.43 -34.987 3 173.452 -34.985 3 173.505 -34.992 3 173.524 -34.982 2.99 173.528 -34.98 2.99 173.538 -34.97 2.99 173.524 -34.949 2.99 173.556 -34.928 2.98 173.555 -34.915 2.77 173.572 -34.925 3 173.567 -34.928 3 173.572 -34.944 3 173.59 -34.937 2.98 173.598 -34.933 2.98 173.619 -34.939 3 173.619 -34.951 3 173.639 -34.953 3 173.647 -34.966 3 173.675 -34.96 3 173.682 -34.948 2.95 173.702 -34.954 3 173.7 -34.967 3 173.714 -34.979 3 173.711 -34.993 3 173.755 -35.002 3 173.801 -35.001 3 173.812 -34.992 3 173.843 -35 3 173.866 -35.021 3 173.885 -35.022 3 173.894 -35.008 2.97 173.901 -35.021 3 173.918 -35.027 3 173.937 -35.054 3 173.931 -35.06 3 173.928 -35.072 3 173.942 -35.096 3 173.938 -35.104 3 173.963 -35.119 3 173.979 -35.124 3 173.993 -35.116 2.97 174.004 -35.123 3 174.037 -35.1164 3 174.074 -35.116 3 174.088 -35.127 3 174.097 -35.15 -2 174.131 -35.156 2.99 174.118 -35.171 2.95 174.102 -35.1687 3 174.088 -35.1743 3 174.074 -35.1799 3 174.065 -35.1906 -7 174.054 -35.1746 2 174.052 -35.1476 2 174.037 -35.1645 2 174.017 -35.1472 2 173.991 -35.1452 2 174.01 -35.1679 2 174.029 -35.1836 2 174.046 -35.1945 2 174.031 -35.198 2 174.019 -35.1935 2 174.002 -35.1937 2 173.989 -35.2069 2 174.005 -35.2104 2 174.021 -35.2096 2 174.034 -35.2095 2 174.047 -35.2068 2 174.054 -35.2138 -7 174.062 -35.2154 -7 174.07 -35.2133 0 174.063 -35.2196 3 174.056 -35.2288 3 174.065 -35.2365 3 174.077 -35.2426 3 174.071 -35.2579 3 174.082 -35.2626 -2 174.085 -35.2799 3 174.1 -35.2903 3 174.103 -35.3006 -7 174.101 -35.307 3 174.107 -35.3052 -7 174.114 -35.3105 -2 174.121 -35.3147 1 174.118 -35.32 2 174.11 -35.3257 2 174.104 -35.3264 2 174.101 -35.3307 2 174.106 -35.3313 2 174.111 -35.3318 2 174.116 -35.3333 2 174.112 -35.3369 2 174.107 -35.3386 2 174.102 -35.3419 2 174.103 -35.3462 2 174.107 -35.3471 2 174.107 -35.3439 2 174.111 -35.3422 2 174.116 -35.34 2 174.121 -35.3375 2 174.122 -35.3313 2 174.123 -35.326 2 174.126 -35.32 2 174.129 -35.3262 2 174.131 -35.3184 2 174.138 -35.318 2 174.136 -35.3255 2 174.135 -35.3347 2 174.134 -35.3417 2 174.14 -35.3388 2 174.143 -35.3306 2 174.147 -35.3357 2 174.152 -35.3349 2 174.157 -35.3355 2 174.161 -35.3391 2 174.163 -35.3344 2 174.168 -35.3365 2 174.167 -35.3321 2 174.172 -35.3301 2 174.168 -35.3274 2 174.164 -35.3283 2 174.159 -35.3304 2 174.155 -35.3307 2 174.148 -35.3283 2 174.144 -35.3211 2 174.151 -35.3176 2 174.162 -35.3172 2 174.171 -35.3142 2 174.178 -35.3141 2 174.18 -35.3227 2 174.188 -35.3199 2 174.196 -35.3209 2 174.206 -35.3232 2 174.213 -35.3273 2 174.213 -35.3176 2 174.204 -35.3132 2 174.194 -35.3132 2 174.188 -35.3079 2 174.189 -35.299 2 174.181 -35.3041 2 174.175 -35.3053 2 174.168 -35.2929 2 174.164 -35.3042 2 174.154 -35.3064 2 174.144 -35.3104 2 174.135 -35.3088 2 174.127 -35.3109 1 174.122 -35.3087 -2 174.116 -35.3046 -7 174.124 -35.3036 -2 174.118 -35.2965 -7 174.114 -35.2923 -7 174.11 -35.2855 -7 174.124 -35.2812 1 174.131 -35.2883 2 174.139 -35.2925 2.5 174.149 -35.2908 3 174.144 -35.2826 2.5 174.135 -35.2833 2 174.132 -35.2739 1 174.121 -35.2684 1 174.113 -35.2597 -2 174.12 -35.2442 -2 174.135 -35.2544 -2 174.134 -35.2628 3 174.144 -35.2616 -2 174.161 -35.2694 -2 174.17 -35.2789 1 174.181 -35.2782 2 174.175 -35.2663 -2 174.185 -35.2673 -2 174.195 -35.2733 -2 174.201 -35.282 1 174.206 -35.2855 2 174.212 -35.2832 3 174.208 -35.2789 2 174.204 -35.2739 0 174.212 -35.2743 2 174.218 -35.2693 3 174.211 -35.2669 1 174.203 -35.2621 -2 174.209 -35.2625 2 174.208 -35.2561 2 174.201 -35.2542 -2 174.194 -35.2572 -2 174.188 -35.25 0.72 174.195 -35.2532 2.65 174.198 -35.2477 -0.37 174.202 -35.2523 2.28 174.209 -35.2528 -2 174.217 -35.247 0.67 174.23 -35.2485 -5 174.229 -35.2609 3 174.238 -35.2554 -2 174.247 -35.2586 0 174.255 -35.2621 2.5 174.263 -35.258 3 174.255 -35.2549 2.5 174.249 -35.2518 -2 174.238 -35.2455 -2 174.245 -35.2441 3 174.242 -35.2382 -1.5 174.255 -35.24 1 174.26 -35.2347 1.56 174.254 -35.2316 -2.45 174.261 -35.2277 -5.16 174.252 -35.2201 -18.22 174.269 -35.2219 -7.11 174.264 -35.2313 0.85 174.276 -35.2319 -2 174.287 -35.2238 1.5 174.289 -35.204 2.97 174.3 -35.2047 -12 174.305 -35.1955 2.99 174.293 -35.1887 2.67 174.314 -35.1805 3 174.326 -35.186 3 174.331 -35.1704 -18.36 174.332 -35.1831 3 174.34 -35.1934 -11.83 174.319 -35.1968 3 174.319 -35.2141 2.57 174.316 -35.2216 -12.2 174.306 -35.2182 3 174.305 -35.2267 -6.37 174.291 -35.2343 3 174.301 -35.2421 3 174.313 -35.2385 -3.98 174.322 -35.2562 -10.88 174.296 -35.2579 3 174.31 -35.2882 -6.88 174.318 -35.3091 3 174.375 -35.318 -9.32 174.352 -35.331 3 174.356 -35.349 3 174.381 -35.359 1.18 174.372 -35.368 3 174.376 -35.377 0.92 174.333 -35.333 3 174.326 -35.339 3 174.326 -35.346 1.89 174.316 -35.354 3 174.319 -35.359 3 174.33 -35.356 3 174.357 -35.415 3 174.368 -35.411 -0.48 174.362 -35.423 3 174.362 -35.435 3 174.393 -35.429 0.96 174.394 -35.44 3 174.408 -35.442 3 174.423 -35.432 3 174.418 -35.424 -0.57 174.43 -35.455 3 174.455 -35.486 3 174.467 -35.5 3 174.48 -35.512 2.87 174.478 -35.517 1.72 174.473 -35.51 3 174.467 -35.513 3 174.46 -35.529 3 174.473 -35.551 3 174.494 -35.56 3 174.51 -35.554 -0.01 174.508 -35.564 3 174.52 -35.563 1.08 174.538 -35.583 1.96 174.542 -35.597 -0.92 174.527 -35.609 3 174.53 -35.619 3 174.536 -35.64 0.48 174.509 -35.635 3 174.501 -35.647 3 174.509 -35.676 3 174.523 -35.71 3 174.539 -35.712 3 174.568 -35.716 3 174.553 -35.727 3 174.561 -35.741 -2.38 174.552 -35.742 3 174.553 -35.762 3 174.55 -35.793 3 174.567 -35.829 3 174.59 -35.856 3 174.555 -35.864 -0.18 174.536 -35.858 3 174.504 -35.8298 3 174.5 -35.842 0.94 174.479 -35.861 3 174.454 -35.903 3 174.467 -35.9526 0.93 174.479 -35.996 3 174.507 -36.029 3 174.538 -36.049 3 174.569 -36.05 3 174.578 -36.043 0.15 174.63 -36.1331 -0.4 174.703 -36.226 3 174.748 -36.259 3 174.808 -36.289 3 174.809 -36.297 -0.15 174.796 -36.306 3 174.799 -36.324 -6.67 174.781 -36.3252 1.71 174.788 -36.35 3 174.805 -36.349 1.98 174.839 -36.371 3 174.868 -36.369 -3.56 174.794 -36.38 3 174.778 -36.387 3 174.747 -36.438 3 174.765 -36.442 3 174.78 -36.442 -7.3 174.765 -36.449 3 174.739 -36.495 1 174.737 -36.4886 2.87 174.748 -36.4834 3 174.748 -36.4773 2.8 174.744 -36.4719 2.5 174.746 -36.4641 3 174.74 -36.4651 2.8 174.737 -36.4701 2.8 174.724 -36.4821 0.47 174.734 -36.4669 1 174.731 -36.4592 2 174.731 -36.4491 2 174.727 -36.4343 3 174.717 -36.4316 2.8 174.72 -36.4227 3 174.709 -36.4285 2.5 174.7 -36.4254 2.8 174.689 -36.4191 3 174.694 -36.4299 2.8 174.692 -36.4361 3 174.709 -36.4456 2.5 174.697 -36.4467 3 174.701 -36.4612 2.8 174.695 -36.4659 3 174.699 -36.4682 2.8 174.706 -36.4671 2.8 174.707 -36.4735 3 174.709 -36.4805 2 174.71 -36.4764 3 174.705 -36.4754 3 174.698 -36.4752 2.8 174.693 -36.4777 2.8 174.687 -36.4825 2.8 174.683 -36.4846 3 174.687 -36.4866 2.9 174.694 -36.4891 3 174.706 -36.4965 3 174.721 -36.5087 -2 174.729 -36.517 3 174.721 -36.5159 2 174.716 -36.5115 2.5 174.709 -36.5114 3 174.714 -36.5176 2 174.72 -36.5256 2.99 174.711 -36.5243 1 174.705 -36.5291 2 174.702 -36.5247 2.8 174.694 -36.5251 2.8 174.688 -36.5262 2.8 174.685 -36.5268 2.8 174.68 -36.526 2.8 174.676 -36.5214 3 174.675 -36.529 2.9 174.684 -36.5321 2.9 174.687 -36.5293 3 174.691 -36.5291 2.8 174.699 -36.5311 2 174.707 -36.5363 2 174.713 -36.5296 -2 174.708 -36.5412 2 174.703 -36.5389 2.5 174.695 -36.5398 2.8 174.689 -36.5382 2.5 174.684 -36.5386 3 174.685 -36.542 2.9 174.692 -36.544 2.8 174.7 -36.543 2.5 174.705 -36.5437 2 174.71 -36.545 1 174.708 -36.563 3 174.695 -36.564 3 174.691 -36.577 3 174.706 -36.601 3 174.736 -36.624 3 174.749 -36.62 2.64 174.761 -36.629 3 174.841 -36.608 3 174.807 -36.61 3 174.806 -36.627 3 174.791 -36.6298 2.16 174.774 -36.626 3 174.745 -36.661 2.99 174.749 -36.683 3 174.761 -36.697 3 174.75 -36.715 3 174.754 -36.736 3 174.777 -36.777 3 174.776 -36.788 3 174.796 -36.81 3 174.814 -36.829 -2.58 174.794 -36.8305 -5 174.774 -36.8269 0.75 174.79 -36.8241 3 174.782 -36.8167 3 174.767 -36.8204 2 174.779 -36.8083 3 174.77 -36.7983 3 174.752 -36.8168 2 174.747 -36.8268 -1.8 174.743 -36.818 3 174.732 -36.8227 -7 174.697 -36.8205 -5 174.681 -36.7935 2.8 174.684 -36.7883 3 174.688 -36.7863 3 174.695 -36.784 3 174.703 -36.7829 3 174.697 -36.7793 3 174.69 -36.7816 3 174.685 -36.7833 3 174.68 -36.7872 2.8 174.672 -36.785 2.8 174.665 -36.7804 2.8 174.663 -36.7732 3 174.664 -36.7681 3 174.669 -36.7662 3 174.68 -36.7614 3 174.678 -36.7492 3 174.668 -36.7577 3 174.663 -36.7644 3 174.66 -36.7687 3 174.653 -36.7717 3 174.644 -36.7697 3 174.636 -36.7709 3 174.634 -36.7668 3 174.635 -36.7619 3 174.636 -36.759 3 174.633 -36.759 3 174.631 -36.7628 3 174.63 -36.7674 3 174.627 -36.7721 3 174.623 -36.7745 3 174.617 -36.7738 3 174.613 -36.7728 3 174.61 -36.7721 3 174.606 -36.7658 3 174.598 -36.7604 3 174.598 -36.7687 3 174.605 -36.7727 3 174.602 -36.7784 3 174.599 -36.7833 3 174.596 -36.7894 3 174.601 -36.7946 3 174.603 -36.7883 3 174.604 -36.7829 3 174.606 -36.7791 3 174.61 -36.7755 3 174.614 -36.7755 3 174.617 -36.779 3 174.622 -36.7775 3 174.626 -36.7762 3 174.632 -36.7764 3 174.64 -36.7753 3 174.645 -36.775 3 174.646 -36.7806 3 174.653 -36.7779 3 174.661 -36.7776 3 174.657 -36.7812 3 174.649 -36.7837 3 174.642 -36.7867 3 174.641 -36.7953 3 174.649 -36.7912 3 174.656 -36.7872 3 174.666 -36.788 2.8 174.673 -36.7904 2.8 174.673 -36.8103 2.29 174.653 -36.803 2.8 174.637 -36.8231 3 174.64 -36.8336 3 174.645 -36.8261 3 174.661 -36.8323 2.8 174.657 -36.8554 2.8 174.656 -36.8779 3 174.673 -36.8831 3 174.667 -36.8647 2.8 174.693 -36.8807 2.8 174.704 -36.8511 0.89 174.716 -36.8583 3 174.749 -36.8442 3 174.757 -36.8368 -4.27 174.769 -36.8444 -5 174.785 -36.8425 -7 174.793 -36.8565 2 174.801 -36.8638 3 174.814 -36.8613 3 174.854 -36.851 3 174.9 -36.848 2.71 174.915 -36.877 3 175.019 -36.884 3 175.069 -36.905 3 175.077 -36.917 3 175.131 -36.941 3 175.154 -36.95 3 175.17 -36.949 3 175.213 -36.946 3 175.287 -37.02 3 175.34 -37.209 3 175.403 -37.223 3 175.447 -37.216 3 175.515 -37.186 3 175.55 -37.151 3 175.524 -37.057 3 175.5 -36.978 3 175.416 -36.874 1.51 175.425 -36.822 2.98 175.444 -36.809 1.9 175.48 -36.803 1.48 175.491 -36.809 3 175.504 -36.798 2.99 175.504 -36.781 3 175.498 -36.774 3 175.494 -36.763 3 175.475 -36.754 2.99 175.478 -36.734 2.99 175.459 -36.725 3 175.439 -36.729 2.99 175.446 -36.657 2.98 175.427 -36.607 1.13 175.419 -36.59 2.99 175.384 -36.5734 2.99 175.344 -36.554 0.98 175.328 -36.481 -1.04 175.343 -36.484 3 175.344 -36.472 2.17 175.39 -36.476 3 175.416 -36.473 -15.43 175.409 -36.478 3 175.425 -36.497 -7.9 175.458 -36.526 3 175.476 -36.532 3 175.509 -36.521 -5.51 175.536 -36.545 3 175.519 -36.556 3 175.528 -36.565 3 175.521 -36.594 0 175.535 -36.605 3 175.563 -36.614 3 175.582 -36.629 3 175.572 -36.646 3 175.606 -36.684 -2.83 175.61 -36.709 3 175.63 -36.728 1.99 175.668 -36.726 -1.46 175.721 -36.72 1.35 175.736 -36.705 -4.85 175.78 -36.692 -7.8 175.787 -36.693 -3.52 175.794 -36.717 1.38 175.818 -36.717 -7 175.824 -36.731 -1.7 175.818 -36.74 2.99 175.804 -36.737 3 175.751 -36.758 -5 175.74 -36.792 3 175.726 -36.789 2 175.72 -36.806 -2 175.701 -36.8068 1 175.702 -36.834 1 175.693 -36.8438 1 175.681 -36.8406 2.5 175.669 -36.8348 3 175.669 -36.8453 2.5 175.668 -36.8543 3 175.681 -36.8506 2 175.681 -36.8637 2 175.668 -36.87 2.5 175.669 -36.8816 2.5 175.685 -36.8914 3 175.703 -36.8968 2.5 175.71 -36.9006 2.5 175.715 -36.8954 3 175.71 -36.89 2.5 175.716 -36.8709 3 175.707 -36.8675 2.5 175.714 -36.834 1 175.727 -36.8267 -2.67 175.74 -36.8347 -0.7 175.752 -36.8478 2.5 175.764 -36.8598 2.5 175.774 -36.8468 3 175.764 -36.847 2.5 175.76 -36.8409 2.5 175.763 -36.835 2.5 175.758 -36.824 2.06 175.781 -36.823 -2.12 175.817 -36.842 -5.11 175.816 -36.879 3 175.835 -36.891 -2.54 175.856 -36.922 -0.65 175.843 -36.944 3 175.84 -36.956 3 175.871 -36.998 1.77 175.886 -37.028 -2.3 175.89 -37.112 -0.02 175.877 -37.141 3 175.89 -37.193 2.23 175.887 -37.231 0.69 175.943 -37.346 2.05 175.944 -37.3786 0.4 175.978 -37.4645 -7 175.966 -37.4439 3 175.952 -37.4485 3 175.942 -37.4551 3 175.936 -37.4641 3 175.933 -37.4863 3 175.931 -37.4996 3 175.944 -37.4952 3 175.946 -37.5236 2 175.919 -37.5304 3 175.93 -37.5565 3 175.921 -37.5819 3 175.974 -37.5917 2.8 175.953 -37.6064 3 175.963 -37.631 3 176.014 -37.648 3 176.048 -37.6267 0.64 176.035 -37.6447 3 176.034 -37.6626 3 176.047 -37.649 1.95 176.044 -37.6724 3 176.039 -37.679 3 176.047 -37.6829 3 176.055 -37.673 3 176.063 -37.6659 3 176.064 -37.6569 0.29 176.093 -37.6796 3 176.088 -37.6863 3 176.089 -37.694 3 176.125 -37.6756 3 176.169 -37.6749 0 176.165 -37.6922 2 176.163 -37.7088 3 176.15 -37.7164 3 176.153 -37.7284 3 176.164 -37.7209 3 176.178 -37.7105 2 176.189 -37.7105 2 176.179 -37.7231 3 176.196 -37.7236 3 176.202 -37.7115 2 176.211 -37.7112 2 176.229 -37.7152 3 176.227 -37.7038 3 176.234 -37.6967 3 176.224 -37.6923 3 176.211 -37.6877 3 176.205 -37.7027 2 176.196 -37.7047 2 176.184 -37.7022 2 176.183 -37.6891 2 176.202 -37.6905 3 176.206 -37.6769 3 176.196 -37.6748 3 176.181 -37.6644 -5.47 176.182 -37.6393 -2 176.172 -37.624 -4.56 176.215 -37.6548 -0.03 176.254 -37.682 1.43 176.341 -37.7146 1.49 176.408 -37.742 2.38 176.409 -37.751 3 176.427 -37.763 2.17 176.455 -37.756 1.1 176.465 -37.74 0.48 176.483 -37.76 0.55 176.518 -37.7804 1.22 176.599 -37.829 3 176.681 -37.8588 -1.11 176.787 -37.895 3 176.826 -37.897 3 176.941 -37.921 3 176.998 -37.944 2.61 177.029 -37.962 3 177.109 -37.9818 2.56 177.139 -37.988 3 177.13 -37.9909 3 177.119 -37.9886 3 177.108 -37.9858 1.84 177.096 -37.9828 3 177.081 -37.9797 3 177.07 -37.9815 3 177.062 -37.9822 3 177.063 -37.9894 3 177.055 -37.995 3 177.06 -37.9997 3 177.062 -38.0065 3 177.065 -38.0128 3 177.071 -38.0096 3 177.067 -37.9979 3 177.077 -38.0033 3 177.085 -38.0084 3 177.086 -38.0172 3 177.096 -38.0125 3 177.113 -38.0077 3 177.107 -38.0148 3 177.102 -38.0223 3 177.121 -38.0208 3 177.128 -38.0361 3 177.143 -38.0446 3 177.155 -38.0471 3 177.156 -38.0374 3 177.145 -38.032 3 177.146 -38.0205 3 177.156 -38.013 3 177.163 -38.0026 3 177.161 -37.99 3 177.189 -38.0035 3 177.617 -37.824 2.99 177.658 -37.801 3 177.699 -37.724 3 177.728 -37.679 2.24 177.753 -37.673 2.75 177.885 -37.637 2.99 177.903 -37.607 1.4 177.997 -37.571 2.99 178.005 -37.551 3 178.039 -37.54 1.79 178.102 -37.5451 -7.04 178.158 -37.553 3 178.171 -37.534 -28.99 178.227 -37.55 3 178.309 -37.557 3 178.289 -37.571 3 178.292 -37.584 3 178.302 -37.595 3 178.322 -37.591 3 178.318 -37.603 3 178.353 -37.63 3 178.42 -37.6356 2.24 178.48 -37.642 3 178.514 -37.669 3 178.538 -37.677 3 178.549 -37.693 3 178.525 -37.713 3 178.519 -37.735 3 178.483 -37.774 3 178.465 -37.7906 3 178.448 -37.809 3 178.447 -37.837 3 178.428 -37.846 3 178.405 -37.87 3 178.4 -37.904 3 178.388 -37.923 3 178.395 -37.95 3 178.365 -37.988 3 178.335 -38.02 3 178.337 -38.039 3 178.355 -38.046 3 178.371 -38.052 3 178.363 -38.07 3 178.374 -38.082 3 178.366 -38.106 2.98 178.325 -38.119 3 178.322 -38.152 3 178.364 -38.176 3 178.341 -38.191 3 178.336 -38.22 3 178.319 -38.222 3 178.311 -38.233 3 178.315 -38.247 3 178.334 -38.263 3 178.333 -38.282 3 178.359 -38.288 3 178.324 -38.313 2.99 178.333 -38.333 3 178.326 -38.34 3 178.329 -38.354 3 178.307 -38.365 3 178.31 -38.383 3 178.338 -38.384 3 178.345 -38.419 3 178.31 -38.436 3 178.282 -38.474 3 178.282 -38.507 3 178.294 -38.53 3 178.258 -38.5535 2.14 178.215 -38.579 3 178.199 -38.605 3 178.162 -38.631 3 178.147 -38.651 3 178.12 -38.658 2.11 178.08 -38.68 3 178.072 -38.707 3 178.049 -38.699 2.99 178.025 -38.672 3 178 -38.672 3 177.969 -38.684 3 177.94 -38.717 3 177.934 -38.749 3 177.97 -38.757 3 177.946 -38.7711 2.41 177.931 -38.787 3 177.919 -38.8216 2.79 177.913 -38.825 2.78 177.919 -38.863 3 177.903 -38.887 3 177.91 -38.915 2.99 177.9 -38.9642 3 177.887 -39.021 3 177.9 -39.069 3 177.914 -39.087 3 177.947 -39.097 3 177.959 -39.093 2.99 178.003 -39.111 3 177.955 -39.141 3 177.932 -39.166 3 177.926 -39.168 3 177.924 -39.191 3 177.91 -39.223 3 177.863 -39.264 2.97 177.857 -39.239 2.97 177.847 -39.236 2.95 177.851 -39.215 2.94 177.839 -39.182 2.98 177.819 -39.1662 2.96 177.839 -39.145 3 177.851 -39.132 2.99 177.859 -39.104 2.99 177.863 -39.09 2.98 177.871 -39.083 3 177.86 -39.07 3 177.84 -39.062 3 177.825 -39.078 3 177.814 -39.076 3 177.77 -39.0673 2.36 177.716 -39.055 3 177.661 -39.0565 0.05 177.607 -39.0543 3 177.559 -39.0555 2.88 177.513 -39.056 3 177.453 -39.0637 -1.72 177.391 -39.069 3 177.336 -39.0818 3 177.274 -39.097 3 177.223 -39.1163 2.12 177.17 -39.1345 2.85 177.118 -39.153 3 177.077 -39.1745 3 177.04 -39.201 3 177.034 -39.237 3 177.017 -39.263 3 176.98 -39.2987 2.52 176.938 -39.338 3 176.917 -39.3486 3 176.891 -39.384 3 176.874 -39.434 3 176.875 -39.466 3 176.889 -39.481 3 176.922 -39.478 3 176.922 -39.556 3 176.961 -39.622 3 177.025 -39.651 3 177.076 -39.637 3 177.096 -39.646 3 177.074 -39.6649 3 177.052 -39.6889 3 177.011 -39.7312 3 176.995 -39.7876 3 177.003 -39.841 3 176.979 -39.863 3 176.965 -39.883 3 176.959 -39.91 3 176.931 -39.938 3 176.907 -39.9855 3 176.887 -40.0275 3 176.878 -40.062 3 176.892 -40.079 3 176.869 -40.1 3 176.87 -40.132 2.99 176.845 -40.144 3 176.83 -40.176 -0.71 176.787 -40.22 3 176.74 -40.229 3 176.708 -40.247 3 176.682 -40.2806 2.1 176.665 -40.313 3 176.67 -40.326 3 176.638 -40.384 3 176.633 -40.415 3 176.623 -40.431 3 176.631 -40.454 3 176.622 -40.49 3 176.556 -40.498 3 176.492 -40.531 3 176.472 -40.557 3 176.469 -40.575 3 176.42 -40.6109 0.48 176.39 -40.64 3 176.367 -40.677 3 176.311 -40.717 3 176.288 -40.75 3 176.285 -40.768 3 176.269 -40.782 3 176.256 -40.8186 3 176.242 -40.859 3 176.222 -40.88 3 176.219 -40.899 3 176.227 -40.905 3 176.19 -40.9306 1.61 176.145 -40.96 3 176.125 -41.002 3 176.105 -41.022 3 176.098 -41.057 3 176.068 -41.103 3 176.062 -41.13 3 176.031 -41.1542 2.32 175.995 -41.178 3 175.985 -41.2056 3 175.962 -41.245 3 175.912 -41.256 3 175.88 -41.275 3 175.862 -41.317 3 175.808 -41.36 3 175.741 -41.391 3 175.675 -41.415 3 175.636 -41.4454 3 175.598 -41.478 3 175.513 -41.508 3 175.469 -41.5417 3 175.43 -41.573 3 175.365 -41.572 3 175.358 -41.586 3 175.293 -41.614 2.99 175.236 -41.6086 2.99 175.218 -41.5431 2.98 175.193 -41.5264 2.98 175.208 -41.5004 2.98 175.207 -41.4754 2.98 175.221 -41.4552 2.98 175.218 -41.4488 2.99 175.216 -41.4344 2.99 175.201 -41.4224 3 175.116 -41.3892 2.99 175.047 -41.3745 3 175.014 -41.3912 3 174.991 -41.3932 3 174.918 -41.4399 2.95 174.902 -41.4211 2.98 174.867 -41.4089 2.99 174.875 -41.3882 2.98 174.849 -41.3585 2.96 174.858 -41.3374 2.97 174.874 -41.327 2.99 174.89 -41.3061 2.98 174.904 -41.2838 2.93 174.912 -41.2592 3 174.901 -41.255 3 174.9 -41.2378 2.99 174.879 -41.2297 3 174.842 -41.2297 3 174.787 -41.2652 3 174.789 -41.2826 3 174.804 -41.2879 3 174.804 -41.3044 3 174.796 -41.3139 3 174.801 -41.318 3 174.81 -41.3137 2.99 174.825 -41.2863 2.97 174.833 -41.2917 3 174.827 -41.3158 3 174.833 -41.3317 3 174.809 -41.3472 2.98 174.802 -41.3303 3 174.796 -41.3301 3 174.791 -41.3483 3 174.786 -41.3435 3 174.766 -41.3509 3 174.744 -41.3484 3 174.716 -41.363 2.99 174.693 -41.348 3 174.66 -41.3423 2.98 174.631 -41.321 -3.93 174.613 -41.278 2.94 174.641 -41.2409 2.95 174.662 -41.2482 3 174.693 -41.2216 2.95 174.714 -41.2191 3 174.739 -41.1732 2.96 174.78 -41.1424 1.49 174.804 -41.1151 3 174.832 -41.1074 2.99 174.838 -41.0942 2.97 174.852 -41.091 0 174.859 -41.0952 2 174.861 -41.102 1 174.854 -41.1076 1.5 174.85 -41.1133 2.5 174.84 -41.1154 2.5 174.837 -41.1203 2.5 174.837 -41.1247 2.5 174.84 -41.1277 2.97 174.842 -41.1247 2.5 174.848 -41.1203 2.5 174.855 -41.1156 2 174.861 -41.1084 1 174.867 -41.1032 1.5 174.865 -41.0979 1.5 174.866 -41.0917 2 174.864 -41.0836 2.5 174.861 -41.075 2.96 174.855 -41.0721 1 174.851 -41.0656 0.5 174.838 -41.0638 2.91 174.841 -41.0556 2.91 174.853 -41.0449 2.73 174.87 -41.0306 2.99 174.896 -41.0297 3 174.912 -41.0178 2.98 174.94 -40.9974 2.99 174.966 -40.9614 2.99 174.973 -40.9242 2.87 174.982 -40.8844 2.95 175.035 -40.8512 2.99 175.058 -40.8277 2.99 175.086 -40.7801 2.05 175.113 -40.7356 1.92 175.142 -40.6919 2.99 175.162 -40.6433 2.91 175.182 -40.5966 2.99 175.198 -40.5375 2.81 175.214 -40.4793 2.99 175.223 -40.4254 3 175.228 -40.372 2.99 175.226 -40.321 2.98 175.217 -40.274 2.98 175.2 -40.188 2.98 175.183 -40.143 2.99 175.151 -40.09 3 175.099 -40.0406 2.11 175.046 -39.985 3 174.978 -39.945 2.99 174.953 -39.915 3 174.927 -39.899 3 174.864 -39.873 3 174.794 -39.857 3 174.763 -39.865 3 174.709 -39.865 3 174.651 -39.836 3 174.554 -39.817 2.99 174.504 -39.778 2.99 174.429 -39.741 3 174.388 -39.699 2.85 174.346 -39.655 3 174.292 -39.624 3 174.254 -39.615 2.99 174.177 -39.5873 2.64 174.085 -39.578 3 174.048 -39.563 3 173.987 -39.553 3 173.95 -39.539 2.99 173.933 -39.523 3 173.901 -39.502 3 173.857 -39.459 3 173.846 -39.458 2.99 173.819 -39.429 2.99 173.797 -39.418 2.99 173.778 -39.388 2.99 173.764 -39.3338 2.88 173.75 -39.277 2.98 173.77 -39.249 2.99 173.77 -39.23 2.99 173.802 -39.1864 2.1 173.849 -39.15 2.99 173.912 -39.12 3 173.938 -39.116 3 173.995 -39.086 2.99 174.024 -39.054 2.99 174.045 -39.06 3 174.079 -39.051 3 174.135 -39.0217 3 174.183 -38.994 2.99 174.238 -38.983 3 174.305 -38.983 3 174.339 -38.994 3 174.403 -38.984 3 174.452 -38.943 2.99 174.501 -38.888 2.99 174.52 -38.887 3 174.561 -38.855 3 174.588 -38.804 2.99 174.602 -38.7517 2.99 174.615 -38.701 3 174.623 -38.6383 2.9 174.63 -38.58 2.98 174.633 -38.529 3 174.627 -38.501 2.98 174.637 -38.454 3 174.631 -38.387 2.96 174.674 -38.353 2.99 174.708 -38.309 3 174.706 -38.2509 1.36 174.708 -38.195 2.99 174.692 -38.1574 1.39 174.682 -38.1324 0.9 174.68 -38.11 2.99 174.689 -38.12 3 174.736 -38.122 3 174.755 -38.108 2.99 174.77 -38.079 3 174.778 -38.04 2.99 174.798 -38.019 3 174.779 -37.972 2.98 174.779 -37.938 2.98 174.756 -37.892 2.98 174.763 -37.878 3 174.757 -37.864 2.99 174.774 -37.836 2.99 174.825 -37.822 2.99 174.833 -37.786 2.99 174.82 -37.7342 2.56 174.808 -37.679 2.99 174.794 -37.634 3 174.77 -37.6 3 174.764 -37.552 2.99 174.731 -37.4937 2.66 174.7 -37.433 2.99 174.704 -37.381 3 174.677 -37.3326 2.7 174.653 -37.2871 3 174.613 -37.2136 2.99 174.576 -37.1423 3 174.533 -37.068 3 174.496 -37.051 3 174.486 -37.043 3 174.483 -37.018 2.99 174.46 -36.964 2.98 174.465 -36.946 3 174.449 -36.929 2.98 174.455 -36.92 2.99 174.442 -36.912 2.99 174.442 -36.891 2.99 174.431 -36.88 2.98 174.434 -36.86 3 174.422 -36.821 2.99 174.37 -36.7424 3 174.325 -36.6799 2.99 174.279 -36.618 2.99 174.228 -36.566 2.99 174.218 -36.552 3 174.168 -36.5 2.99 174.155 -36.476 3 174.079 -36.4236 3 174.039 -36.397 3 174.025 -36.332 3 174.004 -36.28 3 173.971 -36.222 2.99 173.913 -36.146 2.99 173.865 -36.0934 1.95 173.82 -36.0393 2.99 173.778 -35.9914 2.7 173.735 -35.9421 2.99 173.666 -35.866 2.99 173.617 -35.8168 2.99 173.563 -35.766 2.99 173.486 -35.678 2.99 173.447 -35.646 2.99 173.424 -35.607 2.98 173.375 -35.564 3 173.364 -35.5421 -2 173.378 -35.538 -1 173.389 -35.522 -1 173.39 -35.5076 -1.5 173.402 -35.5021 -3.5 173.408 -35.4906 -1.5 173.413 -35.4803 3 173.401 -35.4737 -3.5 173.416 -35.4721 3 173.413 -35.4557 -2 173.426 -35.448 -3.5 173.423 -35.4221 -7 173.433 -35.4215 1 173.436 -35.4376 3 173.444 -35.4462 3 173.453 -35.4491 3 173.448 -35.4396 3 173.443 -35.4258 3 173.438 -35.4165 -2 173.446 -35.4155 0 173.456 -35.414 -3 173.466 -35.4218 3 173.463 -35.4097 -5 173.468 -35.4051 -5 173.476 -35.4113 -5 173.488 -35.417 3 173.495 -35.4282 3 173.501 -35.4166 3 173.499 -35.4035 0 173.504 -35.3942 -2 173.517 -35.4073 3 173.52 -35.4154 3 173.518 -35.4245 3 173.522 -35.4281 3 173.527 -35.4277 3 173.532 -35.4283 3 173.531 -35.4338 3 173.536 -35.431 3 173.54 -35.4345 3 173.54 -35.4307 3 173.545 -35.4248 3 173.546 -35.4179 3 173.549 -35.4152 3 173.554 -35.4214 3 173.555 -35.4157 3 173.552 -35.4094 3 173.546 -35.4102 3 173.543 -35.4142 3 173.541 -35.4211 3 173.537 -35.4265 3 173.531 -35.4221 3 173.523 -35.4217 3 173.526 -35.4159 3 173.526 -35.4088 3 173.531 -35.3964 2 173.536 -35.3855 -2 173.539 -35.3813 -2 173.548 -35.3866 3 173.554 -35.3882 3 173.555 -35.3819 3 173.558 -35.372 3 173.555 -35.3623 1 173.565 -35.3551 2.5 173.582 -35.3611 3 173.598 -35.3552 3 173.611 -35.3459 3 173.607 -35.3362 3 173.617 -35.3257 3 173.618 -35.3169 3 173.612 -35.3101 3 173.606 -35.3238 3 173.598 -35.3257 3 173.588 -35.3328 3 173.598 -35.3416 3 173.585 -35.3413 3 173.573 -35.3428 2 173.568 -35.3362 3 173.573 -35.3341 3 173.576 -35.3314 3 173.58 -35.3299 3 173.576 -35.3265 3 173.578 -35.3216 3 173.574 -35.3217 3 173.568 -35.3179 3 173.564 -35.3158 3 173.563 -35.3124 3 173.562 -35.3083 3 173.559 -35.3111 3 173.56 -35.3155 3 173.563 -35.32 3 173.567 -35.3229 3 173.571 -35.3262 3 173.571 -35.33 3 173.568 -35.3314 3 173.564 -35.3335 3 173.564 -35.3424 3 173.55 -35.3405 3 173.552 -35.3332 3 173.545 -35.3304 3 173.54 -35.3263 3 173.536 -35.3194 3 173.534 -35.3129 3 173.538 -35.3073 3 173.539 -35.2965 3 173.531 -35.285 3 173.526 -35.279 3 173.53 -35.2728 3 173.537 -35.2703 3 173.53 -35.2672 3 173.525 -35.2719 3 173.521 -35.2762 3 173.522 -35.285 3 173.526 -35.2943 3 173.53 -35.3045 3 173.523 -35.3048 3 173.527 -35.312 3 173.529 -35.3188 3 173.535 -35.3281 3 173.541 -35.3316 3 173.544 -35.3366 3 173.544 -35.3431 3 173.547 -35.3505 2 173.544 -35.3629 0 173.54 -35.376 -2 173.535 -35.3785 -2 173.532 -35.3819 -2 173.529 -35.3865 -5 173.517 -35.3847 2 173.508 -35.3749 1 173.493 -35.378 2 173.487 -35.3908 -2 173.485 -35.379 3 173.478 -35.3774 3 173.466 -35.3702 3 173.468 -35.3821 3 173.48 -35.3856 3 173.479 -35.399 -5 173.468 -35.3946 -3 173.462 -35.4004 -5 173.452 -35.4039 -3 173.439 -35.4036 -2 173.441 -35.393 3 173.432 -35.4006 1 173.422 -35.4072 1 173.42 -35.3858 3 173.404 -35.4086 3 173.39 -35.4011 3 173.39 -35.4144 3 173.402 -35.4204 3 173.408 -35.4335 -4.5 173.389 -35.4318 3 173.378 -35.4424 3 173.388 -35.4505 -0.5 173.377 -35.4526 3 173.381 -35.4686 -2.5 173.373 -35.482 3 173.386 -35.4887 -2.5 173.369 -35.4984 -1 173.375 -35.519 -1 173.351 -35.52 3 173.301 -35.4659 2.95 173.249 -35.41 2.99 173.219 -35.387 3 173.167 -35.317 2.97 173.154 -35.287 2.98 173.112 -35.2478 2.98 173.07 -35.208 2.99 176.093 -37.58 2.91 176.138 -37.6166 2.98 176.157 -37.6307 0.77 176.15 -37.639 -1 176.134 -37.6296 2.5 176.126 -37.6206 2.5 176.12 -37.6116 2.5 176.107 -37.6047 2.5 176.098 -37.5963 3 176.087 -37.5931 3 176.075 -37.5964 3 176.073 -37.6188 2 176.062 -37.6054 1 176.031 -37.5988 0 176.045 -37.5692 3 176.057 -37.5725 3 176.066 -37.5785 3 176.065 -37.567 3 176.054 -37.5643 3 176.043 -37.5575 2.8 176.03 -37.5464 2.5 176.009 -37.5256 2 175.995 -37.507 -1 175.983 -37.4718 -1.57 175.992 -37.4704 -7.01 174.872 -36.409 0.77 174.878 -36.449 3 174.859 -36.442 3 174.831 -36.448 2.73 174.839 -36.442 3 174.828 -36.411 3 174.84 -36.394 -6.63 174.897 -36.776 3 174.934 -36.74 -5.37 174.93 -36.748 3 174.912 -36.797 3 174.851 -36.809 2.99 174.834 -36.769 -1.52 174.864 -36.764 1.35 175.095 -36.837 3 175.014 -36.791 3 174.989 -36.794 2.97 174.981 -36.784 2.45 174.991 -36.782 2.99 175.006 -36.769 1.12 175.016 -36.775 3 175.011 -36.782 3 175.019 -36.784 3 175.043 -36.78 3 175.061 -36.767 -0.12 175.065 -36.785 3 175.084 -36.789 3 175.168 -36.75 2.99 175.203 -36.766 0.94 175.18 -36.774 3 175.154 -36.786 3 175.145 -36.835 3 175.152 -36.842 -0.89 175.177 -36.86 3 175.213 -36.834 3 175.194 -36.858 3 175.207 -36.88 3 175.203 -36.896 -1.5 175.167 -36.873 3 175.115 -36.184 -1.38 175.104 -36.231 3 175.148 -35.935 2.46 175.155 -35.947 -16.17 175.141 -35.945 0.21 175.539 -36.323 3 175.475 -36.333 -8.24 175.482 -36.322 -2.75 175.493 -36.322 3 175.486 -36.306 3 175.47 -36.305 3 175.454 -36.311 3 175.431 -36.31 2.96 175.43 -36.28 -0.21 175.441 -36.271 2.99 175.439 -36.264 2.99 175.362 -36.246 0.85 175.313 -36.208 2.97 175.306 -36.203 1.67 175.32 -36.2 2.99 175.359 -36.209 3 175.35 -36.178 2.99 175.36 -36.176 2.99 175.36 -36.167 3 175.339 -36.16 1.62 175.35 -36.151 2.97 175.328 -36.141 3 175.318 -36.148 0.22 175.316 -36.128 -0.26 175.332 -36.136 3 175.343 -36.128 -0.72 175.363 -36.13 3 175.371 -36.122 2.99 175.341 -36.0977 2.81 175.347 -36.082 2.93 175.343 -36.07 -6.03 175.413 -36.065 -2.37 175.402 -36.083 3 175.406 -36.093 3 175.423 -36.088 -6.75 175.425 -36.109 3 175.427 -36.116 3 175.426 -36.138 2.82 175.465 -36.163 3 175.475 -36.16 0.19 175.48 -36.17 3 175.505 -36.175 3 175.482 -36.199 3 175.48 -36.212 3 175.487 -36.223 -0.17 175.477 -36.243 3 175.501 -36.271 3 175.545 -36.301 3 175.774 -36.632 -9.51 175.783 -36.608 2.99 175.767 -36.599 3 175.759 -36.604 2.97 175.75 -36.589 1.62 175.784 -36.576 -22.85 175.779 -36.59 3 175.791 -36.593 -2.13 175.791 -36.606 3 175.816 -36.612 -17.56 174.154 -41.5921 3 174.166 -41.6076 3 174.163 -41.6375 2.39 174.158 -41.667 3 174.179 -41.7087 3 174.213 -41.7292 3 174.253 -41.7338 3 174.276 -41.7294 3 174.273 -41.7473 3 174.218 -41.7938 3 174.195 -41.8376 3 174.163 -41.8732 3 174.105 -41.9148 3 174.083 -41.947 3 174.017 -41.9943 3 173.964 -42.05 3 173.946 -42.0786 3 173.922 -42.127 3 173.938 -42.166 3 173.897 -42.186 3 173.854 -42.2291 1.3 173.805 -42.265 3 173.759 -42.284 3 173.749 -42.32 3 173.692 -42.358 3 173.68 -42.399 3 173.716 -42.425 3 173.692 -42.433 2.98 173.632 -42.417 3 173.582 -42.448 3 173.537 -42.469 3 173.501 -42.529 3 173.516 -42.555 3 173.482 -42.586 3 173.448 -42.6416 3 173.417 -42.6985 3 173.386 -42.7554 2.65 173.367 -42.799 3 173.339 -42.8262 3 173.312 -42.854 3 173.316 -42.885 3 173.266 -42.927 3 173.223 -42.962 3 173.132 -42.99 3 173.073 -43.053 2.99 173.039 -43.048 3 172.982 -43.076 3 172.927 -43.0887 3 172.875 -43.102 3 172.828 -43.136 3 172.807 -43.134 3 172.767 -43.1785 3 172.741 -43.2255 3 172.717 -43.279 3 172.713 -43.336 3 172.714 -43.4 3 172.713 -43.445 3 172.72 -43.4992 3 172.748 -43.554 3 172.775 -43.57 3 172.773 -43.581 3 172.78 -43.585 3 172.796 -43.581 2.99 172.803 -43.588 3 172.777 -43.595 1.94 172.753 -43.6009 1.73 172.723 -43.607 3 172.711 -43.603 3 172.703 -43.61 3 172.672 -43.607 3 172.65 -43.62 3 172.643 -43.637 3 172.653 -43.64 3 172.662 -43.631 2.99 172.654 -43.65 3 172.67 -43.662 3 172.678 -43.636 3 172.684 -43.638 3 172.685 -43.651 3 172.694 -43.653 3 172.711 -43.625 2.99 172.735 -43.622 3 172.746 -43.624 3 172.759 -43.617 3 172.781 -43.62 3 172.8 -43.611 2.99 172.812 -43.616 3 172.822 -43.604 2.98 172.826 -43.611 3 172.821 -43.6278 3 172.817 -43.645 3 172.815 -43.66 3 172.829 -43.649 3 172.83 -43.6335 -2.49 172.834 -43.6207 -7.99 172.842 -43.6108 -2.5 172.852 -43.601 2.98 172.863 -43.612 3 172.873 -43.61 3 172.869 -43.617 3 172.877 -43.621 3 172.887 -43.614 2.99 172.899 -43.619 3 172.898 -43.628 3 172.907 -43.624 2.99 172.892 -43.647 3 172.893 -43.661 3 172.881 -43.671 3 172.888 -43.68 3 172.896 -43.682 3 172.899 -43.665 2.99 172.913 -43.6432 -5.5 172.927 -43.622 3 172.942 -43.637 3 172.958 -43.639 3 172.974 -43.634 2.99 172.996 -43.646 3 173.004 -43.654 3 173.019 -43.65 2.99 173.043 -43.653 3 173.031 -43.662 3 173.067 -43.677 3 173.056 -43.691 3 173.072 -43.697 3 173.082 -43.683 2.99 173.104 -43.702 3 173.097 -43.719 3 173.125 -43.74 3 173.123 -43.776 3 173.1 -43.775 3 173.109 -43.798 3 173.091 -43.81 3 173.101 -43.817 3 173.09 -43.824 3 173.099 -43.832 3 173.078 -43.833 3 173.071 -43.852 2.98 173.058 -43.849 3 173.039 -43.865 3 173.016 -43.874 3 172.995 -43.885 3 172.977 -43.889 2.98 172.964 -43.883 2.99 172.96 -43.869 3 172.941 -43.864 2.99 172.937 -43.854 2.99 172.942 -43.815 2.99 172.963 -43.799 3 172.94 -43.797 2.99 172.937 -43.79 2.98 172.96 -43.783 3 172.944 -43.773 2.99 172.955 -43.765 3 172.926 -43.759 3 172.922 -43.774 2.98 172.915 -43.76 3 172.905 -43.777 3 172.915 -43.781 3 172.92 -43.793 3 172.912 -43.795 3 172.916 -43.803 3 172.898 -43.82 3 172.91 -43.849 3 172.907 -43.861 3 172.938 -43.88 3 172.943 -43.893 3 172.93 -43.899 2.99 172.899 -43.888 3 172.867 -43.893 3 172.858 -43.889 2.99 172.853 -43.875 3 172.831 -43.888 2.98 172.821 -43.885 2.95 172.83 -43.875 3 172.807 -43.875 2.99 172.804 -43.869 3 172.793 -43.867 2.95 172.794 -43.861 3 172.78 -43.8663 3 172.756 -43.848 3 172.738 -43.852 2.99 172.736 -43.831 3 172.704 -43.826 3 172.633 -43.8297 2.89 172.562 -43.833 3 172.507 -43.8386 3 172.423 -43.8478 3 172.317 -43.864 3 172.228 -43.8906 3 172.133 -43.9205 3 172.074 -43.9387 2.96 172.01 -43.958 3 171.929 -43.9949 3 171.836 -44.0377 3 171.737 -44.0729 3 171.643 -44.113 3 171.579 -44.1466 2.88 171.51 -44.1829 2.86 171.426 -44.226 3 171.374 -44.2613 2.84 171.318 -44.299 3 171.284 -44.3409 1.57 171.252 -44.383 3 171.258 -44.442 3 171.207 -44.508 3 171.174 -44.561 3 171.157 -44.621 3 171.163 -44.684 3 171.169 -44.706 3 171.173 -44.7612 2.75 171.175 -44.819 3 171.167 -44.8732 2.75 171.155 -44.932 3 171.109 -44.996 3 171.076 -45.029 3 171.02 -45.0663 3 170.983 -45.112 3 170.979 -45.122 3 170.951 -45.13 3 170.908 -45.167 3 170.906 -45.185 3 170.889 -45.2 3 170.884 -45.218 3 170.864 -45.234 3 170.857 -45.274 3 170.837 -45.293 3 170.826 -45.318 3 170.826 -45.346 3 170.841 -45.359 3 170.863 -45.36 3 170.865 -45.382 3 170.831 -45.408 3 170.81 -45.439 3 170.81 -45.457 3 170.829 -45.471 3 170.811 -45.481 3 170.788 -45.502 3 170.779 -45.512 3 170.756 -45.5335 3 170.732 -45.556 3 170.731 -45.57 3 170.727 -45.587 3 170.701 -45.61 3 170.684 -45.605 3 170.664 -45.628 3 170.676 -45.636 3 170.66 -45.643 3 170.652 -45.664 3 170.617 -45.69 3 170.599 -45.724 3 170.616 -45.732 3 170.625 -45.739 3 170.635 -45.734 3 170.659 -45.759 3 170.692 -45.755 3 170.71 -45.7784 -2 170.693 -45.7813 1.34 170.674 -45.7811 1.16 170.656 -45.79 0.77 170.649 -45.7843 3 170.643 -45.794 3 170.628 -45.7931 2 170.627 -45.8133 2.58 170.618 -45.823 2.99 170.61 -45.8135 2.5 170.603 -45.8222 0 170.589 -45.8281 1 170.583 -45.8404 1.5 170.562 -45.8603 3 170.547 -45.8638 0.5 170.536 -45.8669 0.5 170.524 -45.869 0.5 170.516 -45.8708 1 170.509 -45.8753 2.4 170.508 -45.8837 2.4 170.519 -45.8896 2.4 170.53 -45.8757 3 170.539 -45.8746 0.5 170.551 -45.8757 0.5 170.565 -45.876 3 170.582 -45.8708 1 170.599 -45.8586 1.5 170.603 -45.841 1 170.617 -45.8432 2.81 170.634 -45.8413 3 170.649 -45.835 3 170.641 -45.8211 2.83 170.656 -45.8328 0 170.671 -45.8295 0 170.67 -45.81 2.99 170.689 -45.8013 -0.23 170.706 -45.7953 -0.4 170.723 -45.792 2.99 170.729 -45.772 2.98 170.741 -45.777 3 170.744 -45.8011 3 170.732 -45.815 3 170.725 -45.837 3 170.744 -45.845 3 170.739 -45.858 3 170.746 -45.866 3 170.726 -45.878 2.98 170.711 -45.87 3 170.687 -45.876 3 170.679 -45.869 3 170.688 -45.859 3 170.661 -45.848 3 170.66 -45.86 3 170.682 -45.891 3 170.669 -45.897 3 170.619 -45.893 3 170.568 -45.911 3 170.49 -45.915 3 170.433 -45.934 2.99 170.372 -45.936 3 170.296 -45.965 3 170.237 -46.016 3 170.21 -46.054 3 170.201 -46.093 3 170.172 -46.156 3 170.156 -46.16 3 170.116 -46.191 3 170.066 -46.2146 2.28 170.014 -46.236 3 169.974 -46.273 3 169.935 -46.285 3 169.905 -46.308 3 169.828 -46.336 3 169.792 -46.359 3 169.779 -46.398 3 169.798 -46.414 3 169.793 -46.432 3 169.815 -46.449 3 169.781 -46.454 3 169.78 -46.465 3 169.756 -46.469 3 169.75 -46.482 2.99 169.744 -46.476 3 169.719 -46.49 3 169.71 -46.502 3 169.7 -46.508 3 169.698 -46.519 3 169.661 -46.528 3 169.654 -46.538 3 169.614 -46.54 3 169.612 -46.558 3 169.588 -46.565 3 169.577 -46.577 3 169.574 -46.564 3 169.558 -46.559 3 169.541 -46.564 3 169.52 -46.557 3 169.477 -46.561 3 169.466 -46.58 3 169.449 -46.578 3 169.427 -46.599 3 169.405 -46.612 3 169.38 -46.609 3 169.359 -46.623 3 169.361 -46.637 2.99 169.32 -46.627 3 169.312 -46.635 2.98 169.301 -46.623 3 169.285 -46.62 3 169.251 -46.634 3 169.255 -46.642 3 169.24 -46.637 3 169.233 -46.649 3 169.203 -46.662 3 169.194 -46.653 3 169.168 -46.658 2.98 169.137 -46.647 3 169.108 -46.648 3 169.105 -46.664 3 169.056 -46.672 3 169.053 -46.663 3 169.029 -46.667 3 168.998 -46.675 3 168.989 -46.665 3 168.967 -46.672 2.99 168.934 -46.656 3 168.846 -46.659 3 168.823 -46.627 2.98 168.83 -46.607 3 168.805 -46.595 3 168.783 -46.568 3 168.741 -46.57 3 168.694 -46.568 3 168.62 -46.579 3 168.513 -46.609 3 168.476 -46.609 3 168.43 -46.608 3 168.389 -46.595 3 168.363 -46.6014 2.99 168.376 -46.583 2.99 168.405 -46.581 3 168.412 -46.572 3 168.417 -46.585 3 168.455 -46.582 3 168.454 -46.587 3 168.481 -46.5899 3 168.522 -46.597 3 168.525 -46.59 3 168.517 -46.577 3 168.48 -46.5636 3 168.452 -46.561 3 168.413 -46.56 3 168.374 -46.572 3 168.364 -46.557 3 168.371 -46.548 3 168.349 -46.536 3 168.333 -46.55 3 168.328 -46.545 3 168.303 -46.55 3 168.3 -46.572 3 168.308 -46.577 3 168.275 -46.584 3 168.271 -46.56 3 168.229 -46.552 2.97 168.238 -46.544 2.98 168.224 -46.519 2.97 168.286 -46.512 3 168.279 -46.54 3 168.295 -46.534 3 168.288 -46.524 3 168.294 -46.51 3 168.313 -46.512 3 168.357 -46.497 3 168.357 -46.491 3 168.378 -46.486 3 168.377 -46.479 3 168.366 -46.48 3 168.353 -46.469 3 168.346 -46.474 3 168.347 -46.457 3 168.345 -46.451 3 168.345 -46.443 3 168.347 -46.427 3 168.337 -46.42 3 168.324 -46.428 3 168.323 -46.454 3 168.275 -46.461 3 168.265 -46.464 3 168.295 -46.467 3 168.306 -46.494 3 168.266 -46.501 3 168.241 -46.4591 2.99 168.213 -46.413 2.99 168.159 -46.365 3 168.092 -46.339 3 168.046 -46.344 3 168.028 -46.358 3 168.023 -46.3631 3 168.04 -46.382 3 168.037 -46.387 3 167.921 -46.357 3 167.879 -46.368 3 167.887 -46.382 3 167.883 -46.392 2.99 167.832 -46.368 3 167.81 -46.371 3 167.805 -46.384 3 167.784 -46.39 2.99 167.745 -46.364 2.99 167.733 -46.355 2.99 167.738 -46.343 3 167.725 -46.339 2.99 167.725 -46.329 3 167.699 -46.33 3 167.685 -46.322 2.99 167.693 -46.304 2.99 167.725 -46.296 2.99 167.728 -46.272 2.99 167.621 -46.195 3 167.492 -46.149 3 167.428 -46.145 3 167.396 -46.153 3 167.387 -46.177 3 167.35 -46.193 3 167.362 -46.215 3 167.359 -46.232 3 167.336 -46.25 3 167.318 -46.252 3 167.288 -46.242 3 167.255 -46.245 3 167.22 -46.258 3 167.129 -46.247 3 167.107 -46.254 2.99 167.039 -46.231 3 166.934 -46.222 3 166.915 -46.217 3 166.889 -46.216 3 166.845 -46.205 3 166.807 -46.212 3 166.781 -46.228 2.98 166.767 -46.212 3 166.73 -46.21 2.99 166.72 -46.202 3 166.695 -46.211 2.99 166.674 -46.2 3 166.66 -46.202 2.99 166.643 -46.193 2.97 166.644 -46.177 2.97 166.629 -46.16 3 166.613 -46.156 2.96 166.617 -46.146 3 166.656 -46.1277 3 166.686 -46.113 2.99 166.697 -46.117 3 166.713 -46.111 2.96 166.71 -46.093 2.89 166.722 -46.0817 2.91 166.729 -46.091 3 166.739 -46.089 2.99 166.734 -46.067 2.95 166.754 -46.064 2.97 166.769 -46.058 2.95 166.778 -46.048 2.9 166.767 -46.018 2.93 166.775 -46.004 2.95 166.807 -45.9964 2.98 166.856 -45.98 2.98 166.919 -45.93 2.93 166.915 -45.924 2.99 166.881 -45.947 3 166.873 -45.946 3 166.849 -45.97 2.99 166.787 -45.986 2.96 166.775 -45.979 3 166.757 -45.995 2.98 166.74 -46.0187 3 166.761 -46.037 2.99 166.765 -46.05 3 166.746 -46.0592 -40.88 166.748 -46.043 3 166.735 -46.042 3 166.724 -46.054 3 166.715 -46.0693 3 166.706 -46.073 2.96 166.707 -46.059 2.99 166.698 -46.054 3 166.731 -46.0252 2.99 166.72 -46.021 3 166.69 -46.046 3 166.688 -46.059 2.98 166.676 -46.052 2.99 166.647 -46.08 3 166.641 -46.078 2.99 166.643 -46.071 2.99 166.616 -46.06 3 166.605 -46.074 3 166.588 -46.079 3 166.589 -46.088 3 166.573 -46.091 2.97 166.567 -46.074 2.96 166.584 -46.061 3 166.586 -46.037 2.87 166.608 -46.054 3 166.601 -46.013 2.87 166.613 -46.007 2.93 166.626 -45.983 2.88 166.683 -45.969 2.94 166.72 -45.9691 3 166.746 -45.9712 3 166.764 -45.971 3 166.767 -45.966 2.89 166.753 -45.958 2.86 166.769 -45.95 2.93 166.742 -45.946 2.99 166.701 -45.959 2.97 166.67 -45.9517 3 166.649 -45.948 2.85 166.655 -45.93 2.8 166.68 -45.908 2.94 166.688 -45.881 2.93 166.705 -45.872 2.96 166.708 -45.865 3 166.702 -45.863 2.99 166.681 -45.872 3 166.667 -45.899 3 166.645 -45.912 3 166.618 -45.955 2.99 166.595 -45.972 3 166.563 -46.0098 -50.88 166.528 -45.997 3 166.516 -45.994 3 166.492 -46.003 2.99 166.475 -45.997 3 166.47 -46 3 166.474 -46.008 3 166.454 -46 2.99 166.45 -45.931 2.97 166.437 -45.913 2.97 166.429 -45.904 2.96 166.44 -45.883 2.98 166.432 -45.854 2.97 166.451 -45.817 2.97 166.471 -45.817 3 166.487 -45.804 2.92 166.517 -45.8 2.97 166.521 -45.793 2.84 166.546 -45.797 3 166.572 -45.788 3 166.577 -45.797 3 166.589 -45.795 3 166.592 -45.8 3 166.632 -45.7922 -72.01 166.676 -45.785 -72.01 166.723 -45.7748 -72.03 166.765 -45.7674 -72.03 166.795 -45.762 2.94 166.82 -45.761 2.99 166.835 -45.774 3 166.855 -45.772 2.98 166.837 -45.763 2.63 166.867 -45.745 2.97 166.881 -45.7403 2.9 166.894 -45.736 2.9 166.951 -45.732 2.99 166.96 -45.7249 2.93 166.967 -45.7132 3 166.947 -45.718 2.97 166.96 -45.696 2.97 166.955 -45.694 3 166.932 -45.723 2.87 166.905 -45.725 3 166.865 -45.7108 2.87 166.821 -45.702 3 166.801 -45.714 3 166.768 -45.7191 3 166.736 -45.728 2.89 166.729 -45.711 -72.13 166.735 -45.6935 -72.34 166.742 -45.674 -72.09 166.751 -45.667 2.49 166.807 -45.6581 -96.98 166.852 -45.649 2.9 166.857 -45.642 2.86 166.905 -45.64 3 166.938 -45.628 2.96 166.971 -45.6 3 166.93 -45.624 2.99 166.878 -45.633 3 166.851 -45.629 3 166.796 -45.65 -97 166.738 -45.657 -67 166.733 -45.664 -67 166.728 -45.615 2.62 166.721 -45.606 2.7 166.728 -45.595 2.57 166.763 -45.594 2.99 166.794 -45.574 3 166.835 -45.56 2.9 166.87 -45.551 2.82 166.905 -45.561 3 166.933 -45.557 2.96 166.954 -45.552 2.95 166.985 -45.564 3 166.997 -45.553 3 166.981 -45.555 2.87 166.964 -45.544 2.96 166.936 -45.5464 3 166.91 -45.555 2.94 166.887 -45.548 2.82 166.882 -45.538 2.93 166.942 -45.524 -47 166.975 -45.5093 -47.03 167 -45.497 -27.01 167.013 -45.484 3 166.97 -45.4946 -47 166.926 -45.5099 -47 166.888 -45.526 2.95 166.866 -45.519 -47 166.872 -45.531 2.86 166.868 -45.539 3 166.817 -45.552 -97.18 166.807 -45.547 -97.07 166.792 -45.559 -97.02 166.773 -45.558 -97.01 166.765 -45.57 -97 166.731 -45.576 -97.03 166.703 -45.5708 -81.76 166.671 -45.564 -46.97 166.686 -45.513 2.94 166.726 -45.495 2.96 166.711 -45.469 2.86 166.728 -45.449 2.91 166.725 -45.44 2.82 166.75 -45.399 2.77 166.774 -45.39 2.93 166.791 -45.392 3 166.826 -45.4074 3 166.85 -45.419 3 166.871 -45.419 3 166.881 -45.4287 3 166.891 -45.438 3 166.905 -45.428 3 166.884 -45.4231 2.88 166.87 -45.408 3 166.865 -45.399 3 166.85 -45.408 3 166.843 -45.402 2.92 166.819 -45.3897 2.98 166.791 -45.3815 2.84 166.774 -45.375 2.95 166.77 -45.36 2.79 166.808 -45.31 2.79 166.834 -45.296 2.9 166.84 -45.278 2.79 166.855 -45.276 2.97 166.867 -45.29 2.98 166.905 -45.301 2.98 166.947 -45.312 3 166.91 -45.333 3 166.893 -45.335 3 166.896 -45.342 3 166.917 -45.34 2.96 166.963 -45.319 2.85 166.994 -45.3317 3 167.028 -45.346 3 167.017 -45.364 3 167.001 -45.368 3 167.013 -45.373 3 167.022 -45.4 2.97 166.981 -45.394 3 166.944 -45.403 3 166.917 -45.415 2.99 166.917 -45.421 2.99 166.952 -45.4118 2.98 166.984 -45.403 2.91 167.023 -45.409 2.99 167.032 -45.397 2.97 167.021 -45.376 3 167.03 -45.355 2.99 167.04 -45.352 2.89 167.068 -45.361 3 167.095 -45.3965 3 167.119 -45.428 3 167.115 -45.446 3 167.077 -45.472 3 167.057 -45.503 3 167.077 -45.494 3 167.086 -45.472 3 167.119 -45.455 2.96 167.132 -45.44 2.96 167.166 -45.463 3 167.136 -45.431 2.96 167.133 -45.413 3 167.097 -45.372 3 167.078 -45.354 2.94 167.039 -45.342 2.72 167.008 -45.313 2.62 167.039 -45.288 2.78 167.068 -45.291 3 167.093 -45.285 2.93 167.116 -45.279 2.93 167.138 -45.285 3 167.149 -45.303 3 167.171 -45.316 3 167.194 -45.316 3 167.195 -45.309 2.98 167.169 -45.3064 2.95 167.156 -45.291 2.92 167.142 -45.275 2.88 167.158 -45.266 2.93 167.168 -45.25 2.99 167.156 -45.249 3 167.144 -45.263 2.98 167.123 -45.259 3 167.112 -45.272 3 167.083 -45.2731 -0.72 167.047 -45.274 3 167.025 -45.281 3 167.007 -45.262 2.83 167.004 -45.244 2.81 166.982 -45.225 2.8 166.967 -45.191 2.84 166.977 -45.185 2.86 166.982 -45.167 2.87 166.991 -45.165 3 166.987 -45.155 2.86 166.972 -45.139 2.94 166.988 -45.1281 1.34 167.003 -45.118 2.85 167.012 -45.102 2.5 167.042 -45.113 3 167.1 -45.181 3 167.108 -45.174 2.97 167.057 -45.111 2.92 167.025 -45.098 3 167.024 -45.091 2.84 167.05 -45.0695 2.19 167.075 -45.049 2.76 167.084 -45.053 2.95 167.095 -45.076 3 167.127 -45.096 3 167.13 -45.126 3 167.151 -45.143 3 167.168 -45.144 3 167.14 -45.126 3 167.14 -45.096 3 167.172 -45.0998 3 167.211 -45.104 3 167.206 -45.097 2.97 167.168 -45.0898 3 167.132 -45.089 2.84 167.104 -45.062 3 167.091 -45.042 2.91 167.102 -45.026 3 167.091 -45.023 2.87 167.123 -45.001 2.95 167.143 -45.015 3 167.185 -45.02 3 167.213 -45.0303 3 167.24 -45.04 3 167.304 -45.048 3 167.304 -45.041 2.98 167.231 -45.029 3 167.206 -45.015 3 167.177 -45.003 3 167.144 -45.003 2.41 167.136 -44.987 2.94 167.176 -44.9562 2.78 167.212 -44.92 2.72 167.238 -44.8954 -40.9 167.27 -44.868 2.96 167.333 -44.8427 2.96 167.342 -44.87 3 167.365 -44.886 3 167.376 -44.91 3 167.366 -44.924 3 167.365 -44.942 3 167.392 -44.95 3 167.404 -44.96 3 167.378 -44.984 3 167.38 -44.99 3 167.387 -44.992 3 167.407 -44.972 2.94 167.422 -44.974 3 167.43 -44.983 3 167.44 -44.98 2.99 167.431 -44.965 2.91 167.41 -44.9475 3 167.385 -44.931 2.88 167.408 -44.928 2.97 167.394 -44.916 2.67 167.385 -44.886 2.49 167.354 -44.845 2.85 167.356 -44.825 2.93 167.392 -44.8 2.72 167.414 -44.795 2.93 167.439 -44.774 2.94 167.486 -44.777 3 167.52 -44.798 3 167.532 -44.7992 3 167.486 -44.843 3 167.494 -44.864 3 167.529 -44.88 3 167.504 -44.8559 2.81 167.512 -44.844 2.92 167.548 -44.7976 2.78 167.516 -44.7734 3 167.493 -44.753 2.86 167.518 -44.731 2.95 167.565 -44.733 3 167.58 -44.7375 -27.62 167.592 -44.7413 -33.15 167.608 -44.761 -14.57 167.624 -44.781 3 167.633 -44.774 2.93 167.618 -44.746 3 167.587 -44.733 3 167.562 -44.713 3 167.568 -44.694 3 167.561 -44.688 2.89 167.589 -44.666 2.98 167.611 -44.657 2.99 167.652 -44.683 3 167.663 -44.681 3 167.661 -44.668 2.98 167.635 -44.64 2.97 167.667 -44.633 3 167.705 -44.606 2.96 167.734 -44.602 3 167.75 -44.579 3 167.778 -44.571 3 167.803 -44.598 3 167.841 -44.607 3 167.869 -44.625 3 167.894 -44.649 3 167.909 -44.679 3 167.928 -44.667 2.92 167.914 -44.624 3 167.9 -44.629 3 167.863 -44.603 3 167.838 -44.5955 2.95 167.823 -44.5914 2.92 167.825 -44.55 2.89 167.831 -44.544 2.97 167.831 -44.511 2.99 167.82 -44.498 2.94 167.844 -44.482 2.99 167.879 -44.432 2.93 167.941 -44.386 2.99 167.989 -44.378 3 168.005 -44.357 2.99 168.004 -44.328 2.93 168.06 -44.323 3 168.089 -44.33 3 168.1 -44.324 3 168.118 -44.286 2.99 168.056 -44.257 2.99 168.08 -44.243 2.99 168.108 -44.24 3 168.158 -44.199 2.99 168.258 -44.146 2.98 168.289 -44.097 2.99 168.326 -44.081 3 168.332 -44.045 2.96 168.37 -44.005 2.93 168.444 -44.0015 1.58 168.508 -43.999 3 168.551 -43.989 2.98 168.585 -43.9731 2.99 168.625 -43.957 3 168.618 -43.968 3 168.623 -43.978 3 168.658 -43.992 3 168.728 -43.988 3 168.823 -43.96 2.99 168.902 -43.897 3 168.971 -43.876 3 169.046 -43.8305 2.66 169.12 -43.776 1.42 169.203 -43.718 2.99 169.281 -43.6913 2.98 169.351 -43.665 2.98 169.384 -43.635 2.99 169.477 -43.621 3 169.5 -43.628 3 169.547 -43.597 2.99 169.553 -43.585 3 169.564 -43.602 3 169.606 -43.593 3 169.643 -43.557 3 169.702 -43.5283 2.51 169.739 -43.4861 2.51 169.777 -43.442 2.99 169.807 -43.419 3 169.844 -43.393 2.99 169.879 -43.394 3 169.942 -43.377 3 170.007 -43.335 3 170.049 -43.289 2.99 170.119 -43.245 3 170.161 -43.22 3 170.21 -43.175 2.99 170.241 -43.139 3 170.26 -43.11 3 170.341 -43.098 3 170.42 -43.036 2.99 170.488 -43.016 3 170.562 -43.002 3 170.65 -42.962 3 170.724 -42.927 3 170.793 -42.884 3 170.848 -42.8383 3 170.894 -42.7834 1.6 170.935 -42.733 3 170.978 -42.6962 2.59 171.019 -42.663 2.99 171.046 -42.651 3 171.093 -42.604 3 171.124 -42.5648 3 171.153 -42.527 2.99 171.175 -42.4824 1.71 171.19 -42.443 3 171.208 -42.421 3 171.217 -42.383 2.98 171.238 -42.378 3 171.27 -42.3192 1.8 171.304 -42.267 3 171.309 -42.2138 2.24 171.317 -42.1618 2.12 171.327 -42.114 2.99 171.341 -42.087 2.99 171.363 -42.065 2.99 171.366 -42.036 2.99 171.392 -42.022 3 171.397 -41.996 2.99 171.409 -41.9556 1.96 171.417 -41.919 3 171.452 -41.89 3 171.456 -41.807 3 171.451 -41.777 2.99 171.468 -41.748 2.99 171.548 -41.75 3 171.586 -41.731 2.99 171.621 -41.743 3 171.659 -41.742 3 171.715 -41.721 3 171.767 -41.686 2.73 171.807 -41.6604 2.99 171.86 -41.624 3 171.901 -41.5748 2.93 171.929 -41.5321 1.95 171.957 -41.4893 2.59 171.985 -41.446 3 172.021 -41.4215 2.83 172.063 -41.386 3 172.08 -41.335 2.99 172.088 -41.2667 1.79 172.095 -41.2125 1.97 172.101 -41.1508 2.99 172.097 -41.098 3 172.109 -41.032 3 172.1 -40.975 2.74 172.091 -40.916 2.98 172.107 -40.886 3 172.132 -40.85 2.98 172.175 -40.81 2.99 172.214 -40.777 2.99 172.25 -40.768 3 172.286 -40.751 2.99 172.325 -40.719 2.97 172.364 -40.701 2.99 172.394 -40.667 2.98 172.441 -40.631 2.98 172.496 -40.6038 1.67 172.548 -40.569 2.99 172.589 -40.546 3 172.643 -40.506 3 172.695 -40.499 3 172.735 -40.51 3 172.813 -40.504 3 172.868 -40.5104 3 172.927 -40.517 3 172.985 -40.531 3 173.005 -40.543 3 173.017 -40.553 3 172.975 -40.537 3 172.898 -40.52 3 172.838 -40.5166 3 172.777 -40.513 3 172.733 -40.525 3 172.721 -40.548 3 172.685 -40.585 3 172.678 -40.626 3 172.682 -40.6675 3 172.686 -40.71 3 172.7 -40.735 3 172.732 -40.774 3 172.768 -40.795 3 172.794 -40.815 3 172.838 -40.833 3 172.89 -40.833 3 172.91 -40.815 3 172.919 -40.801 2.99 172.94 -40.813 3 172.956 -40.812 3 172.954 -40.789 2.99 172.985 -40.782 3 172.995 -40.795 3 173.014 -40.816 3 173.015 -40.851 3 173.042 -40.854 2.97 173.056 -40.859 3 173.064 -40.879 3 173.045 -40.889 3 173.062 -40.912 3 173.053 -40.9336 2.93 173.066 -40.95 3 173.067 -40.963 3 173.051 -40.967 3 173.033 -40.991 3 173.007 -40.993 3 173.008 -41.01 3 173.018 -41.017 3 173.02 -41.046 3 173.004 -41.052 3 172.998 -41.065 3 173.03 -41.09 3 173.02 -41.139 3 173.076 -41.205 3 173.089 -41.2372 2.69 173.088 -41.239 2.65 173.117 -41.256 3 173.184 -41.277 3 173.203 -41.299 3 173.232 -41.28 3 173.249 -41.28 3 173.275 -41.257 3 173.283 -41.266 3 173.303 -41.253 3 173.327 -41.221 3 173.321 -41.204 2.95 173.361 -41.18 0.36 173.401 -41.158 2.98 173.414 -41.16 3 173.409 -41.142 2.86 173.415 -41.137 3 173.434 -41.142 3 173.437 -41.162 3 173.48 -41.158 3 173.505 -41.135 2.99 173.512 -41.106 2.98 173.544 -41.098 2.99 173.571 -41.065 2.98 173.584 -41.066 3 173.593 -41.052 2.99 173.614 -41.07 3 173.632 -41.075 3 173.624 -41.09 3 173.628 -41.097 3 173.638 -41.099 3 173.647 -41.091 3 173.657 -41.1 3 173.65 -41.11 3 173.665 -41.112 3 173.673 -41.097 2.99 173.659 -41.09 2.88 173.663 -41.079 2.92 173.693 -41.0763 3 173.721 -41.07 3 173.722 -41.061 2.96 173.751 -41.056 2.99 173.746 -41.0523 3 173.739 -41.048 3 173.751 -41.037 2.99 173.744 -41.034 3 173.726 -41.048 2.97 173.718 -41.039 3 173.71 -41.051 3 173.689 -41.057 2.99 173.672 -41.035 2.99 173.715 -41.007 2.97 173.724 -41.015 3 173.733 -41.011 3 173.734 -41.001 2.99 173.748 -41.006 3 173.765 -40.975 2.95 173.776 -40.991 3 173.797 -40.985 2.98 173.785 -40.968 2.97 173.794 -40.964 2.95 173.804 -40.973 3 173.81 -40.963 2.95 173.805 -40.955 2.94 173.835 -40.942 2.98 173.834 -40.9264 -1.94 173.856 -40.931 3 173.844 -40.945 3 173.844 -40.959 3 173.834 -40.963 3 173.84 -40.975 3 173.833 -40.984 3 173.846 -40.992 3 173.868 -40.985 3 173.884 -40.958 2.99 173.897 -40.961 3 173.915 -40.945 2.99 173.905 -40.93 2.93 173.915 -40.925 2.94 173.931 -40.9254 3 173.951 -40.9089 3 173.978 -40.8887 2.94 173.979 -40.9043 3 174.001 -40.9062 3 174.022 -40.9107 3 174.012 -40.9182 3 174.018 -40.9243 3 174.011 -40.9295 3 174.013 -40.9371 3 173.998 -40.9459 2.97 174.001 -40.9338 2.98 173.982 -40.9078 3 173.973 -40.9241 3 173.975 -40.9379 3 173.97 -40.9468 2.98 173.966 -40.9363 3 173.95 -40.9404 3 173.958 -40.958 3 173.95 -40.971 2.98 173.945 -40.9637 3 173.917 -40.9646 3 173.904 -40.969 3 173.898 -40.979 3 173.901 -40.99 3 173.914 -40.985 3 173.929 -40.9848 3 173.917 -40.9952 3 173.892 -41.002 3 173.888 -41.01 3 173.878 -41.003 3 173.869 -41.019 3 173.85 -41.024 2.99 173.814 -41.019 2.91 173.836 -40.995 3 173.815 -40.993 3 173.803 -41.014 2.98 173.783 -41.008 3 173.78 -41.012 3 173.787 -41.014 3 173.77 -41.024 3 173.792 -41.033 3 173.806 -41.028 2.97 173.809 -41.035 3 173.795 -41.038 3 173.791 -41.046 2.98 173.783 -41.041 3 173.776 -41.047 3 173.78 -41.05 3 173.767 -41.054 3 173.786 -41.062 3 173.774 -41.071 3 173.781 -41.083 3 173.771 -41.095 3 173.752 -41.099 3 173.756 -41.103 3 173.754 -41.113 3 173.76 -41.12 3 173.772 -41.106 2.96 173.778 -41.115 3 173.785 -41.112 3 173.79 -41.103 2.99 173.778 -41.1 2.94 173.791 -41.094 2.98 173.791 -41.086 2.99 173.796 -41.086 3 173.796 -41.095 3 173.806 -41.094 3 173.813 -41.074 2.99 173.822 -41.073 2.99 173.816 -41.064 3 173.83 -41.055 2.99 173.855 -41.066 3 173.864 -41.055 3 173.882 -41.064 3 173.915 -41.058 3 173.95 -41.0632 2.96 173.917 -41.0664 3 173.905 -41.072 3 173.91 -41.081 3 173.902 -41.086 2.99 173.885 -41.077 3 173.878 -41.079 3 173.88 -41.086 2.99 173.868 -41.082 3 173.868 -41.092 3 173.857 -41.1 3 173.873 -41.1 3 173.887 -41.103 3 173.883 -41.123 3 173.876 -41.125 2.95 173.863 -41.113 3 173.844 -41.116 3 173.855 -41.126 3 173.851 -41.136 3 173.83 -41.139 3 173.837 -41.147 3 173.827 -41.149 3 173.823 -41.142 3 173.817 -41.155 3 173.801 -41.151 3 173.791 -41.156 3 173.781 -41.148 3 173.775 -41.155 3 173.783 -41.159 3 173.775 -41.158 3 173.779 -41.164 3 173.772 -41.174 3 173.784 -41.179 3 173.796 -41.165 2.99 173.819 -41.1665 3 173.847 -41.155 2.99 173.85 -41.163 3 173.829 -41.175 3 173.857 -41.171 2.99 173.865 -41.193 3 173.858 -41.208 3 173.849 -41.21 3 173.851 -41.217 3 173.84 -41.22 3 173.847 -41.226 3 173.849 -41.243 3 173.824 -41.253 2.99 173.796 -41.243 3 173.801 -41.257 3 173.766 -41.257 3 173.757 -41.27 3 173.774 -41.285 3 173.782 -41.274 3 173.772 -41.267 2.99 173.784 -41.266 3 173.806 -41.289 3 173.823 -41.295 3 173.845 -41.293 3 173.847 -41.284 3 173.824 -41.287 2.99 173.81 -41.279 2.99 173.809 -41.265 3 173.834 -41.2623 3 173.868 -41.259 3 173.915 -41.233 3 173.859 -41.229 2.95 173.86 -41.222 3 173.88 -41.223 3 173.911 -41.211 2.99 173.917 -41.2107 3 173.946 -41.2019 3 173.937 -41.2206 3 173.955 -41.2103 2.99 173.97 -41.2185 3 173.97 -41.2113 3 173.997 -41.2109 3 174.013 -41.2003 3 174.032 -41.2033 3 174.032 -41.1926 3 174.016 -41.1907 2.95 174.023 -41.1863 2.99 174.047 -41.1971 3 174.053 -41.1915 2.99 174.074 -41.1961 3 174.081 -41.1896 2.99 174.11 -41.1804 3 174.12 -41.168 3 174.08 -41.1728 3 174.053 -41.1789 3 174.041 -41.1749 2.99 174.05 -41.165 2.99 174.046 -41.1589 3 174.002 -41.1711 3 174.01 -41.1797 3 173.986 -41.1828 3 174.001 -41.1952 3 173.982 -41.1876 3 173.978 -41.1942 3 173.965 -41.1902 2.97 173.973 -41.1849 3 173.966 -41.1729 3 173.929 -41.1985 3 173.915 -41.201 3 173.889 -41.2017 3 173.873 -41.212 2.97 173.887 -41.192 2.94 173.88 -41.182 2.97 173.895 -41.172 3 173.875 -41.169 2.85 173.867 -41.156 2.96 173.884 -41.159 3 173.885 -41.1521 2.99 173.866 -41.146 2.9 173.872 -41.139 3 173.894 -41.139 3 173.915 -41.126 3 173.901 -41.125 2.96 173.908 -41.112 2.92 173.931 -41.113 3 173.934 -41.1023 2.95 173.927 -41.0972 3 173.933 -41.0846 2.95 173.944 -41.09 3 173.954 -41.0807 2.99 173.966 -41.0854 3 173.976 -41.0782 2.95 173.978 -41.0857 3 173.964 -41.0983 3 173.951 -41.1149 3 173.957 -41.1478 3 173.968 -41.151 3 173.963 -41.1374 2.96 173.975 -41.1295 2.99 173.993 -41.1364 3 173.985 -41.1231 2.93 173.994 -41.1059 3 173.986 -41.1001 2.95 174.013 -41.0954 2.99 174.037 -41.1138 3 174.047 -41.1063 2.99 174.032 -41.0946 2.96 174.023 -41.0717 3 174.015 -41.075 3 174.018 -41.0639 2.97 174.01 -41.0584 2.92 174.017 -41.0594 3 174.032 -41.062 3 174.048 -41.0549 2.96 174.054 -41.0282 2.98 174.049 -41.0215 3 174.035 -41.0269 3 174.038 -41.0196 3 174.021 -41.0174 3 174.009 -41.0172 3 173.998 -41.0401 3 173.978 -41.0569 2.86 173.991 -41.0367 2.98 173.984 -41.032 3 173.96 -41.0451 2.96 173.95 -41.0375 3 173.935 -41.0411 2.76 173.938 -41.0347 2.84 173.953 -41.0331 3 173.937 -41.0194 2.87 173.95 -41.0134 2.95 173.955 -41.0225 3 173.966 -41.0175 2.99 173.972 -41.0226 3 173.989 -41.0151 2.99 173.969 -41.0037 2.96 173.97 -40.9844 3 173.983 -40.9961 3 173.996 -40.9953 3 174.003 -40.9853 2.99 173.991 -40.9831 2.99 173.993 -40.9705 2.83 174.014 -40.965 2.98 174.023 -40.9763 3 174.013 -40.9887 3 174.009 -41.0104 3 174.017 -41.0087 2.99 174.022 -41.0157 3 174.033 -41.0097 3 174.048 -41.0134 3 174.051 -41.0033 3 174.056 -41.0071 3 174.067 -40.9969 2.98 174.071 -41.0068 3 174.066 -41.0142 3 174.082 -41.0193 3 174.104 -41.0521 3 174.109 -41.0518 3 174.103 -41.0248 2.96 174.096 -40.9999 2.98 174.1 -40.9935 2.98 174.124 -41.0069 3 174.131 -41.0187 3 174.142 -41.0192 3 174.147 -41.0109 2.99 174.143 -40.9974 2.92 174.152 -40.9996 3 174.162 -40.9828 2.96 174.149 -40.9803 2.89 174.148 -40.9736 2.96 174.164 -40.9692 2.97 174.171 -40.9882 3 174.173 -41.0084 3 174.183 -41.0109 3 174.195 -41.0018 2.95 174.207 -41.0038 3 174.231 -40.9854 3 174.216 -41.0086 3 174.195 -41.0104 3 174.198 -41.0417 3 174.19 -41.0427 2.99 174.184 -41.0289 3 174.166 -41.043 3 174.182 -41.0592 3 174.215 -41.0711 3 174.225 -41.0692 2.99 174.224 -41.0559 2.95 174.239 -41.0495 3 174.242 -41.0412 2.89 174.258 -41.0442 3 174.27 -41.029 2.94 174.288 -41.0345 3 174.312 -41.0004 -59.82 174.298 -41.0345 3 174.285 -41.0383 3 174.273 -41.0423 3 174.272 -41.0684 3 174.249 -41.0772 3 174.248 -41.0883 3 174.234 -41.0897 3 174.237 -41.1031 3 174.249 -41.1057 3 174.242 -41.1261 2.99 174.225 -41.1118 3 174.208 -41.1181 3 174.211 -41.1281 3 174.222 -41.1322 3 174.22 -41.1425 2.85 174.209 -41.1333 3 174.188 -41.1408 2.99 174.197 -41.1239 3 174.183 -41.1237 3 174.188 -41.0965 2.94 174.18 -41.0875 3 174.164 -41.1156 2.98 174.149 -41.1091 3 174.149 -41.128 3 174.167 -41.1364 3 174.16 -41.1506 3 174.182 -41.1586 3 174.2 -41.1548 2.94 174.199 -41.1732 3 174.203 -41.1833 3 174.191 -41.1841 3 174.186 -41.1951 3 174.17 -41.203 2.99 174.171 -41.1858 2.94 174.158 -41.1779 2.99 174.155 -41.1808 2.99 174.149 -41.1825 3 174.155 -41.1953 3 174.148 -41.2075 3 174.156 -41.2144 3 174.145 -41.2167 2.88 174.145 -41.2089 2.99 174.126 -41.205 2.88 174.125 -41.1931 3 174.112 -41.2061 2.99 174.119 -41.2217 3 174.102 -41.2212 2.86 174.106 -41.2124 2.94 174.094 -41.2033 3 174.085 -41.2148 3 174.086 -41.2254 3 174.077 -41.2305 2.74 174.077 -41.2237 3 174.065 -41.2248 2.89 174.074 -41.212 2.96 174.061 -41.2066 3 174.056 -41.2171 3 174.048 -41.2097 3 174.044 -41.2132 3 174.04 -41.2301 2.98 174.031 -41.2109 3 174.02 -41.2244 3 174.029 -41.2288 2.99 174.03 -41.24 3 174.018 -41.24 3 174.02 -41.23 3 174.014 -41.2339 3 174.008 -41.2405 2.92 174.008 -41.2247 2.99 173.991 -41.2206 3 173.995 -41.2443 2.98 173.986 -41.2436 3 173.982 -41.2514 3 173.982 -41.2374 2.96 173.975 -41.2348 2.99 173.979 -41.229 2.98 173.97 -41.224 3 173.969 -41.2316 2.87 173.965 -41.2244 3 173.96 -41.2273 3 173.971 -41.2533 3 173.939 -41.2542 3 173.917 -41.2651 3 173.944 -41.2691 3 173.964 -41.2668 3 174.008 -41.2598 2.99 173.994 -41.2791 3 174.009 -41.2728 2.94 174.004 -41.2848 3 174.01 -41.2857 3 174.039 -41.2689 3 174.065 -41.2527 2.94 174.075 -41.2694 3 174.086 -41.2695 3 174.074 -41.2547 3 174.082 -41.2473 3 174.106 -41.2413 2.98 174.111 -41.25 3 174.114 -41.2373 2.99 174.132 -41.2426 3 174.14 -41.2349 2.9 174.146 -41.2334 2.97 174.145 -41.24 3 174.15 -41.2499 3 174.157 -41.2535 3 174.157 -41.2661 3 174.176 -41.2528 2.99 174.179 -41.2668 3 174.202 -41.2787 3 174.213 -41.2722 3 174.21 -41.2675 2.99 174.185 -41.2592 2.99 174.186 -41.2515 2.98 174.196 -41.2463 2.98 174.207 -41.2469 3 174.21 -41.2571 3 174.22 -41.2544 2.99 174.219 -41.2467 2.95 174.226 -41.2531 3 174.23 -41.247 3 174.243 -41.2524 3 174.247 -41.2464 2.95 174.254 -41.2512 3 174.253 -41.2609 3 174.266 -41.2541 2.99 174.256 -41.2457 2.93 174.277 -41.245 3 174.271 -41.2366 2.97 174.303 -41.219 3 174.314 -41.2142 3 174.289 -41.2342 3 174.292 -41.2513 3 174.274 -41.2576 3 174.268 -41.2759 2.99 174.256 -41.2699 3 174.257 -41.2878 2.97 174.25 -41.2829 3 174.224 -41.2942 3 174.243 -41.3104 3 174.237 -41.3204 2.99 174.22 -41.3182 3 174.214 -41.3266 2.97 174.208 -41.3134 3 174.201 -41.3119 3 174.191 -41.3191 3 174.197 -41.3333 3 174.191 -41.3391 2.98 174.18 -41.335 3 174.166 -41.3384 3 174.153 -41.342 3 174.156 -41.3531 3 174.123 -41.3541 -6.14 174.146 -41.337 3 174.132 -41.3342 2.93 174.139 -41.3291 2.94 174.158 -41.3302 3 174.159 -41.3214 2.97 174.174 -41.3169 2.99 174.166 -41.3096 2.98 174.178 -41.3063 3 174.176 -41.2992 2.97 174.189 -41.2968 3 174.181 -41.2882 3 174.16 -41.2899 3 174.161 -41.3013 3 174.139 -41.3169 2.99 174.15 -41.2944 2.97 174.148 -41.2855 3 174.114 -41.301 3 174.113 -41.3064 3 174.122 -41.3085 3 174.109 -41.321 3 174.11 -41.331 3 174.098 -41.3361 3 174.104 -41.3419 3 174.093 -41.3462 3 174.088 -41.3608 3 174.071 -41.3588 3 174.076 -41.366 3 174.069 -41.3803 3 174.066 -41.3901 3 174.056 -41.3885 3 174.041 -41.4042 3 174.034 -41.4367 3 174.028 -41.4671 3 174.043 -41.4936 3 174.061 -41.4982 3 174.067 -41.5106 3 174.108 -41.5345 2.92 174.148 -41.5584 3 168.321 -46.589 3 168.328 -46.588 3 168.343 -46.5986 3 168.359 -46.61 3 168.341 -46.627 2.99 168.32 -46.621 3 168.31 -46.595 2.99 174.251 -41.1779 3 174.241 -41.1795 3 174.224 -41.1905 2.91 174.233 -41.1628 2.6 174.245 -41.1597 2.88 174.247 -41.1669 3 174.29 -41.1567 2.99 174.286 -41.1613 3 174.273 -41.1642 2.96 174.275 -41.157 2.9 174.284 -41.1583 3 174.302 -41.1059 2.98 174.292 -41.1153 3 174.28 -41.1173 2.89 174.28 -41.1143 2.94 174.227 -41.2046 3 174.235 -41.2149 3 174.255 -41.2043 2.96 174.265 -41.1976 2.97 174.25 -41.1928 2.86 174.258 -41.1836 2.93 174.284 -41.177 2.95 174.29 -41.1768 3 174.292 -41.1676 2.92 174.32 -41.1613 2.97 174.312 -41.1779 3 174.34 -41.1775 3 174.333 -41.1675 2.76 174.362 -41.1564 2.98 174.376 -41.1345 3 174.371 -41.1245 3 174.344 -41.1461 3 174.33 -41.1473 2.92 174.329 -41.1333 2.99 174.321 -41.1307 2.99 174.293 -41.1358 2.92 174.303 -41.1272 3 174.318 -41.1256 3 174.317 -41.1184 2.98 174.325 -41.129 2.99 174.336 -41.1288 3 174.36 -41.108 -16.22 174.38 -41.0896 3 174.391 -41.095 2.99 174.391 -41.1183 3 174.378 -41.1474 3 174.367 -41.1738 3 174.375 -41.1831 3 174.364 -41.2012 2.98 174.343 -41.193 3 174.324 -41.2121 2.99 174.311 -41.2024 3 174.296 -41.2108 2.96 174.282 -41.2097 3 174.279 -41.217 3 174.261 -41.2271 3 174.259 -41.2307 3 174.252 -41.2384 3 174.231 -41.2371 2.96 174.231 -41.2232 3 174.215 -41.2275 2.99 174.219 -41.2334 3 174.209 -41.2379 2.99 174.19 -41.2357 3 174.185 -41.2426 3 174.163 -41.2456 2.85 174.166 -41.2306 3 174.184 -41.2182 2.95 174.195 -41.2206 3 174.195 -41.2106 2.92 174.215 -41.2076 2.93 174.073 -40.9583 2.98 174.064 -40.9509 3 174.051 -40.9519 2.95 174.056 -40.9467 3 174.08 -40.9393 2.96 174.077 -40.9572 3 174.088 -40.9645 3 174.073 -40.9718 3 174.073 -40.9854 3 174.061 -40.9948 2.95 174.049 -40.9794 2.97 174.089 -40.8956 3 174.079 -40.9034 2.92 174.056 -40.9092 2.89 174.061 -40.8983 2.94 174.083 -40.8911 2.99 174.779 -41.0788 2.88 174.8 -41.077 -30.19 174.789 -41.0921 3 174.773 -41.0983 2.94 174.951 -40.827 3 174.913 -40.8697 3 174.885 -40.8891 2.98 174.868 -40.8863 2.86 174.869 -40.8747 2.73 174.906 -40.8477 2.97 174.921 -40.8208 2.89 168.526 -46.778 3 168.509 -46.8 2.98 168.506 -46.782 3 168.481 -46.781 2.99 168.472 -46.77 2.97 168.486 -46.773 3 168.494 -46.763 2.99 168.479 -46.754 2.98 168.493 -46.754 3 168.497 -46.761 3 168.509 -46.758 2.99 168.525 -46.741 2.98 168.53 -46.737 2.97 168.548 -46.754 3 168.538 -46.761 3 168.543 -46.772 3 168.129 -46.927 3 168.157 -46.938 3 168.128 -46.94 3 168.111 -46.928 2.98 167.768 -46.924 2.99 167.769 -46.905 2.98 167.763 -46.883 2.99 167.752 -46.877 2.96 167.759 -46.867 2.98 167.75 -46.855 3 167.725 -46.826 2.99 167.721 -46.806 3 167.702 -46.795 3 167.705 -46.787 2.98 167.719 -46.784 3 167.703 -46.754 2.99 167.719 -46.738 2.99 167.72 -46.712 2.99 167.733 -46.71 3 167.75 -46.699 3 167.786 -46.688 3 167.837 -46.704 3 167.86 -46.695 3 167.867 -46.684 2.99 167.891 -46.696 3 167.929 -46.702 3 167.958 -46.721 3 167.978 -46.723 3 167.985 -46.762 3 168.003 -46.775 3 167.997 -46.782 3 168.01 -46.796 3 168.02 -46.803 3 168.034 -46.801 2.99 168.041 -46.82 3 168.092 -46.835 2.99 168.097 -46.853 2.99 168.111 -46.864 3 168.124 -46.864 3 168.129 -46.857 2.97 168.142 -46.864 3 168.142 -46.874 3 168.128 -46.878 3 168.133 -46.884 3 168.151 -46.883 3 168.129 -46.8924 3 168.133 -46.902 3 168.165 -46.897 3 168.145 -46.905 3 168.142 -46.914 2.99 168.11 -46.905 3 168.073 -46.909 3 168.076 -46.901 3 168.064 -46.899 3 168.068 -46.909 3 168.045 -46.904 3 168.041 -46.912 3 168.063 -46.92 3 168.045 -46.922 2.98 168.012 -46.904 2.99 168.025 -46.906 3 168.032 -46.9 3 168.018 -46.895 2.99 168.017 -46.882 3 168.005 -46.871 3 167.992 -46.873 3 168.001 -46.8788 3 167.996 -46.889 3 168.003 -46.897 3 167.979 -46.892 3 167.98 -46.9 3 167.971 -46.904 3 167.965 -46.911 3 167.976 -46.918 3 167.976 -46.934 3 167.952 -46.939 3 167.928 -46.962 3 167.979 -46.944 3 167.989 -46.931 2.98 168.014 -46.927 2.99 168.027 -46.94 3 168.024 -46.953 3 168.039 -46.947 2.99 168.098 -46.962 3 168.131 -46.961 3 168.073 -46.987 3 168.126 -46.996 3 168.138 -46.991 3 168.144 -46.972 2.97 168.173 -46.973 3 168.17 -46.943 2.97 168.194 -46.924 2.99 168.191 -46.94 3 168.18 -46.9509 -0.65 168.185 -46.9763 -4.18 168.215 -46.996 3 168.202 -47.006 3 168.21 -47.017 3 168.228 -47.016 3 168.201 -47.03 3 168.216 -47.036 3 168.208 -47.037 3 168.203 -47.0638 2.37 168.174 -47.054 3 168.17 -47.069 3 168.183 -47.082 3 168.207 -47.083 3 168.216 -47.095 3 168.201 -47.098 2.98 168.187 -47.085 3 168.164 -47.082 3 168.137 -47.082 3 168.155 -47.099 3 168.149 -47.118 3 168.133 -47.117 3 168.121 -47.124 2.99 168.073 -47.105 3 168.059 -47.109 3 168.058 -47.122 2.98 168.039 -47.114 3 168.043 -47.129 3 168.019 -47.127 2.85 168.016 -47.12 3 167.991 -47.114 3 167.994 -47.127 3 167.98 -47.135 3 167.961 -47.14 2.94 167.95 -47.129 3 167.935 -47.137 3 167.927 -47.153 3 167.909 -47.154 3 167.903 -47.167 3 167.88 -47.176 2.99 167.865 -47.17 3 167.864 -47.183 2.97 167.848 -47.18 3 167.818 -47.194 3 167.794 -47.188 2.99 167.773 -47.185 2.99 167.76 -47.172 3 167.721 -47.182 2.97 167.711 -47.155 2.99 167.696 -47.151 3 167.691 -47.165 3 167.677 -47.169 3 167.675 -47.191 3 167.664 -47.2 3 167.645 -47.203 3 167.635 -47.206 3 167.629 -47.212 3 167.598 -47.211 3 167.605 -47.225 3 167.583 -47.226 3 167.574 -47.2317 3 167.555 -47.229 3 167.563 -47.244 3 167.597 -47.234 3 167.618 -47.244 3 167.631 -47.229 3 167.633 -47.223 3 167.654 -47.224 3 167.655 -47.234 3 167.655 -47.247 3 167.642 -47.2607 3 167.612 -47.269 2.94 167.607 -47.255 3 167.593 -47.245 3 167.575 -47.256 3 167.584 -47.264 3 167.563 -47.273 3 167.57 -47.279 3 167.544 -47.282 3 167.539 -47.29 3 167.493 -47.284 2.98 167.487 -47.27 3 167.478 -47.281 3 167.454 -47.279 2.98 167.448 -47.263 2.99 167.459 -47.255 2.99 167.464 -47.217 2.97 167.491 -47.199 2.98 167.518 -47.204 3 167.522 -47.188 2.97 167.571 -47.171 3 167.571 -47.147 3 167.563 -47.157 3 167.552 -47.154 2.99 167.578 -47.136 3 167.571 -47.13 2.98 167.583 -47.115 2.99 167.567 -47.109 2.99 167.556 -47.09 2.97 167.594 -47.069 3 167.608 -47.049 2.99 167.647 -47.035 3 167.69 -47.049 3 167.711 -47.046 3 167.703 -47.032 3 167.692 -47.032 2.99 167.692 -47.021 3 167.685 -47.017 2.92 167.699 -47.003 3 167.68 -46.994 3 167.672 -46.975 2.98 167.662 -46.952 2.98 167.666 -46.948 3 167.695 -46.965 3 167.72 -46.961 3 167.746 -46.947 2.99 166.622 -46.1362 1.43 166.607 -46.139 2.98 166.605 -46.117 2.99 166.628 -46.095 2.97 166.656 -46.107 3 167.637 -46.794 3 167.606 -46.787 2.98 167.613 -46.779 2.98 167.596 -46.764 2.98 167.607 -46.747 2.88 167.622 -46.754 3 167.639 -46.751 3 167.64 -46.761 3 167.66 -46.765 3 167.659 -46.781 3 167.379 -47.255 2.93 167.397 -47.23 2.98 167.419 -47.224 3 167.439 -47.23 3 167.396 -47.261 2.99 167.723 -47.191 3 167.705 -47.209 3 167.696 -47.207 2.95 167.701 -47.199 2.99 167.688 -47.187 3 167.699 -47.179 3 183.243 -43.827 2.98 183.205 -43.816 3 183.21 -43.834 3 183.18 -43.84 3 183.152 -43.841 2.99 183.117 -43.836 2.97 183.112 -43.825 2.88 183.107 -43.817 2.98 183.124 -43.814 3 183.121 -43.794 2.93 183.132 -43.783 2.99 183.186 -43.78 3 183.19 -43.762 2.99 183.174 -43.75 3 183.189 -43.737 3 183.223 -43.757 3 183.25 -43.759 3 183.349 -43.736 3 183.364 -43.711 2.98 183.357 -43.696 3 183.371 -43.693 3 183.371 -43.683 2.99 183.391 -43.696 3 183.418 -43.696 3 183.465 -43.714 3 183.506 -43.712 3 183.501 -43.719 3 183.511 -43.731 3 183.548 -43.738 3 183.633 -43.737 3 183.651 -43.725 3 183.659 -43.73 3 183.678 -43.739 3 183.704 -43.739 3 183.727 -43.73 2.99 183.727 -43.721 2.97 183.753 -43.717 2.99 183.771 -43.727 3 183.796 -43.721 2.99 183.802 -43.727 3 183.766 -43.741 3 183.757 -43.753 3 183.76 -43.767 2.99 183.743 -43.755 3 183.726 -43.755 3 183.664 -43.778 3 183.611 -43.842 3 183.589 -43.889 3 183.58 -43.928 3 183.596 -43.994 3 183.624 -44.023 3 183.674 -44.032 3 183.674 -44.048 3 183.545 -44.066 3 183.519 -44.075 3 183.508 -44.088 3 183.473 -44.098 3 183.461 -44.113 3 183.422 -44.13 3 183.367 -44.111 2.99 183.353 -44.105 2.96 183.351 -44.075 3 183.342 -44.041 3 183.33 -44.036 2.99 183.314 -44.01 2.96 183.414 -43.964 3 183.427 -43.94 2.98 183.443 -43.952 3 183.467 -43.93 2.99 183.466 -43.907 2.99 183.456 -43.899 2.99 183.457 -43.883 2.99 183.431 -43.846 3 183.387 -43.804 3 183.358 -43.804 3 183.346 -43.803 3 183.323 -43.801 3 183.309 -43.81 3 183.297 -43.817 3 183.288 -43.822 3 183.832 -44.261 3 183.845 -44.261 3 183.843 -44.273 3 183.812 -44.288 3 183.802 -44.3 3 183.796 -44.326 3 183.773 -44.334 3 183.76 -44.351 2.99 183.746 -44.345 2.95 183.754 -44.328 3 183.733 -44.325 2.97 183.747 -44.311 2.99 183.739 -44.3 2.95 183.746 -44.289 2.97 183.732 -44.284 2.97 183.758 -44.273 3 183.761 -44.265 3 183.725 -44.238 2.93 183.741 -44.244 3 183.763 -44.239 2.99 183.777 -44.224 2.99 183.787 -44.223 3 183.807 -44.234 3 166.983 -45.249 2.93 167.002 -45.294 3 166.974 -45.301 2.92 166.951 -45.294 2.89 166.946 -45.285 2.83 166.906 -45.2598 2.99 166.872 -45.239 2.67 166.888 -45.2179 2.62 166.907 -45.189 2.53 166.933 -45.1655 -16.64 166.959 -45.144 2.61 166.95 -45.204 3 166.971 -45.241 3 166.714 -45.66 -67 166.719 -45.669 -67 166.715 -45.685 -72 166.724 -45.7023 -108.92 166.718 -45.719 -72.08 166.695 -45.741 -97 166.675 -45.748 -97.01 166.663 -45.747 -96.99 166.648 -45.714 3 166.647 -45.736 -97 166.626 -45.747 -47 166.599 -45.753 2.84 166.593 -45.744 2.99 166.582 -45.743 2.92 166.583 -45.731 2.94 166.593 -45.728 3 166.59 -45.72 2.96 166.563 -45.714 2.93 166.576 -45.71 3 166.572 -45.702 2.97 166.545 -45.696 2.98 166.557 -45.683 2.99 166.554 -45.672 2.99 166.551 -45.665 3 166.528 -45.688 3 166.506 -45.7033 1.23 166.481 -45.719 3 166.455 -45.741 3 166.445 -45.741 3 166.452 -45.718 3 166.522 -45.656 2.99 166.522 -45.643 2.77 166.535 -45.637 2.86 166.54 -45.623 3 166.567 -45.62 2.91 166.581 -45.61 2.85 166.596 -45.613 3 166.605 -45.601 2.89 166.625 -45.608 3 166.671 -45.605 3 166.678 -45.598 -46.94 166.707 -45.612 2.96 166.717 -45.631 2.91 166.524 -45.753 3 166.538 -45.744 3 166.567 -45.751 2.97 166.549 -45.7553 3 166.528 -45.763 3 166.505 -45.77 3 166.484 -45.768 3 166.492 -45.749 3 166.637 -45.771 -71.99 166.651 -45.76 -72.02 166.687 -45.758 -97 166.709 -45.745 -72.23 166.764 -45.745 2.97 166.74 -45.76 -77 166.716 -45.762 -72 166.702 -45.7655 -97 166.669 -45.7726 -72 166.626 -45.782 -77.06 166.611 -45.774 -47.08 166.807 -45.742 3 166.79 -45.732 2.92 166.829 -45.719 2.91 166.874 -45.724 3 166.873 -45.73 2.99 166.88 -45.7337 2.99 166.867 -45.7379 -25.96 166.846 -45.7427 -21.28 166.814 -45.75 2.94 166.792 -45.746 2.89 173.903 -40.852 3 173.912 -40.862 3 173.906 -40.875 3 173.9 -40.858 3 173.883 -40.862 3 173.872 -40.873 3 173.875 -40.879 2.99 173.852 -40.901 3 173.837 -40.905 3 173.832 -40.921 3 173.819 -40.928 -2.42 173.803 -40.929 3 173.787 -40.943 3 173.771 -40.943 2.73 173.777 -40.938 2.98 173.773 -40.93 2.96 173.788 -40.917 3 173.786 -40.91 2.97 173.794 -40.91 3 173.788 -40.896 3 173.797 -40.891 3 173.783 -40.882 3 173.771 -40.891 2.89 173.777 -40.876 2.98 173.771 -40.86 2.83 173.781 -40.835 3 173.787 -40.834 2.99 173.791 -40.858 3 173.817 -40.857 3 173.83 -40.87 3 173.843 -40.865 3 173.834 -40.858 3 173.828 -40.858 3 173.809 -40.849 3 173.814 -40.834 2.99 173.805 -40.83 2.98 173.809 -40.819 3 173.804 -40.812 3 173.795 -40.816 2.9 173.833 -40.772 2.97 173.83 -40.755 2.93 173.838 -40.769 3 173.841 -40.75 2.97 173.854 -40.747 3 173.865 -40.731 3 173.881 -40.737 2.99 173.86 -40.769 3 173.861 -40.775 3 173.872 -40.776 3 173.866 -40.808 3 173.887 -40.789 2.95 173.887 -40.78 2.99 173.903 -40.803 3 173.909 -40.782 2.92 173.932 -40.7688 3 173.884 -40.7693 -9.04 173.939 -40.7454 2.98 173.943 -40.7334 2.97 173.937 -40.7257 2.97 173.956 -40.721 2.99 173.96 -40.7094 2.98 173.952 -40.6926 2.93 173.968 -40.7058 3 173.956 -40.7426 3 173.962 -40.7562 3 173.94 -40.7842 3 173.946 -40.794 3 173.936 -40.8057 3 173.94 -40.8131 3 173.929 -40.8177 3 173.939 -40.8235 3 173.917 -40.8373 3 168.414 -46.6572 2.97 168.398 -46.6482 2.99 168.407 -46.6393 2.99 168.42 -46.6452 3 176.119 -37.636 1 176.106 -37.6212 3 176.117 -37.6208 2.75 174.202 -35.2166 -17.7 174.207 -35.2193 -16.2 174.207 -35.2234 -13.88 174.199 -35.2196 -16.01 174.197 -35.2156 -18.31 174.184 -35.22 -16.1 174.193 -35.2181 -16.99 174.196 -35.2248 -13.18 174.202 -35.2275 -11.6 174.196 -35.2296 -10.53 174.195 -35.2342 -7.99 174.185 -35.2278 -11.72 174.179 -35.2193 -17.15 174.156 -35.2305 -14.13 174.162 -35.233 -10.82 174.168 -35.2323 -9.88 174.176 -35.2338 -8.6 174.176 -35.2382 -6.13 174.169 -35.2343 -8.46 174.166 -35.2378 -6.56 174.157 -35.2364 -9.39 174.219 -35.2298 -9.42 174.225 -35.2256 -11.21 174.229 -35.2187 -15.2 174.224 -35.2174 -16.26 174.228 -35.2143 -17.95 174.222 -35.2142 -18.51 174.215 -35.2149 -18.66 174.219 -35.2125 -19.89 174.224 -35.2101 -20.71 174.229 -35.2085 -22.17 174.233 -35.2046 -30.71 174.235 -35.2141 -21.11 174.239 -35.2145 -24.33 174.244 -35.2225 -16.46 174.236 -35.2206 -14.19 174.236 -35.2303 -7.67 174.23 -35.2275 -9.76 174.231 -35.2225 -12.72 174.227 -35.2251 -11.32 174.225 -35.228 -9.81 174.226 -35.2324 -7.02 174.204 -35.1977 -29.21 174.215 -35.1985 -28.48 174.216 -35.2046 -24.44 174.222 -35.2058 -23.53 174.22 -35.2089 -21.88 174.216 -35.2087 -22.1 174.21 -35.2082 -22.41 174.213 -35.2017 -26.02 174.205 -35.2046 -24.44 174.107 -35.2131 3 174.096 -35.2155 -7 174.082 -35.215 -5 174.075 -35.211 0 174.078 -35.2075 -2 174.085 -35.2097 -2 174.099 -35.2075 -2 173.98 -41.1064 2.98 173.894 -40.879 2.72 168.346 -46.5859 -0.77 170.549 -36.3871 -2134.16 170.582 -36.6501 -2078.51 170.832 -36.18 -2128.94 170.557 -36.9104 -1986.06 170.655 -35.9098 -1976.63 170.865 -36.4872 -2134.63 170.496 -37.172 -1944.65 171.172 -36.596 -1969.76 171.178 -36.1074 -1841 171.215 -36.7896 -2067.48 170.912 -36.78 -2027.23 171.126 -36.971 -1933.71 170.635 -35.079 -1939.61 170.822 -37.0695 -1893.82 170.993 -35.9101 -1997.92 171.129 -35.2812 -1875.81 171.102 -37.2397 -1855.21 170.756 -37.3286 -1861.42 171.464 -36.0946 -1730.47 170.49 -35.2773 -1809.77 171.398 -36.4561 -1883.9 171.468 -37.2501 -1832.52 171.216 -35.4994 -1914.04 170.976 -37.4741 -1808.22 171.16 -35.068 -1768.2 171.468 -36.6974 -2075.89 170.65 -35.4786 -1791.61 170.712 -37.6174 -1823.17 170.504 -35.686 -1424.94 171.121 -35.688 -1624.27 171.76 -37.0977 -1837.32 171.061 -37.6992 -1775.14 171.776 -37.6608 -1744.34 171.597 -36.3003 -1575.08 171.298 -35.8917 -1681.82 171.404 -35.1263 -1617.15 170.816 -37.8492 -1599.3 171.408 -35.3881 -1636.28 171.726 -37.8303 -1702.95 171.678 -36.5179 -1581.67 172.021 -37.5877 -1550.38 171.049 -37.9849 -1513.12 171.531 -37.9654 -1708.86 172.294 -36.7055 -1732.67 171.433 -35.6472 -1665.45 172.287 -37.4763 -1269.43 172.513 -36.6802 -1672.01 172.489 -36.8792 -1738.71 172.021 -35.9911 -1549.99 172.658 -37.1018 -1692.72 172.401 -36.5218 -1630.53 171.985 -37.8093 -1699.98 171.763 -35.6863 -1489.03 171.435 -38.2019 -1532.09 172.7 -36.7487 -1685.47 172.684 -36.5382 -1598.83 171.812 -37.9882 -1612.43 172.246 -36.3104 -1598.36 172.912 -37.1963 -1595.64 172.009 -35.7917 -1343.17 172.013 -35.3927 -1486.53 172.251 -36.088 -1531.33 172.914 -36.6535 -1508.56 173.162 -37.2501 -1532.35 172.238 -37.7001 -1728.33 172.004 -35.5969 -1367.86 172.586 -37.4876 -1568.21 172.333 -38.2033 -1429.4 172.704 -37.6384 -1552.27 171.209 -38.3469 -1140.8 171.471 -38.4705 -1137.78 172.483 -37.6531 -1693.58 172.937 -37.7274 -1482.34 172.572 -38.2805 -1320.26 170.552 -37.8724 -1312.47 173.251 -37.737 -1389.68 173.116 -37.9067 -1375.82 172.24 -35.8817 -1388.77 173.464 -37.0215 -1361.84 173.374 -36.6998 -1286.5 172.921 -38.2496 -1271.63 173.528 -37.4753 -1292.68 171.924 -38.6181 -1048.41 173.635 -37.1716 -1198.55 170.971 -38.4572 -931.44 172.935 -36.1867 -1215.89 173.515 -37.6778 -1282.99 172.739 -38.3146 -1029.66 170.73 -38.0827 -1150.54 171.655 -38.6723 -1107.8 173.13 -36.2478 -1305.67 173.718 -37.3687 -1136.55 171.844 -38.7691 -965.75 173.718 -37.5623 -1089.06 172.651 -38.4417 -1075.01 171.397 -38.6912 -939.89 172.491 -38.5757 -974.55 173.328 -36.316 -1218.73 172.43 -35.7654 -1126.85 173.287 -38.0786 -1218.38 173.121 -38.3257 -1096.89 170.754 -38.3241 -925.26 171.536 -38.827 -961.42 171.89 -38.9333 -797.37 172.257 -35.0198 -643.74 171.35 -38.8459 -896.36 170.874 -38.6126 -833.13 171.159 -38.7672 -871.47 173.27 -38.2631 -936.69 172.531 -35.6231 -802.2 173.895 -37.6452 -953.65 173.266 -38.4092 -746.91 172.454 -38.7575 -749.59 170.566 -38.2515 -874.97 170.732 -38.5206 -823.05 171.219 -38.9641 -867.07 172.254 -39.0774 -868.66 172.836 -38.4036 -693.3 171.441 -38.9757 -900.26 173.123 -36.1059 -1040.01 170.921 -38.7536 -822.1 170.547 -38.4241 -815.76 172.03 -39.1138 -683.74 170.964 -38.9429 -828.35 173.552 -36.5691 -916.81 171.319 -39.1259 -855.24 171.798 -39.1079 -810.69 172.431 -35.3164 -744.91 173.281 -36.1591 -1060.68 170.783 -38.8598 -783.13 171.072 -39.1432 -847.12 171.556 -39.141 -821.12 170.71 -38.7114 -774.44 171.402 -39.2697 -821.29 173.62 -36.4323 -704.8 170.733 -39.0049 -764.61 172.695 -38.599 -405.57 173.718 -36.6333 -610.61 170.529 -38.6005 -740.95 174.053 -37.1594 -300.97 170.588 -38.8863 -723.35 171.221 -39.2615 -846.28 171.561 -39.2969 -677.26 171.475 -39.4093 -727.4 170.512 -38.7529 -707.62 172.418 -39.1046 -425.86 170.56 -39.0315 -711.98 170.551 -39.7481 -821.43 170.556 -39.3557 -758.28 170.632 -39.8563 -796.75 170.856 -39.9088 -771.6 170.585 -39.6121 -856.26 170.634 -39.1874 -736.3 171.057 -39.8514 -760.57 171.386 -39.5413 -745.34 171.188 -39.5506 -799.14 170.62 -39.4716 -812.71 171.017 -39.582 -824.95 170.812 -39.5535 -835.84 170.752 -39.3658 -820.29 171.028 -39.3875 -845.49 171.282 -39.3992 -827.39 171.319 -39.6914 -750.31 171.125 -39.7136 -783.7 170.935 -39.7257 -816.48 170.73 -39.7353 -832.11 171.265 -39.8704 -711.49 174.087 -37.0827 -167.25 172.885 -35.8352 -699.3 171.46 -39.8081 -655.29 174.045 -37.2518 -229.99 172.421 -35.4776 -769.68 171.719 -39.2619 -531.68 171.665 -39.4159 -450.37 172.994 -38.4023 -841.04 171.497 -39.6644 -675.23 173.261 -36.0307 -607.08 171.559 -39.5359 -598.45 172.339 -39.1828 -584.84 174.038 -37.8745 -245.95 172.495 -39.0397 -179.48 172.626 -35.521 -562.51 173.126 -38.4394 -534.23 171.448 -39.9367 -633.62 171.623 -39.761 -545.96 173.961 -38.042 -237.48 171.904 -39.2429 -456.56 172.052 -39.2571 -335.67 172.199 -39.2285 -466.36 171.654 -39.6405 -446.16 173.257 -35.9161 -373.82 172.517 -38.8683 -242.32 172.623 -38.7065 -298.5 172.587 -35.398 -563.12 171.624 -39.9102 -573.95 173.697 -38.1323 -526.01 171.765 -39.8184 -393.01 171.833 -39.3697 -297.51 171.742 -39.7176 -365.39 171.816 -39.9356 -410.1 174.046 -37.3787 -462.79 172.824 -35.7156 -504.67 172.581 -35.2758 -326.74 171.975 -39.9498 -308.79 171.805 -39.6219 -273 172.754 -35.5404 -459.72 171.922 -39.8409 -259.04 172.75 -35.4428 -384.93 171.811 -39.4956 -289.93 172.477 -39.2139 -217.41 172.839 -35.6005 -427.22 171.867 -39.735 -265.77 174.108 -37.7381 -191.96 172.598 -35.1734 -233.14 172.975 -35.7506 -575.73 172.387 -34.995 -302.13 171.987 -39.3511 -263.14 172.102 -39.9658 -280.85 171.698 -39.5421 -368.97 172.811 -38.5237 -352.07 172.707 -35.3305 -284.75 172.348 -39.2856 -383.1 171.938 -39.6542 -250.85 172.083 -39.8584 -259.27 173.386 -35.9631 -242.51 172.027 -39.7361 -257.65 172.127 -39.3407 -258.37 172.829 -35.3569 -252.29 174.071 -37.9638 -144.5 173.691 -36.3215 -322.07 172.946 -35.6527 -304.95 174.136 -37.1439 -149.15 174.246 -37.3166 -143.98 171.929 -39.5605 -250.36 172.203 -39.9162 -271.19 171.941 -39.4559 -250.07 173.362 -35.8693 -209.21 172.062 -39.6112 -268.5 172.151 -39.7738 -266.16 172.207 -39.834 -266.82 173.704 -38.2572 -177.4 172.551 -39.1118 -194.84 172.247 -39.3383 -317.45 174.052 -37.0053 -173.02 172.07 -39.4357 -239.99 172.166 -39.6928 -277.56 172.291 -39.9549 -259.43 173.552 -36.0094 -183.18 172.027 -39.5172 -251.36 172.215 -39.6036 -266.28 172.148 -39.5179 -250.05 172.498 -39.4239 -190.17 172.32 -39.869 -252.43 172.207 -39.4258 -248.79 172.274 -39.7625 -263.2 172.381 -39.7014 -243.75 172.442 -39.554 -224.53 172.478 -39.3321 -182.45 172.416 -39.7903 -241.66 172.277 -39.675 -267.17 172.358 -39.3995 -267.07 172.348 -39.6146 -247.65 172.476 -39.6411 -213.27 172.306 -39.5137 -243.75 172.507 -38.956 -126.04 172.392 -39.9519 -226.01 172.428 -39.479 -240.11 172.458 -39.8782 -221.07 172.921 -38.488 -195.7 172.761 -38.7035 -143.84 172.613 -38.8172 -173.18 172.834 -38.6284 -95.56 172.928 -38.5745 -165.6 173.416 -38.431 -233.01 172.715 -38.7799 -146.62 173.623 -36.055 -134.08 172.619 -39.1903 -157.46 172.621 -38.9169 -164.32 172.618 -39.0193 -149.52 172.591 -39.2818 -168.13 172.867 -38.7078 -143.19 172.695 -35.2351 -205.61 172.532 -39.5013 -191.44 172.593 -39.3707 -174.67 173.045 -38.5259 -170.85 172.596 -39.4444 -176.84 174.146 -37.2996 -168.96 173.349 -38.5308 -170.76 172.942 -38.6622 -144.44 172.84 -38.7891 -143.75 173.376 -38.3359 -197 172.679 -39.109 -147.95 172.745 -38.8701 -143.55 172.918 -35.3677 -196.42 173.018 -38.6153 -148.01 172.715 -38.9591 -149.4 173.498 -35.9546 -174.97 172.51 -39.7278 -214.89 172.543 -39.8145 -201.47 172.567 -39.5807 -187.98 172.957 -38.7451 -141.89 172.571 -39.8989 -173.59 172.718 -39.1773 -144.52 173.509 -38.3455 -170.35 172.658 -39.5102 -167.44 172.691 -39.3274 -154.03 172.504 -39.9609 -186.68 172.871 -38.8724 -142.88 173.531 -38.4515 -148.04 173.303 -35.6587 -103.37 172.755 -39.0355 -146.37 172.697 -39.2481 -149.94 173.05 -38.692 -144.17 172.963 -38.8302 -140.64 173.382 -38.6347 -142.13 172.838 -38.9539 -141.59 172.703 -39.4144 -155.06 172.806 -39.1268 -143.14 172.683 -39.6009 -166.07 173.72 -38.3572 -140.52 173.125 -38.6184 -148.24 173.195 -38.5251 -158.35 172.598 -39.9665 -149.5 172.796 -39.219 -139.42 173.069 -38.7814 -139.63 172.77 -39.286 -142.98 172.797 -35.2745 -185.78 172.873 -39.045 -137.8 173.917 -36.4612 -72.55 172.761 -39.4761 -147.93 172.956 -38.9117 -139.55 172.602 -39.6649 -189.11 173.806 -38.2066 -174.93 172.643 -39.7546 -175.22 174.06 -38.0404 -135.36 173.468 -35.8871 -172.89 172.767 -39.5451 -148.97 174.167 -37.4739 -283.29 172.654 -39.8446 -152.91 172.795 -39.351 -142.45 172.912 -39.1114 -138.85 173.073 -38.8781 -137.49 172.956 -38.9877 -137.56 173.943 -36.6391 -176.8 173.803 -38.2958 -137.57 173.546 -38.5344 -143.49 172.791 -39.6208 -148.95 172.91 -39.1906 -135.94 172.877 -39.2853 -134.67 173.183 -38.7189 -140.83 173.402 -38.7014 -137.34 173.623 -38.3196 -168.29 172.825 -39.4241 -141.8 173.62 -38.4029 -143.25 172.503 -35.0162 -188.84 172.716 -39.6817 -162.28 172.672 -39.9261 -131.48 172.978 -39.0623 -135.62 173.18 -38.8232 -136.34 172.849 -39.4944 -141.51 173.462 -38.5068 -152.13 173.033 -38.9476 -136.15 173.258 -38.6232 -146.8 173.049 -35.4196 -156.11 174.117 -37.8212 -149.08 172.997 -39.1333 -132.52 172.865 -39.5669 -142.24 172.624 -35.0738 -163.45 172.703 -35.1483 -162.49 172.97 -39.255 -130.29 172.879 -39.6314 -141.9 173.957 -38.1343 -156.39 173.024 -39.2041 -127.86 172.904 -39.3698 -134.5 173.63 -38.4883 -138.25 173.465 -38.755 -133.41 172.834 -39.6988 -140.91 173.284 -38.7832 -135.08 173.313 -38.704 -140.46 173.181 -38.8996 -134.43 173.464 -38.5795 -144.94 172.909 -35.297 -153.7 173.052 -39.0099 -134.38 172.729 -39.8018 -132.7 173.122 -38.9545 -133.84 172.751 -39.7457 -135.66 172.984 -39.3204 -128.61 173.283 -38.8776 -134.25 172.929 -39.4438 -134.51 173.073 -39.0793 -132.42 172.949 -39.5155 -134.98 174.033 -36.924 -144.74 173.897 -38.1848 -158.16 173.095 -39.1484 -128.38 172.97 -39.5958 -134.13 173.78 -38.4119 -132.2 174.034 -38.0977 -131.05 172.769 -39.8722 -116.85 173.149 -39.0278 -131.14 172.768 -39.956 -113.9 173.811 -38.3674 -131.03 174.276 -37.4918 -149.68 172.784 -35.1971 -138.98 172.945 -39.6738 -136.44 174.124 -37.8896 -113.11 173.645 -38.5739 -133.17 174.216 -37.6275 -118.99 172.833 -39.7917 -126.92 173.057 -39.2708 -125.99 173.494 -38.8322 -131.4 173.237 -38.9705 -129.14 173.123 -39.2175 -123.21 173.711 -38.4417 -136.55 174.163 -37.0846 -101.18 173.009 -39.3931 -127.92 173.166 -39.0979 -128.93 172.932 -39.7452 -132.49 173.891 -38.2531 -131.67 173.032 -39.4654 -127.77 173.368 -38.7535 -136.5 173.037 -39.6549 -128.9 173.549 -38.5992 -138 173.489 -38.6629 -135.56 173.344 -38.9522 -131.75 173.051 -39.5375 -127.29 173.377 -38.8952 -130.96 173.084 -39.3411 -125.05 174.029 -36.8287 -136.05 174.214 -37.7058 -114.91 173.386 -38.8247 -132.13 173.24 -39.0563 -129.17 173.069 -39.5991 -126.85 173 -35.3472 -141.82 172.871 -39.8614 -119.88 173.017 -39.7166 -130.42 173.187 -39.1625 -127.03 173.519 -38.8969 -130.71 174.22 -37.2398 -105.03 173.155 -39.2866 -126.07 173.327 -39.0266 -129.89 172.844 -39.983 -112.92 173.221 -39.2287 -123.56 173.553 -38.7881 -131.84 173.242 -39.1168 -126.21 173.729 -38.5165 -129.95 173.188 -39.3579 -122.55 173.112 -39.4141 -123.47 173.568 -38.7243 -133.22 172.735 -35.0757 -131.32 173.863 -38.4237 -117.81 172.793 -35.1278 -115.15 173.008 -39.7715 -127.41 172.853 -39.9235 -114.29 174.136 -37.0207 -107.35 173.134 -39.4888 -124.57 173.602 -38.6524 -132.02 173.577 -35.9544 -83.58 172.954 -39.8229 -123.45 173.32 -39.098 -125.66 173.155 -39.5677 -122.81 173.896 -38.3419 -125.8 173.401 -39.0015 -130.05 173.441 -38.9421 -131.08 173.088 -39.699 -125.32 173.136 -39.6486 -122.19 173.291 -39.1714 -122.92 173.699 -38.6458 -124.77 173.937 -36.5577 -99.71 173.267 -39.2977 -121 174.201 -37.1358 -95.77 174.191 -37.779 -126.56 173.303 -39.2364 -120.91 173.758 -38.589 -120.86 173.524 -38.9561 -130.62 173.045 -39.8129 -126.1 172.697 -35.0147 -126.17 174.05 -36.7495 -94.15 173.417 -39.0703 -127.71 173.09 -39.7617 -122.74 173.66 -38.7084 -127.53 173.287 -39.3732 -119.93 173.443 -38.8781 -131.98 173.225 -39.4348 -121 174.027 -38.1567 -120.62 172.943 -39.9015 -116.33 172.92 -39.9689 -112.91 173.796 -38.4694 -125.82 173.231 -39.5134 -119.75 173.359 -39.2718 -117.64 173.392 -39.1466 -125.36 173.214 -39.6209 -116.85 173.978 -38.2096 -126.37 173.609 -38.9318 -128.79 173.543 -35.9065 -112.14 173.042 -39.8779 -121.15 173.571 -39.0034 -129.16 173.824 -36.3402 -123 173.973 -38.2884 -118.45 174.303 -37.4382 -93.94 173.316 -39.4273 -116.92 173.257 -39.576 -115.52 173.645 -38.7807 -129.07 173.596 -38.851 -130.63 173.792 -38.653 -113.93 173.378 -39.2126 -118.81 173.163 -39.7192 -117.1 173.479 -39.0084 -128.86 173.357 -39.331 -117.22 173.867 -38.485 -113.56 172.869 -35.2266 -120.87 173.009 -39.9502 -113.43 173.742 -38.7031 -117.79 173.117 -39.8292 -115.51 173.47 -39.1286 -124.04 173.31 -39.4816 -115.44 173.833 -38.5368 -116.15 173.71 -38.7475 -120.6 173.225 -39.679 -113.95 173.439 -39.2585 -121.5 173.244 -39.7432 -110.13 173.306 -39.535 -113.9 173.181 -39.7848 -111.81 173.531 -39.0753 -127.08 173.9 -36.4171 -75.5 174.261 -37.7581 -95.14 173.416 -39.3051 -120.27 173.374 -39.3923 -116.8 173.761 -36.1377 -96.69 173.298 -39.6375 -109.37 173.474 -39.1964 -123.8 173.341 -39.5813 -109.71 173.827 -38.7171 -107.17 173.138 -39.8916 -111.71 173.67 -38.8871 -126.78 174.229 -37.0887 -83.97 173.683 -38.8393 -125.77 173.084 -35.3581 -91.78 173.198 -39.8478 -108.62 174.116 -36.9513 -110.82 173.768 -38.7484 -114.75 173.625 -39.0544 -125.89 173.788 -36.2555 -133.29 173.308 -39.7053 -106.95 173.121 -35.4554 -112.65 173.003 -35.2719 -85.36 172.816 -35.0692 -96.95 173.086 -39.9359 -112.93 173.547 -39.1512 -122.48 173.432 -39.3541 -118.34 173.261 -39.807 -105.84 173.384 -39.4544 -115.09 173.852 -38.605 -109.45 173.377 -39.6268 -107.04 173.955 -38.4089 -104.06 173.662 -38.9952 -125.4 173.454 -39.4166 -113.47 173.994 -38.3537 -102.71 173.51 -39.257 -118.05 174.126 -38.0218 -96.92 173.213 -35.5199 -85.12 173.378 -39.6771 -105.99 173.743 -38.7995 -121.4 173.49 -39.3143 -116.57 173.155 -39.9543 -109.16 173.386 -39.5247 -110.38 173.822 -38.7761 -111.43 173.215 -39.9078 -105.87 173.671 -39.0911 -118.86 173.906 -38.5169 -104.95 173.323 -39.7678 -105.3 173.494 -39.3719 -114.14 173.457 -39.4825 -109.04 173.575 -39.2258 -112.87 174.24 -37.18 -92.45 174.001 -36.6996 -101.88 172.859 -35.1649 -97 173.42 -39.5901 -107.4 173.613 -39.1129 -121.75 172.775 -35.0207 -104.31 173.711 -38.9365 -123.9 173.932 -38.4713 -103.15 173.682 -39.1346 -113.34 173.275 -39.8674 -103.83 173.528 -39.4125 -109.11 173.385 -39.7365 -104.18 173.754 -38.8732 -119.74 173.751 -38.9941 -121.46 174.299 -37.5489 -95.98 174.242 -37.8042 -94.81 174.035 -38.2561 -105.63 173.63 -39.1733 -113.31 173.712 -39.0521 -119.08 174.289 -37.6011 -97.88 174.109 -38.0804 -99.42 172.939 -35.2376 -102.86 173.23 -39.965 -102.96 173.876 -38.6648 -102.58 173.687 -36.105 -114.49 174.287 -37.6623 -97.75 173.53 -35.8717 -104.03 173.507 -39.4522 -108.5 173.481 -39.5474 -107.64 173.288 -39.9248 -100.02 173.877 -38.7558 -101.56 173.568 -39.2959 -111.67 173.823 -38.8306 -115.27 173.387 -39.7872 -99.99 173.449 -39.6494 -107 173.812 -36.1873 -89.19 174.073 -38.2032 -101.46 173.562 -39.3632 -108.72 173.345 -39.831 -102.54 173.915 -38.5669 -100.53 174.146 -37.9331 -94.56 173.702 -39.1859 -81.53 173.483 -39.6048 -107.19 174.194 -37.847 -96.16 173.134 -35.4004 -81.32 173.584 -39.4153 -103.13 173.451 -39.712 -101.27 173.661 -39.2295 -87.73 173.834 -38.8798 -112.66 174.052 -38.3119 -96.36 173.398 -35.728 -87.32 173.818 -38.9377 -114.59 173.926 -38.6238 -97 173.528 -39.4979 -106 173.783 -39.0419 -107.78 173.295 -39.9739 -98.21 174.105 -36.8828 -93.82 174.289 -37.7142 -93.66 173.72 -39.1016 -112.52 174.156 -37.9753 -91.84 173.564 -39.4555 -103.87 174.091 -38.1388 -104.82 173.634 -39.2814 -94.8 174.112 -36.8331 -91.14 173.552 -39.5426 -106.51 173.338 -39.8893 -98.74 173.885 -38.8016 -102.62 173.46 -39.7762 -95.57 173.908 -38.7165 -97 173.526 -39.6407 -102.51 174.031 -36.641 -74.14 173.63 -39.3366 -95.07 173.42 -39.8244 -97.42 174.022 -38.4023 -95.04 173.541 -39.5879 -106.95 173.688 -39.7533 -91.32 173.65 -39.6514 -96.18 173.526 -39.7343 -93.26 173.678 -39.4876 -90.95 173.674 -39.7985 -88.07 173.682 -39.7009 -85.16 173.748 -39.826 -86.01 173.833 -39.8955 -88.67 173.728 -39.7759 -86.27 173.982 -38.5278 -97 173.538 -39.787 -82.67 173.597 -39.8226 -79.54 173.775 -39.0871 -94.28 173.753 -39.9074 -88.91 173.661 -39.9128 -93.1 173.61 -39.9402 -77.67 173.371 -39.9487 -95.26 173.683 -39.9743 -84.95 173.605 -39.5677 -102.53 173.528 -39.9378 -82.58 173.451 -39.9174 -89.84 173.453 -39.9664 -87.77 173.845 -39.948 -93.53 173.596 -39.6242 -101.6 173.632 -39.3946 -97 174.018 -38.4587 -93.63 173.593 -39.8866 -75.95 173.507 -39.6857 -99 173.585 -39.6863 -92.01 173.604 -39.5069 -102.28 173.828 -39.008 -110.66 173.889 -38.9795 -101.05 173.592 -39.9947 -77.07 173.878 -38.9001 -103.62 173.612 -39.7547 -84.05 173.625 -39.4498 -98.05 173.983 -38.5931 -95.6 173.885 -39.0281 -97.71 173.848 -39.0682 -89.08 173.888 -38.8551 -101.65 173.67 -39.5427 -96.13 173.499 -39.8518 -85.81 173.981 -38.639 -94.86 173.67 -39.8582 -96.03 173.406 -39.8766 -96.19 173.778 -39.9853 -101.78 173.946 -38.6736 -96.24 173.898 -38.9331 -100.17 174.29 -37.3825 -167.89 173.946 -38.8929 -95.48 173.67 -39.6005 -93.02 173.807 -39.859 -82.66 174.282 -37.213 -84.38 173.951 -36.5003 -67.32 174.065 -38.5146 -89.1 173.764 -39.145 -69.23 174.069 -38.3671 -93.53 172.868 -35.1089 -50.42 174.104 -38.2674 -93.97 174.179 -37.8993 -93.13 174.049 -38.5725 -89.58 173.899 -39.979 -87.58 173.936 -38.765 -94.22 174.183 -38.015 -88.73 174.135 -38.1754 -94.55 174.079 -38.4188 -91.2 173.057 -35.3138 -88.91 173.622 -35.994 -81.66 174.136 -38.3275 -90.3 174.172 -36.906 -83.03 174.176 -38.0609 -89.86 173.976 -38.7209 -90.04 174.268 -37.8436 -87.39 174.296 -37.7971 -85.86 174.201 -37.9374 -88.1 174.011 -38.6765 -88.88 174.17 -38.1238 -90.65 174.036 -38.6283 -88.87 174.104 -36.785 -84.32 174.206 -37.0354 -83.84 173.728 -39.235 -28.58 173.668 -36.0149 -69.79 174.149 -38.2228 -91.68 174.348 -37.5217 -86.11 174.351 -37.5755 -83.93 174.259 -37.132 -82.41 174.1 -38.4678 -88.32 174.351 -37.6308 -83.38 174.325 -37.7499 -84.49 174.238 -37.892 -87.45 174.128 -38.5078 -85.7 174.224 -37.9829 -84.85 174.133 -38.3889 -88.56 174.178 -38.2714 -88.73 173.746 -39.7344 -81.04 174.197 -38.1822 -88.93 174.198 -36.9694 -81.53 174.357 -37.6923 -79.29 174.235 -38.0332 -84.8 174.134 -38.4336 -87.53 173.787 -39.7727 -71.45 172.848 -35.0181 -80.42 174.326 -37.8335 -77.92 173.895 -36.3705 -67.58 174.237 -38.0864 -85.29 174.318 -37.3263 -95.8 174.07 -36.6888 -76.19 174.119 -38.5541 -82.72 174.271 -37.9395 -80.35 173.891 -39.908 -73.15 174.351 -37.4674 -84.62 174.04 -38.7219 -82.51 174.248 -38.1407 -84.75 173.715 -39.6435 -85.69 174.298 -37.1694 -76.31 173.907 -39.9469 -81.7 174.076 -38.6732 -80.82 172.887 -35.0598 -74.24 173.719 -39.5685 -83.49 174.355 -37.4138 -84.69 173.689 -39.4321 -72.42 174.113 -38.6165 -79.14 173.959 -38.823 -93.73 174.221 -38.318 -83.41 174.211 -38.2276 -87.25 174.359 -37.7922 -75.23 173.954 -38.9543 -93.2 174.278 -37.0935 -73.72 173.827 -39.8117 -68.88 173.733 -39.602 -80.16 174.309 -37.2657 -81.52 174.317 -37.8858 -77.56 174.174 -38.4729 -85.41 174.198 -38.3699 -86.29 174.161 -36.8547 -77.72 174.3 -37.996 -79.2 173.773 -39.6767 -72.74 174.19 -38.5313 -78.97 174.113 -36.7271 -70.41 174.272 -38.1982 -83.23 174.298 -38.0546 -80.2 174.364 -37.3611 -90.12 174.251 -37.0016 -71.05 174.391 -37.8414 -73.21 173.946 -39.0157 -79.52 174.261 -38.2643 -82.86 174.004 -38.7699 -87.57 173.742 -39.5227 -73.98 174.187 -38.4203 -85.83 174.302 -38.1045 -80.46 174.343 -37.9428 -75.94 174.18 -38.5838 -75.87 174.315 -38.15 -79.72 174.16 -36.807 -74.27 174.41 -37.5487 -72.34 174.413 -37.6005 -71.36 174.418 -37.6521 -70.69 174.291 -38.3174 -76.57 174.108 -38.7223 -75 174.392 -37.744 -72.02 173.173 -35.4866 -95.02 173.875 -39.8544 -67.19 174.147 -38.6745 -72.52 174.409 -37.4963 -73.44 174.24 -36.9131 -67.9 174.19 -38.6316 -71.38 174.392 -37.9005 -72.82 173.951 -39.9714 -79.47 174.432 -37.7001 -67.76 174.266 -38.3598 -77.16 174.069 -38.7692 -79.33 173.97 -36.4579 -36.27 174.017 -38.8628 -89.63 174.242 -38.4523 -81.47 174.376 -37.985 -74.13 174.25 -38.4056 -80.12 174.348 -38.1868 -77.62 174.424 -37.7859 -68.12 174.242 -38.4985 -77.86 174.334 -38.2353 -77.59 174.361 -38.0308 -75.75 174.334 -38.2855 -74.44 174.356 -38.077 -76.68 174.345 -37.2078 -66.39 174.251 -38.5347 -73.93 173.817 -39.7216 -62.27 173.705 -39.3682 -39.54 174.357 -38.1184 -76.76 174.41 -37.9453 -71.96 173.637 -35.9508 -57.66 174.365 -38.1516 -76.31 173.525 -35.831 -79.16 174.237 -38.5675 -72.33 174.006 -36.5843 -67.23 174.341 -38.3227 -71.32 174.465 -37.821 -65.73 174.452 -37.8707 -69.14 174.274 -37.048 -70.18 174.411 -37.4422 -73.44 174.216 -36.866 -67.36 174.345 -37.1595 -62.73 174.316 -37.1208 -66.91 174.136 -38.771 -70.9 173.695 -39.2763 -49.82 172.995 -35.2049 -61.21 173.936 -36.3925 -51.59 174.325 -38.3541 -70.9 174.313 -38.3939 -71.7 174.274 -36.957 -62.17 174.183 -38.7266 -66.52 174.215 -38.6776 -65.24 173.855 -39.7601 -60.44 172.916 -35.0159 -62.23 174.38 -37.3035 -71 174.303 -38.4368 -73.27 173.948 -39.9241 -68 173.701 -36.047 -63.43 174.439 -37.9798 -70.37 174.405 -38.1721 -72.01 174.413 -37.3913 -71.63 174.453 -37.9143 -69.27 174.397 -38.2143 -71.6 174.452 -37.7408 -64.16 173.777 -39.6225 -70.17 174.416 -38.0132 -71.92 174.23 -38.6039 -69.99 173.481 -35.7863 -70.62 174.2 -36.8272 -66.44 173.895 -39.7972 -55.93 174.397 -38.2648 -69.75 174.311 -37.0775 -64.55 174.036 -38.8143 -85.93 174.298 -38.4801 -72.15 172.925 -35.1886 -67.95 174.424 -38.0577 -71.95 173.779 -39.5706 -66.84 174.298 -38.5199 -69.15 174.477 -37.5714 -61.19 174.401 -38.0984 -73.69 174.094 -36.6378 -55.07 174.384 -38.3095 -68.14 174.465 -37.6223 -63.43 174.378 -38.3465 -66.28 174.162 -36.7572 -62.1 174.025 -38.9203 -86.71 174.374 -37.2528 -63.5 174.459 -37.9486 -69.05 173.948 -36.4248 -49.31 174.457 -37.5215 -63.23 174.407 -38.1328 -72.9 174.485 -37.6661 -60.11 174.483 -37.7734 -61.61 174.37 -38.3837 -64.69 174.292 -38.5586 -67.09 174.423 -37.3443 -63.64 173.937 -39.8776 -58.6 174.017 -38.988 -55.63 174.48 -37.7083 -61.11 173.742 -39.4678 -58.46 174.201 -38.7785 -61.95 173.822 -39.6403 -59.77 174.262 -38.6398 -63.54 174.281 -38.5967 -65.24 174.474 -37.4702 -57.86 174.363 -38.4234 -65.01 174.519 -37.8492 -59.77 174.497 -37.894 -63.29 173.676 -39.3161 -68.62 174.249 -38.7145 -60.16 174.438 -38.3023 -63.52 174.099 -38.8133 -77.97 173.998 -36.5272 -42.05 174.269 -38.6814 -59.47 174.458 -38.1534 -66.58 174.515 -37.8009 -58.41 174.358 -38.4645 -64.94 174.454 -38.1946 -65.81 174.496 -37.9703 -64.18 173.611 -35.911 -51.83 174.45 -38.2363 -65.08 174.422 -38.3338 -62.95 174.128 -36.6756 -56.25 174.456 -38.2706 -63.51 172.922 -35.1398 -31.01 173.428 -35.6886 -51.53 174.48 -38.016 -66.85 174.012 -39.9473 -64.43 174.235 -38.7493 -59.85 174.463 -37.4138 -56.08 174.054 -39.983 -60.69 174.498 -38.0653 -63.54 174.393 -37.1707 -53.22 174.46 -38.1064 -67.8 174.309 -36.9979 -58.14 174.502 -37.9308 -62.93 174.309 -36.9093 -50.28 173.849 -39.674 -54.38 173.835 -36.1389 -44.74 174.353 -38.5052 -63.29 174.432 -38.3726 -59.55 173.796 -39.4883 -44.43 174.498 -37.7356 -58.33 174.347 -38.5467 -61.15 173.398 -35.651 -45.3 174.068 -38.8458 -82.26 174.276 -36.8687 -53.76 173.051 -35.2326 -35.98 172.943 -35.0519 -55.46 173.916 -39.0684 -53.74 174.412 -38.4094 -58.96 174.163 -38.8186 -66.78 174.375 -37.1254 -53.15 173.992 -39.8931 -50.48 174.457 -37.3724 -54 174.258 -38.7812 -55.12 173.941 -39.8293 -50.46 174.249 -36.8261 -54.37 173.081 -35.2775 -49.39 173.676 -35.9759 -52.24 174.529 -38.1035 -57.55 174.334 -38.5861 -60.12 174.168 -36.7073 -50.12 174.215 -36.7811 -54.44 174.495 -38.2939 -58.5 173.998 -39.0303 -32.18 173.884 -39.7097 -52.62 174.07 -36.5942 -45.21 174.507 -38.137 -60.65 174.423 -38.4492 -56.66 174.306 -38.7069 -54.16 174.548 -37.9509 -56.57 174.518 -38.1808 -58.58 174.541 -37.7561 -53.32 174.323 -38.6248 -56.97 174.496 -38.219 -60.43 174.48 -38.3382 -57.26 174.066 -38.8802 -81.74 174.501 -38.2546 -58.94 173.187 -35.4344 -64.31 174.542 -37.9928 -57.84 174.55 -37.5637 -50.11 174.527 -37.621 -54.05 173.921 -39.7449 -47.44 173.75 -39.4209 -33.4 174.59 -37.847 -50.24 174.404 -38.4886 -58.18 174.513 -37.5189 -54.82 174.555 -37.8999 -55.53 174.409 -37.2181 -56.62 174.545 -38.035 -58.46 172.971 -35.1614 -41.54 174.317 -38.6661 -55.81 174.553 -38.0712 -56.77 174.234 -38.8242 -55.4 174.53 -37.6615 -52.92 174.439 -37.3043 -54.71 174.563 -37.804 -52.24 174.285 -38.7455 -53.71 174.487 -38.3785 -53.83 173.907 -36.3222 -50.4 174.531 -37.6997 -52.87 174.52 -37.4246 -47.4 174.426 -37.2643 -52.63 174.47 -38.4136 -53.07 174.08 -38.958 -55.68 173.978 -39.8542 -47.36 174.413 -38.5318 -53.99 173.835 -39.5991 -55.1 174.356 -37.0837 -49.03 174.551 -38.28 -51.7 173.807 -36.0967 -36.31 174.544 -37.4716 -47.62 174.391 -38.5783 -53.78 172.978 -35.0208 -45.36 174.368 -38.6115 -53.99 173.144 -35.3551 -43.5 174.544 -38.3254 -51.6 174.203 -36.7342 -46.44 174.314 -38.7801 -49.09 174.337 -37.0406 -54.95 174.631 -37.8881 -44.92 173.803 -39.5276 -51.26 174.605 -37.9366 -48.7 174.482 -38.4529 -49.57 174.343 -36.9493 -45.44 174.591 -38.0953 -50.57 173.755 -36.0762 -51.46 174.571 -38.1426 -50.02 174.501 -37.3795 -44.57 174.581 -38.1889 -49.16 173.96 -39.7808 -46.71 174.554 -38.2296 -52.44 173.753 -39.1965 -30.55 173.829 -39.1146 -58.5 174.12 -38.8611 -72.57 174.464 -38.4936 -51.58 174.588 -37.974 -51.18 174.286 -38.81 -48.76 174.622 -37.8 -44.28 174.337 -36.867 -39.83 174.535 -38.368 -49.7 174.596 -38.0104 -51.02 174.053 -39.8991 -42.1 174.363 -38.6923 -47.89 174.574 -37.5151 -43.6 174.483 -37.332 -43.85 174.594 -37.765 -46.72 174.6 -38.0534 -51.68 173.719 -36.0018 -39.22 173.462 -35.7368 -43.91 174.437 -37.1257 -31.79 174.519 -38.4002 -49.27 174.106 -39.9873 -47 173.866 -36.2823 -73.27 174.457 -39.9846 -44.19 174.352 -38.7404 -45.54 174.371 -38.6482 -49.31 174.396 -39.9701 -47.72 173.114 -35.3169 -45.03 174.449 -38.5739 -47 173.877 -39.628 -46.89 174.467 -37.2279 -47.86 174.423 -38.6202 -47 174.45 -37.1807 -45.15 174.47 -38.5377 -47.78 174.159 -39.9935 -47 174.079 -39.9457 -42.29 174.616 -38.2198 -41.86 173.845 -39.5519 -48.77 174.657 -38.0789 -33.55 174.606 -38.2635 -43.01 174.096 -38.9111 -75.68 174.658 -37.8383 -40.71 172.998 -35.0684 -45.04 173.949 -39.6959 -40.18 174.289 -38.8397 -45.37 172.983 -35.1198 -46.44 174.605 -38.3133 -41.6 174.308 -36.8284 -41.51 174.482 -37.2768 -41.38 173.914 -39.6619 -43.28 174.191 -38.8648 -60.56 174.599 -37.7133 -44.13 174.027 -39.8531 -39.79 174.365 -38.7816 -42.51 174.339 -39.9839 -46.24 174.601 -37.603 -42.92 174.524 -38.4338 -44.97 174.426 -38.6743 -43.29 174.524 -38.4758 -44.49 174.573 -37.6592 -46.37 174.138 -39.9511 -44.62 173.996 -39.8149 -43.63 173.985 -39.7306 -39.21 174.275 -39.9747 -27 174.602 -37.5522 -40.1 174.653 -38.0273 -42.52 174.646 -37.7517 -39.22 174.503 -38.5669 -41.16 174.577 -37.4292 -38.38 174.596 -38.3588 -35.9 174.258 -38.8728 -48.33 174.142 -36.6332 -43.57 174.404 -37.0899 -34.42 174.532 -39.9749 -34.05 174.402 -38.717 -41.58 174.156 -38.9039 -62.57 174.645 -37.976 -42.22 173.99 -36.4247 -13.76 173.859 -36.1729 -42.37 174.278 -36.7825 -39.86 172.933 -35.0916 -37.25 174.52 -38.5222 -43.17 174.386 -36.901 -27.59 173.028 -35.0301 -39.22 174.338 -38.8192 -40.11 173.718 -39.3143 -30.28 174.021 -39.7678 -37.08 174.379 -36.9906 -36.68 174.639 -39.9812 -37.37 174.636 -38.1216 -28.82 174.552 -37.3858 -35.75 174.587 -39.9693 -37.51 174.223 -39.9976 -51.67 174.683 -37.7888 -35.51 174.667 -37.9269 -37.65 174.71 -37.8799 -28.5 174.482 -38.6081 -38.82 173.996 -36.4843 -24.75 174.644 -38.1717 -31.67 174.421 -39.9423 -40.58 174.079 -39.0054 -21.62 173.229 -35.4722 -54.96 174.637 -37.6562 -37.14 174.467 -38.6449 -37.98 174.098 -39.8496 -32.53 173.063 -35.0588 -35.88 174.054 -36.5436 -24.94 174.604 -37.4735 -34.07 174.248 -36.7343 -36.14 174.416 -38.759 -36.42 174.136 -38.9417 -43.22 174.119 -39.9052 -35.41 173.969 -39.0622 -31.14 174.217 -38.9094 -36.8 174.729 -37.8262 -28.58 174.531 -37.3484 -34.59 174.401 -38.8072 -34.19 173.957 -36.3561 -20.6 174.671 -37.7016 -34.18 173.048 -35.1048 -32.93 174.178 -36.6571 -36.37 174.215 -36.6918 -36.56 173.98 -39.6463 -32.06 174.487 -38.6829 -30.95 174.124 -36.596 -28.81 174.056 -39.8063 -34.73 173.978 -36.3942 -14.16 174.359 -36.8335 -31.24 174.696 -37.9584 -34.16 174.703 -39.9838 -31.95 173.665 -35.923 -30.48 174.701 -37.9969 -32.84 174.327 -38.8718 -35.04 174.454 -38.7191 -35.83 174.015 -39.6814 -31.29 174.481 -39.9282 -23.81 174.67 -37.6067 -31.95 174.615 -39.9475 -31.52 174.706 -37.7399 -30.8 173.933 -36.2726 -33.96 174.496 -37.1931 -35.37 174.186 -39.9609 -39.18 174.405 -36.9405 -26.25 174.342 -36.7902 -29.94 174.719 -38.0464 -29.4 174.38 -38.8441 -30.49 174.051 -39.7188 -29.41 173.902 -39.5776 -36.25 174.541 -37.3017 -30.26 173.076 -35.0146 -32.73 173.94 -39.6142 -34.12 174.084 -39.7584 -27.99 174.631 -37.5181 -30.33 174.568 -38.5594 -29.33 174.649 -37.5618 -30.58 173.677 -35.9485 -37.87 174.649 -38.2483 -31.79 174.29 -38.9246 -27.3 174.665 -38.2167 -26.42 174.4 -37.0441 -24.68 174.529 -38.5982 -34.05 174.532 -37.2357 -29.96 173.878 -36.22 -41.48 173.85 -39.5029 -26.15 174.7 -37.6505 -28.75 174.363 -39.9286 -27.67 174.741 -37.775 -27.26 174.394 -36.8605 -23.2 174.658 -38.29 -29.42 173.897 -39.5328 -13.69 174.471 -38.7547 -30.63 174.117 -39.7958 -24.07 174.181 -38.9348 -32.88 173.031 -35.1551 -20.32 174.767 -39.9826 -27.06 174.461 -38.7936 -28.37 174.583 -38.4995 -31.04 173.582 -35.8661 -49.82 174.724 -37.9258 -28.94 174.606 -37.3897 -27.72 174.18 -39.9195 -22.63 174.666 -39.9464 -29.96 173.115 -35.0431 -28.37 174.634 -37.4328 -24.26 174.734 -37.6914 -25.1 174.577 -37.3462 -25 174.491 -37.1493 -25.38 174.522 -38.6426 -28.12 174.563 -39.9279 -25.94 174.686 -39.9081 -17 174.293 -39.9338 -27.45 174.232 -39.9445 -27.08 174.047 -39.6321 -20.91 173.111 -35.0905 -25.9 174.832 -39.9821 -24.6 174.367 -39.8804 -23.64 174.728 -39.9435 -23.77 174.084 -39.6688 -22.24 174.443 -38.8428 -23.91 174.125 -39.7082 -19.18 174.432 -36.9619 -19.19 174.574 -38.4077 -32.57 174.103 -36.559 -21.87 174.627 -39.9136 -25.99 173.965 -36.3115 -21.46 173.791 -39.4472 -19.75 174.39 -38.8812 -23.56 174.766 -37.7307 -21.1 174.152 -39.8243 -18.86 174.17 -38.962 -17.41 174.893 -39.9842 -21.79 174.165 -39.8679 -17.04 174.434 -37.0022 -17.25 174.518 -38.7741 -21.57 174.306 -36.7351 -23.22 174.138 -39.7542 -18.18 174.781 -37.8016 -18.72 174.042 -36.4898 -13.21 174.007 -39.5947 -16.22 174.267 -36.6824 -23.75 174.35 -38.9123 -21.94 174.727 -37.6033 -16.27 173.755 -36.0313 -29.03 174.739 -37.9662 -26.69 174.313 -39.8841 -22.27 174.521 -39.8897 -17 174.799 -39.937 -17.15 174.756 -37.6433 -11.54 174.7 -37.5701 -18.5 174.341 -39.8423 -17 174.416 -39.9 -17 174.582 -39.8725 -17.4 174.514 -38.8221 -16.21 174.788 -37.7655 -18.14 174.225 -36.6357 -23.6 174.599 -37.3101 -18.61 174.753 -38.0068 -17.07 174.019 -36.4465 -10.56 174.182 -36.599 -20.13 174.748 -39.9017 -14.91 174.651 -39.8789 -17 174.664 -37.4789 -15.29 174.569 -38.4539 -29.26 174.447 -38.8912 -16.43 174.466 -39.8735 -17 174.405 -39.8476 -17 174.574 -38.6127 -24.4 174.452 -37.0688 -4.56 174.956 -39.9878 -17 174.489 -37.0974 -6.87 174.398 -38.9278 -14.3 173.958 -39.576 -12.06 174.715 -38.0951 -11.41 174.462 -39.8281 -17 174.251 -39.7759 -17 174.194 -39.7267 -17 174.321 -39.7972 -17 174.422 -39.797 -13.44 174.515 -39.8431 -17 174.209 -39.8287 -27.24 174.18 -39.6801 -17 174.147 -39.6516 -15.94 174.278 -39.8354 -17 174.239 -39.8872 -27.55 174.372 -39.8109 -17 174.267 -39.7148 -17 174.803 -39.8904 -10.72 174.872 -39.9428 -12.85 174.37 -39.7706 -13.58 174.176 -39.7835 -19.48 174.316 -39.7484 -17 174.231 -39.6739 -14.2 174.15 -36.5522 -12.48 174.639 -37.3487 -12.04 174.563 -38.7423 -13.56 173.096 -35.1409 -13.54 174.69 -37.5288 -15.54 174.929 -39.9457 -11.65 174.539 -37.176 -18 174.13 -38.9807 -19.32 174.327 -39.7017 -10.77 174.657 -37.3971 -12.44 174.108 -36.5072 -9.92 174.108 -39.6236 -14.8 174.198 -39.6416 -11.77 174.852 -39.9089 -7.73 174.587 -37.2689 -18.42 174.286 -39.6641 -9.66 174.347 -38.9547 -13.64 174.039 -39.0316 -14.95 174.498 -38.8644 -9.94 174.226 -38.9563 -12.89 174.366 -39.7319 -9.51 174.451 -37.0348 -5.46 174.575 -38.6576 -17.03 174.526 -37.1261 -11.15 173.998 -36.3699 -6.62 177.65 -36.0632 -2698.54 178.179 -35.9995 -2425.47 178.234 -35.0886 -2633.03 177.642 -36.2939 -2517.91 177.398 -36.1251 -2115.75 177.83 -35.8938 -1936.81 177.475 -35.8563 -2568.94 176.606 -35.3251 -2394.21 178.284 -36.4526 -2425.46 177.934 -36.4524 -2346.77 177.695 -35.6189 -2265.21 177.073 -36.1786 -2497 176.481 -35.5347 -2130.37 177.547 -36.7693 -2273.11 176.851 -36.3285 -2247 178.132 -36.7178 -2365.13 176.881 -36.4834 -1641.73 176.471 -35.0934 -2277.01 178.455 -37.0687 -2242.25 176.904 -35.8897 -2207.66 176.281 -35.3348 -1997 177.197 -35.2022 -1843.9 176.663 -35.7026 -2247 176.249 -35.5801 -1833.26 177.074 -36.9496 -1801.29 177.281 -36.8174 -1997 175.679 -35.046 -1639.23 176.747 -36.1262 -1441.13 176.619 -36.2955 -1497 176.899 -37.0692 -1343.66 176.71 -36.7195 -1567.97 175.656 -35.2737 -1212.47 176.068 -35.6565 -747 176.467 -36.1145 -1143.14 175.773 -35.574 -497 175.277 -35.1546 -1015.28 176.123 -35.787 -497 175.592 -35.468 -747 175.429 -35.311 -861.11 174.785 -35.0609 -528.55 175.23 -35.3348 -672.57 175.354 -35.4772 -537.4 177.149 -37.6098 -237.49 175.098 -35.2345 -613.9 175.639 -35.6292 -497 175.9 -35.68 -468.89 176.994 -37.4685 -497 175.487 -35.6036 -507.39 176.278 -36.0367 -526.32 175.181 -35.4643 -431.61 177.078 -37.5472 -247 175.662 -35.7296 -375.38 176.286 -36.176 -511.83 175.762 -35.7026 -432.18 176.974 -37.576 -247 175.078 -35.3702 -420.57 176.004 -35.7893 -420.42 176.135 -36.2966 -359.65 175.729 -35.8073 -317.12 177.338 -39.8116 -236.24 176.232 -35.8785 -436.98 175.861 -35.8008 -367.84 177.579 -39.6698 -154.31 175.559 -35.715 -343.45 175.047 -35.4826 -304.83 176.162 -36.2066 -283.93 174.965 -35.2978 -369.99 175.245 -35.5564 -349.28 175.617 -35.805 -245.58 177.704 -37.6191 -127.32 175.343 -35.6216 -283.99 177.43 -39.7558 -231.8 176.088 -35.8786 -307.76 175.802 -35.9013 -268.59 175.954 -35.931 -266.47 177.757 -37.5765 -160.15 176.057 -36.3626 -275.6 175.135 -35.5662 -303.64 177.63 -39.612 -131.89 177.262 -39.8573 -226.4 176.182 -36.1069 -252.91 176.043 -36.2471 -211.42 175.021 -35.5825 -247 174.955 -35.41 -240.12 176.117 -36.0024 -246.43 176.189 -37.1936 -246.09 175.846 -35.9869 -223.72 175.674 -35.9066 -199.63 175.432 -35.7222 -225.99 174.935 -35.5087 -215.74 175.1 -35.6577 -200.18 177.481 -39.6773 -172.98 176.004 -36.0418 -209.4 176.068 -36.1263 -211.34 175.91 -36.0447 -197 176.147 -37.2331 -138.3 174.86 -35.3506 -216.79 175.219 -35.6552 -215.42 175.32 -35.7198 -197 177.059 -37.6264 -174 178.139 -39.0388 -74.84 178.575 -37.5456 -197 175.513 -35.8032 -187.19 176.08 -36.6409 -157.48 175.749 -35.9857 -190.78 174.852 -35.448 -165.2 175.968 -36.1037 -196.14 175.371 -35.7816 -132.26 174.622 -35.3281 -145.41 175.808 -36.0699 -179.65 175.239 -35.7431 -153.86 174.993 -35.6828 -165.84 176.983 -37.6526 -140.41 175.967 -36.1766 -176.2 177.641 -37.6415 -123.41 176.08 -36.7117 -149.67 174.834 -35.5365 -147.28 176.792 -37.6239 -320.67 175.564 -35.8875 -171.35 175.158 -35.732 -151.95 175.073 -35.7273 -157.03 175.941 -36.3998 -159.27 177.474 -39.4716 -104.62 175.43 -35.8109 -140.83 175.949 -36.4832 -138.31 175.891 -36.1264 -173.81 175.717 -36.0509 -157.94 178.372 -38.7545 -53.9 175.296 -35.7963 -103.95 174.758 -35.3975 -139.2 175.811 -36.1611 -153.24 176.86 -37.6596 -171.45 174.891 -35.6778 -152.23 174.774 -35.5978 -126.33 177.703 -39.5546 -111 175.457 -35.8863 -133.78 174.777 -35.4751 -79.19 174.931 -35.7526 -145.67 175.731 -36.1221 -143.11 174.806 -35.6667 -133.17 175.659 -36.0014 -151.06 175.015 -35.7704 -128.94 175.881 -36.2026 -151.24 176.923 -37.688 -98.1 175.887 -36.3441 -132.56 174.737 -35.5301 -100.41 174.964 -35.8119 -93.63 175.202 -35.8122 -71.02 175.103 -35.802 -93.91 177.569 -37.6775 -97.83 174.538 -35.3441 -115.99 175.363 -35.8547 -130.98 175.815 -36.2251 -135.19 174.834 -35.7458 -116.27 175.598 -35.9581 -148.62 176.023 -36.7323 -118.69 174.696 -35.4637 -107.77 176.093 -37.1345 -120.72 175.273 -35.8667 -122.69 175.736 -36.2077 -123.37 175.026 -35.8371 -94.69 174.755 -35.7138 -105.19 175.509 -35.9678 -122.1 175.384 -35.9168 -127.03 174.582 -35.3917 -109.58 174.887 -35.8247 -105.08 174.727 -35.6499 -110.56 177.272 -39.6683 -117.19 175.868 -36.2776 -128.49 177.308 -39.5652 -97.23 178.61 -37.8161 -85.72 175.663 -36.1582 -112.77 175.647 -36.0824 -119.09 177.428 -39.5226 -113.96 177.997 -39.3344 -89.38 174.767 -35.7664 -95.09 175.878 -36.4582 -104.01 175.195 -35.8887 -95.71 177.761 -37.6331 -76.5 176.859 -37.7287 -72.76 175.146 -35.8564 -97.61 177.606 -39.4474 -108.57 174.956 -35.867 -120.15 175.424 -35.9609 -116.88 175.885 -36.5248 -90.13 174.606 -35.455 -101.72 174.794 -35.817 -99.48 177.067 -39.876 -89.37 177.703 -37.664 -62.26 175.087 -35.876 -90 177.73 -39.4777 -101.35 177.961 -39.3894 -96.59 176.084 -36.8263 -109.08 174.642 -35.5256 -99.76 175.779 -36.2766 -112.25 175.849 -36.3946 -98.86 176.086 -37.2239 -85.27 174.517 -35.397 -89.06 178.587 -37.6271 -51.27 174.692 -35.5883 -99.71 174.675 -35.6997 -86.18 177.225 -39.7309 -118.78 175.32 -35.9165 -122.54 175.654 -36.2232 -96.12 177.27 -39.6055 -94.83 177.111 -39.7895 -69.1 176.98 -37.7053 -110.14 174.712 -35.7565 -96.68 177.535 -39.4368 -103.19 175.699 -36.2818 -97 177.351 -39.5191 -92.41 175.819 -36.3355 -103.27 178.126 -37.5111 -98.5 174.832 -35.8764 -103.22 174.896 -35.887 -111.9 175.245 -35.9317 -109.18 178.465 -38.5182 -89.55 175.576 -36.0293 -106.31 175.75 -36.3334 -97 175.019 -35.8987 -108.39 175.579 -36.0911 -97 175.503 -36.0317 -78.98 174.945 -35.9377 -103.08 175.607 -36.1301 -97 175.979 -36.7527 -95.18 177.015 -37.7486 -97 177.647 -39.4117 -93.4 177.582 -39.4002 -97.62 176.212 -37.2967 -54.45 178.232 -38.8649 -87.92 177.246 -37.7132 -153.24 174.549 -35.4313 -93.75 177.391 -39.4725 -86.34 174.738 -35.7966 -94.26 177.776 -39.4303 -77.99 175.297 -35.9623 -100.03 177.48 -39.4231 -88.26 177.516 -39.3893 -85.02 175.139 -35.9034 -54.16 175.599 -36.1804 -84.28 177.624 -39.3707 -85.04 178.539 -37.9674 -83.73 178.432 -38.5684 -83.28 177.999 -39.2729 -69.07 176.736 -37.6731 -149.15 178.42 -38.6328 -50.13 175.032 -35.9544 -94.93 178.509 -38.0165 -70.56 178.55 -37.9058 -84.75 176.115 -37.2604 -87.25 177.64 -37.7022 -62.71 176.245 -37.3322 -50.8 174.986 -35.9922 -86.48 178.351 -37.5225 -105.03 177.205 -37.7592 -87.3 174.86 -35.9291 -93.54 178.523 -38.0672 -69.64 177.28 -39.5149 -73.17 177.576 -37.7347 -57.11 174.574 -35.5053 -71.9 177.711 -39.4222 -81.58 177.425 -39.4277 -79.45 174.396 -35.2722 -73.58 174.465 -35.3611 -75.59 174.649 -35.7537 -68.11 177.314 -37.7266 -108.55 176.062 -37.1744 -86.33 174.614 -35.5901 -72.31 177.564 -39.3435 -78.79 175.035 -35.9992 -83.26 175.692 -36.3459 -88.32 178.479 -38.4433 -75.46 177.32 -39.4699 -73.32 174.882 -35.9718 -88.04 177.358 -39.425 -72.3 175.633 -36.2705 -78.06 174.651 -35.6389 -83.03 175.836 -36.4949 -75.83 177.886 -39.3981 -71.35 175.586 -36.2372 -67.97 175.442 -36.0216 -54.46 174.926 -35.9976 -84.86 178.599 -37.7647 -55.04 175.803 -36.4496 -18.15 177.452 -39.3835 -71.6 176.102 -37.2962 -70.17 175.255 -35.9883 -91.15 178.486 -37.9779 -61.21 177.484 -39.3404 -68.74 178.551 -37.8467 -63.4 176.034 -37.13 -74.66 175.014 -36.026 -77.41 177.642 -39.3235 -65.85 177.691 -39.3713 -68.74 178.215 -38.8207 -64.22 177.391 -39.3813 -67.59 177.232 -39.5583 -71.1 175.316 -36.0083 -87.51 175.634 -36.3205 -71.58 178.405 -38.5124 -52.23 176.031 -37.206 -69.11 178.476 -37.5537 -69.49 177.516 -39.2934 -65.82 174.913 -36.0352 -75.31 175.465 -36.0636 -78.59 176.938 -37.7475 -74.09 177.75 -39.3922 -63.79 176.476 -37.5316 -97.71 177.245 -39.4637 -60.02 177.812 -39.386 -53.71 177.369 -37.748 -84.4 175.077 -35.9877 -83.3 177.325 -37.779 -78.28 175.524 -36.0761 -81.83 178.476 -38.0919 -55.76 177.329 -39.3767 -64.33 176.135 -37.3289 -67.06 177.198 -39.6166 -70.76 175.54 -36.137 -57.69 174.615 -35.6729 -54.7 177.293 -39.4199 -64.09 175.063 -36.0358 -72.64 174.966 -36.0382 -75.06 178.449 -38.4772 -76.98 176.974 -37.7846 -71.94 174.791 -35.9211 -75.01 177.954 -39.2977 -48.54 175.267 -36.0364 -84.72 178.469 -38.1567 -54.49 177.223 -39.5099 -61.53 177.986 -39.2073 -45.89 174.869 -36.0137 -77.38 177.584 -39.2869 -63.02 176.798 -37.6933 -92.94 174.682 -35.8078 -72.22 178.457 -38.009 -50.96 178.504 -38.3163 -70.24 177.193 -37.8062 -68.96 174.56 -35.5557 -52.74 175.312 -36.0534 -75.62 177.054 -39.8286 -44.86 176.504 -37.5751 -83.84 177.42 -39.3385 -63.79 177.917 -39.3379 -51.42 174.877 -36.0588 -64.02 177.364 -39.3344 -63.43 174.927 -36.0683 -67.37 174.733 -35.8336 -84.83 176.685 -37.7098 -113.24 175.544 -36.1956 -60.18 174.42 -35.3165 -69.65 175.065 -36.0852 -67.54 178.474 -37.9271 -52.68 177.442 -37.7421 -76.53 178.395 -38.4714 -54.08 177.976 -39.1768 -28.48 177.004 -39.8935 -45.13 177.284 -37.8051 -66.63 176.023 -37.0456 -56.08 177.446 -39.2898 -60.53 174.617 -35.7945 -49.89 178.169 -38.8491 -51.14 175.321 -36.0818 -66.35 177.64 -39.2754 -50.25 177.394 -39.3021 -61.14 174.539 -35.4736 -65.85 175.82 -36.5414 -63.01 177.017 -37.8013 -72.57 178.586 -37.7177 -25.89 174.807 -36.0425 -62.07 174.465 -35.4144 -46.28 177.705 -39.327 -50.52 178.355 -38.5455 -62.32 177.27 -39.3697 -59.55 177.485 -39.2561 -52.92 177.306 -39.3262 -59.56 174.936 -36.1007 -61.07 177.328 -37.8225 -58.35 176.971 -39.9871 -50.69 175.793 -36.5004 -52.24 175.197 -35.9694 -87.89 174.899 -36.0909 -58.46 176.051 -37.004 -47 176.325 -37.4988 -69.69 177.233 -39.4071 -56.58 177.967 -39.2319 -38.71 175.351 -36.0441 -69.11 177.189 -39.4331 -51.4 177.021 -39.8612 -34.21 174.502 -35.4445 -59.89 178.467 -38.0531 -57.37 177.176 -39.4824 -47.54 178.464 -38.3483 -58.14 178.473 -38.399 -65.05 176.043 -37.2465 -65.78 178.499 -38.2684 -72.65 175.304 -36.1086 -60.21 177.952 -37.5284 -115.77 177.248 -39.32 -54.56 178.362 -38.5992 -70.71 177.833 -37.619 -38.85 174.814 -35.9768 -79.23 177.693 -37.7022 -21.31 174.763 -35.8732 -55.07 178.451 -38.1245 -46.85 177.215 -39.361 -52.08 177.345 -39.2811 -54.89 177.61 -39.2404 -48.73 177.759 -39.3483 -47.34 178.227 -38.7714 -51.86 178.45 -37.9698 -51.65 177.541 -39.2422 -48.46 177.813 -39.3422 -44.29 175.684 -36.3937 -65.38 174.909 -36.1228 -54.88 178.172 -38.7988 -50.75 174.629 -35.8398 -50.48 178.452 -37.5999 -30.26 174.965 -36.134 -52.47 174.514 -35.5198 -30.11 178.358 -38.6997 -52.71 177.162 -39.5654 -48.05 176.38 -37.4894 -84.7 175.954 -36.9267 -58.66 178.451 -38.1952 -49.67 174.592 -35.7513 -43.2 177.689 -39.2873 -45.22 177.388 -37.8001 -58.87 177.398 -39.2671 -55.29 177.516 -37.7685 -48.54 177.099 -39.6723 -20.5 177.436 -39.2336 -46.72 175.292 -36.1393 -50.55 178.548 -37.7957 -38.71 177.188 -39.3937 -49.22 178.494 -37.8688 -46.79 176.989 -39.9367 -51.67 175.821 -36.5844 -47.29 174.844 -36.105 -51.38 174.56 -35.5982 -42.91 177.856 -39.3544 -46.71 177.632 -37.7577 -32.33 177.281 -39.2772 -50.66 177.184 -39.5286 -53.59 175.597 -36.3639 -64.41 175.732 -36.427 -50.21 174.879 -36.1451 -58.09 177.371 -39.2315 -47.11 175.98 -37.0605 -50.46 178.421 -38.4308 -49.37 174.92 -36.1623 -46.55 177.948 -39.261 -33.96 174.774 -36.0856 -54.36 175.02 -36.3944 -48.15 178.411 -38.0433 -37 175.18 -36.4527 -45 175.035 -36.2738 -45.17 174.974 -36.2848 -50.5 175.532 -36.36 -48.87 175.118 -36.3792 -46.38 175.565 -36.4027 -59.27 175.124 -36.43 -38.77 174.747 -35.9539 -53.9 175.526 -36.4426 -51.05 178.228 -38.6788 -52.68 175.234 -36.4277 -45.14 175.966 -37.0875 -45.18 174.88 -36.1756 -54.21 174.835 -36.1604 -55.29 175.587 -36.4432 -50.09 174.689 -35.8738 -47.57 175.511 -36.3997 -50.14 174.748 -36.0028 -62.72 175.292 -36.4896 -47.27 175.404 -36.4079 -52.32 175.263 -36.3485 -42.97 175.101 -36.3395 -47.12 175.238 -36.4801 -45 175.347 -36.3805 -46.66 175.309 -36.3556 -43.99 178.197 -38.7187 -47.33 174.735 -36.0512 -55.21 175.286 -36.3963 -43.5 178.298 -38.7666 -44.07 175.875 -36.6448 -7 175.136 -36.3417 -47.53 175.223 -36.3802 -45.05 175.631 -36.4484 -48.98 178.26 -38.7225 -40.77 175 -36.3619 -49.9 178.316 -38.7236 -29.09 175.673 -36.4363 -48.46 175.461 -36.3734 -44.79 175.213 -36.0188 -86.26 178.304 -38.5744 -53.52 175.635 -36.5193 -47 174.578 -35.6337 -47 174.737 -35.9117 -54.19 174.695 -35.9327 -47.1 175.609 -36.4799 -47.97 175.862 -36.5728 -63.87 176.359 -37.5348 -62.3 175.585 -36.557 -47 175.639 -36.5625 -47 174.704 -35.9749 -46.24 176.159 -37.2862 -91.33 176.576 -37.6374 -65 175.467 -36.4223 -45.88 175.295 -36.4524 -47.53 174.983 -36.4244 -48.31 175.56 -36.4795 -48.97 175.659 -36.4755 -47.18 178.356 -38.651 -41.21 174.681 -36.0176 -47 178.251 -38.6375 -50.65 174.965 -36.4588 -47.51 176.006 -37.0066 -47 174.917 -36.2804 -49.08 175.248 -36.3091 -47.9 175.348 -36.2982 -40.45 175.3 -36.3148 -43.94 177.367 -37.8497 -44.28 174.629 -35.8758 -46.57 175.018 -36.3207 -47.37 175.069 -36.3114 -39.97 175.979 -37.1228 -47 174.887 -36.3235 -45.72 174.91 -36.2033 -49.09 174.852 -36.2078 -51.46 174.556 -35.6806 -25.94 175.889 -36.7174 -44.43 174.891 -36.2434 -49.62 178.07 -38.9549 -39.59 178.169 -38.7551 -46.22 175.056 -36.3592 -46.16 175.348 -36.3379 -40.78 175.993 -37.2305 -51.18 175.973 -37.0276 -47 177.582 -39.201 -33.14 174.982 -36.4884 -45.11 177.287 -37.8399 -51.83 175.27 -36.5164 -44.11 175.123 -36.305 -45.76 177.492 -39.2224 -36.92 175.178 -36.4982 -44.55 176.006 -37.2708 -47.9 177.191 -39.3137 -48.19 177.225 -39.2726 -42.14 177.137 -39.3046 -38.64 178.41 -37.99 -29.89 175.702 -36.4647 -47 177.747 -39.2978 -39.5 177.793 -39.3165 -39.68 177.154 -39.3564 -47.46 174.72 -36.0933 -48.38 175.517 -36.4876 -50.99 175.291 -36.5459 -38.73 175.478 -36.1034 -63.19 174.643 -35.9138 -38.95 178.421 -37.944 -24.11 178.335 -38.4889 -35.27 175.849 -36.609 -46.17 178.434 -38.2461 -40.54 174.769 -36.1356 -50.22 176.692 -37.761 -51.06 176.389 -37.5796 -41.11 175.753 -36.5323 -47 177.677 -39.239 -39.55 178.422 -38.0896 -40.77 177.725 -39.2608 -37.59 178.414 -38.1603 -34.6 175.699 -36.5034 -47 175.674 -36.5936 -46.13 178.122 -38.8207 -43.6 178.45 -38.2991 -49.51 177.311 -39.2331 -43.72 177.147 -39.4064 -44.69 175.218 -36.5666 -41.47 174.609 -35.7124 -47 175.261 -36.5673 -41.01 177.046 -39.7815 -30.82 176.976 -37.8635 2.16 177.641 -39.1977 -35.08 177.169 -39.2676 -33.08 178.119 -38.8592 -37.84 177.464 -37.805 -44.34 177.401 -39.1888 -35.8 178.573 -37.6743 -13.96 175.892 -36.6059 -47 178.052 -38.9207 -44.91 175.748 -36.4802 -47 177.145 -39.445 -41.5 174.654 -35.9643 -43.41 177.426 -37.8451 -38.18 178.088 -38.8882 -41.55 175.25 -36.6004 -40.45 176.206 -37.2495 -169.63 177.847 -39.3057 -15.1 178.295 -38.6765 -57.62 175.028 -36.1609 -54.18 176.024 -37.3092 -43.07 177.097 -39.3321 -36.76 177.989 -38.9157 -45.43 177.774 -39.2566 -35 177.796 -39.2869 -36.89 177.254 -39.23 -35.3 174.595 -35.8926 -40.26 177.131 -39.5217 -34.47 175.161 -36.6226 -41.33 174.688 -36.0618 -46.76 177.137 -39.6011 -42.19 175.205 -36.6073 -40.24 178.169 -38.6759 -37.4 178.073 -38.798 -36.35 178.197 -38.6418 -29.8 177.115 -39.2625 -25.57 176.637 -37.7428 -45.8 177.135 -39.6444 -42.51 177.101 -39.3801 -39.44 177.527 -39.1961 -28.68 175.689 -36.5472 -47 176.929 -37.8006 -48.24 177.741 -39.223 -34.11 178.387 -38.2046 -29.71 174.347 -35.2818 -46.71 174.402 -35.3546 -46.61 174.79 -36.1902 -43.83 177.704 -39.1902 -33.36 174.803 -36.2336 -42.67 177.612 -39.1639 -28.85 174.574 -35.782 -22.84 175.198 -36.6434 -39.62 178.352 -37.5818 -33.01 175.13 -36.6462 -39.57 176.351 -37.6048 -37.97 177.47 -39.1838 -28.19 177.582 -37.7921 -29.84 178.363 -38.4415 -38.08 174.601 -35.9392 -38.05 178.031 -38.8778 -45.84 175.941 -37.2107 -32.61 178.124 -38.7725 -37.85 177.667 -39.1545 -29.7 177.092 -39.2933 -30.86 178.075 -38.8454 -43.81 177.826 -39.257 -29.63 176.58 -37.7308 -38.34 175.1 -36.6644 -38.18 175.439 -36.3336 -32.8 177.101 -39.4266 -34.03 175.13 -36.6769 -36.27 178.224 -38.6114 -27.71 178.518 -37.6041 -43.66 175.943 -37.1622 -37.84 175.163 -36.6612 -39.28 177.078 -39.7377 -46 177.975 -38.8669 -42.25 178.389 -38.2845 -28.04 177.923 -37.5673 -43.78 177.398 -37.8849 -29.24 177.808 -39.2143 -31.22 178.004 -39 -36.44 174.489 -35.4864 -24.51 176.694 -37.8099 -30.27 178.014 -38.8259 -37.81 178.404 -38.124 -31.87 175.074 -36.6862 -33.79 175.73 -36.574 -47 174.604 -36.0048 -28.9 177.336 -39.185 -30.38 177.94 -38.8962 -29.03 175.16 -36.6981 -35.34 177.197 -39.2269 -25.95 177.529 -37.8204 -28.23 175.103 -36.6894 -35.17 175.608 -36.5978 -31.84 177.112 -39.4732 -31.47 176.521 -37.6666 -45.5 177.429 -39.1463 -23.79 177.487 -37.8513 -27.97 177.628 -39.1246 -24.99 177.766 -39.1798 -29.24 177.095 -39.5646 -25.24 178.075 -38.7491 -26.52 174.727 -36.1799 -41.43 175.85 -36.7347 -29.62 175.731 -36.6105 -20.69 175.09 -36.7176 -28.84 177.727 -39.1446 -29.36 177.561 -39.1658 -25.7 175.951 -37.254 -31.3 177.376 -39.1536 -27.37 176.929 -37.8463 -13.47 175.356 -36.7924 -29.87 175.376 -36.831 -30.61 177.949 -38.8254 -26.28 175.326 -36.8184 -26.33 175.405 -36.7098 -15.1 175.108 -36.7465 -24.77 175.298 -36.7484 -34.07 175.33 -36.8559 -25.68 175.375 -36.8708 -29.69 175.37 -36.6894 -26.5 178.267 -37.519 -80.3 177.048 -39.3544 -28.41 176.883 -37.8749 -17 177.142 -39.226 -18.06 175.351 -36.2595 -34.26 177.982 -39.0438 -25.39 175.39 -36.285 -37.81 173.953 -35.0161 -24.51 178.367 -38.2446 -21.82 175.926 -37.106 -25.12 174.919 -36.649 -29.86 177.683 -39.1036 -25.49 178.491 -37.8172 -15.8 177.05 -39.4016 -27.62 177.518 -39.1631 -23.9 177.944 -39.0078 -28.86 174.637 -36.0519 -41.17 178.126 -38.7141 -29.84 176.471 -37.6886 -22.7 175.999 -37.3431 -27.44 175.38 -36.6025 -15.86 175.477 -36.1426 -5.31 175.334 -36.9012 -24.74 175.742 -36.6536 -16.36 175.924 -37.0116 -9.83 177.586 -39.1373 -24.01 178.365 -38.357 -21.18 174.553 -35.9568 -25.25 177.629 -37.7953 -13.58 177.053 -39.4519 -25.04 175.664 -36.6998 -18.24 177.49 -39.1371 -21.99 174.917 -36.6873 -24.06 177.371 -37.9179 -19.92 177.949 -39.1992 -17 177.281 -39.1955 -27.5 176.32 -37.6674 -17.08 176.994 -39.3739 -21.23 178.536 -37.6492 -17.9 177.748 -39.1009 -22.75 177.065 -39.2632 -20.44 176.235 -37.6326 -19.28 176.994 -39.4234 -20.39 178.007 -39.072 -24.34 175.503 -36.2067 -29.23 175.387 -36.9054 -24.71 176.425 -37.6566 -12.05 177.545 -39.1335 -21.77 176.739 -37.8367 -21.38 177.044 -39.3052 -22.68 177.061 -39.5076 -22.31 174.754 -36.2183 -35.8 174.557 -35.9053 -29.04 177.632 -39.0876 -18.03 177.93 -39.0536 -16.83 177.542 -37.8594 -15.1 177.454 -39.0982 -17.71 176.993 -39.4774 -18.08 177.509 -37.8898 -14.17 177.224 -39.1771 -15.99 175.087 -36.7688 -18.13 175.407 -36.6449 -14.74 177.002 -39.3338 -19.71 177.386 -39.1135 -17.17 177.04 -39.5485 -18.17 176.542 -37.7623 -17.51 177.331 -39.1303 -15.44 177.584 -39.0988 -17.86 175.402 -36.7968 -17.33 175.22 -36.7917 -17 178.031 -38.7313 -19.73 175.281 -36.9575 -8.61 177.084 -39.2223 -12.33 176.518 -37.72 -22.24 175.935 -37.0537 -14.97 177.525 -39.0969 -17.76 177.907 -39.2825 -17 178.442 -37.8764 -22.38 177.997 -38.7047 -15.34 176.655 -37.8224 -17.59 178.366 -38.1396 -26.49 177.011 -39.5207 -17.37 176.414 -37.7018 -17.54 177.342 -37.9523 -13.72 174.538 -36.0064 -14.19 176.935 -39.3923 -12.49 176.933 -39.4449 -10.07 175.377 -36.9774 -18.2 177.045 -39.5951 -12.94 177.161 -39.1849 -12.04 175.24 -36.8574 -20.93 175.408 -36.9405 -17.19 178.37 -38.0251 -21.42 177.396 -37.9462 -11.98 174.507 -35.9154 -17.22 174.799 -36.7046 -13.5 175.349 -37.0198 -13.35 177.024 -39.8097 -17.12 176.968 -39.5174 -13.64 176.784 -37.863 -10.99 177.097 -39.6144 -15.66 174.973 -36.7546 -15.3 176.996 -39.5556 -12.41 177.279 -39.151 -13.22 177.117 -39.192 -6.36 175.431 -36.9768 -10.76 174.509 -35.9663 -15.74 175.971 -37.3006 -30.05 174.794 -36.7527 -8.31 175.322 -36.9796 -17.65 175.481 -37.0512 -3.2 175.351 -37.1365 -1.49 176.989 -39.5958 -7 182.94 -35.3188 -5607.56 183.067 -35.6868 -5698.48 183.2 -36.1283 -5668.68 183.323 -35.4352 -5665.89 183.539 -35.7521 -5607.84 183.87 -36.2162 -5605.99 183.774 -35.3203 -5579.08 184.612 -35.1879 -5612.39 184.46 -36.5411 -5623.79 184.718 -36.9094 -5612.45 184.226 -36.9613 -5493.8 184.118 -35.7328 -5647.72 184.44 -36.0824 -5679.58 183.34 -35.1182 -5513.33 183.928 -36.6601 -5531.64 184.298 -35.3593 -5171.26 184.647 -37.2664 -5531.35 183.455 -36.571 -5489.76 184.777 -35.6537 -5593.9 184.6 -37.718 -5322.12 183.685 -36.9794 -5365.59 183.142 -36.9093 -5235.88 184.014 -37.4183 -5385.4 183.355 -37.3447 -5116.26 183.57 -37.7702 -5057.32 184.597 -38.1455 -5059.41 184.102 -37.9196 -4998.26 183.706 -38.1714 -4811.06 184.159 -38.3214 -4736.69 184.482 -39.1691 -4775.78 184.653 -39.5062 -4771.93 183.811 -38.525 -4627.36 183.016 -37.6886 -4339.75 184.201 -38.6712 -4805.42 184.169 -38.9903 -4802.7 183.899 -38.802 -4586.52 184.102 -39.3571 -4574.01 182.734 -37.2452 -4440.37 183.767 -39.0694 -4277.27 183.547 -38.7679 -4279.48 183.517 -39.4003 -4110.79 183.229 -38.0789 -4289.94 183.336 -39.0631 -4139.27 182.697 -39.422 -3958.29 182.744 -38.0293 -3697.57 182.499 -37.6629 -3973.5 183.396 -38.4405 -3929.48 182.218 -37.342 -4142.76 182.921 -39.0478 -3947.43 181.828 -37.3894 -3691.51 182.954 -38.3814 -4105.46 182.018 -37.6791 -3771.35 181.726 -39.0385 -3611.87 181.019 -39.7236 -3429.13 180.872 -37.7256 -3529.52 181.863 -38.7036 -3516.66 182.264 -38.0147 -3387.66 181.598 -37.6637 -3490.89 181.237 -37.5546 -3312.55 181.425 -38.2166 -3590.07 181.246 -37.9328 -3543.52 181.34 -38.4657 -3539.43 181.752 -38.0305 -3403.43 181.679 -38.3983 -3102.25 186.918 -36.1183 -5324 187.1 -36.4815 -5181.96 187.528 -36.1277 -5236.64 186.547 -35.0157 -5593.3 186.167 -35.2441 -5627.62 187.041 -35.7288 -5234.02 185.662 -35.2649 -5637.29 186.563 -35.4563 -5580.19 185.08 -35.1887 -5594.76 186.078 -35.5831 -5610.34 188.188 -35.163 -5169.29 187.689 -35.5208 -5256.5 187.26 -36.8229 -5368.24 187.167 -37.1897 -5251.41 187.086 -35.2344 -5614.5 185.309 -35.5385 -5629.97 188.273 -35.5287 -5067.58 188.18 -35.9249 -4889.61 186.495 -35.8704 -5434.87 185.765 -37.1084 -5264.54 186.148 -36.8437 -5495.23 185.228 -37.1031 -5548.17 185.57 -36.8235 -5699.19 186.432 -36.3592 -5517.39 186.155 -37.7238 -5169.19 186.749 -37.5728 -5324.35 188.669 -35.7349 -4921.67 187.327 -37.6284 -5286.83 189.132 -35.9534 -4902.99 188.668 -35.3397 -4440.23 186.623 -37.1467 -5390.07 187.631 -36.6482 -5230.65 189.065 -35.2264 -5354.82 189.088 -35.5535 -5058.41 185.677 -37.4458 -5355.48 185.665 -35.6608 -5716.28 188.703 -36.1545 -5039.46 185.141 -37.5618 -5471.48 187.583 -37.0043 -5269.5 185.097 -36.6765 -5527.86 186.607 -38.0616 -5085.05 185.617 -37.863 -5223.24 186.071 -38.1682 -5204.45 188.219 -36.4825 -5202.99 188.036 -36.9775 -5197.87 187.171 -38.0103 -5160.32 189.158 -36.3064 -4613.85 185.563 -38.2823 -5280.19 184.954 -36.2195 -5629.59 187.793 -37.4171 -5270.85 186.8 -36.8038 -5339.46 185.097 -37.9963 -5254.99 188.879 -36.585 -4517.08 185.94 -35.9768 -5510.92 187.762 -37.9689 -5255.61 188.596 -36.9476 -4912.12 186.508 -38.5162 -5305.86 185.374 -35.914 -5682.46 187.034 -38.4512 -5094.74 186.922 -38.8966 -5100.47 185.993 -38.6031 -5033.8 187.546 -38.3969 -5190.07 187.451 -38.8431 -5064.24 188.403 -37.358 -5224.67 189.49 -36.6789 -5188.41 189.128 -36.9834 -4769.44 188.277 -37.7931 -5087.85 186.407 -38.9475 -5164.64 185.503 -38.6909 -5152.08 185.064 -38.402 -5190.9 188.913 -37.3136 -5081.92 189.592 -36.2211 -4980.83 185.906 -39.0137 -5057.6 187.963 -38.3815 -5025.97 187.929 -38.7217 -4899.36 189.387 -35.3709 -3828.55 186.827 -39.3425 -4894.09 185.012 -38.7785 -5046.33 185.636 -36.4057 -5721.28 188.808 -37.7159 -4942.68 185.788 -39.4191 -4923.54 188.268 -38.2075 -4824.33 189.541 -37.0679 -5221.42 186.301 -39.3754 -4882.21 188.317 -38.5623 -4818.4 185.4 -39.077 -5055.95 185.243 -39.4522 -4979.93 184.9 -39.1362 -4906.47 189.359 -37.3186 -4963.19 186.706 -39.7597 -4793.39 189.214 -37.6114 -4826.9 185.624 -39.7942 -4663.92 188.713 -38.1131 -4492.88 187.36 -39.3058 -4887.34 187.233 -39.7368 -4777.91 189.725 -37.3133 -5224.76 188.38 -38.9655 -4652.69 186.173 -39.7697 -4772.74 187.769 -39.691 -4721.95 188.606 -38.4108 -4664.36 189.583 -35.7501 -4479.25 189.744 -38.3554 -4746.35 188.286 -39.6912 -4582.02 189.727 -35.4006 -2870.45 189.431 -38.4966 -4642.63 188.698 -39.7076 -4490.23 189.326 -38.058 -4853.6 188.731 -38.7315 -4624.94 185.063 -39.8338 -4772.49 189.008 -38.4495 -4712.72 189.631 -37.6361 -5163.49 186.186 -37.3069 -4751.41 192.835 -34.9871 -5241.58 190.06 -36.0828 -4946.53 192.689 -35.4077 -5187.14 192.247 -35.002 -5129.45 190.113 -35.2572 -4969.41 191.187 -35.1092 -5015.54 193.123 -35.7809 -5141.32 191.705 -35.0864 -5027.77 193.021 -36.1576 -4904.31 193.263 -35.3356 -5216.26 192.517 -35.8876 -4960.47 190.664 -35.1654 -5162.64 191.155 -35.5098 -5078.98 192.664 -36.2616 -4798.61 194.748 -39.4882 -5089.4 193.999 -36.7534 -4675.21 194.221 -37.538 -5103.99 194.683 -37.5138 -5266.22 194.269 -38.7369 -5342.56 193.229 -38.6681 -5305.47 194.682 -38.6576 -5043.87 192.824 -38.7416 -4761.88 191.366 -36.2227 -4898.24 193.488 -36.137 -4385.71 192.968 -38.3995 -5112.39 194.827 -38.4043 -5095.81 193.893 -38.3585 -5318.97 194.397 -38.3425 -5097.08 194.73 -39.0184 -4672.35 193.41 -38.3703 -5271.1 194.647 -37.9519 -5310.92 193.558 -37.9849 -5181.7 194.067 -37.9456 -5222.05 193.079 -38.0374 -5032.21 193.312 -36.4005 -4454.16 194.731 -36.2156 -5161.9 194.065 -36.2591 -4788.43 194.98 -35.2135 -5239.94 193.692 -37.5686 -5052.09 194.435 -35.2345 -5277.95 193.859 -35.2729 -5091.62 193.655 -36.4619 -4321.28 194.707 -39.8836 -5241.76 190.86 -36.0848 -4822.18 194.211 -39.1771 -5071.3 194.582 -36.7241 -5041.77 191.258 -36.9106 -4907.11 194.401 -37.1521 -5161.39 191.054 -36.4899 -5037.11 190.721 -36.7377 -4946.88 193.84 -37.1569 -4787.01 192.969 -36.4842 -4722.5 191.4 -37.3196 -4814.39 191.141 -35.8627 -5067.13 193.695 -35.7575 -4812.82 193.701 -38.8057 -5011.46 190.625 -35.6413 -4910.68 190.54 -36.3278 -4558.55 190.896 -38.2618 -4869.28 190.885 -37.1327 -4776.13 192.643 -38.4627 -4486.14 191.74 -35.8736 -4909.94 193.411 -36.7595 -3589.16 192.082 -35.446 -4960.51 191.824 -36.3376 -4731.09 190.506 -38.414 -4849.82 190.624 -38.0739 -4989.7 192.575 -36.5128 -4620.38 191.575 -35.4068 -5035.69 194.186 -39.6392 -4814.82 190.121 -36.5789 -4633.82 190.079 -38.4487 -4768.12 192.251 -36.2606 -4666.13 190.085 -37.5098 -5205.7 191.59 -36.6356 -4630.11 190.986 -38.5743 -4777.75 193.197 -37.6362 -4694.7 190.567 -37.7317 -4585.76 189.988 -37.063 -4712.56 192.185 -36.6902 -4704.93 192.81 -36.8644 -4724.51 190.067 -38.0299 -5015.33 190.633 -38.8202 -4695.56 190.499 -37.3227 -4058.91 192.395 -37.079 -4630.39 191.151 -38.9868 -4781.62 191.471 -37.7036 -4748.72 191.866 -37.0931 -4722.69 191.13 -39.4464 -4776.77 191.866 -37.5319 -4658.42 191.58 -39.2588 -4659.9 192.322 -37.4249 -4547.9 190.433 -35.9644 -3166.15 193.051 -39.7284 -4764.13 192.794 -37.3222 -4354.13 191.279 -38.3151 -4084.96 192.581 -38.1397 -4570.47 191.633 -39.7375 -4788.1 192.237 -37.8042 -4482.6 191.852 -37.8479 -3658.94 192.762 -39.8724 -4998.33 191.065 -37.949 -4508.15 190.983 -37.5279 -2840.33 193.593 -39.8061 -3696.64 192.302 -39.8212 -5078.07 193.15 -39.4119 -4359.67 191.585 -38.9238 -3876.13 193.674 -39.3111 -4784.57 193.29 -37.2123 -3214.77 192.704 -37.7267 -4159.09 191.43 -38.6481 -4448.01 192.441 -38.6386 -3740.42 191.58 -38.0584 -3146.41 192.058 -39.4076 -4561.49 192.632 -39.4972 -3409.3 193.217 -39.0178 -3830.69 192.763 -39.1146 -2274.28 192.068 -38.1636 -2520.85 192.193 -38.8192 -3674.54 192.509 -38.8896 -3409.37 191.719 -38.399 -2692.29 190.087 -35.6776 -4304.46 190.443 -36.967 -3942.42 191.925 -39.0341 -3785.24 191.826 -38.7238 -2772.17 192.369 -38.3837 -2166.34 192.105 -38.5187 -873.62 192.338 -39.124 -2535.18 199.807 -36.7365 -4997 198.37 -36.5876 -4997 198.013 -37.9154 -4997 198.739 -36.9571 -4997 197.472 -37.7762 -4997 196.258 -39.3815 -4997 195.553 -37.9503 -4997 198.17 -37.048 -4997 195.828 -38.2923 -4997 195.798 -35.8707 -4997 197.917 -36.6118 -4997 195.284 -39.2854 -4363.71 196.528 -38.0145 -4997 195.895 -39.5623 -4997 197.474 -36.392 -4997 195.113 -37.7348 -5402.72 195.843 -39.0651 -4997 195.245 -38.2551 -5063.38 197.099 -36.6703 -4997 196.347 -38.3222 -4997 199.424 -38.7569 -4997 196.436 -39.0964 -4997 199.808 -39.6946 -4997 196.774 -38.297 -4997 197.597 -36.8693 -4997 197.014 -37.9614 -4997 199.77 -39.2142 -4997 198.853 -36.5738 -4997 199.739 -37.3479 -4997 196.488 -39.7387 -4997 199.169 -37.6504 -4997 197.11 -39.7154 -4997 199.184 -38.4242 -4997 196.496 -36.5593 -4997 198.597 -39.0917 -4997 199.399 -39.4794 -4997 197.665 -39.8466 -4997 199.12 -37.2496 -4997 195.935 -35.2354 -4997 196.142 -38.6989 -4997 198.679 -37.3847 -4997 199.331 -39.8446 -4997 195.645 -38.6231 -4997 195.183 -38.765 -4839.72 196.298 -36.0371 -4997 195.974 -36.2723 -4997 199.673 -37.9447 -4997 198.238 -37.5192 -4997 196.891 -36.1371 -4997 196.038 -37.8899 -4997 198.856 -38.2657 -4997 198.451 -38.2839 -4997 199.183 -38.0855 -4997 197.593 -38.1838 -4997 198.028 -38.3366 -4997 198.86 -38.6571 -4997 199.592 -38.3835 -4927.71 197.222 -38.4595 -4997 197.755 -38.6177 -4997 195.95 -37.4663 -4997 196.451 -37.5743 -4997 195.552 -37.5648 -4997 197.037 -37.4018 -4997 197.68 -37.3733 -4997 195.032 -37.2114 -5363.15 198.647 -37.8745 -4997 195.332 -39.8681 -5153.44 196.659 -39.4309 -4997 197.65 -39.439 -4997 198.322 -39.4838 -4997 198.924 -39.5132 -4997 197 -39.2224 -4997 198.001 -39.0414 -4997 198.07 -39.7827 -4997 197.397 -38.9204 -4997 198.29 -38.6756 -4997 196.76 -38.7272 -4997 199.168 -39.1135 -4997 198.204 -35.5714 -4997 197.7 -35.6805 -4997 198.967 -35.6456 -4997 197.34 -35.5253 -4997 196.91 -35.587 -4997 195.366 -35.6071 -5083.43 200.029 -35.771 -4997 195.731 -35.5045 -4997 199.529 -35.8683 -4997 196.529 -35.7532 -4997 196.116 -35.6289 -4997 197.954 -36.1458 -4997 198.608 -36.1484 -4997 195.395 -36.1667 -5276.74 199.872 -36.238 -4997 199.271 -36.2967 -4997 197.384 -35.9177 -4997 198.025 -35.0551 -4997 197.608 -35.2343 -4997 198.561 -35.0623 -4997 197.099 -35.2072 -4997 196.697 -35.1763 -4997 195.477 -35.1976 -4997 200.021 -35.2639 -4997 199.118 -35.1282 -4997 196.408 -35.3723 -4997 199.533 -35.4161 -4997 196.081 -37.1852 -4997 195.623 -37.1457 -4997 196.481 -37.0676 -4997 195.209 -36.7014 -5051.42 196.874 -36.9533 -4997 199.26 -36.8665 -4997 197.257 -37.0536 -4997 195.884 -36.7278 -4997 202.306 -39.5197 -4997 204.706 -36.3452 -4997 203.109 -39.499 -4997 202.444 -36.476 -4997 204.667 -38.6677 -4997 203.644 -36.3343 -4997 203.073 -36.4273 -4997 204.197 -36.3757 -4997 202.452 -38.9808 -4997 202.941 -36.8158 -4997 204.07 -38.4814 -4997 204.037 -36.7312 -4997 204.628 -36.8524 -4997 203.53 -36.8691 -4997 202.712 -39.6995 -4997 203.187 -36.0463 -4997 202.7 -36.0146 -4997 203.909 -36.0477 -4997 204.713 -35.962 -4997 202.945 -39.0711 -4997 202.132 -35.982 -4997 204.299 -36.0011 -4997 202.589 -39.3301 -4997 203.522 -35.8617 -4997 203.724 -37.335 -4997 204.801 -37.4834 -4997 202.317 -39.8103 -4997 200.802 -37.3702 -4997 200.251 -39.973 -4997 200.387 -37.4969 -4997 204.607 -39.878 -4997 204.174 -37.6276 -4997 204.094 -38.0288 -4997 204.152 -37.1602 -4997 203.139 -37.2799 -4997 203.616 -37.7178 -4997 204.646 -37.9321 -4997 201.237 -37.6408 -4997 200.837 -37.8523 -4881.37 201.879 -39.5855 -4997 201.203 -37.2788 -4997 204.524 -38.2865 -4997 202.639 -38.584 -4997 204.937 -35.672 -4997 203.428 -39.2681 -4997 201.445 -35.2713 -4997 204.384 -35.6095 -4997 201.804 -35.5676 -4997 202.355 -35.5511 -4997 204.596 -35.1349 -4997 203.85 -39.2176 -4997 201.93 -35.0801 -4997 201.075 -35.2258 -4997 202.622 -35.0481 -4997 203.503 -35.4929 -4997 203.017 -35.5915 -4997 203.913 -35.7031 -4997 203.227 -35.1259 -4997 203.863 -35.2056 -4997 204.894 -39.4959 -4997 201.676 -35.9224 -4997 204.816 -39.1169 -4997 203.18 -39.8635 -4997 202.033 -39.1732 -4997 201.403 -38.0467 -4997 203.548 -38.1982 -4997 201.34 -39.1839 -4685.68 200.759 -39.8659 -4997 203.784 -39.6949 -4997 201.986 -38.2066 -4997 203.041 -38.2835 -4997 201.322 -39.7346 -4997 204.359 -39.3919 -4997 200.289 -39.1461 -4943.19 202.538 -38.0502 -4997 203.005 -37.7952 -4997 201.657 -37.8291 -4997 202.049 -37.7487 -4997 202.471 -37.6467 -4997 202.048 -38.7176 -4997 203.463 -38.7785 -4997 199.969 -38.7762 -4997 200.286 -39.5454 -4997 200.768 -39.3826 -4399.87 204.206 -38.9482 -4997 200.615 -38.8197 -4122.84 201.555 -38.4578 -4997 200.309 -36.1755 -4997 201.775 -36.331 -4997 201.277 -36.3483 -4997 200.782 -36.3864 -4997 201.392 -36.0535 -4997 200.996 -36.0143 -4997 202.541 -37.0008 -4997 200.325 -36.586 -4997 201.98 -36.7893 -4997 201.186 -36.6582 -4997 201.541 -36.6267 -4997 200.872 -36.9079 -4997 200.769 -35.3793 -4997 200.427 -35.5372 -4997 201.237 -35.6374 -4997 200.42 -35.1984 -4997 200.548 -35.9252 -4997 200.789 -35.6956 -4997 201.614 -37.4683 -4997 202.651 -37.4017 -4997 202.113 -37.2946 -4997 201.489 -37.0069 -4997 200.328 -37.0655 -4997 200.24 -37.8787 -4590.23 201.118 -38.2551 -4715.79 201.622 -38.8427 -4708.9 201.153 -38.6463 -4482.81 200.123 -38.3371 -4232.36 200.679 -38.2932 -4189.13 209.41 -37.4115 -5226.93 209.546 -37.8223 -5368.79 209.45 -37.0153 -5130.07 209.075 -37.6289 -5132.86 209.169 -38.0228 -5292.76 209.36 -36.5933 -4997 208.742 -37.905 -5056.96 209.523 -38.3431 -5233.12 209.002 -37.2012 -4997 209.451 -36.1953 -4997 208.961 -38.4148 -5196.12 208.485 -38.6036 -5119.32 209.388 -35.6404 -4997 208.423 -38.1826 -4997 209.317 -35.1358 -4997 209.444 -38.9042 -5085.18 208.981 -36.776 -4997 208.524 -37.4063 -4997 208.887 -38.9221 -5062.25 208.111 -38.7222 -4999.21 208.041 -38.3714 -4997 208.445 -38.9869 -5030.96 208.003 -39.042 -4997 208.555 -36.9348 -4997 207.516 -39.0993 -4997 208.902 -36.2986 -4997 208.232 -37.7717 -4997 207.056 -38.8238 -4997 205.24 -36.1823 -4997 205.312 -38.8626 -4997 207.553 -38.595 -4997 209.039 -35.9113 -4997 208.017 -38.0221 -4997 207.607 -38.0832 -4997 207.072 -38.1322 -4997 208.077 -37.0296 -4997 206.968 -38.4659 -4997 205.215 -36.6938 -4997 208.567 -36.5578 -4997 206.553 -38.5679 -4997 207.743 -37.7151 -4997 207.944 -37.3989 -4997 205.796 -35.508 -4997 205.278 -35.3472 -4997 207.419 -39.4974 -4997 207.114 -39.1728 -4997 206.945 -39.4078 -4997 205.65 -35.0936 -4997 207.868 -39.9646 -4997 207.505 -37.4091 -4997 205.739 -40.0596 -4997 205.509 -35.8026 -4997 205.947 -39.1432 -4997 206.584 -39.0246 -4997 206.159 -38.284 -4997 207.172 -37.6638 -4997 206.572 -38.1976 -4997 205.151 -37.904 -4997 207.084 -39.8603 -4997 205.659 -38.1152 -4997 206.323 -39.935 -4997 205.124 -38.3398 -4997 206.578 -37.7749 -4997 206.067 -37.9154 -4997 205.503 -37.6666 -4997 208.839 -39.6218 -4997 208.398 -39.7791 -4997 205.744 -39.7344 -4997 205.268 -39.7932 -4997 205.984 -39.534 -4997 208.406 -39.3651 -4997 206.484 -39.4785 -4997 207.935 -39.4579 -4997 205.422 -39.379 -4997 205.913 -38.6108 -4997 208.154 -35.6879 -4997 207.733 -35.7728 -4997 208.596 -35.8481 -4997 207.276 -35.8384 -4997 205.953 -35.8535 -4997 208.85 -35.5624 -4997 206.849 -35.5732 -4997 206.325 -35.6651 -4997 209.034 -35.3242 -4997 207.594 -36.2869 -4997 208.252 -36.1546 -4997 206.845 -36.1069 -4997 205.855 -36.1888 -4997 206.277 -36.079 -4997 206.061 -35.2858 -4997 206.458 -35.2197 -4997 208.931 -35.0565 -4997 207.807 -35.2787 -4997 207.304 -35.4338 -4997 208.382 -35.4307 -4997 206.887 -35.1751 -4997 208.669 -35.2088 -4997 205.305 -37.1805 -4997 205.686 -36.9725 -4997 207.579 -37.0838 -4997 207.109 -37.1972 -4997 206.683 -36.9451 -4997 206.183 -36.9626 -4997 207.704 -36.7459 -4997 207.131 -36.7042 -4997 205.756 -36.6004 -4997 206.608 -37.3299 -4997 205.979 -37.4105 -4997 206.388 -36.5171 -4997 208.125 -36.6183 -4997 190.256 -38.6889 -4629.54 189.827 -38.7159 -4636.04 188.87 -39.1352 -4609.87 189.279 -38.8618 -4605.27 188.983 -39.531 -4604.83 190.229 -39.005 -4570.1 191.092 -39.8223 -4727.32 190.67 -39.2196 -4578.69 189.779 -39.144 -4644.29 190.664 -39.6247 -4620.5 190.221 -39.389 -4632.78 189.349 -39.3244 -4472.07 189.792 -39.5389 -4600.45 190.203 -39.7761 -4607.75 189.419 -39.7105 -4644.2 189.805 -39.8507 -4606.58 180.243 -37.1097 -4590.56 179.866 -37.687 -3855.76 179.972 -37.2481 -3720.78 179.941 -36.9661 -3361.07 180.071 -37.967 -3588.31 179.704 -37.4316 -2848.4 178.545 -35.5039 -2722.44 178.239 -35.4273 -2741.45 178.568 -35.247 -2672.58 179.57 -36.9251 -2256.92 179.36 -36.2286 -2649.31 179.348 -35.1043 -1944.67 178.92 -38.0248 -648.81 179.271 -35.9068 -2564.25 178.83 -35.4121 -2227.98 179.103 -35.6053 -2567.04 178.593 -36.0057 -2468.17 179.034 -36.441 -2495.04 179.117 -35.3243 -2134.39 178.96 -36.1368 -2504.53 178.643 -36.3746 -2483.17 178.799 -36.6697 -2394.33 178.916 -36.9049 -2229.83 178.932 -35.1007 -2082.5 178.708 -37.1116 -1805.01 179.032 -37.1455 -1706.33 179.666 -37.162 -2105.7 179.388 -37.4859 -1296.89 179.221 -37.3218 -1392.95 178.973 -37.3572 -707.98 179.11 -37.5158 -829.46 179.09 -37.6811 -975.65 178.837 -37.9407 -617.44 178.797 -38.039 -329.18 178.959 -37.7577 -741.29 178.754 -37.8778 -302.86 178.724 -37.9672 -164.11 178.596 -38.5547 -150.53 178.747 -37.7857 -153.7 178.702 -38.0505 -214.14 178.667 -38.3691 -161.96 178.679 -37.9019 -138.18 178.747 -38.1189 -241.31 178.954 -37.6188 -119.17 178.68 -37.6059 -154.2 178.654 -38.0099 -131.27 178.863 -37.6814 -213.36 178.686 -38.1799 -148.65 178.809 -37.5957 -96.44 178.584 -38.0909 -94.03 178.581 -38.0227 -97 178.53 -38.484 -104.69 178.753 -37.6889 -126.56 178.59 -38.1629 -126.85 178.621 -37.9501 -108.98 178.648 -38.3061 -129.16 178.595 -38.4165 -103.26 178.688 -37.7337 -91.88 178.627 -38.2385 -125.28 178.603 -38.3506 -102.97 178.615 -37.8764 -111.65 178.643 -37.6834 -62.98 178.51 -38.1818 -75.32 178.522 -38.4218 -83.44 178.569 -38.2966 -96.35 178.514 -38.1239 -75.28 178.533 -38.3649 -80.55 178.636 -37.735 -69.3 163.886 -39.8251 -3520.55 164.007 -38.7019 -3171.71 163.977 -38.9709 -3678.99 164.058 -39.2774 -3392.08 163.927 -38.4193 -3166.65 163.659 -37.813 -2351.28 164.172 -39.5592 -2955 163.945 -38.0648 -2298.69 163.763 -39.5151 -2597.09 163.654 -36.5951 -2758.89 163.677 -36.8731 -2474.53 163.655 -37.5327 -1693.05 163.732 -37.1261 -1907.04 163.98 -36.4683 -1868.72 163.973 -36.7449 -1685.64 163.993 -36.9932 -1701.05 164.038 -37.8039 -1610.35 164.044 -36.2087 -1688.95 164.019 -37.1978 -1470.35 163.854 -35.9997 -1619.93 163.85 -37.3579 -1404.67 163.963 -37.5927 -1328.79 164.17 -35.9984 -1411.51 163.739 -35.7606 -1548.1 164.055 -35.8022 -1610.99 163.966 -35.5915 -1681.52 163.931 -35.4217 -1560.3 164.155 -35.4513 -1367.96 163.826 -35.2707 -1545.47 164.061 -35.3079 -1421.81 163.778 -35.0571 -1358.79 164.093 -35.1157 -1087.96 157.108 -36.5192 -4609.3 157.104 -36.1528 -4526.71 157.091 -36.9691 -4722.94 158.69 -39.8009 -4922.47 159.264 -36.5756 -4897.27 158.913 -36.8852 -4917.17 158.432 -37.5585 -4926.7 158.98 -37.8497 -5046.99 158.86 -38.1361 -4866.27 158.512 -37.9254 -4854.33 159.205 -36.1622 -5043.98 159.364 -36.9039 -4978.07 158.859 -37.5608 -4923.33 159.168 -39.6797 -4941.77 159.047 -38.4405 -4861.92 158.745 -39.5115 -4874.32 158.371 -39.631 -4965.41 159.277 -38.0456 -5047.75 158.457 -36.9312 -4777.56 160.778 -37.959 -4923.61 157.688 -38.4263 -4860.15 158.023 -36.8001 -4672.76 160.849 -37.4469 -4788.25 159.82 -39.7495 -4927.33 159.389 -37.5928 -4930.41 159.646 -37.1552 -4941.53 159.136 -37.2198 -4958.05 159.018 -39.2313 -5005.27 158.647 -37.2346 -4992.62 158.755 -35.7166 -4740.99 158.736 -38.8497 -4903.71 159.91 -38.7514 -4975.9 158.612 -36.4461 -4846.96 158.105 -37.2932 -4798.31 158.499 -39.2564 -4917.69 157.23 -38.4999 -4883.02 159.687 -35.9113 -5021.03 160.024 -36.0638 -4966.48 159.213 -35.7095 -4810.37 159.34 -38.8155 -4754.65 160.122 -39.4399 -4903.34 157.979 -38.5538 -4911.27 160.191 -39.11 -4836.19 160.152 -35.7672 -4269.39 160.332 -37.7301 -4850.33 158.915 -35.4605 -4857.2 160.218 -38.2659 -4719.16 159.954 -37.4606 -4792.78 160.795 -38.4255 -4878.23 159.829 -36.7114 -5022.39 160.165 -37.0583 -5014.41 158.815 -35.9964 -4813.41 157.143 -38.9967 -4697.63 158.038 -37.7786 -4739.61 157.547 -38.0706 -4710.81 158.135 -38.9208 -4855.78 160.677 -37.0415 -4944.66 159.792 -37.9099 -4966.81 157.64 -38.7694 -4795.71 160.434 -38.7567 -4849.9 159.833 -35.4721 -4428.85 158.803 -35.1448 -4930 160.401 -37.3385 -4779.3 159.662 -39.2474 -4844.91 157.086 -38.1531 -4728.55 157.617 -39.1854 -4680.92 158.02 -39.397 -4788.83 159.337 -35.2212 -4787.38 158.29 -35.9225 -4675.27 160.455 -36.6764 -4895.01 157.994 -39.7623 -4813.14 159.6 -38.3594 -4694.01 158.036 -38.2025 -4816.37 158.453 -38.4338 -4680.64 157.581 -37.1298 -4616.79 157.174 -39.4606 -4681.98 157.433 -36.3303 -4666.92 157.156 -37.4266 -4685.1 157.602 -37.598 -4723.12 157.08 -35.8403 -4643.04 158.491 -35.4749 -4806.11 157.523 -36.6852 -4628.75 160.2 -36.3368 -4801.31 158.267 -35.0715 -4695.75 157.143 -34.9491 -4596.19 157.573 -35.9413 -4665 157.929 -35.5042 -4721.42 157.15 -37.8244 -4549.86 157.688 -35.086 -4522.9 157.27 -35.479 -4699.24 157.909 -36.3543 -4676.73 159.844 -35.0999 -4236.57 160.414 -36.0123 -3436.9 160.365 -35.4656 -3549.52 160.778 -36.2641 -3204.43 160.614 -35.7016 -2563.95 159.697 -36.2927 -4437.14 160.289 -35.1304 -3040.91 160.787 -35.9526 -2852.73 161.27 -37.718 -5001.83 161.219 -38.162 -4861.9 161.388 -37.303 -4936.69 161.662 -37.94 -4846.77 161.193 -38.522 -4775.35 161.102 -37.0763 -4838.5 161.631 -38.4019 -4820.23 162.076 -38.0933 -4776.6 161.507 -36.921 -4348.42 162.148 -38.547 -4849.07 162.283 -39.2621 -4737.67 162.594 -38.4593 -4833.64 162.718 -39.2705 -4511.51 162.342 -39.6716 -4665.12 162.444 -38.2007 -4728.51 162.519 -38.8734 -4809.77 161.99 -39.0228 -4789.65 162.98 -38.9424 -4430.75 161.731 -37.5446 -4614.38 162.034 -37.749 -4482.4 162.987 -39.6424 -3795.15 161.077 -36.681 -4601.2 162.988 -38.57 -3929.82 161.846 -37.1662 -3946.27 162.883 -38.1247 -4651.54 162.515 -37.779 -4247.01 163.453 -39.7732 -3109.34 163.208 -39.2186 -2748 162.966 -37.7866 -4185.3 163.245 -37.9068 -4015.87 162.178 -37.434 -3730.53 163.514 -38.7805 -3788.47 163.437 -38.2399 -3369.16 162.894 -37.5533 -4008.09 161.64 -36.5562 -3440.69 161.377 -36.2316 -3249.92 161.961 -36.7895 -3158.35 163.285 -37.5946 -3612.01 163.652 -39.2041 -3048.2 162.307 -37.0363 -3050.12 162.632 -37.3289 -3357.51 161.416 -35.8792 -2929.93 161.872 -36.241 -3049.22 162.035 -36.496 -3015.69 161.444 -35.5425 -2932.7 163.409 -39.465 -2496.04 161.731 -35.9953 -2901.25 161.814 -35.7211 -2910.67 161.081 -36.0116 -2756.15 162.146 -35.9313 -2969.81 161.484 -35.2512 -2737.51 162.288 -36.2649 -3009.02 161.048 -35.7305 -2940.06 162.633 -36.3387 -2701.42 162.648 -36.0089 -2972.8 162.495 -35.6798 -2715.34 162.972 -36.2443 -2937.61 163.309 -36.1762 -2697.8 161.934 -35.3441 -2579.01 162.414 -36.6285 -2821.5 162.163 -35.6183 -2816.2 163.073 -37.2775 -2745.26 162.865 -36.5571 -2652.87 160.927 -35.297 -3121.62 163.122 -35.9216 -2249.13 163.279 -36.4733 -2835.34 163.404 -36.7376 -2597.75 161.375 -35.0136 -2754.3 163.129 -36.7403 -2698.95 163.324 -37.0032 -2590.67 162.813 -36.9335 -2948.49 161.73 -35.0519 -2697.92 162.878 -35.6961 -2372.44 162.064 -35.0087 -2028.84 162.403 -35.4088 -2353.44 163.486 -37.3154 -2132.68 163.658 -36.2696 -2316.63 163.512 -35.9725 -1775.48 162.758 -35.4539 -1962.31 163.171 -35.6606 -1700.48 162.358 -35.1328 -1759.85 163.425 -35.7197 -1649.22 162.689 -35.2028 -1622.3 163.092 -35.4621 -1603.48 163.354 -35.5119 -1547.9 163.011 -35.2479 -1557.73 163.426 -35.2226 -1422.92 162.931 -35.0349 -1422.24 163.666 -35.4992 -1557.54 163.175 -35.0686 -1392.06 160.529 -39.7486 -4911.98 160.446 -39.3377 -4721.14 160.564 -39.0803 -4858.92 160.828 -39.2969 -4844.55 161.377 -38.7543 -4766.4 160.941 -38.8662 -4901.47 161.08 -39.5697 -4642 161.713 -38.7897 -4777.78 161.406 -39.1791 -4716.78 161.872 -39.4354 -4767.68 161.761 -39.8535 -4820.04 161.46 -39.6104 -4684.55 176.925 -30.2025 -4259.63 176.456 -30.2366 -4397.13 177.233 -30.5506 -4230.54 177.416 -30.143 -3998.72 177.106 -30.9646 -4217.07 176.769 -30.5985 -4320.17 175.996 -30.2864 -4190.06 176.293 -30.6494 -4231.35 175.82 -30.6865 -4159.23 175.627 -30.3454 -4160.56 175.277 -30.2449 -4183.57 176.596 -31.0739 -4190.04 177.563 -30.8883 -4117.34 177.462 -31.2826 -4040.63 176.116 -31.0255 -4126.76 177.012 -31.3782 -4061.46 175.758 -31.045 -4092.35 177.686 -30.5213 -4034.7 175.515 -30.8942 -4121.05 176.275 -31.3258 -3988.82 175.398 -30.5995 -4181.73 175.891 -31.361 -4040.56 175.45 -31.2439 -4089.23 176.587 -31.5739 -3987.71 176.183 -31.5946 -3992.08 177.335 -31.6537 -3968.87 175.587 -31.5528 -3773.03 175.869 -31.7297 -3960.56 175.007 -30.5314 -3999.91 176.97 -31.7168 -3926.77 175.125 -30.9294 -4031.09 174.871 -30.1946 -3989.45 176.297 -31.9472 -3882.21 176.745 -31.9246 -3888.97 175.799 -32.0764 -3851.71 174.731 -30.7841 -3902.83 177.565 -31.8981 -3819.16 175.711 -32.4281 -3895.98 177.158 -32.0262 -3876.68 176.164 -32.3486 -3698.23 174.684 -30.4672 -3957.67 175.332 -32.1892 -3875.58 175.284 -31.5628 -3410.16 174.485 -30.1979 -3843.59 176.712 -32.2967 -3803.54 175.709 -32.7286 -3713.65 175.457 -31.8322 -3861 174.791 -31.0989 -3790.14 175.232 -32.6481 -3699.92 176.009 -32.6356 -3759.4 175.547 -32.9946 -3663.55 176.441 -32.7169 -3669.99 174.939 -32.2912 -3746.76 176.011 -32.9622 -3718.35 177.227 -32.4195 -3770.74 174.453 -31.0297 -3691.65 174.347 -30.6081 -3768.27 175.4 -33.2983 -3283.12 175.132 -33.0669 -3619.18 176.954 -32.6973 -3545.5 174.85 -32.9001 -3630.2 174.871 -31.8367 -3860.04 174.618 -31.3848 -3407.2 174.39 -31.6405 -3836.71 174.587 -32.2269 -3742.2 174.649 -32.5931 -3621.45 175.776 -33.2835 -3637.13 176.395 -33.0739 -3579.82 174.171 -31.3258 -3675.09 177.572 -32.2034 -3723.1 175.047 -33.3932 -3142.11 175.03 -31.3444 -3401.13 174.717 -33.2194 -3596.89 174.063 -30.9225 -3304.46 174.297 -32.3904 -3684.51 174.08 -31.6512 -3611.13 177.326 -32.7236 -3538.08 174.469 -32.9619 -3455.75 177.612 -32.5581 -3490.05 176.765 -33.0344 -3359.5 174.175 -32.7143 -3500.22 174.053 -30.2312 -3497.22 177.19 -33.0036 -3617.27 173.889 -32.3955 -3419.06 176.181 -33.3134 -3034.08 177.431 -33.2483 -3116.92 177.622 -32.9448 -3149.82 173.97 -30.5901 -3164.95 175.587 -33.5075 -3054.29 173.779 -32.0708 -3301.78 175.035 -33.6416 -2682.94 174.061 -33.0869 -3177.64 176.575 -33.3423 -3134.71 177.444 -33.6054 -3234.08 173.692 -32.8071 -2301.89 173.782 -31.1513 -3322.16 173.821 -31.4755 -3194.66 175.301 -33.5743 -2701.32 173.562 -32.5018 -2583.03 177.025 -33.3767 -3097.43 175.927 -33.6252 -2697.99 177.61 -33.9235 -3114.47 173.538 -32.2332 -2996.42 173.729 -30.1317 -3245.91 177.297 -33.9106 -3079.12 177.031 -33.7602 -2922.26 173.568 -31.3223 -3186.05 173.724 -30.4124 -2897.24 173.454 -31.9095 -2463.94 175.534 -33.7893 -2450.82 177.006 -34.1112 -2992.83 177.41 -34.1592 -3043.37 173.515 -31.5813 -2967.51 176.747 -33.917 -2795.42 176.698 -33.646 -2833.55 177.76 -34.1893 -2642.35 176.852 -34.392 -2661.43 173.289 -31.3404 -2524.04 176.501 -33.8572 -2628.19 176.519 -34.1853 -2685.62 173.677 -30.7733 -2627.32 177.22 -34.4328 -2716.91 173.447 -30.5185 -2627.38 177.834 -34.9113 -2852.84 173.478 -30.2296 -2734.86 175.827 -33.9702 -2695.09 176.347 -33.6207 -2689.83 177.569 -34.388 -2895.32 176.064 -34.1997 -2337.84 176.932 -34.6472 -2483.44 174.728 -33.5808 -2494.81 176.194 -33.9168 -2604.86 175.206 -33.8162 -2581.43 173.416 -31.0362 -2334.96 174.174 -33.4014 -2465.99 173.277 -32.1311 -2391.49 175.563 -34.047 -1991.71 176.576 -34.5598 -2536.7 177.225 -34.7131 -2532.73 177.038 -34.9112 -2264.05 174.917 -33.8557 -2352.63 173.263 -32.3905 -2255.77 175.361 -33.9922 -2191.71 173.091 -31.0946 -2069.75 173.388 -32.6487 -2392.97 174.343 -33.6747 -2012.36 177.533 -34.6459 -2097.87 176.225 -34.4669 -2158.23 175.12 -34.0603 -1927.03 173.23 -30.3286 -1896.54 173.042 -32.1807 -2234.7 172.951 -32.3932 -2105.19 176.685 -34.8531 -1999.82 173.1 -31.9454 -2036.41 175.926 -34.4084 -1956.4 173.687 -33.5381 -2030.58 177.402 -34.9283 -1760.51 173.711 -33.1445 -2150.82 175.737 -34.2327 -1919.25 173.331 -32.8526 -1977.43 176.242 -34.8141 -1997 174.212 -32.004 -3056.65 173.193 -30.5807 -1705.13 175.977 -34.6067 -1997 173.068 -32.6711 -2014.42 173.851 -33.3636 -2180.93 173.15 -31.6333 -1806.02 173.065 -33.0203 -1784.55 173.887 -33.8892 -1950.12 173.426 -33.581 -2226.2 174.501 -34.1486 -1983.27 173.953 -33.6466 -1861.38 173.549 -33.3461 -1933.72 174.118 -33.8423 -1972.9 174.812 -34.1424 -1674.42 175.826 -34.8023 -1981.82 173.196 -33.3467 -2149.61 175.654 -34.5224 -1798.97 175.29 -34.5299 -1741.6 172.995 -31.3497 -1576.76 173.124 -33.644 -2047.22 174.641 -34.3487 -1827.53 175.399 -34.2454 -1805.1 173.368 -34.3273 -981.89 173.425 -33.0943 -1716.24 173.855 -34.0912 -1682.25 173.155 -30.8292 -1923.94 174.767 -34.5532 -1452.72 175.462 -34.8012 -1594.37 173.256 -30.0439 -2184.49 175.006 -34.5339 -1715.13 174.519 -34.5315 -1569.97 173.817 -34.2634 -1646.23 174.013 -34.2222 -1521.09 173.01 -30.1675 -1708.94 175.228 -34.9482 -747 172.993 -30.4143 -1291.64 173.324 -34.4279 -454.42 173.81 -31.782 -2595.06 174.049 -34.6256 -823.96 173.378 -30.7461 -1386.34 173.11 -34.4049 -111.68 173.236 -34.4758 -188.17 173.359 -34.6709 -114.9 172.989 -34.3464 -103.37 173.86 -34.852 -123.58 173.189 -34.5628 -131.85 173.733 -34.8079 -137.6 173.807 -34.8426 -113.22 173.414 -34.7511 -109.75 173.683 -34.844 -114.83 173.239 -34.6275 -114.27 173.295 -34.672 -107.07 173.766 -34.8359 -107.27 173.086 -34.4703 -84.12 173.101 -34.5469 -78.34 173.137 -34.5936 -85.16 173.055 -34.3631 -110.69 173.173 -34.6174 -101.38 173.329 -34.6983 -80.14 173.365 -34.7297 -70.98 173.818 -34.8838 -88.36 173.733 -34.8502 -96.78 173.503 -34.8404 -67.77 173.238 -34.687 -79.06 173.772 -34.8691 -85.32 173.824 -34.9246 -59.81 173.517 -34.8838 -54.74 173.439 -34.7829 -73.28 173.18 -34.6649 -78.9 173.124 -34.6393 -67.84 173.052 -34.511 -53.19 173.097 -34.6 -57.22 173.709 -34.8962 -77.01 173.772 -34.9173 -51.7 173.643 -34.9214 -50.96 173.234 -34.7274 -47 173.856 -34.9772 -27.13 173.293 -34.7202 -51.73 173.186 -34.7122 -49.52 173.467 -34.8757 -29.76 173.194 -34.7573 -43.28 173.726 -34.9409 -43.65 173.067 -34.6321 -37.61 173.259 -34.765 -39.17 173.023 -34.9848 -36.17 172.997 -34.9432 -31.55 173.502 -34.9174 -33.27 173.216 -34.8002 -24.46 173.431 -34.8099 -27.82 173.122 -34.6994 -32.96 173.081 -34.9759 -27.55 173.081 -34.6688 -33.96 173.725 -34.9706 -19.19 173.286 -34.8132 -25.29 173.049 -34.9402 -20.07 173.004 -34.8978 -26.47 173.149 -34.7386 -21.9 173.457 -34.9513 -11.59 173.349 -34.8188 -14.74 173.432 -34.9141 -17 173.315 -34.8409 -13.57 173.504 -34.9727 -8.83 177.975 -30.8091 -4019.21 177.911 -31.1761 -3846.8 179.665 -33.0386 -2837.89 178.049 -30.5205 -3905.73 177.905 -30.2165 -3918.32 178.334 -30.7098 -3710.3 178.372 -30.341 -3762.14 177.821 -31.5967 -3852.79 178.308 -31.0384 -3676.47 177.918 -31.9864 -3653.26 178.63 -30.5996 -3535.86 178.28 -31.4013 -3453.83 178.976 -33.4986 -3159.6 179.745 -32.7612 -2744.6 179.19 -33.989 -3148.59 178.643 -30.1041 -3671.36 177.949 -32.3529 -3468.01 178.665 -30.888 -3302.77 178.813 -30.3803 -3508.23 178.279 -31.7784 -3465.76 178.955 -30.6875 -3277.75 178.673 -31.228 -3275.45 179.252 -32.2296 -2861.77 179.614 -32.2145 -3338.53 178.569 -34.2069 -2845.58 179.387 -31.9104 -2806.17 179.298 -34.2936 -2897.92 179.603 -33.3066 -2955.67 178.36 -34.4741 -2936.06 179.022 -30.1073 -3142.31 177.957 -32.716 -3352.01 178.667 -33.6607 -3037 178.298 -32.1366 -3159.2 179.025 -33.2089 -2826.87 177.985 -33.0038 -3081.04 178.662 -31.587 -2954.71 179.457 -32.5282 -2972.7 178.148 -34.1695 -2555.44 179.43 -32.8501 -2905.86 178.336 -32.517 -2816.93 179.209 -32.7053 -3086.85 179.247 -33.6773 -2514.91 179.585 -33.5932 -2722.43 177.843 -33.3225 -3006.77 179.127 -32.9358 -3031.15 178.682 -31.9637 -2704.12 178.262 -32.8612 -2286.71 177.897 -33.9718 -2871.07 177.864 -33.7106 -3203.7 178.736 -34.482 -2627.9 179.662 -31.6546 -2661.15 179.044 -31.0474 -2862.99 179.011 -31.4082 -2590.45 178.923 -32.73 -2605.16 179.247 -30.4525 -2902.64 178.554 -34.6942 -2144.88 178.95 -34.2411 -2633.05 180.265 -31.8215 -3084.23 179.395 -34.5425 -2018.84 179.849 -33.4486 -2599.39 179.887 -33.2133 -2790.97 180.088 -31.3961 -3124.31 178.425 -33.9065 -2797.09 178.241 -34.7736 -2804.9 179.079 -32.4831 -2322.62 180.118 -31.1268 -3070.05 178.239 -33.1744 -2512.45 180.305 -31.5551 -2559.75 178.626 -33.298 -2827.37 179.854 -31.2584 -3021.45 178.588 -32.2669 -2540 179.295 -30.7915 -2397.26 179.469 -30.1242 -2802.17 178.567 -34.9481 -2458.72 179.018 -31.7464 -2463.78 180.094 -30.8626 -2465.51 178.797 -32.99 -2138.22 180.247 -32.0612 -2764.72 179.21 -34.7037 -2370.05 178.733 -32.4983 -1414 180.087 -33.3566 -2581 179.376 -31.0339 -2078.17 178.119 -33.8682 -1909.55 178.253 -33.5577 -2190.74 179.587 -30.4057 -1884.32 180.406 -30.9544 -2593.86 179.044 -32.0154 -2057.69 180.355 -31.2779 -2437.1 177.918 -34.5099 -2191.86 178.894 -34.767 -2137.69 180.288 -30.6647 -2470.86 178.591 -32.7675 -1486.28 178.896 -32.2406 -2052.95 180.034 -30.6537 -1950.95 179.609 -31.3949 -2049.88 179.088 -34.5086 -2043.26 179.855 -31.0082 -2601.75 179.46 -34.7955 -1720.93 180.445 -30.3921 -2535.46 180.591 -30.6799 -2023.83 179.331 -31.2699 -1795.18 180.105 -30.4537 -2212.59 180.719 -30.1913 -2290.59 180.991 -30.2942 -2222.88 180.771 -30.4648 -2246.52 180.858 -30.7043 -2048.14 180.435 -30.0898 -2208.01 179.34 -31.5706 -2196.56 181.026 -30.5305 -2016.08 179.562 -30.6432 -1745.64 180.971 -30.0231 -1997.91 179.607 -31.1473 -1670.72 179.586 -30.8938 -1292.16 181 -31.5151 -1784.14 178.499 -33.0154 -1812.56 181.096 -30.7513 -1801.42 180.174 -30.2086 -1866.97 181.122 -30.9799 -1716.21 179.748 -30.0193 -954.34 179.836 -30.7658 -1612.15 181.24 -30.3847 -1553.03 179.84 -30.2572 -1075.38 180.218 -30.0046 -1843.01 181.21 -30.5871 -1451.56 179.825 -30.534 -1311.08 179.991 -30.0275 -999.12 179.171 -34.8952 -1806.64 183.84 -32.8962 -5747.18 184.616 -30.6914 -5554.15 186.428 -30.2259 -5003.63 187.239 -32.0981 -6023.45 186.767 -30.9274 -5813.2 186.272 -34.2 -5726.31 185.9 -33.9532 -5736.16 185.889 -34.4119 -5700.3 186.639 -31.3235 -5836.14 186.517 -31.7274 -5700.62 188.087 -34.2938 -5539.36 186.249 -31.0089 -5845.28 187.551 -31.9561 -5827.45 186.848 -32.0132 -5851.59 186.129 -31.394 -5627.87 183.626 -33.5803 -5801.24 187.622 -34.5092 -5302.46 187.016 -32.8972 -5789.83 186.613 -32.9 -5743.9 188.065 -33.8631 -5714.44 184.375 -33.1774 -5459.53 188.126 -34.724 -5388.14 186.732 -34.2484 -5645.9 186.334 -30.5936 -5736.38 186.947 -32.4791 -5962.84 187.56 -30.4811 -5815.12 187.277 -30.1614 -5562.83 187.699 -32.4063 -5437.03 187.414 -32.8312 -5678.92 185.395 -34.1455 -5741.88 184.325 -32.6554 -5416.52 183.892 -33.2906 -5371.92 187.242 -33.185 -5725.96 184.211 -32.2568 -5832.68 184.684 -32.3406 -5542.04 186.421 -32.1435 -5745.44 185.839 -31.1188 -5622.71 186.407 -34.5825 -5550.81 184.492 -32 -5656.14 187.063 -31.2337 -5914.51 186.86 -33.15 -5739.97 186.007 -34.8761 -5664.38 184.053 -31.8607 -5714.4 187.512 -33.5872 -5511 185.387 -34.7159 -5687.74 184.059 -31.4578 -5852.5 184.49 -31.1572 -5302.11 187.12 -31.6623 -5916.18 184.855 -34.316 -5643.3 185.809 -30.219 -5780.86 185.442 -33.6633 -5656.23 184.125 -33.5763 -5255.51 184.954 -33.3871 -5151.65 186.281 -32.5686 -5702.57 187.954 -30.8429 -5582.96 185.811 -30.7597 -5770.4 184.558 -33.5923 -5585.57 186.483 -33.7978 -5822.41 187.213 -34.2876 -5544.02 185.984 -33.4813 -5748.41 187.603 -34.0714 -5582.29 184.934 -33.838 -5636.31 187.676 -31.6388 -4899.52 186.936 -33.4824 -5679.03 183.381 -34.324 -5552.03 184.525 -31.6338 -5434.69 185.158 -32.3655 -5613.11 184.735 -34.7951 -5620.78 187.706 -33.185 -5603.85 185.235 -30.1516 -5623.14 184.938 -32.8263 -5433.96 187.357 -30.9414 -4889.38 188.012 -33.4819 -5631.51 188.304 -31.2147 -5570.68 187.034 -34.6928 -5548.86 185.964 -32.2577 -5697.98 187.076 -33.9127 -5545.81 185.224 -30.5793 -5514.66 185.631 -31.4175 -5374.31 184.366 -33.9616 -5587.69 185.415 -31.0385 -5550.75 184.172 -34.9426 -5505.42 187.858 -32.8614 -5464.44 183.678 -34.9424 -5519.62 187.633 -34.9719 -5294.84 185.502 -33.1686 -5624.98 184.95 -30.9698 -5468.06 185.06 -31.4095 -5118.11 185.52 -32.1224 -5529.21 184.981 -31.9398 -5487.8 183.797 -34.5922 -5541.16 185.425 -31.7357 -5312.71 188.137 -31.5893 -5043.15 185.637 -32.6182 -5679.31 187.986 -31.97 -4984.79 187.406 -31.3479 -4994.69 184.302 -34.4539 -5555.61 188.2 -33.1633 -5245.54 185.945 -31.8279 -5623.93 186.939 -30.4729 -4094.58 188.359 -32.3086 -4683.42 186.835 -29.9564 -5022.25 188.275 -32.7413 -4001.05 187.814 -31.2635 -2907.88 188.804 -31.2711 -5558.94 188.575 -30.7711 -5641.62 188.543 -31.5413 -5614.44 189.155 -30.9696 -5666.5 188.494 -34.5074 -5640.42 188.633 -30.2421 -5553.31 188.868 -32.1955 -5637.95 188.987 -31.7371 -5708.46 188.483 -31.8944 -5329.27 189.246 -31.3841 -5599.6 189.066 -30.5008 -5313.49 189.368 -32.1186 -5713.87 189.187 -32.4599 -5712.23 188.719 -34.9058 -5447.12 189.548 -31.7023 -5581.73 189.882 -32.063 -5605.26 189.718 -32.547 -5361.77 189.566 -30.6941 -5438.26 189.24 -32.8445 -5587.72 190.063 -31.6446 -5594.25 189.04 -30.1254 -5729.95 190.334 -31.9787 -5661.06 189.772 -33.1251 -5424.57 188.548 -34.1314 -5347.32 189.704 -31.2182 -5599.75 190.282 -32.3681 -5535.79 189.442 -30.2388 -5635.65 190.296 -32.8497 -5407.43 189.294 -33.2248 -5442.05 190.649 -31.6321 -5648.59 190.284 -31.2059 -5576.3 190.817 -32.167 -5564.71 190.374 -33.3354 -5225.78 193.575 -33.5053 -5327.13 190.007 -30.853 -5547.55 191.933 -30.8919 -5453.22 191.504 -30.659 -5558.63 191.43 -31.1127 -5485.41 191.49 -32.2131 -5609.63 190.823 -31.1375 -5477.09 191.144 -31.8292 -5507.51 192.4 -32.1862 -5465.81 189.972 -33.587 -5524.09 192.189 -31.7646 -5365.01 190.61 -30.2775 -5555.56 190.408 -33.7023 -5313.22 191.621 -31.6834 -5468.42 192.005 -31.3391 -5554.27 191.133 -31.479 -5705.85 190.458 -30.75 -5516.23 190.184 -33.9747 -5633.55 189.626 -33.9082 -5503.89 191.643 -32.6419 -5599.05 191.265 -30.201 -5304.32 191.946 -32.0635 -5516.15 191.493 -32.9275 -5482.82 191.18 -32.6091 -5389.69 190.004 -30.3754 -5559.72 191.014 -30.675 -5349.75 193.021 -33.4231 -5482.53 190.451 -34.357 -5200.34 189.989 -34.2739 -5533.08 192.605 -33.2022 -5412.92 193.129 -33.7456 -5427.7 192.03 -32.9528 -5513.64 191.892 -30.4451 -5415.78 192.626 -32.692 -5474.65 192.418 -31.1301 -5441.73 192.914 -32.2706 -5356.68 192.365 -30.7111 -5509.68 192.685 -31.8455 -5396.21 189.064 -34.0194 -5405.94 192.802 -30.6081 -5384.58 193.22 -34.0553 -5489.35 191.657 -33.2895 -5498.12 189.133 -33.5626 -5358.51 192.839 -30.2668 -5390.12 190.987 -33.1142 -5373.61 192.665 -33.6093 -5339.09 192.805 -33.9893 -5307.81 190.709 -32.62 -5417.68 193.225 -32.6506 -5325.6 192.768 -30.9472 -5329.86 193.63 -32.9765 -5396.76 192.023 -32.4582 -5589.81 193.291 -30.2271 -5445.1 192.189 -33.4267 -5276.49 193.156 -30.5232 -5559.18 193.062 -34.3519 -5369.25 192.385 -30.3155 -5435.54 189.552 -34.3964 -5286.88 190.135 -34.7332 -5373.19 188.778 -33.109 -5151.49 193.124 -33.0716 -5402.45 192.854 -34.6351 -5269.08 188.776 -32.603 -5487.68 192.305 -33.85 -5219.99 188.974 -34.487 -5605.13 192.456 -31.4976 -5465.4 193.317 -32.3208 -5313.91 192.489 -34.3224 -5126.15 193.581 -30.5999 -5496.02 191.872 -33.6562 -5404.77 193.262 -30.9207 -5353.68 192.504 -34.7065 -5187.64 192.983 -31.4086 -5304.03 190.977 -34.3865 -5317.33 191.195 -34.0305 -5445.87 190.669 -34.0104 -5467.34 190.781 -34.7489 -5272.03 191.395 -33.6343 -5428.08 193.649 -32.5691 -5100.09 191.515 -34.4271 -5240.42 191.317 -34.7494 -5166.21 193.377 -34.8075 -5142.58 191.83 -34.0711 -5113.71 192.065 -34.5587 -5117.27 189.464 -34.9618 -4833.11 191.775 -34.7688 -5210.46 193.175 -31.9547 -5138.53 193.559 -31.3331 -5199.05 193.617 -34.2961 -5330.25 193.629 -32.1734 -4976.36 193.49 -33.908 -5277.12 193.566 -31.7438 -4948.83 188.549 -33.6214 -3402.22 189.548 -33.4829 -5618.18 190.834 -33.6359 -5349.92 195.131 -33.871 -5532.92 194.662 -33.9152 -5334.49 194.216 -33.7252 -5827.48 195.402 -34.1873 -5938.55 194.733 -33.4665 -5247.91 195.37 -33.4805 -5476.81 195.418 -34.5053 -5860.39 194.137 -33.249 -5377.28 194.537 -32.9774 -5374.14 194.956 -34.3249 -5369.97 195.675 -33.9023 -4997 194.069 -32.8133 -5504.47 193.842 -33.9312 -5118.56 195.186 -34.8024 -5357.77 194.39 -32.6319 -5201.5 194.795 -32.6487 -5611.53 195.08 -33.0471 -5178.45 194.264 -34.2379 -5235.27 193.827 -30.2238 -5350.05 194.042 -32.4175 -5316.61 194.004 -30.6524 -5337.82 194.63 -34.7551 -5211.54 194.481 -32.2847 -5262.91 194.305 -30.016 -5063.84 195.682 -34.8319 -4997 194.927 -32.328 -5621.9 194.36 -30.4949 -5300.43 195.343 -32.6113 -5068.41 193.903 -31.0414 -5341.95 194.8 -30.2826 -5454.84 195.638 -33.0785 -4997 194.331 -30.8835 -5355.35 198.222 -33.6793 -4997 196.373 -31.7663 -4997 197.181 -32.0639 -4997 197.913 -33.9215 -4997 197.296 -32.8684 -4997 196.801 -33.1112 -4997 198.348 -34.0953 -4997 197.754 -33.0073 -4997 198.649 -33.8699 -4997 196.005 -31.916 -4997 196.84 -33.9007 -4997 196.32 -34.0118 -4997 197.412 -34.0376 -4997 195.571 -31.7916 -4997 197.02 -33.5913 -4997 197.561 -33.4334 -4997 195.242 -32.1036 -6025.78 196.515 -33.5269 -4997 198.15 -33.2532 -4997 197.569 -32.255 -4997 195.431 -31.3008 -4997 198.65 -33.4961 -4997 196.889 -31.1024 -4997 196.912 -31.6457 -4997 197.452 -31.8527 -4997 197.658 -32.6492 -4997 194.988 -31.5825 -5549.59 198.104 -32.8324 -4997 197.208 -34.868 -4997 197.617 -34.6697 -4997 196.776 -34.8355 -4997 198.484 -34.5345 -4997 198.997 -34.6933 -4997 198.137 -34.7378 -4997 196.256 -34.8953 -4997 197.211 -32.4248 -4997 196.79 -32.5718 -4997 194.03 -34.7673 -5272.28 196.435 -34.4992 -4997 198.002 -32.4331 -4997 195.198 -30.0134 -4889.08 196.945 -34.3935 -4997 198.832 -34.2312 -4997 197.987 -34.335 -4997 196.462 -30.793 -4997 195.462 -30.9171 -4997 194.03 -32.0241 -5368.61 198.581 -33.0241 -4997 196.175 -33.1066 -4997 198.98 -32.7399 -4997 195.861 -32.7552 -4997 196.306 -32.68 -4997 198.47 -32.5851 -4997 195.884 -34.4047 -4997 195.949 -33.5095 -4997 194.894 -30.9113 -5674.68 195.802 -31.1432 -4997 197.641 -31.0791 -4997 197.276 -30.9638 -4997 198.09 -30.962 -4997 196.315 -31.2408 -4997 198.747 -31.0599 -4997 196.913 -30.5944 -4997 198.407 -30.5924 -4997 197.532 -30.6488 -4997 194.063 -31.5739 -5304.47 198.385 -31.3623 -4997 197.932 -31.3868 -4997 195.914 -31.5253 -4997 194.455 -31.2802 -5336.62 197.404 -31.3942 -4997 198.85 -31.6219 -4997 196.762 -30.1284 -4997 197.194 -30.1925 -4997 198.608 -30.2093 -4997 198.126 -30.1864 -4997 197.672 -30.192 -4997 195.698 -30.1734 -4997 198.851 -30.611 -4997 195.324 -30.505 -4854.6 197.966 -30.5223 -4997 195.91 -30.724 -4997 196.314 -30.2812 -4997 196.347 -32.2173 -4997 195.826 -32.2938 -4997 196.791 -32.115 -4997 194.764 -31.9856 -5212.11 198.837 -32.1912 -4997 198.302 -32.2097 -4997 197.904 -32.0472 -4997 194.375 -31.9091 -5465.15 197.805 -31.6925 -4997 194.529 -31.6662 -5395.83 198.298 -31.7921 -4997 199.811 -31.139 -4997 200.198 -34.8212 -4997 200.282 -30.9659 -4997 203.517 -31.1403 -4997 199.568 -34.8721 -4997 199.209 -30.3175 -4997 204.018 -31.074 -4997 203.406 -30.2826 -4997 199.904 -31.5903 -4997 201.242 -34.8297 -4997 202.644 -31.0477 -4997 199.77 -30.6735 -4997 203.615 -30.7462 -4997 201.665 -30.5656 -4997 201.209 -30.7061 -4997 202.493 -30.5615 -4997 199.801 -34.4816 -4997 200.733 -29.9815 -4997 203.1 -31.2138 -4997 200.305 -31.3851 -4997 202.844 -33.2364 -4997 199.65 -33.573 -4997 202.45 -33.3156 -4997 203.273 -33.3967 -4997 202.002 -33.432 -4997 201.558 -33.1656 -4997 200.207 -33.8309 -4997 204.105 -33.2002 -4997 199.14 -33.2478 -4997 199.155 -33.8277 -4997 204.352 -33.6697 -4997 203.564 -33.0775 -4997 200.554 -33.4884 -4997 200.049 -33.3426 -4997 200.927 -33.4837 -4997 199.631 -33.1849 -4997 203.79 -33.5758 -4997 202.435 -33.7908 -4997 201.977 -33.8246 -4997 202.904 -33.6534 -4997 200.669 -33.8555 -4997 200.89 -33.7162 -4997 201.603 -33.5889 -4997 201.215 -33.7061 -4997 203.426 -33.897 -4997 201.203 -33.3385 -4997 199.415 -32.9098 -4997 199.875 -32.8715 -4997 203.852 -32.7143 -4997 203.299 -32.6151 -4997 202.528 -32.8727 -4997 200.264 -32.7051 -4997 200.675 -32.7914 -4997 201.965 -32.9093 -4997 204.406 -32.8194 -4997 199.951 -32.4004 -4997 200.448 -32.4024 -4997 203.569 -32.261 -4997 204.152 -32.286 -4997 202.73 -32.4919 -4997 199.43 -32.5031 -4997 203.046 -32.949 -4997 200.809 -33.1793 -4997 200.372 -33.0596 -4997 204.018 -34.6863 -4997 203.578 -34.3431 -4997 202.968 -34.753 -4997 202.609 -34.6022 -4997 203.429 -34.7215 -4997 200.655 -34.5988 -4997 200.98 -34.409 -4997 201.777 -34.5586 -4997 201.33 -34.3797 -4997 202.236 -34.709 -4997 199.346 -34.3531 -4997 200.198 -34.3269 -4997 202.962 -34.2565 -4997 201.604 -34.0552 -4997 200.724 -35.0069 -4997 201.046 -34.046 -4997 200.617 -34.1835 -4997 199.724 -34.057 -4997 202.243 -34.256 -4997 204.057 -34.1365 -4997 200.743 -30.8405 -4997 199.286 -30.8757 -4997 203.082 -30.7452 -4997 201.695 -31.0073 -4997 202.127 -30.8255 -4997 201.227 -31.136 -4997 204.054 -30.4886 -4997 200.269 -30.5327 -4997 199.341 -31.3726 -4997 204.383 -31.513 -4997 203.881 -31.5097 -4997 201.725 -31.4846 -4997 203.406 -31.546 -4997 200.752 -31.2506 -4997 202.213 -31.3107 -4997 200.285 -30.1125 -4997 201.214 -30.2549 -4997 199.802 -30.199 -4997 202.809 -30.2304 -4997 202.25 -30.0785 -4997 201.707 -30.1301 -4997 203.79 -30.0423 -4997 202.047 -30.4418 -4997 200.734 -30.4049 -4997 203.75 -31.8937 -4997 203.32 -31.8825 -4997 204.157 -31.8441 -4997 203.017 -32.1317 -4997 200.636 -32.0507 -4997 199.493 -31.953 -4997 200.131 -32.014 -4997 200.344 -31.7341 -4997 202.861 -31.5803 -4997 200.736 -31.6597 -4997 201.125 -32.9451 -4997 201.449 -32.7796 -4997 202.326 -31.9066 -4997 202.133 -32.4119 -4997 201.565 -32.4256 -4997 201.012 -32.4751 -4997 201.215 -31.5748 -4997 201.69 -31.959 -4997 201.145 -32.0189 -4997 209.482 -34.7121 -4997 209.423 -34.1084 -4997 209.502 -31.2636 -4997 209.51 -33.5384 -4997 209.549 -31.6445 -4997 209.362 -33.0786 -4997 209.535 -32.1605 -4997 209.56 -30.9184 -4997 209.507 -32.6768 -4997 209.078 -34.4126 -4997 209.019 -32.2867 -4997 209.017 -34.7716 -4997 208.37 -30.7315 -4997 207.977 -31.6662 -4997 206.813 -31.722 -4997 208.636 -30.5188 -4997 208.54 -32.2365 -4997 207.923 -30.7113 -4997 209.11 -32.7248 -4997 205.297 -30.685 -4997 208.186 -30.4004 -4997 208.185 -32.4262 -4997 209.089 -31.7676 -4997 209.144 -31.3448 -4997 208.711 -32.5929 -4997 208.907 -30.1747 -4997 208.299 -31.0584 -4997 205.905 -30.6356 -4997 209.221 -31.0299 -4997 205.092 -30.1822 -4997 204.672 -30.3624 -4997 207.69 -30.2803 -4997 208.45 -30.1942 -4997 206.25 -33.2208 -4997 208.317 -33.2669 -4997 209.134 -33.3069 -4997 208.77 -33.2827 -4997 205.886 -33.3279 -4997 207.288 -32.4893 -4997 205.532 -33.4373 -4997 207.834 -33.3324 -4997 207.676 -32.3661 -4997 207.297 -33.4466 -4997 204.624 -33.2771 -4997 206.703 -33.3355 -4997 205.119 -33.3493 -4997 205.538 -32.5912 -4997 205.156 -32.6427 -4997 205.963 -32.5369 -4997 204.732 -32.4709 -4997 206.904 -33.0468 -4997 206.783 -32.6078 -4997 206.32 -32.4765 -4997 208.65 -33.5792 -4997 208.285 -33.6824 -4997 204.879 -33.7166 -4997 205.373 -33.7532 -4997 209.045 -33.6368 -4997 206.381 -33.6703 -4997 205.85 -33.7377 -4997 207.821 -33.7793 -4997 206.982 -33.7771 -4997 206.405 -32.8789 -4997 205.909 -32.928 -4997 205.429 -33.0184 -4997 208.938 -32.9841 -4997 207.332 -32.958 -4997 207.884 -32.8253 -4997 208.476 -32.8992 -4997 204.91 -32.9276 -4997 205.03 -34.4681 -4997 204.588 -34.5759 -4997 205.548 -34.5917 -4997 208.663 -34.4507 -4997 208.621 -34.8424 -4997 207.103 -34.5271 -4997 206.588 -34.6962 -4997 207.665 -34.6794 -4997 206.028 -34.4954 -4997 208.207 -34.5543 -4997 205.205 -34.1315 -4997 204.677 -34.1205 -4997 205.721 -34.1388 -4997 207.292 -34.1944 -4997 206.764 -34.1533 -4997 207.782 -34.2015 -4997 208.268 -34.1182 -4997 206.055 -34.8971 -4997 205.122 -34.8716 -4997 208.218 -34.9984 -4997 207.225 -34.965 -4997 208.786 -34.005 -4997 207.442 -33.8833 -4997 206.229 -34.1394 -4997 208.79 -30.9613 -4997 204.675 -30.9929 -4997 206.31 -30.9924 -4997 205.831 -31.1009 -4997 206.671 -30.9167 -4997 205.354 -31.314 -4997 207.084 -31.0254 -4997 207.721 -31.1509 -4997 206.819 -30.6836 -4997 207.291 -30.6054 -4997 209.106 -30.6613 -4997 205.892 -31.6122 -4997 206.319 -31.4242 -4997 204.951 -31.6507 -4997 208.244 -31.4156 -4997 206.747 -31.2681 -4997 207.329 -31.5517 -4997 208.69 -31.395 -4997 206.69 -30.2707 -4997 206.1 -30.2344 -4997 207.203 -30.153 -4997 205.554 -30.2173 -4997 209.213 -29.9368 -4997 208.05 -30.0281 -4997 206.416 -30.6222 -4997 209.484 -30.3503 -4997 206.459 -32.2455 -4997 206.008 -32.1195 -4997 207.281 -32.0497 -4997 206.83 -32.1633 -4997 205.629 -32.2551 -4997 205.169 -32.2056 -4997 208.213 -32.0368 -4997 207.781 -32.0216 -4997 204.598 -31.9986 -4997 208.541 -31.8297 -4997 205.495 -31.8569 -4997 206.387 -31.8811 -4997 157.083 -31.1336 -3838.72 157.051 -31.5588 -3947.61 157.133 -30.7868 -3547.31 158.669 -34.8088 -4800.6 158.567 -34.5284 -4659.52 159.137 -34.8316 -4922.77 157.061 -33.5653 -4751.31 157.079 -33.1367 -4361.19 157.15 -34.002 -4822.05 157.586 -34.0992 -4618.26 157.556 -34.7436 -4758.87 157.237 -34.4535 -4610.62 157.747 -34.4374 -4689.34 157.952 -34.156 -4563.73 158.686 -34.1966 -4644.66 158.284 -34.0228 -4520.18 159.105 -33.8439 -4423.59 157.965 -34.751 -4547.5 157.124 -31.9303 -3779.57 157.052 -30.2355 -4249.31 158.334 -34.7191 -4502.36 157.515 -33.692 -4675.35 158.21 -34.4076 -4765.3 158.299 -33.7504 -4428.8 158.606 -33.8146 -4415.36 159.135 -34.2115 -4800.73 158.936 -34.51 -4767.5 159.261 -33.4551 -4092.41 157.1 -32.7876 -3525.97 159.673 -34.7793 -4209.8 157.961 -33.8081 -4390.16 157.438 -33.2937 -3850.73 156.984 -32.2293 -4130.86 159.374 -33.1724 -3981.94 159.297 -32.5029 -4000.51 158.838 -32.6278 -4209.31 158.199 -33.5574 -3490.66 158.428 -32.3469 -4075.27 159.379 -34.4569 -4905.54 157.356 -30.0692 -3304.98 158.99 -32.2653 -4053.66 158.42 -32.7267 -3785.16 159.219 -32.8858 -3947.78 158.737 -31.9269 -3662.54 158.488 -33.5447 -3355.45 158.521 -31.6799 -3946.22 158.779 -31.6423 -2975.33 158.649 -31.447 -3912.02 158.194 -31.9047 -3946.77 158.545 -31.1725 -3290.86 158.174 -31.083 -3659.47 158.258 -31.4598 -3983.25 157.37 -32.9681 -3359.6 158.011 -32.6617 -3233.41 159.569 -34.0502 -3483.45 157.381 -30.9989 -3286.45 158.659 -33.0123 -3492.94 158.492 -30.8466 -3660.91 158.852 -33.5298 -3088.64 158.869 -31.2338 -3652.82 157.148 -32.4831 -3457.96 159.413 -32.1939 -3141.66 157.436 -31.7723 -2579.42 159.677 -32.372 -2716.13 158.871 -30.9315 -3480.39 159.009 -33.2217 -3204.63 158.13 -30.7258 -3598.61 157.904 -33.38 -3251.37 159.219 -31.9387 -2302.9 159.802 -34.3714 -3142.93 157.484 -31.3438 -2878.67 158.47 -30.5333 -3168.99 158.797 -30.6225 -2986.94 157.872 -32.2895 -3515.51 159.646 -32.6628 -2780.33 157.482 -30.7418 -3024.62 160.047 -34.885 -3614.69 158.173 -33.0104 -3017.82 158.176 -30.3881 -2899.87 157.896 -31.3013 -3213.21 158.67 -33.3225 -2814.59 159.584 -33.647 -2950.93 159.639 -33.3161 -2618.47 158.467 -30.2844 -3012.71 157.757 -30.9612 -3181.2 158.667 -30.05 -3066.06 157.746 -31.9576 -2740.37 157.316 -30.4417 -2979.05 157.507 -32.6275 -3103.34 158.342 -33.3038 -2933.19 157.398 -32.1911 -2885.45 157.732 -32.9814 -2848.38 159.704 -32.9854 -2505.9 158.759 -30.3324 -3074.08 159.044 -31.6869 -945.27 159.038 -30.1032 -2250.19 159.999 -34.0605 -2227.54 157.828 -31.6305 -2917.07 160.12 -34.5804 -2687.85 157.623 -30.2155 -2130.02 159.126 -31.0785 -2433.21 159.541 -31.975 -2185.7 159.152 -30.4117 -2483.23 160.123 -34.282 -2534.95 161.071 -34.859 -2718.55 160.667 -34.8827 -2823.29 160.867 -34.6055 -2594.85 157.772 -30.5216 -2458.71 158.291 -30.0974 -2522.09 159.082 -30.6946 -2467.38 160.327 -34.8063 -3158.96 161.371 -34.7668 -2674.74 159.175 -30.8634 -2453.96 161.213 -34.5838 -2462.02 157.934 -30.1632 -2007.88 159.749 -32.106 -2007.33 160.394 -34.328 -2252.28 159.435 -30.1007 -2693.53 161.039 -34.3453 -2388.32 161.354 -34.3329 -2167.08 161.632 -34.8208 -2628.47 159.968 -32.4962 -2131.19 161.564 -34.557 -2291.68 159.924 -33.7643 -2389.93 160.712 -34.3384 -2049.12 159.929 -33.4562 -2171.45 159.994 -32.7619 -1888.93 161.629 -34.2962 -1846.37 160.511 -34.5902 -2479.81 159.387 -30.943 -2264.84 160.324 -34.081 -2217.2 160.583 -34.1343 -2327.51 160.598 -33.8629 -2332.89 160.893 -34.0684 -2293.7 160.943 -33.7544 -1859.19 159.383 -30.6645 -2194.99 161.194 -34.1424 -2189.56 160.469 -33.6465 -1785.76 158.951 -31.4629 -1479.16 159.968 -33.1848 -1636.58 159.998 -32.2411 -1765.33 160.254 -33.8254 -1939.38 160.732 -33.5914 -2102.24 159.716 -30.1866 -1907.05 161.206 -33.9007 -1804.24 159.543 -30.3807 -1656.1 161.49 -34.066 -2133.41 159.351 -31.1974 -2036.9 159.534 -31.7779 -1842.21 159.79 -31.8583 -1785.48 160.225 -33.561 -1713.82 160.052 -32.969 -1451.11 161.753 -33.8782 -1728.28 159.598 -30.8013 -2021.78 160.529 -33.4012 -1822.78 160.986 -33.5298 -1638.78 159.838 -30.3632 -1992.84 159.565 -31.3238 -1706.66 159.532 -31.5543 -1741.88 160.253 -32.5831 -1574.72 160.032 -31.9813 -1649.63 159.698 -30.5893 -1731.93 159.264 -31.4607 -1707.68 159.973 -30.1355 -1934.97 160.331 -32.8312 -1735.39 159.779 -31.6244 -1776.72 161.494 -33.7786 -1796.29 160.24 -32.3563 -1625.49 160.46 -33.1935 -1737.88 160.23 -33.3128 -1536.81 160.268 -32.1229 -1480.19 159.837 -30.7825 -1551.16 160.852 -33.3667 -1442.69 161.716 -33.6774 -1645.1 160.269 -33.0803 -1559.56 159.744 -31.4335 -1545.59 159.66 -31.0388 -1583.92 160.272 -30.1072 -1556.53 161.248 -33.5973 -1567.57 159.841 -31.2323 -1448.78 160.556 -33.0042 -1566.27 161.568 -33.5363 -1527.97 160.433 -32.4402 -1564.82 160.12 -30.3313 -1988.2 159.977 -31.4227 -1575.52 160.56 -30.1179 -1591.99 159.975 -30.5556 -1555.63 160.484 -32.2556 -1531.05 160.094 -31.6779 -1265.78 161.145 -33.3498 -1478.7 159.966 -30.9858 -1378.49 160.532 -32.6026 -1482.34 160.682 -32.7906 -1411.37 160.104 -30.7476 -1408.21 160.114 -31.1808 -1419.75 160.711 -33.179 -1355.3 161.007 -33.1488 -1449.09 161.432 -33.35 -1308.47 160.849 -32.967 -1371.41 160.343 -31.8657 -1405.6 160.656 -32.4036 -1435.03 160.972 -32.7511 -1440.46 160.23 -30.9353 -1243.4 160.808 -32.5742 -1480.1 160.443 -31.6067 -1434.49 160.307 -31.3761 -1382.21 161.14 -32.9295 -1369.4 160.246 -30.5258 -1535.97 160.55 -32.0324 -1304.52 161.336 -33.1113 -1331.9 160.359 -30.7142 -1389.59 160.735 -32.1949 -1299.83 160.392 -31.1054 -1336.28 160.866 -30.1274 -1383.77 160.396 -30.3178 -1548.47 160.56 -31.408 -1530.94 160.572 -31.2263 -1372.65 160.669 -31.7728 -1417.53 160.495 -30.8824 -1378.17 161.675 -33.3325 -1509.6 160.91 -32.3605 -1397.35 160.715 -31.5195 -1364.02 161.087 -32.534 -1354.69 161.259 -32.7093 -1429.21 160.834 -31.974 -1459.25 160.498 -30.5146 -1449.43 161.385 -32.8808 -1373.07 160.613 -30.6841 -1397.1 160.643 -31.0192 -1249.33 159.319 -31.6837 -1009.46 160.66 -30.33 -1483.01 160.763 -31.3113 -1222.21 161.01 -32.1451 -1313.56 161.569 -33.1812 -1382.08 160.935 -31.7904 -1337.17 160.78 -31.1275 -1200.14 160.708 -30.832 -1234.9 160.92 -31.613 -1281.06 161.175 -32.3129 -1359.17 160.711 -30.5159 -1276.27 160.957 -31.4112 -1051.86 161.394 -32.4649 -1442.72 161.132 -31.9174 -1322.39 161.63 -32.9658 -1479.23 161.576 -32.6842 -1421.49 161.16 -30.0037 -1273.72 161.138 -31.689 -1097.48 161.02 -31.168 -1284.4 160.871 -30.657 -1369.58 161.271 -32.1108 -1321.78 161.397 -32.258 -1395.03 160.899 -30.4058 -1315.29 161.117 -31.5161 -1245.18 160.906 -30.9214 -1450.99 161.212 -31.3438 -1262.87 161.38 -31.9483 -1386.5 161.138 -30.7343 -1367.79 161.204 -30.9512 -1280.34 161.657 -32.4617 -1328.16 161.127 -30.5084 -1453.1 161.366 -31.7657 -1309.32 161.134 -30.2653 -1367.77 161.331 -31.137 -1299.91 161.364 -31.5358 -1225.05 161.55 -32.0924 -1400.8 161.608 -32.2938 -1429.96 161.493 -31.3171 -1303.58 161.361 -30.7948 -1414.63 161.59 -31.8653 -1132.99 161.365 -30.6097 -1316.68 161.607 -31.6543 -1167.41 161.36 -30.3851 -1258.49 161.623 -31.4696 -1300.17 161.389 -30.154 -1317.97 161.607 -31.1233 -1258.96 161.468 -30.9519 -1355.48 161.771 -30.5505 -1326.69 161.681 -30.9462 -1359.13 161.581 -30.4886 -1347.21 161.62 -30.7391 -1313.37 161.563 -30.2843 -1351.11 161.683 -30.0567 -1264.72 159.11 -31.289 -2102.42 165.405 -31.1083 -3317.13 165.565 -30.8357 -3437.32 165.203 -30.8101 -3134.78 165.561 -31.3399 -3265.64 165.177 -31.4232 -2937.43 165.315 -31.9787 -3132.07 165.089 -31.1243 -3251.63 165.534 -31.6639 -3180.06 165.497 -30.2054 -2997.98 165.137 -31.7576 -3104.91 164.905 -30.1179 -3141.13 164.549 -30.0436 -3111.33 164.122 -30.1368 -2480.66 165.132 -30.3941 -3048.51 165.533 -30.5282 -3217.34 164.719 -30.3957 -3060.35 164.361 -30.3924 -2586.55 165.485 -32.1718 -3159.02 164.905 -30.9872 -2803.11 165.667 -31.9781 -3114.35 165.944 -30.2645 -2743.76 165.204 -32.289 -3141.25 165.713 -32.207 -3106.93 164.842 -30.708 -3131.34 165.524 -32.4064 -3172.82 164.884 -32.0619 -2544.28 166.346 -30.1118 -2894.99 164.805 -31.6781 -2212.92 165.194 -32.6671 -3213.11 166.399 -30.3624 -2744.61 166.727 -30.1676 -2938.56 165.87 -30.676 -3136.94 164.824 -32.4747 -3047.47 165.821 -31.0608 -2991.75 165.918 -32.4131 -2495.18 166.321 -33.273 -2994.71 165.772 -33.7187 -3017.85 164.595 -33.2055 -3009.4 165.779 -34.15 -2968.96 166.273 -33.598 -2947.36 165.965 -33.3622 -2756.64 166.143 -33.9327 -2894.59 164.741 -32.8286 -3093.84 165.345 -33.9964 -2998.83 165.023 -33.8479 -2933.88 164.843 -33.6501 -2981.72 165.262 -33.5974 -3037.77 164.951 -34.09 -2625.31 164.29 -32.9398 -2968.18 165.034 -33.0325 -3087.33 166.09 -33.1031 -3005.32 166.358 -32.9954 -2539.15 165.727 -33.0798 -3046.81 165.637 -32.7066 -3142.12 166.066 -32.7866 -2861.06 164.49 -32.637 -3066.37 164.954 -33.3578 -3033.26 165.608 -33.4006 -3005.69 164.348 -33.501 -2892.9 164.168 -33.2833 -2392.33 166.702 -30.4577 -2686.45 166.167 -30.5566 -2847.27 166.478 -30.6368 -2792.62 165.331 -33.2311 -3036.97 166.139 -34.2069 -2940.43 165.384 -32.9397 -3157.78 164.155 -32.6215 -3038.64 163.81 -32.6144 -2276.97 164.201 -32.1014 -2953.28 163.897 -32.8807 -2497.98 166.447 -33.8401 -2805.45 165.446 -34.2907 -2897.37 163.967 -32.05 -2839.67 164.435 -32.3118 -3089.35 165.979 -34.3955 -2874.65 165.896 -31.4174 -3075.56 165.969 -32.0937 -2498.72 166.191 -30.8449 -2326.32 166.443 -34.0954 -2766.12 166.6 -33.4116 -2561.69 165.985 -31.7614 -2683.37 164.498 -30.6821 -2384.75 164.761 -31.2884 -2031.35 166.828 -30.6929 -2736.4 165.967 -34.6206 -2936.46 164.139 -31.8605 -2879.82 163.989 -32.3219 -2747.01 166.354 -34.4911 -2919.42 165.149 -34.2854 -2367.76 166.647 -33.6671 -2882.48 166.548 -30.9164 -2508.15 164.474 -31.9335 -2435.85 166.254 -31.1946 -2370.56 166.104 -34.8836 -2830.62 166.719 -33.9156 -2822.7 164.646 -33.4841 -2953.91 165.657 -34.509 -2864.51 166.561 -34.8531 -2855.81 166.983 -34.9044 -2864.95 165.301 -34.5041 -2300.32 164.023 -31.6525 -2576.92 166.819 -34.2221 -2879.17 164.512 -33.7081 -2656.95 166.854 -34.5848 -2821.14 164.607 -30.977 -2273.84 166.198 -31.4985 -2535.48 163.8 -31.8385 -2529.4 166.931 -30.9963 -2287.33 164.691 -33.9323 -2146.61 165.719 -34.8063 -1969.15 164.053 -31.4105 -2208.95 166.362 -31.6894 -2016.51 166.595 -33.1666 -1748.99 166.62 -31.1615 -2101.27 164.076 -30.416 -2294.12 163.719 -32.1423 -2122.21 164.848 -34.3229 -1428.24 164.372 -31.5781 -2165.23 166.461 -32.7377 -1647.74 163.657 -32.7931 -1127.87 163.773 -31.5519 -1957.57 166.529 -31.4238 -1797.12 161.878 -34.8626 -2645.45 164.173 -30.6451 -2242.85 161.861 -34.6629 -2246.01 164.026 -31.1305 -1935.73 161.859 -34.4108 -2106.9 164.27 -30.9235 -2279.37 164.35 -31.2231 -2153.05 163.795 -30.0758 -1736.81 164.206 -33.755 -1223.19 165.4 -34.7253 -1590.64 166.308 -31.981 -1566.98 163.77 -31.2934 -1701.35 166.226 -32.2494 -1581.04 164.697 -34.1674 -1343.19 163.995 -33.5716 -1053.39 163.984 -33.1222 -2057.81 163.857 -30.314 -1749.96 162.104 -34.5378 -2091.35 161.872 -34.1303 -1755.33 167.006 -33.9538 -1724.38 163.634 -32.4119 -1693.21 163.864 -30.5915 -1635.28 166.855 -31.2872 -1220.19 163.963 -30.8614 -1854.48 166.272 -32.5072 -1564.96 164.36 -33.9339 -1205.69 165.012 -34.5063 -1520.75 166.62 -31.6355 -891.88 163.512 -31.6922 -1494.39 163.488 -31.9646 -1503.37 163.644 -30.2399 -1453.46 165.148 -34.6664 -1522.06 163.75 -31.0409 -1404.63 166.628 -32.9488 -1247.08 166.915 -33.4942 -1050.49 166.927 -33.7429 -1605.12 162.099 -34.7641 -1664.85 163.531 -32.6404 -966.57 163.508 -31.4305 -1369.17 162.125 -34.3013 -1477.05 162.328 -34.6402 -1313.95 163.814 -33.3486 -988.82 163.644 -30.4354 -1318.76 164.462 -34.1308 -1186.49 162.338 -34.4327 -1311.13 163.415 -32.2486 -1267.89 166.598 -31.8438 -923.84 163.519 -31.1725 -1347.98 165.452 -34.9676 -1271.27 162.35 -34.8669 -1347.37 163.451 -30.3147 -1363.02 161.93 -33.6915 -1408.02 163.691 -30.8088 -1569.92 163.611 -30.6281 -1303.16 163.487 -30.0737 -1286.87 161.841 -33.4823 -1449.9 163.538 -30.9645 -1294.7 167.04 -31.4215 -1047.37 166.806 -33.2878 -916.8 163.373 -32.4866 -1109.42 163.265 -31.5772 -1322.98 163.447 -32.8387 -967.6 162.196 -34.0651 -1407.39 164.902 -34.7081 -1134.02 163.421 -30.7662 -1231.61 163.231 -31.2937 -1179.12 166.444 -32.1746 -889.96 163.318 -31.0118 -1210.63 162.036 -33.8856 -1258.58 163.433 -30.5242 -1206.93 164.745 -34.5262 -1169.26 163.238 -30.2176 -1324.67 165.126 -34.8885 -1158.03 163.255 -31.83 -1264.01 163.265 -30.4111 -1173.13 164.093 -33.981 -937.31 163.76 -33.1252 -1163.29 161.862 -33.2824 -1379.32 161.769 -33.1465 -1463.32 163.151 -30.827 -1248.21 167.045 -31.6327 -634.43 166.815 -31.5183 -349.85 164.552 -34.3599 -1091.21 166.461 -32.3501 -954.55 161.865 -32.9926 -1397.39 164.755 -34.918 -1053.43 162.667 -34.935 -1383.93 163.211 -30.5968 -1265.08 163.925 -33.8343 -1001.93 161.885 -32.7787 -1311.1 164.638 -34.7028 -1108.56 162.505 -34.5298 -1066.34 163.056 -31.5032 -1204.48 162.368 -34.2209 -1259.28 161.834 -31.5414 -1304.07 161.796 -31.3038 -1200.84 161.85 -31.0633 -1352.28 161.858 -30.8535 -1256.15 162.068 -30.9612 -1203.17 162.061 -31.1808 -1285.37 161.827 -31.7582 -1283.38 162.062 -31.4083 -1091.36 161.861 -30.6804 -1294.56 162.06 -30.7471 -1163.02 161.806 -31.9795 -1075.97 161.961 -30.1012 -1118.45 162.281 -31.4998 -1077.94 163.017 -31.9684 -1245.43 162.06 -31.6342 -1135.47 162.525 -30.6451 -1096.31 162.792 -30.6441 -1147.34 163.01 -30.6643 -1182.91 162.261 -30.5994 -1103.31 162.507 -31.5686 -1178.62 162.996 -30.1383 -1174.03 161.999 -30.5118 -1110.07 162.79 -31.6007 -1138.59 163.046 -31.0714 -1241.31 162.745 -31.1164 -1118.81 162.245 -31.0658 -1123.19 162.786 -31.8862 -1204.42 162.465 -31.069 -1039.66 162.536 -31.8057 -1357.12 162.226 -30.135 -1120.32 162.305 -31.268 -1152.52 163.23 -32.0757 -1170.76 162.226 -30.3752 -1155.03 162.451 -30.4327 -1142.74 162.531 -31.246 -958.79 162.666 -31.3779 -1011.51 162.927 -31.3258 -1188.03 162.459 -31.3928 -1168.8 162.492 -30.0893 -1082.48 162.744 -30.0851 -1296.37 162.897 -30.8602 -1280.28 162.63 -30.8608 -1087.8 162.323 -30.85 -1157.3 162.049 -31.8616 -1197.14 162.809 -30.2644 -1271.32 163.005 -30.4158 -1240.37 162.399 -30.2552 -1181.63 162.599 -30.2598 -1106.69 162.036 -30.2895 -983.81 162.288 -31.7229 -1387.73 163.028 -31.7234 -1285.42 161.799 -30.3297 -1209.79 162.698 -30.4399 -1146.22 161.852 -32.5288 -1186.15 161.771 -32.163 -1201.07 164.235 -34.1088 -1062.19 162.083 -32.5905 -951.53 163.6 -32.9912 -902.44 162.145 -33.7019 -1008.54 163.19 -32.2571 -992.42 161.839 -32.3201 -1216.41 164.274 -34.2955 -1068.03 164.538 -34.5561 -1024.75 162.567 -34.7058 -1113.94 163.741 -33.5626 -895.76 163.013 -32.1936 -1008.34 162.025 -32.117 -1104.42 162.921 -34.8611 -1215.89 162.115 -32.7626 -1082.63 166.516 -32.5254 -847.83 164.315 -34.5216 -1038.36 162.796 -32.1171 -1153.11 164.016 -34.2118 -953.81 162.352 -33.8326 -836.17 162.105 -32.3569 -1277.22 162.531 -32.0738 -1185.07 164.439 -34.6702 -1119.11 162.817 -34.7131 -1261.45 163.233 -32.3794 -1168.1 162.285 -31.9576 -1171.29 164.064 -34.4401 -1134.02 167.078 -32.3409 -1165.4 163.124 -34.8942 -1299.02 166.693 -32.7944 -436.71 166.723 -32.6237 -454.95 163.8 -34.2199 -1031.49 164.261 -34.719 -1190.96 162.713 -34.5268 -1051.75 162.095 -33.5211 -925.86 163.605 -33.481 -931.32 166.59 -32.0557 -882.59 164.102 -34.6126 -1056.58 161.974 -33.1288 -1163.97 162.054 -32.9349 -1200.16 162.051 -33.314 -1069.08 164.461 -34.8327 -1143.46 163.364 -34.9388 -1364.3 163.054 -34.7205 -1210.31 163.831 -34.3883 -1141.73 162.579 -34.3437 -1017.75 163.863 -34.0516 -853.79 163.686 -34.1267 -816.72 166.805 -31.7133 -455.39 162.975 -34.5191 -1095.15 163.493 -33.2777 -902.69 163.048 -32.3776 -1007.74 164.213 -34.9076 -1172.35 162.275 -32.1594 -975.93 164.033 -34.7748 -1197.29 162.624 -32.249 -1143.5 163.773 -33.7176 -1073.08 163.285 -34.7339 -1201.19 162.419 -34.0507 -843.42 163.585 -34.9601 -1379.03 163.862 -34.6172 -1125.98 163.275 -32.7019 -886.33 163.606 -34.3158 -1074.11 162.275 -32.6572 -885.19 162.803 -32.3439 -1202.9 163.492 -34.1188 -976.62 163.141 -32.5317 -887.32 163.663 -33.9256 -935.72 163.183 -34.5808 -1154.97 162.26 -32.4837 -1249.64 162.829 -34.3453 -961.69 163.977 -34.942 -1147.18 163.564 -34.7379 -1132.81 163.795 -34.8485 -1069.53 163.653 -34.5208 -1104.11 163.267 -34.1348 -1002.83 162.586 -32.3932 -982.56 163.04 -34.3165 -1071.6 163.192 -34.4122 -1129.77 163.359 -34.2891 -1167.27 163.406 -34.5129 -1199.65 163.369 -33.9207 -956.66 163.358 -33.0335 -867.48 163.268 -32.8825 -1049.04 163.122 -32.8425 -975.44 163.138 -32.9945 -948.47 163.017 -32.7083 -1046.13 162.905 -32.5386 -1062.07 162.223 -33.0938 -1079.32 162.982 -33.121 -811.71 162.47 -33.1253 -974.06 162.736 -33.1578 -845.73 162.659 -32.5418 -1035.67 163.185 -33.2006 -803.99 162.692 -33.4224 -832.59 162.897 -33.4974 -790.97 162.63 -32.9367 -749.52 162.912 -32.9255 -761.79 162.26 -32.8528 -1060.94 162.413 -32.9478 -1014.11 163.166 -33.4809 -712.44 162.764 -32.7286 -915.98 162.471 -33.4516 -801.15 162.303 -33.345 -978.63 162.607 -33.7706 -688.1 162.492 -32.7405 -826.69 163.424 -33.5241 -866.63 162.442 -32.5186 -1063.4 167.008 -32.1627 -1045.27 162.31 -33.5787 -859.05 162.523 -33.6148 -620.4 163.55 -33.692 -1079.75 162.742 -33.6247 -632.26 162.955 -33.6563 -825.03 163.106 -34.182 -1108.71 162.534 -33.2974 -641.52 162.404 -32.3126 -991.21 163.191 -34.2675 -1216.23 162.942 -33.3133 -791.68 163.306 -33.6926 -727.17 162.801 -33.8111 -686.85 163.125 -33.6939 -860.17 163.004 -33.8295 -878.88 163.182 -33.8315 -1047.18 166.867 -33.0893 -840.56 163.105 -34.0139 -933.02 166.946 -31.9696 -622.54 166.911 -32.4796 -717.2 162.618 -33.97 -766.3 162.548 -34.1516 -699.82 166.99 -32.8166 -233.49 166.637 -32.2387 -665.57 162.945 -34.1727 -861.73 166.809 -31.8558 -576.47 166.85 -32.2967 -620.02 166.749 -31.9678 -550.15 162.869 -33.9982 -910.35 167 -32.9516 -354.36 162.731 -34.1636 -742.43 166.799 -32.1188 -768.38 166.947 -31.7996 -599.52 166.682 -32.4185 -575.12 166.963 -32.6601 -336.73 166.836 -32.8943 -470.85 166.84 -32.7598 -352.85 167.051 -33.2734 -797.19 168.978 -30.139 -3286.5 168.596 -30.2535 -3498.3 170.463 -32.467 -3512.94 170.562 -32.0358 -3986.77 169.447 -31.9515 -3924.71 169.04 -31.8977 -4059.68 170.901 -32.2952 -3405.99 169.381 -30.9275 -3733.6 168.953 -30.9607 -3667.43 169.972 -32.4822 -3395.43 170.58 -32.8558 -2792.6 168.771 -30.6257 -3858.33 170.231 -31.7515 -3947.01 170.663 -31.6567 -3934.04 169.907 -31.4792 -3926.48 169.615 -31.2157 -3771.19 169.17 -31.2641 -4144.4 169.801 -31.8482 -3903.27 169.419 -31.5971 -4200.06 170.882 -32.663 -3324.21 168.999 -31.5633 -4005.28 169.693 -32.1994 -3722.82 169.287 -32.2258 -3834.76 170.186 -32.7869 -3134.02 168.477 -30.9703 -3709.95 170.907 -31.0538 -3434.48 170.988 -31.9233 -2787.56 170.771 -30.772 -3754.45 170.353 -31.388 -4170.75 170.12 -32.1333 -3574.28 168.351 -30.5912 -3616.85 168.643 -32.0131 -3641.55 168.695 -31.3424 -3620.2 168.984 -30.3665 -3280.4 170.781 -31.3226 -3919.69 170.048 -31.1144 -3850.51 170.504 -31.0532 -3898.34 169.177 -30.6144 -3701.52 169.54 -32.5089 -3384.5 171.082 -31.5702 -3163.52 169.765 -30.9122 -3402.5 170.171 -30.6952 -3483.23 168.224 -30.3568 -3350.75 168.338 -31.2983 -3201.12 169.121 -32.5524 -2763.9 171.278 -30.8868 -2942.89 171.275 -32.1768 -3301.17 171.446 -31.8176 -2827.11 171.433 -31.4631 -2760.75 171.606 -31.1868 -2942.69 171.861 -31.5373 -2710.58 170.423 -30.2064 -2937.85 170.241 -30.3629 -3340.86 171.636 -32.1613 -3282.64 169.782 -32.7636 -3260.71 169.619 -30.6162 -3170.8 171.182 -31.2379 -3249.56 168.217 -30.1335 -2755.74 171.862 -31.9241 -2507.81 171.215 -32.5048 -3231.09 169.403 -32.7934 -2625.26 170.625 -30.4304 -2513.92 171.486 -32.395 -3234.82 168.682 -31.7125 -3038.14 168.049 -30.8459 -2154.43 171.845 -30.0873 -2478.96 171.796 -32.4758 -2704.12 171.919 -30.3157 -2611.81 171.799 -30.8777 -2760.16 169.375 -30.2272 -2921.33 171.499 -32.6591 -3033.67 172.054 -31.1665 -2221 171.591 -30.543 -2311.43 171.974 -32.2144 -2576.29 171.505 -32.9646 -3140.79 171.213 -32.8109 -3076.12 171.094 -30.5365 -2638.01 170.135 -30.1268 -2399.86 168.116 -31.1491 -2311.12 168.39 -32.0747 -1487.87 168.382 -31.8702 -2476.17 169.877 -30.3413 -2718.54 168.881 -32.2448 -2439.17 169.963 -33.0222 -2204.23 170.689 -30.1446 -2202.12 169.632 -33.0094 -1751.91 167.15 -30.0794 -2715.17 171.215 -33.0653 -2643.51 170.925 -32.9561 -2552.61 169.796 -30.0104 -2875.26 167.186 -34.6857 -2619.41 171.767 -33.4315 -2338.63 167.367 -34.9203 -2809.81 171.781 -32.8037 -2319.6 169.101 -32.8562 -2156.42 172.117 -30.1107 -2257.05 172.143 -30.8913 -2031.22 167.181 -30.7472 -2350.72 167.076 -30.429 -2546.73 167.772 -34.8885 -2396.07 170.983 -30.2649 -2205.97 167.216 -34.4055 -2194.53 172.089 -30.6097 -2050.29 167.264 -30.969 -2384 170.331 -33.1141 -2376.2 172.411 -30.0928 -2287.43 171.589 -30.211 -2218.09 172.269 -30.3281 -2038.6 168.007 -30.5281 -1847.3 172.102 -32.4434 -2413.33 172.181 -31.4073 -2023.67 170.928 -30.0558 -2083.23 172.132 -32.0337 -1991.85 171.293 -33.6375 -2114.78 167.212 -31.2181 -2269.11 167.529 -34.6286 -1922.39 170.696 -33.1476 -2060.95 168.544 -33.8555 -2114.59 168.347 -33.6769 -2166.24 168.1 -33.7066 -2091.47 170.216 -34.7964 -1999.44 172.824 -32.2094 -1918.35 169.862 -34.5576 -2126.86 171.302 -30.3256 -2279.06 170.115 -34.5497 -2138.89 168.886 -32.7271 -2230.57 169.533 -33.2335 -1842.65 169.316 -33.0612 -2254.55 172.836 -32.0148 -1960.28 168.864 -32.9083 -2071.04 172.096 -32.7023 -2132.1 172.344 -32.2781 -1749.23 170.048 -33.2593 -634.23 169.527 -33.4218 -2008.11 172.038 -33.3782 -1378.4 168.063 -31.4337 -2135.77 167.477 -30.8271 -1806.21 171.243 -30.0623 -1255.23 168.734 -33.9873 -1987.97 167.973 -30.2758 -1251.93 169.002 -33.0931 -2128.5 172.295 -32.5385 -1585.83 167.897 -31.0659 -954.05 169.937 -34.7404 -1548.46 172.681 -32.3516 -2033.04 168.175 -33.5305 -2133.33 169.419 -33.6266 -2109.44 170.537 -34.8472 -1914.09 167.44 -30.5651 -2464.98 169.726 -33.5562 -1916.19 168.648 -33.6257 -2071.32 169.232 -33.3512 -2074.87 172.362 -31.0288 -1743.99 167.285 -31.4781 -2300.32 167.829 -34.6561 -1811.98 167.494 -31.0637 -2242.98 168.148 -34.9547 -2151.36 170.471 -34.5738 -1595.91 168.528 -34.0899 -1878.87 170.542 -33.3722 -1940.55 167.546 -34.3798 -1515.68 169.289 -33.8893 -1915.37 169.651 -33.8533 -2045.29 168.224 -33.9322 -2059.29 172.735 -30.0511 -1888.9 172.791 -32.5622 -1839.02 167.854 -31.2619 -890.18 172.774 -33.0926 -2241.72 168.774 -33.3317 -2012.07 169.017 -33.6565 -2055.64 169.087 -34.3376 -2017.11 169.173 -34.1371 -1957.08 172.566 -33.081 -2072.78 168.976 -33.9501 -1952.78 169.476 -34.1019 -2003.79 172.322 -32.9525 -2063.96 168.724 -33.0498 -1991.61 168.405 -33.4296 -1862.31 169.724 -34.1032 -1949.31 169.617 -34.2663 -2031.81 168.785 -33.8209 -1929.21 172.535 -32.5482 -1576.39 172.868 -33.6606 -2056.76 172.793 -31.141 -1518.39 169.914 -34.2989 -1912.19 168.106 -33.3177 -1945.76 170.281 -34.3229 -1869.67 172.128 -31.7909 -1402.53 169.602 -34.5008 -1809.35 170.828 -34.9015 -1832.87 172.402 -31.2674 -1699.91 167.559 -31.3139 -2664.08 168.411 -33.106 -1980.91 169.946 -33.7216 -1894.79 169.944 -33.9836 -1885.77 172.577 -30.2945 -1915.17 168.609 -32.806 -1943.98 172.61 -32.1165 -1855.79 167.179 -34.1257 -1319.43 172.665 -33.3017 -1641.36 168.436 -34.8553 -1128.76 167.78 -33.2817 -1840.65 172.687 -32.83 -1882.22 170.777 -34.6941 -1747.72 167.999 -33.0148 -1973.38 167.488 -30.0036 -1857.78 168.513 -32.2845 -2074.51 170.599 -34.2937 -1685 169.361 -34.3185 -2080.55 172.397 -31.5049 -1544.77 169.727 -34.6834 -1553.95 172.382 -32.7133 -1535.61 167.904 -33.5518 -1768.14 170.254 -33.3942 -890.56 169.952 -33.5355 -1529.02 168.737 -32.523 -2028.79 169.693 -33.3606 -1540.79 168.263 -32.7924 -1914.73 172.857 -31.7689 -1734.52 170.144 -33.5849 -1517.88 168.011 -34.7499 -1871.98 172.776 -31.3334 -1467.36 171.049 -34.9437 -1695.55 168.333 -31.5885 -2338.82 168.847 -34.1874 -1650.52 171.764 -33.8234 -1339.45 167.711 -33.0538 -1546.67 167.707 -31.127 -1291.65 170.228 -33.8421 -1887.99 167.971 -32.7144 -2172.67 168.426 -32.5533 -1770.58 167.945 -32.5091 -2129.14 168.154 -32.5437 -2152.25 170.404 -33.603 -1571.79 170.554 -33.8368 -1956.16 170.726 -34.0541 -1889.97 170.85 -33.8254 -1707.21 168.584 -34.6292 -1883.4 171.009 -34.0309 -1410 167.752 -32.5933 -904.99 170.701 -33.6061 -1669.4 171.074 -34.4308 -1751.1 171.228 -34.2161 -1421.09 167.561 -31.835 -1781.01 167.802 -32.3854 -1998.16 172.463 -30.534 -1653.17 171.275 -34.8824 -1531.13 168.565 -34.3475 -1779.77 172.197 -33.5296 -1600.06 171.224 -34.6239 -1691.51 168.07 -31.6347 -2043.51 172.189 -31.5889 -1746.62 168.863 -34.4624 -1355.48 169.741 -34.8423 -1622.92 172.394 -30.7843 -1624.16 167.788 -34.4643 -1263.59 168.255 -34.6974 -1423.59 167.715 -32.8331 -1432.79 167.312 -31.7035 -1780.28 168.041 -32.329 -1677.79 167.727 -30.936 -1295.4 167.317 -31.8862 -1524.29 172.61 -31.8703 -1624.62 168.719 -34.9097 -1133.87 169.206 -34.558 -1283.52 167.834 -32.163 -1946.76 172.359 -31.969 -1458.53 168.041 -34.5554 -1355.78 171.474 -34.7203 -1491.59 167.544 -31.5786 -2741.67 172.246 -33.7008 -488.63 168.289 -34.4598 -1639.36 172.382 -31.7234 -1280.34 171.242 -33.983 -801.87 168.012 -34.3418 -1570.65 167.376 -33.0749 -1466.74 168.933 -34.7172 -1501.92 167.476 -33.5672 -2176.58 167.315 -33.2394 -1787.43 172.839 -31.5236 -1251.4 167.957 -34.1037 -1530.23 167.971 -30.0523 -1140.53 172.631 -31.2533 -1007.52 167.864 -33.8409 -1446.38 172.882 -30.8927 -1109.85 167.739 -30.6862 -1284.71 167.435 -30.2788 -1004.07 172.614 -31.6291 -1436.22 167.455 -34.2022 -1313.11 167.244 -33.4619 -1333.9 172.746 -30.481 -1109.87 167.735 -34.2506 -1365.08 169.485 -34.7709 -1304.92 172.561 -31.1268 -1234.46 172.818 -30.2821 -1330.87 167.604 -32.0728 -1803.47 167.325 -32.9342 -1940.02 167.507 -33.3708 -1491.31 167.405 -32.0304 -1080.8 167.658 -33.672 -1676.53 167.723 -30.1545 -1229.63 172.612 -31.4133 -1143.78 167.72 -30.4174 -1524.01 171.468 -33.7729 -1238.02 167.782 -31.4756 -1178.51 169.793 -33.2112 -930.52 167.661 -34.0458 -1401.38 172.615 -30.9437 -1162.07 167.78 -31.9559 -807.21 169.032 -34.9573 -1208.73 167.156 -33.0679 -1015.47 167.171 -32.5381 -1310.42 169.196 -34.7936 -1104.69 171.975 -34.686 -966.05 169.322 -34.9758 -1223.54 170.057 -33.432 -915.31 167.601 -32.2905 -1532.13 171.941 -33.9227 -1066.1 167.185 -32.0386 -888.08 168.273 -32.3815 -1508.49 167.54 -33.1631 -825.37 167.47 -33.7221 -1527.47 167.403 -34.0063 -991.61 171.806 -34.9374 -1152.68 168.262 -34.214 -1137.89 170.988 -33.6152 -653.51 167.149 -32.7279 -1230.19 167.28 -32.804 -1692.53 167.566 -33.8572 -1657.35 167.667 -33.4925 -1460.7 172.674 -30.7144 -1121.87 172.944 -30.6504 -1163.71 167.126 -31.8376 -902.45 168.114 -31.814 -1257.64 167.216 -33.9473 -887.54 167.565 -32.5583 -146.28 167.315 -32.1596 -361.96 167.188 -32.2117 -941.95 167.342 -32.3383 -862.77 168.241 -32.2012 -1065.82 172.12 -34.6578 -422.6 167.452 -32.1792 -811.11 167.111 -33.6322 -893.13 171.384 -34.0698 -637.48 167.787 -31.8122 -220.94 172.181 -34.8653 -640.71 172.205 -34.7416 -425.28 167.152 -33.7975 -697.2 167.52 -32.976 -1149.93 171.867 -34.0874 -335.39 167.351 -33.8356 -685.27 168.056 -32.139 -452.01 167.754 -31.6734 -799.04 167.323 -32.6726 -1937.15 167.15 -32.8843 -942.51 167.98 -31.9922 -484.47 172.107 -33.8019 -654.47 172.49 -33.9275 -481.5 169.879 -33.3911 -1151.32 167.92 -31.5919 -275.53 171.659 -34.3121 -415.51 172.053 -34.064 -939.95 172.044 -34.5595 -402.74 171.49 -34.1887 -543.45 171.422 -33.9282 -474.74 167.648 -32.4492 -663.02 167.303 -33.673 -750.94 167.915 -31.8638 -465.82 171.995 -34.2048 -255.22 171.967 -34.4262 -285.87 171.727 -33.9817 -222.55 171.542 -34.0319 -409.45 172.329 -34.9146 -318.75 168.188 -32.0131 -628.37 171.589 -33.8818 -590.15 172.305 -34.8103 -298.2 167.461 -32.7926 -1262.94 172.214 -34.0637 -497.85 172.239 -34.6432 -354.95 172.286 -33.8504 -194.33 172.544 -34.0482 -179.61 171.822 -34.2332 -354.58 171.926 -34.3078 -102.27 167.927 -31.7356 -325.94 172.316 -34.7141 -252.4 172.169 -34.5616 -319.11 172.319 -33.9822 -109.26 172.123 -34.4672 -243.09 172.154 -33.9467 -404.8 167.511 -32.4329 -190.09 172.341 -34.0918 -260.79 172.717 -34.0502 -157.26 167.592 -32.6847 -310.25 172.119 -34.3716 -247 171.682 -34.1394 -297.24 172.445 -34.9334 -193.89 172.276 -34.5593 -212.74 172.028 -34.3161 -113.65 172.441 -34.0454 -223.99 172.41 -34.8514 -179.03 172.35 -34.6247 -171.8 172.398 -34.7684 -158.5 172.138 -34.2712 -247 167.401 -32.528 -1261.19 167.469 -32.6464 -711.55 172.229 -34.4869 -209.62 172.369 -34.1915 -206.41 172.258 -34.2333 -229.22 172.206 -34.4156 -217.55 172.252 -34.337 -196.93 172.438 -34.1295 -173.61 172.357 -34.2883 -188.14 172.532 -34.9362 -172.58 172.351 -34.3594 -164.3 172.312 -34.4959 -160.02 172.482 -34.8037 -147.12 172.504 -34.8743 -163.74 172.306 -34.4237 -157.94 172.408 -34.6921 -134.54 172.618 -34.9729 -147.24 172.364 -34.5421 -113.24 172.599 -34.8874 -146.08 172.458 -34.2591 -136.59 172.463 -34.1909 -146.83 172.476 -34.7348 -130.74 172.399 -34.4057 -134.18 172.561 -34.826 -141.02 172.869 -34.2115 -153.15 172.44 -34.3422 -126.4 172.924 -34.327 -106.75 172.547 -34.7651 -122.56 172.697 -34.9626 -122.64 172.622 -34.8344 -128.53 172.681 -34.9135 -127.03 172.674 -34.8548 -120.2 172.389 -34.4699 -116.95 172.502 -34.1003 -139.29 172.481 -34.6721 -116.15 172.615 -34.7888 -119.57 172.432 -34.6364 -114.35 172.515 -34.1573 -109.77 172.662 -34.8095 -113.03 172.542 -34.705 -102.39 172.525 -34.2173 -102.99 172.441 -34.4391 -101.03 172.61 -34.7309 -105.46 172.536 -34.2666 -97 172.802 -34.1217 -145.94 172.468 -34.4027 -97 172.494 -34.6115 -97.24 172.745 -34.9799 -107.75 172.75 -34.9327 -105.74 172.428 -34.5815 -98.87 172.455 -34.4738 -89.04 172.751 -34.8683 -101.23 172.543 -34.6493 -37.97 172.682 -34.7585 -96.31 172.865 -34.2941 -92.96 172.88 -34.3485 -72.7 172.72 -34.8109 -99.59 172.52 -34.3147 -97 172.644 -34.1564 -97 172.635 -34.0866 -97 172.493 -34.5544 -88.94 172.44 -34.5194 -95.3 172.571 -34.1223 -97 172.583 -34.1864 -97 172.587 -34.2441 -97 172.71 -34.1339 -97 172.517 -34.3717 -88.79 172.585 -34.297 -88.24 172.764 -34.1994 -93.58 172.652 -34.2218 -85.96 172.698 -34.1878 -96.42 172.673 -34.6912 -79.01 172.518 -34.4153 -75.97 172.49 -34.446 -80.31 172.811 -34.9658 -85.7 172.802 -34.2581 -83.08 172.813 -34.905 -84.44 172.787 -34.8092 -75.26 172.939 -34.3682 -81.2 172.711 -34.2273 -84.85 172.825 -34.8514 -70.29 172.578 -34.3528 -70.38 172.731 -34.7141 -67.07 172.755 -34.7626 -74.39 172.633 -34.2738 -78.16 172.535 -34.5785 -50.79 172.745 -34.2505 -78.3 172.603 -34.673 -56.79 172.802 -34.3026 -73.92 172.512 -34.4967 -63.75 172.885 -34.9714 -63.01 172.754 -34.2919 -65.91 172.695 -34.2757 -70.38 172.86 -34.9302 -68.07 172.647 -34.3291 -61.4 172.821 -34.3398 -62.29 172.702 -34.6451 -53.87 172.722 -34.6752 -59.67 172.565 -34.4054 -57.09 172.817 -34.7622 -51.07 172.652 -34.638 -47 172.877 -34.8852 -55.07 172.714 -34.3286 -54.9 172.546 -34.4507 -53.89 172.85 -34.8041 -49.43 172.954 -34.97 -46.15 172.788 -34.7195 -50.62 172.943 -34.4005 -35.11 172.555 -34.5411 -28.73 172.767 -34.3343 -57.98 172.765 -34.6779 -46.9 172.912 -34.9279 -48.74 172.877 -34.84 -46.89 172.687 -34.3744 -47 172.839 -34.3824 -34.45 172.686 -34.6101 -41.45 172.939 -34.8889 -40.73 172.645 -34.5874 -47 172.895 -34.3888 -39.94 172.961 -34.9255 -39.15 172.55 -34.6082 -34.96 172.734 -34.3635 -47 172.741 -34.6482 -45.97 172.916 -34.8533 -41.85 172.735 -34.6059 -34.11 172.822 -34.68 -32.08 172.588 -34.4943 -27 172.617 -34.543 -24.91 172.841 -34.722 -29.9 172.784 -34.6376 -31.88 172.697 -34.5775 -29.65 172.969 -34.8483 -33.23 172.628 -34.3968 -41.29 172.776 -34.3817 -34.5 172.88 -34.7565 -24.27 172.92 -34.8069 -32 172.652 -34.5131 -27 172.676 -34.5463 -27 172.597 -34.622 -24 172.81 -34.4187 -23.53 172.723 -34.3966 -33.02 172.584 -34.5795 -16.43 158.691 -26.8903 -3354.05 158.979 -26.8214 -3228.24 158.73 -26.6125 -3328.55 158.835 -27.1691 -3387.97 159.07 -26.515 -3218.37 158.815 -26.2104 -3248.09 159.55 -28.5729 -3227.74 159.075 -28.389 -3354.18 159.221 -28.6133 -3225.34 158.785 -28.6402 -3320.64 159.438 -28.8262 -3085.2 159.07 -28.9464 -2999.15 159.107 -28.104 -3400.76 159.872 -28.0602 -3254.9 159.44 -28.2919 -3150.56 159.831 -28.4089 -3246.61 159.817 -27.7394 -3178.48 159.56 -27.2454 -3135.02 159.907 -27.4082 -2854.07 158.831 -28.2896 -3312.78 158.718 -27.9714 -3150.09 159.505 -27.5804 -3388.1 159.118 -27.7578 -3265.99 159.175 -27.3925 -3478.82 158.8 -27.5663 -3388.64 159.278 -27.0105 -2057.02 159.471 -27.9224 -3225.11 159.253 -26.7101 -1828.55 159.829 -28.7335 -3085.78 158.752 -25.5676 -3116.56 158.737 -29.7996 -2869.29 159.653 -28.9858 -2989.43 158.735 -28.9797 -3110.56 159.651 -26.9519 -2949.71 159.206 -26.2611 -3024.58 158.868 -25.3432 -3004.38 158.968 -25.802 -2903.58 159.67 -29.2624 -2787.56 160.079 -27.8279 -3317.34 159.378 -29.1017 -2935.93 159.316 -29.3685 -2782.77 158.681 -29.5294 -2895.85 159.025 -29.4328 -1289.61 158.844 -29.2229 -2529.31 158.779 -25.1729 -2876.4 159.831 -29.4849 -2560 160.283 -27.99 -2352.33 158.859 -24.9551 -2827.99 159.524 -29.582 -2909.9 159.077 -25.1656 -2775.65 160.101 -28.5418 -2936.64 159.961 -29.0271 -2666.43 158.971 -29.6792 -3010.88 160.091 -27.6252 -3178.65 158.936 -24.7383 -2747 158.865 -24.5809 -2713.92 159.206 -24.8538 -2696.24 159.127 -24.5695 -2533.37 160.183 -28.2772 -2633.26 159.56 -29.8389 -2607.09 159.856 -27.1125 -2741.87 159.126 -29.2155 -2080.57 159.139 -25.4721 -2330.11 159.818 -29.7157 -2581.66 159.228 -25.9903 -2905.77 158.942 -24.3625 -2570.62 159.425 -26.4581 -2442.48 160.045 -29.3002 -2593.89 159.478 -26.1496 -2493.81 159.22 -24.3652 -2462.35 159.98 -26.8167 -2265.81 160.253 -28.7858 -2560.87 159.773 -29.97 -2363.24 160.333 -27.7183 -2426.35 159.358 -25.0759 -1908.06 158.743 -23.9638 -2284.37 159.382 -24.4727 -2028.82 158.914 -24.1326 -2322.89 160.408 -28.5038 -2284.8 159.772 -23.9517 -2002.65 159.088 -23.9502 -2114.07 159.675 -26.2967 -2543.12 159.311 -25.7042 -2219.01 159.765 -26.0571 -2615.96 160.2 -27.116 -2423.86 159.754 -26.5614 -2423.27 160.051 -23.9961 -1997 160.034 -26.5199 -2006.46 160.098 -29.5643 -2046.14 160.318 -26.8458 -2036.54 160.007 -26.021 -2285.62 159.208 -24.1627 -2235.89 160.588 -27.3443 -2173.65 159.943 -26.2741 -2272.73 160.563 -28.6922 -2244.28 160.114 -29.8609 -1916.78 159.434 -23.9677 -493.66 160.467 -27.2096 -2057.59 160.305 -29.1018 -1857.04 159.612 -24.4112 -2024.65 160.269 -23.8928 -1997 160.859 -27.3612 -1864.91 160.602 -27.5637 -2166.34 159.833 -24.1401 -1866.92 160.316 -27.4321 -2348.4 159.35 -24.6472 -1020.75 160.767 -28.4906 -1938.84 160.383 -29.3914 -1770.71 160.698 -27.1548 -2042.05 160.305 -26.5813 -1874.77 160.573 -28.9216 -2082.41 159.918 -25.7587 -2040.15 160.893 -27.6534 -1888.73 160.313 -24.0717 -1985.93 160.075 -24.2068 -1970.33 160.607 -27.8517 -2053.21 160.582 -28.1919 -1946.95 160.536 -23.921 -1846.16 160.198 -26.1362 -2240.78 160.209 -25.8874 -2178 160.944 -28.2393 -1920.98 160.347 -24.2907 -1890.37 160.512 -26.9957 -1973.61 160.948 -27.9559 -1878.08 160.853 -23.9558 -1746.31 161.11 -27.2524 -1673.85 160.182 -26.3541 -2373.87 160.224 -25.6248 -1874.36 161.136 -27.4593 -1748.66 161.046 -28.4154 -1851.5 160.394 -26.0292 -2102.88 160.074 -24.4322 -1790.89 159.842 -24.3289 -1858.57 160.601 -24.123 -1755.23 160.815 -28.7593 -1810.93 160.433 -26.2747 -2313.87 160.967 -27.0955 -1870.58 160.501 -25.802 -1813.88 160.564 -26.744 -1983.18 160.009 -25.4846 -1680.61 161.194 -27.7064 -1704.73 159.33 -25.2643 -1879.14 160.621 -26.0608 -1852.05 161.146 -28.1031 -1816.84 160.038 -24.6684 -1586.06 160.379 -29.6632 -1821.66 160.673 -24.3645 -1702.07 160.613 -29.1847 -1561.55 160.485 -25.5057 -1849.58 161.05 -28.6062 -2052.82 161.357 -23.9067 -1288.46 161.274 -27.9294 -1626.09 159.797 -24.5582 -1751.67 160.781 -26.9092 -1745.16 161.203 -28.2748 -1730.05 160.359 -24.5669 -1674.4 160.691 -26.27 -1838.15 160.662 -24.5978 -1707.25 160.62 -26.4872 -1857.98 160.811 -25.8781 -1786.77 160.254 -25.329 -1802.75 160.722 -25.3707 -1854.39 161.333 -27.2683 -1739.04 160.746 -25.6152 -1824.85 160.684 -24.9521 -1455.64 160.519 -25.2829 -1800.26 160.697 -25.1501 -1638.99 160.533 -24.798 -1662.52 161.411 -27.4954 -1568.85 160.846 -26.645 -1757.03 160.436 -25.0592 -1799.03 160.447 -29.9006 -1720.91 161.234 -27.0589 -1574.22 160.656 -29.3927 -1423.9 159.832 -25.5593 -1129.38 160.899 -26.1424 -1724.57 161.019 -25.6983 -1742.8 160.899 -25.0126 -1553.21 160.874 -26.3917 -1750.61 161.079 -25.95 -1660.54 160.851 -24.7693 -1593.07 160.57 -29.5459 -1591.49 161.263 -28.4701 -1660.16 159.387 -25.5277 -1476.78 159.567 -25.8425 -2528.45 160.925 -25.228 -1544.6 160.896 -24.1672 -1619.02 161.132 -24.015 -1510.58 160.899 -24.5227 -1600.92 161.083 -28.8407 -1614.11 161.096 -26.8138 -1682.76 161.492 -27.0484 -1494.54 160.632 -29.7354 -1714.67 160.951 -24.3411 -1588.74 161.36 -28.116 -1649.6 161.308 -28.6841 -1581.56 160.851 -29.0081 -1509.87 162.296 -23.9276 -1383.69 161.119 -26.1416 -1679.82 160.216 -24.8594 -1650.53 161.475 -27.7488 -1455.97 161.125 -26.5015 -1631.4 161.056 -26.2904 -1656.26 160.964 -25.4533 -1452.57 161.596 -27.2675 -1379.57 161.142 -24.8846 -1532.4 161.394 -26.836 -1605.69 160.789 -29.5568 -1562.97 160.147 -25.097 -1601.39 161.44 -28.31 -1609.84 160.902 -29.2995 -1540.28 161.085 -25.1014 -1694 161.113 -24.64 -1529.98 160.692 -29.9389 -1563.61 161.137 -24.4288 -1501.17 161.297 -26.052 -1595.2 161.255 -26.2691 -1608.27 161.312 -26.6409 -1674.81 161.502 -28.5276 -1564.62 161.348 -28.9162 -1519.11 161.045 -29.5481 -1591.81 160.915 -29.8071 -1546.15 161.308 -25.7857 -1583.53 159.986 -24.8436 -154.85 161.148 -24.2284 -1499.39 161.154 -25.2887 -1573.08 161.731 -27.5335 -1485.72 161.489 -27.9585 -1369.32 161.597 -28.1258 -1436.34 161.853 -28.1567 -1555.34 162.349 -28.0707 -1358.92 162.11 -28.2224 -1495.48 162.321 -28.2942 -1486.62 161.931 -28.4006 -1646.95 161.745 -27.8825 -1507.1 161.133 -29.0866 -1649.21 162.183 -28.4479 -1681.43 161.683 -28.3528 -1554.36 161.863 -27.2527 -1438.09 162.015 -27.6877 -1514.53 161.266 -29.5383 -1496.48 161.397 -29.1367 -1484.76 162.054 -27.9662 -1560.63 161.563 -28.7582 -1642.24 161.224 -29.333 -1541.48 161.754 -28.5905 -1596.44 162.019 -28.6287 -1465.68 162.281 -28.6707 -1531.61 162.282 -27.7955 -1454.82 161.305 -24.7174 -1459.33 161.405 -26.4319 -1619.36 161.646 -26.8285 -1463.4 161.754 -27.0417 -1393.16 161.303 -25.093 -1453.81 162.028 -27.4231 -1331.18 161.48 -26.1993 -1463.55 161.541 -26.6212 -1440.96 162.254 -27.5354 -1477.25 162.088 -27.2291 -1344.39 161.455 -29.3089 -1455.93 161.605 -28.9908 -1409.29 161.85 -28.8474 -1496.18 161.333 -24.5338 -1351.13 162.125 -28.8475 -1535.04 161.682 -26.3827 -1325.51 161.599 -23.9245 -1074.9 161.898 -26.8214 -1367.97 162.037 -27.028 -1255.39 159.514 -26.7454 -1163.66 161.416 -24.8769 -1564.03 161.405 -29.4447 -1542.03 161.524 -25.9625 -1512.5 161.212 -29.7403 -1561.49 161.719 -26.1244 -1425.46 161.79 -26.6215 -1372.72 161.219 -25.5226 -1361.34 161.628 -29.2054 -1518.01 162.256 -27.3109 -1376.63 161.827 -29.0906 -1488.43 161.57 -25.0898 -1484.6 161.422 -25.3374 -1332.25 161.919 -26.2597 -1416.6 162.012 -29.0072 -1410.87 162.264 -27.1184 -1430.72 162.116 -26.8188 -1328.63 161.622 -29.4247 -1458.77 161.506 -24.667 -1276.9 161.475 -29.6338 -1400.86 162.2 -29.0559 -1427.76 162.325 -24.0946 -1276.78 161.907 -26.4541 -1406.76 162.282 -26.9214 -1410.15 162.054 -26.6134 -1373.75 161.65 -24.8395 -1324.18 161.831 -29.3027 -1423.61 161.699 -29.5959 -1456.99 162.029 -29.1891 -1185.79 162.041 -23.9219 -1112.06 161.584 -25.7277 -1381.39 162.146 -26.1726 -1337.06 161.769 -25.8909 -1412.6 162.104 -26.3797 -1435.85 161.958 -26.04 -1407.89 162.362 -24.2392 -1248.88 162.293 -26.7071 -1369.08 161.771 -24.9943 -1326.66 159.664 -24.2514 -1642.61 159.475 -24.9314 -819.6 162.283 -26.494 -1347.71 162.221 -29.2478 -1333.83 161.824 -29.4803 -1359.62 161.438 -25.5678 -1332.58 162.057 -29.4263 -1230.97 161.433 -29.9012 -1181.23 159.983 -25.2582 -1193.95 162.314 -26.2961 -1319.66 161.896 -29.6396 -1264.31 162.002 -25.821 -1305.83 161.684 -29.7816 -1174.5 161.364 -24.3242 -1242.75 161.869 -24.8148 -1198.49 162.188 -25.9545 -1226.02 162.335 -25.2311 -1355.87 161.658 -25.4657 -1259.01 161.933 -25.4509 -1195.54 162.219 -25.4672 -1331.21 162.082 -25.2281 -1359.03 162.17 -29.7028 -1202.48 161.797 -25.2186 -1296.4 162.04 -25.6286 -1106.65 161.92 -29.8681 -1123.69 162.355 -29.909 -1185.62 162.127 -29.9432 -1182.75 162.227 -25.7294 -1152.89 162.244 -24.9861 -1167.36 161.972 -25.0097 -1275.68 162.281 -24.7532 -1240.14 162.085 -24.8025 -1221.76 161.831 -25.6641 -1301.22 162.279 -24.3995 -1171.52 161.559 -24.4476 -1101.76 161.404 -24.1013 -1146.39 162.182 -24.6002 -1150.11 162.18 -24.2399 -1154.21 160.009 -24.9825 -1000.21 162.126 -24.074 -1161.07 161.988 -24.6467 -1120.21 159.974 -25.1121 -845.03 159.815 -24.7842 -867.97 159.829 -25.4016 -659.22 161.812 -23.9775 -997 162.025 -24.4287 -1080.03 161.77 -24.5941 -1042.27 161.64 -24.0727 -1010.34 159.214 -29.5814 -2460.47 161.591 -24.2375 -1032.62 161.975 -24.215 -1054.24 161.948 -24.0654 -1059.21 159.526 -25.0532 -194.26 161.785 -24.3414 -999.93 159.242 -29.8322 -2540.74 161.792 -24.1516 -997 159.442 -24.2664 -1693.86 159.545 -24.5898 -652.26 159.511 -25.1829 -228.48 159.861 -24.9341 -132.25 159.537 -25.6125 -1260.46 159.633 -24.848 -186.53 158.93 -29.8942 -1908.26 159.401 -25.3948 -1225.87 159.534 -25.4575 -300.59 159.709 -25.6539 -1446.49 159.654 -24.7114 -407.79 159.631 -24.9778 -40.44 159.47 -25.295 -1112.15 159.594 -24.1165 -253.58 159.478 -24.7653 -399.39 159.874 -25.0573 -242.29 159.882 -25.1617 -429.99 159.802 -25.252 -117.08 159.527 -25.3555 -525.61 159.741 -24.9147 -4.82 159.757 -25.0206 -16.67 159.569 -25.2792 -198.42 159.662 -25.3508 -22.75 159.664 -25.2153 -73.98 159.771 -25.1341 -85.55 159.685 -25.505 -309 159.647 -25.0975 -53.75 166.279 -28.0275 -3308.25 165.919 -23.9817 -3497 166.54 -27.7578 -3289.41 166.182 -24.4036 -3497 165.879 -28.0579 -3465.51 166.207 -26.0967 -3557.63 166.177 -24.1238 -3082.19 165.958 -25.9634 -3597.64 166.502 -26.0228 -3517.32 165.65 -27.8541 -3531.51 166.039 -27.6935 -3512.14 166.624 -28.0499 -3364.76 165.512 -23.9865 -3497 166.098 -28.2733 -3484.37 165.817 -24.324 -3497 166.058 -26.6891 -3556.15 165.325 -24.3509 -3497 165.556 -24.7345 -3634.87 166.448 -27.3653 -3418.55 166.2 -25.0948 -3396.96 166.407 -26.7564 -3521.91 165.562 -25.0836 -3618.16 165.533 -27.558 -3661.67 165.189 -25.0506 -3733.44 164.976 -24.385 -3497 165.533 -27.2261 -3559.73 166.416 -24.5804 -2961.27 165.617 -26.6463 -3604.7 166.062 -24.7052 -3596.35 165.103 -24.6547 -3497 164.76 -24.5681 -2956.77 165.921 -27.3124 -3592.51 165.824 -25.2757 -3493.57 165.431 -25.4113 -3784.87 165.776 -26.9801 -3552.94 166.21 -27.0233 -3558.25 166.117 -25.4387 -3454.8 166.618 -26.9911 -3540.74 166.411 -24.8376 -2985.7 165.837 -24.9728 -3691.45 165.902 -26.3078 -3651.15 165.8 -25.6529 -3622.45 165.005 -24.064 -3497 166.239 -25.7656 -3452.45 165.368 -27.8389 -3378.98 165.358 -26.9614 -3537.72 165.447 -25.753 -3627.73 166.9 -27.8945 -2882.91 166.906 -27.5474 -2947.42 166.425 -26.3999 -3446.84 166.475 -28.3496 -3279.93 165.009 -26.9638 -3312.65 165.14 -26.6406 -3332.72 166.715 -26.1901 -3292.59 166.903 -28.2354 -3149.18 166.727 -26.6785 -3318.17 165.629 -25.9995 -3338.2 166.59 -25.7535 -3152.33 165.143 -25.6779 -3554.7 165.759 -28.3855 -3342.33 165.078 -27.3183 -3361.97 166.882 -27.2069 -2904 166.088 -28.6101 -3148.05 164.804 -24.8767 -2951.43 166.797 -28.5465 -2957.76 164.589 -24.013 -2959.55 166.496 -28.7177 -3197.77 165.444 -28.1397 -3298.01 164.76 -26.8028 -3222.67 166.501 -25.4314 -3222.68 166.212 -28.9574 -3149.66 165.42 -26.3138 -3555.45 165.893 -28.9072 -3185.08 165.156 -27.6745 -3370.63 165.057 -27.9683 -3417.62 165.253 -25.9962 -3092.15 164.698 -24.2837 -2867.72 164.519 -29.2722 -3661.56 164.934 -29.3697 -3588.96 166.968 -28.9697 -3077.79 164.237 -29.4888 -3415.15 166.292 -29.2205 -3167.39 166.552 -29.3645 -3266.2 164.78 -29.0048 -3353.72 166.606 -29.0457 -3245.73 164.696 -27.1015 -3267.03 164.431 -28.9583 -3540.51 164.907 -29.7914 -3267.23 164.76 -27.7167 -3314.03 166.78 -28.7974 -2913.67 165.105 -29.0474 -3701.01 164.408 -27.6364 -3126.36 165.89 -29.2379 -3224.81 164.565 -29.6297 -3367.32 166.888 -29.2577 -3264.72 164.238 -29.8135 -3135.6 165.291 -29.6256 -3171.81 165.225 -29.9934 -2904.25 164.483 -26.9205 -2857.7 164.356 -27.8972 -3256.64 164.657 -28.0831 -3419.54 165.061 -25.3883 -3450.27 165.403 -29.2353 -3519.97 164.132 -28.9248 -2752.03 164.268 -27.4657 -2928.92 164.285 -28.2055 -3250.96 166.52 -29.6553 -3119.04 166.216 -29.4865 -3123.52 165.04 -28.7473 -3523.8 164.58 -27.4075 -3251.64 165.624 -29.5066 -2898.61 165.37 -28.5424 -2724.6 166.798 -29.5164 -3096.62 166.52 -29.917 -3056.21 164.966 -28.3619 -3400.67 164.512 -28.3991 -3190.38 164.193 -29.1768 -3136.99 164.308 -27.1791 -2868.13 164.664 -28.6883 -3300.24 166.613 -25.0676 -2945.58 164.746 -26.5002 -3214.21 164.797 -25.2141 -3231.68 166.882 -29.8068 -2952.71 165.367 -28.8801 -2893.23 164.078 -27.6951 -2524.12 166.455 -24.2978 -2686.34 163.961 -29.657 -2516.51 167.162 -29.4831 -2809.69 165.013 -26.2604 -3380.13 164.259 -24.0216 -2859.76 165.674 -28.7203 -3272.87 167.031 -28.7074 -2552.04 164.46 -24.4705 -2992.86 164.471 -26.4139 -3004.42 164.433 -24.219 -2946.71 166.831 -26.4006 -2949.04 164.527 -24.7325 -2709.86 166.826 -25.9367 -2179.54 165.905 -29.5858 -2649.7 164.657 -26.1985 -3037.42 166.153 -29.8402 -3024.23 166.511 -24.0036 -2652.91 165.654 -29.8574 -2646.87 164.181 -24.6972 -2626.37 166.797 -23.9356 -2627.79 167.095 -24.0062 -1224.29 164.473 -26.6699 -2856.71 166.726 -24.7406 -2807.78 164.18 -24.3229 -2880.65 164.896 -25.9366 -2877.43 166.676 -24.4603 -2696.04 164.269 -28.6499 -3262.97 165.638 -28.9956 -3169.93 164.448 -25.0402 -2827.77 167.293 -29.7907 -2360.79 166.951 -24.9942 -2563.64 163.988 -28.0421 -2296.67 163.934 -24.104 -2774.79 164.056 -25.0792 -2567.25 167.007 -26.8946 -2420.15 164.008 -27.3944 -2314.53 166.866 -25.3038 -2790.02 163.811 -24.4594 -2635.8 163.797 -24.8509 -2619.34 164.285 -26.1783 -2532.84 163.642 -24.1938 -2717.44 164.544 -25.8952 -2832.22 164.531 -25.3633 -3060.57 164.231 -25.3609 -2505.42 163.518 -24.6892 -2485.43 167.219 -29.1457 -2393.02 163.945 -29.3599 -2333.08 163.667 -23.9342 -2655.45 164.769 -25.5821 -2951.31 164.215 -26.5153 -2458.1 167.038 -24.752 -2754.33 163.713 -25.1714 -2404.13 163.97 -26.3392 -2168.2 164.251 -25.879 -2477.82 163.912 -29.0705 -2007.94 167.26 -28.8638 -2033.71 163.422 -24.389 -2333.37 163.91 -25.3887 -2273.93 166.798 -24.1993 -2396.87 164.399 -25.6237 -2862.33 166.983 -24.4834 -2430.1 163.376 -24.094 -2497 167.042 -26.592 -1979.31 164.039 -25.6706 -2289.35 164.176 -26.8491 -2280.84 163.282 -24.6133 -2179.86 164.042 -28.4065 -2426.79 167.068 -28.4758 -2352.11 163.183 -24.2569 -2240.29 163.031 -24.0399 -2325.76 163.95 -27.1081 -1934.13 167.152 -28.0421 -2451.66 166.97 -26.1811 -2474 163.481 -25.0018 -2131.96 167.23 -27.7588 -2256.59 163.618 -25.4406 -2038.7 167.374 -23.9992 -1001.35 166.836 -25.6183 -2505.78 163.887 -28.7571 -1885.68 163.942 -26.0266 -2023.88 163.934 -26.627 -1924.01 163.261 -24.8417 -1807.94 167.19 -25.2033 -1839.71 163.959 -29.9008 -2138.72 163.767 -25.599 -2059.32 163.72 -26.4632 -1746.52 162.716 -23.9711 -1850.19 163.676 -29.2445 -1675.38 163.133 -24.4696 -1743.21 163.423 -25.2754 -1867.63 163.691 -29.5222 -1574.74 167.107 -25.5079 -2364.4 162.945 -24.3259 -1746.31 167.221 -24.9127 -1520.66 163.747 -26.245 -1819.09 167.208 -27.5162 -2103.16 162.735 -24.2 -1643.57 163.806 -27.8229 -1844.64 163.071 -24.6955 -1699.3 163.88 -26.8684 -1794.17 163.709 -28.2604 -1808.99 162.486 -23.9727 -1562.2 167.283 -28.5947 -1547.25 163.771 -27.5944 -1702.61 163.645 -28.9753 -1611.62 163.723 -25.8174 -1936.66 167.326 -26.9571 -1204.81 163.678 -29.8206 -1710.72 167.14 -27.1196 -1062.61 163.675 -28.5307 -1841.53 163.533 -25.6667 -1839.18 163.645 -26.7264 -1642.82 167.089 -24.2458 -1678.36 163.593 -28.7516 -1619.14 167.264 -24.3865 -1422.7 163.445 -29.3999 -1463.39 163.679 -27.3157 -1581.4 163.426 -29.1482 -1576.63 163.153 -28.8038 -1590.43 163.173 -25.1236 -1399.88 163.674 -27.0121 -1609.71 162.892 -24.5615 -1497.53 163.012 -24.9183 -1320.63 163.445 -29.6499 -1424.28 163.477 -25.8621 -1677.56 163.396 -28.8958 -1607.11 162.52 -24.134 -1492.43 163.402 -29.8575 -1421.47 163.345 -25.5138 -1534.58 163.486 -28.3931 -1508.79 162.925 -28.6944 -1653.38 167.079 -26.0014 -1594.58 163.578 -26.0685 -1713.55 163.183 -29.0694 -1438.49 167.136 -27.3319 -1158.23 162.695 -24.4357 -1469.31 163.572 -27.7762 -1525.82 167.077 -25.7804 -1565.63 167.27 -28.3005 -1210.86 163.643 -28.0068 -1630.02 167.256 -26.7159 -1946.49 163.123 -28.5847 -1421.81 167.279 -24.6395 -1305.09 163.512 -26.5277 -1481.49 162.503 -24.3283 -1377.93 163.222 -29.3097 -1430.13 162.845 -24.777 -1282.2 163.381 -28.6153 -1320.78 163.237 -29.5318 -1289.94 163.426 -26.9163 -1543.65 162.904 -28.9807 -1308.14 163.245 -25.7606 -1288.02 162.738 -28.791 -1337.53 162.499 -28.2564 -1483.57 162.689 -28.3459 -1529.47 162.712 -28.5823 -1509.59 162.462 -28.4735 -1558.27 162.853 -28.2409 -1384.36 163.453 -27.1616 -1522.67 162.549 -27.8664 -1429.67 162.94 -28.44 -1480.64 163.513 -27.5469 -1490.1 167.361 -25.4256 -1513.26 162.533 -28.7314 -1333 163.307 -25.9973 -1264 163.186 -25.362 -1245.23 162.663 -28.1036 -1513.34 163.209 -29.7561 -1247.51 162.664 -24.6656 -1307.49 163.528 -26.3274 -1557.97 162.919 -25.1134 -1054.95 162.493 -27.6267 -1412.97 162.614 -28.9664 -1385.32 162.991 -29.2534 -1280.56 167.308 -24.1813 -1239.71 162.762 -27.9038 -1481.68 162.779 -24.9814 -1171.77 163.214 -29.9876 -1338.47 163.433 -27.3653 -1396.72 167.319 -25.6826 -1464.38 167.109 -26.3618 -795.59 162.467 -27.3865 -1393.23 162.437 -24.5691 -1217.21 167.231 -26.1665 -1378.7 162.943 -28.0413 -1367.2 163.327 -26.2133 -1288.86 163.356 -26.6746 -1238.77 162.723 -27.6995 -1444.14 163.066 -29.4414 -1259.43 162.428 -27.2075 -1418.19 162.361 -28.9021 -1315.27 163.069 -25.5557 -1126.96 163.384 -27.951 -1468.43 163.336 -27.7225 -1367.52 167.415 -25.2381 -1438.82 162.925 -25.3364 -1121.77 162.478 -27.0386 -1404.09 163.275 -27.0684 -1235.67 163.228 -28.3715 -1428.69 163.075 -25.9608 -1316.11 162.412 -29.1404 -1392.42 162.688 -29.2488 -1111.37 162.529 -26.8066 -1362.58 162.707 -27.4553 -1516.54 162.652 -24.8545 -1298.93 163.015 -29.6272 -1217.05 162.482 -26.5744 -1399.17 163.438 -28.1839 -1561.09 162.668 -27.2013 -1414.57 163.29 -27.5073 -1346.66 162.942 -29.8826 -1205.33 167.41 -25.0548 -1295.56 163.238 -27.2836 -1247.23 162.448 -26.3999 -1401.71 162.862 -29.461 -1262.03 162.386 -29.4284 -1259.98 162.718 -25.1885 -1153.26 162.71 -26.9595 -1365.12 162.935 -27.7885 -1463.95 163.319 -26.4383 -1155.44 162.523 -26.2431 -1238.01 162.787 -26.2254 -1407.25 162.788 -25.5801 -1232.21 162.372 -26.0926 -1297.27 162.948 -25.775 -1312.39 162.604 -26.0384 -1276.21 162.844 -25.9886 -1323.31 162.634 -26.4203 -1277.73 162.697 -26.6228 -1290.62 162.748 -26.7885 -1333.31 162.763 -29.6766 -1150.78 162.638 -29.5005 -1190.25 162.63 -29.8918 -1269.31 162.49 -29.6875 -1220.22 163.153 -26.1221 -1248.31 162.467 -24.8115 -1126 162.916 -27.0519 -1349.5 162.987 -26.1219 -1242.91 163.106 -27.1145 -1300.27 162.528 -25.0446 -1210.36 162.885 -26.8717 -1328.11 163.124 -26.8706 -1284.61 162.925 -27.56 -1316.14 162.423 -25.8711 -1223.36 163.105 -27.4651 -1299.95 163.077 -26.3124 -1145.15 163.108 -26.5781 -1139.91 162.869 -26.4736 -1294.56 162.905 -26.6992 -1302.16 162.442 -25.3905 -1303.26 163.191 -28.1155 -1323.38 162.646 -25.3932 -1299 163.031 -28.2418 -1284.5 163.147 -27.8817 -1334.33 162.675 -25.8098 -1283.62 162.483 -25.6093 -1191.52 162.534 -25.2496 -1176.1 163.12 -27.656 -1335.54 162.959 -27.3024 -1364.72 167.283 -25.9308 -1115.16 167.268 -26.4951 -976.78 167.335 -27.2104 -865.06 167.4 -26.2446 -882.48 167.318 -27.3925 -1343.81 167.291 -26.3311 -903.81 168.801 -29.9126 -3028.07 172.39 -24.9963 -4287.13 172.278 -24.6401 -4014.33 172.294 -24.1374 -4103.33 172.468 -26.3683 -3760.87 172.435 -26.0248 -3750.38 171.907 -24.346 -3983.41 171.923 -24.0059 -3997 170.719 -24.5598 -3893.8 170.957 -24.8378 -4047.67 170.858 -25.1741 -4114.37 170.538 -24.2834 -3835.53 171.352 -24.8071 -3916.56 171.179 -25.0785 -3837.88 170.185 -24.2721 -3628.86 171.172 -25.4 -3872.11 171.501 -25.578 -4100.44 169.707 -27.6716 -3835.11 170.45 -26.7232 -3873.43 171.553 -25.1865 -3989.04 171.922 -25.1493 -3948.53 172.119 -24.9623 -4042.14 170.519 -24.9236 -4015.23 170.72 -26.969 -3820.12 170.764 -25.5495 -3650.86 171.903 -25.5257 -3835.31 169.781 -27.9375 -3319.85 171.593 -24.068 -3997 171.162 -24.121 -3997 170.848 -24.2966 -2549.75 170.391 -24.0158 -3882.42 171.176 -25.8337 -3749.1 170.748 -26.5267 -3899.76 171.136 -26.7673 -3555.18 171.684 -25.9637 -3737.19 171.488 -24.4402 -3881.76 171.096 -24.5083 -3648.19 170.329 -26.9556 -3854 169.339 -27.5483 -3337.61 170.125 -26.7242 -3799.25 170.327 -26.4402 -3756.71 170.34 -24.5614 -3558.69 169.654 -27.3238 -3862.56 170.959 -26.1829 -3398.48 170.545 -25.2738 -2547.33 172.341 -26.7592 -3556.93 170.017 -27.4699 -3797.34 171.344 -26.2367 -3724.11 171.125 -26.4597 -3712.78 170.818 -27.3585 -2689.73 169.614 -27.0106 -3557.35 169.762 -26.7419 -3700.43 170.561 -26.1607 -3078 172.089 -25.896 -3660.44 172.079 -26.2945 -3987.05 171.225 -27.1875 -3334.2 170.775 -25.9024 -2663.79 170.756 -24.0273 -3570.2 171.445 -26.5641 -3873.96 171.555 -26.8964 -3631.09 171.947 -26.9544 -3598.93 169.136 -29.9351 -2380.23 169.99 -24.5112 -2256 168.58 -27.6424 -3325.7 169.014 -27.7892 -3252.92 168.27 -27.3675 -3341.36 171.842 -26.6469 -3209.47 168.347 -27.9237 -3170.41 171.745 -27.2319 -3016.71 168.159 -27.6876 -3249.86 168.69 -28.0678 -3062.01 168.3 -28.2045 -3343.86 169.985 -27.0748 -2369.64 170.398 -27.2868 -3314.54 169.397 -26.765 -3322.61 170.154 -25.5577 -2819.72 169.983 -24.0194 -3262.52 170.148 -26.1159 -3429.65 168.358 -27.0316 -3244.4 171.818 -24.7906 -3995.69 168.628 -27.2533 -3178.09 169.931 -26.4193 -3223.9 167.933 -27.446 -2824.49 171.941 -27.5139 -3065.23 170.025 -27.7918 -4010.18 167.999 -27.9982 -2599.73 169.434 -27.9399 -3205.07 169.688 -28.1581 -2906.09 170.092 -24.8182 -1879.03 169.092 -28.1035 -3235.89 168.956 -27.4078 -3112.46 171.68 -26.3463 -3404.53 168.549 -28.412 -3175.75 168.403 -29.9108 -2850.85 168.623 -29.6671 -1940.51 170.406 -25.4816 -1792.99 168.919 -28.3735 -3248.08 168.688 -26.9168 -2635.13 171.52 -27.9638 -3188.68 169.359 -28.3445 -2849.33 171.537 -28.3332 -3103.65 170.546 -29.1819 -2967.37 168.734 -28.6189 -3161.73 171.515 -27.5778 -3039.69 171.042 -28.6143 -2911.44 171.195 -28.4327 -3118.8 171.948 -28.8178 -3397.52 171.81 -28.1225 -3527.54 171.879 -27.8316 -3251.64 171.048 -28.8405 -3014.38 171.189 -28.1433 -3420.53 171.355 -28.71 -2882.99 168.988 -29.0423 -3208.86 171.927 -28.38 -3328.94 168.701 -28.884 -2897.28 171.174 -27.8115 -2932.76 168.216 -28.4994 -3047.13 170.425 -29.9577 -2914.21 168.178 -26.7827 -2881.51 171.746 -28.6406 -3443.47 167.954 -27.0891 -2847.39 169.27 -27.1476 -2859.82 170.82 -29.0274 -2987.52 169.066 -28.7041 -3230.27 172.239 -27.2465 -3134.28 171.118 -27.5149 -2890.2 168.405 -28.7261 -2941.51 168.456 -26.7617 -2667.78 169.969 -25.797 -2594.28 170.594 -27.5537 -2562.25 168.684 -29.1679 -2847.96 171.236 -29.1041 -2529.65 172.028 -28.6162 -2716.48 170.426 -29.4303 -3107.21 170.763 -28.7306 -3098.34 170.457 -28.929 -2649.26 171.978 -29.8918 -2290.91 170.321 -27.6411 -2942.34 170.673 -29.6982 -2483.42 170.258 -29.6847 -2793.3 170.286 -27.9095 -2938.25 169.34 -25.9668 -3019.04 169.136 -26.1522 -2955.61 170.031 -28.1154 -2992.38 170.109 -29.4671 -3269.28 169.803 -28.4413 -2843.68 169.144 -26.4504 -2478.53 169.697 -26.0999 -2915.09 169.02 -26.8208 -2571.34 169.37 -26.2194 -3045.13 169.601 -25.7572 -2947.24 169.866 -29.3687 -2987.56 167.831 -27.7227 -1969.32 169.87 -29.6703 -2497.4 168.919 -27.1045 -2587.44 168.659 -26.0214 -2900.66 170.849 -27.9952 -2883.69 172.046 -29.1012 -2739.16 169.548 -26.4412 -2797.16 172.282 -28.7735 -2723.85 168.715 -26.5618 -3096.92 170.157 -29.1836 -3033.73 171.663 -28.9586 -2640.46 170.148 -28.3815 -3100.18 169.502 -28.7094 -2842.89 168.855 -26.2231 -2582.15 170.859 -29.3699 -2672.17 170.4 -28.5824 -2670.29 172.237 -28.4572 -2757.41 170.853 -28.379 -2690.85 168.937 -29.2982 -2976 170.457 -28.1693 -2758 172.167 -28.1172 -2555.28 170.409 -25.7958 -2272.21 168.382 -29.0442 -2583.53 170.048 -28.5991 -2891.63 170.092 -28.8483 -3275.95 170.097 -29.89 -2828.95 169.826 -28.732 -2916.45 172.307 -27.7121 -2785.9 171.831 -29.6409 -2679.19 172.013 -29.4144 -2666.25 169.298 -28.9558 -2594.69 169.276 -25.6785 -2762.3 172.456 -29.0647 -2789.97 168.696 -29.4236 -2107.61 168.346 -26.5224 -2555.16 172.322 -29.3377 -2924.9 169.455 -29.8113 -2463.69 169.247 -29.2378 -2590.98 169.821 -25.4935 -2428.89 170.56 -27.8218 -2741.32 171.527 -29.6248 -2075.33 170.15 -25.2242 -2331.64 167.954 -28.3313 -1865.78 169.686 -29.062 -2644.03 170.746 -29.945 -2229.64 169.514 -25.53 -2215.42 171.65 -29.3341 -2620.28 169.887 -24.2788 -1949.96 168.601 -25.728 -1999.95 170.852 -27.6741 -2571.52 172.216 -29.6579 -2416.94 168.251 -25.2998 -1870.89 168.386 -25.4796 -1977.12 168.081 -25.481 -2425.49 168.045 -26.5266 -2340.26 169.524 -29.4626 -2205.82 169.058 -29.5937 -2216.1 171.011 -29.6369 -2440.08 168.52 -26.2656 -2295.73 170.98 -29.8623 -2256.25 169.774 -25.2369 -2528.19 169.674 -23.9242 -2201.14 168.216 -25.7385 -1539.88 171.262 -29.48 -2355.37 169.582 -25.3584 -2221.27 168.279 -25.1161 -2167.5 168.971 -25.9012 -2665.27 169.29 -25.3785 -2076.85 167.893 -26.7613 -2024.67 167.5 -29.5717 -2185.37 171.613 -29.9006 -2226.35 167.511 -29.2878 -2289.15 169.492 -24.6021 -2247 168.798 -24.8289 -2043.75 169.684 -24.4343 -2247 168.362 -26.002 -1933.89 168.997 -25.3031 -1900.08 169.751 -24.702 -2337.39 169.437 -24.8555 -2140.81 168.191 -26.2679 -2293.32 169.512 -25.1528 -2077.3 168.948 -24.6686 -2066.61 169.218 -24.6277 -2151.54 169.794 -24.9942 -2358.8 168.023 -26.0092 -2220.97 169.368 -23.9444 -2104.01 167.654 -27.5236 -1421.24 169.366 -24.3991 -2131.32 169.069 -24.8603 -2043.04 172.248 -29.922 -2209.48 167.607 -29.7831 -2117.33 168.66 -24.6113 -2093.39 168.487 -25.2221 -1870.14 168.021 -25.2001 -1948.84 167.493 -29.0076 -1927.08 169.594 -24.1572 -1997 167.857 -26.2983 -1840.79 168.968 -25.563 -1814.01 167.842 -25.7311 -1967.71 168.822 -25.0904 -1686.8 168.995 -24.4146 -1997 169.192 -25.1007 -2092.36 169.035 -23.945 -1997 169.208 -24.168 -1997 167.554 -23.9243 -1160.67 168.887 -24.1476 -1997 168.621 -24.0815 -1997 168.154 -24.9065 -2346.72 168.502 -24.9319 -1869.1 168.648 -24.3157 -1997 168.079 -24.4261 -1997 168.381 -24.1904 -1975.79 168.354 -24.7047 -1997 168.342 -24.4485 -1830.92 167.813 -26.5439 -1563.4 168.388 -23.976 -1755.44 168.159 -24.2713 -1990.09 167.802 -25.4192 -1574.42 167.726 -29.6205 -1228.69 168.708 -25.3983 -2046.92 168.122 -28.7168 -1213.95 168.461 -29.5079 -1222.74 168.412 -29.3143 -1420.5 167.536 -28.739 -1390.52 167.721 -28.1488 -1266.86 168.124 -24.6312 -1608.78 168.192 -23.8828 -1776.56 171.276 -29.7685 -2198.16 167.695 -29.4594 -1207.39 167.711 -26.0335 -1568.34 167.996 -28.5756 -1026.88 167.891 -24.2583 -1636.56 167.975 -23.8898 -1661.2 168.111 -24.0622 -1657.23 167.861 -24.5403 -1568.39 167.718 -27.3028 -1360.84 167.734 -25.1873 -1393.16 167.528 -25.8418 -1525.31 167.862 -24.9694 -1573.28 167.444 -28.0237 -1399.65 167.798 -24.0038 -1507.92 167.568 -25.5764 -1569.14 167.943 -24.765 -1492.6 167.64 -24.5613 -1228.88 167.632 -26.4578 -1149.76 167.546 -27.7522 -1497.7 167.695 -28.3521 -1317.34 167.514 -28.4738 -1338.86 167.774 -29.9348 -1025.27 167.727 -29.0902 -839.56 167.584 -26.249 -1218.07 167.569 -25.3391 -1344.87 167.641 -26.7061 -1100.59 168.147 -29.9497 -1387.23 167.704 -24.7571 -1247 167.715 -26.9106 -1052.91 167.703 -27.9293 -1481.19 167.549 -25.164 -1193.56 167.649 -24.3833 -1259.23 168.176 -28.9058 -1286.46 167.53 -28.258 -1047.55 167.619 -25.0006 -1094.19 168.318 -29.6541 -1259.21 167.771 -28.5705 -986.17 168.285 -29.4749 -906.56 167.51 -24.6532 -997 167.459 -24.8324 -1367.96 167.536 -26.8902 -777.74 167.677 -28.9057 -580.31 167.453 -24.3133 -1038.81 167.575 -24.1439 -1054.16 167.409 -27.5487 -1424.94 167.445 -26.7682 -1063.38 167.583 -27.1013 -870.28 167.466 -24.4869 -997 167.449 -26.5883 -1081.12 168.131 -29.0773 -271.12 167.764 -29.2916 -627.75 167.457 -26.0823 -1118.67 167.498 -27.3488 -1017.07 167.893 -29.6173 -278.79 167.755 -28.7787 -207.05 167.991 -29.8655 -729.53 167.438 -26.3939 -889.33 168.166 -29.7923 -987.31 167.837 -29.757 -651.62 168.211 -29.2209 -501.33 168.011 -29.7096 -491.21 168.221 -29.3585 -750 167.934 -29.31 -59.58 167.99 -29.0985 -69.22 168.084 -29.3297 -256.68 167.889 -29.1736 -60.14 168.131 -29.4545 -507.99 168.011 -28.9882 -42.02 167.99 -29.4353 -56.2 167.896 -29.0548 -31.32 168.143 -29.6579 -251.66 168.037 -29.2013 -64.86 167.92 -28.7385 -171.19 167.853 -29.4269 -80.46 168.18 -29.5616 -544.86 168.038 -29.5679 -245.69 167.817 -29.5281 -210.74 167.92 -29.5164 -47.6 167.861 -28.92 -247 168.017 -28.8556 -57.87 175.385 -27.1448 -4650.15 175.426 -26.8211 -4631.06 175.789 -26.9763 -4578.13 172.748 -25.7451 -4306.6 175.199 -26.4575 -4596 175.316 -27.4654 -4227.09 175.736 -26.6052 -4508.79 175.842 -27.4389 -4476.09 175.323 -26.0628 -4489.28 175.781 -26.1792 -4545.43 176.073 -26.7777 -4400.11 175.113 -24.3037 -4497 176.176 -25.4257 -4539.83 176.167 -28.1409 -4389.81 174.468 -24.992 -4535.37 176.345 -24.8391 -4375.65 175.501 -24.3455 -4497 175.904 -24.6076 -4536.81 176.427 -24.5215 -4482.63 174.05 -24.9291 -4547.88 175.555 -25.0207 -4587.43 176.052 -25.0858 -4525.92 175.005 -25.0577 -4627.9 174.943 -26.0729 -4519.92 174.712 -26.3351 -4559.58 174.517 -26.0448 -4599.75 174.136 -25.988 -4562.79 176.339 -27.8235 -4312.47 175.862 -27.9399 -4583.76 175.335 -25.3081 -4601.42 176.558 -25.2067 -4477.16 174.672 -26.6588 -4400.78 175.729 -25.428 -4448.59 175.308 -24.6535 -4659.58 174.765 -24.5987 -4292.36 174.275 -24.6293 -4497 174.442 -24.3608 -4391.06 173.916 -24.6411 -4344.96 175.554 -25.8015 -4540.56 176.04 -25.7612 -4527.47 174.33 -25.6922 -4574.24 174.762 -25.7457 -4602.18 175.162 -25.7862 -4610.51 176.171 -26.4783 -4431.72 174.168 -25.308 -4512.5 174.628 -25.3784 -4593.68 175.354 -25.559 -4667.68 176.169 -24.2527 -4497 174.738 -24.2556 -4489.52 176.334 -24.0064 -4497 175.402 -24.041 -4497 174.948 -23.9747 -4497 176.382 -27.403 -4219.23 176.215 -27.0766 -4369.35 172.999 -25.4802 -4387.39 173.716 -24.8402 -4245.7 175.442 -27.7809 -4341.44 173.019 -25.1424 -4230.37 173.823 -25.6512 -4374.2 176.504 -25.6469 -4519.39 176.442 -26.7606 -4435.09 173.74 -25.1856 -4455.34 176.42 -26.0909 -4464.49 176.506 -24.2488 -4462.03 175.895 -28.3254 -4223.48 176.764 -24.7936 -4540.73 175.036 -26.9077 -4466.89 176.851 -25.8763 -4412.07 176.576 -26.4564 -4348.63 174.269 -26.3622 -4431.53 175.033 -25.4749 -4621.02 174.009 -24.3229 -4267.72 176.482 -28.1826 -4279.47 173.781 -26.1338 -4431.39 176.957 -25.5217 -4418.86 176.756 -24.0575 -4380.94 174.423 -24.0402 -4337.91 176.835 -24.4104 -4349.27 173.353 -24.9432 -4492.18 176.972 -26.2649 -4368.21 176.715 -27.1184 -4284.89 177.336 -25.8698 -4216.42 173.53 -24.5371 -4264.69 173.352 -25.38 -4615.95 176.862 -26.6954 -4344.15 176.297 -28.4397 -4335.44 177.406 -26.2793 -4279.7 177.283 -26.6268 -4265.63 173.829 -26.5635 -4139.65 177.352 -25.438 -4378.86 172.848 -26.2204 -4296.55 173.268 -25.8579 -4141.52 173.352 -26.3702 -4292.26 176.793 -27.5884 -4110.21 177.121 -26.9632 -4239.85 177.303 -24.6787 -4354.38 173.081 -24.6589 -4167.26 177.232 -24.2147 -4152.44 177.069 -29.8464 -4264.4 174.24 -26.7882 -4282.61 174.872 -28.7599 -4047.36 175.995 -28.713 -4147.65 175.118 -28.3959 -3729.44 175.598 -29.0325 -4228.37 175.239 -28.7644 -4186 175.045 -29.1276 -4179.31 173.882 -26.9005 -3653.53 176.629 -29.8528 -4250.98 177.22 -29.6059 -4164.4 173.544 -24.1304 -4221.83 173.941 -23.9518 -4247 173.15 -23.9494 -4247 177.591 -24.0291 -4215.41 174.662 -29.3171 -4191.95 172.751 -24.0512 -4147.1 172.732 -24.8576 -4158.74 172.705 -24.432 -4094.63 175.873 -29.4887 -4271.64 173.023 -26.612 -3471.28 176.157 -29.8816 -4267.75 172.633 -25.2989 -4211.79 177.097 -25.1265 -4327.77 175.127 -29.8677 -3840.47 174.683 -29.0305 -4112.01 172.681 -26.5525 -4234.9 174.959 -27.2909 -4073.21 177.203 -28.4467 -4055.82 175.557 -28.5639 -4195.64 176.143 -29.1191 -4227.99 174.159 -27.1432 -3880.39 175.366 -29.4984 -4309.88 175.167 -28.0185 -4102.45 176.853 -29.4886 -4281.74 174.916 -29.5431 -4148.21 177.177 -27.3391 -4159.53 176.511 -28.8228 -3880.75 176.89 -28.06 -4198.17 176.73 -28.4535 -4183.91 177.395 -29.8066 -3958.83 177.257 -29.3311 -4046.46 176.556 -29.208 -4260.14 173.124 -24.2895 -4085.3 174.589 -29.5956 -4134.89 176.367 -29.5052 -4333.78 175.505 -28.1594 -2656.12 174.963 -27.7038 -4056.71 175.633 -29.9306 -4217.85 172.757 -26.7995 -3620.45 177.279 -29.0322 -3822.9 177.427 -28.1409 -3999.75 174.595 -27.0431 -4186.2 176.908 -29.1043 -3998.88 174.387 -29.4622 -3910.02 173.453 -26.8261 -3276.3 177.271 -27.7548 -4110.28 177.014 -28.7667 -4074.98 177.476 -28.7775 -4071.95 174.816 -28.0942 -4114.15 174.712 -29.8651 -3985.47 174.504 -27.4697 -3825.7 174.579 -27.8462 -3835.21 172.7 -27.0985 -3394.04 173.355 -27.1782 -3797.37 174.652 -28.4608 -3551.08 173.044 -27.3413 -3729.39 173.723 -27.1865 -3988.3 174.372 -29.1673 -3614.23 174.302 -29.8064 -3707.95 174.41 -28.1603 -3534.63 173.058 -26.9695 -3550.81 174.469 -28.8254 -3677.79 174.22 -27.8177 -3817.4 173.965 -28.1611 -3628.22 173.01 -27.755 -2284.67 172.666 -27.4877 -2454.28 174.029 -29.4372 -3604.16 173.865 -27.802 -3345.64 173.994 -27.4888 -3575.5 173.496 -27.5822 -3264.79 174.031 -28.9511 -3551.32 174.225 -28.5288 -3395.29 173.652 -28.8974 -3250.95 173.809 -28.5809 -3278.16 173.573 -28.2812 -3125.42 173.86 -29.8554 -3033.26 173.648 -27.9604 -3074.35 173.402 -28.6478 -2677.16 173.36 -29.0424 -2703.85 173.249 -28.3288 -2542.55 173.343 -27.9975 -2922.43 173.664 -29.2211 -3017.04 173.532 -29.9297 -2725.99 173.111 -28.5528 -1625.55 172.528 -28.0306 -2825.72 172.801 -27.9954 -2363.75 172.669 -27.7934 -2417.83 172.448 -28.2833 -2857.95 173.324 -29.3915 -2724.72 173.605 -29.5979 -2977.29 173.001 -28.3679 -1719.05 173.036 -28.8483 -1602.66 172.591 -29.2725 -2893.15 172.599 -29.5366 -2848.24 172.503 -29.8424 -2556.09 173.025 -28.1193 -1771.95 173.048 -29.2097 -2025.87 172.748 -28.2714 -2447.61 172.54 -28.5279 -2656.13 172.665 -28.8144 -2398.54 173.285 -29.7328 -2172.78 172.768 -29.7737 -2143.51 172.798 -29.3309 -2441.58 172.85 -28.5638 -1295.06 172.772 -29.0907 -2229.78 172.981 -29.5449 -2071.4 173.009 -29.8815 -1674.78 177.746 -26.5198 -4250.97 177.651 -26.1361 -4182.7 177.761 -25.8951 -4282.52 177.998 -26.1432 -4272.81 178.055 -26.9092 -4220.85 177.711 -25.5763 -4296.45 178.42 -26.8629 -4234.94 177.568 -27.036 -4268.01 178.078 -25.7742 -4245.09 177.929 -24.0916 -4226.08 178.287 -26.5075 -4219.37 177.639 -25.1292 -4338.08 178.134 -24.2937 -4212.38 178.212 -24.6178 -4237.38 177.802 -24.7513 -4311.51 178.106 -25.009 -4096 177.988 -27.3059 -4254.24 178.441 -26.0414 -4085.96 178.669 -26.355 -4077.03 177.743 -24.3806 -4156.05 178.359 -27.1758 -4146.61 178.292 -24.0467 -4071.2 178.464 -24.9227 -3996.48 178.69 -26.6837 -3992.85 178.068 -25.3923 -4222.54 178.429 -25.6175 -4002.31 178.708 -27.0384 -3954.23 177.625 -27.5042 -4061.97 178.442 -25.2476 -4045.81 178.494 -24.3319 -3921.02 179.008 -26.46 -3908.26 177.548 -29.571 -4054.96 179.101 -26.8421 -3877.56 178.679 -24.0865 -3831.76 179.013 -27.1986 -3863.94 178.705 -27.423 -3884.49 178.312 -27.4848 -3897.78 178.041 -27.6719 -4175.41 178.721 -25.7898 -3889.28 178.49 -27.8042 -3446.36 177.666 -28.4618 -3665.64 177.943 -28.7702 -3829.6 177.811 -28.196 -3822.81 178.314 -28.7315 -3724.88 178.116 -28.0357 -3493.41 177.755 -29.2008 -3852.21 177.715 -27.8839 -3953.09 178.776 -25.4674 -3712.5 179.407 -27.1681 -3414.33 177.734 -29.8754 -3933.97 178.134 -28.4287 -3671.64 178.743 -24.6764 -3848.69 179.359 -26.2293 -2382.62 178.288 -29.0411 -3664.17 178.794 -25.0941 -3648.68 178.569 -28.5531 -3450.87 178.636 -28.8642 -3594.79 179.065 -23.9843 -3544.91 178.916 -24.3197 -3691.66 179.345 -26.5556 -2624.29 177.929 -29.606 -3621.55 178.919 -26.0823 -3289.4 178.247 -29.9216 -3658.01 178.374 -29.4701 -3325.43 179.171 -24.5782 -3534.02 179.169 -27.5024 -3310.07 178.715 -29.1872 -3442.18 178.514 -28.2064 -3489.48 179.138 -24.9198 -3160.75 178.929 -28.6806 -3543.84 179.004 -28.9662 -3227.21 178.74 -29.812 -3667.46 178.889 -27.7203 -3332.72 179.035 -25.7122 -3333.17 179.522 -23.9927 -3102.04 179.448 -24.5294 -2592.49 178.894 -28.3644 -3579.79 179.351 -24.2823 -2731.59 178.873 -28.0268 -3367.82 179.238 -28.4992 -3541.94 179.236 -28.17 -3429.89 179.234 -28.7797 -3328.43 178.905 -29.486 -3378.71 179.544 -28.6652 -3168.36 179.218 -29.7707 -3180.83 179.072 -29.2281 -3293.24 179.208 -27.8449 -3307.2 179.581 -28.3271 -3254 179.509 -27.4525 -3297.7 179.296 -29.4299 -2914.76 179.46 -27.6677 -3226.67 179.716 -27.3187 -3122.87 179.614 -27.949 -3127.39 179.174 -25.3379 -3051.69 179.56 -26.799 -2988.93 179.812 -27.0561 -3011.66 179.879 -23.9812 -2404.54 179.454 -24.759 -3003.26 179.438 -29.0573 -2746.61 179.798 -27.5898 -3100.7 179.872 -28.4991 -2953.52 179.617 -29.3887 -2582.67 179.987 -26.7226 -2990.61 179.247 -25.9291 -2315.43 179.375 -25.6664 -2324.69 179.96 -28.1752 -2730.74 179.874 -28.8474 -2512.79 179.49 -25.0727 -1998.07 179.495 -29.6138 -2583.46 180.189 -27.019 -2768.77 180.055 -27.3127 -3030.51 180.037 -26.4493 -2652.82 180.125 -28.3909 -2213.19 181.956 -27.403 -2680.95 179.961 -26.2767 -2680.19 180.159 -27.5974 -2308.42 180.239 -26.2768 -2432.05 180.14 -24.0038 -2135.99 179.752 -26.1411 -2577.54 180.279 -26.5352 -2602.51 179.555 -25.4018 -2205.87 179.718 -24.2201 -2400.1 179.711 -26.4494 -2807.27 180.054 -26.0685 -2656.72 181.969 -27.666 -2391.7 181.698 -27.5582 -2632.36 181.94 -26.1949 -2166.48 181.835 -26.3848 -2271.37 180.893 -29.2054 -2319.83 181.657 -26.1459 -2461.45 181.872 -24.3343 -2497 181.092 -28.9607 -2318.46 179.81 -25.452 -2524.22 180.052 -25.3603 -2572.77 181.63 -27.2524 -2501.02 179.802 -25.2009 -2521.4 181.873 -24.1049 -2497 181.264 -27.2421 -2601.02 180.762 -29.6292 -2493.95 180.511 -29.6424 -2462.6 180.25 -25.552 -2483.16 180.644 -29.3861 -2536.62 181.632 -25.8341 -2466.25 180.154 -25.8173 -2514.56 182.38 -26.4276 -2300.31 181.904 -25.9664 -2483.15 179.861 -25.8765 -2641.97 179.969 -25.6195 -2561.82 181.181 -28.4287 -2514.12 181.706 -26.6345 -2501.88 181.125 -28.6443 -2453.02 181.478 -27.7241 -2370.86 181.698 -26.9408 -2501.42 180.338 -25.2674 -2427.49 181.11 -28.2123 -2542.51 181.585 -26.3892 -2368.88 181.402 -28.5306 -2075.47 180.411 -24.9707 -2262.83 181.171 -27.7179 -2342.33 181.398 -27.4848 -2620.69 179.616 -24.4233 -2353.74 179.822 -29.1687 -1996.85 181.902 -25.6948 -2130.83 180.009 -27.8522 -2145.5 180.386 -27.2188 -2259.66 181.977 -27.1237 -1903.42 180.335 -26.0067 -2434.21 182.052 -24.2622 -2295.98 179.641 -24.6103 -2261.6 180.098 -25.0624 -2524.9 180.642 -29.1398 -2357.74 181.365 -25.6911 -2562.34 180.96 -29.4765 -2336.96 181.994 -26.5663 -2151.04 181.018 -27.962 -2157.17 181.743 -27.8623 -2281.66 182.165 -26.0878 -2222.43 180.528 -26.1811 -689.61 180.789 -28.9867 -2577.55 181.585 -24.022 -1879.44 180.033 -24.2012 -2287.86 181.379 -27.9971 -2298.7 181.102 -27.4363 -2093.6 180.779 -28.7291 -2460.58 182.393 -26.2253 -2271.11 179.801 -24.8471 -2337.87 180.874 -28.4208 -1984.19 179.891 -24.4829 -2247 181.641 -25.5295 -2358.13 180.377 -29.4579 -2250.28 181.333 -25.4367 -2306.67 181.399 -28.2965 -2048.45 180.667 -25.1853 -1701.34 181.375 -26.2607 -1947.48 180.431 -25.7524 -1882.71 182.046 -26.8173 -2073.01 180.471 -26.39 -2421.86 181.351 -26.5202 -2208.32 181.92 -25.4825 -2090.48 181.998 -27.8744 -2073.39 180.198 -24.7162 -2482.26 181.225 -29.2924 -2299.63 180.24 -24.3956 -2165.4 181.924 -28.0343 -2142.14 180.684 -29.8866 -2357.4 181.44 -28.8035 -1949.02 180.369 -29.8559 -2172.51 180.365 -26.7812 -2582.6 181.814 -25.301 -2202.37 180.978 -29.7493 -1962.19 180.47 -24.5402 -2084.02 181.023 -27.2473 -1832.96 182.204 -27.5487 -2131.32 180.379 -23.9428 -1782.79 180.488 -24.7459 -1717.31 182.162 -25.8194 -2074.99 182.157 -24.0615 -2108.35 181.743 -24.5081 -2185.04 180.906 -27.7772 -1829.1 181.394 -29.0635 -2012.07 179.893 -29.4102 -1232.23 181.042 -27.036 -1754.4 179.742 -29.6223 -1274.19 181.527 -25.2775 -2182.06 180.541 -25.4824 -1957.2 182.136 -26.3625 -1779.27 179.686 -25.6586 -2123.71 182.142 -25.5676 -1753.48 180.318 -24.1561 -1903.67 182.284 -24.2814 -1992.29 181.183 -26.334 -1769.84 182.455 -25.948 -1625.84 181.612 -24.2776 -1853.57 180.151 -28.6219 -1998.74 180.247 -29.6427 -1589.47 182.163 -28.0276 -2016.63 181.33 -25.9845 -2156.82 181.998 -28.2316 -1724.95 180.604 -28.5132 -1898.3 181.697 -28.1788 -1792.65 181.845 -24.6976 -1965.41 181.656 -28.5949 -2089.24 182.249 -26.5943 -2055.68 182.549 -24.2887 -1997 182.397 -26.8022 -1663.54 181.621 -29.8379 -1376.96 181.64 -29.6504 -1779.2 182.455 -27.4369 -1513.04 181.687 -25.0994 -1951.32 181.569 -24.9343 -1998.06 181.788 -24.8946 -1766.76 182.424 -24.5058 -1724.74 182.046 -24.8249 -1551.81 180.211 -28.0184 -1507.19 181.579 -24.7267 -1848.75 181.598 -28.4047 -1762.62 181.663 -29.0202 -1774.28 181.151 -25.7946 -1265.55 181.135 -26.7587 -2021.5 180.696 -24.4367 -1468.2 180.796 -28.142 -1708.95 180.336 -29.1908 -1666.12 181.899 -29.0882 -984.7 180.513 -27.0053 -1618.41 182.103 -25.3338 -1712.72 181.121 -25.5781 -1989.01 180.677 -23.9123 -1519.76 179.59 -29.8315 -1793.76 180.051 -29.2462 -1236.32 180.326 -27.4231 -1910.28 181.912 -28.6196 -1545.68 181.319 -23.9525 -1155 180.683 -24.638 -1203.11 181.437 -25.0709 -1711.88 182.192 -27.7818 -1789.02 180.848 -25.4636 -1441.15 182.078 -24.5215 -1578.49 181.363 -24.8721 -1683.51 182.423 -27.6881 -1777.61 180.597 -25.9416 -1598.3 180.31 -27.8186 -1813.4 181.832 -28.4182 -1579.91 180.515 -24.3085 -1737.16 180.536 -28.9337 -2191.48 180.677 -24.8791 -1819.58 180.688 -25.7104 -1633.36 182.004 -25.0846 -1588.67 181.032 -26.4797 -1809.08 180.285 -28.2233 -1534.22 180.59 -24.1024 -1570.25 181.476 -24.4959 -1212.9 180.148 -29.4272 -1281.77 179.547 -25.9169 -2206.06 181.774 -29.3724 -1169.99 181.092 -23.9468 -936.21 181.371 -24.1592 -1110.52 182.238 -28.2514 -1330.67 180.901 -27.5861 -1613.22 180.062 -29.0622 -1173.83 180.656 -26.8113 -1754 181.177 -26.1622 -1583.2 180.738 -27.9097 -1423.51 180.567 -28.2948 -1391.75 182.397 -25.6607 -1534.63 180.929 -23.8834 -1106.36 180.442 -28.6839 -2010.68 182.364 -25.4207 -1468.77 180.559 -26.5902 -1781.16 180.921 -25.2291 -1089.32 179.998 -29.6318 -882.92 180.933 -25.7358 -906.6 180.756 -24.2546 -1092.8 180.538 -27.813 -1085.75 180.362 -28.4547 -1185.04 180.831 -27.362 -1369.6 182.338 -25.1611 -1257.17 180.738 -26.3753 -1056.84 180.869 -27.1658 -1648.1 180.882 -24.0614 -1268.65 181.275 -25.2179 -1421.45 180.886 -26.8438 -1350.42 182.369 -27.9 -1002.34 181.378 -24.3344 -1030.53 180.936 -25.0045 -795.69 180.876 -24.5346 -909.94 182.339 -24.7636 -1361.61 180.112 -29.8356 -1269.34 181.303 -24.6637 -1188.51 180.704 -27.704 -1181.07 179.861 -29.8323 -620.26 180.984 -26.242 -1508.76 181.203 -25.0243 -1271.21 180.232 -28.8875 -1042.95 182.422 -24.9634 -1218.62 182.234 -24.9589 -1381.92 180.774 -27.0052 -1111.27 180.488 -28.0316 -1106.23 180.831 -26.6385 -819.07 180.87 -24.3744 -715.49 180.8 -25.8966 -940.39 181.095 -25.3466 -1160.58 181.896 -29.2555 -570.78 180.468 -27.6036 -877.03 181.244 -24.4652 -899.48 182.12 -28.669 -639.83 180.981 -24.2442 -570.52 180.774 -26.1016 -860.36 181.127 -24.8177 -850.9 180.564 -27.3829 -905.12 180.695 -27.5266 -1192.68 180.66 -27.189 -975.48 180.894 -24.7453 -860.72 181.14 -24.1057 -783.38 181.078 -24.6038 -772.52 181.192 -24.284 -793.88 181.013 -25.9896 -703.34 181.085 -25.1638 -858.16 181.039 -24.4141 -676.42 184.936 -24.5869 -8092.13 185.55 -24.1759 -5916.96 184.942 -29.8336 -5601.21 185.991 -24.2506 -5653.48 185.246 -28.289 -5616.54 185.358 -29.4641 -5740.08 185.743 -24.5452 -5534.74 186.254 -29.8668 -5741.58 186.105 -29.5406 -5840.59 185.806 -29.3846 -5682.93 187.34 -29.8182 -5669.78 186.145 -29.2195 -5382.94 185.425 -29.8749 -5601.07 185.787 -29.7198 -5785.01 186.467 -24.1679 -5497 185.25 -28.6732 -5638.1 185.53 -28.0803 -5270.17 187.421 -29.3886 -5728.86 185.712 -28.4379 -5349.65 186.276 -24.6436 -5282.4 185.655 -28.9988 -5759.36 186.223 -28.7645 -5139.17 185.83 -24.9283 -5293.54 187.381 -25.5986 -5641.91 187.46 -24.5192 -5556.25 187.492 -25.2364 -5383.04 186.964 -25.2891 -5450.67 187.209 -24.9018 -5506.05 186.722 -24.8998 -5360.55 186.159 -28.3322 -4592.49 187.459 -28.5666 -5437.95 187.215 -28.943 -5425.86 187.013 -29.583 -5573.54 185.532 -27.7206 -4130.5 187.498 -26.2826 -5251.2 186.314 -25.1912 -5260.83 187.003 -25.6977 -5403.37 185.361 -26.9885 -4422.56 186.762 -28.852 -4552.59 187.266 -25.9822 -5390.52 185.76 -25.3513 -5221.69 187.511 -28.0872 -5303.25 187.572 -26.725 -5364.27 186.582 -25.629 -5259.06 186.519 -29.1176 -5392.9 186.601 -26.3124 -5179.75 187.525 -27.2439 -5283.23 187.058 -27.005 -5288.18 186.815 -26.0021 -5149.87 186.526 -26.7403 -5238.71 187.068 -28.2137 -5220.46 186.585 -27.2483 -5258.08 187.682 -27.6725 -5198.3 186.548 -29.5105 -4498.84 186.216 -26.3767 -5130.43 186.368 -26.0052 -5183.19 186.092 -25.6614 -5084.41 187.091 -27.6364 -5300.04 186.126 -27.0451 -5309.37 186.51 -27.6925 -4899.64 185.927 -26.0644 -5046.51 187.052 -26.4357 -5297.87 186.074 -26.688 -5274.28 185.624 -25.7627 -5081.39 187.029 -28.6004 -5020.73 186.72 -27.9907 -4947.45 185.443 -26.1789 -4632.09 185.745 -26.8374 -5009.38 186.626 -28.3988 -3839.37 185.803 -26.4496 -5025.71 185.911 -27.9971 -4166.42 186.343 -28.0287 -3411.29 186.167 -27.4431 -5117.11 185.734 -27.2973 -4095.34 185.403 -26.5998 -2428.02 186.162 -27.7625 -4279.03 185.912 -27.6423 -2438.56 182.583 -26.3659 -1763.44 182.642 -26.1601 -1947.23 186.92 -29.2413 -4621.29 182.762 -24.3034 -1997 182.687 -24.4861 -1997 182.929 -23.9736 -1812.33 182.93 -24.2079 -1764.58 182.941 -24.4443 -1403.16 182.609 -24.6936 -1742.42 183.19 -23.9392 -1390.52 182.784 -25.9514 -1618.28 182.848 -26.1479 -1645.34 182.851 -24.6644 -1689.16 183.127 -24.1266 -997 182.557 -24.8697 -1078.21 183.394 -23.9654 -1211.2 182.76 -24.8633 -1068.88 182.545 -26.5849 -1445.54 183.124 -24.3173 -1147.94 183.212 -25.8296 -1355.54 183.072 -24.6457 -1252.35 183.028 -26.0687 -1358.87 182.851 -25.757 -1065.08 183.315 -24.0892 -1247 183.605 -23.954 -1192.84 183.478 -24.0946 -1247 182.622 -25.0626 -1209.4 183.01 -24.8419 -1300.96 182.887 -25.0371 -1411.05 183.02 -25.8454 -1191.03 182.579 -25.2998 -1269.92 182.598 -25.514 -1525.26 182.801 -25.2369 -1433.86 182.653 -25.7278 -1120.13 182.753 -25.4037 -1528.61 182.97 -25.676 -1169.62 182.826 -25.5761 -1223.72 182.951 -25.3886 -826.2 183.006 -25.5546 -854.77 183.269 -25.3013 -731.5 183.158 -25.4574 -672.39 183.14 -25.6597 -947.06 183.35 -25.4357 -617.5 189.302 -24.6448 -5901.79 189.798 -24.768 -5496.8 191.373 -24.7489 -5768.27 188.835 -24.6626 -5613.2 189.964 -24.1316 -5747 190.56 -24.1372 -5747 191.069 -24.717 -5934.4 191.026 -24.1887 -5747 191.607 -24.9267 -5799.3 190.81 -24.4758 -5747 189.737 -24.4417 -5735.88 191.251 -24.4757 -5747 191.331 -26.8433 -5724.81 191.718 -26.7434 -5608.42 190.016 -25.4456 -5610.25 189.557 -25.1847 -5682.39 191.323 -26.511 -5797.47 191.469 -27.495 -5664.63 191.351 -27.8071 -5428.92 188.95 -25.0298 -5739.37 190.192 -25.0618 -5595.41 190.25 -24.5419 -5484.55 190.947 -27.5584 -5454.49 187.735 -29.7072 -5672.93 192.163 -27.0395 -5625.09 192.443 -27.4241 -5703.92 191.996 -24.9984 -5754.77 192.428 -25.0774 -5607.24 191.73 -24.5905 -5712.32 190.707 -24.8395 -5761.6 191.704 -25.2698 -5735.83 191.064 -27.9433 -5458.69 191.133 -27.1405 -5623.11 188.498 -24.8286 -5652.66 190.382 -25.4376 -5415.77 191.626 -27.1299 -5726.48 191.496 -24.1546 -5695.48 188.218 -29.8567 -5647.63 191.206 -25.0453 -5716.02 189.046 -25.59 -5647.97 190.483 -27.484 -5535.2 188.53 -24.5076 -5651.52 192.089 -26.6204 -5650.13 192.074 -24.2083 -5640.02 192.232 -25.4337 -5608.84 190.882 -26.7062 -5686 190.598 -27.8875 -5535.46 191.837 -25.6149 -5679.77 188.137 -24.9557 -5582.5 191.789 -27.8339 -5589.59 190.972 -26.3138 -5770.4 190.733 -25.2582 -5674.68 190.955 -28.2641 -5517.77 188.369 -24.1662 -5589.65 188.792 -29.8195 -5441.37 188.443 -25.2791 -5628.53 191.984 -27.4757 -5705.21 188.883 -26.0571 -5634.9 188.071 -24.5656 -5534.57 189.68 -25.7304 -5488.71 192.171 -25.827 -5512.36 187.938 -25.23 -5569.1 191.763 -25.9538 -5673.78 191.258 -25.5994 -5619.53 191.495 -28.1787 -5513.9 190.5 -28.2798 -5488.74 187.752 -24.1402 -5497 187.966 -29.3911 -5492.37 188.417 -25.8406 -5517.25 190.181 -27.6374 -5305.43 191.31 -26.1111 -5578.58 190.697 -25.6122 -5628.2 189.338 -26.0775 -5514.54 192.518 -26.7156 -5611.71 190.516 -26.2915 -5565.56 190.448 -29.3318 -5497.19 187.741 -25.4998 -5555.88 190.988 -29.3345 -5423.67 187.723 -24.8987 -5517.36 187.792 -25.9095 -5349.88 190.68 -29.767 -5547.52 190.283 -25.8166 -5553.13 189.058 -26.4383 -5496.75 188.066 -25.5518 -5595.08 190.832 -25.9492 -4976.17 191.96 -28.5145 -5308.46 192.453 -28.3506 -5294.27 191.934 -28.948 -5427.19 192.024 -28.1538 -5215.31 191.263 -29.7281 -5330.86 189.263 -29.8551 -5549.03 190.204 -29.9665 -5477.22 188.565 -26.3477 -5432.66 188.15 -26.2291 -5429.59 192.437 -29.2239 -5322.93 189.78 -26.766 -5542.74 191.511 -29.4864 -5312.37 190.021 -29.0509 -5463.39 190.555 -28.9731 -5519.97 189.474 -26.4663 -5511.12 190.088 -27.2001 -5465.74 187.895 -28.6877 -5277.45 190.154 -28.5755 -5402.01 192.442 -29.6603 -5346.67 191.458 -29.117 -5289.22 190.008 -29.5405 -5303.98 192.262 -26.2511 -5661.36 188.805 -27.3999 -4355.97 189.912 -26.2659 -5251.14 188.519 -29.3948 -5388.56 191.355 -28.6594 -5439.33 191.95 -29.3866 -5153.2 187.694 -28.9969 -5484 189.735 -29.925 -5334.38 191.744 -26.3565 -5573.59 187.824 -26.3616 -5409.99 189.321 -26.8085 -5242.78 190.748 -28.619 -5662.39 188.151 -26.6861 -5304.65 192.465 -27.8677 -5692.56 188.77 -26.8724 -5383.29 189.634 -27.1115 -5114.18 190.296 -26.7254 -5552.36 191.021 -28.9406 -5449.94 188.205 -28.9905 -5344.63 187.827 -28.3861 -5274.85 190.06 -28.0451 -5215.02 189.069 -29.4541 -5299.25 188.3 -27.2294 -5302.31 187.881 -27.0472 -5288.58 189.707 -27.5594 -5026.81 190.635 -27.1348 -5715.13 192.499 -30.008 -5410.01 191.902 -29.892 -5388.03 192.441 -28.7868 -5177.38 189.235 -27.2347 -4983.69 187.908 -27.37 -5236.73 189.512 -29.5936 -5425.74 188.516 -27.6168 -5170.12 188.865 -28.8986 -5191.06 188.291 -28.4984 -5227.34 189.041 -28.1087 -5198.6 188.762 -28.4072 -5204.38 189.117 -28.4916 -5113.55 188.509 -28.024 -5317.04 189.387 -28.341 -5002.39 189.732 -28.3417 -5226.17 188.811 -27.7666 -5056.47 189.494 -29.2013 -5547.95 189.52 -28.015 -4861.21 188.151 -27.6569 -5144.51 189.53 -28.7027 -4815.01 187.986 -28.0592 -5098.96 189.198 -27.6791 -4629.5 192.818 -24.8793 -5703.33 193.286 -24.8728 -5627.9 192.816 -27.5541 -5599.97 193.109 -24.513 -5642.63 193.587 -24.6628 -5498.55 192.787 -25.3717 -5677.46 193.254 -25.2285 -5617.82 193.443 -24.1867 -5580.55 192.927 -24.1083 -5566.64 193.976 -24.0863 -5489.92 193.969 -24.4488 -5452.29 193.675 -25.0698 -5690.11 192.758 -27.1521 -5574.96 192.692 -25.873 -5671.92 193.254 -25.6738 -5715.46 192.894 -28.2288 -5472.71 192.912 -28.6272 -5404.65 192.915 -29.0686 -5396.42 192.904 -29.5103 -5362.27 193.71 -25.4672 -5550.45 192.9 -29.9187 -5502.24 192.847 -26.4036 -5625.66 193.282 -26.1423 -5537.78 194.067 -24.8542 -5578.03 194.325 -24.3193 -5342.19 193.37 -29.8323 -5420.44 193.389 -29.3752 -5444.8 193.371 -28.4324 -5460.71 193.391 -28.9068 -5522.34 193.137 -27.4253 -5516 193.743 -25.8998 -5582.39 193.391 -26.6461 -5561.3 194.134 -25.2735 -5545.43 192.954 -26.8073 -5581.62 193.26 -27.879 -5461.88 194.437 -24.6415 -5152 193.842 -29.7179 -5355.73 194.163 -25.6893 -5670.77 193.8 -26.3328 -5454.5 193.908 -29.2283 -5460.99 193.853 -28.7281 -5545.32 193.264 -27.0922 -5507.2 194.591 -25.0733 -5459.15 194.752 -24.3982 -5183.82 194.207 -26.0969 -5552.63 193.851 -28.2535 -5498.73 194.575 -25.5024 -5443.4 194.247 -29.6072 -5279.08 193.891 -26.6927 -5484.41 194.237 -28.9651 -5731.4 193.742 -27.0361 -5501.89 193.585 -27.4492 -5385.5 194.909 -24.7668 -5567.79 194.444 -29.3053 -5433.29 193.926 -27.8093 -5517.85 194.219 -26.9314 -5556.51 194.305 -26.5172 -5444.32 194.178 -27.3937 -5622.74 194.614 -25.8962 -5370.56 195.041 -25.087 -5504.44 194.373 -27.7796 -5739.84 194.329 -28.1228 -5632.65 194.358 -28.5824 -5659.53 194.979 -25.3881 -5476.15 194.618 -26.8025 -5479.4 194.655 -27.1525 -5538.55 194.623 -26.2413 -5319.04 194.727 -29.7446 -5051.11 194.766 -27.6091 -5558.82 195.257 -24.513 -4978.19 194.68 -27.9703 -5397.11 194.832 -26.5239 -5417.9 194.637 -28.9699 -5632.4 194.808 -28.351 -5160.42 194.8 -28.7016 -5152.29 195.079 -26.8874 -5482.85 194.909 -29.3169 -5274.3 194.929 -25.7175 -5321.31 195.138 -26.1297 -5276.51 195.141 -27.318 -5558.7 195.248 -27.6671 -5555.9 195.358 -24.9214 -4997 195.142 -28.0299 -5286.85 195.241 -26.5472 -5318.05 197.157 -24.7523 -4997 196.93 -24.9866 -4997 195.139 -29.6199 -4649.82 197.667 -24.9048 -4997 196.946 -29.7896 -4997 197.329 -28.1638 -4997 195.749 -25.1863 -4997 196.589 -25.047 -4997 197.15 -29.4861 -4997 196.178 -25.1108 -4997 195.357 -25.2968 -5656.24 197.309 -25.1506 -4997 197.144 -29.0295 -4997 197.495 -24.4748 -4986.76 196.534 -28.3188 -4997 195.254 -28.4296 -4612.55 197 -28.2515 -4997 196.003 -28.3492 -4997 195.539 -28.3068 -4997 196.948 -25.3172 -4997 195.628 -24.2271 -4993.86 196.899 -28.5871 -4997 197.432 -28.5321 -4997 197.387 -29.8089 -4997 195.516 -29.7134 -4997 196.288 -24.7711 -4997 196.474 -29.7741 -4997 195.976 -29.7809 -4997 195.662 -27.8964 -4997 196.221 -27.9318 -4997 197.089 -27.9686 -4997 197.412 -27.8714 -4997 196.715 -27.9386 -4997 196.672 -24.6916 -4997 197.555 -29.4384 -4997 195.338 -29.3004 -5341.92 195.726 -29.3889 -4997 196.715 -29.3642 -4997 196.163 -29.3151 -4997 197.385 -24.0956 -4961.17 195.072 -28.9614 -5263.36 195.116 -28.6511 -5261.43 196.43 -28.8217 -4997 195.635 -28.8288 -4997 196.556 -25.4455 -4997 196.958 -25.6836 -4997 196.088 -25.5327 -4997 196.242 -26.4105 -4997 195.645 -26.4359 -4997 196.906 -26.4943 -4997 197.495 -26.5926 -4997 195.324 -25.6715 -5259.82 195.668 -25.5336 -4997 197.389 -25.5989 -4997 195.809 -24.7159 -4997 196.546 -26.8417 -4997 197.257 -27.0645 -4997 195.959 -26.7845 -4997 195.511 -26.7589 -4997 197.335 -26.1043 -4997 195.816 -25.9681 -4997 196.56 -25.952 -4997 197.49 -27.5321 -4997 195.949 -27.5208 -4997 195.52 -27.5042 -4997 196.454 -27.5622 -4997 197.015 -27.583 -4997 196.696 -27.244 -4997 195.618 -27.1277 -4997 196.209 -27.1686 -4997 196.202 -24.3467 -4950 196.873 -24.2635 -4925.07 195.902 -24.0185 -4949.8 198.676 -25.9257 -4997 201.91 -27.5175 -4997 198.504 -24.5501 -4997 201.296 -28.7526 -4997 201.408 -27.5654 -4997 202.454 -28.791 -4997 200.964 -27.5181 -4997 200.828 -25.8818 -4997 199.431 -27.6411 -4997 197.858 -29.0525 -4997 201.389 -25.8161 -4997 199.274 -28.7478 -4997 198.938 -28.9354 -4997 198.468 -28.946 -4997 198.878 -27.4413 -4997 199.889 -25.766 -4997 201.546 -27.2277 -4997 200.774 -24.6496 -4980.11 200.358 -25.73 -4997 198.367 -29.3928 -4997 200.382 -26.0969 -4997 201.077 -27.1536 -4997 199.927 -26.3291 -4997 202.381 -29.1955 -4997 199.969 -27.2564 -4997 199.396 -27.183 -4997 198.868 -29.3384 -4997 200.801 -26.3099 -4997 198.761 -24.3059 -4997 198.482 -26.2795 -4997 202.019 -28.8758 -4997 199.239 -28.2689 -4997 198.339 -25.516 -4997 201.134 -27.8742 -4997 199.357 -25.4618 -4997 199.813 -27.8094 -4997 199.729 -25.3251 -4997 202.429 -28.3516 -4997 200.559 -25.4859 -4997 198.697 -27.909 -4997 200.145 -25.3884 -4997 202.073 -28.53 -4997 201.785 -28.0611 -4997 199.375 -24.988 -4997 201.492 -25.473 -4997 202.405 -27.8562 -4997 201.018 -25.3969 -4997 197.723 -28.1703 -4997 198.866 -25.5474 -4997 199.558 -28.0056 -4997 201.839 -25.252 -4997 198.214 -28.1064 -4997 201.248 -28.3041 -4997 199.589 -28.5806 -4997 199.975 -28.5897 -4997 198.885 -24.7362 -4997 198.008 -25.9027 -4997 200.913 -28.5257 -4997 199.709 -26.9311 -4997 199.715 -26.6441 -4997 200.271 -29.7132 -4997 202.61 -29.8552 -4997 200.964 -26.685 -4997 201.217 -29.7491 -4997 199.334 -26.7127 -4997 201.827 -26.6039 -4997 200.478 -26.5293 -4997 202.585 -26.8309 -4997 200.222 -27.7018 -4997 198.671 -26.8014 -4997 200.717 -27.6941 -4997 197.956 -26.9137 -4997 200.146 -26.846 -4997 200.64 -26.9027 -4997 197.834 -27.801 -4997 202.204 -26.847 -4997 198.221 -27.7471 -4997 201.898 -27.0579 -4997 201.438 -26.8439 -4997 199.155 -27.8475 -4997 199.766 -27.5183 -4997 198.422 -27.5333 -4997 200.682 -28.1025 -4997 200.062 -28.1528 -4997 200.537 -27.2997 -4997 197.938 -27.386 -4997 198.373 -27.1996 -4997 202.432 -27.2809 -4997 202.716 -29.5318 -4997 199.822 -29.4678 -4997 197.978 -29.4999 -4997 200.954 -29.3448 -4997 200.616 -29.2268 -4997 201.385 -29.2346 -4997 201.915 -29.2479 -4997 200.248 -29.3224 -4997 198.278 -29.8075 -4997 202.272 -29.5888 -4997 199.794 -28.9881 -4997 200.855 -28.9392 -4997 200.327 -28.9376 -4997 200.675 -29.5717 -4997 197.833 -29.8222 -4997 198.767 -29.7988 -4997 199.913 -29.8465 -4997 201.801 -29.6766 -4997 199.383 -29.7397 -4997 199.678 -28.3178 -4997 198.067 -28.5446 -4997 200.466 -28.5379 -4997 201.68 -28.5707 -4997 198.707 -28.4821 -4997 201.658 -28.9322 -4997 197.8 -25.3623 -4997 202.254 -25.5167 -4997 198.555 -25.2375 -4997 201.883 -25.6996 -4997 200.477 -24.9947 -4997 201.375 -25.1786 -4997 198.932 -25.1539 -4997 198.16 -25.0872 -4997 201.039 -24.9353 -4997 199.884 -24.9975 -4997 202.362 -25.1362 -4878.61 202.47 -26.0029 -4997 199.325 -25.9702 -4997 199.224 -24.5011 -4997 199.627 -24.6623 -4997 198.058 -24.6196 -4997 200.025 -24.6001 -4997 200.442 -24.4783 -4952.34 201.116 -24.5554 -4948.6 198.252 -24.1936 -4997 197.807 -24.228 -4997 199.117 -24.1073 -4997 198.516 -24.8985 -4997 201.508 -24.8291 -4954.76 198.002 -26.4383 -4997 202.671 -26.4774 -4997 199.463 -26.4015 -4997 198.992 -26.3485 -4997 202.268 -26.4831 -4997 201.305 -26.3255 -4997 201.857 -26.1552 -4997 199.337 -29.1998 -4997 199.655 -24.2265 -4938.31 201.959 -24.9099 -4959.35 201.44 -24.4565 -4902.87 200.144 -24.232 -4909.98 202.232 -24.7755 -4908.98 200.797 -24.2841 -4907.9 201.857 -24.5292 -4906.06 201.185 -24.1663 -4879.63 202.353 -24.4562 -4895.84 201.566 -24.1972 -4859.6 200.466 -24.1003 -4869.74 201.972 -24.1217 -4849.03 202.541 -24.0968 -4845.54 202.627 -24.8066 -4586.74 205.949 -27.0172 -4997 205.45 -26.8909 -4997 204.178 -27.5001 -4997 203.807 -29.3048 -4997 204.354 -25.6358 -4997 204.22 -28.0976 -4997 206.37 -26.8708 -4997 205.693 -27.3841 -4997 206.391 -27.3678 -4997 204.911 -26.7662 -4997 204.113 -28.4893 -4997 205.229 -26.3573 -4997 203.417 -29.3978 -4997 202.918 -28.2047 -4997 204.36 -25.9853 -4997 206.844 -29.8061 -4997 203.43 -28.997 -4997 202.925 -28.67 -4997 205.853 -26.6013 -4997 204.601 -28.7828 -4997 206.871 -28.2738 -4997 204.803 -29.5426 -4997 204.059 -26.2307 -4997 206.955 -26.056 -4986.56 203.753 -26.9636 -4997 206.623 -26.0968 -4997 206.899 -26.3642 -4997 207.022 -29.4009 -4997 203.213 -25.5082 -4968.71 204.197 -27.1084 -4997 203.091 -25.9188 -4997 207.035 -27.5745 -4997 202.712 -25.5382 -4997 205.22 -29.7751 -4997 205.502 -29.4554 -4997 203.903 -26.6655 -4997 206.279 -29.8352 -4997 205.774 -29.8337 -4997 204.006 -25.7671 -4997 205.946 -29.5277 -4997 204.057 -28.9637 -4997 206.704 -27.8493 -4997 203.439 -26.6665 -4997 204.621 -26.3421 -4997 205.622 -27.8275 -4997 203.461 -27.8323 -4997 202.984 -27.7049 -4997 204.322 -27.7769 -4997 203.871 -27.7425 -4997 205.135 -27.9053 -4997 204.663 -27.9995 -4997 206.024 -28.1331 -4997 206.437 -28.097 -4997 206.151 -27.7645 -4997 205.249 -27.5738 -4997 203.409 -27.4745 -4997 203.313 -28.0858 -4997 203.743 -28.1292 -4997 205.551 -28.2057 -4997 205.08 -28.2959 -4997 205.948 -28.4638 -4997 204.616 -28.3847 -4997 206.437 -28.4644 -4997 204.661 -27.0637 -4997 202.955 -27.1861 -4997 203.385 -27.0631 -4997 206.855 -27.1352 -4997 207.171 -26.9681 -4997 205.11 -27.2177 -4997 204.692 -27.522 -4997 203.798 -27.3183 -4997 203.009 -26.7555 -4997 206.816 -26.7257 -4997 204.395 -26.7041 -4997 204.3 -29.5025 -4997 205.074 -29.4011 -4997 203.097 -29.5459 -4997 206.389 -29.3806 -4997 203.829 -29.6631 -4997 203.436 -29.7985 -4997 206.696 -29.0879 -4997 207.154 -28.974 -4997 204.667 -29.1919 -4997 205.178 -29.0405 -4997 202.914 -29.1538 -4997 205.798 -29.1447 -4997 204.719 -29.8873 -4997 204.227 -29.9786 -4997 203.013 -29.8741 -4997 206.909 -28.6175 -4997 206.195 -28.8555 -4997 205.534 -28.6605 -4997 204.994 -28.6326 -4997 203.487 -28.5119 -4997 206.678 -28.7998 -4997 206.23 -25.9259 -4997 203.589 -25.8497 -4997 204.758 -25.9509 -4997 205.781 -26.1296 -4997 205.255 -25.8377 -4997 203.034 -26.3452 -4997 206.668 -25.7955 -4997 206.214 -25.4828 -4997 203.526 -26.2688 -4997 206.366 -26.3859 -4997 205.692 -25.266 -4997 206.039 -25.0919 -4997 205.245 -25.3813 -4997 206.427 -25.1911 -4997 204.767 -25.4962 -4997 206.757 -25.4401 -4979.84 205.682 -24.9524 -4997 206.354 -24.8894 -4988.28 205.929 -24.7625 -4997 205.309 -24.9836 -4989.54 205.738 -25.6805 -4997 203.654 -25.4738 -4912.34 206.261 -24.5413 -4972.41 204.005 -25.4376 -4865.59 206.783 -25.0765 -4957.15 206.736 -24.6886 -4940.24 204.758 -24.9967 -4946.44 205.49 -24.664 -4959.3 205.8 -24.4298 -4942.49 206.127 -24.265 -4907.22 206.629 -24.2575 -4909.51 204.993 -24.5924 -4908.6 202.883 -25.1651 -4787.92 207.217 -24.4718 -4881.69 204.265 -25.1964 -4747.77 207.072 -24.0662 -4867.1 205.293 -24.2715 -4887.82 205.73 -24.0796 -4867.55 206.224 -24.0204 -4854.88 203.335 -25.1414 -4669.52 204.277 -24.8109 -4564.47 204.662 -24.1131 -4616.84 204.179 -24.1816 -4299.81 203.773 -25.139 -4656.33 203.796 -24.0844 -4187.1 202.92 -24.4613 -4325.85 203.049 -24.8642 -4537.68 204.463 -24.5293 -4607.15 203.481 -24.7466 -4368.85 203.94 -24.8721 -4452.31 203.935 -24.4966 -4227.16 207.349 -27.3042 -4997 208.333 -29.0173 -4997 208.463 -29.8619 -4997 207.497 -29.8023 -4997 207.561 -27.6848 -4997 208.436 -29.4643 -4997 208.381 -28.6469 -4997 207.747 -28.9723 -4997 207.735 -28.3284 -4997 208.147 -28.3459 -4997 207.846 -28.0331 -4997 207.307 -28.0434 -4997 207.963 -28.6477 -4997 207.386 -28.5524 -4997 207.584 -27.0111 -4997 207.264 -26.6669 -4997 207.393 -26.2715 -4892.1 207.743 -26.6594 -4914.58 208.29 -28.0194 -4868.53 207.837 -27.4035 -4720.72 207.989 -27.7502 -4338.97 208.014 -29.6295 -4997 208.865 -29.7139 -4997 209.232 -29.6033 -4928.14 207.594 -29.3471 -4997 208.884 -29.2762 -4997 208.038 -29.2859 -4997 209.516 -24.4159 -4997 209.234 -24.6335 -4867.17 208.526 -24.7146 -4994.1 207.223 -25.3283 -4970.04 208.003 -25.0315 -4993.8 207.664 -25.1892 -4987.3 208.816 -24.5065 -4989.91 208.084 -24.6851 -4954.31 208.458 -25.0671 -4780.28 208.358 -24.4013 -4938.78 207.643 -24.7957 -4933.23 209.169 -24.2508 -4964.22 209.573 -24.1076 -4918.59 207.202 -24.9215 -4914.2 208.684 -24.1169 -4919.53 207.213 -25.7888 -4815.07 207.961 -24.3526 -4900.1 209.538 -29.5069 -4840.98 207.694 -24.4872 -4896.3 209.638 -24.7272 -4365.7 208.113 -24.071 -4874.88 207.861 -26.3656 -4749.4 209.579 -29.8416 -4164.59 207.72 -25.6083 -4711.82 208.925 -24.9217 -4675.73 207.563 -24.1309 -4838.28 209.286 -29.3143 -4747.79 208.192 -25.4248 -4633.83 208.142 -27.0647 -4706.37 209.591 -29.1802 -4645.63 209.719 -25.0599 -3557.94 208.192 -26.621 -4662.34 209.381 -24.9881 -4482.55 207.774 -26.0216 -4643.29 209.474 -28.8158 -4435.61 209.571 -25.2683 -3781.85 208.768 -28.8225 -4628.38 209.484 -28.4019 -4178.14 208.635 -28.3884 -4303.93 208.206 -26.2546 -4570.81 209.537 -25.5889 -3274.25 209.603 -28.0111 -3997 209.187 -29.005 -4556.65 208.854 -25.2662 -4449.87 208.576 -26.8834 -4404.72 209.396 -25.9611 -3997 208.629 -25.4274 -4431.74 208.183 -25.8691 -4426.76 209.611 -26.3388 -4031.27 208.355 -27.6055 -4121.97 209.366 -27.6936 -3997 209.675 -26.7792 -4264.05 209.698 -27.1721 -4263.84 208.569 -26.5167 -4398.84 208.585 -26.1459 -4376.71 209.216 -25.2868 -4250.64 208.677 -27.2819 -4285.89 208.845 -26.7294 -4214.44 209.093 -28.6102 -4312.38 208.61 -25.7584 -4221.18 209.034 -25.6203 -4102.29 209.015 -27.0524 -4106.93 209.334 -26.5913 -3997 209.38 -26.9508 -3997 208.955 -26.4372 -4130.03 209.021 -28.2787 -4107.12 209.183 -28.01 -3997 208.728 -28.0009 -3997 209.425 -27.3289 -3997 208.897 -27.6741 -3997 208.977 -26.036 -4102.78 209.111 -26.7571 -4031.78 209.256 -26.2737 -3997 209.078 -27.411 -3997 157.077 -26.5945 -4403.64 157.065 -29.0861 -4637.26 157.063 -29.9306 -4518.07 157.069 -26.2409 -4500.1 157.027 -29.5203 -4650.36 157.077 -28.7121 -4614.46 157.36 -28.9212 -4503.22 157.407 -26.3773 -3895.17 157.019 -25.9552 -4614.5 157.079 -28.3499 -4236.96 157.396 -25.9817 -4323.5 157.135 -25.6344 -4422.84 157.457 -28.5501 -4423.63 157.519 -25.6525 -3532.59 157.428 -29.3044 -4514.32 157.772 -28.9532 -3369.26 157.375 -28.1421 -3564.46 157.843 -28.513 -3238.72 157.129 -26.9639 -3762.46 157.747 -26.1741 -3167.04 157.062 -27.9951 -3438.48 157.44 -25.3088 -3287.95 157.762 -29.3371 -3103.41 157.44 -26.7285 -3734.25 157.379 -29.7109 -3193.79 157.316 -27.1928 -3191.52 157.044 -25.297 -3832.45 157.691 -28.2201 -3138.97 158.067 -28.697 -3061.17 157.754 -26.5269 -3566.89 157.053 -27.6427 -3564 157.06 -27.3111 -3135.18 157.451 -27.0031 -3433.01 158.421 -26.7767 -3455.56 158.405 -26.4612 -3531.11 157.357 -27.7988 -3244.88 157.347 -27.456 -3195.85 158.378 -26.1746 -3156.4 158.08 -26.3319 -3312.58 158.472 -27.0771 -3331.96 157.638 -29.5619 -2582.97 158.097 -26.6629 -3411.12 158.154 -26.9903 -2984.8 157.787 -25.8258 -2913.05 157.513 -24.9929 -3195.22 157.601 -27.9386 -3372.8 157.583 -27.2344 -3194.81 157.691 -27.5978 -3069.17 158.492 -27.3906 -3233.71 157.773 -26.9131 -3247.75 158.507 -25.8573 -3033.93 157.137 -24.9841 -3197.57 158.101 -26.0035 -2764.92 158.373 -28.6528 -2952.51 158.438 -25.5548 -3045.06 157.398 -24.7322 -2972.23 157.928 -27.2561 -3001.9 157.888 -27.9221 -2751.23 158.47 -27.7106 -2854.94 158.519 -28.3314 -2749.22 158.593 -25.3381 -3009.17 158.511 -25.0571 -2736.65 157.963 -28.2125 -2497.78 158.236 -27.2559 -2856.71 157.727 -24.7798 -2712.52 158.514 -28.8829 -2946.42 157.827 -25.4824 -2708.4 157.082 -24.6284 -2722.48 158.452 -29.8178 -2421.24 158.139 -25.6765 -2902.04 157.33 -24.5007 -2588.15 158.467 -29.2 -2481.89 158.646 -24.7432 -2598.39 158.209 -28.9419 -2612.97 157.6 -24.5073 -2614.64 158.215 -25.3204 -2656.62 158.255 -28.0181 -2257.45 157.703 -29.8808 -2030.34 157.94 -24.5192 -2594.51 158.678 -24.4962 -2649.82 158.35 -24.8348 -2362.91 158.161 -28.4094 -2271.93 158.126 -27.5885 -2498.26 157.855 -25.1032 -2391.06 158.276 -29.5414 -1905.95 158.066 -29.2597 -2116.68 158.344 -24.5528 -2580.54 158.197 -25.023 -2061.43 157.768 -24.2211 -2497 158.061 -24.8014 -1987.52 158.591 -24.2416 -2468.03 157.139 -24.3228 -2497 158.166 -24.2444 -2497 158.012 -23.9837 -2497 157.725 -23.9519 -2497 157.533 -24.0487 -2497 158.376 -23.9841 -2477.65 157.438 -24.28 -2497 157.275 -24.0364 -2497 156.958 -24.0625 -2497 158.089 -29.8513 -2191.67 157.917 -29.5765 -2087.42 206.122 -40.5897 -4997 203.536 -43.9299 -4997 207.606 -44.2744 -4997 204.145 -40.1685 -4997 204.631 -40.3944 -4997 203.42 -41.6955 -4997 205.764 -40.364 -4997 205.372 -42.6394 -4997 207.257 -44.3718 -4997 204.963 -43.2876 -4997 204.968 -41.7171 -4997 204.027 -44.0382 -4997 207.132 -44.0113 -4997 203.904 -43.5996 -4997 203.533 -40.2813 -4997 205.127 -43.6536 -4997 203.379 -43.1443 -4997 203.988 -43.1061 -4997 204.893 -41.1883 -4997 208.179 -40.472 -4997 204.15 -40.5853 -4997 203.835 -42.123 -4997 203.937 -41.6415 -4997 203.005 -41.7248 -4997 204.606 -40.7823 -4997 203.022 -43.8969 -4997 206.101 -44.5111 -4997 205.792 -42.3478 -4997 205.644 -40.6691 -4997 205.9 -42.7651 -4997 206.433 -42.2995 -4997 205.539 -41.0856 -4997 205.117 -42.1828 -4997 204.417 -41.4676 -4997 207.562 -40.4441 -4997 205.455 -41.9421 -4997 206.675 -41.8646 -4997 203.679 -40.8909 -4997 205.974 -41.902 -4997 203.767 -44.2456 -4997 207.604 -44.6264 -4997 203.247 -41.9853 -4997 204.651 -43.9979 -4997 206.101 -40.9871 -4997 204.545 -42.999 -4997 203.178 -43.5344 -4997 207.638 -43.9537 -4997 206.653 -41.3233 -4997 206.93 -40.2748 -4997 207.085 -40.6971 -4997 207.174 -41.1692 -4997 205.383 -44.0555 -4997 203.773 -44.6664 -4298.17 204.271 -41.0316 -4997 204.48 -41.951 -4997 205.115 -42.9755 -4997 206.495 -44.382 -4997 205.467 -43.3638 -4997 204.634 -42.4996 -4997 203.534 -41.3243 -4997 203.017 -44.6101 -4997 206.06 -41.4419 -4997 207.231 -41.6432 -4997 206.093 -40.2702 -4997 205.704 -43.0389 -4997 205.244 -40.261 -4997 207.341 -43.0287 -4997 207.841 -42.974 -4997 206.834 -43.0828 -4997 206.28 -43.0898 -4997 203.052 -42.7594 -4997 203.523 -42.8089 -4997 207.774 -43.3748 -4997 207.283 -43.407 -4997 206.779 -43.535 -4997 206.074 -43.457 -4997 206.352 -42.7094 -4997 207.889 -42.571 -4997 207.404 -42.6327 -4997 206.9 -42.685 -4997 203.268 -42.386 -4997 206.977 -42.334 -4997 205.624 -44.4294 -4997 206.885 -44.2784 -4997 205.14 -44.3343 -4997 203.284 -44.2527 -4997 206.488 -44.7722 -4997 207.045 -44.6589 -4997 205.93 -44.7923 -4997 206.459 -43.9436 -4997 204.267 -44.3732 -4516.16 204.606 -44.8317 -3063.18 205.262 -44.7292 -4877.37 205.758 -43.7708 -4997 207.633 -43.6605 -4997 207.293 -43.7135 -4997 204.539 -43.4461 -4997 205.968 -44.1797 -4997 206.618 -40.8619 -4997 208.069 -40.8226 -4997 207.664 -40.9897 -4997 203.204 -41.0291 -4997 203.968 -41.2712 -4997 202.714 -40.9588 -4997 202.997 -41.3621 -4997 207.732 -41.4746 -4997 205.474 -41.5448 -4997 206.534 -40.4276 -4997 202.741 -40.1343 -4997 205.091 -40.7271 -4997 207.725 -41.8636 -4997 208.174 -41.8152 -4997 207.426 -42.1637 -4997 208.022 -42.1927 -4997 203.051 -40.6316 -4997 203.966 -42.6538 -4997 204.781 -44.4592 -4174.3 208.758 -43.7209 -4997 208.308 -44.2752 -4997 209.528 -42.0623 -4997 208.457 -40.1985 -4997 208.83 -40.3832 -4997 208.854 -44.2213 -4997 209.383 -43.8231 -4997 208.166 -43.8451 -4997 209.456 -42.4948 -4997 208.523 -40.851 -4997 209.269 -42.9514 -4997 208.595 -40.5364 -4997 208.358 -43.3044 -4997 209.364 -39.8935 -4997 208.235 -42.8722 -4997 208.696 -42.9413 -4997 208.899 -42.5495 -4997 208.381 -42.5543 -4997 208.535 -42.1888 -4997 209.04 -42.1367 -4997 207.95 -44.1697 -4997 208.024 -44.4897 -4997 209.505 -44.3398 -4997 209.534 -40.7358 -4997 209.009 -40.7454 -4997 209.266 -40.359 -4997 209.431 -41.1805 -4997 208.893 -41.1496 -4997 208.364 -41.3304 -4997 208.862 -40.0457 -4997 208.656 -41.8306 -4997 209.136 -41.6409 -4997 159.463 -43.4437 -4908.73 158.006 -40.9072 -4774.9 160.156 -42.7676 -4812.04 160.18 -42.3337 -4950.09 158.763 -44.0498 -4817.11 159.833 -43.6744 -4941.77 159.847 -44.4465 -5119.84 160.437 -44.4644 -5015.55 160.072 -44.8862 -4938.88 158.866 -40.1206 -4933.49 158.263 -44.1713 -4670.76 159.393 -44.8128 -5068.39 158.17 -44.8077 -4927.32 158.765 -44.8002 -5068.99 158.516 -44.4438 -5048.89 159.253 -41.5272 -4802.5 159.2 -44.3478 -5159.05 159.333 -43.8571 -4934.93 159.806 -44.0428 -5201.4 160.169 -43.2734 -4918.82 160.234 -44.1609 -5193.16 160.387 -43.7701 -5064.41 159.687 -41.7475 -4705.46 160.19 -41.9164 -4931.85 158.858 -41.271 -4720.89 159.007 -42.8136 -4748.59 157.712 -41.7764 -4624.17 158.225 -41.431 -4762.88 157.577 -40.5746 -4665.31 159.638 -42.1557 -4858.51 158.513 -43.0696 -4670.71 158.343 -43.8274 -4609.19 159.562 -43.0065 -4734.28 158.892 -43.6423 -4729.17 159.711 -41.3882 -4924.38 159.149 -41.9353 -4714.06 159.43 -40.1526 -4945.4 160.084 -40.2587 -4780.21 158.016 -40.4441 -4734.86 158.525 -41.0055 -4823.18 159.08 -40.4701 -4901.82 157.628 -41.3165 -4545.97 158.464 -43.4387 -4604.09 159.41 -41.1217 -4884.71 160.154 -41.5152 -4925.99 158.17 -41.9237 -4664.73 158.542 -40.5515 -4955.28 157.603 -44.7791 -4708.63 157.948 -44.4495 -4800.3 158.979 -43.2395 -4692.39 159.59 -42.5771 -4706.51 158.698 -41.7126 -4667.89 158.298 -40.0616 -4840.76 159.001 -40.8517 -4894.11 160.59 -41.2423 -4839.02 157.762 -42.1222 -4412.07 159.593 -40.6591 -4920.67 158.129 -43.2586 -4599.11 159.054 -42.3763 -4649.76 160.018 -41.0688 -4848.56 157.934 -43.5805 -4566.07 157.101 -40.7494 -4564.89 157.16 -40.2914 -4439.91 157.208 -42.9514 -4599.71 157.645 -43.2142 -4696.42 158.592 -42.155 -4689.43 158.089 -42.9901 -4606.14 158.43 -42.6477 -4702.31 157.748 -42.7387 -4669.48 157.613 -42.3861 -4824.86 157.13 -43.2877 -4749.08 157.225 -42.5804 -4681.95 157.282 -42.1548 -4712.85 157.493 -40.9474 -4484.12 160.428 -40.5429 -4760.72 157.675 -40.0926 -4795.1 160.121 -40.6797 -4877.73 158.048 -42.3345 -4741.97 157.295 -43.6524 -4785.59 160.48 -40.858 -4856.85 157.147 -41.6674 -4516.67 157.754 -44.0454 -4542.87 157.154 -41.1893 -4469.86 157.133 -44.7236 -4643.11 157.114 -44.0892 -4551.09 157.383 -44.4307 -4565.14 160.743 -42.5008 -4897.12 163.036 -44.8254 -4867.11 162.545 -44.9156 -4865.96 160.984 -43.3883 -5021.18 160.971 -43.805 -5068.1 160.688 -44.1137 -5127.46 161.84 -41.9965 -4865.11 161.28 -42.2522 -4898.51 161.287 -42.6567 -4982.66 161.319 -43.0034 -4969.93 161.803 -42.8206 -4899.33 161.706 -43.2393 -4877.24 161.553 -43.7032 -5016.27 161.215 -44.0975 -5068.87 161.709 -44.0694 -4877.22 160.728 -42.0843 -4871.96 162.664 -44.5631 -4866.51 162.209 -44.2492 -4903.14 160.781 -42.9239 -4981.09 161.271 -41.8275 -4910.09 161.813 -41.5613 -4780.76 162.066 -43.863 -4853.43 160.93 -44.3847 -5072.41 161.811 -42.4217 -4957.17 162.191 -43.5082 -4787.65 162.824 -44.2061 -4879.36 161.766 -41.2008 -4725.76 162.374 -42.1817 -4897.67 162.023 -44.7892 -4837.52 161.47 -44.4674 -4889.34 161.227 -41.3496 -4772.67 162.537 -41.7044 -4855.19 160.693 -41.6559 -4899.83 162.38 -43.0296 -4987.02 163.493 -44.7617 -4785.32 160.849 -44.7945 -4922.07 162.327 -42.5892 -4910.61 162.653 -43.8231 -4894.8 162.245 -41.2633 -4788.12 163.3 -44.4304 -4813.09 161.41 -44.904 -4854.91 161.503 -40.9161 -4615.13 160.961 -40.9263 -4778.78 162.043 -40.9137 -4837.65 163.27 -43.9677 -4860.38 163.804 -44.8933 -4815.05 162.502 -40.9509 -4746.5 162.762 -42.7057 -4946.14 162.825 -41.208 -4760.57 163.143 -41.8244 -4827.95 163.172 -43.6216 -4747.91 163.869 -44.5718 -4821.92 164.265 -44.852 -4730.54 163.856 -44.1395 -4851.34 164.444 -44.3817 -4778.34 163.112 -42.9765 -5021.86 163.322 -43.3331 -4905.14 160.7 -40.2847 -4749.75 162.829 -42.3759 -4887.54 162.866 -42.0519 -4833.86 163.176 -42.5781 -4475.9 162.802 -43.3864 -4855.79 160.755 -40.6337 -4807.85 163.717 -43.0975 -4209.76 164.807 -44.7435 -4671.51 163.662 -41.7201 -4649.16 162.962 -40.7943 -4717.31 163.242 -41.4783 -4828.91 161.195 -39.9698 -4819.64 163.696 -42.6493 -4174.28 161.816 -40.5549 -4699.1 163.447 -42.1731 -4778.73 163.821 -41.3592 -4669.32 162.441 -40.5583 -4588.04 163.81 -43.5855 -4707.79 162.103 -40.1629 -4659.69 161.218 -40.5086 -4765.22 163.476 -41.0469 -4603.75 163.042 -40.3724 -4484.86 164.117 -41.5698 -4599.28 161.618 -40.2129 -4720.55 165.218 -43.7944 -4619.68 163.495 -40.6002 -4284.5 165.685 -44.2376 -4427.47 164.082 -41.0285 -4201.05 164.495 -43.4999 -4107.92 165.685 -43.8902 -4461.44 164.168 -41.9137 -4674.5 162.67 -40.0745 -4686.23 165.684 -44.5175 -4506.03 165.521 -43.529 -4452.72 164.548 -42.1934 -4583.55 164.691 -41.8858 -4610.49 164.594 -41.5677 -4705.16 164.701 -41.2486 -4480.82 164.545 -40.997 -4494.46 164.952 -42.4498 -4505.48 165.029 -42.0495 -4615.27 163.893 -40.7626 -4322.2 165.451 -42.2011 -4295.6 163.143 -40.0061 -4269.06 163.575 -40.1591 -3895.41 165.499 -42.5457 -4420.6 164.851 -40.6525 -3838.97 164.246 -43.1843 -3221.65 165.159 -42.7591 -4531.96 165.061 -41.7058 -4600.09 164.997 -41.0211 -4482.47 165.417 -43.2351 -4384.77 165.957 -42.6393 -4323.45 165.052 -41.3637 -4516.02 164.318 -41.2934 -4654.07 165.586 -42.9224 -4296.39 164.341 -42.5553 -3825.38 165.817 -43.2549 -4194.16 166.274 -43.3345 -3995.26 164.046 -42.2996 -4144.14 165.406 -40.7348 -4075.76 165.629 -40.3902 -4012.07 165.469 -41.8608 -4406.69 165.097 -43.0629 -3866.86 165.041 -43.433 -4275.42 164.127 -42.8683 -2912.4 164.7 -43.2014 -3838.7 166.211 -42.0422 -3887.85 166.303 -41.4014 -3979.7 164.652 -42.8628 -4053.97 166.573 -40.5243 -2798.51 164.031 -40.4073 -3542.63 164.041 -40.0807 -3629.85 164.34 -40.1568 -3586.97 164.328 -40.7102 -4272.21 164.542 -40.3816 -3497.21 175.83 -44.8743 -1186.16 175.514 -44.9091 -1128.64 173.208 -44.9773 -1217.55 172.428 -44.8181 -1030.47 173.468 -44.9138 -1081.1 175.998 -44.7181 -1056.65 175.229 -44.9055 -1067.69 173.01 -44.8708 -1151.66 175.899 -42.8736 -623.61 173.252 -44.8122 -1070.87 176.105 -44.568 -870.81 174.969 -44.881 -892.51 172.845 -44.7694 -957.44 175.879 -44.5849 -891.86 174.51 -44.9685 -938.15 174.776 -45.0243 -1007.77 174.167 -44.6006 -908.33 176.28 -44.4493 -852.55 173.645 -44.532 -719.63 173.063 -44.7013 -782.41 175.128 -44.7488 -825.18 174.906 -44.7125 -727.03 175.776 -44.4887 -712.7 174.402 -44.5829 -801.17 176.387 -42.9031 -505.89 173.559 -42.513 -35.03 176.083 -44.4147 -311.1 172.887 -44.6392 -547.79 174.682 -44.6334 -841.82 173.763 -44.4441 -703.74 176.388 -44.3248 -719.43 175.062 -44.6133 -766.06 175.928 -44.4652 -711.46 175.216 -44.5102 -733.11 174.89 -44.5811 -748.59 176.203 -44.3244 -565.19 174.914 -42.989 -614.91 175.612 -44.4478 -768.23 173.6 -44.4249 -658.82 175.388 -44.3863 -669.99 174.135 -43.3608 -593.93 174.601 -44.4796 -719.25 174.519 -43.1271 -560.77 175.005 -44.4832 -704.31 175.6 -44.305 -613.94 172.017 -44.9011 -192.96 174.057 -44.3759 -684.82 175.915 -43.0084 -502.68 174.797 -44.4684 -674.8 175.15 -44.3725 -629.09 174.297 -43.3162 -574.09 174.441 -44.4012 -681.97 174.415 -43.2218 -553.65 173.273 -44.3974 -395.13 175.26 -44.2749 -569.07 175.251 -44.1601 -493.97 175.216 -44.0258 -452.45 173.709 -42.9253 -593.69 174.108 -43.4871 -588.26 175.79 -44.3674 -560.07 174.68 -44.3193 -599.14 173.973 -43.4046 -609.72 175.428 -44.2276 -563.36 174.927 -44.3449 -594.96 175.604 -44.1666 -539.46 174.463 -44.2392 -596.12 174.109 -44.2336 -584.66 175.081 -44.2417 -551.77 173.708 -44.341 -649.03 173.59 -42.5726 -368.64 176.224 -42.9828 -486.58 175.631 -44.0544 -530.67 176.362 -43.0234 -445.87 172.699 -44.6784 -435.62 175.439 -44.0747 -511.97 175.762 -44.2304 -557.13 174.431 -44.0932 -557.27 174.87 -44.1988 -536.08 175.079 -42.9973 -432.94 176.279 -44.2122 -412.92 174.115 -44.1007 -554.02 174.471 -43.3347 -529.22 174.248 -43.5681 -526.73 174.549 -44.0024 -533.8 174.648 -44.1292 -542.44 174.519 -43.4442 -494.2 174.893 -43.1089 -300.94 173.964 -44.1656 -547.8 174.396 -41.9607 -153.49 175.56 -43.9509 -483.66 175.05 -44.1088 -503.18 174.577 -43.2438 -490.69 175.771 -43.9684 -512.01 176.338 -44.0633 -453.32 174.709 -44.0064 -512.86 174.283 -43.9219 -554.86 174.462 -43.885 -552.03 173.156 -44.369 -191.11 175.764 -44.1076 -530.11 175.022 -43.9766 -455.7 174.857 -44.058 -487.11 174.659 -43.9063 -494.73 175.683 -43.8494 -421.85 175.359 -43.935 -466.86 174.61 -43.7934 -514.15 174.575 -43.6737 -528.04 174.434 -43.7538 -554.47 174.548 -43.5564 -509.67 174.318 -43.8207 -555.28 176.118 -44.0027 -476.87 176.3 -43.9093 -499.58 174.707 -43.5921 -440.86 174.674 -43.4769 -404.53 174.632 -43.3591 -427 174.245 -43.7095 -523.14 175.958 -43.9151 -527.28 174.761 -41.7754 -97 174.742 -43.7043 -472.8 174.836 -43.9333 -471.74 173.806 -44.2357 -573.07 173.576 -43.1496 -119.83 175.222 -43.0252 -324.67 175.478 -43.8237 -430.37 174.094 -43.6137 -494.14 175.834 -43.8565 -453.83 175.926 -43.1496 -405.19 174.79 -43.817 -459.53 175.341 -43.0701 -199.89 175.177 -43.8997 -454.39 176.258 -43.1185 -387.21 176.291 -43.7719 -428.62 176.126 -43.8458 -468.22 176.102 -43.1881 -379.15 173.469 -43.4205 -511.26 174.993 -43.8373 -441.05 175.769 -43.1799 -439.33 175.303 -43.8396 -438.43 174.1 -43.9583 -523.09 175.178 -43.7863 -430.86 174.788 -43.3916 -353.96 175.949 -44.3652 -291.05 172.303 -44.7472 -167.7 172.546 -44.6478 -230.65 176.293 -43.6607 -388.84 175.961 -43.789 -420.93 175.628 -43.7397 -350.63 175.012 -43.0842 -336.76 174.904 -43.7247 -427.06 176 -41.2569 -51.34 176.208 -43.5689 -365.45 175.559 -43.1156 -162.67 174.169 -43.8318 -507.78 173.953 -44.0419 -468.76 176.114 -43.6959 -375.05 174.594 -41.5541 -475.03 175.86 -43.2477 -385.95 175.064 -43.7139 -403.19 175.216 -43.682 -362.88 176.152 -44.1363 -245.03 173.236 -44.3156 -208.8 175.989 -43.2643 -359.69 173.813 -44.1107 -452.61 174.667 -41.8336 -127.27 174.827 -43.51 -342.61 176.243 -43.2469 -333.09 175.472 -43.7021 -346.15 175.332 -43.7477 -387.6 176.117 -43.2849 -351.84 175.915 -43.6733 -331.64 175.845 -43.5711 -287.81 175.885 -43.3402 -316.69 173.441 -44.1987 -194.54 174.977 -43.161 -217.25 175.922 -43.4595 -348.23 173.971 -43.531 -237.27 176.039 -43.3615 -364.47 172.424 -44.6153 -155.96 176.304 -43.4535 -341.67 175.592 -43.6348 -281.29 175.695 -43.5595 -257.9 175.355 -43.6479 -274.52 175.113 -43.6143 -309.71 175.738 -43.2922 -231.39 175.136 -43.0912 -226.57 174.011 -43.8406 -364.21 176.205 -43.3568 -344.73 175.777 -43.4931 -286.99 175.256 -43.1156 -149.02 175.472 -43.6135 -273.89 175.541 -43.5334 -223.41 173.147 -44.3047 -154.97 175.254 -43.5842 -211.31 175.658 -43.4674 -240.94 173.786 -43.9935 -212.43 173.919 -43.9245 -309.71 176.141 -44.2369 -112.62 175.769 -43.4042 -301.67 175.643 -43.2004 -206.41 175.635 -43.3726 -195.93 173.932 -43.6528 -149.68 171.844 -44.8977 -131.46 175.899 -44.1614 -215.18 175.591 -43.2818 -121.97 175.019 -43.2449 -142.46 176.049 -44.3039 -132.38 175.151 -43.5166 -143.01 174.602 -41.4873 -244.6 173.875 -43.8207 -112.66 172.099 -44.8364 -190.8 175.439 -43.1316 -115.71 172.738 -44.427 -146.96 175.344 -43.1449 -115.49 173.604 -42.9809 -178.7 174.992 -43.5388 -294.78 173.494 -44.0489 -191.56 174.541 -41.8647 -154.12 173.65 -43.9948 -162.54 173.835 -43.7283 -96.08 175.392 -43.5568 -162.71 175.536 -43.4311 -161.51 173.065 -44.3292 -158.25 173.842 -43.5555 -95.16 173.38 -43.3819 -124.04 175.908 -44.2725 -157.43 175.12 -43.3055 -125.51 173.781 -43.8855 -112.26 175.191 -43.4291 -96.47 175.186 -43.1694 -131.79 173.468 -44.1292 -167.83 173.786 -43.6399 -91.64 173.759 -43.7911 -94.73 172.635 -44.441 -155.51 173.602 -42.7664 -197 173.586 -43.0631 -128.92 172.171 -44.762 -159.24 175.066 -43.4389 -131.72 175.122 -43.3751 -131.92 172.84 -44.399 -127.02 175.52 -43.2037 -84.57 175.077 -43.1628 -190.59 171.748 -44.9267 -133.64 172.224 -44.6884 -126.81 175.286 -43.1893 -102.28 173.191 -44.2452 -144.58 173.725 -43.7075 -88.81 172.521 -44.5671 -158.76 174.561 -41.777 -158.53 171.64 -44.9286 -96.26 171.983 -44.8304 -144.32 173.358 -44.1476 -121.72 175.42 -43.4683 -125.6 175.205 -43.3519 -123.04 173.677 -43.9247 -99.68 172.045 -44.7557 -121 172.677 -40.0125 -132.43 174.436 -41.888 -124.26 174.403 -41.4382 -116.26 173.659 -43.4895 -82.55 172.588 -44.5069 -127.52 174.459 -41.8099 -119.22 173.724 -43.5618 -87.62 175.515 -43.3458 -119.48 172.949 -44.3535 -130.34 173.514 -43.1054 -102.4 174.348 -41.9057 -145.86 172.123 -44.6935 -117.4 173.593 -42.9056 -110.37 174.335 -42.0156 -110.58 173.467 -43.976 -94.97 173.675 -43.6326 -84.66 172.789 -40.0281 -112.1 174.413 -41.3282 -104.55 173.093 -44.2638 -119.04 175.287 -43.4939 -132.85 171.873 -44.8287 -110.19 173.655 -43.7618 -86.52 173.668 -43.841 -91.17 173.269 -44.1887 -121.34 172.255 -44.6231 -119.4 175.138 -43.2317 -137.54 172.73 -40.0905 -121.95 171.776 -44.8544 -101.41 172.487 -44.5034 -119.03 173.596 -43.9472 -110.75 173.431 -43.4977 -83.82 173.626 -43.6928 -86.52 172.823 -40.0838 -110.63 172.89 -40.038 -111.41 172.284 -44.5639 -108.49 172.671 -40.1663 -129.59 173.185 -44.184 -104.62 176.027 -44.2039 -98.25 173.002 -44.2801 -109.1 172.042 -44.6845 -105.94 175.484 -43.2733 -93.06 173.517 -43.0109 -99.2 171.933 -44.7695 -107.05 175.211 -43.2827 -101.53 174.467 -41.7247 -114.07 173.493 -43.2111 -101.31 174.573 -41.6937 -139.78 173.388 -44.0794 -113.48 172.96 -40.0656 -109.65 174.553 -40.9973 -198.55 175.399 -43.2179 -77.98 172.534 -44.4444 -107.42 173.395 -44.0096 -95.92 172.167 -44.632 -110.17 174.439 -40.9416 -133.26 171.69 -44.8689 -92.49 172.399 -44.5045 -120.46 173.279 -44.1317 -100.42 172.802 -40.15 -109.16 175.437 -43.3924 -89.34 172.758 -44.361 -101.17 173.49 -43.0624 -99.84 174.661 -41.7389 -117.84 174.178 -42.1326 -135.97 172.91 -40.1091 -108.32 172.748 -40.2071 -110.81 173.476 -43.1483 -95.63 173.606 -43.563 -84.84 172.981 -40.014 -111.57 172.082 -44.6349 -104.13 171.851 -44.7671 -97.49 173.586 -43.6302 -85.15 173.119 -44.2052 -101.57 171.958 -44.6987 -100.43 174.501 -41.6483 -107.3 173.58 -43.7358 -80.24 172.674 -40.2418 -115.49 173.524 -43.9355 -94.84 172.317 -44.5085 -106.58 175.224 -43.2267 -105.72 175.284 -43.3227 -92.58 175.316 -43.3977 -78.17 172.99 -40.0992 -106.13 172.833 -40.2179 -99.76 172.91 -44.2812 -88.2 173.029 -40.0596 -107.58 172.911 -40.1775 -102.42 173.314 -44.0962 -96.75 173.078 -40.0014 -111.84 171.888 -44.7272 -97.64 174.379 -41.7723 -127.38 171.793 -44.7975 -94.68 172.578 -44.3864 -99.54 172.432 -44.4391 -93.52 172.765 -40.2606 -99.34 174.367 -40.9603 -130.4 172.993 -40.1448 -100.87 171.622 -44.8725 -82.94 173.214 -44.1395 -101.5 173.108 -40.0658 -105.23 173.179 -40.0201 -104.41 174.463 -40.2264 -90.84 172.2 -44.573 -102.06 172.696 -40.3125 -93.3 172.119 -44.5789 -93.63 173.056 -40.1095 -101.2 173.568 -43.7979 -80.73 173.331 -43.4951 -66.15 173.576 -43.8825 -88.28 172.85 -40.2737 -83.51 173.039 -44.2205 -95.77 172.229 -44.5091 -90.93 173.175 -40.0776 -99.45 172.35 -44.4545 -86.92 173.256 -40.0097 -100.72 172.843 -44.3292 -95.63 174.42 -41.6645 -94.65 175.394 -43.3171 -81.67 173.833 -40.0962 -97 174.266 -40.8767 -80.33 174.255 -40.9628 -61.56 174.044 -42.1733 -83.04 174.189 -40.392 -99.27 174.209 -40.3011 -97 173.881 -40.1418 -97.84 174.826 -40.3705 -96.63 173.927 -40.6566 -105.67 174.124 -40.3587 -100.21 173.886 -40.3374 -100.32 174.258 -40.7906 -101.42 173.804 -40.044 -101.2 174.305 -40.9276 -117.91 174.137 -40.3047 -99.96 173.931 -40.1858 -97 174.893 -40.4627 -97.16 174.076 -40.26 -97 174.34 -41.3536 -97.2 174.872 -40.8448 -83.72 174.291 -40.3007 -97.97 174.142 -40.6607 -103.19 174.114 -40.6159 -101.47 174.074 -40.6613 -172.44 173.54 -43.5903 -81.4 173.915 -40.2881 -105.13 173.904 -40.2313 -102.18 174.597 -40.2778 -95.04 174.183 -40.3432 -97.34 174.16 -40.2492 -95.72 173.791 -40.1464 -92.95 174.037 -40.7129 -77.69 174.827 -40.4706 -104.12 174.843 -40.4202 -97.87 174.138 -40.5269 -111.72 174.164 -40.4837 -107.17 174.117 -40.4228 -110.06 173.952 -40.3483 -116.93 173.901 -40.0989 -95.95 172.793 -40.3117 -84.61 174.038 -40.4291 -119.05 173.98 -40.4638 -95.75 173.992 -40.6628 -91.4 174.181 -42.0033 -107.9 174.872 -40.5745 -104.77 174.859 -40.5169 -105.54 174.767 -40.4459 -105.22 174.769 -40.3912 -102.27 174.705 -40.358 -101.2 174.075 -40.5562 -102.92 174.075 -40.4852 -134.06 173.983 -40.237 -99.39 171.72 -44.8114 -95.26 173.847 -40.1949 -99.8 173.999 -40.1838 -94.95 174.202 -40.6915 -113.27 174.192 -40.6312 -127.01 174.166 -40.5755 -127.4 174.211 -40.5341 -115.61 174.385 -40.6768 -125.95 174.407 -40.6276 -130.53 174.433 -40.5761 -122.22 174.46 -40.524 -111.2 174.496 -40.4738 -110.66 174.538 -40.4217 -108.23 174.58 -40.3711 -107.26 174.635 -40.3231 -97.96 174.24 -40.7471 -111.67 174.262 -40.3614 -111 174.372 -40.2955 -97 174.245 -42.0609 -102.08 174.55 -40.315 -104.45 173.663 -40.1032 -78.08 174.486 -40.362 -105.61 174.461 -40.2919 -98.5 174.449 -40.4214 -110.72 174.409 -40.4737 -114.59 174.416 -40.3353 -104.22 174.411 -40.3773 -108.35 174.377 -40.5298 -123.41 174.322 -40.48 -113.61 174.352 -40.5829 -130.48 174.327 -40.6384 -137.44 174.302 -40.6989 -140.67 174.313 -40.7619 -134.86 173.593 -40.0922 -80.72 173.515 -40.0782 -84.11 173.441 -40.0617 -89.31 173.412 -40.012 -91.53 173.381 -40.0531 -91.67 173.328 -40.0211 -94.62 173.572 -40.0469 -80.49 173.741 -40.0887 -85.72 173.654 -40.0474 -79 173.733 -40.0285 -88.16 173.502 -40.0162 -84.1 174.205 -41.9442 -109.48 173.252 -40.0648 -96.79 174.26 -41.9842 -144.18 174.218 -41.8846 -80.82 173.133 -40.1158 -99.4 173.004 -40.2022 -88.99 174.864 -40.7278 -97.85 172.929 -40.2441 -87.1 173.621 -40.1404 -76.71 173.448 -43.1028 -86.36 174.04 -40.3703 -110.1 174.241 -40.4843 -116.2 174.257 -40.6505 -129.46 173.904 -40.4995 -81.57 173.901 -40.4379 -83.8 173.894 -40.3836 -97.38 173.537 -43.6799 -82.34 173.513 -43.7408 -84.08 173.208 -40.117 -95.5 173.967 -40.4062 -105.99 173.972 -40.1252 -95.38 173.996 -40.5184 -87.33 173.999 -40.5657 -65.12 174.034 -40.6105 -85.03 173.941 -40.5483 -73.42 173.945 -40.6027 -72.67 174.273 -41.9231 -141.43 174.229 -40.8317 -77.98 174.188 -40.8756 -65.98 171.793 -44.7533 -89.59 174.533 -40.2565 -98.07 174.089 -42.1198 -81.34 174.046 -40.2085 -97 174.863 -40.6677 -101.22 173.523 -42.9498 -86.96 174.357 -41.0032 -119.47 174.145 -42.0647 -97 174.942 -40.4987 -95.02 174.922 -40.5426 -96.46 175.301 -43.2603 -86.3 173.702 -40.1457 -78.83 173.334 -40.0787 -92.54 174.394 -40.2421 -92.48 174.322 -41.9579 -158.19 173.522 -43.6259 -79.41 171.826 -44.7186 -89.81 174.891 -40.6175 -96.33 173.305 -44.0373 -90.12 174.773 -40.5018 -110.78 173.393 -40.0877 -91.94 173.834 -40.2507 -94.51 174.648 -40.3777 -104.49 173.087 -40.1669 -93.01 172.765 -44.3043 -91.14 173.067 -44.1661 -91.44 172.828 -44.2684 -84.51 174.701 -40.412 -107.14 173.138 -44.1452 -88.62 173.241 -44.0847 -91.56 172.002 -44.6351 -95.87 173.833 -40.3058 -93.56 173.447 -40.119 -87.16 172.691 -40.3729 -82.5 174.916 -40.4194 -93.97 171.746 -44.7659 -89.07 173.879 -40.0575 -95.04 172.958 -44.2262 -78.03 173.857 -40.0066 -92.68 174.784 -40.5649 -113.43 174.826 -40.6179 -112.79 173.288 -40.1213 -92.66 172.879 -44.2224 -75.28 173.538 -40.1332 -83.22 174.319 -40.2478 -96.67 174.718 -40.8821 -152.85 172.042 -44.5803 -89.76 172.613 -44.3318 -90.86 174.338 -41.4643 -87.46 173.654 -40.1805 -72.75 172.15 -44.5254 -86.03 173.367 -43.4411 -86.34 173.168 -40.154 -93.99 173.45 -43.9184 -80.29 174.399 -41.487 -101.6 172.276 -44.4556 -83.35 173.455 -43.0247 -74.89 173.435 -43.2741 -82.38 173.365 -40.1241 -87.38 171.875 -44.6785 -91.15 174.241 -40.2475 -90.9 172.489 -44.3858 -84.41 173.48 -43.5928 -82.82 174.688 -40.4729 -110.41 173.739 -40.2089 -81.89 172.369 -44.4086 -81.69 173.082 -44.123 -84.32 174.11 -40.2026 -90.89 172.71 -44.2807 -86.94 174.707 -40.5325 -112.67 175.054 -41.5523 -105.09 174.95 -40.5861 -88.57 174.775 -40.3394 -94.95 173.774 -40.3275 -84.25 173.489 -43.7866 -82.15 172.167 -44.4811 -81.49 173.832 -40.3568 -87.31 174.807 -40.7557 -114.15 172.412 -44.3754 -81.6 173.578 -40.1818 -79.78 174.797 -40.7035 -115.03 172.868 -40.3187 -75.18 174.626 -40.4228 -107.88 173.391 -43.9469 -77.63 173.468 -43.6407 -81.26 173.634 -40.2224 -74.63 173.938 -40.073 -90.71 174.439 -41.5386 -90.15 173.497 -43.8888 -84.1 174.716 -40.3037 -92.51 174.459 -40.1807 -80.7 173.176 -44.1025 -83.11 173.403 -40.161 -79.45 174.055 -40.1609 -92.28 174.371 -41.6284 -77.63 174.601 -40.2284 -89.29 173.765 -40.2771 -84.29 173.322 -43.9693 -76.96 172.996 -44.173 -81.62 173.886 -40.6979 -87.72 173.481 -40.183 -73.39 173.087 -40.2283 -72.35 174.698 -40.5817 -115.87 174.66 -40.2642 -89.19 173.239 -40.1636 -89.48 173.021 -40.2563 -67.59 173.461 -43.6946 -88.67 171.923 -44.6318 -89.14 176.223 -41.0325 -67.56 171.571 -44.8963 -73.45 173.428 -43.1787 -81.78 174.746 -40.6223 -116.79 174.846 -40.324 -91.31 172.758 -44.2529 -83.6 174.645 -40.5175 -114.33 172.644 -44.276 -80.82 172.079 -44.5275 -82.25 171.968 -44.5792 -85.02 173.546 -40.2304 -77.62 174.271 -41.3516 -71.91 174.407 -40.19 -81.59 174.901 -40.3694 -90.22 173.327 -40.1751 -81.95 173.72 -40.3452 -72.39 173.689 -40.2651 -78.15 174.588 -40.4817 -112.72 173.444 -43.7478 -80.37 172.911 -40.2906 -75.47 172.756 -40.3549 -81.74 174.79 -40.6585 -118.71 174.966 -40.4466 -88.5 174.526 -40.1932 -85.88 173.774 -40.3773 -79.71 174.117 -40.7043 -85.82 172.806 -44.214 -77.26 173.231 -44.0303 -79.33 172.309 -44.4082 -77.15 173.422 -43.0601 -68.92 172.532 -44.3345 -79.28 173.176 -40.2053 -86.91 173.724 -40.3044 -77.73 174.343 -40.1959 -85.78 173.831 -40.7087 -51.97 173.316 -43.4035 -64.03 173.369 -43.322 -72.27 174.654 -40.5537 -115.79 174.66 -40.8683 -156.8 173.532 -40.2712 -70.67 173.497 -43.837 -83.88 174.316 -41.7749 -69.87 174.984 -40.5354 -86.8 173.439 -43.5561 -80.87 173.509 -42.8906 -82.98 172.695 -44.2397 -78.06 172.207 -44.4484 -80.57 173.121 -44.0925 -78.57 174.713 -40.8324 -143 172.848 -44.1688 -72.24 173.027 -44.1252 -81.92 173.399 -40.2027 -73.78 174.755 -40.7895 -129.56 173.606 -40.2749 -71.25 173.454 -40.253 -69.72 174.734 -40.7386 -123.62 173.833 -40.408 -82.17 173.512 -42.7936 -127.62 174.272 -40.1965 -88.67 172.565 -44.2856 -73.71 174.672 -40.6279 -121.58 173.387 -43.893 -76.41 172.007 -44.5257 -77.82 174.529 -40.5185 -113.21 173.263 -40.2076 -82.18 173.437 -43.8639 -79.46 172.109 -44.4796 -76.97 174.191 -40.1896 -84.17 173.087 -40.2723 -64.54 173.059 -44.0846 -78.92 172.976 -40.2932 -71.23 171.851 -44.6243 -81.85 172.244 -44.4051 -73.59 172.921 -44.1719 -71.78 173.67 -40.3124 -70.55 174.947 -40.6492 -84.78 173.331 -43.9124 -70.43 171.896 -44.5755 -78.67 171.804 -44.668 -81.9 174.588 -40.548 -115.08 173.501 -40.2927 -70.79 173.714 -40.3951 -75.2 173.168 -44.0507 -70.95 171.677 -44.7558 -77.73 171.635 -44.8173 -76.48 174.631 -40.5904 -117.99 173.665 -40.3586 -67.3 173.407 -43.5993 -75.63 174.128 -40.1471 -84.72 172.142 -44.4375 -73.34 171.746 -44.7115 -79.95 172.589 -44.2383 -67.18 172.455 -44.3306 -74.61 173.251 -43.9828 -72.26 174.974 -40.3948 -88.53 173.427 -43.8034 -75.07 174.789 -40.2874 -86.46 174.715 -40.6776 -127.6 173.383 -43.0954 -64.39 173.556 -40.3067 -67.35 172.642 -44.2272 -71.17 172.345 -44.3642 -73.57 174.918 -40.3097 -85.2 173.338 -40.2407 -75.45 171.571 -44.8477 -66.2 173.451 -42.976 -63.67 174.735 -40.2487 -82.84 173.402 -43.6553 -75.19 173.772 -40.4298 -75.93 173.934 -40.0223 -85.81 172.739 -44.2038 -77.87 174.51 -40.5665 -124.85 173.154 -40.2629 -78.52 174.482 -40.1447 -77.14 174.603 -40.1718 -82.96 173.382 -40.2932 -70.72 173.399 -43.219 -76.27 173.239 -40.2528 -80.4 173.406 -43.1388 -73.27 173.614 -40.3276 -64.32 174.612 -40.628 -124.6 172.828 -40.3532 -73.79 173.393 -43.7059 -74.63 173.453 -40.3095 -70 171.938 -44.5239 -74.08 172.044 -44.4751 -72.51 172.781 -44.1652 -74.38 173.65 -40.4027 -70.12 174.424 -40.1452 -78.94 173.834 -40.4601 -76.7 172.959 -44.1235 -71.8 171.46 -44.9315 -56.14 174.866 -40.2675 -80.31 174.592 -40.8596 -147.45 174.072 -40.0976 -85.1 172.705 -40.41 -80.73 174 -40.0594 -85.54 174.68 -40.7793 -125.86 173.379 -43.7539 -73.56 174.679 -40.2015 -82.07 174.644 -40.7226 -133.92 174.363 -40.1477 -81.16 174.632 -40.8204 -147.74 173.049 -40.3016 -66.92 172.492 -44.2856 -69.17 174.379 -40.7301 -140.2 173.512 -40.3288 -70.55 172.676 -44.1942 -70.56 173.353 -40.3265 -73.91 174.491 -40.626 -119.21 174.543 -40.1394 -76.04 171.513 -44.9135 -60.6 171.83 -44.5697 -72.76 173.7 -40.4568 -74.42 174.632 -40.667 -127 173.349 -43.2625 -67.21 173.095 -44.0452 -71.83 173.567 -40.3479 -67.51 175.023 -40.4843 -81.05 172.178 -44.3971 -69.79 174.565 -40.6024 -117.81 173.299 -40.3007 -75.26 172.279 -44.3589 -69.71 173.257 -43.9198 -68 173.615 -40.367 -64.19 172.384 -44.3223 -70.48 173.338 -43.8701 -71.83 174.983 -40.3382 -79.42 173.404 -40.3362 -66.48 174.301 -40.1488 -82.34 173.185 -43.9941 -66.69 172.525 -44.2421 -64.4 172.937 -40.3276 -74.38 173.375 -43.8425 -74.35 173.626 -40.4373 -69.86 172.816 -44.1234 -69.88 171.973 -44.4666 -68.6 172.079 -44.4308 -68.91 173.821 -40.509 -77.24 174.237 -40.1456 -81.88 173.468 -40.3582 -68.75 173.011 -40.3391 -69.96 174.03 -40.7577 -63.87 172.996 -44.0799 -71.43 171.778 -44.6141 -72.95 173.073 -40.337 -67.34 173.125 -40.314 -66.56 174.449 -40.6649 -131.46 173.394 -43.0141 -55.67 174.183 -40.1353 -81.21 174.313 -40.8208 -116.77 173.776 -40.4738 -76.81 171.868 -44.5162 -69.46 173.211 -40.3045 -72.02 173.372 -43.545 -74.1 173.317 -40.3501 -71.68 174.566 -40.6514 -126.66 172.116 -44.3881 -65.53 172.552 -44.2059 -62.34 174.584 -40.6926 -127.01 173.031 -44.0393 -71.86 173.628 -40.479 -68.39 171.675 -44.7045 -70.04 172.741 -40.3919 -79.64 174.974 -40.2923 -75.76 172.606 -44.188 -64.13 173.574 -40.3981 -66.53 173.526 -40.3638 -69.24 172.716 -44.1565 -69.97 173.364 -40.3565 -69.82 174.939 -40.2623 -71.99 174.294 -41.8581 -127.91 175.023 -40.5698 -77.13 174.149 -40.0971 -77.2 173.351 -43.7946 -71.18 174.603 -40.7729 -143.05 175.043 -40.4183 -77.12 172.885 -44.1156 -68.83 174.805 -40.2367 -76.66 171.52 -44.8665 -58.7 171.77 -44.5565 -66.2 173.366 -43.1743 -66.09 173.345 -43.6252 -68.79 174.372 -41.5782 -68.76 171.749 -44.6586 -74.55 173.286 -43.8692 -69.32 174.525 -40.8555 -149.9 173.574 -40.4493 -68.58 175.03 -40.3707 -77.66 174.005 -40.0034 -76.81 172.424 -44.2811 -66.36 173.794 -40.547 -71.47 172.755 -44.12 -68.77 172.213 -44.3552 -66.2 174.661 -40.1427 -75.62 173.407 -40.3784 -64.24 173.344 -43.6728 -68.4 173.749 -40.5126 -72.74 173.195 -43.9435 -67.44 173.123 -44.0011 -67.48 174.555 -40.8113 -142.69 172.315 -44.3101 -66.1 173.511 -40.3899 -67.83 174.497 -40.1041 -72.18 174.601 -40.1229 -72.24 173.061 -40.3685 -67.94 171.914 -44.478 -67.4 173.464 -42.9263 -60.21 172.019 -44.4243 -65.8 173.256 -40.3461 -66.84 173.988 -42.175 -47.15 174.761 -40.1988 -78.57 173.615 -40.5168 -64.99 174.488 -40.8957 -154.61 173.185 -40.354 -66.53 174.444 -40.1058 -73.78 174.566 -40.7302 -133.78 173.52 -40.4265 -66.48 173.335 -43.7174 -68.44 174.023 -42.1333 -49.29 174.387 -40.1023 -75.1 172.651 -44.1454 -63.49 174.545 -40.7677 -139.53 174.515 -40.6872 -118.85 172.794 -40.3906 -73.9 174.857 -40.222 -71.08 174.326 -40.1021 -77.99 173.341 -43.5828 -65.89 174.356 -41.523 -70.37 174.91 -40.2249 -66.64 171.81 -44.5261 -66.52 173.867 -40.5584 -75.21 172.961 -40.3693 -70.35 172.932 -44.0756 -68.66 171.971 -44.4139 -62.6 174.216 -40.9249 -59.97 174.12 -40.7937 -61.34 173.567 -40.4935 -67.92 172.248 -44.3115 -63.3 173.361 -43.0548 -52.97 171.867 -44.4557 -62.4 173.475 -42.8375 -66.34 173.06 -44.001 -66.48 172.152 -44.3473 -62.68 174.07 -40.0311 -69.34 172.459 -44.2376 -61.77 174.922 -40.7617 -72.66 174.55 -40.0958 -68.33 173.675 -40.5164 -70.32 174.646 -40.0986 -65.69 173.316 -43.8307 -68.8 172.495 -44.1976 -58.34 171.561 -44.8 -60.74 173.115 -40.366 -66.22 171.599 -44.7609 -60.1 174.139 -40.9119 -38.71 174.268 -40.1017 -76.37 173.462 -40.4047 -65.38 172.587 -44.1318 -58.43 173.287 -40.3793 -68.99 173.214 -43.8601 -73.4 173.575 -40.5332 -64.01 172.897 -40.359 -71.16 174.119 -40.0589 -74.97 173.527 -40.4632 -69.01 174.729 -40.1534 -74.98 172.54 -44.164 -58.47 174.21 -40.0969 -74.8 173.307 -43.3576 -62.08 172.049 -44.3737 -61.33 175.029 -40.2932 -66.23 171.764 -44.5058 -59.9 173.861 -40.627 -65.19 173.018 -40.3863 -67.14 175.04 -40.5293 -77.85 173.234 -40.3899 -67.22 174.464 -40.075 -69.76 173.193 -43.9003 -70.96 174.598 -40.0868 -63.81 172.785 -44.0898 -67.57 174.502 -40.7388 -130.16 173.081 -43.9606 -70.52 172.362 -44.2742 -61.88 171.525 -44.8276 -57.07 172.092 -44.3366 -58.97 175.093 -40.4548 -72.44 175.988 -41.2354 -17.09 172.694 -44.1073 -62.46 172.88 -44.0656 -66.85 175.016 -40.6611 -70.02 173.728 -40.5724 -66.98 174.446 -40.7083 -131.3 173.537 -40.5183 -65.4 173.327 -43.7564 -70.77 173.467 -40.4541 -60.07 173.284 -40.4181 -64.93 172.962 -44.0309 -68.81 174.326 -41.606 -61.15 174.825 -40.192 -67.67 175.058 -40.3308 -65.17 171.918 -44.4248 -60.89 173.629 -40.5622 -61.46 173.138 -43.9543 -69.48 174.496 -40.8204 -145.03 175.086 -40.3706 -65.56 173.284 -43.3005 -51.12 173.332 -43.1292 -58.82 173.508 -40.4926 -67.52 173.083 -40.4166 -66.59 171.721 -44.6279 -67.87 173.002 -43.9973 -69.99 172.736 -44.0748 -62.02 175.126 -41.5085 -54.91 175 -40.2566 -67.19 173.939 -42.2146 -37.94 174.498 -40.7833 -140.86 172.694 -40.4392 -76.99 173.537 -40.5433 -63.15 172.318 -44.2654 -59.56 173.327 -43.2109 -57.66 173.257 -43.8211 -70.91 171.814 -44.4802 -61.72 173.389 -42.9694 -48.3 173.34 -40.4441 -60.23 173.806 -40.5856 -67.82 174.507 -40.065 -66.58 172.187 -44.3064 -60.09 174.461 -40.8486 -142.7 174.442 -40.7571 -140.67 171.698 -44.6657 -69.38 174.082 -42.0678 -59.65 171.996 -44.3828 -60.16 173.296 -43.6883 -64.08 171.867 -44.4103 -56.71 173.397 -40.4716 -53.57 172.858 -40.3922 -67.73 172.975 -40.4035 -65.6 173.166 -40.4036 -67.53 173.33 -43.0853 -54.39 172.394 -44.2362 -59.59 174.275 -41.4633 -53.05 174.969 -40.2228 -67.5 174.416 -40.0635 -68.56 174.418 -40.8851 -132.39 172.629 -44.0944 -57.19 173.496 -40.5278 -64.5 171.718 -44.5853 -63.65 172.275 -44.2706 -59.69 173.276 -43.7317 -65.67 173.782 -40.6241 -63.54 173.449 -40.5008 -59.86 172.475 -44.1487 -53.33 171.761 -44.4536 -53.41 174.35 -40.0494 -69.68 174.446 -40.8041 -142.63 173.567 -40.5652 -62.98 174.704 -40.1075 -65.43 174.278 -41.8044 -43.99 172.045 -44.322 -55.4 172.22 -44.2679 -57.63 171.619 -44.7152 -57.9 174.24 -41.8365 -44.31 173.221 -40.4368 -61.71 173.26 -43.4977 -49.36 172.522 -44.1146 -52.83 174.315 -41.6448 -68.01 174.794 -40.1548 -59.43 174.295 -40.0652 -75.44 173.278 -40.4663 -58.41 171.943 -44.3686 -55.32 172.129 -44.2979 -56.66 174.627 -40.059 -56.28 173.293 -43.7844 -70.48 173.291 -43.6471 -62.53 174.177 -40.0448 -64.94 171.414 -44.9074 -48.16 172.564 -44.0808 -52.42 172.826 -40.4192 -67.45 172.834 -44.0778 -65.84 174.243 -40.0532 -68.89 172.074 -44.2887 -53.19 173.274 -43.4461 -51.33 173.013 -40.4215 -64.57 174.383 -40.7849 -142.79 171.714 -44.5335 -58.47 173.027 -43.9629 -66.64 174.883 -40.1859 -64.65 173.336 -40.4929 -53.55 171.661 -44.6158 -60.22 173.146 -43.9098 -67.15 172.338 -44.2364 -54.86 173.255 -43.391 -47.63 172.905 -44.0388 -66.03 173.195 -43.8088 -63.55 173.507 -40.5712 -61.17 171.633 -44.6674 -55.4 172.671 -44.0508 -55.24 173.277 -43.2419 -46.3 172.42 -44.1875 -54.09 173.444 -40.5439 -60.19 173.576 -40.6159 -60.22 174.459 -40.0372 -61.11 175.115 -40.4089 -61.28 174.564 -40.0571 -58.65 171.814 -44.4226 -55.21 174.944 -40.187 -60.62 174.679 -40.0715 -58.47 175.031 -40.7029 -51.99 173.233 -43.7729 -64.63 173.093 -40.4646 -60 173.29 -43.5985 -57.29 173.391 -40.5186 -55.83 172.922 -40.399 -67.42 172.783 -44.0509 -62.8 174.768 -40.1141 -56.1 173.492 -40.6215 -56.63 175.063 -40.2493 -57.12 175.082 -40.5526 -55.51 173.308 -43.1692 -52.29 171.994 -44.3323 -53.91 173.817 -40.6692 -47 173.152 -40.4563 -59.75 173.235 -43.6777 -53.76 171.708 -44.4805 -52.45 171.661 -44.56 -56.64 174.394 -40.8353 -138.08 171.892 -44.3801 -54.02 173.337 -43.0229 -51.26 175.027 -40.2146 -56.89 173.698 -40.6618 -57.72 174.289 -41.5065 -55.32 173.212 -40.4858 -53.56 174.852 -40.1497 -54.19 171.466 -44.8857 -49.99 175.093 -40.2884 -50.4 173.03 -40.4629 -60.99 171.76 -44.4091 -48.21 172.843 -44.0219 -63.22 174.319 -41.7379 -40.56 173.239 -43.343 -39.23 172.165 -44.2597 -54.35 174.127 -40.0229 -56.82 172.296 -44.2406 -54.86 173.27 -40.5173 -52.13 173.582 -40.6689 -55.5 175.068 -40.5978 -62.13 175.121 -40.3275 -52.56 173.434 -40.5884 -55.76 172.728 -44.0282 -56.82 173.39 -40.5597 -55.46 173.291 -43.5459 -55.02 172.454 -44.0986 -47.62 171.535 -44.7504 -48.85 172.252 -44.2315 -52.48 171.941 -44.3173 -48.81 173.475 -40.6585 -52.44 171.566 -44.7205 -47.2 171.839 -44.3664 -50.28 172.761 -40.4315 -61.21 172.601 -44.0437 -50.29 171.656 -44.5086 -52.92 173.234 -43.6201 -47.32 173.429 -42.8836 -43.51 173.122 -40.4866 -56.16 171.498 -44.7886 -49.14 174.402 -40.0142 -55.61 174.248 -41.3881 -53.67 173.758 -40.6636 -57.69 176.169 -41.0384 -30.35 172.201 -44.2302 -52.51 172.499 -44.0648 -47 173.208 -43.727 -48.83 174.052 -40.9281 -47 174.298 -41.5632 -51.51 172.021 -44.2828 -49.75 173.633 -40.662 -57.11 172.109 -44.2504 -50.46 174.591 -40.0131 -44.75 174.287 -40.0194 -59.09 172.883 -40.4285 -65.19 171.468 -44.834 -47.38 172.36 -44.2039 -52.32 172.539 -44.0331 -47 174.994 -40.1886 -54.53 173.529 -40.6605 -54.09 172.909 -43.9997 -64.03 173.426 -40.6346 -52.24 172.776 -44.0106 -52.73 173.019 -40.5091 -41.08 174.86 -40.9558 -57.11 174.987 -40.7392 -60.29 171.363 -44.9281 -46.06 172.404 -44.1328 -48.44 175.089 -40.5047 -73.15 173.334 -40.5445 -50.73 174.92 -40.1397 -47 174.819 -40.1211 -49.31 175.141 -40.4379 -54.84 173.409 -42.9314 -47.81 174.044 -42.0937 -45.1 171.648 -44.4573 -47.75 173.349 -40.6045 -49.28 172.053 -44.2442 -47 173.239 -43.575 -46.63 175.139 -40.239 -37.77 172.683 -44.0043 -49.85 173.431 -40.6774 -49.26 172.629 -44.0019 -47.46 172.832 -40.452 -52.37 174.74 -40.0645 -48.69 171.702 -44.4222 -47 174.518 -40.022 -53.1 173.159 -40.4971 -52.32 173.566 -40.8186 -47.06 173.788 -40.6944 -48.17 173.17 -43.7643 -39.71 171.415 -44.8615 -39.86 175.151 -40.3676 -48.68 174.675 -40.0277 -49.07 171.89 -44.3295 -47.67 174.05 -40.7934 -39.05 173.341 -42.9864 -47.19 171.634 -44.4078 -41.83 171.786 -44.3788 -48.77 173.672 -40.6959 -53.97 172.273 -44.144 -46.96 173.541 -40.7833 -47.51 173.549 -40.8604 -47.62 172.209 -44.1415 -43.99 173.479 -40.76 -47.61 173.368 -40.7208 -47.74 173.428 -40.7188 -46.66 173.404 -40.7584 -47.5 173.549 -40.739 -50.63 173.712 -40.7835 -60.01 175.091 -40.2014 -44.9 173.297 -43.0508 -49.86 173.3 -40.6611 -48.77 172.299 -44.1993 -47.71 173.62 -40.7807 -47.42 173.537 -40.9011 -47.82 175.046 -40.1644 -40.49 173.694 -40.8677 -48.54 173.496 -40.8189 -47.39 173.145 -40.5735 -47.07 173.594 -40.9 -47.62 173.374 -40.6587 -51.13 171.604 -44.5345 -51.3 171.612 -44.5795 -54.86 172.221 -44.1868 -47.9 173.39 -40.6925 -47.2 172.15 -44.209 -47 173.263 -40.6195 -46.16 173.268 -40.5715 -47.88 173.198 -40.5964 -46.52 173.188 -40.5391 -46.81 173.748 -40.8165 -47.67 172.274 -44.0942 -40.28 173.348 -40.6888 -47.92 173.554 -40.6965 -53.3 173.624 -40.8495 -49.21 173.689 -40.825 -56.28 173.737 -40.7046 -47.73 173.686 -40.7385 -56.83 173.613 -40.7118 -53.45 173.493 -40.7015 -50.15 173.437 -40.7942 -45.17 173.43 -40.8341 -46.34 173.797 -40.7257 -50.68 173.764 -40.7524 -55.92 173.769 -40.788 -49.74 171.538 -44.5064 -44.6 171.579 -44.6193 -50.14 171.599 -44.4853 -47.66 173.2 -40.66 -43.27 172.386 -44.084 -46.93 171.837 -44.315 -44.02 173.128 -40.5473 -48.98 173.277 -43.0931 -54.23 173.252 -43.1377 -47.87 171.562 -44.6745 -47 171.524 -44.635 -43.24 171.513 -44.7008 -42.14 173.263 -43.1921 -44.88 173.312 -40.7102 -46.68 173.178 -43.121 -47.1 172.427 -44.0456 -44.15 171.728 -44.3655 -42.13 174.812 -40.0821 -45.24 173.476 -40.8805 -46.42 173.558 -40.9418 -46.42 171.553 -44.5628 -49.42 174.985 -40.8497 -34.15 173.508 -40.9228 -46.2 171.589 -44.4383 -42.26 173.836 -40.7362 -63.7 173.658 -40.8997 -46.43 172.325 -44.0672 -40.68 173.384 -40.7993 -44.93 173.333 -40.7589 -46.02 171.553 -44.4636 -40.89 172.228 -44.1126 -40.57 172.863 -43.9629 -53.21 171.967 -44.2803 -46.04 173.198 -43.1674 -43.52 173.241 -43.0607 -47.32 172.085 -44.2073 -44.65 171.783 -44.3272 -44.12 173.258 -40.6968 -45.45 171.503 -44.661 -39.09 174.867 -40.1048 -46.04 175.072 -40.6717 -41.39 172.479 -44.0179 -38.22 173.269 -40.7362 -44.88 173.13 -40.6142 -47.4 175.144 -40.4746 -27.56 172.11 -44.1737 -41.67 173.509 -40.954 -44.49 176.246 -40.9391 -35.26 173.213 -43.2166 -38.66 175.173 -40.4084 -36.49 172.16 -44.1567 -43.68 174.984 -40.1524 -43.72 171.506 -44.595 -41.79 172.957 -40.44 -53.12 173.413 -40.8682 -44.69 171.458 -44.7328 -41.02 173.076 -40.5008 -52.98 175.027 -40.7834 -32.79 173.292 -43.007 -34.69 173.373 -40.8406 -43.68 173.222 -43.265 -35.89 173.325 -40.8094 -42.3 174.086 -40.7526 -69.96 171.411 -44.8211 -37.57 171.914 -44.2776 -41.6 173.738 -40.8478 -38.04 172.567 -43.9973 -233.79 172.662 -43.964 -35.78 173.275 -40.7801 -43.72 173.414 -40.9017 -43.65 171.723 -44.313 -35.37 173.458 -40.9372 -44.02 173.22 -43.3047 -34.37 173.135 -43.1455 -44.41 173.149 -43.1928 -39.58 171.433 -44.7851 -39.75 172.368 -44.0448 -40.8 171.994 -44.2328 -42.38 175.024 -40.1184 -27 173.213 -40.7186 -43.1 171.47 -44.6272 -33.97 174.273 -41.6136 -47.51 174.213 -41.3501 -38.48 173.212 -43.0898 -44.44 171.573 -44.391 -35.63 172.514 -43.9953 -180.03 172.899 -40.4743 -42.72 171.671 -44.3772 -39.55 173.37 -40.8789 -43.05 173.323 -40.8536 -41.15 174.803 -40.0297 -27.82 173.153 -40.7069 -39.8 171.86 -44.2757 -38.75 175.005 -40.8205 -35.33 171.617 -44.3603 -35 175.151 -40.2903 -40.71 174.307 -41.6927 -44.12 173.369 -40.9111 -43.02 172.037 -44.2068 -40.37 174.139 -41.956 -54.39 173.633 -40.949 -41.34 172.728 -43.9766 -41.35 171.364 -44.8842 -37.77 173.991 -40.7434 -30.5 173.273 -40.8246 -41.36 174.165 -41.9141 -37.93 171.446 -44.6696 -33.65 174.864 -40.0567 -36.52 171.51 -44.4633 -36.42 173.482 -40.9903 -41.06 173.397 -40.9335 -43.08 171.317 -44.907 -31.34 173.789 -42.3259 -23.1 171.807 -44.2746 -36.8 173.23 -40.7574 -43.36 172.215 -44.0756 -34.2 174.738 -40.0181 -38.81 172.796 -43.9733 -43.96 172.106 -44.1313 -36.38 173.243 -43.0259 -36.08 172.167 -44.1077 -36.42 172.263 -44.048 -33.92 176.185 -40.997 -31.36 173.326 -40.8949 -41.05 173.275 -40.8696 -39.06 174.971 -40.1133 -38.83 174.232 -41.4901 -40.06 173.223 -40.7954 -42.09 171.525 -44.423 -34.59 171.374 -44.7897 -30.52 173.409 -40.9738 -40.99 172.316 -44.0177 -33.08 173.198 -43.4213 -29.96 173.192 -43.3729 -29.93 173.123 -43.1041 -38.91 173.098 -43.218 -35.79 172.001 -44.1856 -36.11 174.93 -40.0798 -36.47 172.719 -40.471 -57.31 173.203 -43.4731 -30.67 173.539 -41.0174 -37.13 171.941 -44.2416 -38.59 173.224 -40.8421 -40.53 173.164 -43.6895 -23.6 173.099 -40.7315 -34.43 173.335 -40.9435 -40.25 173.207 -43.5308 -33.69 171.482 -44.5422 -34.22 173.341 -42.9371 -26.57 171.312 -44.8638 -27.64 173.16 -43.2407 -32.48 171.387 -44.6951 -32.09 173.128 -40.5174 -54.54 173.353 -41.0017 -37.99 174.097 -42.012 -45.46 173.179 -43.33 -28.31 171.428 -44.5793 -28.21 174.224 -41.4368 -35.35 171.385 -44.7452 -31.37 172.051 -44.1641 -34.99 173.283 -40.9085 -36.8 174.253 -41.6603 -32 171.75 -44.2732 -32.48 173.23 -40.8899 -38.67 173.086 -40.6681 -36.63 174.198 -40.9684 -82.8 171.416 -44.6239 -29.26 173.518 -42.6081 -28.54 173.151 -43.0817 -34.02 173.171 -40.7575 -39.39 173.087 -43.1698 -40.44 171.667 -44.3277 -31.64 172.378 -44.0084 -35.97 171.887 -44.226 -32.29 173.077 -43.1192 -30.94 173.083 -40.5705 -23.94 173.359 -41.0458 -34.12 173.544 -41.0498 -21.68 173.292 -40.9813 -38.57 173.489 -42.7373 -40.25 171.512 -44.3726 -28.49 173.17 -40.8123 -35.88 171.556 -44.3438 -28.84 173.171 -40.8618 -31.02 173.74 -42.3692 -15.54 171.467 -44.4369 -28.83 171.359 -44.8353 -29.82 173.947 -42.1776 -17.89 175.079 -40.1207 -26.61 172.76 -43.9352 -26.28 173.985 -40.7848 -26.25 175.183 -40.3244 -28.85 173.052 -40.7622 -29.7 171.374 -44.6458 -27.8 173.247 -40.9406 -34.24 171.599 -44.3146 -28.24 172.97 -40.489 -36.43 173.175 -40.9113 -29.78 171.943 -44.191 -34.34 174.238 -41.5381 -36.35 174.954 -40.8646 -28.75 172.427 -44.0009 -30.26 171.833 -44.2362 -31.76 173.329 -41.0711 -32.75 174.263 -41.1151 -27 172.154 -44.0562 -27.77 176.114 -41.0847 -19.22 172.1 -44.083 -29.23 171.459 -44.4853 -27 175.082 -40.7089 -24.49 173.18 -43.0434 -27 173.646 -41.008 -28.52 171.685 -44.2714 -27 173.112 -40.7845 -33.25 172.338 -43.9815 -30.59 172.594 -43.9516 -65.34 173.167 -43.2872 -28.24 173.176 -43.6419 -30.41 171.363 -44.5995 -24.77 173.523 -41.0734 -22.98 173.292 -41.0297 -34.35 172.202 -44.0311 -28.44 171.633 -44.2866 -26.69 173.231 -40.9903 -34.03 173.118 -40.8334 -31.88 173.113 -40.8832 -27.55 173.331 -41.1078 -28.13 173.149 -43.4995 -22.37 171.778 -44.2212 -26.06 172.043 -44.1091 -27.73 171.981 -44.1389 -28.99 171.466 -44.3946 -26.99 172.463 -43.9693 -76.32 171.276 -44.9306 -19.77 173.396 -41.0907 -28.66 171.887 -44.1753 -27.9 173.177 -40.9583 -30.36 172.245 -44.0023 -28.1 174.861 -40.0163 -27 174.177 -41.4748 -25.13 173.174 -43.5869 -28.29 173.261 -41.081 -29.67 174.001 -40.8297 -7 172.285 -43.9722 -25.21 172.525 -43.9589 -203.56 175.117 -40.1512 -19.4 171.325 -44.6672 -25.71 173.106 -43.2655 -29.83 171.328 -44.7566 -23.92 171.306 -44.8277 -21.08 173.277 -41.1278 -22.73 175.18 -41.4948 -28.03 174.914 -40.0266 -27 172.918 -40.6786 -27 172.891 -40.6248 -20.44 173.048 -43.2868 -30.01 172.989 -43.2947 -29.49 172.924 -43.2442 -28.55 172.99 -40.7524 -27 173.402 -42.8334 -26.28 172.97 -40.7109 -27.84 173.037 -43.1964 -37 172.966 -43.265 -31.6 173.031 -40.7155 -31.87 172.963 -43.3261 -27.24 173.048 -43.2427 -34.91 173.008 -43.2634 -32.76 173.028 -43.1472 -27.72 173.206 -41.0357 -29.1 172.953 -40.6302 -28.09 173.174 -40.996 -27.4 175.001 -40.0784 -27 173.107 -43.3184 -25.34 173.362 -42.8635 -21.22 171.321 -44.7969 -22.55 173.975 -42.145 -23.1 172.996 -40.6717 -28.08 172.697 -43.9244 -22.28 173.14 -43.357 -23.12 174.98 -40.0334 -19.06 171.33 -44.7122 -26.21 173.025 -43.3345 -26.45 172.886 -43.2197 -21.95 171.408 -44.5221 -24.49 172.323 -43.9461 -22.31 173.286 -42.9684 -20.7 172.966 -43.3609 -25.7 171.915 -44.1404 -26.32 172.479 -43.9319 -32.78 172.924 -43.2924 -27.6 171.354 -44.5518 -22.2 175.064 -40.0816 -20.38 173.11 -40.9325 -24.42 172.19 -43.993 -27 175.146 -40.1845 -21.68 173.189 -41.0779 -25.14 173.084 -43.368 -23.88 172.966 -43.3869 -23.37 172.843 -40.6597 -24.02 171.458 -44.3568 -21.98 171.491 -44.3277 -22.15 171.937 -44.1042 -20.16 171.538 -44.2966 -22.33 172.641 -43.9274 -23.03 172.921 -40.738 -23.7 173.135 -43.3971 -22.21 173.013 -43.3862 -22.06 171.632 -44.2477 -21.9 172.143 -44.0112 -23 173.468 -41.0777 -27.71 172.977 -43.1765 -28.09 173.692 -40.9718 -31.57 172.984 -43.227 -32.94 173.503 -42.6673 -28.06 171.585 -44.2707 -22.37 171.311 -44.6233 -22.63 175.055 -40.7417 -30.97 173.114 -40.9754 -21.09 172.859 -43.2591 -21.2 171.42 -44.4479 -25.92 172.912 -43.3417 -24.28 171.723 -44.2333 -23.4 173.372 -42.8998 -22.57 172.968 -43.4125 -22.1 172.09 -44.0342 -21.4 172.928 -43.2018 -24.13 173.134 -41.0203 -21.77 171.285 -44.9787 -23.34 173.071 -43.413 -22.09 175.148 -40.532 -22.51 171.676 -44.2185 -20.21 171.834 -44.1861 -24.06 172.387 -43.9629 -23.19 173.016 -43.4228 -21.16 173.111 -43.5803 -16.96 174.159 -41.429 -21.9 173.288 -41.1578 -18.63 172.036 -44.0608 -20.14 176.283 -40.8213 -18.11 173.127 -43.4506 -20.66 172.215 -43.9545 -19.21 173.25 -42.9931 -25.21 171.299 -44.5774 -19.64 171.781 -44.1706 -18.83 175.119 -40.582 -22.66 172.918 -43.3882 -21.48 171.983 -44.0849 -21.02 172.84 -40.4832 -27.91 172.849 -40.7159 -20.92 173.046 -43.4537 -21.94 173.202 -41.1207 -19.47 173.131 -43.542 -19.23 171.417 -44.4119 -21.6 173.142 -43.799 -29.56 172.982 -43.4488 -21.06 171.387 -44.4735 -20.49 172.854 -43.3144 -20.51 173.004 -43.488 -21.34 174.752 -41.3642 -27.2 173.149 -41.0559 -21.29 172.784 -40.4756 -34.87 171.231 -44.9519 -14.82 172.6 -43.9023 -17.91 172.852 -43.363 -19.25 172.917 -43.4398 -20.5 171.341 -44.5039 -18.81 172.952 -43.4769 -21 171.86 -44.1382 -20.48 173.077 -43.5027 -21 173.014 -43.5319 -20.04 171.273 -44.6475 -20.23 175.038 -40.0437 -15.37 173.121 -43.6173 -15.46 172.791 -40.6891 -19.36 171.372 -44.4318 -17.79 172.27 -43.9344 -17.96 176.128 -41.047 -16.2 171.269 -44.8886 -16.51 171.275 -44.6863 -20.79 172.854 -43.4099 -18.52 172.845 -43.214 -16.18 171.287 -44.5299 -16.03 173.993 -42.096 -23.17 171.589 -44.2333 -18.17 173.026 -43.0953 -17.06 172.959 -43.5151 -21 173.068 -43.5552 -18.53 172.875 -43.1782 -15.99 172.946 -40.773 -11.76 172.424 -43.9275 -15.55 172.792 -43.2895 -15.14 171.277 -44.7272 -18.63 172.922 -40.5917 -11.82 172.899 -43.4935 -18.88 172.929 -43.1629 -16.78 172.789 -40.7269 -15.66 172.857 -43.4551 -17.69 172.918 -43.5424 -17.72 173.015 -43.5757 -18.54 172.968 -43.5582 -19.61 172.965 -43.1257 -16.96 173.316 -41.1738 -15.31 171.277 -44.7689 -17.39 173.179 -41.1624 -11.46 171.462 -44.2787 -13.89 172.786 -43.3381 -16.25 171.256 -44.8386 -12.73 171.726 -44.182 -15.66 171.326 -44.4584 -14.58 171.625 -44.206 -16.06 171.527 -44.2422 -14.59 171.666 -44.1707 -11.48 171.412 -44.3698 -17.39 171.81 -44.1363 -15.57 173.239 -41.1567 -16.57 171.28 -44.8042 -17.25 172.529 -43.9105 -16.22 173.019 -40.6269 -14.43 171.363 -44.3915 -15.2 171.239 -44.6059 -15.43 173.127 -41.0966 -15.23 172.79 -43.3855 -14.61 172.791 -43.2328 -11.21 173.204 -43.0024 -18.58 171.411 -44.3195 -11.78 174.033 -42.0517 -22.78 172.778 -40.6422 -16.62 174.118 -41.4658 -17.06 172.751 -40.5945 -10.31 172.823 -40.6031 -6.47 172.653 -43.8987 -15.93 172.734 -40.6759 -9.42 172.788 -43.4379 -14.04 171.238 -44.9137 -11.4 173.438 -42.7927 -30.73 172.744 -40.7147 -10.74 172.358 -43.9165 -14.61 172.979 -40.5839 -11.14 172.022 -44.0123 -9.03 173.213 -41.1911 -10.94 172.811 -40.7643 -9.96 172.899 -43.1324 -14.18 171.18 -44.962 -7.89 171.241 -44.5564 -12.21 172.081 -43.9865 -11.09 172.457 -43.8955 -8.11 174.199 -41.655 -13.64 172.3 -43.9102 -11.24 171.283 -44.4878 -12.41 171.979 -44.0428 -12.35 171.314 -44.4128 -12.08 173.272 -41.1828 -14.6 172.819 -43.1789 -11.65 172.693 -43.8774 -12.55 173.144 -41.1377 -11.78 173.955 -42.1225 -11.71 172.874 -40.5867 -5.68 171.883 -44.0968 -12.4 172.718 -40.6319 -8.05 171.759 -44.1317 -10.37 173.251 -41.2159 -9.97 173.127 -41.1686 -7.91 172.628 -43.8623 -9.6 171.351 -44.3487 -7.8 175.114 -40.6312 -19.66 171.313 -44.3751 -9.82 171.221 -44.6573 -12.31 171.924 -44.0599 -8.56 172.752 -43.3114 -12.08 172.75 -43.3651 -12.97 172.757 -40.7514 -9.91 171.706 -44.1337 -7.14 172.775 -40.5566 -6.02 172.494 -43.871 -3.92 173.286 -41.234 -7.18 174.214 -41.6264 -17 174.912 -40.9575 -27.6 173.459 -41.1215 -18.77 173.149 -41.1972 -6.15 172.766 -43.4804 -12.73 172.396 -43.8897 -7.42 173.086 -41.1399 -8.6 175.179 -40.4447 -27.72 171.836 -44.1 -10.25 172.554 -43.8693 -6.48 174.162 -41.2058 -13.87 172.935 -40.5591 -4.57 171.617 -44.1678 -7.01 171.222 -44.6998 -10.55 172.894 -40.5618 -3.63 171.574 -44.1972 -8.79 172.862 -40.8144 -3.19 173.092 -43.6726 -8.31 173.122 -41.2254 -0.95 173.18 -41.2307 -4.32 171.796 -44.0957 -5.78 172.84 -40.5513 -0.78 173.237 -41.2533 -2.73 171.198 -44.9188 -4.31 174.094 -41.4997 -6.37 172.139 -43.9673 -12.51 180.172 -41.6564 -2467.76 179.946 -40.8324 -2698.96 178.463 -44.8872 -2096.34 178.716 -44.8177 -1962.1 179.625 -44.9381 -2461.37 181.486 -44.9891 -1883.97 181.792 -44.8723 -1581.26 181.082 -44.9683 -1893.33 179.948 -44.8861 -1884 178.18 -44.6959 -1591.43 178.551 -44.671 -1610.52 179.444 -44.7162 -1872.29 178.85 -44.6625 -1589.38 180.194 -44.8553 -1503.61 179.143 -44.6869 -1719.2 179.204 -42.7355 -1418.28 177.869 -44.5976 -1437.21 180.742 -44.9511 -1767.38 177.477 -44.8512 -1542.69 180.433 -44.9148 -1595.72 181.274 -44.7589 -1438.66 176.714 -42.6976 -900.36 181.588 -44.73 -1307.94 177.093 -44.8872 -1473.38 178.367 -44.4874 -1313.81 179.756 -44.7062 -1581.23 178.689 -44.4846 -1329.39 178.511 -42.7551 -1201.7 177.549 -44.6077 -1366.5 176.733 -44.8716 -1350.68 180.91 -44.7219 -1382.77 179.025 -44.4725 -1328.87 177.229 -44.6796 -1271.28 179.301 -44.5472 -1422.38 178.039 -44.4543 -1227.49 176.423 -44.7983 -1230.26 180.068 -44.6949 -1292.52 178.303 -42.7346 -1157.18 180.605 -44.7727 -1369.42 180.361 -44.7209 -1351.12 179.567 -44.5245 -1323.46 176.922 -44.69 -1190.23 181.134 -44.5776 -1233.84 177.291 -44.5133 -1236.52 177.726 -44.4233 -1216.27 178.51 -44.3128 -1183.67 180.224 -42.9156 -610.03 177.431 -44.3942 -1148.54 178.806 -44.3107 -1168.38 176.63 -44.6567 -1128.35 179.053 -44.283 -1129.69 177.189 -44.3651 -1137 179.96 -42.9146 -745.87 180.581 -44.5548 -1095.52 181.385 -44.5585 -902.66 179.915 -44.4904 -1140.75 180.243 -44.5329 -1163.44 179.242 -42.9089 -797.71 179.325 -44.3533 -1136.58 179.448 -42.8539 -919.1 178.097 -42.736 -868.64 178.208 -44.2916 -1178.85 179.053 -42.886 -851.55 177.883 -44.2297 -1084.68 180.9 -44.4532 -1082.17 176.365 -44.6086 -1042.7 181.662 -44.5209 -1122.26 180.138 -44.3777 -941.85 179.663 -44.3335 -1071.05 178.374 -44.1471 -1023.04 177.566 -44.2335 -1028.27 177.314 -44.22 -969.54 178.641 -44.1596 -974.5 178.118 -44.1044 -981.09 181.106 -42.8401 -734.35 178.91 -44.1566 -931.9 176.539 -44.4554 -892.75 180.378 -44.3707 -929.28 181.187 -44.4107 -705.43 179.936 -44.2892 -891.05 178.374 -42.853 -758.48 177.883 -44.017 -788.4 179.742 -44.1765 -754.74 176.734 -44.3333 -883.16 178.275 -44.0142 -814.23 177.651 -44.0646 -847.86 176.896 -42.7733 -623.16 179.485 -44.1807 -869.83 181.456 -44.3614 -564.31 177.263 -42.7948 -620.45 180.448 -42.9396 -598.3 180.84 -42.8166 -737.28 179.185 -44.1368 -819.93 177.419 -44.0724 -847.71 180.823 -44.2868 -617.38 178.5 -43.9965 -750.44 180.637 -44.3442 -826.04 181.31 -42.9316 -538.95 177.086 -44.2069 -865.97 176.558 -44.2985 -794.59 178.766 -44.0269 -703.74 177.194 -44.0599 -576.79 178.984 -44.0356 -684.29 176.865 -44.1975 -729.89 181.548 -42.8796 -893.45 181.73 -44.3493 -802.81 177.059 -42.8456 -493.38 179.612 -44.0543 -626.17 178.231 -42.8451 -690.81 176.565 -42.9067 -433.22 181.02 -44.2824 -644.99 180.131 -43.0621 -566.21 177.889 -43.8768 -578.42 177.561 -42.9437 -358.1 176.665 -44.1871 -661.6 178.088 -43.927 -679.59 179.796 -44.0609 -550.33 179.956 -44.131 -612.65 177.498 -43.9492 -683.54 180.685 -42.9815 -538.74 177.68 -43.8869 -598.63 176.466 -44.1919 -634.19 178.305 -43.8888 -594.36 177.37 -42.9384 -380.4 177.296 -43.9108 -633.94 181.245 -44.2547 -578.83 180.193 -44.2159 -679.26 179.388 -44.0171 -601.17 180.327 -43.0665 -514.51 178.935 -43.0316 -459.55 180.463 -44.2153 -559.49 179.933 -43.0936 -543.29 180.935 -42.9787 -539.31 178.486 -43.8356 -462.2 179.588 -43.0363 -548.3 178.681 -43.89 -511.33 181.152 -43.0067 -513.64 176.727 -42.8593 -456.74 179.357 -43.0319 -523.08 181.738 -42.9817 -632 176.979 -44.0526 -629.31 181.421 -44.2249 -524.22 179.542 -43.9243 -513.13 179.753 -43.1365 -509.82 178.898 -43.9159 -538.52 181.594 -44.2345 -551.04 177.079 -43.9206 -489.03 179.734 -43.9507 -501.12 177.458 -43.822 -553.31 181.449 -43.02 -535.64 181.304 -43.0431 -513.54 181.818 -44.2083 -518.38 177.81 -43.7627 -490.82 181.607 -43.0244 -535.47 178.729 -42.9882 -489.58 176.507 -43.0056 -418.44 180.687 -44.1933 -489.43 179.144 -43.9381 -562.29 177.069 -40.2322 -313.5 180.132 -44.0606 -489.5 176.768 -44.0478 -601.36 181.494 -44.1478 -407.21 176.559 -44.0549 -549.35 180.346 -44.0862 -445.58 181.652 -44.118 -456.92 176.878 -43.9095 -555.62 181.325 -44.1314 -482.04 176.672 -42.9891 -387.41 179.939 -43.9829 -482.63 177.177 -42.9399 -376.51 177.151 -43.7963 -497.97 179.15 -43.0334 -500.02 177.629 -43.0423 -334.84 177.739 -42.9597 -322.61 177.296 -43.7779 -488.23 177.035 -42.9496 -373.58 181.476 -44.03 -467.61 180.833 -43.1147 -505.14 179.614 -43.1745 -491.06 181.037 -43.12 -493.73 180.516 -43.0899 -469.45 181.551 -43.1235 -520.06 181.223 -43.1287 -490.3 180.671 -43.1267 -474.44 179.504 -43.814 -485.01 180.241 -43.1716 -520.51 180.4 -43.1989 -513.87 178.333 -43.7606 -418.82 178.516 -42.949 -537.24 180.258 -43.97 -423.51 179.898 -43.2391 -489.39 180.085 -43.2064 -506.37 179.359 -43.8685 -508.36 181.759 -43.1308 -462.3 178.087 -43.6871 -415.48 181.391 -43.1302 -486.91 178.631 -43.7643 -428.32 177.594 -43.7152 -387.33 181.095 -44.1279 -455.61 181.564 -43.9205 -443.28 180.576 -43.2152 -428.53 180.744 -43.2272 -388.33 179.662 -43.8291 -466.9 181.147 -43.2402 -456.4 181.812 -44.0976 -477.81 179.202 -43.7814 -474.24 177.929 -43.6694 -426.69 178.091 -42.9136 -436.78 180.942 -43.255 -469.61 178.477 -43.7125 -383.98 176.464 -43.9475 -506.83 181.36 -43.8884 -425.26 179.384 -43.7232 -470.56 180.264 -43.3069 -494.22 178.291 -42.9793 -400.31 181.632 -43.2169 -401.65 176.461 -43.8245 -473.17 176.986 -43.7968 -492.67 176.648 -43.8961 -483.76 179.724 -43.2615 -475.07 180.881 -44.1692 -466.19 179.861 -43.8371 -445.31 180.103 -43.9522 -434.24 178.811 -43.7894 -446.63 179.564 -43.2718 -433.4 179.463 -43.165 -458.46 180.48 -43.3353 -484.95 180.647 -43.313 -466.57 176.803 -43.7524 -465.61 181.241 -44.0109 -406.24 181.329 -43.2385 -435.68 181.492 -43.2276 -382.25 178.922 -43.1564 -382.33 180.049 -43.3708 -435.25 177.389 -43.6936 -376.28 180.8 -43.346 -492.12 176.908 -42.9044 -411.2 176.668 -40.795 -334.54 177.765 -43.6374 -409.33 181.535 -43.8118 -401.1 181.371 -43.7658 -446.73 181.098 -43.3592 -435.08 181.01 -43.5802 -441.81 179.262 -43.1833 -436.56 179.409 -43.2848 -426.65 179.578 -43.7161 -432.88 179.237 -43.6716 -445.72 179.009 -43.7968 -449.66 181.722 -43.9992 -484.18 179.84 -43.373 -443.75 180.329 -43.888 -387.22 181.057 -43.472 -447.61 180.952 -43.3811 -377.47 181.175 -43.5678 -430.07 178.223 -43.6932 -409.48 180.365 -43.4121 -467.35 178.792 -43.1229 -387.06 176.603 -43.7363 -378.47 181.122 -43.6592 -419.53 179.668 -43.3764 -429.28 178.981 -43.2336 -407.42 179.758 -43.7192 -405.6 180.863 -43.4784 -425.04 179.089 -43.6776 -433 179.279 -43.3168 -431.82 180.564 -44.0829 -369.59 178.617 -43.098 -381.15 180.479 -43.4477 -436.55 179.326 -43.615 -433.63 181.269 -43.35 -371.77 181.283 -43.6668 -436.3 180.867 -43.5981 -422.39 180.643 -43.4346 -448.82 179.513 -43.3831 -392.22 181.497 -43.6729 -418.93 181.462 -43.3565 -413.48 181.367 -43.4488 -416.02 181.219 -43.4615 -411.59 181.347 -43.5566 -401.88 178.912 -43.6785 -416.65 178.852 -43.2322 -414.44 181.72 -43.8732 -428.03 181.597 -43.3024 -390.73 181.537 -43.5141 -437.53 176.44 -43.6984 -420.29 176.808 -42.9702 -390.81 179.482 -43.592 -411.89 179.119 -43.2958 -432.46 181.653 -43.4067 -373.4 178.739 -43.6724 -413.31 180.229 -43.453 -450.2 179.058 -43.1556 -422.77 179.671 -43.603 -391.54 181.76 -43.3002 -365.28 179.595 -43.4865 -389.12 177.463 -43.0751 -309.23 179.765 -43.4909 -410.23 180.716 -43.5635 -411.56 179.906 -43.716 -397.67 177.063 -43.7167 -464.04 179.375 -43.4012 -400.51 179.939 -43.4994 -411.22 178.948 -43.3294 -411.63 178.597 -43.6644 -388.74 180.965 -43.7035 -397.76 181.705 -43.7487 -383.68 180.379 -43.5128 -418.16 180.019 -43.8822 -427.68 180.177 -43.8572 -409.86 179.229 -43.4223 -398.19 179.462 -43.4753 -392.17 178.535 -43.2089 -402.92 181.178 -43.7777 -423.98 177.619 -43.6005 -317.48 176.444 -43.1119 -350.92 179.184 -43.5609 -399.53 179.064 -43.4357 -387.36 179.344 -43.5136 -394.36 181.707 -43.6187 -378.22 177.925 -43.0222 -353.88 181.726 -43.5099 -305.94 178.431 -43.1007 -353.11 180.093 -43.513 -398.01 178.03 -43.5996 -361.65 178.698 -43.2141 -414.77 178.766 -43.3365 -400.57 180.455 -43.9603 -334.46 180.923 -44.0628 -351.46 178.624 -43.2911 -409.77 180.777 -43.6783 -401 178.996 -43.561 -376.05 176.616 -43.1033 -338.52 179.846 -43.6112 -388.96 181.159 -43.9018 -407.96 180.538 -43.5408 -403.62 178.124 -43.0643 -367.32 178.343 -43.6432 -368.77 180.969 -43.8552 -388.87 180.826 -43.7755 -363.54 180.03 -43.7763 -392.49 180.434 -43.8533 -339.92 180.238 -43.5964 -384.87 178.493 -43.6031 -363.52 180.849 -43.9684 -310.58 180.032 -43.637 -396.01 180.426 -43.6265 -368.57 180.76 -44.0708 -287.89 178.62 -43.3839 -374.95 177.898 -43.548 -361.16 178.496 -43.318 -397.72 178.82 -43.5642 -363.31 177.265 -43.0562 -297.25 176.553 -43.6311 -239.46 177.198 -43.6706 -398.39 178.887 -43.4479 -359.18 180.186 -43.7282 -368.32 180.604 -43.6536 -382.15 180.322 -43.799 -370.24 177.76 -43.0844 -325.68 178.495 -43.4284 -351.97 178.644 -43.5643 -365.46 178.008 -43.1525 -378.1 176.7 -43.6259 -329.86 181.036 -43.9846 -363.53 177.033 -43.622 -372.44 180.48 -43.7523 -327.13 178.355 -43.23 -366.68 178.272 -43.1134 -361.11 180.667 -43.7653 -343.69 176.413 -43.5686 -396.18 176.802 -43.0871 -341.03 178.352 -43.3712 -359.73 180.327 -43.7008 -353.29 180.757 -43.8656 -258.5 180.66 -43.9674 -284.21 177.869 -43.1405 -349.28 177.476 -43.5998 -311.79 178.182 -43.5832 -348.47 178.604 -43.4704 -341.78 178.172 -43.1866 -361.62 178.367 -43.5111 -343.46 178.058 -43.2575 -328.2 178.728 -43.4604 -343.23 176.375 -43.2062 -337.68 178.056 -43.5167 -316.88 177.711 -43.5303 -355.01 178.521 -43.5155 -335.8 176.487 -40.9371 -196.17 177.092 -43.0438 -335.86 177.311 -43.5759 -292.95 177.9 -43.2401 -304.73 176.598 -43.5285 -232.97 177.714 -43.3486 -324.36 178.175 -43.4358 -336.68 176.938 -43.0141 -380.03 177.638 -43.432 -313.22 177.8 -43.438 -328.11 176.487 -43.4387 -290.37 177.982 -43.4214 -309.36 177.858 -43.3407 -297.7 180.574 -43.8621 -273.95 177.563 -43.3361 -273.94 178.199 -43.3047 -328.32 177.555 -43.5156 -294.54 178.078 -43.348 -320.98 176.541 -43.2293 -286.65 177.623 -43.1469 -316.55 177.978 -43.3205 -315.19 176.774 -43.4958 -241.92 177.776 -43.2752 -302.8 176.984 -43.128 -298.87 176.642 -43.4185 -252.99 177.146 -43.5412 -292.5 177.761 -43.1908 -315.69 176.97 -43.4998 -265.9 177.491 -43.4213 -277.08 177.408 -43.4985 -273.3 176.76 -43.3872 -259.18 176.727 -43.2071 -298.03 176.389 -43.3244 -281.28 177.655 -43.2542 -296.49 176.888 -43.2124 -273.5 176.549 -43.344 -258.46 177.476 -43.2304 -268.81 177.413 -43.3419 -246.87 176.676 -43.3143 -263.54 177.261 -43.4565 -249.39 177.034 -43.2407 -233.74 177.104 -43.4334 -236.86 177.331 -43.163 -256.72 177.375 -43.4173 -256.04 177.162 -43.1721 -242.39 176.816 -43.3053 -271.44 176.946 -43.3165 -245.17 177.306 -43.37 -255.32 176.877 -43.3998 -240.68 177.196 -43.3585 -227.82 177.288 -43.274 -227.67 176.993 -43.3988 -245.82 177.07 -43.3385 -209.89 177.15 -43.2768 -205.31 176.568 -40.7918 -224.58 176.509 -40.8599 -197 176.952 -40.0979 -54.46 176.873 -40.2315 -77.91 176.724 -40.3623 -46.24 176.904 -40.1037 -10.66 176.72 -40.3109 -31.83 176.665 -40.4763 -31.05 176.682 -40.435 -35.63 176.868 -40.1822 -44.07 176.461 -40.625 -35.21 176.514 -40.6019 -47.78 176.823 -40.2345 -53.32 176.916 -40.062 -18.07 176.68 -40.3926 -28.37 176.521 -40.555 -25.1 176.686 -40.3557 -25.57 187.101 -40.1326 -4699.55 186.556 -40.1498 -4688.6 186.007 -40.1541 -4412.5 186.952 -40.5137 -4520.07 187.241 -44.7079 -4396.12 184.36 -40.2354 -4299.03 186.757 -40.8794 -4109.72 185.436 -40.1687 -4232.76 186.388 -40.5091 -4182.15 184.876 -40.2044 -4378.29 185.831 -40.5183 -4246.47 184.211 -40.4927 -4446.41 183.619 -40.8757 -3898.88 184.63 -40.5116 -4153.84 186.718 -44.7653 -3646.97 183.857 -40.3181 -4200.2 185.225 -40.5801 -3918.83 183.916 -40.665 -4131.09 187.149 -44.3533 -3864.92 187.149 -41.2967 -3795.51 183.441 -40.5731 -3946.18 184.79 -40.8296 -3832.13 185.718 -40.8644 -3803.42 184.784 -41.1448 -2958.29 186.478 -41.2262 -3414.54 186.211 -40.8466 -3552.37 185.726 -41.1355 -3595.71 184.381 -41.2338 -3352.58 185.281 -41.0409 -3543.34 186.752 -44.4783 -3555.3 183.335 -41.0941 -3589.73 186.767 -41.5333 -3323 186.311 -44.9921 -3478.72 187.128 -44.1094 -2487.4 185.587 -41.3704 -3353.75 185.1 -41.4243 -3320.46 185.679 -45.02 -3666.9 186.029 -41.0804 -3467.53 183.99 -41.3123 -3042.6 186.304 -44.582 -3252.04 186.012 -41.3291 -2935.43 184.513 -44.8166 -2200.36 186.688 -41.82 -3159.12 183.605 -41.355 -3094.24 186.362 -41.5783 -3048.84 185.492 -41.679 -3056.14 186.761 -44.1446 -2709.39 186.365 -44.27 -3018.94 185.834 -44.6855 -2344.56 185.092 -41.7607 -2890.47 185.805 -41.886 -2808.19 185.367 -44.7602 -2789.38 185.456 -42.0238 -2689.02 184.345 -41.5892 -3085.1 185.904 -44.328 -2518.19 186.611 -42.0725 -2662.26 186.25 -41.9198 -2730.79 183.865 -41.5901 -2950.71 184.693 -41.8714 -2859.3 186.395 -42.2382 -2604.96 183.709 -41.8738 -2756.51 185.941 -42.2075 -2726.45 184.185 -44.834 -2173.83 185.586 -42.3379 -2607.62 186.731 -42.2735 -1913.06 184.052 -42.1067 -2758.64 183.885 -44.9044 -2564.99 184.48 -42.1198 -2596.76 183.707 -42.5648 -2380.24 185.448 -44.4434 -1967.21 185.173 -42.3021 -2608.36 186.613 -42.4856 -1671.76 186.246 -42.4856 -2294.09 184.697 -42.42 -2548.88 187.01 -42.0925 -2310.82 184.82 -42.6829 -1901.57 186.394 -44.025 -1908.38 185.883 -42.5728 -2287.94 185.09 -42.6124 -2133.58 185.464 -42.5802 -2167.5 184.53 -42.6965 -1722.78 186.944 -43.895 -2130.68 186.491 -42.7125 -2042.96 183.71 -42.788 -1002.25 185.077 -44.5731 -1788.47 182.528 -44.9507 -1717.39 187.14 -43.6808 -2029.21 187.042 -42.477 -1969.03 186.205 -42.7129 -1808.73 186.953 -43.4192 -1850.08 182.85 -44.9475 -1713.82 186.576 -43.8568 -1826.03 183.531 -44.8387 -1818.27 185.344 -42.8274 -1282.03 182.129 -44.8782 -1681.2 185.918 -41.6271 -2860.23 186.841 -42.7311 -1773.49 187.104 -43.2597 -1829.72 184.749 -42.8198 -1648.51 186.084 -44.0524 -1604.18 186.72 -43.6132 -1817.45 185.516 -44.1809 -1378.73 185.7 -42.8323 -1408.28 184.275 -44.6636 -1385.12 186.689 -42.9428 -1690.18 185.754 -44.0429 -1554.42 186.625 -43.323 -1700.92 186.833 -43.1815 -1780.09 187.167 -42.7702 -1920.43 185.005 -42.8643 -1471.8 183.226 -45.0311 -1886.03 184.01 -44.6728 -1273.67 187.051 -43.0063 -1811.34 184.733 -44.6142 -1332.61 186.407 -43.6561 -1730.31 186.561 -43.1049 -1648.71 186.375 -42.9192 -1602.48 186.053 -42.879 -1346.4 182.836 -42.8147 -838.37 186.375 -43.4411 -1560.72 182.421 -44.7206 -1073.65 186.2 -43.8057 -1510.32 185.268 -44.2463 -1369.08 186.281 -43.1578 -1424.97 184.481 -44.6088 -1320.67 183.84 -42.9363 -789.71 181.885 -44.6808 -1266.4 186.135 -43.5577 -1353.44 185.553 -43.0344 -921.25 185.873 -43.8618 -1342.22 185.48 -43.9705 -1360.87 185.878 -43.1003 -1022.94 182.545 -42.7974 -1082.59 182.163 -44.6229 -1120.57 182.715 -44.7584 -1173.44 186.059 -43.332 -1230.6 183.604 -42.9178 -1126.67 184.065 -42.8993 -951.41 185.887 -43.6593 -1069.7 185.648 -43.8801 -1113.44 185.255 -43.0408 -895.5 185.231 -44.0561 -1354.33 184.592 -42.8854 -1412.65 184.345 -42.9059 -1227.43 182.372 -44.5582 -1112.07 183.005 -44.7811 -1278.6 182.338 -42.8448 -708.12 185.097 -44.3552 -1136.98 185.663 -43.1935 -949.35 182.887 -42.984 -614.52 185.466 -43.8055 -983.63 185.439 -43.2047 -884.32 183.269 -44.7496 -1215.82 182.613 -44.5593 -850.43 184.991 -43.0914 -1005.09 184.778 -42.9789 -1105.88 183.729 -44.6684 -907.1 184.132 -44.5396 -799.82 183.466 -44.6467 -867.29 185.853 -43.4537 -1086.01 185.82 -43.2844 -1503.48 184.555 -43.0398 -1223.49 185.658 -43.7352 -911.66 183.377 -42.9177 -1016.33 184.836 -44.4253 -851.69 184.319 -44.4905 -380.8 185.264 -43.8717 -944.31 181.95 -44.4695 -1017.31 183.098 -42.9369 -907.41 185.053 -44.1735 -1077.28 185.177 -43.228 -932.92 182.67 -42.9742 -672.48 182.871 -44.6093 -928.55 185.623 -43.3437 -1316.78 184.559 -44.4459 -671.41 182.136 -42.7974 -999.01 184.955 -43.2529 -735.05 185.465 -43.6747 -1172.5 182.219 -44.4571 -883.68 184.745 -43.1813 -801.49 185.595 -43.5449 -1039.87 185.338 -43.3934 -1152.45 182.444 -42.9472 -601.57 185.059 -43.3802 -1020.02 185.006 -44.0389 -1151.12 184.5 -43.1973 -743.23 181.859 -42.8623 -746.53 183.001 -43.0822 -496.27 184.374 -43.0832 -755.08 185.284 -43.7169 -1053.05 185.159 -43.4968 -1232 184.011 -43.0299 -687.84 182.445 -44.4311 -868.77 185.119 -43.6224 -923.88 184.802 -43.3837 -879.97 185.324 -43.5708 -1032.89 183.106 -44.6088 -826.21 182.799 -44.4747 -688.13 182.656 -44.3937 -663.03 182.245 -42.9451 -545.31 184.191 -43.0484 -705.72 184.962 -43.5184 -1296.95 182.09 -44.3556 -645.05 184.868 -44.2503 -844.43 181.929 -44.3188 -667.84 185.081 -43.7675 -1130.87 185.046 -43.9158 -1273.02 183.702 -43.0588 -584.59 182.833 -43.1012 -440.67 182.293 -44.3109 -515.74 183.29 -44.5911 -752.72 184.664 -44.2925 -637.05 184.609 -43.3131 -951.22 184.86 -44.0969 -1086.39 182.986 -44.4738 -630.42 184.433 -43.3331 -790.84 184.907 -43.6658 -821.23 184.277 -43.2097 -630.09 182.061 -42.9411 -689.71 184.74 -43.5627 -1125 183.504 -43.0555 -615.96 184.556 -43.458 -658.53 183.135 -43.0929 -514.7 182.51 -44.315 -491.45 181.922 -43.0226 -555.36 184.852 -43.9563 -767.47 183.887 -43.1007 -568.67 182.064 -44.2244 -481.55 184.872 -43.8139 -858.89 184.696 -44.1493 -813.7 184.695 -43.7148 -663.72 184.482 -44.2942 -355.91 182.255 -44.1758 -490.51 184.262 -43.3623 -801.63 183.981 -44.5262 -551.13 182.139 -43.074 -599.81 182.865 -44.342 -459.55 183.582 -44.5396 -422.62 182.66 -43.1303 -391.73 184.687 -44.0129 -580.44 182.351 -43.0662 -470.02 184.068 -43.1522 -613.61 184.377 -43.4384 -812.92 182.463 -44.19 -384.53 181.945 -44.1297 -472.45 182.68 -44.2473 -425.66 181.982 -43.1581 -464.1 184.54 -43.617 -817.26 183.295 -43.0864 -567.87 184.54 -44.1871 -170.79 182.52 -43.0622 -509.13 182.109 -44.0825 -485.79 184.489 -43.7546 -439.65 182.138 -43.1975 -440.1 184.111 -43.2864 -594.95 181.923 -44.0358 -426.01 183.769 -43.1838 -480.39 181.9 -43.2456 -380.54 183.083 -43.1659 -350.93 184.276 -43.5904 -277.07 182.29 -43.1843 -364.29 183.064 -44.359 -438.92 184.542 -44.0724 -393.77 182.329 -44.0686 -447.01 183.398 -44.4926 -469.03 182.967 -43.2097 -295.44 182.057 -43.2746 -412 182.036 -43.9809 -479.97 182.626 -44.1373 -494.69 184.657 -43.867 -356.38 181.892 -43.932 -442.81 184.371 -44.3655 -376.51 183.609 -43.1697 -455.16 184.241 -43.487 -782.81 182.199 -43.9688 -470.01 182.766 -44.1354 -401.92 182.852 -44.215 -509.7 182.491 -43.1815 -359.19 181.953 -43.353 -327.44 182.136 -43.385 -405.94 182.522 -44.0558 -371.45 182.227 -43.2891 -302.46 182.796 -43.2216 -284.36 182.056 -43.8852 -423.65 182.017 -43.4719 -358.9 181.89 -43.8175 -382.92 181.834 -43.4348 -351.29 182.211 -43.5151 -386.69 182.412 -43.9369 -392.64 182.067 -43.5708 -353 182.231 -43.8539 -389.99 182.65 -43.2318 -327.38 181.896 -43.5667 -369.13 182.398 -43.2898 -324.61 182.689 -44.049 -385.5 181.882 -43.6957 -374.57 182.024 -43.6494 -344.63 182.249 -43.7502 -352.44 182.188 -43.6507 -416.35 182.392 -43.7989 -364.84 182.075 -43.7586 -384.54 184.523 -43.9551 -310.79 182.614 -43.9529 -391.32 183.451 -43.1838 -418.44 184.375 -43.6546 -493.75 182.82 -44.0525 -328.76 182.926 -44.1208 -336.05 182.339 -43.4025 -303.87 182.398 -43.5215 -342.7 182.324 -43.5996 -345.45 182.574 -43.8382 -232.46 182.357 -43.689 -353.51 183.198 -43.1842 -376.49 183.194 -44.4634 -489.84 182.482 -43.3663 -290.8 182.531 -43.7118 -267.21 183.804 -43.2724 -397.13 184.254 -44.3827 -376.96 184.125 -43.4033 -663.58 182.501 -43.449 -270.84 183.069 -44.1481 -191.65 182.46 -43.6143 -280.89 183.519 -44.4558 -224.89 183.006 -44.2379 -353.67 183.859 -44.561 -540.84 184.408 -44.2012 -217.47 183.687 -43.2705 -394.62 183.929 -43.2382 -409.2 182.593 -43.6176 -171.39 183.725 -44.5272 -255.04 183.547 -43.2744 -355.6 182.73 -43.3307 -148.62 184.479 -43.8612 -237.27 182.779 -43.959 -237.43 182.537 -43.5394 -266.49 184.154 -44.4195 -414.41 182.562 -43.2976 -263.68 184.333 -43.7396 -315.7 183.322 -43.2213 -345.65 182.909 -43.3225 -176.18 184.221 -43.6776 -486.27 184.422 -44.1154 -365.65 183.19 -44.3564 -318.91 184.155 -43.5797 -333.46 183.021 -43.3014 -279.58 182.608 -43.3924 -222.8 182.659 -43.6789 -154.23 184.35 -44.2654 -203.82 183.989 -43.3575 -623.78 183.141 -44.2824 -248.16 184.386 -44.0147 -326.92 182.691 -43.8888 -233.58 183.417 -43.2857 -277.37 184.221 -43.7858 -314.56 182.732 -43.4378 -143.2 182.701 -43.8281 -201.03 182.627 -43.4814 -194.85 183.113 -43.2606 -267.96 183.622 -43.3592 -315.38 182.67 -43.7587 -153.35 184.381 -43.9144 -201.99 183.124 -44.2136 -164.42 183.763 -43.3574 -472.04 184.394 -43.5427 -229.73 182.932 -44.0056 -166.04 182.642 -43.5548 -94.69 183.874 -43.3241 -474.79 184.254 -44.2998 -325.16 183.237 -43.2759 -254.36 184.36 -43.8229 -206.81 184.066 -43.6555 -217.89 182.788 -43.8661 -171.61 182.779 -43.7911 -111.47 183.441 -44.3979 -181.38 184.25 -44.1687 -54.2 183.04 -44.0668 -161.77 184.327 -44.1443 -279.18 184.323 -44.0806 -189.32 184.263 -44.2299 -127.52 184.045 -44.4507 -361.71 183.311 -44.3761 -227.45 183.928 -43.5379 -198.46 184.031 -43.5614 -212.33 183.845 -43.5121 -221.78 184.126 -43.7305 -226.92 183.803 -43.4507 -227.96 183.323 -43.2978 -356.86 182.723 -43.6112 -124.54 182.85 -43.4111 -117.79 183.397 -44.3347 -162.64 182.776 -43.7037 -75.05 183.953 -43.612 -173.01 184.097 -43.4919 -467.17 182.905 -43.9008 -151.98 183.882 -43.3973 -466.86 183.902 -43.4694 -410.06 183.489 -43.3721 -221.82 183.044 -44.0025 -139.72 183.018 -43.3654 -271.21 182.731 -43.5243 -118.33 184.108 -43.7885 -229.33 184.062 -44.3914 -223.81 183.633 -44.4488 -140.76 184.02 -43.7411 -281.48 183.968 -43.6783 -167.25 183.236 -44.3057 -186.47 183.678 -43.4456 -222.77 183.184 -43.3362 -137.86 182.829 -43.6376 -210.07 183.993 -43.4865 -275.15 184.262 -43.8772 -90.62 183.746 -43.524 -263.97 182.902 -43.6937 -133.01 183.145 -44.0986 -129.85 182.872 -43.7678 -92.91 184.237 -44.1033 -191.73 182.859 -43.8314 -163.28 183.123 -44.0303 -117.87 183.327 -44.2817 -162.44 183.843 -43.5858 -261.83 182.826 -43.5697 -142.21 183.542 -44.3914 -145.08 183.95 -44.439 -187.56 183.176 -44.1648 -138.61 183.886 -43.6604 -100.57 182.833 -43.4931 -122.86 183.738 -44.4498 -35.08 183.572 -43.4253 -285.98 183.939 -43.7862 -199.59 183.095 -43.3434 -378.02 184.032 -43.8226 -175.43 184.141 -43.8623 -162.03 182.917 -43.6139 -261.58 183.274 -43.3435 -240.79 183.431 -44.2809 -145.95 184.034 -43.4333 -331.21 183.105 -43.9663 -182.74 183.96 -43.4288 -348.34 182.961 -43.4096 -126.34 183.364 -43.3606 -162.1 183.993 -44.3887 -132 183.654 -43.5121 -233.31 182.913 -43.5414 -141.65 183.224 -44.234 -119.37 183.737 -43.5991 -262.97 182.929 -43.4745 -80.06 183.949 -43.8572 -159.77 183.22 -44.0544 -186 183.187 -43.9935 -118.64 183.013 -43.9415 -131.62 183.629 -44.3703 -95.42 183.583 -43.4881 -309.32 184.2 -43.9199 -92.7 184.043 -43.8944 -49.64 183.66 -43.5641 -83.59 184.321 -44.2016 -217.54 183.919 -43.7215 -155.52 183.239 -44.1196 -122.99 182.976 -43.5723 -111.79 182.972 -43.6623 -178.77 182.951 -43.8258 -105.35 182.965 -43.7599 -129.04 184.139 -44.0627 -197.2 184.275 -43.954 -43.35 183.48 -44.3371 -145.61 183.851 -43.8153 -63.7 183.795 -43.6593 -90.7 183.857 -43.754 -112.24 183.486 -43.4616 -75.41 184.241 -44.0251 -145.83 183.173 -43.9328 -142.35 183.544 -44.2232 -16.98 183.036 -43.417 -176.98 183.467 -44.2187 -18.78 184.198 -44.1986 -37.29 183.525 -44.2796 -117.41 183.868 -43.8879 -95.85 183.018 -43.6216 -144.28 183.051 -43.762 -23.82 182.991 -43.5207 -90.4 183.088 -43.8956 -107.33 184.127 -43.9345 -100.35 183.606 -44.252 -116.74 183.959 -44.325 -62.06 183.693 -44.4048 -81.38 183.913 -44.375 -133.49 183.028 -43.6729 -77.19 183.283 -44.039 -49.29 183.961 -43.9237 -77.01 184.147 -44.1404 -58.41 183.604 -44.1907 -41.47 183.258 -44.1748 -96.6 184.028 -44.304 -36.34 183.079 -43.3935 -202.22 184.048 -43.9659 1.94 184.024 -44.0083 -30.87 184.078 -44.0174 -97 184.138 -43.9957 -39.89 183.594 -43.5388 -165.32 182.997 -43.7103 -84.68 183.231 -43.9044 -90.51 183.525 -44.1756 -3.89 183.406 -43.4228 -81.92 183.463 -44.157 -62.31 183.301 -44.0823 -76.08 183.166 -43.8726 -108.92 183.814 -44.4322 -70.62 183.002 -43.8805 -100.26 184.169 -44.2722 -143.18 183.019 -43.7986 -61.26 183.25 -44.0121 -132.34 183.877 -44.4168 -145.71 183.246 -43.9631 -91.12 183.32 -44.2075 -123.38 183.791 -43.766 -71.65 183.673 -44.2265 -94.81 183.046 -43.5639 -98.27 183.757 -44.3939 -45.79 183.388 -44.2338 -132.4 183.969 -43.9793 -27.4 183.719 -43.6459 -103.23 183.511 -43.5338 -64.57 183.398 -43.4751 -138.7 184.202 -44.2424 -192.4 184.047 -44.0525 -154.43 183.66 -43.6172 -76.35 183.23 -43.3921 -70.99 183.883 -44.4779 -279.9 183.147 -43.3942 -159.65 183.609 -44.309 -104.59 183.299 -43.39 -79.04 183.099 -43.6069 -68.16 183.571 -44.1429 2.98 183.015 -43.4643 -123.09 183.97 -44.269 -21.21 183.555 -44.3375 -128.43 184.087 -44.0939 -174.6 183.341 -43.4122 -63.58 183.069 -43.7107 -32.73 183.569 -43.5945 -83.11 183.351 -43.4474 -86.64 183.977 -44.0242 -61.12 183.439 -43.5096 -78.49 183.668 -44.3296 -76.37 183.07 -43.5082 -120.82 183.926 -43.9989 -44.62 183.092 -43.6614 -58.29 184.195 -43.9669 -43.48 183.332 -44.1391 -79.4 183.052 -43.8391 -19.81 184.028 -44.3507 -84.79 183.125 -43.5547 -80.27 183.273 -43.8709 -65.99 183.89 -43.9534 -77.7 183.629 -44.1484 -54.53 183.308 -43.9254 -55.46 183.194 -43.4445 -67.2 183.612 -43.641 -58.22 184.067 -44.1216 -117.16 184.037 -44.0915 -142.26 183.984 -44.0701 -109.71 183.326 -43.4851 -212.07 183.217 -43.8583 -38.88 184.09 -44.3453 -110.38 184.169 -44.3333 -207.48 183.876 -44.3191 -146.58 183.681 -44.2833 -84.5 183.427 -43.5529 -69.94 183.284 -43.4381 -70.78 183.824 -43.9223 -70.97 183.373 -43.5203 -185.11 183.801 -43.8515 -42.25 183.307 -43.8336 -60.39 184.095 -44.2761 -6.31 183.896 -44.2722 -44.84 183.923 -44.0385 -83.02 184.065 -44.1651 -45.16 183.171 -43.601 -58.92 183.144 -43.6391 -60.31 183.481 -43.582 -72.78 183.668 -43.6634 -97.39 183.606 -44.1197 -26.79 183.614 -43.6787 -37.73 183.353 -43.5733 -50.94 183.507 -44.1244 -40.21 183.1 -43.4476 -81.85 183.69 -44.1756 -72.86 183.804 -44.4896 -125.74 184.048 -44.2189 2.15 184.002 -44.1217 -86.81 183.397 -44.1808 -34.38 183.92 -44.0922 -99.29 183.71 -44.3611 -88.43 183.82 -43.9634 -54.12 183.872 -44.001 -62.82 183.816 -44.0041 -54.7 183.152 -43.672 -39.59 183.362 -43.6204 -24.26 183.825 -44.3113 -80.5 184.131 -44.215 -13.9 183.245 -43.492 -60.81 183.878 -44.1376 -76.27 183.85 -44.0935 -108.21 183.988 -44.1762 -16.76 183.217 -43.5506 -54.78 183.775 -44.0285 -54.09 183.306 -43.6119 -16.32 183.27 -43.6405 -7.33 183.418 -43.6015 -50.71 183.299 -43.5322 -144.11 183.806 -44.1189 -92.33 183.158 -43.4993 -79.53 183.329 -43.8724 -48.57 183.79 -44.0746 -70.75 183.746 -44.1024 -54.97 183.712 -44.0599 -46.77 183.851 -44.0468 -90.85 183.283 -43.5743 -49.36 183.242 -43.605 -49.46 183.673 -44.1148 -52.34 184.026 -44.2578 -15.28 183.764 -43.9807 -67.86 183.207 -43.6544 -33.88 183.742 -43.8624 -44.11 183.822 -44.3616 -95.92 183.733 -43.6905 -127.3 183.077 -43.8062 -4.89 183.796 -43.8888 -74.03 183.483 -43.6275 -68.51 183.817 -44.1653 -62.29 183.113 -43.7512 -31.1 183.139 -43.7112 -4.8 183.552 -43.6527 -43.32 183.748 -43.9215 -95.42 183.734 -44.2198 -117.94 183.552 -44.1011 -11.05 183.751 -44.144 -114.57 183.922 -44.2317 0.3 183.393 -43.8949 -29.88 183.269 -43.6744 -18.36 183.688 -43.8327 -51.55 183.944 -44.1388 -48.17 183.62 -43.7112 -18.36 183.371 -43.9485 -49.92 183.714 -44.0076 -91.05 183.643 -44.076 -10.01 183.842 -43.7077 -88.94 183.184 -43.6972 -25.72 183.927 -44.1679 -21.87 183.33 -43.6603 -13.26 183.604 -44.0955 -14.82 183.88 -44.1916 -5.43 183.713 -44.3242 -97.49 183.752 -43.8033 -77.43 183.857 -44.2366 1.13 183.767 -44.1931 -150.68 183.559 -43.6989 -3.7 183.673 -43.8779 -47.89 183.658 -43.9264 -108.63 183.407 -43.6576 -70.81 183.94 -44.1984 1.58 183.231 -43.7112 -63.29 183.364 -43.8374 -21.51 183.707 -43.9626 -143.27 183.306 -43.7057 0.17 183.983 -44.2246 -7.79 183.651 -43.9817 -133.45 183.591 -43.7208 1.67 183.819 -44.2066 -14.75 183.483 -43.6788 -29.54 183.673 -43.7109 -62.35 190.756 -41.8814 -3839.55 190.451 -40.4746 -4348.49 190.413 -44.9669 -5238.7 190.321 -44.4973 -5269.99 189.754 -44.7531 -5057.33 189.813 -44.327 -5091.63 190.172 -43.9921 -4781.6 189.316 -44.3783 -4625.17 189.075 -44.751 -4751.14 187.633 -40.1009 -4552.87 189.504 -43.9958 -4551.7 189.696 -43.6234 -4482.27 188.154 -40.0621 -4570.19 188.776 -44.4151 -4494.21 190.205 -43.571 -4335.85 188.646 -40.0117 -4532.79 187.506 -40.4935 -4496.09 188.58 -44.7042 -4158.72 189.064 -39.9016 -4636.52 190.677 -40.082 -4705.24 187.988 -44.7609 -4284.29 188.044 -40.4421 -4472.75 190.337 -40.8816 -4455.67 188.893 -44.0068 -4072.83 190.077 -40.1339 -4495.19 188.337 -44.4707 -4635.03 187.552 -44.466 -4238.99 190.339 -41.7045 -4472.14 187.915 -44.2942 -4389.86 188.557 -40.3813 -4462.89 189.543 -40.0811 -4610.14 189.117 -40.3267 -4557.79 187.353 -40.879 -4297.29 189.123 -43.6175 -3454.35 187.934 -40.8328 -4358.41 190.305 -41.3015 -4331.42 189.793 -40.5276 -4286.13 187.452 -44.1985 -3616.9 189.932 -41.9067 -3928.86 189.321 -40.7184 -4191.79 188.484 -40.766 -4217.83 188.905 -40.6544 -4313.49 189.739 -41.0016 -4159.08 189.687 -41.4762 -4084.22 190.469 -42.0831 -3851.62 187.78 -41.2298 -4016.25 189.048 -41.0959 -4069.61 188.373 -41.1598 -4063.88 190.081 -42.1951 -3619.55 189.412 -41.8363 -3325.66 187.634 -41.6146 -3481.01 189.846 -43.2344 -3457.77 187.655 -44.0264 -2670.94 188.383 -44.157 -3176.1 189.336 -43.3127 -2987.28 188.236 -41.5956 -3568.5 190.488 -43.2807 -3483.74 189.667 -42.1508 -3383.19 190.41 -42.4202 -3114.97 187.965 -41.9212 -2908.54 188.836 -41.8169 -3119.57 189.21 -42.1319 -3128.64 187.99 -43.9452 -2685.39 188.414 -41.9874 -2750.81 190.262 -42.6959 -2883.85 188.687 -43.6551 -2553.9 189.942 -42.4202 -2525.26 190.51 -42.9543 -3102.82 188.978 -43.3123 -2173.59 188.182 -42.1586 -2221.74 188.794 -42.165 -2484.66 190.097 -42.9523 -2814.79 189.494 -42.4085 -2545.73 187.861 -42.2163 -2346.81 189.69 -42.9119 -2503.25 188.718 -43.3944 -2236.32 187.461 -42.3254 -1955.02 188.385 -43.8103 -2415.44 189.361 -43.0042 -2137.12 189.8 -42.6782 -2582.42 187.317 -43.9414 -2002.68 189.092 -42.3927 -2136.52 188.491 -42.2806 -2086.73 188.744 -43.169 -2321.24 188.314 -43.4467 -2395.84 187.577 -43.7314 -1919.84 188.204 -42.4069 -2115.73 187.979 -43.6247 -2117.84 189 -43.0794 -2106.73 189.334 -42.6851 -2025.13 188.78 -42.3972 -1998.83 188.439 -43.158 -2233.63 187.858 -42.5169 -1588.67 188.236 -42.692 -2013.37 187.93 -43.3577 -2103.1 187.642 -43.4292 -2146.7 187.298 -43.4566 -2002.24 188.029 -43.1119 -2069.68 188.974 -42.805 -1901.86 188.244 -42.9355 -2014.52 187.679 -43.1687 -1962.98 188.953 -42.5707 -1908.93 188.6 -42.9133 -2002.34 187.364 -43.214 -1891.38 188.597 -42.5771 -1692.3 187.501 -42.6808 -1563.9 187.708 -42.9468 -1855.17 187.41 -42.9633 -1797.87 187.924 -42.8094 -1824.09 192.84 -41.0924 -4669.01 193.454 -44.9605 -5339.64 193.308 -44.5961 -5295.09 192.821 -44.8596 -5343.61 193.195 -44.1834 -5340.7 192.122 -44.9313 -5339.07 193.135 -43.8474 -5396.35 192.68 -44.3543 -5239.7 193.806 -44.4102 -5343.41 193.914 -44.8233 -5450.15 193.152 -43.2374 -5284.27 191.5 -45.0073 -5264.95 190.983 -45.1739 -5247.22 190.936 -44.7319 -5246.98 193.14 -42.8887 -5039.69 192.229 -44.5433 -5102.57 193.686 -44.0185 -5271.2 192.61 -43.9271 -5132.96 194.268 -44.213 -5414.46 194.404 -44.6286 -5366.12 191.555 -44.4978 -5203.41 194.103 -43.8745 -5405.47 192.699 -43.4922 -5161.4 194.734 -43.9634 -5231.93 193.543 -43.6059 -5168.78 190.845 -44.2483 -4956.47 194.256 -43.5803 -5260.26 194.88 -44.4109 -5364.42 195.005 -44.8355 -5496.15 191.97 -44.0924 -4990.26 194.833 -43.602 -5232.13 193.794 -43.1639 -5158.09 192.584 -43.0363 -4987.75 195.371 -43.818 -5211.88 193.636 -42.7639 -4972.25 194.565 -43.2543 -5164.56 191.312 -44.059 -4994.35 194.356 -42.4332 -4800.11 195.444 -44.2558 -4997.61 195.031 -42.9853 -5035.07 195.249 -43.4057 -5166.25 195.423 -44.6384 -5000.59 195.476 -42.7243 -4997 195.629 -45.0175 -4997 195.821 -42.4382 -4997 195.537 -40.511 -4997 194.913 -41.8082 -5087.85 192.406 -40.8017 -4431.26 194.665 -41.3871 -5045.1 195.79 -43.1525 -4997 194.739 -42.1746 -5081.7 195.263 -42.3897 -5084.3 194.082 -42.1409 -4967.18 194.842 -42.5813 -4979.12 193.907 -41.3937 -5098.38 193.7 -40.6549 -4975.13 193.215 -40.4641 -5014.63 194.326 -41.7857 -5022.48 193.789 -41 -5001.26 193.159 -40.0661 -5050.1 195.159 -40.8094 -1768.92 194.276 -42.8053 -5084.44 193.839 -42.4639 -5059.07 193.665 -40.2857 -4886.71 195.904 -43.6223 -4997 193.682 -41.8259 -4938.05 193.546 -42.1618 -4839.45 193.295 -40.8462 -5147.24 195.572 -40.9577 -4940.61 194.837 -40.5374 -4307.71 194.942 -40.1963 -5248.02 193.228 -41.4892 -4801.56 194.296 -40.1812 -4690.16 194.244 -41.1001 -5069.75 195.344 -41.5882 -5025.95 195.478 -42.0493 -4997 194.39 -40.5804 -2912.63 196.092 -44.0964 -4997 192.555 -42.6359 -4834.35 195.906 -41.7729 -4198.3 192.354 -40.5106 -4866.04 193.414 -41.1675 -5022.71 191.993 -43.6099 -4885.1 195.224 -41.158 -4277.44 193.165 -42.4442 -4903.04 192.963 -41.9339 -4697.43 192.798 -40.6717 -4973.94 192.023 -40.1956 -4707.23 191.415 -43.7083 -4807.53 194.149 -40.7919 -4608.24 192.412 -42.2253 -4642.36 192.177 -41.8069 -4392.68 191.929 -43.1364 -4504.97 191.876 -40.6443 -4549.9 192.167 -41.0807 -4686.08 192.668 -40.2395 -4949.66 192.541 -41.4897 -4706.14 191.425 -43.3314 -4052.85 191.355 -40.2207 -4831.37 191.316 -40.6248 -4557.46 191.867 -41.4235 -4322.42 191.472 -41.0185 -4424.4 190.939 -40.4337 -4605.67 195.88 -41.3534 -2683.71 191.328 -41.3873 -4109.69 190.896 -40.7663 -4480.37 191.532 -41.7025 -4397.42 190.778 -43.7481 -4638.62 190.869 -41.1529 -3780.72 190.886 -41.578 -4182.76 191.186 -41.9378 -3759.7 191.752 -42.0664 -4096.51 192.09 -42.7902 -3830.07 190.922 -42.1098 -3412.61 191.308 -43.006 -3124.1 194.668 -40.9012 -3093.55 194.049 -40.5018 -3717.2 191.929 -42.4523 -3228.75 191.005 -43.438 -3863.53 191.354 -42.273 -3120.16 191.473 -42.6842 -2719.19 190.903 -42.3846 -2279.06 190.919 -43.1219 -2992.79 190.815 -42.7499 -3001.2 197.3 -41.029 -4997 200.488 -43.1428 -4997 197.824 -43.2633 -4997 202.464 -44.5526 -4997 198.026 -40.1357 -4997 197.741 -40.8356 -4997 202.072 -43.2205 -4997 201.213 -41.8779 -4997 196.538 -41.7108 -4451.45 200.751 -42.0553 -4997 200.488 -40.6369 -4997 200.213 -40.3116 -4997 197.197 -41.7835 -4997 200.625 -44.1979 -4997 196.161 -40.144 -4997 198.333 -44.6076 -4997 197.989 -41.187 -4997 198.914 -43.0673 -4997 197.325 -42.9638 -4997 202.79 -41.9954 -4997 197.469 -40.1604 -4997 197.708 -41.5719 -4997 202.512 -43.6157 -4997 202.605 -44.1593 -4997 200.185 -44.0746 -4787.47 199.219 -42.8461 -4997 201.721 -42.7276 -4997 201.629 -43.1843 -4997 200.887 -42.5156 -4997 201.746 -42.1398 -4997 202.001 -41.371 -4997 200.298 -43.3965 -4997 198.727 -42.8103 -4997 202.628 -43.0575 -4997 202.474 -42.4201 -4997 198.286 -44.2709 -4997 201.444 -41.3302 -4997 202.194 -44.7431 -4997 196.417 -41.2867 -4997 198.181 -43.6623 -4904.2 201.53 -43.7709 -4997 200.349 -42.7403 -4997 202.077 -43.8817 -4997 198.29 -42.6374 -4481.17 198.201 -42.2922 -4997 198.518 -44.0282 -4997 201.046 -43.0357 -4997 201.252 -42.2699 -4997 198.417 -41.9457 -4997 201.55 -40.9839 -4997 196.1 -42.7845 -4997 201.092 -40.6273 -4997 196.336 -42.5276 -4997 202.194 -41.866 -4997 197.787 -44.7325 -4997 201.077 -43.9989 -4997 202.569 -41.5859 -4997 201.873 -43.5173 -4997 200.891 -43.508 -4997 200.669 -40.2758 -4997 201.624 -41.6772 -4997 201.394 -43.4032 -4997 201.186 -44.4538 -4997 201.723 -44.7937 -4997 201.861 -44.3055 -4997 197.921 -43.9513 -4997 197.78 -44.3134 -4997 199.799 -40.11 -4997 200.638 -44.9103 -4997 197.722 -42.4242 -4469.05 199.343 -43.2569 -4997 200.646 -44.5768 -4997 202.49 -41.2392 -4997 198.228 -40.8736 -4997 198.343 -41.5181 -4997 196.966 -41.3996 -4997 200.745 -41.6022 -4997 200.867 -41.1039 -4997 200.399 -43.7863 -4997 201.177 -41.5148 -4997 196.831 -44.6765 -4997 196.227 -40.6368 -4997 196.594 -44.3925 -4997 196.694 -44.1216 -4997 196.465 -43.8307 -4997 196.459 -43.476 -4997 196.418 -43.1031 -4997 196.278 -42.1534 -4780.85 197.727 -42.0256 -4997 196.623 -40.984 -4997 198.86 -43.3725 -4237.5 199.366 -40.2407 -4997 196.74 -42.8207 -4997 198.706 -40.0168 -4997 198.443 -40.5178 -4997 202.148 -40.9425 -4997 196.884 -40.1583 -4997 199.879 -43.0536 -4997 201.143 -44.8665 -4997 199.863 -43.5106 -4997 196.058 -40.9566 -4997 197.617 -43.6095 -4997 197.153 -43.8676 -4997 197.166 -44.4209 -4997 197.872 -40.5142 -4997 201.733 -40.5661 -4997 201.949 -40.0804 -4997 198.797 -42.446 -4997 198.59 -41.222 -4997 198.731 -40.8897 -4997 199.16 -40.6382 -4997 197.283 -44.8219 -4997 201.244 -40.1974 -4997 197.077 -43.3006 -4997 198.852 -44.811 -4997 198.848 -44.4384 -4625.02 199.9 -43.8502 -4670.07 200.256 -40.9232 -4997 199.773 -41.0001 -4997 200.268 -41.2901 -4997 199.801 -41.3646 -4997 200.151 -41.739 -4997 199.235 -41.1969 -4997 199.567 -41.5896 -4997 202.393 -40.5482 -4997 198.979 -41.6502 -4997 199.86 -40.5625 -4997 199.606 -42.4896 -4997 200.23 -42.2565 -4997 199.617 -41.9761 -4997 196.161 -44.6724 -4997 199.086 -42.1028 -4997 196.758 -40.5883 -4997 198.414 -43.0544 -4972.82 197.336 -40.5502 -4997 196.733 -42.4504 -4770.2 200.244 -44.3394 -4831.85 197.238 -42.6072 -4294.85 199.37 -44.7571 -4634.29 197.812 -42.8246 -4180.41 200.019 -44.6747 -4546.2 199.356 -43.7203 -4301.9 199.747 -44.1732 -4233.24 198.411 -43.4193 -3245.82 199.104 -44.0865 -3802.08 199.416 -44.433 -4335.01 197.071 -42.1581 -2758.46 198.74 -43.7257 -3414.52 166.684 -43.815 -3707.68 166.603 -43.0274 -3791.24 166.708 -41.5024 -2721.77 166.779 -42.6866 -3286.17 166.917 -42.3758 -3287.22 166.963 -43.2561 -3548.02 167.395 -44.3904 -3597.3 167.136 -42.6285 -2781.38 167.163 -41.9155 -2539.53 167.809 -42.1716 -1906.41 167.064 -41.6058 -2107.34 167.458 -42.5929 -2264.44 167.604 -42.3334 -2178.51 166.865 -40.6992 -1657.62 167.5 -41.9121 -1968.98 167.615 -42.8084 -1594.48 168.06 -42.1227 -1544.59 167.377 -41.6848 -1640.64 167.008 -41.325 -1708.9 167.076 -40.8393 -1313.65 167.748 -42.5949 -1696.06 167.823 -41.9427 -1767.61 167.027 -41.0656 -1470.59 167.957 -42.3833 -1788.92 167.047 -40.4202 -1417.8 168.52 -42.2799 -1508.13 168.256 -42.3135 -1607.71 167.673 -41.7064 -1415.8 168.347 -42.0923 -1366.21 167.131 -40.6483 -1249.09 168.616 -42.0789 -1234 167.324 -41.4348 -1435.67 168.172 -41.8694 -1446.5 168.679 -42.4716 -1264.03 167.749 -42.997 -1311.86 169.12 -42.1152 -1207.92 167.316 -41.185 -1307.05 168.438 -42.4916 -1414.86 167.572 -41.5185 -1334.01 169.327 -42.2016 -1104.54 167.932 -41.7201 -1371.5 167.996 -42.6501 -1414.32 169.142 -42.3191 -1139.39 168.202 -42.5446 -1508.22 167.306 -40.9561 -1234.87 167.371 -40.3641 -1104.51 168.938 -42.4458 -1271.64 168.488 -41.8998 -1220.97 167.317 -40.751 -1165.12 167.633 -41.2907 -1232.01 168.594 -42.6614 -1461.75 167.855 -41.4941 -1246.85 168.406 -41.6933 -1161.14 167.364 -40.5469 -1138.52 168.873 -41.8217 -1117.06 167.572 -41.0447 -1199.36 169.074 -41.7 -1038.89 168.518 -42.8371 -1323.14 169.52 -42.2823 -1124.58 168.827 -42.6728 -1144.49 169.517 -42.0902 -1091.46 169.365 -42.4155 -1084.13 169.307 -41.7881 -1070.65 167.514 -40.0551 -1152.99 167.533 -40.8396 -1128.8 168.453 -43.0059 -1106.07 169.517 -41.8897 -1085.3 167.912 -41.2833 -1143.53 167.854 -41.1019 -1142 167.593 -40.2469 -1048.17 167.795 -40.8926 -1112.68 167.512 -40.6774 -1091.4 167.542 -40.4192 -1054.59 168.967 -42.8127 -1011.93 168.653 -41.7479 -1105.28 167.725 -40.7067 -1075.12 167.629 -40.5479 -1071.56 167.773 -40.056 -1040.43 168.106 -41.1827 -1061.47 168.103 -40.9475 -1056.03 169.286 -41.5829 -999.24 168.606 -41.5521 -1020.24 168.848 -41.625 -1018.2 169.554 -41.6703 -998.69 167.981 -40.7266 -1064.73 167.877 -40.5517 -1046.26 168.554 -41.3162 -983.16 168.374 -41.1028 -1023.85 169.046 -41.5172 -980.24 168.131 -40.5592 -1006.51 167.883 -40.2277 -961.76 167.757 -40.3951 -1007.3 168.369 -40.8987 -1005.41 168.251 -40.7366 -1012.13 168.014 -40.3848 -982.25 169.844 -42.4646 -931.17 168.033 -40.056 -891.92 168.156 -40.2221 -929.22 168.63 -41.1291 -962.59 168.584 -40.9619 -958.28 168.811 -41.4312 -973.2 168.811 -41.2346 -946.57 169.03 -41.3369 -954.19 169.25 -41.4159 -971.29 169.699 -41.823 -1022.22 169.479 -41.4652 -952.79 169.041 -41.1614 -926.62 168.84 -41.0299 -926.05 169.246 -41.2564 -941.75 168.394 -40.564 -959.42 169.416 -41.3325 -938.41 168.271 -40.3914 -961.22 169.724 -41.4908 -924.13 169.859 -41.6797 -923.3 169.075 -41.0149 -915.65 168.752 -40.8586 -923.64 169.265 -41.0917 -914.66 168.543 -40.7521 -948.32 168.999 -40.854 -909.27 169.494 -41.1889 -911.99 168.415 -40.2344 -918.32 168.813 -40.703 -920.68 169.614 -41.3364 -905.59 169.254 -40.9281 -899.71 168.649 -40.5528 -934.91 168.515 -40.3978 -931.92 169.482 -41.0005 -893.32 169.05 -40.6671 -906.85 169.237 -40.76 -896.56 168.895 -40.5362 -911.73 169.721 -41.2206 -871.12 169.85 -41.3266 -854.13 168.321 -40.0462 -862.12 169.989 -41.4769 -837.6 169.091 -40.5286 -896.91 168.622 -40.2726 -902.3 169.453 -40.8229 -890.98 169.71 -41.0821 -875.14 168.749 -40.3926 -907.13 169.252 -40.6025 -895.54 169.408 -40.6804 -893.36 168.617 -40.0999 -850.15 169.006 -40.3755 -883.14 169.917 -41.1682 -830.19 169.723 -40.8807 -860.72 169.246 -40.4433 -884.01 168.815 -40.2381 -856.2 169.035 -40.1964 -816.66 169.932 -41.0046 -813.82 170.132 -41.6258 -748.39 169.219 -40.2812 -842.79 169.482 -40.5259 -886.62 170.125 -41.2841 -748.02 169.613 -40.6879 -877.66 168.879 -40.0788 -830.54 170.194 -42.163 -783.53 170.243 -41.4546 -700.72 169.983 -40.8433 -818.16 170.13 -41.0918 -768.09 169.208 -40.1378 -805.75 169.437 -40.3383 -863.2 170.172 -41.9149 -761.31 169.08 -40.0415 -805.3 170.259 -41.7638 -687.94 169.749 -40.5431 -860.13 169.394 -40.1707 -816.19 170.112 -40.9484 -770.43 169.309 -39.9803 -757.5 170.126 -40.4432 -822.39 170.194 -40.5817 -769.14 170.249 -40.7058 -772.05 170.187 -40.8281 -786.74 170.328 -40.4726 -754.13 170.381 -41.3225 -647.65 170.339 -41.1634 -666.23 170.616 -40.0326 -760.92 169.57 -40.0436 -787.08 169.8 -40.1 -836.56 169.846 -40.262 -864.57 170.068 -40.2986 -846.61 170.274 -40.331 -798.03 170.215 -40.1912 -806.95 170.141 -40.0673 -828.33 170.332 -40.0482 -788.78 170.444 -40.3722 -735.61 170.462 -40.2204 -743.24 170.732 -40.2204 -714.31 170.885 -40.1057 -724.99 169.906 -40.4149 -857.73 170.009 -40.1545 -860.6 170.32 -40.9723 -704.16 170.63 -40.3574 -694.52 170.405 -40.6316 -716.16 170.546 -41.2282 -583.55 170.441 -41.4426 -621.47 171.109 -40.025 -705.55 170.394 -41.5941 -617.78 170.918 -40.2446 -684.67 170.529 -40.4921 -688.26 170.528 -41.0776 -564.59 171.351 -40.0389 -649 170.85 -40.358 -643.04 170.346 -41.8919 -627.14 170.563 -40.9021 -562.36 170.626 -40.6294 -660.72 170.586 -41.3648 -550.43 171.075 -40.2004 -658.61 170.703 -40.771 -567.73 170.747 -40.4942 -633.82 171.048 -40.3383 -603.99 171.268 -40.1752 -629.8 170.855 -40.6532 -600.58 170.599 -41.4969 -504.24 170.676 -41.1512 -536.44 170.998 -40.4947 -575.58 171.545 -40.0467 -549.19 170.713 -41.0323 -487.06 170.865 -40.7956 -489.39 171.205 -40.2926 -598.29 170.779 -40.9017 -426.63 171.469 -40.1733 -553.67 170.414 -42.0067 -552.41 171.06 -40.626 -522.4 170.747 -41.2715 -452.77 171.235 -40.4326 -518.57 170.461 -41.758 -535.56 170.513 -41.8905 -477.03 171.039 -40.7604 -533.57 170.949 -40.8914 -434.75 171.181 -40.5582 -504.71 170.778 -41.4181 -345.99 171.399 -40.3163 -503.04 170.472 -42.1039 -499.16 170.766 -41.5446 -312.62 170.885 -41.011 -480.39 170.627 -41.6431 -412.91 171.231 -40.6765 -412.07 170.844 -41.1463 -454.45 171.432 -40.447 -426.18 171.37 -40.5603 -403.22 171.887 -40.0344 -459.22 171.6 -40.2773 -413.11 171.657 -40.1606 -409.48 171.731 -40.0425 -451.51 169.553 -43.2531 -418.9 171.109 -40.8872 -270.36 171.744 -40.2473 -326.5 171.864 -40.1595 -378.36 170.572 -42.0132 -379.69 171.576 -40.395 -367.53 171.22 -40.8012 -305.98 172.038 -40.0695 -325.16 171.036 -40.9893 -332.44 171.75 -40.3534 -297.32 171.423 -40.6766 -277.15 171.85 -40.2758 -288.59 170.786 -41.635 -235.81 172.037 -40.181 -303.78 171.973 -40.2627 -280.24 170.631 -41.7863 -344.56 171.571 -40.5174 -327.8 170.896 -41.2472 -315.86 169.038 -43.625 -453.01 170.994 -41.0936 -350.96 171.344 -40.7526 -267.64 171.259 -40.9039 -237.98 170.759 -41.7188 -215.5 171.173 -40.9834 -219.32 169.566 -43.3386 -247.88 171.915 -40.3539 -246.34 172.213 -40.0274 -270.06 171.7 -40.4517 -281.67 172.194 -40.1566 -252.45 171.516 -40.6105 -299.3 170.662 -41.9012 -294.1 172.055 -40.3445 -204.09 171.361 -40.8348 -245.78 170.895 -41.3363 -256.46 172.114 -40.2565 -235.31 171.855 -40.4558 -210.78 171.116 -41.0685 -228.16 170.925 -41.417 -212.46 170.71 -41.9913 -204.63 171.65 -40.6113 -257.56 172.004 -40.4302 -180.97 169.498 -43.3842 -151.85 172.179 -40.3398 -180.51 171.297 -40.991 -229.36 171.742 -40.5347 -218.64 172.335 -40.0165 -228.77 171.567 -40.6866 -237.05 172.34 -40.1054 -222.14 169.253 -43.5373 -161.61 171.227 -41.0607 -204.03 170.991 -41.1953 -261.28 171.882 -40.5549 -170.59 168.87 -43.7138 -197 170.9 -41.4931 -230.69 171.631 -40.7608 -174.64 170.503 -42.5747 -313.71 170.875 -41.6808 -197 171.399 -40.9263 -239.17 172.32 -40.1939 -201.86 171.481 -40.7731 -246.91 170.765 -41.8208 -197 171.971 -40.5056 -160.49 170.813 -42.5349 -161.14 172.444 -40.0384 -190.69 171.789 -40.6179 -185.01 170.905 -41.5924 -198.19 172.132 -40.4166 -161.91 170.808 -41.9872 -192.7 171.179 -41.1222 -186.52 170.996 -41.5344 -192.25 171.703 -40.6884 -192.67 170.788 -41.9131 -197 172.454 -40.1134 -173 171.468 -40.8569 -243.86 171.015 -41.4612 -185.55 172.26 -40.2676 -187.61 168.652 -43.8995 -106.44 171.916 -40.6346 -146.58 170.77 -42.056 -197 170.948 -42.1768 -158.49 170.87 -41.7648 -192.52 168.948 -43.6599 -318.28 170.881 -41.8498 -180.52 171.005 -41.2866 -194.13 168.704 -43.8583 -180.84 171.095 -41.151 -203.46 172.423 -40.1779 -170.5 171.575 -40.836 -182.76 170.969 -41.6565 -182.66 171.041 -41.6056 -169.09 171.018 -41.3755 -181.3 171.396 -41.0065 -210.62 171.268 -41.1321 -171.29 172.096 -40.5047 -137.38 170.967 -41.7238 -176.66 171.101 -41.2355 -169.67 169.914 -43.0385 -178.34 171.338 -41.0665 -196.06 170.875 -42.0378 -178.35 171.765 -40.7589 -163.04 170.901 -41.9406 -177 171.533 -40.9091 -201.42 172.388 -40.2501 -162.91 171.191 -41.1882 -176.8 172.277 -40.3469 -152.68 171.838 -40.6933 -158 172.561 -40.026 -159.35 171.118 -41.3234 -173.95 171.389 -41.1432 -157.26 172.524 -40.0857 -165.64 170.957 -42.2931 -143.31 171.493 -40.9832 -193.19 171.694 -40.822 -164 170.973 -41.7986 -167.18 171.647 -40.8857 -152.06 171.11 -41.5251 -155.86 171.135 -41.6 -141.86 171.207 -41.2663 -168.03 171.461 -41.0635 -155.42 172.014 -40.5814 -130.84 171.294 -41.2073 -159.41 170.885 -42.4109 -152.67 171.053 -41.6838 -160.83 170.987 -41.8753 -166.58 172.238 -40.4053 -139.97 172.497 -40.2344 -140.68 171.564 -41.0277 -133.87 171.14 -41.4209 -163.8 171.488 -41.127 -142.36 169.647 -43.3803 -129.12 170.896 -42.488 -126.86 170.859 -42.6013 -105.82 170.585 -42.5534 -208.91 171.402 -41.2269 -143.25 169.112 -43.6914 -137.31 171.733 -40.8712 -145.24 171.312 -41.2859 -150.99 170.967 -42.0596 -158.01 170.229 -42.8033 -134.57 171.116 -41.6489 -144.21 171.472 -41.1794 -137.43 170.989 -42.1222 -148.96 169.984 -43.0053 -167.2 171.228 -41.3475 -159.25 171.568 -41.0895 -128.48 172.206 -40.4737 -123.81 171.625 -40.9622 -133.46 169.837 -43.1897 -144.17 169.341 -43.4898 -135.63 171.064 -41.7541 -156.31 171.711 -40.9175 -137.62 172.618 -40.0917 -147.74 170.324 -42.6806 -154.7 172.361 -40.3235 -140.91 171.01 -41.9458 -162.5 170.957 -41.9983 -165.17 172.54 -40.1565 -149.81 171.071 -41.8273 -156.4 171.559 -41.1579 -129.8 171.944 -40.6983 -126.94 171.266 -41.4214 -152.03 171.815 -40.8329 -140.27 171.337 -41.3599 -146.64 171.22 -41.4914 -142.43 170.991 -42.226 -137.31 171.222 -41.5746 -128.37 171.083 -41.8969 -155.98 171.192 -41.6442 -131.06 171.531 -41.2403 -130.96 170.888 -42.5499 -116.01 170.228 -42.8763 -129.28 170.958 -42.4377 -116.18 172.464 -40.3035 -128.39 171.155 -41.7101 -144.71 170.077 -42.9663 -154.66 170.957 -42.3709 -129.29 171.419 -41.3025 -140.07 171.674 -41.0403 -123.71 172.591 -40.2177 -131.13 171.792 -40.9022 -128.34 171.759 -40.9678 -126.55 171.667 -41.1227 -123.37 171.516 -41.3261 -130.82 171.638 -41.1915 -122.03 171.365 -41.427 -142.57 170.642 -42.6031 -178.31 171.282 -41.6413 -112.73 172.127 -40.5842 -108.11 171.799 -41.0343 -116.21 169.971 -43.0938 -124.39 171.642 -41.243 -120.85 171.312 -41.4811 -139.9 170.293 -42.7739 -117.06 172.011 -40.6568 -115.22 171.286 -41.5305 -132.78 171.717 -41.1687 -116.32 171.434 -41.3748 -137.2 172.578 -40.2892 -118.26 171.244 -41.6905 -131.84 171.899 -40.7615 -128.81 171.044 -42.2682 -103.85 172.347 -40.3982 -115.54 171.157 -41.7865 -148.64 171.396 -41.4877 -136.13 171.019 -42.1716 -131.04 171.62 -41.3005 -121.77 171.347 -41.5245 -132.66 171.715 -41.2163 -114.74 171.582 -41.3538 -123.73 171.847 -40.9371 -119.24 171.931 -40.8304 -114.69 168.72 -43.9123 -63.92 170.354 -42.7411 -116.54 171.748 -41.0832 -117.71 171.457 -41.4397 -133.33 171.157 -41.8549 -143.52 171.521 -41.3903 -128.65 171.251 -41.7549 -132.64 171.168 -41.9178 -121.05 171.033 -42.0107 -153.18 171.333 -41.5799 -127.61 171.042 -42.339 -90.62 171.708 -41.2689 -112.57 171.1 -41.9629 -139.5 171.233 -41.8215 -121.71 172.525 -40.353 -104.4 171.866 -40.9866 -113.08 170.978 -42.4905 -92.08 171.884 -40.8866 -117.32 172.298 -40.4582 -104.48 170.346 -42.795 -101.07 172.199 -40.5426 -101.06 171.047 -42.1303 -126.53 171.49 -41.5059 -120.94 171.711 -41.321 -106.94 170.301 -42.8364 -105.89 169.571 -43.4098 -80.57 171.373 -41.6462 -113.14 171.768 -41.1297 -113.03 171.409 -41.5435 -131.13 171.654 -41.3589 -110.89 171.547 -41.4478 -123.2 170.264 -42.9223 -97.81 171.984 -40.7384 -109.06 171.996 -40.7834 -104.4 171.021 -42.4057 -88.6 171.801 -41.1847 -106.18 169.518 -43.449 -78.03 171.832 -41.0904 -106.14 171.33 -41.7079 -116.99 172.018 -40.7054 -104.4 169.922 -43.1603 -115.63 171.423 -41.5991 -122.69 172.438 -40.3676 -110.39 171.602 -41.4011 -116.27 171.113 -42.0232 -118.75 171.475 -41.5651 -111.28 171.786 -41.243 -104.16 171.293 -41.8025 -101.96 169.431 -43.443 -120.64 170.946 -42.5364 -93.66 170.838 -42.6735 -86.89 171.236 -41.8807 -103.86 171.629 -41.4521 -104.64 172.614 -40.3567 -86.11 171.061 -42.2113 -104.86 171.729 -41.3696 -98.31 171.777 -41.2948 -99.97 171.933 -40.9406 -101.72 171.846 -41.1383 -101.1 170.052 -43.0509 -111.38 169.356 -43.5749 -75.76 171.586 -41.5025 -103.75 171.677 -41.4089 -101.13 171.45 -41.6528 -98.64 171.016 -42.4545 -79.14 171.502 -41.6163 -93.87 171.335 -41.7719 -87.24 171.186 -41.9826 -95.61 171.053 -42.0766 -136.5 171.55 -41.564 -94.28 169.922 -43.2295 -84.96 172.022 -40.8353 -97 172.438 -40.4241 -94.12 172.277 -40.5149 -90.88 170.13 -43.0344 -90.2 172.495 -40.3969 -94.78 171.774 -41.3378 -86.47 171.699 -41.4552 -77.32 171.419 -41.7003 -73.74 170.293 -42.8901 -99.08 171.938 -40.9939 -97 171.504 -41.6646 -60.56 172.08 -40.631 -104.28 171.865 -41.2245 -94.04 171.906 -41.0449 -97.65 171.661 -41.5 -82.68 170.372 -42.8326 -82.9 172.054 -40.7431 -97 171.562 -41.6151 -69.21 171.92 -41.1117 -91.32 171.847 -41.2737 -86.58 171.339 -41.8136 -74.3 171.244 -41.9372 -84.59 172.089 -40.6896 -97 169.997 -43.1789 -72.67 171.973 -40.8828 -101.3 171.746 -41.4181 -61.1 171.304 -41.8503 -84.77 170.522 -42.6551 -183.83 169.42 -43.5199 -74.9 171.174 -42.0368 -86.87 170.669 -42.6737 -186.69 171.629 -41.5511 -69.57 172.336 -40.4969 -91.51 170.418 -42.7382 -85.75 170.053 -43.1195 -80.1 171.904 -41.1743 -86.88 171.133 -42.0736 -97.36 169.731 -43.4067 -97.16 172.017 -40.9244 -85.04 170.928 -42.5877 -78.25 172.559 -40.4011 -86.23 171.101 -42.1165 -102.98 171.082 -42.1621 -101.99 172.377 -40.4616 -92.85 171.259 -41.9822 -66.35 171.754 -41.4597 -54.21 168.697 -43.7884 -138.92 171.808 -41.3791 -48.43 171.833 -41.3241 -81.34 170.571 -42.6116 -211.85 171.927 -41.2172 -71.85 171.98 -41.0731 -77.14 169.572 -43.4564 -53.98 171.725 -41.4965 -56.62 171.112 -42.2419 -71.83 170.35 -42.8786 -78.3 172.139 -40.7477 -55.93 170.214 -43.0386 -59.55 172.455 -40.48 -81.2 172.639 -40.4143 -83.43 172.151 -40.6457 -61.32 171.99 -41.1114 -68.6 172.083 -40.794 -66.3 171.401 -41.7509 -59.73 168.778 -43.7472 -340.04 169.488 -43.4994 -59.31 170.258 -42.9764 -70.95 171.987 -41.0236 -81.61 171.55 -41.6546 -48.3 170.405 -42.7876 -75.72 170.749 -42.6901 -179.41 171.244 -42.0309 -58.42 171.303 -41.9083 -68.84 171.125 -42.193 -74.1 168.613 -43.9361 -58.16 172.209 -40.6058 -56.49 171.196 -42.0751 -67.43 169.984 -43.2391 -51.7 171.09 -42.3898 -44.2 170.103 -43.0849 -71.17 171.914 -41.2552 -66.09 171.157 -42.1075 -77.46 171.978 -41.1496 -67.18 172.507 -40.4387 -85.03 169.058 -43.7557 -177.22 168.557 -43.9419 -86.57 171.61 -41.6015 -55.56 172.39 -40.5119 -83.43 170.325 -42.9342 -62.24 170.988 -42.5695 -46 171.11 -42.2949 -59.56 170.422 -42.8276 -60.78 171.808 -41.4384 -47.48 171.697 -41.5419 -54.95 172.336 -40.5396 -68.58 172.445 -40.535 -72.46 170.467 -42.704 -113.04 171.791 -41.4932 -44.66 171.001 -42.5282 -52.17 172.179 -40.7006 -28.81 169.434 -43.5647 -51.19 172.279 -40.5743 -54.66 170.078 -43.1752 -39.25 171.307 -41.9574 -53.11 171.124 -42.3459 -37.79 170.685 -42.7334 -101.03 171.48 -41.698 -30.56 171.142 -42.1472 -75.21 171.072 -42.439 -40.29 170.91 -42.6426 -57.97 171.887 -41.355 -47.65 172.573 -40.451 -79.61 171.974 -41.1949 -62.41 171.257 -42.0837 -37.49 172.043 -41.0536 -53.28 172.505 -40.5151 -70.43 171.361 -41.8421 -51.69 171.749 -41.531 -42.64 169.474 -43.5432 -46.16 172.03 -41.0932 -59.06 169.549 -43.4925 -44.55 169.62 -43.4421 -42.36 168.923 -43.7763 -216.4 170.597 -42.6662 -93.81 172.523 -40.4771 -77.65 169.954 -43.27 -58.38 172.04 -41.1298 -52.03 171.901 -41.3034 -54.24 170.121 -43.1295 -49.27 171.865 -41.4709 -34.29 171.876 -41.4101 -38.78 171.17 -42.2189 -45.28 171.21 -42.1247 -49.14 171.36 -41.886 -48.65 172.389 -40.5604 -61.72 172.036 -41.1755 -47.58 170.412 -42.8641 -55.34 171.394 -41.8027 -43.76 171.316 -42.0052 -36.66 172.051 -40.8806 -63.52 170.28 -43.0272 -37.48 168.772 -43.8205 -65.01 172.241 -40.7126 -36.7 172.342 -40.5807 -47 172.269 -40.6242 -47 172.305 -40.6612 -45.56 172.322 -40.6174 -47 170.397 -42.9115 -46.18 172.217 -40.7431 -31.91 171.972 -41.236 -51.31 171.835 -41.516 -34.6 171.054 -42.4958 -33.08 171.795 -41.5428 -36.25 170.9 -42.6916 -31.68 170.468 -42.7641 -54.94 171.672 -41.5904 -41.74 170.806 -42.7293 -53.85 170.626 -42.7151 -79.87 171.165 -42.2644 -36.9 171.187 -42.1744 -47.27 170.162 -43.087 -47.07 172.235 -40.6647 -47 168.099 -44.1789 -87.34 171.594 -41.6419 -41.52 170.685 -42.7862 -42.57 169.674 -43.4355 -55.31 170.385 -42.9559 -35.76 172.647 -40.4695 -57.1 170.55 -42.7362 -46.52 170.454 -42.8055 -50.44 171.313 -42.0568 -23.32 170.981 -42.6225 -27.18 167.804 -44.5382 -47 171.968 -41.2806 -44.53 170.628 -42.7659 -45.33 172.383 -40.6131 -36.89 170.048 -43.2318 -21.98 172.022 -41.2146 -46.81 171.359 -41.9351 -36.21 171.957 -41.3306 -39.48 171.74 -41.5764 -35.33 172.575 -40.5009 -58.31 168.848 -43.7921 -51.73 172.292 -40.702 -26.22 170.725 -42.8106 -34.93 172.087 -40.8439 -43.16 168.766 -43.8708 -46.14 172.049 -41.0022 -42.94 170.641 -42.8084 -35.38 170.466 -42.8426 -39.61 172.354 -40.651 -32.32 171.171 -42.3101 -26.27 169.601 -43.4864 -31.91 172.029 -41.2534 -38.78 171.707 -41.6192 -28.7 170.462 -42.8916 -30.42 171.04 -42.5487 -28.62 171.883 -41.5211 -22.73 170.75 -42.7653 -47.19 170.336 -42.9967 -27.1 171.932 -41.4328 -17.66 171.845 -41.5485 -29.24 171.359 -41.9766 -27.57 169.532 -43.5399 -26.63 171.539 -41.7016 -17.57 171.943 -41.382 -34.4 170.681 -42.8297 -31.51 171.649 -41.6435 -31.23 171.155 -42.3841 -21.53 171.814 -41.5883 -26.29 172.022 -41.3041 -31.89 169.429 -43.5967 -22.64 168.908 -43.8373 -28.93 171.925 -41.4825 -11.59 171.224 -42.203 -26.06 171.123 -42.4638 -17 171.187 -42.3545 -18.55 170.866 -42.7334 -32.99 170.447 -42.9417 -24.17 169.493 -43.5853 -19.99 170.42 -42.9938 -10.72 171.278 -42.1223 -18.7 171.303 -42.0925 -16.51 170.319 -43.0455 -18.09 170.953 -42.6756 -15.81 171.035 -42.5909 -19.27 171.209 -42.2394 -29.24 171.134 -42.4217 -19.38 168.704 -43.9559 -12.54 170.183 -43.1347 -19.08 170.537 -42.8611 -24.61 171.757 -41.6217 -26.14 170.683 -42.8628 -22.38 168.833 -43.8554 -26.56 170.778 -42.822 -20.41 169.58 -43.5187 -25.4 169.714 -43.4644 -19.21 170.626 -42.8524 -24.38 171.6 -41.6882 -22.94 170.52 -42.9193 -18.1 171.248 -42.163 -22.55 169.998 -43.2806 -24.33 168.994 -43.7692 -108.62 169.657 -43.4805 -23.18 171.717 -41.6638 -17.43 171.366 -42.0072 -17.55 170.144 -43.1755 -21.77 171.228 -42.279 -17.4 171.219 -42.3282 -17.05 170.664 -42.893 -14.94 168.056 -44.2989 -16.89 170.594 -42.9012 -15.51 171.408 -41.8576 -26.38 170.824 -42.7793 -25.01 172.01 -41.3571 -27.56 170.111 -43.2105 -14 171.801 -41.6297 -17.19 170.502 -42.9702 -8.7 168.801 -43.9076 -10.39 168.969 -43.8196 -32.01 169.952 -43.3142 -34.8 170.73 -42.8499 -19.45 171.994 -41.405 -19.75 171.509 -41.7244 -8.68 171.093 -42.5343 -10.91 171.66 -41.7005 -11.23 169.629 -43.521 -16.52 168.756 -43.9445 -12.69 170.578 -42.9469 -7.14 170.718 -42.8842 -10.36 170.367 -43.0352 -11.84 169.591 -43.5524 -7.16 170.641 -42.9268 -8.17 171.076 -42.5689 -10.48 171.035 -42.6263 -8.09 171.18 -42.41 -9.68 171.119 -42.5007 -10.67 165.596 -39.883 -3049.89 166.018 -39.8265 -3490.07 164.367 -39.8484 -3355.32 165.787 -39.6148 -3144.01 166.462 -39.7692 -3112.69 166.202 -39.5451 -3159.93 164.535 -39.5609 -2614.99 164.359 -39.0761 -2856.97 164.709 -40.0596 -2947.74 166.583 -39.4676 -2796.74 164.323 -38.8038 -2655.73 166.349 -39.2724 -3182.81 166.478 -38.9989 -2873.92 166.221 -38.8105 -2717.61 165.788 -38.9201 -3014.87 164.438 -39.3333 -2457.83 165.36 -39.6658 -2491.94 166.59 -38.7245 -2340.62 164.312 -38.5269 -2669.38 166.72 -39.1923 -2681.69 165.357 -38.9232 -1798.14 165.983 -38.5985 -2841.97 166.358 -38.5352 -2343.39 167.139 -35.577 -2659.22 167.432 -35.4343 -2768.2 166.34 -35.1331 -2689.86 166.729 -35.1609 -2762.42 167.571 -35.1773 -2734.51 167.151 -35.2347 -2789.8 166.48 -35.3873 -2511.74 165.577 -38.6564 -2324.44 166.568 -35.6108 -2167.38 167.473 -35.7269 -2584.13 166.813 -39.8383 -1855.6 166.164 -38.3177 -2515.39 167.125 -35.83 -2620.51 165.754 -38.3284 -2132.54 167.806 -35.4444 -2613.76 166.817 -35.4569 -2666.19 164.347 -38.2019 -2089.49 167.673 -35.9933 -2380.22 166.864 -38.908 -1935.24 167.847 -35.7498 -2479.72 166.805 -35.7673 -2171.22 167.84 -36.236 -2334.46 167.298 -36.0208 -2430.13 166.037 -35.1659 -1851.7 168.087 -35.9824 -2410.46 164.659 -38.8923 -2162.68 166.781 -39.6275 -2157.03 168.509 -35.387 -2477.85 168.477 -35.0928 -2117.16 168.478 -35.8684 -2382.32 168.21 -35.6144 -2503.79 168.424 -36.1714 -2407.95 168.138 -36.2685 -2416.82 168.832 -35.7743 -2413.18 168.709 -36.0487 -2362.4 169.076 -35.5186 -2416.18 167.983 -36.4706 -2021.23 164.64 -38.6401 -2287.21 169.151 -35.7988 -2397.1 169.047 -36.0827 -2319.06 164.869 -39.6993 -2433.03 168.765 -36.3468 -2323.86 164.725 -39.1298 -2271.97 166.338 -38.0663 -2425.02 168.357 -36.5191 -2309.51 168.864 -35.219 -1933.73 169.101 -36.3847 -2272.9 169.387 -35.9761 -2236.55 165.199 -39.425 -2244.3 168.99 -36.6083 -2317.91 164.804 -39.3857 -2165.77 166.694 -38.4685 -1968.56 169.42 -35.6601 -2206.1 166.914 -36.0677 -2050.3 168.704 -36.6331 -2172.2 166.001 -38.0768 -2010.98 169.338 -36.6119 -2330.15 169.136 -36.7995 -2142.53 166.513 -38.2788 -2243.89 164.656 -38.3772 -1981.26 167.492 -36.2438 -1964.38 169.668 -36.4614 -2134.41 169.933 -36.2766 -2157.5 169.686 -35.8852 -2307.43 169.881 -36.0452 -2319.74 170.237 -36.3344 -2192.16 166.154 -35.3745 -1581.19 165.373 -38.4379 -2022.71 166.179 -37.854 -2083.69 170.025 -36.5803 -2045.02 166.457 -35.8132 -1594.07 166.499 -37.8368 -2070.17 169.699 -36.8092 -2075.61 170.336 -36.5442 -2149.63 166.899 -38.6309 -1726.33 170.013 -35.8247 -1945.13 169.336 -35.4142 -1687.14 168.077 -36.671 -1678.24 167.67 -36.4672 -1759.92 168.537 -36.8227 -1741.36 170.291 -36.7637 -2071.79 170.031 -36.8577 -2062.92 165.098 -39.1652 -2266.34 165.46 -38.1713 -1961.2 164.992 -38.9262 -1860.34 170.333 -35.8823 -2097.1 169.359 -36.9148 -2056.94 168.868 -36.8872 -1902.38 164.704 -38.1547 -1564.5 170.245 -37.0146 -1982.83 169.915 -37.1099 -2092.62 170.196 -37.2612 -1976.14 169.97 -37.3542 -1904.08 169.566 -37.1215 -1893.94 167.05 -39.1232 -1712.12 165.715 -38.0638 -2092.8 164.901 -38.7316 -1835.03 165.203 -38.6984 -1572.07 166.673 -38.0339 -1896.36 165.859 -37.8564 -1913.73 166.019 -37.6517 -1747.5 166.587 -36.0117 -1535.55 168.252 -36.8301 -1598.36 169.124 -36.9755 -1741.98 167.149 -36.2831 -1991.98 170.29 -35.0756 -1895.24 169.732 -37.3507 -1795.4 164.3 -37.9104 -1639.55 164.996 -38.4858 -1685.35 170.447 -37.4234 -1874.65 166.318 -37.6367 -1792.92 169.171 -35.2961 -1497.02 166.268 -35.6311 -1541.66 170.241 -35.6849 -1586.78 169.772 -35.6287 -1819.37 166.829 -36.3472 -1523.12 165.195 -38.2765 -1897.78 170.248 -35.2884 -1464.07 165.5 -37.886 -1729.4 166.141 -37.4446 -1568.31 165.708 -37.6404 -1750.13 164.271 -36.876 -1674.87 167.825 -36.6754 -1560.17 164.277 -36.6215 -1599.87 170.157 -37.4983 -1727.49 164.273 -37.1149 -1716.99 165.197 -38.0624 -1938.73 164.95 -38.2251 -1607.99 164.298 -36.37 -1440.77 167.06 -39.6598 -1416.89 165.371 -37.6168 -1563.35 170.324 -35.4772 -1272.19 165.751 -35.0958 -1419.43 166.975 -39.4016 -1572.32 167.35 -36.4961 -1667.56 167.182 -38.9253 -1747.27 166.831 -38.2333 -2057.57 165.878 -37.4724 -1715.73 166.257 -37.2346 -1499.51 164.557 -36.9877 -1461.66 170.368 -37.6739 -1500.71 164.342 -36.1508 -1473.58 165.92 -37.2484 -1642.2 165.869 -35.3508 -1278.38 169.24 -37.1718 -1475.21 165.582 -37.3789 -1648.34 164.559 -36.7465 -1400.81 166.446 -37.4197 -1576.01 167.533 -36.7042 -1610.63 166.34 -37.053 -1425.69 167.03 -36.5439 -1468.67 168.636 -37.0188 -1398.75 165.143 -37.8212 -1556.85 165.223 -37.4021 -1477.21 164.609 -37.9678 -1434.08 169.591 -35.4219 -1133.42 166.645 -36.2091 -1733.95 170.051 -35.5708 -1318.71 164.913 -38 -1532.48 166.105 -37.0529 -1453.63 169.94 -34.9898 -1668.78 166.624 -37.6135 -1584.77 167.986 -36.868 -1343.12 164.398 -35.9916 -1451.91 166.567 -37.175 -1618.75 165.626 -37.0992 -1524.36 164.235 -37.3857 -1460.35 166.984 -38.4023 -1865.68 166.808 -37.8044 -1533.09 166.511 -36.9244 -1488.68 168.407 -37.0315 -1360.42 169.438 -37.3686 -1346.23 165.863 -37.0299 -1359.4 169.159 -35.1287 -923.28 166.252 -36.8752 -1487.69 166.676 -36.7876 -1563.52 166.905 -36.7723 -1590.61 165.03 -37.5889 -1199.1 164.957 -37.4069 -1302.39 165.049 -37.2424 -1411.9 164.821 -37.2967 -1283.77 164.859 -37.0876 -1438.84 165.336 -37.1805 -1587.46 164.567 -37.2354 -1539.96 164.658 -37.514 -1406.16 164.294 -37.6589 -1379.37 164.542 -37.7646 -1345.83 164.819 -37.7753 -1386.44 165.138 -37.066 -1366.3 166.234 -35.8457 -1379.66 169.006 -37.0961 -1482.8 164.812 -36.8485 -1340.05 169.886 -37.5459 -1458.82 166.315 -36.0031 -1377.01 170.064 -37.7477 -1088.22 167.136 -38.7289 -1605.42 167.722 -36.8946 -1270.13 166.734 -36.5896 -1358.99 167.284 -39.0657 -1385.49 167.213 -36.7752 -1289.92 167.007 -37.9935 -1788.9 165.067 -36.8967 -1477.23 170.271 -37.9045 -1027.49 166.404 -36.1953 -1439.68 165.37 -36.9277 -1463.45 166.516 -36.4117 -1485.04 164.582 -36.2543 -1125.89 165.472 -35.1722 -1139.79 166.445 -36.683 -1414.03 165.976 -36.8634 -1497.25 164.607 -36.4954 -1195.92 167.111 -38.1951 -1874.53 168.803 -37.147 -1316.7 169.612 -35.0041 -1269.5 164.333 -35.8404 -1201.37 167.456 -36.9391 -1219.31 165.689 -36.8776 -1303.11 166.746 -37.3964 -1281.59 165.963 -35.583 -1278.77 164.587 -36.0604 -1393.62 170.033 -35.2319 -1029.16 165.598 -35.3345 -1144.48 167.121 -39.9021 -1096.38 166.262 -36.3552 -1180.17 167.342 -39.6982 -1105.93 168.565 -37.2056 -1283.68 168.155 -37.0551 -1277.42 166.135 -36.6746 -1241.16 167.277 -39.2466 -1270.94 164.823 -36.645 -1161.88 167.241 -37.0045 -1103.66 164.559 -35.8927 -1378.17 164.996 -36.736 -1132.73 166.275 -36.5179 -1147.74 167.099 -37.7519 -1443.03 165.822 -36.6662 -1264.67 166.037 -35.8007 -1238.14 167.425 -39.8854 -1168.48 164.887 -36.4742 -1087.25 164.837 -36.316 -1080.75 166.001 -36.4465 -1185.98 170.101 -35.3991 -985.89 167.898 -37.0762 -1114.05 165.226 -35.1233 -1109.9 169.878 -35.4138 -1016.25 165.505 -36.687 -1158.27 166.113 -35.9663 -1185.55 164.282 -35.631 -1378.75 167.157 -38.5305 -1540.43 169.174 -37.4025 -1063.91 166.108 -36.176 -1199.51 165.22 -36.7184 -1106 167.291 -39.4772 -1215.04 168.99 -37.278 -1195.77 167.642 -37.1065 -1037.34 170.067 -37.9472 -860.74 165.63 -36.4487 -1152.99 165.059 -36.5716 -1160.33 169.593 -37.5852 -1099.4 165.807 -36.2441 -1087.44 167.385 -37.1497 -979.7 166.919 -37.5833 -1093.58 169.427 -35.2056 -709.46 164.952 -35.0918 -931.97 169.778 -37.7526 -974.28 165.694 -35.5437 -946.01 169.747 -35.219 -758.14 164.806 -36.124 -1125.5 168.07 -37.2591 -1207.57 167.412 -38.93 -1215.4 166.877 -37.1803 -1357.12 167.817 -37.287 -1287.16 165.317 -36.5147 -1266.88 168.316 -37.2332 -1185.37 164.54 -35.7244 -935.53 167.239 -38.349 -2329.26 164.722 -35.1138 -979.14 167.675 -39.8948 -1060.19 168.754 -37.3798 -1098.71 165.871 -36.0061 -1095.02 167.601 -39.7297 -1079.52 165.591 -36.2471 -1097.43 165.303 -35.3474 -1014.46 164.366 -35.4616 -1108.1 167.557 -37.3184 -1047.12 167.243 -38.0544 -1825.19 165.778 -35.7674 -1146.25 165.104 -36.3565 -1315.43 164.77 -35.9422 -1040.91 167.292 -37.3522 -909.88 165.038 -35.2747 -1122.34 169.316 -37.5593 -982.5 167.284 -37.887 -1307.97 170.406 -38.1125 -896.98 165.384 -36.3057 -1085.44 167.553 -39.5351 -942.6 165.67 -36.1121 -1147.8 167.138 -37.1779 -1136.74 164.829 -35.2323 -1056.29 167.984 -37.454 -1078.89 165.608 -35.9458 -1023.59 167.727 -37.5077 -1008.23 167.791 -39.7584 -917.02 167.364 -38.7729 -1447.66 168.226 -37.4324 -1009.89 170.156 -38.089 -837.52 165.01 -36.186 -1124.08 164.708 -35.7993 -1088.51 167.03 -37.3772 -1088.47 165.082 -35.4415 -1168.02 165.465 -35.5054 -990.59 167.459 -37.5096 -1134.9 164.549 -35.5461 -824.65 165.473 -36.1176 -1026.6 164.322 -35.2942 -1016.27 168.476 -37.4094 -1117.37 164.456 -35.0676 -1038.83 164.801 -35.4246 -1060.21 167.199 -37.5463 -1279.88 167.924 -39.8781 -891.08 165.255 -35.5649 -1190.01 168.973 -37.4421 -1034.85 165.481 -35.724 -1049.05 164.612 -35.2543 -964.68 167.551 -39.3099 -1165.5 164.534 -35.3967 -980.33 165.229 -36.1503 -1063.89 165.002 -35.6049 -1081.24 167.356 -38.4609 -1359.5 165.041 -35.9866 -1291 167.51 -39.0904 -1143.8 165.334 -35.949 -1138.72 167.809 -39.5898 -840.46 167.967 -39.6989 -872.48 165.174 -35.7698 -968.54 167.367 -37.6924 -1054.67 164.912 -35.7911 -947.09 164.752 -35.6484 -985.62 168.863 -37.569 -977.79 167.576 -37.6491 -949.77 169.884 -37.918 -857.4 168.383 -37.6143 -842.44 168.124 -37.6163 -967.64 169.086 -37.5683 -921.75 168.63 -37.5704 -874.62 169.553 -37.7982 -868.51 168.167 -39.9029 -834.5 167.927 -37.6209 -834.09 167.357 -38.1795 -1558.31 170.373 -38.328 -811.01 167.347 -38.6059 -1357.29 167.456 -38.017 -1160.64 168.099 -39.7755 -799.56 169.95 -38.0776 -786.42 167.761 -39.403 -905.52 170.196 -38.2591 -783.7 167.767 -37.7151 -846.41 168.565 -37.7168 -779.06 167.559 -37.8299 -947.13 168.239 -37.7478 -763.48 167.495 -38.3252 -1250.26 167.602 -38.9298 -901.74 168.761 -37.7187 -812.45 168.024 -39.5661 -792.66 168.985 -37.7201 -803.98 168.356 -39.8803 -818.79 167.769 -39.2591 -943.86 169.399 -37.7078 -876.29 168.188 -39.6338 -724.3 168.014 -37.8082 -833.51 168.532 -39.9156 -901.55 169.683 -37.9216 -791.66 167.791 -37.8682 -924.62 169.203 -37.7167 -816.38 169.758 -38.0614 -699.77 168.645 -37.8717 -646.66 168.426 -37.8008 -702.17 167.697 -39.1579 -853.92 167.974 -39.4389 -915.25 168.275 -39.7683 -754 168.272 -37.8945 -682.03 168.757 -39.9327 -827.77 169.996 -38.2325 -688.14 170.199 -38.4043 -682.44 167.568 -38.798 -970.94 168.88 -37.8642 -682.88 168.948 -39.9499 -793.45 168.465 -39.7698 -827.68 170.215 -39.604 -764.73 170.384 -39.4788 -752.73 167.583 -38.1587 -1193.14 169.101 -39.8993 -731.29 169.229 -39.8348 -700.93 169.361 -39.8249 -695.6 169.526 -39.8776 -723.99 169.667 -39.753 -693.58 169.843 -39.7551 -741.26 169.787 -39.6262 -668.72 170.002 -39.6474 -720.02 170.407 -39.1036 -676.45 170.439 -38.972 -681.66 170.39 -39.2751 -694.82 170.392 -38.8529 -669.18 170.351 -38.7036 -659.1 170.32 -38.5219 -685.72 170.197 -39.7555 -815.24 170.173 -39.9281 -825.43 169.993 -39.8321 -786.78 170.107 -39.4788 -693.34 170.203 -39.3424 -696.59 170.176 -39.167 -635.42 170.076 -39.035 -608.96 170.251 -38.9821 -640.2 167.691 -38.0021 -984.45 169.805 -38.2078 -631.82 170.026 -38.3914 -614.03 170.084 -38.537 -598.78 170.164 -38.6773 -609.99 170.214 -38.8201 -627.19 170.39 -39.6759 -832.62 170.413 -39.8635 -804.97 168.382 -39.6618 -685.06 168.672 -39.7751 -712.33 167.532 -38.4923 -1105.33 169.472 -39.723 -664.27 168.917 -39.7977 -698.4 167.683 -38.2656 -1389.37 167.763 -38.9983 -729.28 169.837 -38.3573 -577.19 167.55 -38.6463 -1062.3 168.181 -39.4693 -709.5 167.946 -39.2895 -811.4 169.109 -39.7723 -679.24 169.6 -39.609 -643.41 168.623 -38.0123 -540.74 170.058 -38.7914 -597.37 168.576 -39.6235 -634.09 167.916 -37.9939 -751.46 169.263 -39.6974 -647.24 169.877 -39.4886 -648.36 169.092 -37.8669 -635.14 169.965 -39.3073 -616.46 169.605 -38.0447 -640.23 167.816 -38.1627 -971.95 167.757 -38.8325 -940 169.705 -39.5085 -629.37 169.965 -38.6893 -579.11 168.147 -39.3211 -794.51 169.852 -38.5374 -559.8 168.406 -39.5137 -629.24 167.911 -39.1304 -603.44 168.138 -38.0061 -751.62 169.947 -39.1173 -617.02 170.07 -38.9134 -603.93 168.471 -37.9562 -571 168.799 -39.6389 -632.29 167.694 -38.3892 -2536.64 169.497 -37.9575 -640.22 167.741 -38.6867 -956.6 169.032 -39.6279 -618.85 169.949 -38.9877 -585.07 169.608 -38.1827 -584.26 169.412 -39.5721 -617.55 168.123 -39.1763 -690.13 167.967 -38.9898 -620.58 169.545 -39.464 -600.37 168.6 -39.4887 -596.26 169.322 -37.868 -615.89 168.357 -39.3499 -610.77 167.721 -38.5364 -1079.86 169.706 -39.3555 -610.75 169.212 -39.5243 -595.08 167.939 -38.87 -814.56 169.683 -38.3078 -557.89 169.757 -39.1889 -579.69 169.893 -38.8569 -667.67 168.035 -38.1426 -679.23 168.114 -39.0367 -587.18 168.323 -39.2085 -587.21 168.719 -39.5323 -599.47 168.782 -38.0048 -573.33 169.662 -38.4447 -536.09 167.812 -38.3036 -2170 167.928 -38.731 -951.14 169.47 -38.0923 -585.38 169.046 -39.4702 -576.44 169.354 -39.4214 -574.41 169.769 -39.0115 -565.82 168.338 -38.0447 -673.5 168.561 -39.375 -580.84 169.491 -39.3179 -575.33 169.766 -38.7256 -551.05 167.914 -38.5825 -1142.69 168.879 -39.5001 -585.4 169.596 -39.229 -576.86 168.112 -38.9058 -749.11 168.297 -39.0719 -572.6 167.898 -38.4215 -1050.66 168.509 -38.0939 -471.78 169.626 -38.6131 -532.05 168.681 -38.136 -518.62 169.16 -39.375 -555.79 169.708 -38.8678 -542.81 169.442 -38.2054 -556.22 168.739 -39.4165 -579.44 168.975 -38.0043 -559.56 168.53 -39.23 -555.83 168.107 -38.7741 -991.63 168.941 -39.3424 -553.71 167.963 -38.2777 -886.82 169.501 -38.3346 -532.25 168.282 -38.9376 -679.48 169.303 -39.2749 -548.38 169.589 -39.101 -560.35 169.437 -39.1816 -553.96 168.877 -38.1399 -526.5 168.104 -38.6329 -934.69 168.49 -39.0929 -540.57 168.226 -38.1475 -672.02 169.354 -38.0186 -556.68 169.565 -38.9525 -537.58 169.476 -38.5074 -518.57 168.062 -38.3673 -1007.98 169.11 -39.2271 -532.23 168.084 -38.4868 -891.56 168.733 -39.2708 -549.82 169.321 -38.1356 -547.64 169.552 -38.7889 -520.64 168.269 -38.8133 -751.18 169.411 -39.0422 -540.17 168.451 -38.9652 -586.46 168.918 -39.1758 -522.56 169.264 -39.1317 -535.79 169.436 -38.6604 -511.94 168.273 -38.686 -761.22 168.522 -38.2481 -466.28 169.315 -38.2733 -546.86 168.716 -39.105 -518.42 169.394 -38.8954 -519.5 168.431 -38.8428 -605.81 169.318 -38.4209 -519.38 168.296 -38.5299 -682.69 168.139 -38.2646 -770.72 169.086 -39.0799 -514.37 168.223 -38.3846 -834.17 169.243 -38.9858 -526.27 168.632 -38.974 -526.74 168.404 -38.7403 -617.3 169.179 -38.0309 -511.27 169.298 -38.5774 -495.09 168.387 -38.161 -513.93 169.375 -38.7736 -504.75 168.923 -39.0297 -498.4 168.573 -38.8723 -539.65 169.166 -38.1932 -526.5 168.768 -38.3155 -493.9 168.454 -38.6281 -551.38 169.218 -38.8293 -507.82 168.793 -38.9693 -501.93 169.288 -38.7023 -495.16 168.412 -38.3848 -592.42 169.077 -38.9418 -499.69 169.04 -38.1241 -531.78 168.321 -38.2659 -564.77 169.157 -38.3419 -498.47 168.589 -38.7379 -515.95 168.513 -38.4944 -519.77 169.141 -38.4976 -495.28 169.055 -38.8264 -491.89 168.757 -38.8438 -506.5 169.002 -38.2521 -497.59 169.096 -38.6801 -487.07 168.578 -38.3798 -512.36 168.665 -38.4536 -491.91 168.811 -38.4965 -483.1 168.831 -38.6681 -499.7 168.65 -38.58 -485.17 168.98 -38.4101 -486.9 168.974 -38.5518 -483.24 168.934 -38.7845 -504.25 168.927 -38.8997 -494.26 158.664 -48.4238 -4865.38 158.758 -48.0718 -4552.72 158.623 -45.5277 -4846.42 158.389 -45.1742 -5001.02 158.976 -45.1775 -4986.65 158.831 -45.9157 -5053 158.81 -46.2931 -4987.21 157.399 -49.097 -4818.82 158.118 -49.1203 -4879.69 157.239 -49.584 -4482.45 157.771 -49.4092 -4965.1 158.498 -47.8422 -4752.32 158.271 -49.4789 -5077.12 158.314 -45.833 -4815.85 157.802 -45.1622 -4904.05 157.451 -45.5257 -4956.86 158.661 -48.8304 -4874.43 157.238 -48.725 -4647.74 157.927 -48.7012 -4854.94 157.362 -48.416 -4890.53 158.884 -46.9822 -4827.35 157.448 -48.1018 -5086.47 158.071 -48.1987 -4568.27 158.46 -46.6295 -4726.59 158.541 -47.4283 -4787.65 157.214 -47.917 -4847.16 158.308 -47.0611 -4670.99 158.335 -46.1892 -5116.93 157.848 -49.7437 -4851.58 158.055 -45.5312 -4803.47 157.767 -45.9585 -4986.53 158.73 -49.2112 -5020.48 157.842 -47.7761 -4982.11 157.816 -46.4401 -4659.61 157.252 -46.2783 -4766.65 158.363 -49.7888 -5041.33 157.126 -45.8817 -4540.38 158.804 -49.5811 -4662.19 157.272 -47.5967 -4510.53 157.181 -45.1008 -4616.26 157.272 -46.6863 -4814.17 157.834 -47.3172 -4816.97 157.822 -46.8869 -4558.39 157.217 -47.1542 -4601.02 162.419 -48.4927 -2855.01 163.931 -49.1081 -5432.62 164 -49.372 -3320.58 163.769 -49.6114 -4239.85 161.061 -47.4629 -4899.14 159.727 -46.1717 -4978.88 159.985 -45.3157 -5005.5 161.254 -46.9706 -4412.05 160.484 -45.2538 -4949.26 159.533 -45.2096 -4939.7 159.655 -45.5193 -4907.14 159.272 -48.194 -4940.02 159.807 -48.372 -5084.31 159.799 -48.0218 -4456.44 160.115 -46.9661 -5005.99 159.206 -46.1605 -4934.8 159.24 -46.5364 -4932.03 159.172 -45.5345 -4952.5 160.524 -47.2088 -4860.97 160.27 -46.154 -4971.03 160.697 -46.3494 -4945.03 161.14 -46.5415 -4934.53 159.449 -45.8474 -5011.14 160.135 -45.7222 -4958.59 160.737 -45.9242 -4831.07 162.78 -45.1927 -4798.77 159.821 -47.3065 -4903.62 159.552 -46.9388 -4914.31 160.982 -47.9204 -4838.98 160.352 -48.15 -4517.69 160.726 -45.5497 -4849.12 160.034 -46.5616 -4992.23 159.25 -48.9526 -4392.87 162.033 -49.8226 -4533.5 163.168 -45.4751 -4682.75 161.347 -46.0967 -4814.52 162.194 -45.2396 -4808.15 160.258 -47.6844 -4454.39 160.628 -46.7664 -5046.59 159.272 -47.722 -4845.96 163.424 -45.0975 -4702.92 161.742 -47.2823 -4752.17 159.212 -47.2798 -4861.14 159.248 -48.5843 -4757.71 161.218 -45.6199 -4770.99 161.055 -45.2283 -4882.83 161.772 -46.5105 -4318.24 163.951 -45.1406 -4741.1 161.622 -45.2413 -4859.21 160.339 -48.5494 -4551.04 161.799 -45.6451 -4717.96 159.778 -48.7498 -4666.21 162.039 -46.043 -4685.77 159.707 -49.0639 -4664.75 162.498 -45.6362 -4763.28 161.949 -49.5065 -4250.58 162.276 -46.3165 -4414.3 159.305 -49.2992 -4649.7 162.209 -47.877 -4428.99 163.042 -45.8239 -4749.76 160.294 -48.9781 -4536.83 161.62 -47.7018 -4528.15 161.925 -46.9129 -4489.1 160.925 -48.3522 -4403.75 163.541 -48.8256 -4124.17 163.208 -49.4974 -4097.87 162.116 -47.5079 -4395.91 159.868 -49.3464 -4475.2 159.38 -49.654 -4676.22 159.972 -49.6919 -4308.06 160.803 -48.709 -4440.68 162.65 -46.3332 -4336 159.52 -49.9429 -4696.7 163.855 -45.9665 -4428.41 162.567 -46.0483 -4568.53 162.614 -47.5281 -4325.31 163.188 -47.5879 -4268.87 162.506 -48.8591 -4079.39 160.474 -49.3805 -4420.15 162.815 -47.8897 -4223.8 163.003 -47.2426 -4355.13 162.232 -49.1867 -4019.45 160.579 -49.758 -4284.14 161.368 -48.6122 -4390.41 162.38 -47.1424 -4467.56 162.944 -46.8869 -4252.53 161.888 -48.4768 -4366.32 163.093 -46.5052 -4308.29 162.14 -48.2346 -4261.55 162.943 -48.2526 -4416.75 163.055 -46.1517 -4464.84 162.52 -49.4978 -4399.96 162.93 -49.0972 -4067.79 163.519 -47.3059 -4325.28 161.582 -49.3079 -4459.22 161.323 -49.749 -4033.88 162.403 -46.6615 -4554.41 161.069 -49.05 -4208.09 162.983 -48.6482 -4033.98 161.598 -48.1726 -4456.09 161.882 -48.8578 -4240.46 163.461 -48.3929 -3944.03 160.999 -49.4494 -4176.21 162.689 -49.8469 -4317.65 164.366 -48.9699 -3144.31 163.329 -49.9161 -3160.18 164.987 -49.8222 -3562.85 164.468 -49.9711 -3254.41 165.645 -49.3373 -2949.73 165.418 -49.6179 -2932.98 164.906 -49.2772 -3372.43 164.592 -49.592 -3180.2 165.031 -48.955 -2732.07 164.779 -48.2999 -3395.52 164.667 -49.0642 -2319.66 165.206 -48.7066 -2493.62 164.386 -49.2724 -1167.07 162.511 -48.1461 -3185.66 164.678 -48.8545 -1028.39 164.146 -49.758 -1659.22 164.939 -48.5315 -1893.42 164.184 -49.5188 -489.94 164.917 -48.739 -1294.5 165.952 -49.1496 -2757.28 166.064 -49.3675 -1643.54 166.676 -45.4375 -577.64 165.812 -48.51 -2877.17 165.848 -49.5611 -1499.2 166.251 -49.1894 -1585.96 165.797 -47.908 -2842.86 166.068 -48.395 -2046.43 166.111 -48.5929 -1509.66 165.416 -46.4778 -3584.07 166.138 -48.7885 -995.63 166.224 -48.9856 -1143.95 166.48 -49.2445 -775.77 172.138 -46.2336 -1427.44 171.828 -46.2325 -1340.55 171.957 -46.4187 -1418.81 172.227 -45.8563 -1450.09 172.025 -46.0437 -1365.76 172.247 -46.952 -1393.03 171.93 -47.0034 -1363.8 171.438 -46.9168 -1284.29 172.171 -47.1921 -1371.53 171.628 -47.0406 -1333.83 171.899 -45.8351 -1434.25 172.287 -47.4284 -1376.93 171.793 -47.2047 -1340.53 166.149 -49.5555 -646.84 171.937 -47.4003 -1361.85 171.632 -46.4145 -1376.26 171.496 -47.1992 -1334.11 172.07 -47.6081 -1369.01 171.4 -47.0658 -1282.95 171.608 -47.3678 -1345.99 172.205 -47.8057 -1366.87 171.679 -47.5878 -1349.54 171.335 -47.3334 -1324.46 172.322 -48.0002 -1279.59 171.862 -47.7996 -1352.64 170.748 -47.0641 -1149.98 170.773 -47.27 -1213.7 171.208 -46.7862 -1214.47 170.548 -47.167 -1173.99 170.728 -47.6248 -1272.77 170.896 -47.4602 -1268.21 170.675 -47.9998 -1279.2 170.43 -47.6145 -1267.99 170.544 -47.8049 -1283.93 170.824 -48.1755 -1220.13 170.856 -47.8108 -1309.59 170.246 -47.7761 -1264.49 170.32 -48.011 -1218.46 170.15 -47.5924 -1119.66 170.327 -47.4223 -1190.63 171.789 -45.3451 -1049.32 170.354 -47.2427 -1119.16 172.012 -47.9877 -1295.6 171.174 -47.4745 -1314.05 170.508 -48.2032 -1192.79 170.04 -47.9168 -1041.42 171.509 -47.8073 -1338.34 172.156 -48.1337 -1200.05 170.983 -48.3179 -1122.27 170.998 -47.9937 -1275.45 170.521 -47.0008 -1075.19 170.206 -48.2382 -1033.28 170.683 -48.3857 -1097.04 170.697 -46.886 -1078.17 170.887 -46.7461 -1115.52 171.662 -48.0244 -1281.17 171.01 -46.212 -798.89 170.035 -47.4305 -989.86 171.308 -47.9929 -1281.91 171.909 -48.1745 -1175.77 170.014 -48.1027 -903.8 171.163 -48.4282 -1019.21 172.133 -48.3019 -1066.52 170.367 -48.3964 -1106.82 171.387 -48.1739 -1185.68 170.914 -48.4936 -984.15 171.635 -48.2566 -1150.12 166.375 -47.8107 -269.14 170.12 -48.4098 -913.54 171.391 -48.3507 -1050.13 170.706 -48.5576 -907.29 171.865 -48.3808 -1027.94 171.596 -48.448 -995.77 170.397 -48.6923 -981.59 170.203 -48.581 -982.24 170.489 -48.5515 -958.2 171.356 -48.5175 -910.39 172.107 -48.5136 -871.03 169.935 -48.5123 -772.37 169.845 -47.4674 -779.37 170.205 -48.7857 -940.07 169.861 -48 -841.46 169.819 -47.8697 -821.88 169.938 -48.7102 -808.54 171.812 -48.5961 -812.12 171.124 -48.6161 -827.75 166.376 -48.8193 -337.53 170.613 -48.6864 -850.23 170.852 -48.6664 -819.46 170.488 -48.8506 -788.31 169.906 -48.3063 -790.9 170.051 -47.1753 -829.45 170.243 -48.9681 -778.75 171.529 -48.6211 -792.28 166.479 -49.0819 -585.31 171.335 -48.6538 -783.23 169.86 -47.353 -775 169.753 -48.6016 -774.68 169.999 -48.8997 -862.66 169.768 -48.1341 -760.39 170.254 -49.1315 -731.24 166.504 -49.4042 -615.64 169.673 -48.736 -770.63 166.026 -49.6855 -869.44 171.247 -48.7487 -719.89 166.478 -48.9241 -369.81 170.395 -46.6678 -779.34 169.68 -47.9898 -716.87 170.027 -49.0693 -782.97 171.033 -48.8355 -681.04 170.746 -48.8 -767.8 169.407 -48.7583 -750.34 171.433 -48.7591 -685.32 169.111 -48.9954 -746.35 169.176 -48.8407 -685.75 169.269 -49.1253 -866.51 169.392 -49.2773 -746.42 169.546 -48.5913 -740.37 169.693 -48.457 -720.84 169.358 -48.9565 -749.43 169.556 -49.1062 -831 168.775 -49.3783 -786.24 168.945 -49.2806 -827.62 169.149 -49.2773 -765.39 169.175 -48.6937 -705.54 169.643 -49.3014 -692.8 169.802 -49.0024 -791.8 169.828 -49.1766 -742.5 170.064 -49.2274 -688.07 169.424 -48.4298 -676.77 169.614 -48.2851 -688.13 169.537 -48.113 -640.21 168.87 -49.0244 -742.2 168.559 -49.3054 -725.68 168.761 -49.1918 -820.47 169.019 -49.1487 -852.59 165.572 -46.869 -849.78 168.968 -48.8766 -686.75 169.859 -47.2088 -703.85 172.032 -48.6729 -698.34 170.273 -49.2711 -643.98 169.494 -49.4295 -675.2 168.661 -49.0482 -694.25 169.016 -49.4089 -728.35 172.194 -48.6646 -704.11 170.497 -49.0595 -696.62 168.565 -49.4263 -721.33 168.473 -49.1497 -671.57 169.253 -49.4232 -683.44 169.702 -47.416 -656.45 168.874 -49.5146 -717.66 169.374 -49.5642 -661.07 166.632 -49.171 -610.73 169.315 -48.5856 -714.16 168.718 -48.8861 -647.52 169.888 -49.3413 -636.54 169.577 -49.5526 -655.4 168.659 -49.5294 -714.01 171.657 -48.7584 -654.74 170.417 -49.1934 -665.35 168.405 -49.5262 -680.72 169.937 -47.0712 -731.24 169.036 -48.7635 -695.77 170.778 -48.9628 -670.39 169.295 -49.7055 -653.64 169.1 -49.5797 -678.84 169.522 -49.6761 -654.41 168.48 -48.9685 -655.39 170.122 -49.3749 -614.16 168.864 -48.7546 -697.53 169.247 -49.8309 -642.63 169.444 -49.8103 -640.53 169.484 -47.9536 -670 171.898 -48.7777 -616.98 171.311 -48.8732 -631.78 169.725 -49.4583 -646.02 169.068 -49.7612 -644.65 170.336 -49.3986 -578.64 169.783 -49.6273 -645.4 170.47 -49.3008 -588.79 168.486 -48.8006 -631.55 168.523 -49.6745 -657.9 166.701 -49.289 -626.32 169.348 -49.9388 -618.7 168.257 -49.422 -699.69 169.676 -49.7859 -647.94 169.577 -49.9247 -623.89 170.729 -49.114 -599.85 168.817 -49.6722 -670.18 169.086 -49.9318 -629.91 168.673 -48.7111 -666.3 168.239 -49.6791 -639.63 168.248 -49.1883 -649.77 169.968 -49.4945 -614.22 171.205 -48.9946 -570.78 170.229 -46.7931 -783.56 168.193 -49.5381 -668.44 169.374 -48.2439 -634.75 171.018 -49.0035 -587.06 170.602 -49.204 -595.21 169.515 -47.6311 -650.96 168.613 -49.8204 -628.27 171.531 -48.8899 -584.74 169.804 -49.912 -629.49 168.853 -49.8524 -629.72 169.94 -49.7776 -622.01 169.218 -48.4688 -686.49 168.286 -48.8711 -647.59 168.48 -48.6431 -678.77 168.371 -49.8171 -614.77 170.212 -49.5143 -580.45 172.152 -48.8234 -574.82 170.537 -49.4167 -551.65 168.062 -49.4568 -676.79 168.812 -48.6388 -717.04 169.686 -47.1862 -641.87 170.078 -49.6385 -602.47 168.86 -49.9845 -606.14 168.242 -49.0348 -655.12 168.667 -49.9606 -593.22 168.109 -49.3044 -664.21 168.288 -48.7114 -647.38 170.052 -49.9185 -610.93 170.927 -49.1123 -547.02 168.171 -49.8237 -613.15 170.828 -49.2441 -520.09 170.664 -49.3279 -542.1 166.624 -49.52 -532.23 169.306 -47.7087 -635.75 171.766 -48.9107 -530.58 166.407 -49.5672 -449.82 168.655 -48.5555 -683.28 170.431 -49.5186 -549.26 168.446 -49.9455 -582.55 168.005 -49.6019 -644.67 168.473 -48.52 -691.82 166.672 -49.0779 -556.63 169.312 -48.0722 -629.32 170.333 -49.6357 -553.8 171.962 -48.9026 -532.44 170.231 -49.7815 -578.45 168.228 -49.9406 -588.95 167.903 -49.4929 -650.81 169.046 -48.4247 -688.49 166.823 -49.1516 -628.98 169.204 -48.3428 -654.38 169.515 -47.4757 -531.86 170.287 -49.9405 -567.19 168.307 -48.5601 -603.11 170.608 -49.5095 -530.53 168.058 -49.1425 -649.72 169.339 -47.5599 -564.52 170.82 -49.3642 -494.14 168.883 -48.5191 -705.31 165.793 -46.8649 -499.95 168.015 -49.7639 -581.5 171.132 -49.1157 -492.84 169.573 -47.3498 -514.72 170.45 -49.7309 -535.71 171.419 -49.0049 -530.05 171.05 -49.2336 -443.74 166.35 -48.6709 -342.23 170.465 -49.8509 -538.16 168.019 -49.0045 -691.35 170.978 -49.3509 -432 167.903 -49.3819 -659.68 168.118 -48.6145 -502.81 168.002 -49.9179 -510.84 171.621 -49.0155 -486.85 168.565 -48.4267 -672.81 167.832 -49.7039 -525.56 170.717 -49.4373 -514.42 171.327 -49.116 -460.47 167.793 -49.5755 -584.76 168.728 -48.4395 -662.08 170.58 -49.6254 -526.44 170.47 -49.9691 -557.93 169.141 -47.6111 -546.55 168.362 -48.4099 -425.47 168.133 -48.4503 -281.55 168.126 -48.9141 -690.01 170.648 -49.7682 -517.36 169.008 -48.288 -619.02 169.349 -47.4473 -502.83 168.861 -48.3721 -629.43 170.769 -49.5456 -499.3 169.257 -47.8865 -642.88 167.833 -49.8319 -424.71 167.88 -49.2389 -648.92 169.158 -48.1902 -627.24 172.081 -48.9908 -478.33 171.905 -49.006 -450.1 170.895 -49.4554 -466.53 167.742 -49.4568 -620.78 168.092 -48.7767 -647.46 170.68 -49.9232 -535.53 169.119 -47.7577 -636.98 170.884 -49.8055 -491.73 170.816 -49.6679 -496.25 170.934 -49.9465 -499.35 170.972 -49.5676 -464.27 171.046 -49.6948 -472.12 171.087 -49.4593 -390.18 171.203 -49.5808 -442.02 171.139 -49.8341 -486.11 171.235 -49.7082 -461.22 171.345 -49.9382 -489.34 167.169 -49.425 -400.78 167.088 -49.3044 -539.52 166.985 -49.1997 -645.41 166.997 -49.4476 -522.22 166.987 -49.1213 -624.79 169.419 -47.3649 -499.74 171.133 -49.9795 -506.91 167.492 -49.6345 -363.97 167.312 -49.6077 -343.42 167.127 -49.5466 -372.32 167.658 -49.6617 -453.11 167.319 -49.4804 -478.12 169.327 -47.269 -392.06 166.214 -48.2702 -1085 171.246 -49.2299 -398.32 167.451 -49.5393 -468.74 166.735 -49.6157 -426.46 166.103 -49.8472 -170.74 167.833 -49.0828 -652.91 171.771 -49.0302 -372.86 168.683 -48.3261 -628.68 171.531 -49.9558 -485.59 168.503 -48.3062 -480.89 168.21 -48.3165 -438.32 167.32 -49.3579 -651.96 168.349 -48.2873 -155.95 171.375 -49.7861 -471.65 167.703 -49.3303 -641.4 169.077 -48.032 -647.1 172.183 -49.9456 -482.17 166.923 -49.0601 -598.43 167.869 -48.9595 -671.84 171.543 -45.1267 -278.29 166.923 -49.5707 -526.58 171.169 -49.3446 -367.74 168.961 -48.1539 -598.32 168.823 -48.2383 -588.17 167.611 -49.5469 -523.83 166.382 -46.3293 -394.43 169.196 -47.4656 -305.86 168.05 -48.3097 -397.93 166.629 -48.978 -426.88 167.969 -48.8823 -682.96 171.284 -49.4527 -401.69 167.052 -47.1684 -399.77 166.508 -46.3431 -302.1 166.618 -49.7043 -121.43 171.531 -49.8618 -463.27 171.978 -49.9333 -477.06 167.669 -49.1945 -637.55 167.522 -49.4269 -588.09 171.642 -49.9175 -466.02 167.311 -49.233 -708.72 172.159 -49.0921 -427.78 166.805 -49.0075 -512.27 166.257 -47.9189 -777.71 168.131 -48.2323 -365.16 168.632 -48.1902 -605.5 171.786 -49.9254 -466.91 168.424 -48.1926 -197.48 169.036 -47.877 -639.32 172.265 -49.8271 -464.11 167.503 -49.2831 -650.97 171.404 -49.646 -434.51 168.259 -48.2087 -378.29 166.256 -49.6964 -187.62 166.566 -49.6206 -345.6 171.084 -45.6318 -453.59 167.794 -49.9502 -244.6 169.013 -47.6816 -505.17 171.695 -49.8306 -443.17 171.522 -49.1207 -361.81 167.144 -49.1541 -662.71 167.713 -48.9692 -639.76 172.087 -49.8269 -464.28 168.906 -48.0543 -646.13 166.536 -49.7932 -45.1 168.797 -48.1204 -623.66 167.322 -49.1343 -725.25 165.679 -46.732 -639.08 171.376 -49.5372 -403.87 168.006 -48.1951 -312.88 168.14 -48.1386 -305.62 167.475 -49.1633 -679.68 169.059 -47.5018 -245.34 166.74 -49.7119 -139.9 171.578 -49.7319 -441.39 171.995 -49.1084 -260.15 171.885 -49.8053 -449.17 167.912 -48.7819 -536.87 167.081 -47.2624 -197 168.303 -48.0884 -308.96 167.791 -48.8585 -563.5 168.663 -48.074 -625.64 167.421 -49.0574 -688.73 168.505 -48.0815 -349.71 172.178 -49.7294 -448.45 171.714 -49.1289 -258.35 171.435 -49.2292 -302.63 167.682 -49.7729 -353.48 167.953 -48.5277 -200.65 167.609 -49.071 -637.52 166.477 -49.8782 -73.62 167.067 -49.0342 -575.52 166.363 -49.8089 -43.38 168.156 -48.0506 -251.23 168.96 -47.7707 -561.77 166.947 -48.9861 -511.11 172.025 -49.7013 -424.17 167.249 -49.0516 -703.94 168.775 -48.0105 -653.41 171.745 -49.737 -422.55 168.91 -47.9554 -647.74 167.348 -48.964 -655.17 171.562 -49.6218 -428.95 168.242 -47.9982 -235.92 167.641 -48.8868 -620.2 167.984 -48.0593 -218.59 171.363 -49.3402 -344.7 171.859 -49.6724 -411.09 167.783 -48.74 -598.43 167.151 -49.6586 -264.2 167.526 -48.9558 -674.28 168.392 -47.9701 -251.03 168.605 -47.9672 -296.69 172.175 -49.587 -423.04 167.918 -48.6671 -356.74 171.494 -49.557 -405.97 168.111 -47.9684 -187.03 167.942 -48.3976 -123.65 166.681 -49.7821 -97.22 167.535 -49.7396 -215.37 166.329 -49.9344 -148.72 171.698 -49.6427 -402.29 166.35 -46.2419 -299.65 168.894 -47.8555 -590.91 171.967 -49.5866 -365.46 167.019 -49.6365 -297.2 167.633 -48.7864 -468.87 167.189 -48.9504 -597.47 166.746 -48.8958 -303.88 166.458 -49.6998 -95.4 167.955 -47.9242 -122.98 168.239 -47.9128 -179.01 168.759 -47.8915 -281.45 166.876 -49.6894 -225.56 168.497 -47.8698 -208.45 171.479 -49.4513 -336.79 166.623 -49.873 -118.01 167.281 -48.8856 -522.32 172.138 -49.468 -377.63 168.108 -47.865 -138.41 167.536 -48.8576 -648.79 167.409 -48.8736 -464.87 171.804 -49.5625 -315.47 169.416 -47.1819 -256.11 171.851 -49.0899 -242.14 168.354 -47.8495 -172.99 168.621 -47.8619 -231.17 166.373 -46.1513 -220.81 172.119 -49.1967 -326.87 167.763 -48.6565 -426.67 171.635 -49.5314 -373.04 166.795 -49.7664 -133.91 167.069 -47.3436 -231.77 166.619 -48.8822 -252.5 172.041 -49.507 -306.35 167.674 -49.8802 -203.49 168.227 -47.8112 -150.77 172.148 -49.3889 -333.59 171.537 -49.3302 -205.85 171.899 -49.4742 -226.68 167.258 -49.7033 -244.08 167.043 -48.9239 -466.7 167.989 -47.81 -115.77 167.894 -48.2784 -128.32 168.437 -47.7881 -179.3 168.684 -47.8038 -216.96 167.794 -48.5722 -272.09 167.671 -48.6985 -475.66 167.468 -48.7864 -165.44 169.623 -46.8964 -181.57 167.158 -48.8497 -343.78 171.755 -49.4759 -224.28 168.806 -47.7722 -231.85 168.559 -47.774 -195.91 169.279 -47.3686 -198.01 167.303 -48.7926 -220.48 168.111 -47.7667 -129.65 169.489 -47.1011 -197 166.786 -46.4979 -197 166.308 -48.5574 -231.51 167.029 -49.7225 -158.05 171.646 -49.4161 -194.48 166.502 -47.7336 -292.53 166.683 -47.672 -221.49 167.384 -49.7148 -243 171.794 -49.3965 -183.86 171.917 -49.3813 -154.04 172.026 -49.4191 -217.27 167.651 -49.9687 -125.82 171.607 -49.227 -183.38 166.399 -48.0942 -160.38 166.342 -48.1786 -206.54 166.409 -48.0069 -126.12 166.495 -48.0671 -124.66 166.455 -47.9074 -142.27 166.515 -47.826 -165.17 166.605 -47.885 -147.21 166.641 -47.7918 -179.75 167.127 -49.9449 -123.36 167.152 -49.8411 -141.31 167.153 -49.7518 -183.27 167.271 -49.963 -125.69 167.271 -49.8822 -138.93 171.847 -49.313 -126.83 171.896 -49.2463 -124.13 172.023 -49.3053 -202.17 171.866 -49.1707 -127.03 171.98 -49.2055 -138.6 166.382 -48.2901 -213.35 166.462 -48.2268 -191.61 166.456 -48.3842 -167.42 166.527 -48.2976 -161.07 166.483 -48.1475 -157.33 166.534 -48.4709 -138.99 166.605 -48.3796 -139.42 166.573 -47.989 -113.16 166.579 -48.2097 -154.06 166.624 -48.102 -118.41 166.715 -48.4726 -136.32 166.664 -48.288 -140.61 166.691 -47.9359 -133.35 166.728 -48.3629 -139.86 166.722 -48.1934 -137.2 166.708 -48.6114 -133.24 166.741 -47.8632 -155.51 166.866 -48.4692 -139.45 166.787 -48.1013 -117.12 166.843 -48.5501 -136.24 166.726 -48.0125 -102.47 166.846 -48.6373 -130.49 166.814 -48.2833 -144.15 166.778 -48.7134 -165.11 166.795 -47.7708 -183.52 166.86 -48.1816 -135.16 166.839 -48.3905 -141.56 166.806 -47.9376 -121.28 166.945 -48.7088 -133.44 166.973 -48.5096 -138.77 166.867 -48.02 -118.36 166.88 -47.8559 -143.16 166.947 -48.2399 -148.46 166.965 -48.6021 -131.31 167.003 -48.8197 -199 166.925 -48.1026 -133.09 166.952 -48.3302 -145.35 167.072 -48.6499 -125.15 166.858 -47.6839 -208.03 166.944 -47.9395 -117.25 167.023 -47.8572 -127.19 166.97 -48.17 -143.85 166.966 -48.421 -142.05 167.013 -48.0262 -135.53 167.042 -48.203 -148.86 167.061 -48.2748 -146.32 167.11 -48.5571 -133.37 167.091 -48.4551 -138.17 167.073 -48.123 -150.9 167.077 -48.3657 -142.1 167.173 -48.2059 -141.93 167.137 -48.7375 -121.05 167.191 -48.3056 -136.36 167.208 -48.6369 -125.5 167.206 -48.3956 -135.17 167.224 -48.4836 -137.23 167.244 -48.5576 -132.51 167.273 -48.7052 -125.99 167.317 -48.5951 -128.64 167.327 -48.6518 -126.83 167.337 -48.4251 -137.21 167.366 -48.5196 -133.96 167.391 -48.707 -131.11 167.445 -48.6151 -130.89 167.541 -48.6994 -272.88 166.915 -49.7989 -134.47 166.875 -49.8871 -142.48 166.937 -49.9614 -127.18 167.053 -49.7976 -136.96 167.012 -49.8732 -123.63 171.698 -49.3188 -141.73 167.086 -47.7107 -139.82 166.996 -47.635 -163.29 166.96 -47.5121 -349.75 167.189 -48.0256 -142.82 167.352 -47.9696 -124.41 167.433 -48.3731 -135.9 167.235 -47.924 -128.06 167.471 -48.4455 -134.54 167.199 -47.7221 -139.07 167.56 -48.3723 -141 167.584 -48.4531 -151.28 167.266 -47.8543 -116.79 167.16 -47.8591 -118.97 167.53 -48.5252 -141.14 167.233 -47.7938 -124.45 167.111 -47.7847 -130.92 167.43 -48.2047 -124.06 167.326 -48.161 -132.71 167.599 -48.292 -133.11 167.462 -48.2893 -130.32 167.22 -48.1166 -142.26 167.322 -48.3395 -132.41 167.317 -48.251 -129.51 167.341 -48.0674 -130.68 167.574 -48.2044 -126.64 167.485 -48.1169 -119.8 167.619 -48.1263 -126.68 167.676 -48.5071 -177.64 167.807 -48.463 -198.61 167.683 -48.4154 -170.81 167.674 -48.3384 -132.85 167.634 -48.6101 -288.5 167.791 -48.3578 -129.02 167.276 -49.7878 -181.53 167.372 -49.9244 -124.83 167.417 -49.8295 -146.31 167.517 -49.9275 -113.46 167.565 -49.8301 -134.38 167.093 -47.9391 -132.34 166.966 -47.7581 -163.2 166.825 -47.5825 -236.99 166.771 -49.844 -154.46 166.746 -49.9526 -161.7 166.289 -48.3834 -226.26 166.382 -48.4748 -187.78 166.453 -48.5619 -255.3 166.592 -48.5526 -152.1 166.492 -48.7321 -383.98 166.54 -48.6422 -270.27 166.548 -48.8122 -321.63 166.628 -48.7183 -245.98 166.694 -48.8046 -209.89 166.843 -48.8055 -207.59 166.896 -48.9048 -381.86 166.234 -48.4822 -247 171.767 -49.2334 -152.75 166.324 -46.0091 -205.62 167.359 -47.883 -119.05 166.345 -46.0744 -204.65 167.726 -48.2557 -133.71 171.628 -45.0588 -143.93 168.956 -47.5787 -232.73 168.89 -47.6803 -231.33 168.207 -47.7347 -140.72 167.158 -47.6396 -148.93 168.323 -47.7445 -158.59 168.673 -47.7197 -207.55 167.489 -48.0109 -117.49 169.054 -47.394 -219.28 168.007 -47.7115 -109.14 167.886 -47.7548 -105.9 167.617 -48.0519 -131.85 167.081 -47.444 -179.67 167.347 -47.8063 -113.84 168.947 -47.4596 -215.64 169.167 -47.3626 -212.43 166.236 -46.2489 -208.1 167.696 -48.1672 -127.43 167.853 -47.8455 -108.76 167.32 -47.7344 -131.68 167.109 -47.5472 -155.8 168.767 -47.6651 -211.51 167.498 -47.907 -116.18 167.343 -47.0331 -167.11 168.446 -47.7102 -173.34 168.834 -47.6021 -209 167.393 -46.8041 -170.38 168.939 -47.3749 -202.91 166.533 -46.2524 -178.1 168.13 -47.6818 -124.44 167.839 -48.1572 -131.19 167.461 -47.8241 -109.17 168.245 -47.6696 -140.15 167.163 -46.5297 -167.72 166.616 -46.3022 -185.39 168.355 -47.6566 -154.99 167.723 -48.0945 -132.1 166.279 -46.1785 -183.32 168.555 -47.66 -184.63 167.174 -47.1303 -194.64 168.667 -47.6384 -196.4 167.291 -47.6564 -147.63 167.642 -47.9492 -125.03 168.821 -47.5067 -194.09 167.887 -47.661 -101.85 169.531 -46.9572 -192.1 167.155 -47.3078 -177.22 168.73 -47.5788 -192.51 167.183 -47.2312 -165.49 169.215 -47.302 -194.67 167.441 -47.7481 -118.18 166.92 -46.5359 -111.38 168.851 -47.4042 -187.47 169.104 -47.2831 -185.76 167.414 -47.6751 -135.5 168.035 -47.6084 -104.04 169.791 -46.7516 -160.61 167.742 -48.0137 -127.58 168.975 -47.3021 -186.81 167.343 -46.7411 -174.88 167.263 -47.5624 -151.84 167.828 -48.0643 -127.21 168.447 -47.6377 -166.62 167.194 -47.4827 -152.11 168.866 -47.3226 -180.27 169.204 -47.2271 -179.33 169.512 -46.8743 -167.1 167.448 -46.8591 -134.34 167.011 -46.4626 -177.81 169.288 -47.1666 -176.48 168.601 -47.5663 -176.95 168.18 -47.6036 -124.33 167.617 -47.8714 -115.28 168.685 -47.4927 -172.77 167.119 -46.4628 -153.34 167.561 -47.8333 -110.44 167.86 -47.9988 -120.94 168.495 -47.591 -169.26 167.395 -47.5992 -147.99 169.712 -46.8281 -171.93 167.792 -47.9326 -118.32 167.908 -47.5635 -99.4 167.572 -47.7597 -109.61 167.793 -47.6048 -99.91 168.284 -47.6052 -139.8 169.365 -47.0931 -169.02 168.387 -47.5747 -151.89 169.114 -47.1985 -159.4 168.746 -47.4177 -166.24 170.134 -46.4855 -111.82 169.441 -47.0201 -172.3 167.436 -46.7351 -132.7 168.784 -47.3504 -165.98 168.88 -47.2365 -160.43 167.233 -47.3038 -125.51 169.003 -47.2034 -157.98 168.572 -47.4733 -158.1 168.639 -47.4115 -153.76 167.304 -47.469 -149.97 167.444 -46.9329 -97 167.212 -47.3868 -145.32 167.722 -47.8658 -113.91 169.177 -47.1455 -157.92 168.484 -47.5231 -157.31 167.536 -47.6871 -122.42 167.242 -46.5677 -144.84 167.394 -47.5218 -147.03 169.848 -46.6737 -149.51 169.245 -47.0825 -148.83 168.766 -47.2684 -151.65 166.245 -46.0598 -176.19 171.347 -45.2911 -96.09 167.658 -47.8081 -107.41 169.598 -46.8175 -148.7 170.057 -46.5382 -128.07 168.123 -47.5283 -108.87 167.771 -47.7877 -103.97 166.986 -46.3956 -137.09 168.01 -47.514 -99.54 167.509 -47.6189 -134.18 168.262 -47.5282 -129.21 168.687 -47.3359 -144.96 166.718 -46.3365 -160.66 168.378 -47.4886 -140.42 170.871 -45.8209 -88.17 167.265 -47.0867 -222.61 169.312 -47.0051 -137.29 166.292 -46.1178 -178.97 168.543 -47.3947 -141.31 169.405 -46.9289 -134.58 170.19 -46.429 -91.81 168.601 -47.353 -139.54 167.704 -47.739 -107.93 167.252 -46.5098 -125.9 168.467 -47.443 -141.62 169.078 -47.1326 -140.51 168.888 -47.1418 -132.92 168.789 -47.1763 -135.79 167.915 -47.4776 -98.27 167.802 -47.723 -101.71 168.984 -47.114 -129.35 167.218 -46.4616 -130.38 166.209 -46.1863 -161.92 169.5 -46.8018 -116.13 167.488 -46.7916 -108.11 167.493 -47.5507 -142.05 169.907 -46.5552 -113.89 167.313 -47.3286 -90.34 167.348 -47.3949 -123.91 166.435 -46.0887 -102.8 169.141 -47.0724 -134.87 167.651 -47.6874 -118.05 168.375 -47.4139 -126.95 167.287 -47.1772 -166.84 167.76 -47.6743 -102.1 168.084 -47.4694 -99.8 167.414 -47.4506 -129.89 169.3 -46.931 -115.67 168.669 -47.2587 -129.4 167.617 -47.6293 -124.77 168.179 -47.4541 -110.11 168.692 -47.1938 -125.89 168.531 -47.3249 -127.67 167.704 -47.6347 -110.44 171.404 -45.2195 -91.2 169.047 -47.0626 -122 169.199 -47.0125 -126.17 168.602 -47.2895 -128.38 167.489 -47.4877 -128.58 168.449 -47.3601 -125.8 167.396 -46.6635 -118.84 167.594 -47.5664 -128.49 168.287 -47.4457 -123.63 167.08 -46.4029 -119.94 167.303 -47.259 -92.08 170.304 -46.3015 -80.25 167.432 -47.0046 -110.6 168.009 -47.4401 -97.8 167.697 -47.5778 -111.36 167.935 -47.4026 -97.29 169.421 -46.842 -109.4 169.792 -46.6144 -116.71 169.729 -46.6773 -124.36 169.564 -46.7398 -114.5 168.921 -47.0807 -116.28 168.8 -47.1077 -116.63 166.547 -46.0247 -42.91 168.366 -47.3541 -115.8 170.446 -46.1885 -76.95 167.572 -47.5064 -129.46 168.973 -47.0562 -111.03 167.315 -46.6071 -129.48 168.525 -47.2546 -114.57 167.669 -47.5126 -115.78 168.3 -47.3817 -113.59 168.6 -47.2113 -114.2 168.099 -47.4092 -97.93 168.712 -47.1099 -110.47 168.468 -47.2923 -115.65 167.792 -47.5159 -99.51 167.834 -47.421 -97.5 167.44 -47.0749 -97 167.555 -47.4597 -121.52 169.239 -46.9609 -115.94 171.225 -45.3759 -87.01 170.031 -46.4701 -91.59 167.628 -47.457 -117.81 169.966 -46.522 -105.51 169.103 -47.0063 -113.38 167.445 -47.3878 -109.66 167.501 -46.8933 -96.4 168.853 -47.0686 -108.62 168.233 -47.4033 -110.57 167.508 -46.7365 -88.17 171.532 -45.0468 -93.31 167.185 -46.3957 -99.03 169.652 -46.6431 -95.31 168.393 -47.2995 -109.53 167.502 -47.43 -117.46 167.579 -47.4124 -111.63 169.321 -46.8623 -97 170.105 -46.4268 -86.95 167.332 -46.5281 -103.74 169.162 -46.9533 -106.57 168.626 -47.1389 -104.41 167.724 -47.448 -106.46 166.222 -46.1327 -134.12 168.521 -47.1948 -103.45 168.172 -47.3906 -102.12 167.662 -47.3981 -105.29 168.313 -47.3175 -103.79 169.878 -46.5085 -86.47 169.002 -47.0001 -100.58 168.432 -47.2197 -99.18 167.498 -46.6801 -82.33 167.524 -47.3741 -106.65 168.333 -47.1859 -97 168.227 -47.3442 -99.49 169.432 -46.7836 -97 169.478 -46.7488 -92.73 167.382 -47.2828 -57.98 167.752 -47.3784 -101.17 169.222 -46.8979 -97.67 167.602 -47.3502 -91.57 168.557 -47.154 -99.75 166.961 -46.3315 -93.4 168.912 -47.0236 -98.4 167.048 -46.3505 -90.52 170.612 -46.17 -97 167.359 -47.1173 -137.24 167.304 -46.4661 -95.53 169.069 -46.9482 -97 167.773 -47.3079 -97 167.746 -47.2578 -84.15 167.52 -46.932 -87.66 167.278 -46.4101 -90 167.828 -47.3544 -97 168.77 -47.0422 -97 168.021 -47.3628 -97 167.943 -47.3463 -97 168.129 -47.3379 -97 167.983 -47.3119 -97 167.887 -47.365 -97 168.332 -47.2532 -97 167.686 -47.3357 -75.81 167.947 -47.2221 -97 169.576 -46.6628 -78.69 167.419 -46.5753 -93.95 169.365 -46.7942 -90.71 168.838 -47.0165 -97 168.252 -47.2788 -91.79 167.895 -47.2941 -97 168.634 -47.0798 -97 167.473 -46.6228 -92.36 167.509 -46.9862 -89.87 169.242 -46.8375 -88.68 171.166 -45.4169 -80.55 168.32 -47.1267 -97 168.481 -47.1373 -97 168.392 -47.1431 -97 171.458 -45.0254 -81.19 167.993 -47.2618 -97 168.055 -47.2964 -97 168.256 -47.155 -68.9 168.186 -47.2947 -89.81 168.933 -46.9718 -92.71 168.262 -47.2176 -83.18 170.357 -46.2493 -74.05 168.678 -47.0363 -95 166.847 -46.3214 -99.43 167.574 -46.8946 -66.97 168.423 -47.0982 -90.2 169.288 -46.7983 -76.68 169.123 -46.8963 -89.97 170.519 -46.1429 -76.73 168.365 -47.0909 -87.11 167.574 -46.9524 -66.16 168.982 -46.9356 -87.83 168.868 -46.9733 -90.27 168.6 -47.0296 -88.55 168.716 -46.9803 -83.25 169.162 -46.8358 -79.14 170.232 -46.3266 -72.62 167.129 -46.3504 -78.52 167.811 -47.2483 -79.76 168.556 -47.0898 -90.58 167.421 -46.5037 -81.07 170.603 -46.1042 -80.14 168.794 -46.9761 -87.21 167.372 -46.4733 -83.45 168.473 -47.0675 -82.99 171.258 -45.3233 -77.15 167.51 -46.5758 -81.05 169.035 -46.8914 -83.11 169.938 -46.4682 -70.48 170.39 -46.211 -71.49 171.317 -45.2227 -66.45 170.15 -46.382 -73.66 168.127 -47.2698 -80.4 168.903 -46.9268 -82.75 168.193 -47.2431 -77.88 166.412 -45.8759 -44.56 171.354 -45.1667 -71.19 167.488 -46.526 -73.14 167.584 -47.2986 -42.72 170.179 -46.3449 -67.96 168.828 -46.9246 -80.27 167.544 -46.624 -80.42 169.404 -46.7309 -76.85 169.217 -46.7903 -74.79 168.64 -46.9801 -79.71 171.389 -45.0504 -72.09 170.08 -46.3793 -62.39 168.945 -46.8777 -74.95 168.402 -47.0529 -77.73 169.079 -46.846 -75.82 169.489 -46.6876 -76.62 170.432 -46.1399 -65 167.194 -46.3409 -62.88 168.345 -47.0504 -70.43 170.47 -46.0988 -62.47 168.522 -47.0226 -74.57 170.284 -46.245 -61.95 169.978 -46.4231 -56.89 167.979 -47.1691 -63.88 167.92 -47.1833 -51.75 168.566 -46.9757 -74.37 169.102 -46.8055 -68.54 168.672 -46.9314 -69.42 167.335 -46.372 -69.87 167.585 -46.578 -69.4 167.879 -47.2145 -60.47 170.326 -46.2035 -58.44 169.32 -46.7461 -62.17 168.748 -46.9197 -72.47 171.101 -45.4449 -61.21 167.369 -46.4184 -75.48 167.432 -46.4502 -67.8 167.35 -47.2218 -30.19 169.005 -46.8396 -71.23 167.565 -46.802 -58.31 167.553 -46.7592 -65.27 170.592 -46.0502 -64.3 171.263 -45.2664 -61.91 171.4 -44.9985 -59.41 169.147 -46.7769 -64.29 167.577 -46.9993 -43.09 166.547 -46.0552 -39.72 168.868 -46.879 -73.11 170.04 -46.4153 -67.19 166.771 -46.2729 -91.51 167.266 -46.349 -64.22 169.606 -46.6137 -50.46 167.032 -46.3103 -66.74 166.497 -46.0687 -33.04 170.382 -46.1737 -62.75 169.258 -46.7553 -63.55 168.894 -46.8437 -67.9 168.799 -46.8758 -69.42 167.583 -46.6689 -51.95 168.198 -47.1878 -63.8 170.233 -46.2789 -60.64 170.176 -46.305 -57.05 167.757 -47.2111 -53.81 167.557 -46.5333 -66.82 168.604 -46.9308 -67.56 168.74 -46.8685 -62.75 167.537 -46.4943 -60.65 168.443 -47.0101 -67.12 168.01 -47.2111 -73.97 171.097 -45.3976 -50.92 168.94 -46.8231 -64.15 167.488 -46.4753 -62.18 169.201 -46.7353 -59.78 168.492 -46.9654 -62.29 169.041 -46.8012 -63.3 168.133 -47.2102 -66.19 168.355 -47.0047 -52.88 170.656 -45.9437 -46.15 170.118 -46.3346 -56.77 168.064 -47.236 -62.61 167.64 -46.9321 -31.31 168.983 -46.7998 -62.13 167.625 -46.9701 -36.34 170.437 -46.0716 -51.75 168.838 -46.8374 -64.52 166.92 -46.2857 -56.72 169.077 -46.7659 -58.08 168.537 -46.9259 -61.36 168.635 -46.8963 -59.28 169.41 -46.6627 -53.05 170.407 -46.0999 -52.87 167.659 -46.5791 -53.72 167.619 -46.6232 -56.73 170.533 -46.0328 -53.46 170.579 -46.0037 -50.33 170.366 -46.1324 -51.95 167.625 -46.5348 -58.2 167.235 -46.3032 -45.19 167.095 -46.3109 -58.46 168.88 -46.8047 -60.18 169.336 -46.6837 -44.85 166.468 -45.791 -79.95 170.324 -46.1613 -49.97 168.688 -46.8841 -59.68 167.563 -46.7164 -40.13 167.443 -46.4057 -56.4 169.124 -46.7246 -50.55 168.771 -46.8316 -59.47 170.258 -46.2042 -46.54 169.266 -46.7065 -46.98 167.343 -46.3261 -54.46 170.286 -46.1789 -46.52 170.218 -46.2344 -46.36 171.201 -45.2932 -49.26 171.251 -45.2203 -47.78 171.086 -45.3466 -44.61 166.647 -45.5951 -7 168.932 -46.7779 -55.25 170.172 -46.2613 -43.92 168.575 -46.8836 -56.25 167.495 -46.4265 -50.94 168.234 -46.8614 -9.7 170.968 -45.5592 -45.87 171.313 -45.0712 -51.38 168.696 -46.8314 -51.43 168.998 -46.7572 -53.79 168.47 -46.9159 -52.03 168.144 -47.1582 -53.52 167.416 -46.3551 -47.59 169.217 -46.6932 -47.58 167.596 -46.4914 -53.27 166.992 -46.2802 -43.87 169.773 -46.4951 -25.18 168.41 -46.9498 -50.42 167.166 -46.3066 -45.3 167.558 -46.4479 -48.32 167.704 -46.5312 -47 170.12 -46.2839 -41.69 168.813 -46.7917 -54.49 168.414 -46.9001 -47 168.865 -46.7581 -51.03 168.064 -47.1667 -28.58 168.634 -46.8586 -50.14 171.271 -45.1699 -47.47 167.657 -46.496 -47.35 170.006 -46.3719 -40.46 167.698 -47.2367 -34.89 168.514 -46.8867 -51.12 167.515 -47.1176 -39.87 167.829 -46.5807 -46.92 170.479 -46.0183 -47 168.356 -46.9096 -47 170.522 -45.9896 -47 170.57 -45.959 -47 167.774 -46.554 -47 170.435 -46.0401 -45.58 169.084 -46.6925 -28.76 167.546 -46.4037 -46.61 167.781 -46.5 -45.03 170.39 -46.0623 -43.79 168.926 -46.7315 -47 168.328 -46.9523 -47 167.761 -46.4561 -38.9 167.888 -46.5657 -47 168.269 -46.9451 -45.65 167.395 -46.3049 -37.72 167.722 -46.5785 -47 168.306 -47.0773 -63.77 168.274 -46.9872 -45.03 168.282 -47.0329 -47 167.711 -46.4767 -46.91 171.04 -45.4278 -47 168.739 -46.7863 -48.41 167.608 -46.3992 -44.52 167.649 -46.4455 -47 167.773 -46.601 -47 168.302 -46.9185 -45.39 170.054 -46.341 -36.52 167.93 -46.5994 -47 167.84 -46.5346 -38.93 171.029 -45.3794 -40.89 167.495 -47.1638 -51.36 171.255 -45.1113 -38.41 170.343 -46.091 -40.46 171.143 -45.3173 -46.68 171.198 -45.2432 -42.36 167.907 -46.5211 -39.42 168.458 -46.8652 -34.01 170.304 -46.1258 -39.89 167.066 -46.2768 -32.37 167.503 -46.3747 -41.01 168.669 -46.7846 -39.19 170.28 -46.1538 -40.82 167.569 -46.3712 -38.48 169.461 -46.6257 -29.58 167.953 -46.554 -41.78 171.078 -45.2938 -37.15 167.648 -46.6633 -28.04 167.706 -46.6302 -32.31 166.857 -46.2449 -23.8 167.666 -46.8335 -26.16 171.2 -45.1939 -37.87 168.985 -46.7051 -33.62 167.701 -46.6893 -8.38 171.009 -45.324 -30.77 167.296 -46.2962 -29.07 169.909 -46.4225 -26.29 170.615 -45.9325 -37.04 169.945 -46.3868 -20.97 170.239 -46.1702 -35.36 167.888 -46.6422 -35.18 168.375 -46.8599 -32.16 171.138 -45.2678 -39.27 167.351 -46.2759 -33.29 170.189 -46.192 -28.2 168.035 -46.6928 -27 167.131 -46.2745 -30.1 170.462 -45.9804 -28.62 170.163 -46.2242 -31.81 168.855 -46.7091 -27.06 170.986 -45.4623 -37.33 171.275 -45.0261 -26.23 167.723 -46.4291 -31.78 170.388 -46.0226 -37.76 171.335 -45.0162 -46.29 167.49 -46.3319 -33.37 167.836 -46.6688 -31 167.636 -46.3473 -22.38 167.857 -46.4874 -18.33 170.118 -46.2391 -24.29 171.075 -45.2432 -30.16 171.2 -45.1418 -32.2 170.977 -45.4125 -33.71 167.923 -46.4747 -17.87 169.617 -46.5795 -30.6 167.268 -46.2667 -12.63 167.453 -46.3015 -30.1 167.695 -46.3783 -20.15 167.733 -46.9175 -20.79 170.507 -45.9486 -29.96 167.775 -46.4218 -25.27 168.01 -46.5875 -28 171.138 -45.2177 -33.39 167.559 -46.3295 -29.95 168.304 -46.8809 -27 170.327 -46.0455 -32.23 171.236 -45.0595 -25.8 168.527 -46.8443 -40.87 166.943 -46.2468 -18.49 167.918 -46.6745 -25.49 170.065 -46.3025 -33.78 167.631 -46.7082 -16.48 170.813 -45.6728 -27 167.961 -46.6394 -28.18 168.306 -46.6484 -27 168.208 -46.561 -27 170.265 -46.0801 -25.98 171.198 -45.0957 -27.02 168.17 -46.7406 -27 168.014 -47.1422 -32.04 167.637 -46.3036 -12.58 167.411 -46.266 -26.08 168.144 -46.5058 -27 168.015 -46.5383 -30.6 168.101 -46.7489 -27 171.135 -45.166 -29.27 171.013 -45.2675 -25.66 168.151 -46.5633 -27 168.076 -46.5475 -27 171.075 -45.1944 -23.39 168.055 -46.4948 -27 167.991 -46.4613 -17.76 168.268 -46.7138 -27 170.001 -46.3132 -19.12 168.263 -46.6782 -27 167.812 -46.452 -26.27 167.512 -46.2983 -25.13 170.244 -46.131 -30.43 168.236 -46.7541 -27 168.237 -46.5764 -25.31 170.775 -45.6652 -26.6 167.976 -46.5076 -27 168.794 -46.6493 -22.21 168.138 -46.706 -27 168.099 -46.673 -27 168.133 -46.6227 -27 168.081 -46.5929 -27 168.039 -46.6407 -27 168.21 -46.7032 -27 171.13 -45.109 -26.75 168.167 -46.6662 -27 168.171 -46.8404 -27 167.974 -46.6848 -26.57 168.753 -46.6599 -26.32 168.323 -46.6936 -26.17 170.952 -45.2859 -21.39 168.309 -46.7387 -26.33 168.303 -46.8331 -27 168.236 -46.8093 -19.3 168.25 -46.9068 -26.78 168.03 -46.7667 -17.43 168.084 -46.7985 -21.44 171.068 -45.1471 -16.79 168.113 -46.4652 -18.83 171.013 -45.2187 -20.78 168.304 -46.7842 -27 168.729 -46.6971 -23.03 168.702 -46.7429 -28.83 167.873 -46.4398 -17 171.21 -45.0052 -19.38 168.759 -46.6154 -17.47 168.06 -46.4368 -17.16 167.489 -46.2519 -19.78 170.337 -45.9941 -28.65 167.745 -46.3968 -22.31 168.658 -46.7053 -17 168.69 -46.6521 -19.52 170.068 -46.2594 -20.61 168.919 -46.6878 -18.08 171.162 -45.0561 -18.04 169.516 -46.5736 -11.83 167.414 -46.2276 -17.15 168.555 -46.7796 -12.02 167.698 -46.9393 -17.81 167.459 -46.2 -12.41 170.692 -45.6578 -18.47 170.899 -45.2983 -15.97 168.13 -46.4283 -15.06 167.567 -46.2799 -17 168.374 -46.8072 -17 167.824 -46.4067 -19.13 168.497 -46.7258 -16.58 167.993 -46.422 -11.13 169.946 -46.3394 -11.93 168.174 -46.4599 -14.4 170.823 -45.4956 -7 169.841 -46.4197 -14.75 170.024 -46.2768 -13.17 168.084 -46.3997 -11.39 167.935 -46.4309 -14.43 168.605 -46.6693 -14.49 168.69 -46.6019 -10.14 171.051 -45.1046 -6.95 167.4 -46.1971 -10.65 167.526 -46.2067 -5.8 168.093 -46.9227 -15.38 168.532 -46.6582 -9.12 167.634 -46.2624 -7.74 170.859 -45.3092 -5.74 167.567 -46.2392 -9.22 167.683 -46.2876 -7 168.136 -46.3953 -9.76 167.942 -46.3948 -9.73 171.011 -45.1354 -5.58 167.428 -46.1699 -7.82 171.092 -45.0598 -5.19 168.094 -46.3703 -5.13 179.042 -49.9366 -2729.77 178.556 -49.9047 -2691.86 178.507 -46.1681 -2971.25 178.54 -46.6004 -2797.42 178.162 -46.5316 -2899.3 178.652 -45.9303 -3013.1 178.12 -46.232 -2918.87 178.275 -45.9545 -2864.67 178.428 -45.7049 -2791.67 177.544 -45.6457 -2540.67 177.85 -46.9849 -2235.59 178.24 -46.8408 -2454.31 177.244 -46.6274 -2604.14 176.495 -46.5558 -2294.23 178.147 -49.9148 -1974.35 178.7 -46.8618 -2243.44 177.449 -45.3842 -2513.59 178.428 -45.1763 -2624.07 177.471 -46.87 -2456.72 177.006 -46.9026 -2276.7 175.564 -46.5646 -2084.96 176.582 -46.8171 -2236.56 178.143 -47.1166 -1677.16 176.198 -46.466 -2154.93 177.349 -45.1141 -2235.67 175.222 -46.5916 -1843.41 175.898 -46.5131 -2240.82 176.416 -46.3021 -2190.54 176.378 -46.0521 -2233.16 174.324 -46.3595 -1887.98 176.168 -46.7393 -2174.48 176.669 -47.0791 -1908.63 176.006 -46.2107 -2025.09 176.125 -45.9044 -1981.39 175.777 -46.78 -1833 176.334 -47.0284 -2000.93 174.887 -46.6194 -1886.9 176.426 -45.4586 -2106.15 175.566 -46.1473 -1896.7 176.884 -45.1363 -1780.51 175.772 -45.9219 -1781 174.659 -46.442 -1872.87 173.14 -45.9787 -1656.94 174.227 -46.1258 -1739.23 178.482 -47.0789 -1812.63 174.381 -46.5531 -1799.16 175.154 -46.1392 -1757.9 174.56 -46.1895 -1750.11 173.503 -46.4393 -1674 177.256 -47.0888 -1659.34 178.86 -47.1201 -1509.41 175.41 -46.803 -1761.78 176.458 -47.2263 -1668.28 177.553 -47.1444 -1471.44 176.249 -45.6727 -1817.85 175.066 -46.8049 -1802.14 175.92 -45.6963 -1705 177.856 -47.2196 -1224.78 176.257 -45.257 -1403.81 176.559 -49.9051 -1600.74 174.814 -46.0391 -1710.45 173.604 -46.6981 -1545.96 175.397 -45.9062 -1728.05 173.897 -46.8682 -1702.22 174.486 -45.9272 -1695.07 172.905 -46.6423 -1558.88 175.96 -45.2488 -1332.99 172.859 -45.9209 -1464.41 172.701 -46.4996 -1535.18 176.163 -47.2785 -1470.46 174.107 -45.887 -1670.96 175.578 -45.6944 -1525.4 173.226 -46.605 -1519.46 174.856 -46.9818 -1437.05 174.111 -46.5234 -1691.69 174.548 -46.8937 -1419.65 175.048 -45.8795 -1572.57 176.039 -45.458 -1427.34 177.85 -49.8736 -1073.79 173.583 -46.9506 -1475.65 176.699 -47.3112 -1180.52 175.217 -47.0537 -1386.74 173.766 -45.8615 -1578.91 176.978 -47.1896 -1214.99 173.316 -46.8427 -1462.96 174.237 -46.7528 -1517.09 176.259 -49.824 -1446.03 174.776 -45.8411 -1574.55 175.941 -47.4737 -1398.95 175.738 -45.5305 -1479.78 172.555 -45.876 -1395.33 173.946 -45.6579 -1525.74 175.799 -47.2581 -1408.37 176.447 -45.0386 -1509.83 178.346 -47.2743 -1131.31 173.832 -47.0984 -1581.5 176.063 -45.067 -1357.28 175.724 -45.3422 -1341.43 175.236 -45.6779 -1424.68 176.827 -49.8415 -1311.32 176.576 -49.7259 -1574.02 173.425 -47.3688 -1447.13 173.62 -47.5265 -1381.24 175.796 -47.6399 -1449.21 173.323 -47.5471 -1404.61 173.774 -47.3298 -1434.65 173.618 -45.6423 -1431.91 173.186 -45.426 -1464.09 172.924 -45.3824 -1479.26 173.515 -47.1678 -1468.29 173.219 -47.694 -1426.66 173.069 -46.7847 -1471.04 173.171 -47.2071 -1396.07 173.17 -47.4147 -1393.25 176.663 -49.5402 -1312.06 173.048 -47.5665 -1400.27 172.865 -47.376 -1386.34 172.964 -47.763 -1379.23 174.041 -47.2296 -1402.33 174.207 -47.0355 -1345.34 174.33 -47.2742 -1320.81 177.167 -49.9438 -1341.62 175.428 -45.4596 -1325.97 176.319 -49.5628 -1391.79 174.917 -47.205 -1289.39 173.891 -47.5131 -1349.14 172.747 -47.6041 -1385.66 174.123 -45.4329 -1356.93 175.852 -47.836 -1460.17 174.581 -47.1264 -1343.86 173.488 -47.7056 -1322.45 174.095 -47.4048 -1336.2 172.464 -47.085 -1414.93 172.918 -48.0067 -1264.35 176.823 -49.6682 -1241.89 175.704 -45.1119 -1279.67 173.29 -47.8898 -1311.15 174.913 -45.6733 -1341.98 175.634 -47.4758 -1250 175.181 -47.2913 -1252.47 173.841 -47.7014 -1299.84 173.601 -45.2523 -1331.76 172.902 -45.2056 -1429.58 176.519 -49.3609 -1249.04 175.965 -49.8272 -1202.16 172.591 -47.8326 -1365.63 176.782 -49.3784 -1154.94 174.134 -47.6022 -1298.31 175.498 -47.7209 -1339.65 176.432 -47.4255 -1507.53 174.978 -47.4406 -1164.47 172.418 -47.6194 -1380.46 174.654 -47.3546 -1364.84 173.665 -47.8804 -1278.57 175.485 -45.2522 -1291.64 175.815 -48.0348 -1360.36 173.237 -48.0965 -1232.28 172.597 -48.0479 -1272.41 175.462 -47.2684 -1254.16 177.566 -49.9193 -1223.85 176.196 -47.5017 -1325.59 176.056 -47.6604 -1299.27 173.942 -47.881 -1252.42 174.159 -47.8028 -1262.21 176.014 -49.6683 -1259.7 175.061 -45.4681 -1198.07 177.066 -49.7183 -1107.08 177.366 -49.7416 -1110.16 173.412 -45.0967 -1241.48 174.399 -47.4904 -1292.77 178.95 -49.4997 -1248.9 173.892 -48.0369 -1217.36 173.05 -48.2465 -1061.1 175.972 -48.1812 -1273.84 172.742 -48.1993 -1058.21 175.545 -47.9682 -1259.13 175.206 -45.2633 -1218.28 175.073 -47.7097 -1224.43 175.272 -47.9018 -1213.6 176.445 -49.1549 -1201.19 176.674 -49.002 -1209.79 176.907 -48.8602 -1240.85 177.132 -48.7201 -1255.2 176.095 -47.9913 -1356.33 176.16 -47.8147 -1219.39 175.305 -47.4853 -1183.02 173.571 -48.0932 -1222.03 176.128 -48.3326 -1481.46 176.337 -48.1588 -1422.36 176.087 -48.55 -1317.55 175.852 -48.375 -1172.57 177.059 -48.5274 -1266.65 177.012 -48.3248 -1262.09 176.961 -48.1288 -1268.83 176.83 -48.6761 -1298.81 176.739 -48.4704 -1314.01 176.688 -48.2523 -1341.92 176.406 -48.404 -1388.98 177.324 -48.5907 -1223.97 174.709 -47.5887 -1220.72 174.424 -47.7053 -1287.84 174.719 -47.8287 -1121.52 176.68 -48.0402 -1320.66 177.332 -48.4102 -1243.82 176.645 -48.826 -1257.6 176.458 -48.66 -1327.71 176.367 -48.9277 -1207.03 176.197 -49.1105 -1164.86 176.153 -48.7702 -1210.31 175.996 -48.9704 -1116.41 175.885 -48.748 -1078.24 176.408 -47.9153 -1277.02 174.158 -47.9868 -1215.55 176.735 -49.2061 -1166.36 176.967 -49.0556 -1166.01 176.925 -47.9704 -1285.22 176.194 -49.3154 -1211.5 177.144 -48.0167 -1215.83 176.745 -47.8085 -1094.79 175.619 -48.1994 -1133.31 176.981 -49.5151 -1057.18 175.365 -45.0842 -1223.44 177.204 -48.9103 -1191.53 176.025 -49.4904 -1169.7 174.423 -47.9192 -1223.29 173.86 -48.1954 -1168.81 175.999 -49.1781 -1094.51 177.043 -49.2783 -1074.18 177.305 -48.1722 -1229.85 174.988 -47.9698 -1178.09 178.266 -49.737 -1187.99 177.472 -48.7649 -1173.05 178.644 -47.2607 -975.72 177.258 -49.1081 -1070.63 175.254 -48.1179 -1288.04 175.727 -49.934 -1142.55 177.628 -48.548 -1164.3 177.23 -49.5944 -1037.79 177.666 -48.3052 -1155.38 177.497 -48.9858 -1019.85 174.317 -45.1056 -1120.39 177.096 -47.8513 -1113.09 178.083 -47.3013 -1095.45 174.378 -48.0906 -1187.66 172.415 -48.2057 -1090.1 176.39 -47.6703 -1154.23 174.153 -48.1898 -1152.18 174.676 -48.0745 -1074.21 175.749 -48.5685 -1060.75 173.379 -48.2614 -1089.36 177.625 -47.3565 -974.72 177.761 -48.7207 -1133.66 175.067 -45.0688 -1155.76 175.558 -48.4183 -996.61 173.684 -48.3032 -1064.06 177.592 -48.1037 -1114.78 175.364 -48.3063 -1048.71 177.322 -49.2683 -1029.66 177.898 -48.4536 -1101.24 177.296 -47.3216 -898.95 174.955 -48.1579 -1132.9 175.783 -49.7429 -994.17 174.854 -45.2548 -1089.58 175.879 -49.343 -1004.29 177.264 -49.4284 -1048.27 173.99 -48.3543 -1013.57 177.477 -49.5559 -1044.46 172.625 -48.361 -987.29 177.893 -47.4118 -953.31 177.758 -48.8857 -1141.45 177.404 -47.9509 -1065.07 174.566 -45.1619 -1027.7 174.48 -48.2541 -1111.72 177.952 -48.6199 -1078.79 177.861 -48.1214 -1021.69 177.523 -49.1762 -935.85 172.846 -48.3398 -949.2 175.653 -48.7279 -940.24 177.678 -49.7182 -975.29 172.367 -48.4144 -951.33 177.725 -47.9589 -994.92 174.301 -48.3973 -997.8 175.728 -49.1513 -929.22 177.768 -49.0847 -1066.25 175.39 -49.9378 -941.64 174.777 -48.2908 -988.64 175.089 -48.3321 -929.26 177.998 -48.7943 -990 175.688 -48.9108 -924.35 178.056 -48.2928 -997.2 177.525 -49.3633 -1000.56 175.747 -49.5523 -956.12 177.986 -47.9648 -967.84 178.475 -49.633 -903.43 177.77 -49.2749 -978.17 177.796 -49.4954 -945.22 177.986 -49.7056 -883.11 175.309 -48.4669 -884.84 178.165 -49.5269 -812.81 177.997 -49.36 -878.99 173.226 -48.417 -900.65 173 -48.4098 -924.16 176.703 -47.5505 -804.76 177.708 -47.5073 -874.34 178.768 -49.3221 -890.3 178.053 -48.9947 -956.61 177.6 -47.8139 -976.66 178.138 -48.1028 -917.73 178.404 -49.4542 -741.55 177.647 -47.6574 -922.12 173.51 -48.44 -884.51 178.652 -49.4861 -929.48 176.98 -47.4249 -802.3 178.202 -48.4959 -948.62 178.008 -49.191 -974.65 177.011 -47.6499 -825 174.605 -48.4451 -946.49 175.495 -48.6051 -908.56 178.223 -48.7 -911.69 175.606 -49.3595 -840.75 174.118 -48.5674 -840.84 178.244 -49.3115 -802.35 177.347 -47.7116 -877.39 172.812 -48.4826 -918.56 173.796 -48.4846 -891.68 173.357 -48.582 -750.88 174.889 -48.4791 -857.7 175.511 -49.73 -931.51 175.113 -48.5134 -828.25 178.217 -49.1421 -962.45 178.232 -48.8633 -897.57 178.855 -47.2881 -781.59 173.059 -48.5841 -831.34 175.151 -49.9064 -877.5 175.476 -49.2279 -780.93 172.572 -48.5342 -901.74 178.502 -49.3245 -904.98 177.912 -47.5914 -893.18 174.45 -48.5954 -839.35 177.876 -47.7904 -912.82 178.386 -49.1947 -973.83 178.38 -49.0237 -646.91 178.324 -48.3469 -884.61 174.898 -49.9729 -807.73 175.255 -48.6384 -798.27 178.492 -48.8212 -849.07 178.485 -48.6153 -824.63 175.422 -48.8092 -780.97 177.473 -47.5137 -856.61 175.452 -49.5214 -854.86 178.51 -48.445 -791.49 172.76 -48.6766 -839.87 172.343 -48.5913 -762.38 177.221 -47.5243 -745.5 178.586 -49.172 -1040.84 178.225 -47.9522 -721.71 178.334 -48.2069 -850.73 175.429 -49.0473 -750.75 174.599 -49.9332 -796.21 174.758 -48.6524 -658.65 175.357 -49.3612 -732.82 178.653 -49.0003 -983.73 175.024 -48.6409 -771.36 173.613 -48.6043 -749.78 173.865 -48.6677 -742.12 178.213 -47.4821 -757.68 175.263 -49.7892 -692.39 178.845 -49.151 -867.16 178.107 -47.8461 -801.14 173.48 -48.7117 -677.29 178.521 -47.415 -657.8 178.747 -48.8594 -798.52 175.159 -48.7839 -713.98 178.157 -47.697 -667.35 178.908 -48.9767 -697.83 173.259 -48.7678 -690.28 178.549 -48.294 -694.75 178.747 -48.7063 -777.79 175.268 -49.2088 -649.17 172.981 -48.7888 -756.59 174.334 -48.7402 -737.11 175.259 -49.635 -692.24 174.098 -48.7667 -687.62 178.385 -48.0585 -650.66 174.402 -49.8807 -664.16 178.576 -48.1513 -588.71 174.578 -48.7733 -686.48 178.813 -49.6933 -590.39 178.745 -48.5372 -736.35 172.503 -48.6962 -727.46 174.961 -48.7702 -749.17 174.465 -48.8646 -673.41 174.467 -48.9915 -599.21 174.285 -48.8906 -627.16 174.814 -48.8519 -661.65 174.646 -48.9353 -612.12 175.244 -49.4842 -716.78 175.037 -48.9103 -700.66 175.157 -49.0598 -617.74 175.068 -49.1854 -592.22 175.244 -48.925 -678.84 178.755 -48.3809 -643.44 175.026 -49.7454 -638.08 172.79 -48.8368 -705.41 173.68 -48.7658 -635.62 174.76 -49.7789 -652.6 174.084 -48.9239 -660.71 173.896 -48.8338 -651.82 173.499 -48.8503 -621.06 174.878 -49.0618 -597.6 175.112 -49.3492 -617.14 175.057 -49.5398 -619.22 174.643 -49.0701 -545.89 174.534 -49.7717 -647.26 178.761 -47.3944 -578.94 173.116 -48.9236 -657.79 172.318 -48.7247 -635.4 174.926 -49.2473 -535.25 173.329 -48.9402 -614.01 174.26 -49.0566 -563.82 172.611 -48.8275 -664.57 174.19 -49.8844 -609.71 174.488 -49.1386 -548.18 174.333 -49.7564 -578.08 178.487 -47.5613 -491.89 174.031 -49.053 -576.71 173.92 -48.9563 -610.04 172.904 -48.9442 -637.88 178.807 -48.2342 -547.28 173.728 -48.9321 -582.04 178.343 -47.6296 -569.72 174.84 -49.6031 -551.84 173.526 -49.0082 -564.63 174.33 -49.2223 -528.23 173.977 -49.8972 -579.64 178.297 -47.8235 -562.54 174.704 -49.2257 -509.39 173.211 -49.0341 -585.89 172.404 -48.8413 -589.91 174.854 -49.4096 -522.76 173.773 -49.9584 -577.27 173.363 -49.0796 -555.6 173.863 -49.0389 -558.15 174.637 -49.6343 -559.44 172.706 -48.9572 -587.01 174.176 -49.7447 -545.71 174.131 -49.1795 -527.94 173.03 -49.0826 -566.85 173.564 -49.9245 -539.51 174.439 -49.635 -533.93 174.507 -49.2703 -514.91 173.711 -49.0924 -523.84 178.448 -47.9228 -458.51 178.696 -47.5202 -410.12 178.787 -48.0975 -419.81 173.915 -49.1719 -525.38 173.666 -49.8181 -507.72 172.518 -48.9732 -529.17 174.694 -49.5083 -511.69 174.039 -49.782 -540.61 174.232 -49.6217 -499.93 173.222 -49.1509 -537.18 173.359 -49.9673 -518.4 172.814 -49.0802 -537.21 172.298 -49.0009 -499.02 174.614 -49.3843 -489.43 178.502 -47.685 -408.67 174.391 -49.3813 -475.96 173.365 -49.1896 -516.64 178.357 -47.7274 -524.53 173.52 -49.1534 -508.9 173.477 -49.8184 -504.82 174.042 -49.2679 -505.63 174.192 -49.3104 -483.71 173.693 -49.2616 -485.84 174.526 -49.51 -492.65 173.855 -49.8055 -524.28 173.588 -49.723 -489.36 173.12 -49.9271 -505.12 174.354 -49.521 -478.36 174.085 -49.6787 -507.11 174.175 -49.4592 -466.25 174.036 -49.573 -475.43 172.506 -49.9468 -483.94 173.93 -49.6814 -493.88 172.634 -49.8529 -480.49 172.704 -49.7612 -467.39 172.742 -49.9956 -491.92 172.663 -49.6662 -451.83 172.777 -49.5744 -445.41 172.815 -49.8351 -480.31 172.831 -49.706 -460.94 172.924 -49.4541 -450.51 172.965 -49.3184 -475.04 172.632 -49.0845 -495.78 172.901 -49.2067 -500.18 173.084 -49.2348 -506.85 173.121 -49.3721 -475.42 173.149 -49.5138 -465.57 173.201 -49.6604 -478.71 173.322 -49.5604 -471.78 173.271 -49.8056 -501.17 173.427 -49.6744 -484.68 172.936 -49.9111 -495.45 173.028 -49.7813 -482.58 172.988 -49.6157 -458.99 173.264 -49.2781 -497.25 173.338 -49.4198 -472 173.454 -49.286 -485.89 173.488 -49.5256 -466.57 173.565 -49.4002 -465.39 173.62 -49.6126 -474.28 173.652 -49.4996 -463.95 173.746 -49.6997 -484.25 173.819 -49.5577 -468.8 173.763 -49.4128 -473.71 173.906 -49.3199 -489.58 173.962 -49.4464 -471.27 174.056 -49.3603 -484.46 178.613 -48.0172 -433.95 172.721 -49.196 -478 172.354 -49.9158 -474.88 172.557 -49.7426 -463.69 172.585 -49.562 -435.46 172.796 -49.3207 -460.24 172.664 -49.436 -437.37 178.492 -47.7993 -396.79 178.892 -47.4951 -227.81 172.516 -49.6483 -442.49 172.451 -49.8317 -466.12 178.813 -47.9821 -314.17 172.574 -49.1846 -456.15 172.482 -49.4768 -422.86 172.461 -49.109 -459.75 172.29 -49.1566 -393.87 172.364 -49.7049 -441.04 172.611 -49.2931 -444.37 178.677 -47.6436 -301.12 178.674 -47.8862 -340.16 172.403 -49.5717 -423.69 172.46 -49.3667 -416.51 178.856 -47.6084 -173.25 172.443 -49.2356 -419.01 178.849 -47.8986 -256.64 172.297 -49.4512 -406.14 178.669 -47.759 -313.16 172.258 -49.3009 -368.63 178.824 -47.8184 -237.87 178.83 -47.7163 -179.83 185.469 -48.637 -5237.58 185.764 -49.3427 -5344.89 185.248 -48.2252 -5289.29 185.123 -49.3903 -5284.97 184.568 -49.4984 -5093.01 184.551 -49.8662 -4854.93 185.506 -47.3014 -5063.62 184.818 -47.8775 -5018.25 184.906 -48.6225 -5190.36 184.753 -47.4359 -5007.49 185.312 -48.986 -5303.68 184.473 -48.2193 -5159.1 184.267 -47.7321 -5012.93 184.862 -46.9925 -4963.59 184.595 -49.0498 -5171.52 185.435 -46.7679 -4776.29 183.783 -48.0214 -4849.94 183.993 -48.8869 -5136.62 184.302 -46.7231 -4897.1 183.485 -48.7578 -5006.16 183.165 -47.8452 -4895.43 184.831 -46.6304 -4779.51 183.022 -47.4136 -4728.18 183.472 -47.0867 -4884.1 183.682 -46.6928 -4798.87 183.229 -48.3299 -4972.01 184.02 -49.3067 -4939.25 185.104 -46.3434 -4705.88 184.508 -46.3312 -4577.85 185.73 -46.3713 -4536.03 182.805 -47.0099 -4701.36 182.944 -48.7357 -4980.45 183.099 -46.6824 -4611.98 181.596 -49.4258 -3820.96 182.6 -47.6899 -4774.3 182.448 -47.3027 -4670.19 182.548 -46.6406 -4542.37 182.421 -48.7713 -4797.1 181.337 -49.6667 -4047.29 181.423 -47.8641 -3914.94 183.925 -46.3439 -4734.1 182.241 -46.9333 -4589.04 185.369 -45.9901 -4532.31 184.762 -45.9816 -4218.87 182.043 -47.5839 -4753 181.754 -49.751 -4079.68 184.174 -49.6504 -4368.95 182.81 -46.3437 -4542.87 181.676 -46.8674 -4516.85 185.655 -45.6575 -4336.89 185.415 -45.3267 -4391.94 182.215 -49.0638 -4508.67 181.728 -49.1122 -4191.77 180.931 -49.7579 -4068.04 182.256 -49.8421 -3626.09 182.556 -46.0476 -4394.28 183.598 -45.9678 -4201.66 181.065 -49.4449 -3760.98 183.476 -49.3534 -3780.7 185.018 -45.611 -4328.82 184.568 -45.3557 -3737.67 182.428 -49.3227 -4082.5 184.412 -45.6893 -3995.59 182.699 -49.0556 -4456.82 183.581 -45.5872 -3974.4 182.949 -49.3927 -3444.23 184.029 -45.4105 -3436.72 184.25 -45.0785 -3090.4 180.474 -46.1091 -3382.69 182.579 -49.6172 -2689.6 183.582 -45.2726 -2806.67 181.252 -47.2959 -3285.82 179.475 -49.8791 -2656.21 180.984 -45.4155 -2906.93 183.192 -45.3956 -2961.13 181.558 -45.2687 -3010.12 179.718 -46.3123 -3324.63 182.257 -45.2134 -2725.31 181.214 -45.2108 -2720.53 180.179 -45.9199 -3227.65 182.778 -45.2161 -2420.61 179.394 -46.4876 -3184.98 183.757 -49.6249 -2152.66 178.994 -46.6171 -2700.34 180.892 -48.6874 -2388.09 179.827 -45.7293 -2960.4 179.731 -49.4849 -1902.67 181.857 -45.0928 -2273.56 179.402 -46.7546 -2808.59 181.222 -48.0858 -3785.37 180.73 -49.1599 -2566.98 179.874 -45.4162 -2521.61 181.14 -48.512 -3078.13 180.918 -47.3965 -2021.88 179.728 -46.8868 -2647.79 179.97 -45.2069 -2698.32 179.093 -46.9182 -2308.91 180.865 -45.1779 -2513.15 180.236 -45.3002 -2496.35 182.962 -49.6949 -1469.31 179.882 -45.054 -2542.78 180.995 -48.2816 -2053.54 181.239 -47.6002 -2031 182.76 -49.8986 -1701.88 179.432 -47.0079 -2038.01 179.475 -49.438 -1529.79 180.515 -45.1341 -2374.84 180.168 -45.0542 -2166.03 180.632 -48.8584 -2056.31 180.259 -49.2574 -2232.95 184 -49.9501 -2521.21 180.322 -48.9903 -1240.23 179.717 -47.1284 -1551.64 180.617 -47.2497 -2226.03 179.898 -49.2987 -1473.49 179.594 -49.3021 -1391.26 183.318 -49.6375 -1487.73 180.773 -48.4773 -1246.27 183.571 -49.8504 -1538.78 179.194 -47.1421 -1471.9 179.322 -49.3025 -1167.56 179.988 -49.086 -1106.95 180.583 -48.6469 -1146.54 183.208 -49.8933 -1380.52 180.826 -47.6335 -1436.26 180.731 -48.3055 -1490.91 180.02 -48.8672 -889.98 180.332 -47.3591 -975.52 180.59 -47.4683 -1207.29 180.305 -48.7452 -916.72 179.696 -49.1369 -1072.83 179.457 -47.2172 -1131.82 181.003 -47.8568 -1316.8 180.897 -48.0781 -939.42 180.775 -48.1911 -1361.7 179.44 -49.1514 -778.19 180.384 -48.5852 -832.85 179.724 -48.9451 -823.06 180.003 -47.2755 -1047.53 179.046 -49.315 -1142 180.522 -48.5105 -981.78 180.547 -48.3734 -869.16 179.782 -48.7508 -791.18 180.012 -48.6799 -738.49 180.355 -47.5266 -587.81 179.049 -47.272 -819.46 180.184 -48.5759 -713.51 179.542 -49.0344 -720.63 179.267 -47.3027 -599.33 179.676 -47.3436 -544.39 180.71 -47.7882 -833.42 179.54 -48.794 -774.97 179.144 -49.1183 -712.71 180.325 -48.4477 -715.11 179.815 -48.6059 -663.09 179.49 -48.9249 -704.45 180.563 -48.1951 -837.52 179.581 -48.6129 -722.57 179.967 -48.528 -601.49 179.333 -48.8487 -668.89 179.162 -48.773 -686.78 178.958 -48.807 -699.46 179.348 -49.001 -595.82 179.138 -48.9222 -630.97 180.688 -48.0806 -673.91 180.718 -47.9434 -650.39 179.049 -48.6162 -723.41 179.334 -48.6957 -721.72 180.117 -48.4513 -598.07 180.512 -47.6679 -690.74 178.938 -48.4609 -654.12 180.355 -48.2786 -567.83 179.733 -48.4576 -541.38 180.11 -47.5009 -515.16 180.156 -48.3285 -532.45 179.332 -48.5353 -647.14 180.517 -47.8424 -605.73 178.979 -48.3417 -566.96 179.94 -48.3628 -520.13 179.511 -48.4645 -579.47 179.866 -47.4595 -492.19 179.446 -47.3668 -384.72 179.142 -48.4399 -593 180.345 -48.1188 -471.32 180.178 -48.191 -449.28 180.256 -47.6433 -319.2 179.019 -48.2413 -430.25 180.495 -48.0058 -465.83 179.352 -48.3914 -492.8 179.738 -48.3029 -414.07 180.333 -47.7729 -372.28 180.014 -48.2344 -446.57 180.362 -47.8909 -401.73 179.855 -48.2367 -394.59 179.542 -48.3314 -394.83 179.191 -48.2971 -404.29 180.283 -47.9826 -392.58 180.174 -47.7384 -268.44 180.06 -47.6552 -290.94 180.168 -48.0635 -390.94 179.696 -47.4802 -381.01 180.191 -47.8573 -342.83 180.03 -48.1226 -362.49 178.969 -48.1508 -359.47 179.938 -47.5761 -284.49 180.039 -47.773 -287.02 178.955 -47.387 -215.02 179.373 -48.2852 -309.21 180.134 -47.9625 -334.94 179.141 -48.1809 -296.21 179.912 -48.1613 -313.72 180.012 -47.8892 -267.29 179.621 -48.224 -237.81 179.138 -47.3877 -287.26 179.782 -47.5717 -233.88 179.554 -47.4534 -221.43 179.308 -48.1981 -259.95 180.019 -48.0082 -290.98 179.303 -47.4159 -140.65 179.736 -48.2124 -279.08 179.92 -47.8041 -228.2 179.87 -48.0639 -231.37 179.09 -48.0985 -244.2 179.872 -47.6931 -208.09 179.791 -48.1488 -232.26 178.963 -48.0485 -251.32 178.991 -47.9422 -218.07 178.941 -47.8601 -204.82 178.964 -47.783 -144.77 178.992 -47.6852 -127.51 179.026 -47.5806 -155.51 179.064 -47.4795 -152.94 179.413 -48.1187 -209.82 179.373 -48.0412 -183.26 179.515 -48.0364 -185.56 179.41 -47.9696 -171.72 179.565 -48.135 -213.68 179.52 -47.9508 -173.43 179.449 -47.893 -176.9 179.638 -47.9698 -182.37 179.36 -47.8258 -160.89 179.586 -47.8887 -174.04 179.502 -47.8163 -162.77 179.409 -47.7479 -134.52 179.442 -47.6697 -152.24 179.55 -47.7355 -152.08 179.648 -47.8086 -175.53 179.579 -47.6516 -142.73 179.461 -47.5846 -148.19 179.743 -47.8953 -191.85 179.696 -47.7208 -163.94 179.608 -47.5563 -185.49 179.478 -47.5132 -157.95 179.422 -47.4523 -159.68 179.709 -47.6395 -161.05 179.792 -47.7981 -195.75 179.335 -47.5129 -153.48 179.323 -47.6103 -151.77 179.325 -47.688 -147.08 179.267 -47.7529 -143.71 179.315 -47.9074 -171.29 179.174 -47.6614 -147.31 179.217 -47.8377 -145.4 179.276 -47.993 -176.5 179.114 -47.7624 -141.24 179.167 -47.9258 -177.41 179.249 -48.0941 -205.86 179.065 -47.8519 -149.38 179.125 -48.0181 -195.52 179.469 -48.2139 -246.76 179.68 -48.158 -205.18 179.689 -48.0697 -195.31 179.766 -47.9882 -195.55 179.873 -47.8672 -212.05 179.884 -47.9511 -215.18 179.185 -47.5526 -140.28 179.202 -47.4698 -177.69 189.107 -48.3229 -5290.17 190.573 -49.4624 -5289.63 191.19 -49.6369 -5242.3 190.995 -49.2264 -5312.22 187.739 -49.1883 -5454.67 187.383 -48.9159 -5481.74 188.127 -49.5632 -5275.16 190.673 -49.8317 -5170.62 189.009 -47.9235 -5235.84 186.814 -48.8684 -5496.65 187.217 -48.583 -5322.79 187.967 -48.74 -5322.44 190.458 -49.1397 -5207.88 188.405 -48.2173 -5306.02 187.062 -49.8303 -5180.9 187.005 -48.2493 -5274.58 188.914 -47.5561 -5191.76 192.142 -45.8279 -5314.46 191.297 -48.9777 -5279.55 186.797 -49.4566 -5384.66 192.315 -46.5514 -5315.45 189.615 -48.1555 -5255.62 188.486 -49.1923 -5221.44 187.603 -48.2748 -5301.18 191.943 -46.1315 -5441.95 191.875 -49.8429 -5221.56 186.563 -47.9422 -5294.7 188.398 -47.6919 -5155.23 190.185 -49.6425 -5255.96 187.202 -47.9954 -5307.95 189.568 -47.6495 -5200.62 192 -45.4151 -5268.84 188.495 -47.2761 -5181.49 189.559 -48.5919 -5228.21 187.754 -49.885 -5243.07 191.655 -45.7308 -5196.51 188.904 -48.763 -5256.12 191.653 -46.508 -5355 186.482 -48.4427 -5231.48 186.613 -49.1433 -5362.04 191.326 -46.0377 -5274.47 189.104 -47.2394 -5227.04 190.733 -48.8081 -5251.41 192.125 -47.0244 -5418.64 187.091 -47.6317 -5241.11 190.847 -47.8582 -5008.84 191.439 -45.3783 -5330.93 190.889 -46.3835 -5398.7 190.715 -45.8726 -5287.54 190.063 -48.877 -5263.76 187.752 -47.8593 -5195.08 191.323 -48.6296 -5361.14 191.102 -45.5999 -5368.66 186.992 -47.2078 -5087.93 191.346 -46.925 -5404.58 190.236 -47.9915 -5249.59 189.539 -48.9591 -5290.37 188.699 -46.9009 -5096.97 190.171 -48.4558 -5332.55 191.39 -48.1961 -5274.08 189.626 -49.639 -5262.78 186.307 -49.7184 -5376.33 191.705 -49.318 -5337.77 191.73 -48.9065 -5233 190.288 -47.5141 -5145.03 190.359 -47.1344 -5308.34 190.126 -46.8366 -5373.97 190.326 -46.0911 -5410.98 190.22 -46.471 -5440.89 190.128 -45.7086 -5194.88 189.767 -47.1279 -5312.36 189.244 -49.2488 -5224.9 188.89 -49.6124 -5208.13 189.955 -45.2597 -5216.98 185.894 -48.0909 -5114.43 189.1 -45.8425 -4931.29 186.355 -47.4028 -5193.67 185.964 -47.0344 -5080.25 191.407 -47.7792 -5288.31 192.037 -48.0308 -5273.36 190.543 -45.4203 -5298.04 189.953 -49.2888 -5217.81 191.926 -48.5566 -5259.94 185.826 -48.4602 -5258.32 186.307 -49.3104 -5324.45 186.056 -48.891 -5310.28 190.654 -46.8468 -5273.62 189.549 -45.5811 -5106.89 189.221 -46.8823 -5201.39 189.608 -46.5998 -5362.95 191.726 -47.4549 -5416.9 187.752 -47.3609 -5200.11 186.469 -47.0048 -5212.5 186.888 -46.9087 -4928.08 190.946 -47.343 -5359.02 188.055 -46.9258 -5299.41 189.177 -46.233 -5034.72 189.054 -45.4582 -5018.26 188.282 -46.5361 -5222.44 187.398 -46.9378 -4992.87 188.928 -46.5436 -5278.07 186.098 -46.7224 -5026.4 190.801 -48.3223 -5328.93 186.582 -46.7384 -5078.73 189.719 -46.0682 -5230.21 187.621 -46.5788 -4992.77 188.545 -46.0985 -5265.36 187.007 -46.6394 -5038.7 189.349 -45.1534 -5124.63 188.558 -45.5848 -5005.53 187.807 -46.1786 -5064.24 187.949 -45.7366 -4927.86 187.139 -46.2627 -4960.61 186.454 -46.3837 -4881.16 188.031 -45.2706 -4813.19 187.274 -45.8366 -4862.78 188.672 -45.1021 -4777.24 187.416 -45.402 -4779.64 186.628 -45.9455 -4695.11 187.537 -45.046 -4655.49 185.995 -46.0062 -4752.87 185.986 -45.3563 -4790.1 186.68 -45.4664 -4733.28 186.186 -45.6878 -4612.26 186.978 -45.0692 -4400.74 193.002 -45.9285 -5306.46 192.604 -46.1489 -5381.16 192.97 -46.6118 -5274.05 193.285 -46.2751 -5411.8 193.008 -45.6327 -5246.7 192.568 -45.7163 -5346.34 193.324 -45.3284 -5475.17 192.688 -46.9096 -5271.97 193.544 -45.8665 -5337.75 193.935 -46.3669 -5423.63 192.634 -45.3031 -5475.8 193.885 -45.5661 -5353.54 192.748 -47.2508 -5232.33 193.623 -46.7324 -5498.39 192.498 -47.6268 -5259.21 193.282 -47.1095 -5317.36 192.417 -49.5715 -5261.94 194.583 -46.4836 -5240.06 193.103 -49.7917 -5205.4 192.939 -49.3979 -5177.31 193.91 -45.2142 -5371.37 192.382 -49.0469 -5217.07 194.316 -45.9492 -5189.71 192.672 -48.0732 -5227.34 193.165 -47.5934 -5250.49 194.262 -46.8116 -5162.55 193.231 -49.0391 -5141.26 192.661 -48.5185 -5149.82 193.027 -47.9245 -5195.82 194.337 -45.5042 -5360.95 193.552 -49.5266 -5124.58 193.325 -48.6416 -5225.76 193.991 -47.1496 -5393.24 193.169 -48.2838 -5129.15 194.534 -45.1238 -5231.94 193.831 -47.5596 -5257.92 193.818 -49.9618 -5236.76 193.646 -48.0335 -5234.01 195.086 -46.5885 -5151.48 193.856 -48.8791 -5265.42 194.989 -46.2009 -5430.53 193.752 -48.4843 -5192.84 194.902 -46.9305 -5164.43 194.503 -47.1383 -5124.65 195.024 -45.6777 -5419.17 193.976 -49.2807 -5229.46 195.176 -45.2263 -5472.37 194.187 -48.3255 -5185.61 194.347 -48.685 -5193.62 194.467 -47.4832 -5259.17 195.489 -46.8561 -4997 195.456 -46.091 -4997 194.444 -47.9695 -5178.94 195.516 -46.4547 -4997 194.474 -49.0978 -5256.39 196.609 -49.2939 -4997 196.952 -49.834 -4997 194.75 -48.4342 -5142.72 194.217 -49.6908 -5145.98 196.422 -47.0745 -4997 195.707 -45.488 -4997 198.491 -49.9653 -4997 197.659 -47.1349 -4997 194.89 -47.3166 -5201.16 195.449 -49.1585 -4997 195.126 -47.7392 -5108.76 198.871 -48.5514 -4997 195.932 -49.186 -4997 195.597 -48.9001 -4997 198.512 -48.2115 -4997 195.924 -47.0762 -4997 198.136 -48.4406 -4997 195.012 -48.8874 -5182.13 195.876 -47.7697 -4997 196.165 -47.4259 -4997 196.862 -48.1162 -4997 197.866 -49.2021 -4997 197.456 -47.4922 -4997 198.573 -49.5016 -4997 195.664 -48.1853 -4997 197.362 -49.4591 -4997 197.09 -48.9766 -4997 194.522 -49.4504 -5205.47 196.919 -48.4944 -4997 197.044 -47.0777 -4997 195.491 -47.2975 -4997 197.651 -48.7195 -4997 196.778 -47.4514 -4997 197.737 -49.8849 -4997 198.788 -45.8795 -4997 195.074 -48.1744 -5126.47 196.525 -47.7985 -4997 198.002 -49.6009 -4997 195.386 -48.5435 -5051.71 197.374 -46.662 -4997 198.518 -48.955 -4997 196.34 -48.1796 -4997 198.118 -46.4639 -4997 197.152 -47.8456 -4997 196.011 -46.7319 -4997 196.163 -49.6119 -4997 196.196 -48.7133 -4997 198.571 -47.9237 -4997 198.258 -47.5008 -4997 198.197 -46.9683 -4997 198.897 -45.5032 -4997 195.556 -49.8348 -4997 195.633 -49.429 -4997 195.071 -49.377 -5303.02 198.444 -45.0797 -4997 198.218 -45.5228 -4997 194.853 -49.7812 -5217.16 196.609 -46.684 -4997 196.731 -46.2922 -4997 197.298 -46.0504 -4997 196.87 -45.5666 -4997 196.942 -45.083 -4997 197.932 -47.9537 -4997 197.682 -45.1394 -4997 197.51 -45.558 -4997 198.114 -45.9687 -4997 197.439 -48.2619 -4997 198.826 -46.3074 -4997 198.957 -46.8066 -4997 196.057 -46.2714 -4997 196.37 -45.8413 -4997 196.28 -45.2781 -4997 195.713 -45.866 -4997 200.154 -49.7584 -4997 204.294 -49.0325 -4997 200.972 -48.3167 -4997 200.49 -49.1448 -4997 199.465 -45.5534 -4997 200.982 -49.8101 -4997 201.197 -49.4167 -4997 201.711 -49.8545 -4997 202.502 -47.8626 -4997 204.086 -48.7091 -4986.81 205.108 -49.5645 -4997 203.052 -47.8989 -4997 205.573 -49.3231 -4997 201.105 -45.7437 -4997 199.97 -49.2737 -4997 200.783 -48.6482 -4997 201.376 -48.7249 -4997 201.762 -48.4405 -4997 199.967 -45.4128 -4997 205.337 -50.0037 -4997 200.969 -48.974 -4997 201.715 -45.8602 -4997 201.672 -49.1153 -4997 203.122 -48.6463 -4997 200.281 -48.4045 -4997 204.406 -49.7737 -4997 199.644 -48.5613 -4997 204.867 -45.6135 -4846.76 201.008 -45.2659 -4997 203.892 -49.2677 -4997 202.994 -49.0538 -4997 201.955 -47.8229 -4997 199.369 -48.9377 -4997 203.539 -49.5259 -4997 202.845 -49.5374 -4997 200.576 -45.4563 -4997 199.303 -49.9218 -4997 200.325 -45.1351 -4982.35 203.652 -48.8772 -4997 199.303 -49.381 -4997 204.933 -49.1644 -4997 199.709 -48.1207 -4997 202.688 -44.905 -4997 199.788 -45.0204 -4832.12 200.554 -49.4803 -4997 202.335 -49.2138 -4997 204.526 -49.3606 -4997 202.184 -48.155 -4997 200.344 -48.7838 -4997 204.653 -48.7719 -4902.68 200.992 -47.6738 -4997 200.318 -48.0248 -4997 202.927 -48.2488 -4997 200.822 -47.9217 -4997 202.509 -48.5656 -4997 205.451 -45.4992 -4997 199.296 -45.7969 -4997 203.559 -49.9969 -4997 199.07 -48.1868 -4997 202.056 -49.5204 -4997 202.576 -49.9848 -4997 201.468 -47.9903 -4997 205.431 -45.9173 -4835.23 202.097 -48.8546 -4997 199.95 -48.9398 -4997 199.823 -47.7864 -4997 199.62 -47.4537 -4997 200.344 -47.6176 -4997 199.44 -47.1272 -4997 199.631 -46.9145 -4997 200.006 -47.2067 -4997 199.547 -46.5774 -4997 199.433 -46.1482 -4997 203.578 -48.4955 -4997 203.54 -48.1176 -4928.07 203.485 -47.7631 -4796.22 201.536 -46.114 -4997 201.4 -46.3887 -4997 201.653 -46.7518 -4997 201.543 -47.1805 -4997 201.48 -47.5744 -4997 200.188 -46.8711 -4997 202.092 -47.5175 -4997 202.253 -47.1454 -4997 202.419 -46.7841 -4731.57 201.983 -46.4356 -4997 202.145 -46.1166 -4761.21 200.782 -47.2776 -4997 200.908 -46.8309 -4997 201.001 -46.5071 -4997 200.802 -46.1154 -4997 199.938 -45.8828 -4997 200.255 -46.4195 -4997 200.476 -45.724 -4997 201.651 -45.1868 -4667.88 205.369 -48.8894 -4900.75 204.328 -45.7288 -4489.01 201.627 -45.553 -4548.24 205.164 -45.0955 -4371.83 202.819 -47.5193 -4897.45 199.252 -45.1639 -4997 204.227 -48.3682 -4829.53 204.968 -48.4749 -4755.03 203.455 -47.3983 -4650.59 205.529 -48.5754 -4754.99 203.989 -47.9856 -4700.46 202.161 -45.7738 -4515.51 202.896 -47.1148 -4681.31 202.258 -45.1499 -3944.16 204.634 -48.0195 -4635.74 204.041 -47.6678 -4543.81 205.378 -48.2307 -4622.8 203.463 -47.0457 -4493.4 202.981 -46.8197 -4508.66 204.894 -46.0234 -4369.41 204.604 -47.5862 -4448.01 202.721 -46.4583 -4375.14 205.212 -47.8282 -4465.29 204.852 -45.2572 -3513.9 204.346 -46.1053 -4090.79 204.032 -47.3088 -4392.65 203.407 -46.6953 -4352.76 203.815 -45.8359 -3720.08 205.092 -47.4792 -4354.92 204.222 -45.2447 -3906.36 204.016 -46.9351 -4237.87 203.374 -45.1051 -3808.89 204.616 -47.2149 -4282.53 203.322 -46.3177 -4173.41 202.715 -46.0337 -4154.23 202.08 -45.4605 -3347.61 203.928 -46.5573 -4106.5 205.342 -47.1471 -4184.4 204.62 -46.7679 -4084.26 203.837 -46.1938 -3864.36 203.279 -45.9318 -3997 205.275 -46.7117 -3998.03 202.66 -45.6037 -3997 204.318 -46.4066 -3997 203.291 -45.5442 -3107.21 202.841 -45.2658 -4000.54 205.532 -46.3648 -3997 204.843 -46.4022 -3997 203.806 -45.4917 -3530.94 205.905 -49.7759 -4997 206.203 -49.4236 -4997 207.244 -45.8282 -4997 207.951 -46.267 -4997 207.832 -47.9145 -4997 208.12 -45.3718 -4997 208.847 -47.9407 -4997 209.357 -45.9904 -4997 208.723 -45.6948 -4997 207.359 -46.1707 -4997 206.831 -45.9333 -4997 208.688 -45.1568 -4997 207.633 -45.9328 -4997 208.222 -47.6048 -4997 205.728 -45.1495 -4997 208.421 -48.2075 -4997 206.721 -49.8121 -4997 207.771 -48.2815 -4997 209.44 -48.8416 -4997 205.87 -45.8429 -4603.18 206.76 -49.4119 -4997 206.378 -49.107 -4935.23 206.217 -45.6023 -4997 208.827 -48.6988 -4997 208.237 -48.5918 -4997 208.098 -44.8981 -4997 209.153 -48.3635 -4997 206.373 -45.1631 -4997 208.103 -45.8425 -4997 207.488 -47.5726 -4997 206.864 -45.533 -4997 207.177 -49.6649 -4997 206.838 -49.1242 -4997 207.027 -48.6155 -4997 207.217 -48.9821 -4997 207.132 -48.2878 -4992.02 207.281 -49.3717 -4997 207.567 -46.6262 -4997 207.455 -46.9918 -4997 207.65 -47.2917 -4997 207.084 -47.1656 -4868.6 207 -46.7556 -4935.69 206.912 -46.3434 -4997 207.765 -49.7347 -4997 206.974 -45.117 -4997 207.568 -45.041 -4997 207.686 -48.7284 -4997 208.453 -49.0419 -4997 208.436 -49.4012 -4997 207.878 -49.2717 -4997 208.26 -49.6181 -4997 209.436 -47.9977 -4687.52 209.163 -49.1726 -4997 207.507 -45.534 -4997 208.756 -49.6876 -4997 208.831 -49.3867 -4997 208.682 -46.2546 -4997 207.958 -47.0883 -4997 208.492 -47.2058 -4997 208.358 -46.7383 -4997 206.564 -48.7751 -4901.79 209.344 -45.4585 -4941.24 206.345 -46.0587 -4563.95 207.258 -47.9058 -4917.52 208.998 -47.5145 -4869.77 205.899 -49.1114 -4954.44 208.934 -46.6775 -4934.25 205.958 -48.8184 -4822.97 208.931 -47.0355 -4918.17 206.509 -48.3397 -4726.79 209.385 -46.4714 -4761.81 209.325 -49.6216 -4834.46 206.584 -46.8816 -4531.77 206.324 -46.487 -4390.97 206.821 -47.4991 -4580.88 209.472 -47.2035 -4699.69 205.972 -48.4635 -4667.9 209.338 -46.8426 -4763.04 209.581 -47.5997 -4651.04 206.515 -47.1525 -4378.24 206.487 -47.8648 -4552.5 205.878 -48.0474 -4494.46 205.906 -46.1372 -3788.74 205.684 -47.6194 -4335.93 205.959 -46.8615 -3997 206.125 -47.3545 -4212 157.375 -50.0929 -4374.69 157.235 -53.4204 -4077.04 157.192 -53.9136 -4242.36 157.126 -50.528 -4397.12 157.602 -53.0163 -4303.66 157.336 -54.2814 -4162.54 157.355 -50.7912 -4315.83 157.164 -51.4566 -4362.05 157.373 -51.1264 -4314.66 157.475 -52.1567 -4286.06 157.226 -51.8234 -4246.24 157.369 -52.5744 -4227.15 157.13 -54.5939 -3892.56 157.445 -54.817 -3689.8 161.266 -51.9689 -4090.79 163.513 -54.0584 -4157.05 159.382 -54.4813 -5073.17 161.372 -52.2531 -4979.17 159.45 -54.8101 -4804.19 161.403 -51.6797 -2347.59 159.535 -54.1069 -4552.96 160.776 -52.49 -3259.4 162.226 -50.173 -4296.02 161.843 -53.9002 -4011.39 160.832 -52.834 -3888.74 162.126 -51.566 -4481.16 161.872 -51.9568 -4393.68 161.223 -54.0436 -4577.13 159.544 -53.4892 -4033.34 159.948 -54.6544 -4476.19 159.986 -53.1897 -3582.12 162.122 -54.845 -4723.45 162.775 -54.6831 -4484.58 162.89 -54.2798 -4436.49 162.191 -54.4926 -4481.45 161.657 -54.2929 -4445.64 160.701 -53.1913 -4003.88 160.574 -54.7539 -4299.48 159.67 -53.7845 -4272.78 162.411 -53.7231 -4531.99 163.893 -52.2057 -4239.85 161.426 -54.7468 -4507.39 158.089 -50.0893 -4545.53 164.45 -52.3824 -3484.02 160.989 -54.4167 -4647.14 164.34 -52.7574 -3534.56 160.256 -53.5556 -4173.48 163.392 -52.0526 -4328.7 159.327 -50.6269 -4488.07 164.182 -53.097 -3502.75 160.006 -54.3052 -5020.32 157.914 -53.3691 -4489.29 159.564 -50.9207 -4501.88 163.494 -53.7381 -4362.89 163.935 -53.4648 -4399.28 158.179 -53.0645 -4198.45 163.341 -54.9396 -4201.95 163.568 -54.4746 -4626.49 158.31 -53.6989 -4405.41 163.084 -53.4241 -4325.54 164.032 -53.8302 -4275.6 162.948 -53.8946 -4366.69 164.719 -51.6344 -4067.17 158.837 -50.0301 -4672.71 161.452 -50.2195 -4023.02 158.813 -50.9456 -4251.5 160.147 -53.9529 -4172.68 158.512 -51.4506 -4305.35 159.187 -51.2495 -3978.2 160.028 -50.0517 -4336.66 162.145 -51.2628 -4271.92 158.352 -50.3737 -4390.47 164.565 -53.3157 -4253.12 157.692 -53.7027 -4241 161.684 -51.3533 -1731.83 157.855 -54.066 -4243.51 159.276 -53.9119 -3607.3 159.42 -50.2758 -4029.22 161.88 -50.506 -3987.06 161.478 -52.6776 -3965.82 158.533 -53.2967 -4315.18 160.69 -50.1392 -4134.28 158.833 -50.4971 -4418.45 157.76 -50.5064 -4440.62 162.885 -52.2832 -3877.44 161.335 -50.5917 -3943.11 158.944 -53.5413 -3682.97 158.704 -52.9397 -4217.15 158.42 -54.0272 -3963.66 162.33 -54.097 -4348.66 160.004 -50.4956 -4200.65 158.085 -51.1032 -4255.94 161.778 -53.4019 -3622.85 161.599 -50.8191 -3770.52 160.994 -50.8755 -4327.71 158.266 -50.727 -4266.35 160.782 -50.5395 -4028.93 157.765 -50.8612 -4286.54 164.853 -51.4017 -3957.84 159.403 -52.5947 -4407.12 159.284 -52.3411 -4515.86 159.206 -52.0132 -4361.35 157.935 -51.8426 -4284.91 158.055 -52.2395 -4238.44 158.202 -52.6816 -4069.15 158.909 -52.612 -4286.22 158.709 -52.2928 -4296.7 157.718 -51.4689 -4323.89 160.302 -50.9015 -4064.48 159.25 -53.1534 -3917.93 158.611 -51.9091 -4395.15 159.203 -51.6159 -4031.6 162.481 -50.4632 -3519.58 158.324 -54.3091 -3878.88 159.828 -52.404 -3713.32 159.859 -51.3292 -3881.84 164.415 -51.371 -4262.75 160.423 -54.4623 -4506.18 160.354 -52.9475 -4324.87 164.101 -54.1685 -4378.69 162.832 -50.1853 -3751.36 159.648 -52.1303 -3701.66 162.878 -51.9151 -4032.12 164.515 -53.6297 -3154.27 159.214 -52.8199 -4315.15 162.42 -51.0331 -3499.92 161.244 -53.0142 -3483.24 161.954 -53.6111 -3838.82 160.683 -51.2588 -3742.42 162.284 -53.38 -3991.24 162.103 -52.3568 -3443.76 158.857 -53.8796 -2317.62 160.596 -54.1658 -4182.39 162.95 -50.4511 -2155.38 164.805 -51.1616 -3637.32 160.129 -52.101 -3236.19 159.824 -51.7959 -3697.75 157.765 -54.5096 -4134.3 163.213 -51.3053 -3898.74 162.761 -51.6012 -4057.44 158.341 -54.634 -4019.25 163.302 -50.2736 -1863.14 161.184 -51.4043 -3596 163.955 -50.8726 -3742.91 161.336 -51.1307 -3241.2 157.952 -54.8397 -4048.75 164.252 -54.4684 -3135.38 161.859 -53.0721 -3714.45 161.891 -51.0586 -2000.61 164.058 -54.7837 -2987.4 160.765 -53.8101 -4064.16 158.802 -54.4378 -907.25 160.904 -53.4975 -3256.1 158.772 -54.1624 -2683.78 164.546 -50.3433 -3509.14 164.449 -50.6977 -3093.18 160.32 -51.5636 -3423.84 160.813 -51.5988 -3360.91 160.234 -52.5473 -2055.9 159.825 -52.7972 -3355.53 161.328 -53.3007 -3906.99 159.258 -53.7213 -2438.45 160.75 -52.1126 -2473.79 164.644 -54.9556 -3179.45 162.6 -51.3028 -3017.86 164.066 -50.5276 -2880.37 162.884 -51.0581 -2875.31 161.4 -53.6521 -3444.37 164.62 -53.9593 -2321.82 160.448 -51.8355 -3224.62 160.336 -52.328 -3124.29 163.365 -50.9051 -2336.34 164.082 -50.2276 -2744 162.183 -50.7694 -2664.06 158.384 -54.8923 -3302.89 162.805 -50.7497 -2625.19 163.691 -50.3954 -1778.67 163.676 -50.6563 -1763.37 164.51 -54.6671 -1939.48 163.299 -50.5719 -1584.26 164.598 -54.2654 -1096.92 160.929 -51.8423 -2900.71 164.653 -54.4859 -1347.2 158.882 -54.776 -1246.3 160.406 -52.7174 -2614.69 163.708 -50.1124 -1441.76 164.42 -51.0224 -2528.48 159.118 -54.2544 -1964.77 159.112 -54.0661 -1308.11 171.764 -54.188 -2962.49 170.789 -54.6711 -3715 171.098 -54.2783 -2127.88 164.995 -51.8616 -3929.43 165.197 -51.5618 -3565.18 165.143 -51.2735 -3476.41 165.401 -51.8455 -2112.06 171.383 -54.0949 -1392.11 170.798 -54.4213 -1802.99 165.119 -54.8698 -2606.26 165.581 -50.4431 -3090.83 165.436 -50.81 -3199.97 165.496 -51.1154 -2004.56 164.806 -53.0079 -2000.02 165.844 -50.1978 -1852.43 171.762 -53.9594 -1481.43 165.495 -54.8831 -2320.67 169.429 -54.944 -1382.54 165.004 -53.2546 -2361.92 164.964 -53.4854 -2196.01 170.411 -54.5212 -1501.45 164.958 -52.6506 -2207.72 165.556 -51.6461 -1089.69 170.806 -54.2448 -1564.72 165.27 -52.1293 -2051.9 165.212 -52.8713 -2171.42 165.334 -53.3744 -1272.38 165.962 -50.3623 -427.15 165.428 -52.4642 -1385.74 165.951 -54.8497 -1526.73 164.986 -53.7466 -1543.49 165.312 -54.7148 -1717.22 165.347 -53.1063 -1353.03 164.939 -54.6497 -1747.18 165.343 -53.613 -1566.44 171.472 -53.8718 -957.48 165.391 -52.7072 -1295.34 170.986 -54.1015 -1439.5 165.385 -53.8414 -1905.65 165.086 -53.9506 -1875.64 165.642 -54.6729 -1338.99 170.506 -54.2959 -1264.47 164.993 -54.1491 -1846.47 168.999 -54.8831 -1097.75 169.613 -54.7171 -1480.95 165.711 -53.7196 -1352.02 165.417 -54.0813 -1668.49 164.968 -54.379 -1387.68 165.354 -54.4925 -1435.97 165.267 -54.2762 -1710.35 165.591 -54.2908 -1345.32 165.761 -53.9434 -1293.92 169.949 -54.5839 -1359.52 165.671 -53.5048 -1160.71 165.772 -54.4718 -1028 165.399 -51.3452 -389.1 168.625 -54.8651 -1096.92 165.952 -53.6077 -1339.87 165.776 -54.1339 -1143.03 165.754 -51.8249 -985.24 169.548 -54.5093 -1187.54 166.111 -53.8011 -1357.59 165.949 -54.2862 -924.84 171.159 -53.9267 -1023.62 170.648 -54.1061 -1283.09 165.961 -54.6212 -1123.13 165.702 -53.285 -1131.73 166.135 -54.0767 -1181.89 166.289 -53.5804 -1319.91 166.443 -53.7456 -1276.58 166.362 -54.8849 -1144.8 166.249 -54.2851 -1234.8 166.121 -54.4574 -1205.4 166.478 -53.9293 -1325.12 165.996 -53.4266 -1257.96 168.836 -54.6939 -1003.05 169.493 -54.3354 -1078.35 170.132 -54.3477 -1119.6 169.233 -54.6694 -1173.12 168.306 -54.83 -1130.26 169.778 -54.3549 -1084.79 166.29 -53.3812 -1276.2 167.99 -54.8631 -1263.08 166.321 -54.6545 -1360.2 167.608 -54.8545 -1117.99 166.553 -54.1788 -1200.77 165.804 -51.6335 -747.36 166.603 -53.634 -1257.5 166.72 -53.7811 -1189.23 166.787 -54.3646 -930.37 166.454 -54.4184 -1127.37 166.895 -54.1919 -970.47 166.618 -53.4438 -1186.68 170.832 -53.9369 -1138.82 166.47 -53.2474 -1173.86 170.26 -54.1184 -1122.69 167.31 -54.8092 -1016.99 168.486 -54.6879 -992.44 168.968 -54.538 -1025.11 169.94 -54.2033 -1086.61 169.327 -54.2566 -1088.45 166.863 -53.9817 -1059.51 168.158 -54.6805 -1078.17 166.373 -53.0997 -1211.4 165.887 -52.4396 -1134.62 169.216 -54.4194 -1092.84 168.672 -54.5311 -926.95 166.751 -53.2741 -1103.51 166.102 -53.2167 -1180.81 170.496 -53.9313 -1107.56 167.826 -54.6814 -1101.87 166.924 -53.6034 -1107.4 167.499 -54.6649 -1003.46 166.702 -55.0304 -1036.12 167.007 -54.834 -1031.05 166.46 -52.9435 -1174.06 166.666 -54.7757 -964.53 169.607 -54.1498 -1058.3 167.007 -53.7929 -1058.28 168.87 -54.3833 -981.73 166.711 -53.0923 -1099.08 166.693 -54.568 -946.7 171.995 -53.7974 -848.24 168.341 -54.5099 -975.17 166.542 -52.7947 -1125.91 166.132 -52.9996 -1231.8 169.938 -54.0309 -1124.71 166.955 -53.3869 -1045.58 169.064 -54.2434 -1038.51 168.012 -54.5019 -1057.86 166.787 -52.8808 -1078.85 166.467 -52.6534 -1080.15 169.254 -54.1081 -1046.37 167.184 -54.6607 -955.09 168.547 -54.3456 -926.46 167.006 -53.2101 -1012.58 166.21 -52.7919 -1142.49 165.777 -51.0607 -360.11 167.695 -54.4981 -1014.25 166.416 -52.5041 -1110.06 166.761 -52.6974 -1052.45 168.763 -54.1997 -952.14 169.699 -53.9251 -1039.26 165.792 -53.0643 -1027.8 168.195 -54.2931 -976.31 167.163 -52.9977 -1029.73 167.007 -54.5076 -903.49 166.541 -52.3583 -1104.81 167.355 -54.4625 -929.57 169.414 -53.9519 -991.67 166.683 -52.5271 -1046.55 169.919 -53.8702 -981.71 166.167 -52.5827 -1183.1 167.243 -53.1817 -1002.57 167.852 -54.3248 -996.79 168.97 -54.0653 -953.78 167.235 -53.4672 -985.05 167.213 -53.9156 -960.43 166.911 -54.6692 -953.26 168.454 -54.1437 -937.46 167.181 -53.3081 -1003.53 165.897 -52.8831 -1115.61 166.677 -52.1899 -1019.76 167.076 -52.7557 -1039.6 165.795 -52.6823 -1064.55 165.577 -52.8864 -831.41 170.17 -53.9014 -1039.52 170.703 -53.7783 -936.98 167.3 -53.6922 -969.3 166.912 -52.3518 -1016.98 166.224 -52.3919 -1163.24 169.156 -53.9559 -925.09 167.154 -54.1145 -986.23 167.591 -54.3413 -962.3 167.103 -54.3145 -968.99 166.533 -52.05 -1012.91 167.411 -53.1097 -980.06 167.445 -53.2841 -968.95 167.542 -52.9662 -977.15 166.005 -52.246 -1174.61 166.067 -52.0679 -1154.9 166.041 -51.8941 -1027.45 166.335 -52.1851 -1140.99 166.304 -51.9747 -1004.35 167.388 -54.2432 -955.14 167.444 -54.0474 -941.34 167.295 -52.4325 -1015.37 167.66 -54.1825 -943.3 167.518 -53.8615 -938.12 167.946 -54.1384 -942.52 167.737 -53.9996 -926.37 167.45 -52.7625 -1015.97 167.527 -52.5554 -983.88 167.273 -52.6159 -1038.58 167.219 -52.235 -983.36 166.005 -51.7208 -870.06 167.003 -52.5666 -1041.84 166.969 -52.1457 -982.26 166.781 -52.0151 -932.85 168.676 -54.0121 -919.11 167.768 -52.8285 -953.35 168.196 -54.0896 -944.25 167.628 -53.6964 -936.26 168.028 -53.9553 -907.72 167.827 -53.8149 -914.66 170.387 -53.727 -924.81 167.198 -52.0828 -948.01 169.549 -53.7835 -894.54 166.284 -51.7708 -813.06 166.117 -50.231 -548.75 167.587 -52.4124 -943.82 166.582 -51.8643 -840.26 167.596 -53.4944 -947.46 167.771 -52.6477 -947.29 167.651 -53.1214 -944.09 167.52 -52.2711 -918.84 167.786 -52.985 -911.49 170.999 -53.7774 -816.39 167.919 -53.6045 -909.65 168.135 -53.772 -888.88 169.782 -53.7838 -898.2 171.278 -53.7505 -698.72 168.363 -53.9362 -912.31 167.795 -52.4806 -920.47 169.232 -53.7861 -815.32 170.635 -53.6333 -791.83 167.89 -53.4186 -922.21 167.438 -52.1029 -877.39 168.911 -53.8681 -848.78 167.765 -53.2845 -944.47 166.123 -50.0594 -785.57 168.258 -53.5866 -848.53 171.721 -53.7754 -840.18 167.052 -51.9764 -941.34 170.021 -53.7175 -817.96 168.444 -53.7318 -844.86 166.166 -51.6304 -777.48 168.13 -53.4329 -868.88 165.529 -51.4676 -418.23 166.527 -51.6955 -766.98 168.623 -53.8476 -877.19 165.782 -51.1865 -599.29 167.796 -52.3224 -874.6 168.041 -53.2766 -888.53 168.547 -53.5568 -802.4 168.028 -52.7235 -853.59 168.032 -52.5567 -823.62 167.955 -53.103 -891.75 166.89 -51.8435 -822.3 167.315 -51.9539 -848.15 168.402 -53.4153 -806.92 168.012 -52.9061 -841.86 167.769 -52.1316 -811.84 168.749 -53.6846 -810.33 169.005 -53.7003 -728.57 170.463 -53.5421 -748.15 168.286 -53.2763 -819.71 170.222 -53.5846 -795.86 167.616 -51.9408 -764.24 168.184 -53.1556 -832.44 168.047 -52.3976 -783.69 168.765 -53.5245 -759.73 170.875 -53.6309 -703.23 169.437 -53.6292 -753.92 168.665 -53.3978 -766.11 166.374 -51.6001 -795.15 168.544 -53.2587 -763 168.227 -53.0008 -774.29 165.99 -51.5666 -656 168.042 -52.236 -735.14 167.167 -51.8202 -779.51 169.733 -53.6246 -733.75 166.762 -51.6964 -657.42 168.401 -53.1228 -768.44 171.522 -53.7051 -618.84 171.136 -53.6232 -612.9 168.267 -52.6253 -715.87 167.897 -51.9684 -692.28 168.958 -53.5565 -688.35 169.187 -53.5979 -658.72 170.001 -53.528 -688.02 168.301 -52.8044 -677.82 166.202 -51.4864 -721.72 166.433 -51.4728 -775.5 166.635 -51.5416 -706.56 168.07 -52.0798 -680.28 167.439 -51.8001 -732.6 171.681 -53.6499 -608.62 167.829 -51.8541 -664.32 172.087 -53.6463 -660.05 168.82 -53.2439 -701.16 166.16 -51.3469 -547.03 168.898 -53.4094 -703.07 167.035 -51.6844 -624.63 168.513 -52.9437 -658.72 170.544 -53.3865 -596.24 167.695 -51.7673 -662.49 170.752 -53.481 -613.07 168.275 -52.4742 -709.51 170.244 -53.4055 -625.19 167.299 -51.6704 -700.09 171.869 -53.6513 -637.57 166.36 -51.3589 -660.23 166.593 -51.3772 -633.51 168.655 -53.1017 -701.36 166.925 -51.541 -461.82 167.946 -51.7403 -643.48 171.378 -53.5989 -533.22 167.995 -51.8593 -637.51 166.848 -51.3967 -591.4 167.55 -51.6493 -652.68 168.131 -51.9378 -626.61 165.959 -51.0968 -387.99 168.273 -52.1588 -618.41 167.181 -51.5411 -649.01 167.789 -51.6295 -639.09 169.235 -50.0686 -618.57 169.482 -50.0578 -611.6 165.92 -50.5161 -99.69 169.687 -50.0287 -612.97 169.998 -53.3909 -548.44 169.365 -50.1925 -611.06 169.14 -50.1884 -602.36 167.425 -51.5292 -609.44 169.679 -50.1935 -604.58 168.969 -50.0991 -601.94 168.32 -52.3117 -631.05 168.906 -53.0774 -615.09 168.295 -52.0268 -632.86 171.022 -53.4899 -537.87 169.18 -50.3292 -590.92 168.155 -51.805 -622.09 169.458 -50.3336 -599.84 169.867 -50.2979 -609.18 169.371 -53.4779 -647.37 169.319 -50.4436 -582.95 169.89 -50.0518 -616.72 168.954 -50.2569 -578.07 167.662 -51.5168 -643.94 167.985 -51.6086 -627.5 169.115 -50.4885 -570.7 169.704 -50.3712 -595.93 169.143 -53.422 -546.25 169.572 -53.5058 -635.03 169.896 -50.4012 -596.79 167.106 -51.4079 -570.93 169.525 -50.4801 -583.68 168.565 -52.7758 -488.4 170.761 -53.3233 -501.85 168.163 -51.6632 -620.03 167.318 -51.4289 -609.94 168.924 -50.4088 -564.24 168.726 -50.0896 -577.95 166.263 -51.2349 -575.83 169.977 -50.1907 -607.41 169.315 -50.5865 -576.42 169.796 -50.5207 -594.36 169.079 -50.6154 -564.53 168.782 -52.9622 -600.65 167.546 -51.3849 -597.91 169.583 -50.6255 -577.64 168.788 -50.1999 -574.59 166.779 -51.2611 -572.67 169.422 -50.7319 -573.08 170.13 -50.0621 -600.68 171.563 -53.5898 -425.62 169.811 -50.6818 -582.43 169.172 -50.7257 -574.85 170.082 -50.3286 -599 166.525 -51.2265 -523.04 170.423 -53.275 -526.77 168.732 -50.3267 -559.49 170.015 -50.6073 -587.25 168.892 -50.5599 -556.86 170.043 -50.4737 -591.21 168.336 -51.8882 -588.91 169.633 -50.7478 -571.01 168.506 -50.0813 -568.17 168.357 -51.7409 -578.82 171.254 -53.4806 -499.04 167.888 -51.5059 -630.92 169.034 -50.8456 -575.59 169.282 -50.868 -569.13 165.964 -51.4107 -457.5 170.208 -50.1877 -596.39 170.025 -50.7394 -572.04 169.542 -50.8516 -563.11 168.902 -50.7203 -569.51 167.767 -51.4125 -599.06 169.776 -53.4297 -517.32 166.157 -50.3397 -162.53 169.03 -53.3001 -558.67 168.287 -50.0676 -564.73 168.569 -50.2282 -564.05 168.672 -50.4915 -546.29 169.097 -50.9493 -567.12 167.324 -51.29 -566.23 169.807 -50.8353 -565.73 169.447 -50.9577 -560.53 170.191 -50.5462 -584.04 170.067 -50.8723 -567.62 169.661 -50.9688 -557.46 168.517 -51.9857 -522.83 167.549 -51.2517 -555.09 168.939 -50.9489 -577.31 168.996 -52.9493 -485.14 167.038 -51.269 -558.87 168.82 -50.8739 -581.93 168.51 -50.3869 -550.45 170.294 -50.2906 -593.38 168.369 -51.5905 -580.54 169.248 -51.0287 -550.37 168.685 -50.6493 -558.5 169.905 -50.9845 -551.41 168.984 -51.0606 -565.22 168.43 -52.096 -541.78 170.286 -50.424 -593.01 170.346 -50.069 -585.13 168.139 -51.5039 -603.95 170.067 -53.2852 -437.45 168.343 -50.1991 -569.97 169.489 -51.0735 -553.9 170.22 -50.6628 -575.59 169.308 -51.1749 -533.77 170.42 -50.1852 -591.45 168.079 -50.0534 -513.09 170.136 -51.0047 -553.77 169.744 -51.1158 -540.97 170.231 -53.2379 -469.12 169.118 -51.1482 -540.64 168.658 -50.7982 -569.52 169.998 -51.1135 -540.05 168.456 -50.5125 -515.1 168.539 -51.8293 -526.55 168.377 -50.3178 -568.57 166.157 -51.1206 -453.95 168.134 -50.1872 -493.4 168.758 -51.0153 -587.08 170.607 -53.2705 -506.12 170.216 -50.7807 -569.68 168.934 -51.2045 -551.27 169.066 -53.1746 -472.76 168.563 -51.6733 -548.12 167.772 -51.2747 -578.14 167.968 -51.3803 -615 167.228 -51.1254 -529.44 169.53 -51.208 -539.15 170.479 -50.3069 -587.44 170.18 -51.1212 -528.57 169.363 -51.3126 -522.46 169.707 -51.2502 -526.49 169.343 -53.3577 -550.24 168.797 -51.1387 -571.53 172.052 -51.0156 -502.4 168.515 -50.601 -562.14 169.891 -51.2333 -521.93 171.97 -53.4974 -380.58 168.721 -52.8405 -529.11 166.725 -51.1521 -489.23 169.142 -53.0354 -337.6 169.108 -51.2886 -521.49 168.635 -50.9218 -594.81 168.482 -52.6669 -522.71 167.447 -51.1686 -571.96 170.102 -51.2272 -516.48 168.893 -51.3229 -525.16 170.296 -50.8956 -562.77 165.836 -51.5113 -558.16 171.723 -53.5366 -381.23 168.473 -50.7269 -568 172.117 -51.2203 -513.49 170.959 -53.3613 -474.87 169.583 -51.3325 -508.22 170.556 -50.0652 -570.01 170.39 -50.5634 -574.35 169.539 -53.3697 -480.05 169.788 -51.3445 -502.19 169.443 -51.4314 -476.72 169.205 -51.4402 -479.48 168.287 -50.4545 -537.17 170 -51.3431 -504.39 168.386 -51.4345 -582.76 166.373 -51.1112 -478.11 170.215 -51.3374 -497.89 168.193 -50.32 -502.06 168.967 -51.432 -484.5 170.63 -50.1875 -564.95 170.552 -50.4393 -572.1 168.578 -51.5167 -562.65 171.51 -53.4583 -473.53 172.058 -50.8403 -503.42 170.359 -51.0552 -547.51 167.487 -51.0302 -503.22 166.599 -51.0713 -457.4 168.827 -51.591 -472.56 171.491 -52.3978 -525.8 171.512 -52.288 -532.92 168.715 -51.2709 -559.28 167.256 -50.9562 -481.04 166.009 -51.2438 -513.51 167.432 -50.9012 -480.93 171.884 -50.7895 -507 172.01 -50.6943 -494.42 171.926 -52.6408 -504.18 172.14 -52.6419 -527.21 171.742 -50.8218 -492.18 171.855 -50.9082 -498.41 171.618 -52.4918 -508.69 171.663 -52.3579 -527.07 171.755 -50.6829 -505.28 171.705 -52.6254 -485.72 171.741 -50.5484 -503.28 171.816 -50.4688 -499.8 171.811 -50.3552 -497.16 168.91 -52.8499 -367.92 171.472 -52.6229 -479.62 170.924 -53.2491 -440.95 170.984 -53.1331 -441.34 171.029 -53.0142 -439.05 171.153 -52.9502 -426.26 171.214 -52.8435 -425.6 171.803 -52.7287 -475.28 171.34 -52.7332 -444.23 171.276 -52.6262 -466.16 172.018 -52.7817 -489.79 171.351 -52.4969 -508.63 171.388 -52.093 -527.72 171.919 -50.5634 -497.02 169.427 -53.2727 -447.18 168.612 -51.1453 -564.33 168.531 -51.0286 -582.06 168.435 -50.8943 -580.6 168.256 -50.7875 -554.34 168.315 -50.6248 -544.91 168.103 -50.5799 -499.3 168.055 -50.4399 -455.45 171.849 -52.5216 -512.52 171.797 -52.4204 -527.8 167.646 -51.1455 -496.8 167.735 -51.0161 -449.18 167.873 -51.126 -592.14 168.029 -51.2371 -605.47 171.832 -50.2099 -492.5 168.204 -51.3379 -593.09 172.045 -50.2829 -497.42 172.054 -50.1404 -494.85 171.953 -53.3266 -377.58 171.963 -52.9206 -457.97 172.01 -53.0238 -442.19 171.928 -53.1629 -403.59 170.468 -50.7377 -556.99 170.632 -50.5796 -554.95 170.71 -50.3152 -559.37 170.776 -50.0644 -541.16 171.135 -53.2452 -440.2 171.142 -53.3799 -456.41 171.222 -53.0739 -424.27 171.404 -53.1906 -402.18 171.338 -52.9432 -413.67 171.336 -53.3397 -439.8 171.401 -52.8367 -427.31 171.496 -53.0463 -401.42 171.559 -52.9075 -421.42 171.573 -52.7568 -452.61 171.571 -53.3012 -420.73 171.749 -53.394 -461.11 171.658 -53.1598 -401 171.773 -53.0096 -419.82 171.772 -53.2689 -417.35 171.419 -51.9849 -509.91 171.439 -51.7907 -506.66 171.448 -51.6825 -513.84 171.448 -51.5764 -516.4 167.623 -50.8894 -460.18 171.524 -51.4729 -513.22 171.608 -51.3592 -511.29 171.584 -51.2358 -508.4 167.794 -50.7903 -472.74 167.824 -50.9062 -503.66 171.639 -51.5987 -519.68 171.59 -51.0983 -509.81 167.751 -50.6598 -420.64 171.78 -52.8486 -450.62 171.736 -51.1643 -505.99 171.735 -51.4471 -514.29 167.954 -50.9896 -559.33 167.946 -50.6873 -483.2 171.606 -50.9325 -505.8 168.01 -50.8317 -545.22 171.807 -51.2867 -510.53 171.79 -51.0454 -498.41 168.125 -50.7039 -534.54 168.101 -51.0927 -584.8 171.564 -51.888 -509.96 168.177 -50.943 -578.54 171.902 -51.1477 -507.59 168.32 -51.0502 -583.49 171.611 -51.7467 -513.03 168.255 -51.1901 -574.68 168.454 -51.2725 -574.1 168.434 -51.1381 -555.25 168.577 -51.383 -563.42 171.55 -52.1625 -529.25 171.584 -52.0286 -519.4 171.709 -52.2355 -534.9 171.753 -51.8151 -514.24 171.759 -52.0995 -534.45 171.856 -52.3123 -545.97 171.809 -51.9416 -525.68 171.883 -51.5506 -512.84 171.816 -51.6944 -513.02 171.908 -52.1849 -553.56 171.967 -51.3974 -515.51 172.009 -52.406 -558.79 171.952 -51.7995 -522.14 171.976 -52.0464 -550.8 172.046 -51.6542 -514.52 172.102 -51.5026 -512.28 172.003 -50.4344 -496.65 172.191 -50.5542 -507.44 172.138 -53.3968 -248.85 172.166 -53.2536 -387.06 172.161 -53.1022 -442.21 172.034 -52.5408 -537.08 172.043 -51.9143 -541.12 172.032 -52.2672 -569.8 172.116 -52.1483 -573.65 171.068 -50.5662 -529.23 171.105 -50.3239 -533.32 171 -50.081 -515.72 171.215 -50.4166 -527.18 171.295 -50.2693 -518.49 171.513 -50.6799 -512.58 171.283 -50.6898 -535.11 171.095 -50.7229 -533.8 171.027 -50.4144 -542.33 171.383 -50.537 -525.94 170.93 -50.318 -541.28 171.61 -50.7856 -503.6 171.418 -50.3913 -517.85 171.6 -50.5777 -508.93 171.216 -50.8246 -523.92 171.431 -50.8099 -519.43 171.287 -51.0392 -523.31 171.354 -50.935 -521.61 171.069 -50.2123 -530.7 171.152 -50.9539 -517.11 170.723 -51.0101 -539.39 170.879 -51.1253 -522.14 171.008 -50.8356 -517.62 170.755 -50.8404 -556.81 170.939 -50.9793 -517.67 170.686 -51.1466 -527.63 171.115 -51.1106 -519.82 170.831 -50.6002 -550.85 170.821 -50.4618 -553.58 170.912 -50.7087 -553.03 170.806 -51.2581 -529.08 170.631 -51.2635 -530.96 170.718 -50.6908 -553.64 170.526 -50.928 -548.68 170.502 -51.1753 -534.05 170.497 -51.4659 -505 170.453 -51.3307 -511.11 170.559 -51.063 -545.57 170.306 -51.2055 -539.5 171.443 -51.0368 -519.55 171.373 -51.1598 -517.38 171.008 -51.2505 -524.51 171.203 -51.2538 -520 170.915 -51.3609 -527.74 170.916 -51.4902 -518.51 170.702 -51.4085 -523.73 170.759 -51.5505 -516.21 170.596 -51.5562 -511.04 170.692 -51.6632 -504.49 171.317 -51.5003 -511.44 171.391 -51.3414 -512.46 171.314 -51.6186 -510.32 171.112 -51.5869 -510.82 171.329 -51.8896 -497.1 171.244 -51.7468 -500.58 171.127 -51.3992 -520.35 171.001 -51.7488 -494.35 171.087 -51.8994 -471.45 171.238 -52.0141 -507.06 170.879 -51.635 -508.13 170.797 -51.7649 -485.45 168.753 -51.4203 -537.2 169.045 -51.535 -434.09 172.161 -51.3769 -514.67 171.62 -50.4512 -510.03 171.252 -50.1 -514.99 170.851 -50.1945 -541.23 171.577 -50.2823 -508.44 171.449 -50.1673 -505.95 171.479 -50.0532 -496.49 171.642 -50.1318 -503.32 171.11 -52.7114 -438.69 170.96 -52.8743 -431.13 170.823 -53.0302 -437.44 170.759 -53.1833 -448.02 170.644 -53.0899 -438.24 167.085 -51.0275 -483.48 166.937 -51.1282 -472.24 165.714 -50.9318 -814.47 169.236 -53.2627 -461.21 170.315 -51.4605 -456.84 169.664 -51.45 -456.39 172.056 -50.0294 -488.86 171.352 -52.2224 -551.37 170.898 -51.857 -489.32 167.889 -50.544 -424.32 168.468 -52.5415 -481.72 170.547 -53.1747 -463.89 168.712 -51.911 -401.23 171.331 -52.3526 -549.96 171.86 -50.0574 -493.29 168.744 -51.7662 -440.37 169.196 -51.5735 -406.65 169.049 -51.6424 -373.91 167.479 -50.8123 -466.04 170.613 -51.7921 -461.92 169.881 -51.4579 -483.78 170.101 -51.4609 -476.06 170.41 -51.5754 -480.67 169.343 -51.5239 -429.3 170.515 -51.6823 -494.55 171.19 -52.148 -556 170.741 -52.9148 -435.34 170.902 -52.7279 -431.22 167.074 -50.9324 -468.6 171.131 -52.5607 -488.64 169.516 -51.5453 -393.46 167.601 -50.7475 -458.75 168.716 -52.7472 -321.58 171.161 -52.2846 -603.85 169.16 -52.9274 -362.11 171.148 -52.423 -573.01 171.658 -50.0082 -497.75 167.884 -50.045 -226.9 169.881 -53.2982 -374.72 170.364 -53.1538 -447.93 167.327 -50.8213 -444.48 171.033 -52.0612 -488.51 166.784 -51.0653 -463.74 168.938 -51.7373 -344.1 166.917 -50.9863 -470.26 170.613 -52.991 -435.46 169.373 -53.1942 -428.89 170.991 -52.2066 -556.22 170.198 -51.5956 -423.96 169.742 -51.5821 -392.44 167.149 -50.8369 -439.87 170.95 -52.6141 -459.17 170.876 -51.9776 -557.62 170.97 -52.4872 -553.04 170.73 -51.8944 -474.84 170.725 -52.7868 -432.86 169.978 -51.5776 -434.72 167.698 -50.5479 -414.48 169.357 -51.6375 -355.59 170.972 -52.3508 -625.11 170.427 -51.8103 -468.03 170.484 -53.0675 -428.62 167.888 -50.4235 -411.33 167.966 -50.3063 -419.07 170.839 -52.1184 -552.16 168.714 -52.0359 -312.87 170.093 -53.1835 -369.2 170.33 -51.6994 -463.03 165.764 -50.6547 -388.84 167.937 -50.1621 -380.07 169.193 -51.67 -347.81 170.828 -52.5437 -493.52 166.445 -50.9844 -166.66 169.556 -51.6626 -302.03 168.583 -52.1077 -377.7 165.925 -50.9759 -188.3 170.574 -52.8792 -436.53 170.78 -52.2715 -510.36 170.773 -52.6488 -439.94 170.796 -52.4295 -565.83 165.693 -51.5326 -530.89 169.562 -53.2655 -339.45 167.575 -50.6307 -413.92 169.103 -51.7469 -304.55 169.097 -52.8418 -211.24 167.422 -50.7045 -484.05 168.886 -51.8551 -291.56 169.7 -53.2931 -347.76 165.826 -51.314 -477.93 170.052 -51.6906 -382.29 166.963 -50.8552 -428.6 170.185 -51.7163 -401.87 170.526 -51.9436 -399.41 169.707 -51.716 -302 170.667 -52.1617 -441.09 168.503 -52.4167 -324.21 170.649 -52.5389 -481.75 166.739 -50.9857 -405.33 169.949 -53.1911 -298.38 170.691 -52.032 -486.57 169.878 -51.6907 -352.7 170.603 -52.673 -443.54 170.194 -53.12 -376.46 168.661 -52.6732 -290.4 169.264 -53.1322 -362.91 170.422 -52.9516 -414.87 168.472 -52.1934 -449.06 170.311 -53.044 -399.11 167.23 -50.7207 -403.95 170.614 -52.2576 -475.23 170.601 -52.376 -524.77 169.435 -51.7463 -284.45 168.888 -51.9825 -216.14 167.448 -50.5972 -406.08 168.843 -52.7556 -224.78 170.548 -52.1962 -427.07 169.023 -51.8206 -268.24 170.502 -52.5961 -454.8 170.518 -52.7737 -440.78 166.824 -50.9091 -322.96 166.604 -50.9708 -274.73 170.1 -51.7806 -352.69 167.777 -50.4657 -397.89 169.502 -53.1933 -319 166.261 -51.0154 -208.13 167.054 -50.7418 -351.5 169.576 -51.7631 -248.17 170.445 -52.4872 -481.21 166.364 -50.05 -323.98 170.538 -52.0973 -386.18 166.911 -50.7571 -281.74 170.494 -52.2794 -493.52 170.437 -52.367 -504.15 170.441 -52.6818 -444.08 170.428 -52.8482 -429.42 170.237 -51.8202 -415.91 166.092 -51.0114 -280.16 169.967 -51.786 -309.02 170.367 -52.5982 -443.95 170.43 -52.1865 -391.65 169.268 -51.7501 -299.26 169.677 -51.7991 -258.93 169.428 -53.1151 -329.45 170.337 -51.9275 -400.87 167.544 -50.5311 -283.36 165.745 -51.4213 -355.92 167.755 -50.3617 -343.79 167.644 -50.4519 -326.01 170.261 -52.9538 -379.86 167.307 -50.6084 -279.16 170.366 -52.0636 -253.29 170.315 -52.6765 -431.79 170.354 -52.2865 -416.46 169.167 -51.8544 -244.8 169.81 -51.8007 -272.6 166.308 -50.1604 -203.9 170.276 -52.4012 -430.77 170.257 -52.5222 -436.58 170.337 -52.7659 -425.55 170.283 -52.1902 -232.44 166.804 -50.8212 -189.78 170.053 -51.8918 -241.68 167.71 -50.0438 -89.13 165.627 -51.3076 -363.34 169.491 -51.8158 -258.88 170.201 -51.9302 -331.13 170.292 -52.8685 -395.03 170.221 -52.6206 -408.61 169.786 -53.2021 -229.6 169.337 -53.0317 -314.75 167.788 -50.2424 -252.41 167.115 -50.6183 -190.03 169.91 -51.8617 -255.77 166.692 -50.8984 -156.34 170.149 -53.0054 -303.66 170.203 -52.7086 -358.49 170.198 -52.2893 -289.61 169.812 -51.8891 -240.78 167.397 -50.5167 -78.26 169.702 -51.8723 -229.82 169.017 -52.7384 -186.51 169.362 -51.849 -251.78 165.752 -50.7976 -576.43 170.15 -52.2021 -189.05 170.183 -52.1024 -186.37 169.642 -53.1985 -242.95 170.095 -52.6582 -282.84 170.137 -52.8946 -273.41 170.173 -52.7952 -306.46 170.089 -52.7328 -227.28 169.871 -52.5493 -159.03 170.011 -52.4787 -196.06 170.083 -52.5608 -230.79 170.142 -52.4685 -291.96 166.298 -50.2858 -160.95 166.386 -50.3705 -107.41 166.462 -50.4483 -65.93 166.515 -50.5459 -72.3 166.595 -50.6158 -87.51 166.64 -50.4458 -71.19 166.611 -50.6944 -104.1 166.685 -50.5519 -84.01 166.704 -50.6309 -98 166.633 -50.803 -124.17 166.779 -50.7077 -132.29 168.612 -52.5897 -283.79 168.645 -52.4909 -182.3 168.679 -52.3913 -149.88 168.595 -52.2919 -221.8 169.844 -52.039 -178.93 169.895 -51.9436 -211.84 169.936 -52.1077 -162.16 169.988 -52.0118 -155.78 170.044 -52.1638 -172.34 170.056 -52.0785 -171.99 170.041 -52.2651 -161.24 170.122 -52.0035 -177.22 170.067 -52.3815 -242.87 166.952 -50.1138 -122.42 166.962 -50.1726 -125.56 166.969 -50.4466 -98.88 166.914 -50.2946 -133.83 166.978 -50.5803 -104.55 166.931 -50.5234 -97.03 167.026 -50.043 -125.52 167.093 -50.1304 -127.21 169.579 -53.1157 -262.96 169.705 -53.1305 -211.54 169.832 -53.1043 -185.93 170.011 -53.0765 -210.38 167.377 -50.0189 -120.7 167.556 -50.0349 -112.1 167.446 -50.121 -137.32 167.606 -50.1277 -142.74 167.659 -50.2036 -189.08 167.498 -50.2253 -181.62 167.596 -50.3774 -289.14 167.626 -50.2926 -256.37 167.5 -50.4423 -250.32 169.683 -53.0357 -200.25 169.723 -52.9445 -158.13 169.831 -52.8871 -148.51 169.846 -52.9975 -154.97 169.98 -52.8009 -151.81 169.993 -52.9427 -158.12 169.999 -52.6998 -150.95 169.982 -52.629 -155.59 166.948 -50.6639 -155.7 167.042 -50.2344 -112.68 167.051 -50.3488 -85.77 167.057 -50.5161 -89.26 167.114 -50.4361 -56.61 167.199 -50.038 -130.46 167.191 -50.1925 -106.33 167.204 -50.2732 -75.42 167.276 -50.1187 -121.8 167.231 -50.4997 -55.81 167.256 -50.3745 -33.21 167.366 -50.4343 -37.18 167.328 -50.2026 -114.35 167.35 -50.2847 -99.93 167.458 -50.3451 -185.89 167.765 -50.1375 -125.55 169.583 -52.9424 -152.61 169.671 -52.8596 -141.95 169.709 -52.7043 -151.18 169.778 -52.7831 -149.04 169.713 -52.6206 -155.65 169.861 -52.6807 -152.12 169.506 -53.028 -213.43 169.501 -52.8501 -148.91 169.613 -52.7658 -144.56 170.244 -52.0065 -321.19 166.879 -50.2251 -141.29 166.834 -50.0587 -121.75 166.832 -50.3781 -133.9 166.845 -50.1535 -134.36 166.835 -50.5912 -104.89 166.815 -50.4895 -114.13 166.698 -50.1412 -123.59 166.775 -50.283 -145.69 166.664 -50.0513 -114.93 166.757 -50.2099 -139.38 166.672 -50.3428 -124.23 166.597 -50.2477 -117.39 166.532 -49.9813 -148.95 166.512 -50.1227 -112.83 166.532 -50.3591 -98.66 166.445 -50.2977 -124.13 166.428 -50.2231 -121.04 169.741 -51.9674 -217.7 169.67 -52.144 -165.9 169.715 -52.214 -160.19 169.707 -52.0686 -185.96 169.751 -52.2964 -161.47 169.795 -52.1332 -163.48 169.766 -52.4683 -152.75 169.762 -52.3868 -148.93 169.893 -52.4334 -148.88 169.886 -52.2187 -166.66 169.9 -52.3334 -149.68 169.678 -52.5305 -153.38 169.633 -52.4404 -152.05 169.584 -52.5919 -152.76 169.491 -52.3965 -147.27 169.499 -52.5123 -145.35 169.456 -52.6233 -156.06 169.507 -52.2981 -148.68 169.332 -52.6592 -156.82 169.341 -52.3317 -154.97 169.412 -52.2378 -144.15 169.343 -52.4486 -144.92 169.317 -52.5626 -135.31 169.233 -52.6396 -119 169.259 -52.2186 -163.45 169.171 -52.5796 -51.71 169.224 -52.4025 -134.07 169.258 -52.1157 -175.02 169.198 -52.4899 -137.42 169.166 -52.3225 -147.39 169.121 -52.6584 -120.11 169.218 -52.7349 -156.76 169.134 -52.1461 -169.21 169.095 -52.2397 -151.72 169.068 -52.5295 -109.07 169.069 -52.602 -104.01 169.169 -52.0391 -184.45 169.077 -52.4218 -168.04 169.016 -52.651 -139.24 168.969 -52.2469 -172.64 169.045 -51.9918 -182.64 169.016 -52.18 -162.96 169.014 -52.3219 -172.1 168.997 -52.0869 -165.1 168.968 -52.5883 -148.72 168.942 -52.4913 -142.69 169.026 -51.9084 -215.8 169.419 -51.9498 -228.9 169.489 -51.8799 -239.06 169.487 -52.0329 -215.66 169.573 -52.103 -178.41 169.579 -51.9375 -226.62 169.559 -52.2013 -160.5 169.631 -52.2719 -148.01 169.616 -52.0228 -204.62 169.587 -51.8434 -246.76 169.626 -52.3487 -156.31 169.582 -52.6742 -158 169.426 -52.7367 -166.25 169.416 -52.9426 -203.79 169.269 -52.9564 -282.13 166.547 -50.8994 -137.3 166.49 -50.8351 -119.46 166.484 -50.7571 -108.96 166.429 -50.893 -118.37 166.363 -50.7281 -101.35 166.461 -50.6558 -87.86 166.384 -50.5801 -57.35 166.391 -50.513 -38.79 166.36 -50.8216 -89.79 166.319 -50.4517 -76.15 166.262 -50.38 -130.75 166.279 -50.6485 -68.08 166.233 -50.7576 -78.44 166.275 -50.5373 -35.88 166.207 -50.8595 -54.07 166.103 -50.6893 -83.37 166.144 -50.4513 -123.59 166.118 -50.5776 -101.2 166.077 -50.7996 -61.61 165.93 -50.7354 -130.54 165.967 -50.6318 -154.15 168.937 -52.3973 -160.82 168.876 -52.1826 -177.3 168.841 -52.0852 -164.76 168.829 -52.3128 -166.76 168.792 -52.5785 -175.96 168.809 -52.4432 -154.54 168.734 -52.2242 -176.37 168.73 -52.1383 -190.88 168.623 -52.1911 -247.22 169.297 -52.8539 -183.44 169.41 -52.1363 -171.05 169.336 -52.0367 -194.38 169.265 -51.9466 -214.92 166.314 -50.9198 -107.13 169.136 -51.9473 -204.3 166.188 -50.9435 -124.85 166.067 -50.9076 -104.2 165.914 -50.8559 -108.52 168.905 -52.6678 -163.1 168.785 -52.686 -164.66 172.652 -54.7691 -5421.45 173.272 -54.8274 -5417.84 173.947 -54.6833 -5310.91 173.629 -54.3716 -5249.33 178.255 -55.0484 -5137.98 178.104 -54.572 -5227.24 174.542 -54.7777 -5159.64 178.935 -54.838 -5359.28 177.631 -54.8608 -5151.24 178.089 -54.1427 -4999.26 179.526 -53.5996 -5116.81 179.657 -54.643 -5290.41 178.847 -54.2758 -5262.29 179.289 -53.2322 -5096.88 176.828 -54.8435 -5145.31 179.045 -53.8429 -5181.67 179.512 -52.8715 -5057.99 175.313 -54.8797 -5025.55 179.461 -52.484 -5165.58 178.384 -53.8098 -4977.67 178.747 -53.4224 -4971.7 178.892 -52.5688 -4999.46 178.81 -52.9858 -5040.19 178.274 -53.1152 -4990.76 175.637 -54.4933 -4977.71 176.021 -54.7304 -5042.17 174.664 -53.9342 -4762.63 175.492 -54.1001 -5079.88 175.323 -53.7235 -4992.12 176.276 -54.324 -4903.85 177.42 -54.577 -5005.25 176.996 -54.4021 -5001.65 176.914 -54.0288 -5070.29 176.927 -53.6704 -5012.15 178.47 -51.9492 -4955.16 178.366 -52.2745 -4918.63 177.564 -51.6731 -4983.07 176.911 -51.6643 -5019.19 179.084 -52.1403 -4987.22 178.171 -51.6715 -4912.6 176.135 -53.7284 -4901.8 177.542 -54.2562 -4928.65 178.147 -52.7048 -4983.92 177.595 -53.8141 -4929.96 177.999 -53.4298 -5079.17 178.832 -51.7022 -4912.36 176.644 -53.3434 -4848.15 176.436 -52.2445 -4943.43 175.515 -53.448 -4902.99 176.264 -51.8698 -4785.41 176.64 -52.6566 -4875.58 175.961 -53.1946 -4917.86 177.319 -53.3845 -4694.24 178.459 -51.3426 -4912.75 176.476 -53.0055 -4789.99 179.147 -51.3381 -4897.74 173.186 -54.0753 -4787.35 178.111 -51.0025 -4831.28 175.28 -53.1556 -4926.69 176.35 -51.4711 -4567.06 176.139 -52.8387 -4931.61 176.009 -52.5247 -4787.84 175.534 -52.8123 -4781.05 175.436 -52.4207 -4449.18 179.353 -50.9426 -4627.45 176.365 -51.1053 -4322.23 177.417 -51.019 -4644.68 174.878 -53.4378 -4788.74 178.086 -50.4069 -4323.05 179.394 -50.2535 -4145.65 177.821 -50.6767 -4548.77 175.836 -51.6198 -4228.75 174.906 -52.625 -4399.95 172.187 -54.0032 -2407.11 175.913 -51.2824 -4331.37 173.188 -53.7473 -3341.65 174.335 -53.1831 -3723.01 177.863 -50.1167 -3313.16 175.925 -50.94 -2770.86 175.258 -51.7373 -2861.7 176.493 -50.5854 -3326.61 175.46 -51.4217 -2006.49 173.609 -53.547 -2761.26 172.716 -53.8606 -3032.63 174.559 -52 -1502.99 174.318 -52.6544 -2841.86 176.637 -50.3118 -2309.02 177.11 -50.2723 -2195.55 176.224 -50.3589 -2451.39 175.541 -51.1366 -1737.88 173.581 -53.2632 -1224.65 174.122 -52.913 -1708.03 176.354 -50.0806 -1869.54 175.686 -50.6807 -1998.27 174.755 -51.8084 -1244.45 175.535 -50.9003 -1568.86 173.825 -53.0965 -1305.54 172.88 -53.6433 -1578.47 174.3 -52.1937 -1699.85 175.821 -50.4142 -1862.39 176.776 -50.0536 -1631.54 175.102 -51.4714 -1175.69 175.444 -50.4754 -1580.02 173.973 -52.7531 -1556.54 175.282 -50.7323 -1495.34 173.122 -53.515 -1235.52 173.531 -53.1189 -822.35 172.58 -53.6207 -990.92 175.158 -50.5203 -1510.58 173.897 -52.5608 -1089.89 175.524 -50.1854 -1373.57 174.935 -50.6528 -1323.57 175.224 -51.0066 -1368.49 174.479 -51.844 -1100.82 175.193 -50.3196 -1421.1 175.167 -51.2533 -1119.94 174.926 -50.438 -1296.95 174.266 -51.9603 -1162.01 174.932 -50.8781 -1225.56 173.912 -52.2977 -969.36 173.793 -52.8828 -805.79 174.825 -51.5953 -1035.95 174.917 -50.216 -1157.4 174.665 -50.3477 -1087.16 174.672 -50.5575 -1156.72 174.663 -50.7675 -1107.96 173.991 -52.0766 -1022.17 174.887 -51.1101 -1028.29 175.176 -50.0868 -1105.67 174.418 -50.4571 -1066.2 174.802 -51.3494 -866.63 174.641 -50.133 -922.19 174.634 -50.9794 -997.65 172.308 -53.7446 -907.19 174.413 -50.6543 -1051 173.549 -52.9802 -651.88 174.406 -50.2655 -956.68 174.386 -50.8537 -1000.99 174.521 -51.684 -931.95 174.178 -50.5491 -952.53 173.749 -52.1436 -902.35 173.726 -51.977 -841.81 173.633 -52.2572 -831.88 173.99 -51.8681 -861.42 173.747 -52.7318 -727.04 174.153 -50.7324 -914.99 172.781 -53.4689 -795.03 174.254 -51.7699 -910.12 174.58 -51.1779 -895.43 173.262 -53.3274 -978.56 173.619 -52.425 -847.26 174.176 -50.3683 -862.54 174.539 -51.4933 -783.46 174.351 -50.0515 -729.28 174.344 -51.0549 -884 173.977 -50.6275 -799.34 174.503 -51.3323 -784.61 173.697 -51.7696 -669.9 173.531 -52.6244 -808.07 174.097 -50.9244 -878.57 173.494 -52.1077 -802.05 174.186 -50.204 -765.88 172.504 -53.4657 -494.8 174.024 -51.1362 -777.73 173.375 -53.188 -719.76 173.917 -50.4623 -770.48 174.308 -51.2374 -781.79 173.378 -52.3082 -755.6 174.271 -51.5846 -767.31 173.381 -52.478 -749.85 173.865 -50.7851 -756.85 174.287 -51.4034 -747.97 173.959 -50.2627 -704.76 173.54 -52.8111 -693.51 173.759 -50.6092 -694.71 173.797 -50.9759 -719.38 173.999 -51.6718 -711.84 173.222 -52.1594 -659.62 174.096 -51.3049 -721.89 174.002 -51.464 -669.51 173.85 -51.3003 -650.96 173.738 -51.5722 -591.22 173.739 -51.423 -578.25 173.642 -50.8687 -651.97 173.281 -52.0129 -653.77 173.467 -51.9119 -671.53 173.411 -51.7664 -614.27 173.489 -51.6248 -575.67 173.536 -51.4678 -556.09 173.591 -51.3218 -578.76 173.649 -51.152 -627.73 173.665 -50.4811 -667.71 173.593 -50.7322 -645.05 172.991 -53.3749 -763.11 173.435 -51.2381 -575.45 173.249 -51.6636 -559.61 173.158 -51.8473 -586.31 173.523 -50.9895 -614.26 173.306 -51.5092 -542.41 173.365 -51.3607 -550.79 173.057 -52.0421 -604.64 174.03 -50.06 -664.69 173.362 -51.1166 -587.43 173.131 -52.2949 -640.55 173.423 -50.8495 -603.36 172.274 -53.5347 -594.32 173.164 -52.4351 -654.58 173.761 -50.1438 -630.46 173.671 -50.3246 -646.05 173.213 -52.605 -638.88 173.051 -51.685 -552.38 173.517 -50.5871 -627.35 172.987 -53.2485 -390.07 173.085 -51.5503 -538.18 173.221 -51.2463 -561.83 173.265 -50.9745 -581.5 173.133 -51.3956 -542.36 173.108 -51.1094 -564.33 172.877 -51.9254 -577.54 173.46 -50.4412 -605.8 173.35 -50.707 -592.43 172.889 -51.763 -556.32 173.337 -52.742 -596.87 172.981 -52.2046 -607.03 172.884 -51.6082 -538.08 172.972 -53.1291 -291.02 173.183 -50.8315 -569.77 173.548 -50.1951 -591.51 172.913 -52.3876 -592.7 172.811 -53.3177 -317.01 172.905 -51.453 -533.46 173.333 -53.0649 -474.89 172.938 -51.269 -551.05 172.819 -52.0927 -595.42 173.021 -50.9605 -550.31 172.971 -52.5496 -575.68 172.845 -51.0918 -546.4 173.285 -50.562 -578.99 173.113 -50.6903 -559.45 173.399 -50.2958 -570.04 173.56 -50.0554 -566.83 172.861 -53.0241 -349.04 173.222 -50.4194 -562.6 172.948 -50.8147 -538.42 172.685 -51.6804 -539.39 172.696 -51.5304 -525.13 172.704 -51.3771 -525.56 172.676 -51.8359 -560.55 172.747 -53.1719 -401.25 172.644 -51.9889 -582.62 172.776 -50.9407 -516.03 172.662 -51.2208 -527.63 172.992 -52.6769 -541.48 172.743 -52.2595 -601.25 173.168 -53.1656 -403.56 172.568 -52.9946 -400.77 172.797 -52.9063 -407.31 172.787 -52.52 -554.5 173.055 -50.5492 -544.71 172.889 -50.6744 -530.88 172.717 -50.7963 -508.34 173.358 -50.1433 -536.63 172.534 -51.458 -517.61 172.593 -51.0671 -526.37 172.507 -51.7571 -544.3 172.489 -51.3364 -516.05 173.134 -50.2585 -533.73 172.595 -52.1419 -598.97 172.57 -53.3179 -276.39 172.537 -50.9166 -524.8 172.415 -51.2007 -516.02 172.455 -51.9002 -563.71 172.993 -50.4131 -520.57 172.779 -52.6635 -506.42 172.842 -50.535 -522.83 172.665 -52.8182 -444.73 172.487 -50.7659 -576 172.638 -52.4279 -574.04 172.334 -51.0505 -516.95 172.451 -52.8412 -455.15 172.672 -50.6511 -617.05 172.48 -53.1654 -337.76 173.147 -50.0797 -513.44 173.1 -53.0326 -360.91 172.635 -52.5712 -535.77 172.465 -51.6055 -523.87 173.282 -52.8993 -492.43 172.326 -51.4533 -512.72 172.512 -52.2829 -595.11 172.437 -52.0556 -584.92 172.243 -51.7776 -534.39 172.302 -51.3175 -513.96 172.909 -50.3074 -490.37 172.292 -50.8877 -514.18 172.792 -50.4104 -493.02 172.515 -52.6901 -500.26 173.119 -52.7697 -542.36 172.637 -50.5147 -612.86 172.347 -53.0757 -411.49 172.417 -52.1764 -594.56 172.25 -50.7276 -501.94 172.446 -50.6126 -580.49 172.367 -53.257 -314.81 172.422 -52.4075 -578.83 172.9 -50.1608 -489.03 172.281 -52.758 -498.86 172.239 -51.6008 -515.49 172.974 -50.016 -503.2 173.001 -52.9034 -423.94 172.725 -50.2942 -479.82 172.231 -52.9393 -465.2 172.619 -50.4004 -543.56 172.327 -52.6241 -532.09 172.463 -52.5374 -550 172.195 -50.0652 -492.05 172.348 -50.0212 -491.43 172.888 -52.7914 -462.51 172.508 -50.0633 -491.33 172.62 -50.1703 -481.29 172.25 -50.3725 -518.5 172.317 -50.181 -503.68 172.3 -53.1718 -409.03 172.33 -53.3712 -303.47 172.256 -52.2862 -590.98 172.238 -52.4932 -564.94 172.287 -52.1312 -586.1 172.223 -51.995 -565.2 172.499 -50.3154 -524.1 172.441 -50.4622 -565.45 186.636 -52.4035 -5644.06 186.443 -52.0471 -5778.55 186.144 -52.6363 -5604.01 186.782 -50.5503 -5266.39 185.733 -52.8422 -5527.47 186.701 -50.1996 -5539.29 185.148 -52.8514 -5564.32 186.873 -52.836 -5614.03 185.634 -53.1562 -5540.72 186.598 -50.7657 -5186.82 185.058 -53.1646 -5461.77 186.368 -53.1179 -5609.76 186.626 -51.7421 -5391.09 185.973 -52.2002 -5651.58 185.39 -53.4648 -5499.2 185.372 -52.449 -5648.88 186.073 -53.5 -5416.36 186.684 -51.0825 -5287.61 186.839 -51.4401 -5274.88 184.615 -52.5556 -5600.32 186.805 -53.5879 -5492.73 185.151 -53.7977 -5546.51 185.767 -53.7611 -5347.7 184.538 -52.9508 -5524.98 186.399 -53.8981 -5256.9 185.044 -54.1307 -5405.13 186.132 -51.3327 -5265.06 185.775 -54.1388 -5412.73 184.665 -52.1115 -5475.3 184.584 -53.3997 -5516.01 185.328 -54.4233 -5281.22 186.614 -54.335 -5252.61 185.448 -50.98 -5453.43 183.994 -52.264 -5496.51 183.259 -54.2153 -5479.53 183.134 -54.5276 -5354.53 185.967 -51.7761 -5732.48 182.951 -52.3581 -5445.44 182.405 -52.0885 -5332.63 186.125 -50.8699 -5391.18 183.516 -54.8524 -5273.42 184.291 -54.8297 -5321.9 183.771 -54.4998 -5326.95 185.636 -50.5405 -5357.7 181.691 -54.8398 -5261.63 180.393 -53.7106 -5335.47 180.575 -53.3047 -5188.76 180.911 -53.1194 -5185.66 181.008 -52.809 -5231.15 181.381 -53.064 -5262.33 183.142 -53.181 -5511.02 182.982 -53.5584 -5526.87 183.181 -52.7287 -5460.54 182.56 -53.2761 -5461.08 182.75 -53.9079 -5421.83 182.499 -52.9326 -5412.04 182.242 -53.5548 -5388.9 182.415 -52.5339 -5254.26 181.951 -53.1761 -5394.14 181.741 -52.7642 -5388.37 180.278 -54.904 -5186.97 180.373 -54.5322 -5284.28 180.553 -54.1736 -5145.35 180.922 -54.8845 -5289.99 185.359 -51.4562 -5282.33 184.615 -51.0791 -5392.48 183.99 -51.8259 -5336.87 183.963 -51.3412 -5113.47 181.762 -52.3378 -5311.78 181.083 -54.4772 -5406.15 181.19 -54.0322 -5354.33 181.843 -54.3948 -5356.89 182.619 -54.7837 -5284.39 182.586 -54.2955 -5361.77 184.92 -50.5963 -5029.49 183.729 -53.4949 -5508.54 183.895 -54.1805 -5385.33 184.56 -54.3982 -5368.87 184.351 -53.8909 -5423.07 185.136 -50.1334 -5331.51 181.319 -53.4881 -5243 181.971 -53.9458 -5394.65 183.482 -53.8767 -5337.62 183.27 -52.0192 -5304.71 181.223 -52.5096 -5308.6 185.225 -54.8371 -5263.48 183.347 -51.5316 -5201.23 185.98 -54.6046 -5317.58 181.675 -51.9507 -5065.59 181.113 -52.1799 -5049.15 186.815 -54.7937 -5146.37 179.747 -54.1111 -5255.26 180.345 -52.9228 -5120.81 180.549 -52.4657 -5033.84 179.942 -53.2784 -5175.57 184.462 -50.2416 -5266.01 183.474 -52.4066 -5395.13 181.046 -51.7719 -4944.34 179.937 -52.599 -5054.93 180.431 -52.0054 -4986.58 183.841 -50.8912 -4701.2 179.853 -52.2434 -4955.46 182.678 -51.6613 -5214.16 180.403 -51.5457 -4908.22 181.023 -51.3431 -4798.58 179.657 -51.7565 -4969.85 181.605 -51.1449 -4768.1 180.442 -51.1153 -4719.75 181.889 -50.062 -3634.46 181.023 -50.927 -4647.12 182.158 -51.3762 -5035.14 181.652 -50.6898 -4403.72 180.994 -50.5052 -4512.94 181.464 -50.2796 -4151.05 181.384 -49.9385 -4144.82 180.455 -50.7005 -4683.23 179.817 -51.2557 -4919.72 184.224 -50.6032 -4778.6 179.919 -50.853 -4630.74 183.287 -50.7667 -4275.52 182.213 -50.9812 -4530.59 179.94 -50.4616 -4500.84 182.801 -50.8589 -4272.61 183.55 -50.4746 -3692.14 182.452 -50.2029 -3185.05 183.962 -50.2798 -3784.29 179.906 -50.0774 -4048.88 183.565 -50.1081 -1889.44 187.05 -52.1326 -5732.92 189.059 -53.0461 -5508.89 188.282 -52.8689 -5775.65 187.377 -52.5908 -5686.87 187.184 -50.4749 -5407.54 187.554 -53.0138 -5578.17 188.939 -52.7365 -5533.96 187.813 -52.2873 -5588.74 188.877 -53.378 -5425.38 187.194 -53.2844 -5593.25 188.546 -52.4067 -5415.54 187.427 -50.1971 -5165.87 188.714 -53.8048 -5351.62 187.474 -53.6522 -5621.68 189.512 -52.9027 -5390.48 189.296 -52.4581 -5402.24 187.413 -51.7595 -5357.79 187.18 -50.826 -5185.38 189.681 -53.3329 -5417.21 187.342 -51.2837 -5266.92 187.266 -54.0378 -5399.04 188.619 -54.1866 -5308.81 189.485 -53.775 -5240.64 188.814 -52.1188 -5331.49 188.026 -53.428 -5623.55 190.02 -52.712 -5186.7 191.276 -50.136 -5145.86 189.034 -54.424 -5254.2 190.062 -53.0521 -5296.87 189.972 -52.2844 -5218.45 190.478 -53.3558 -5248.69 188.223 -51.978 -5441.89 187.443 -54.542 -5255.63 192.59 -50.052 -5167.97 192.052 -50.3041 -5079.97 190.622 -50.1626 -5226.95 188.476 -49.976 -5197.47 190.292 -53.7721 -5216.67 189.334 -52.0235 -5166.69 188.61 -54.4974 -5237.05 193.332 -50.2251 -5167.99 192.192 -50.6454 -5152.17 190.62 -52.957 -5279.62 188.03 -53.9078 -5434.58 190.111 -49.9531 -5221.9 192.531 -50.8387 -5076.84 191.608 -50.5956 -5126.15 189.251 -54.1532 -5239.16 189.262 -51.6646 -5125.46 188.046 -54.3314 -5257.99 187.571 -54.9377 -5127.45 190.88 -50.5229 -5145.48 190.637 -52.5359 -5313.43 192.6 -51.1546 -5171.42 188.717 -51.77 -5167.81 192.02 -50.9439 -5159.35 191.206 -53.2703 -5135.19 192.762 -50.5215 -5086.86 188.261 -54.7914 -5038.23 189.048 -54.7435 -5005.22 192.795 -51.598 -5268.35 189.554 -51.3691 -5162.52 189.61 -54.5286 -5029.04 194.122 -50.3946 -5133.84 189.373 -50.0886 -5157.26 191.983 -51.337 -5112.95 192.643 -51.9905 -5154.6 191.1 -53.7171 -5246.74 194.303 -51.993 -5099.48 190.536 -52.1466 -4998.31 188.037 -51.5257 -5246.66 188.034 -50.226 -5133.4 191.228 -51.0209 -5108.72 188.725 -51.3252 -5219.13 188.702 -50.4906 -5048.95 192.057 -51.7638 -5266.66 187.834 -50.6017 -5056.73 190.138 -50.3662 -5120.99 189.802 -51.0326 -5144.46 193.079 -50.928 -5038.42 193.677 -54.4006 -4987.08 187.92 -51.0747 -5099.94 193.249 -54.6571 -5114.42 193.972 -53.0207 -5053.5 193.57 -50.6521 -5141.28 189.975 -51.8168 -5073.84 191.328 -51.5348 -5183.35 192.855 -52.3596 -5031.34 190.404 -54.6542 -4896.52 193.944 -53.641 -4980.83 194.055 -54.883 -5246.98 193.595 -52.6138 -5033.84 194.296 -54.5124 -4714.66 194.169 -53.3212 -4826.46 194.116 -54.1289 -4912.65 192.085 -52.2019 -5118.22 193.877 -51.1132 -5041.13 193.668 -53.271 -4862.23 193.302 -52.9971 -5147.31 193.087 -54.2985 -5061.52 194.149 -52.3636 -5040.89 192.593 -54.4226 -4915.38 192.953 -52.7037 -5228.66 189.137 -50.9619 -5162.71 193.267 -53.9351 -4809.71 193.037 -53.3862 -5007.73 192.43 -53.7054 -5213.32 194.27 -50.7776 -5164.52 193.702 -51.5905 -5160.32 193.207 -51.2771 -5041.26 190.419 -51.3584 -5018.4 191.731 -53.5887 -5152.13 192.047 -53.2145 -4971.18 193.431 -52.0699 -5164.15 192.041 -52.8204 -4987.99 192.616 -52.9521 -5089.41 192.652 -54.0771 -4977.79 192.723 -54.8233 -4626.32 191.939 -54.6619 -4842.92 190.023 -54.1833 -5025.4 191.352 -52.8033 -5180.58 189.832 -55.0459 -4788.77 192.4 -52.5959 -5234.78 190.827 -51.8391 -5055.54 191.826 -52.5388 -5349.93 191.253 -52.2726 -5355.13 191.512 -51.9207 -5160.08 188.46 -50.8991 -5107.33 191.174 -54.7735 -5039 190.982 -54.2557 -5088.41 191.914 -54.06 -5143.22 196.893 -53.1338 -4997 196.328 -51.3745 -4997 195.439 -51.3108 -5221.25 197.679 -53.8575 -4997 199.523 -50.3227 -4997 194.766 -54.3617 -5114.93 196.445 -54.8795 -4997 197.724 -52.0956 -4997 196.746 -54.5113 -4997 196.479 -50.5485 -4997 197.458 -53.5054 -4997 195.759 -52.6609 -4997 195.374 -51.7587 -4872.71 196.375 -52.8632 -4997 197.572 -53.0772 -4997 197.271 -54.9541 -4997 199.058 -50.2272 -4997 196.292 -52.519 -4997 201.508 -50.4933 -4997 195.145 -53.3506 -5134.46 194.43 -52.7566 -4966.23 194.604 -53.1552 -4685.93 201.42 -50.1207 -4997 200.837 -50.1892 -4997 195.953 -50.7068 -4997 197.588 -54.1349 -4997 197.725 -52.4918 -4997 195 -51.98 -4957.45 200.101 -50.2585 -4997 195.345 -53.7258 -5549.09 196.229 -53.9898 -4997 197.786 -51.631 -4997 194.814 -54.7592 -4782.86 199.927 -50.651 -4997 194.699 -53.9266 -4578.32 195.381 -54.1974 -5263.46 197.519 -50.1726 -4997 194.631 -51.5427 -5005.2 194.677 -51.075 -5044.88 194.654 -53.5177 -5112.47 195.971 -54.5378 -4997 195.317 -54.5749 -4988.71 196.332 -53.1801 -4997 195.869 -51.0035 -4997 197.074 -51.304 -4997 195.839 -53.3817 -4997 196.493 -50.9644 -4997 196.628 -53.5112 -4997 197.65 -51.1916 -4997 197.197 -52.2599 -4997 197.051 -52.6665 -4997 197.906 -50.9273 -4997 195.927 -53.0104 -4997 198.126 -50.2853 -4997 195.763 -50.3381 -4997 201.819 -51.3072 -4997 196.958 -51.8265 -4997 195.253 -52.9644 -5039.18 198.278 -51.983 -4997 197.052 -50.3329 -4997 198.576 -51.6998 -4997 198.276 -51.2623 -4997 197.739 -52.7998 -4997 195.165 -50.1458 -5132.45 196.552 -52.2123 -4997 200.788 -50.6943 -4997 197.206 -50.8333 -4997 201.158 -51.2646 -4919.98 198.423 -52.3861 -4894.25 196.321 -50.0853 -4997 194.945 -52.4158 -4759.07 200.339 -51.0849 -4996.57 195.723 -52.1919 -4997 196.05 -51.7813 -4997 197.092 -53.8609 -4997 194.547 -50.1218 -5200.67 197.46 -54.4929 -4997 198.596 -50.7837 -4997 199.227 -50.5551 -4997 197.751 -50.5545 -4997 195.105 -50.6529 -5163.44 198.707 -50.3628 -4997 199.521 -50.9782 -4997 199.134 -51.4033 -4997 199.19 -51.8458 -4914.52 197.018 -54.1973 -4997 197.998 -54.7911 -4919.83 199.987 -51.4315 -4901.14 198.105 -54.4115 -4944.16 198.105 -53.0208 -4834.18 198.161 -54.0491 -4913.46 198.258 -53.4053 -4719.96 201.724 -51.6036 -4895.58 198.879 -52.1026 -4860.85 199.789 -51.8219 -4727.06 198.273 -52.7641 -4732.04 200.618 -51.4762 -4783.01 198.068 -53.7311 -4834.22 198.634 -54.7006 -4599.03 201.783 -51.9136 -4715.8 198.711 -54.3214 -4523.09 199.619 -52.2159 -4541.19 199.232 -52.4922 -4501.07 201.178 -51.7734 -4711.73 198.953 -52.7914 -4445.16 200.459 -51.8073 -4631.95 201.575 -52.1816 -4586.2 198.694 -53.1109 -4441.57 200.282 -52.1721 -4454.66 200.928 -52.1669 -4521.04 198.77 -53.8917 -4458.73 199.834 -52.5873 -4239.23 201.375 -52.5358 -4394.65 199.142 -54.9904 -4228.21 199.267 -54.6361 -4116.75 199.125 -53.5268 -4170.3 200.73 -52.5117 -4356.31 199.687 -52.8696 -4114.69 201.141 -52.8092 -4268.11 200.186 -52.4819 -4312.43 199.291 -54.2846 -4082.66 200.493 -52.8772 -4196.58 199.719 -54.0009 -3997 201.247 -53.0992 -4039.95 199.422 -53.1822 -4019.72 200.91 -53.3359 -3997 200.168 -53.2353 -3999.54 199.791 -54.9739 -3997 200.556 -53.6201 -3997 199.889 -53.5702 -3997 200.318 -53.8811 -3997 201.727 -53.4652 -3997 201.224 -53.7471 -3997 200.812 -53.9589 -3997 201.41 -54.249 -3997 200.557 -55.0719 -3997 200.571 -54.2372 -3997 201.131 -54.7481 -3997 200.044 -54.5639 -3997 204.001 -50.5469 -4997 202.026 -50.2675 -4997 202.593 -50.4016 -4997 205.004 -52.6777 -4997 203.458 -51.8416 -4997 202.3 -50.7151 -4997 203.46 -50.7799 -4997 202.752 -51.6737 -4997 201.66 -50.9497 -4997 204.952 -50.2804 -4997 204.424 -52.6741 -3313.81 205.958 -50.1701 -4961.34 206.505 -50.1806 -4997 203.615 -52.1519 -4997 203.175 -50.3988 -4997 204.329 -50.2275 -4997 205.537 -52.8745 -4951.61 202.897 -50.6629 -4997 203.225 -51.4239 -4997 202.994 -50.9997 -4997 208.43 -49.9793 -4997 204.639 -50.5345 -4981.31 207.356 -49.9483 -4997 202.42 -51.2309 -4997 204.03 -52.3719 -4924.77 202.188 -51.5273 -4997 204.703 -52.336 -4710.15 205.692 -50.4575 -4749.34 204.098 -52.0418 -4831.52 207.912 -50.2554 -4986.24 207.183 -50.2515 -4936.45 208.655 -50.4411 -4965.3 203.514 -52.3742 -3997 204.039 -50.9511 -4682.58 203.695 -51.1771 -4889.54 206.27 -50.4461 -4837.42 208.27 -50.6812 -4806.66 208.794 -50.8931 -4860.87 205.196 -50.6901 -4604.67 202.261 -51.8362 -4331.16 207.68 -50.6704 -4755.32 206.906 -50.6423 -4714.84 205.404 -52.4953 -4154.59 204.685 -50.9281 -4601.15 208.895 -51.2714 -4714.41 208.275 -51.0987 -4692.8 206.269 -50.7828 -4648.07 209.216 -50.107 -4802.77 202.952 -52.131 -3997 209.33 -50.6623 -4703.34 209.379 -51.1489 -4620.22 208.673 -51.5448 -4636.17 204.684 -51.9292 -4430.01 208.041 -51.492 -4524.32 207.512 -51.0772 -4533.18 205.746 -50.8425 -4496.27 206.83 -51.1147 -4465.35 202.206 -52.1714 -4373.86 208.959 -51.8748 -4444.56 208.466 -51.8638 -4499.11 204.042 -51.6159 -4464.31 209.338 -51.6244 -4478.59 207.372 -51.4789 -4372.58 206.148 -51.1935 -4395.09 206.066 -52.6981 -3997 204.369 -51.278 -4222.77 207.877 -51.856 -4380.96 206.205 -53.1589 -3997 208.33 -52.1978 -4370.22 205.425 -51.0887 -4264.77 206.751 -51.5164 -4252.18 209.416 -52.1173 -4253.15 208.867 -52.1948 -4325.59 205.038 -51.3672 -4058.98 207.761 -52.2233 -4247.67 202.058 -52.5244 -4221.61 207.258 -51.868 -4233.49 206.256 -51.5828 -4192.97 208.244 -52.539 -4248.06 204.693 -51.6001 -4085.47 206.645 -51.8743 -4089.01 207.735 -52.5976 -4129.47 208.699 -52.4879 -4232.77 207.115 -52.2781 -4081.46 205.709 -51.4899 -4102.35 208.169 -52.8315 -4143.09 204.411 -54.7938 -3997 209.365 -54.0687 -3997 208.738 -52.8869 -4055.05 206.035 -51.8535 -3997 206.455 -52.1472 -3997 204.018 -53.8346 -3997 207.793 -52.9679 -4032.6 209.444 -53.6362 -3997 207.214 -52.7317 -3997 202.623 -52.4441 -3997 201.911 -52.9888 -3997 205.202 -52.1624 -3997 204.488 -54.1745 -3997 203.421 -53.8111 -3997 208.336 -53.166 -4013.28 207.893 -53.3416 -3997 205.357 -53.9772 -3997 206.724 -52.9151 -3997 209.412 -53.17 -3997 204.727 -53.8155 -3997 206.32 -53.8651 -3997 203.904 -54.5333 -3997 205.162 -54.9121 -3949.56 206.584 -52.5018 -3997 202.767 -54.8366 -3997 209.318 -52.6212 -4056.94 205.558 -53.1913 -3229.91 207.254 -54.1994 -3982.01 207.975 -53.6461 -3997 207.33 -53.1297 -3997 202.678 -54.5174 -3997 208.449 -53.5843 -3997 203.801 -54.1908 -3997 207.702 -54.1978 -3997 205.886 -52.2411 -3997 203.697 -54.7901 -3997 202.095 -54.7028 -3997 203.062 -53.4895 -3997 206.88 -53.276 -3997 205.297 -53.6649 -3997 205.281 -53.3608 -3930.06 203.29 -54.4248 -3997 203.591 -53.5551 -3997 207.416 -53.5481 -3997 203.776 -52.648 -3997 203.421 -52.8479 -3997 204.099 -53.0263 -3997 205.832 -53.9189 -3997 207.833 -53.8958 -3997 208.262 -53.8573 -3997 206.704 -53.625 -3997 204.728 -53.3833 -3997 207.298 -53.9221 -3997 204.081 -53.4603 -3997 203.143 -54.7374 -3997 203.173 -52.5486 -3997 205.881 -53.5408 -3996.99 204.293 -54.4443 -3997 204.942 -53.0236 -3272.83 208.719 -53.9612 -3997 203.196 -54.0615 -3997 202.631 -54.101 -3997 206.817 -54.0325 -3997 208.981 -53.7272 -3997 202.844 -53.7727 -3997 209.476 -54.4894 -3944.31 203.384 -53.1936 -3997 205.331 -51.8104 -3997 204.862 -54.5291 -3997 205.148 -54.2346 -3997 205.811 -54.2722 -3970.85 202.144 -54.3016 -3997 201.919 -53.9311 -3997 202.315 -53.741 -3997 202.436 -53.4321 -3997 202.705 -53.1851 -3997 208.903 -53.3667 -3997 202.734 -52.8214 -3997 208.301 -54.1919 -3986.91 208.926 -54.3207 -3939.54 205.679 -54.6678 -3860.38 206.366 -54.1946 -3925.07 207.49 -54.4573 -3920.84 208.014 -54.5093 -3896.54 206.95 -54.3817 -3868.05 208.579 -54.5782 -3837.98 207.74 -54.7255 -3836.94 206.504 -54.6323 -3728.62 209.071 -54.629 -3852.12 207.242 -54.7103 -3768.81 157.944 -58.3421 -3940.01 158.394 -58.8374 -3586.98 157.344 -56.8616 -5397.55 159.454 -59.5516 -4148.5 158.792 -59.4154 -4874.57 157.294 -57.1845 -5512.27 157.902 -56.2938 -4303.08 157.225 -57.4781 -4953.51 158.052 -56.6899 -3773.48 157.888 -58.6903 -5709.06 159.188 -55.0314 -5287.87 163.612 -56.4373 -4925.16 159.157 -55.3071 -5070.45 157.463 -57.7711 -5372.06 163.157 -57.2551 -4283.14 163.559 -55.6692 -4949.04 163.386 -56.8509 -4748.06 157.779 -56.0124 -4649.1 157.388 -58.1744 -5131.85 158.315 -59.1835 -5073.3 163.448 -58.2951 -4875.42 163.086 -56.0884 -4679 162.34 -56.2773 -4780.04 162.662 -58.8218 -4832.21 162.008 -58.8051 -4112.89 162.675 -58.4349 -5109.11 163.367 -58.7114 -4466.21 158.911 -59.0034 -2696.92 162.788 -57.0007 -5012.23 158.589 -55.5896 -3321.46 159.86 -55.1005 -4170.82 162.331 -55.9227 -4428.15 162.88 -55.7059 -4418.38 161.787 -55.8183 -4590.48 162.554 -55.0896 -4666.28 162.269 -55.5289 -4364.95 160.796 -55.1428 -4499.06 163.155 -57.9862 -4510.6 162.751 -56.6054 -5207.68 162.421 -57.3219 -4056.43 161.645 -56.1825 -4300.43 161.57 -55.592 -4545.72 162.913 -59.0987 -4277.38 157.974 -55.7797 -3817.36 159.558 -55.6368 -4183.18 157.356 -56.5185 -4669.4 162.348 -59.0592 -4518.95 158.046 -57.9803 -3109.6 161.658 -55.2131 -4537.68 160.308 -55.4613 -4273.75 160.97 -55.5313 -4613.98 161.179 -55.8759 -4353.85 163.102 -55.3609 -3789.29 159.461 -59.168 -3549.96 161.911 -56.5879 -4169.53 160.797 -56.2333 -4152.07 160.362 -55.8779 -4428.88 162.141 -56.9674 -4167.44 161.759 -58.4027 -3876.01 162.796 -57.6451 -4411.65 158.999 -55.9988 -4007.06 162.363 -58.0304 -4157.39 158.572 -56.3408 -2066.12 157.185 -55.4037 -4000.78 158.859 -56.679 -3219.76 159.226 -57.4541 -4117.57 157.327 -56.1739 -3591.05 160.007 -56.2975 -3839.2 159.644 -56.0397 -3946.26 157.808 -57.0334 -4020.61 162.319 -59.4192 -4035.13 157.869 -57.3745 -3814.87 158.198 -59.4773 -2678.18 159.789 -59.8443 -3573.52 161.171 -56.5623 -3950.37 161.546 -57.3628 -3624.39 163.171 -59.4633 -3971.83 159.509 -57.7446 -3425.98 157.373 -55.7963 -3875.34 162.024 -57.6955 -4222.62 159.29 -56.3404 -4136.68 158.92 -59.7233 -3297.16 159.525 -57.1053 -3992.7 159.617 -58.3312 -3867.44 161.41 -58.7231 -2166.41 161.113 -58.2182 -3981.68 159.774 -57.9872 -3393.83 161.405 -59.4877 -4031.82 160.426 -58.5248 -4200.37 161.105 -58.5365 -3213.43 163.507 -59.815 -4065.48 160.162 -58.9712 -3808.73 159.594 -58.7657 -3787.11 161.899 -59.8367 -4153.78 162.704 -59.8174 -4251.5 161.889 -59.164 -4620.13 161.36 -59.049 -4731.76 163.645 -59.1167 -4115.95 158.983 -57.1884 -3791.21 160.616 -59.2767 -3903.34 160.841 -58.8417 -4523.43 161.718 -58.0322 -4027.39 159.958 -59.2966 -3757.81 160.078 -59.5451 -3730.49 161.219 -59.9093 -3797.72 160.005 -57.4065 -3850.53 159.626 -56.6997 -3967.12 160.077 -57.7614 -3536.2 157.821 -55.4902 -3650.93 160.212 -56.9832 -3826.54 160.441 -56.6044 -3919.94 157.352 -58.5617 -3653.04 157.63 -55.1281 -3697.58 158.979 -58.6257 -3475.65 158.959 -58.3354 -3216.64 161.244 -57.8276 -4035.51 160.808 -56.8535 -3778.61 161.394 -56.921 -3757.98 160.694 -57.6049 -3822.05 158.155 -55.2825 -3993.17 160.788 -57.192 -3631.8 160.558 -59.7765 -3701.83 158.149 -55.057 -3967.54 159.095 -56.9407 -3477.45 158.449 -58.4981 -3308.9 157.84 -59.0155 -3707.29 158.637 -55.1367 -908.31 160.429 -58.0345 -2587.02 159.196 -58.0585 -3102.88 158.554 -58.1633 -3274.46 158.145 -57.6683 -2693.98 157.421 -58.8641 -3006.04 157.297 -59.896 -2820.85 158.755 -57.7913 -2261.84 157.267 -59.5226 -2743.24 157.781 -59.6611 -2950.92 157.775 -59.3408 -2567.45 157.294 -59.1576 -2720.94 158.352 -59.7691 -2570.31 158.591 -57.4242 -2403.77 158.468 -57.0504 -2301.41 159.244 -59.8612 -3273.09 158.309 -56.01 -2733.59 163.988 -57.9623 -5091.52 163.628 -57.5775 -5041.4 163.921 -57.1346 -4211.62 172.005 -56.504 -5442.19 170.803 -57.0094 -5394.38 171.404 -56.7913 -5356.29 170.551 -57.2977 -5587.19 171.329 -57.2965 -5403.92 172.084 -57.481 -5210.32 164.543 -56.9715 -5210.8 170.67 -56.6354 -5389.62 171.305 -56.3316 -5583.93 169.877 -57.4713 -5416.86 171.604 -57.796 -5171.35 172.028 -56.0214 -5543.23 170.045 -56.9773 -5257.62 170.565 -56.1812 -5352.03 171.198 -55.8222 -5401 170.687 -57.7267 -5272 164.762 -56.6023 -4875.42 169.918 -56.4659 -5249.66 163.965 -55.2409 -4193.98 169.185 -56.7198 -5297.26 169.129 -56.2187 -5192.32 164.086 -56.7237 -5092.22 169.161 -57.1982 -5068.29 169.083 -57.6747 -5310.64 166.041 -57.0906 -5286.87 169.371 -55.8017 -5108.15 164.667 -57.4722 -4968.57 168.495 -56.495 -5292.35 164.217 -55.6118 -5126.89 164.056 -56.0187 -5179.6 164.272 -56.3915 -5274.76 166.54 -56.8181 -5165.36 167.735 -56.6446 -5259.28 167.151 -56.8722 -5157.85 165.94 -56.7458 -5001.42 168.431 -56.9276 -5311.78 165.545 -57.344 -5000.34 166.827 -57.2238 -5096.71 168.346 -57.4022 -5175.66 168.467 -56.1487 -5014.92 166.178 -57.4874 -4983.7 166.976 -56.5384 -4929.76 166.804 -57.6298 -5086.03 169.838 -57.922 -5240.22 167.666 -57.1059 -5191.76 166.29 -57.8829 -5061.36 165.557 -57.7277 -5086.74 171.151 -58.1051 -5226.46 166.309 -56.4775 -4747.61 164.088 -58.3973 -4994.76 167.175 -58.0177 -5074.12 164.179 -58.7985 -4744.89 164.308 -59.1438 -4988.27 168.716 -55.8629 -3242.14 169.802 -58.6542 -4919.62 166.318 -58.3457 -5032.28 166.558 -58.7277 -4837.23 165.404 -58.4472 -4857.71 170.087 -59.1679 -5201.47 170.051 -59.509 -5021.58 168.504 -59.5208 -5072.7 171.134 -59.7893 -4714.29 169.236 -59.353 -5062.53 170.423 -59.8207 -4874.21 165.874 -58.7838 -4740.07 165.086 -59.8404 -4469.22 169.606 -59.8156 -4930.89 169.55 -58.9097 -5106.27 164.689 -58.5265 -4558.75 164.979 -58.8951 -4654.15 167.151 -58.5208 -5079.74 170.856 -59.4117 -5145.64 168.816 -58.8687 -5213.91 169.26 -58.549 -5265.78 165.494 -59.5613 -4460.41 165.616 -59.2035 -4536.97 166.362 -59.0838 -4835.98 168.355 -59.2041 -5082.13 171.751 -59.5819 -4973.25 168.011 -59.4705 -4853.87 171.711 -59.0464 -5296.76 170.102 -58.8537 -5192.9 166.159 -59.4945 -4596.32 164.829 -59.4178 -4255.62 167.628 -59.2299 -4850.67 168.812 -59.801 -4847.38 167.093 -58.9406 -4998.36 170.711 -58.9351 -5141.14 170.346 -58.5919 -5044.32 167.913 -58.7858 -5056.52 171.912 -58.6243 -5505.89 170.488 -58.201 -5269.54 171.165 -58.5387 -5278.35 171.808 -58.2348 -5183 163.968 -59.4703 -4111.7 169.807 -58.341 -5242.53 164.828 -56.1861 -4370.11 167.512 -57.5486 -4935.45 168.522 -58.4305 -5202.1 167.797 -58.3365 -5114.7 164.878 -58.0846 -5093.11 169.122 -58.1408 -5335.72 166.903 -59.3718 -4782.74 168.996 -55.4951 -4534.16 164.67 -55.3563 -4327.76 165.278 -56.9421 -4259.47 167.969 -55.926 -4183.05 168.222 -57.9277 -5227.89 168.103 -59.7751 -4917.75 166.748 -56.1866 -4352.41 167.471 -59.6296 -4759.72 165.846 -59.8633 -4297.85 167.16 -55.8366 -3842.97 165.537 -56.42 -4636.55 166.14 -56.1219 -4245.32 164.853 -55.7324 -4170.7 166.724 -59.8622 -4525.58 168.338 -55.5716 -3678.07 165.69 -58.0976 -5049.2 164.32 -59.816 -4028.7 168.954 -55.2271 -2867.59 165.553 -55.9169 -3560.8 165.224 -55.1229 -3133.73 168.563 -55.2832 -2234.42 167.688 -55.5739 -2840.65 167.167 -55.5095 -2478.74 165.715 -55.0631 -2105.49 169.093 -55.0692 -1869.73 165.937 -55.6015 -2472.63 168.025 -55.3047 -1821.91 165.699 -55.3266 -1668.55 168.765 -55.0598 -1664.49 166.578 -55.5711 -1898.43 167.468 -55.2948 -1701 166.168 -55.1141 -1584.62 166.182 -55.3733 -1543.09 166.946 -55.2812 -1489.34 167.768 -55.0692 -1165.13 168.298 -55.0409 -1381.63 166.515 -55.268 -1167.91 167.254 -55.032 -1168.69 172.62 -56.5676 -5393.16 172.5 -56.2796 -5429.79 173.157 -56.3052 -5420.89 173.151 -56.7533 -5358.89 172.73 -56.0143 -5432.46 172.285 -56.9959 -5512.75 173.419 -55.8364 -5437.28 173.83 -56.1647 -5452.96 172.639 -55.6478 -5449.31 173.868 -56.5273 -5456.28 173.913 -56.9639 -5409.53 173.29 -55.3314 -5342.89 172.52 -55.1584 -5322.2 174.054 -55.4882 -5353.52 173.168 -57.1939 -5338.48 174.28 -55.8753 -5472.82 174.522 -56.2644 -5412.85 174.622 -56.6931 -5297.71 174.76 -57.1664 -5319.37 172.644 -57.4257 -5484.54 173.962 -55.0528 -5442.39 179.462 -55.7058 -5204.72 178.693 -55.6964 -5254.99 176.423 -57.1479 -5093.16 175.609 -57.1642 -5393.99 175.275 -57.4615 -5307 174.712 -57.6194 -5443.76 175.158 -55.8983 -5107.85 179.771 -55.2055 -5328.59 178.311 -55.4006 -5251.4 178.118 -55.6223 -5091.91 176.513 -55.7977 -5068.62 178.911 -55.3132 -5195.38 179.859 -56.1143 -5081.94 174.691 -55.5698 -5203 176.672 -55.4104 -5141 175.268 -56.8356 -5246.65 173.903 -57.4572 -5438.99 177.577 -55.3228 -5146.54 174.656 -55.2012 -5226.61 172.558 -57.8908 -5281.59 175.372 -56.4278 -5233.94 175.95 -56.7744 -5222.38 173.151 -57.5676 -5382.43 177.215 -57.127 -5068.38 179.04 -56.1729 -5147.8 175.994 -56.0569 -5152.48 177.732 -55.739 -5114.2 179.824 -56.5897 -5145.96 174.178 -57.83 -5235.06 176.026 -55.1358 -5001.99 178.228 -55.9579 -5175.7 176.823 -56.6879 -5033.18 177.592 -56.08 -5083.61 180.245 -57.0602 -5104.54 178.991 -56.7081 -5076.41 176.173 -56.4238 -5071.86 173.5 -57.871 -5277.48 178.193 -56.4367 -5024.19 177.145 -55.751 -5161.76 178.488 -59.071 -5012.71 176.869 -57.5408 -4983.88 178.37 -56.9162 -5017.71 179.203 -58.9362 -4960.2 180.29 -58.3326 -4875.67 178.595 -58.1337 -5002.42 177.412 -56.4319 -4962.84 176.612 -58.7971 -4937.33 177.078 -58.3516 -5010.44 179.64 -58.6353 -4958.45 178.571 -59.9906 -4987.05 180.007 -59.0805 -4652.35 177.101 -59.1301 -4994.91 177.352 -57.9018 -5051.48 179.33 -58.2174 -5093.25 175.138 -58.4859 -5022.1 178.68 -58.575 -4860.79 179.537 -57.0402 -4985.29 177.669 -58.7718 -4999.29 177.917 -58.2609 -5068.06 174.547 -59.7791 -4909.96 175.61 -59.2294 -5121.37 180.329 -58.7295 -4768.49 175.617 -59.6684 -4942.52 178.48 -59.5515 -5162.08 176.373 -59.2989 -4876.7 175.953 -58.9736 -5119.32 175.717 -58.134 -4995.73 177.752 -59.309 -4752.12 176.632 -59.7691 -4737.11 179.882 -57.788 -5086.91 175.335 -58.8983 -5118.12 176.363 -58.3898 -5035.15 174.835 -59.2718 -4945.76 174.617 -58.7871 -5130.46 177.626 -59.8698 -4754.56 177.101 -59.4737 -4906.72 178.453 -57.3775 -5151.5 175.856 -58.618 -5056.37 174.028 -59.4513 -5082.19 173.627 -59.8107 -4765.27 179.893 -57.3556 -4910.61 179.276 -57.4162 -5073.48 176.558 -57.9879 -4979.03 174.017 -58.1757 -5121.97 173.949 -59.0482 -5129.41 174.499 -58.418 -5187.6 177.872 -57.1303 -5015.87 177.642 -57.4745 -5021.93 173.883 -58.5885 -5110.49 172.634 -59.8121 -4845.52 173.185 -59.3464 -4955.68 172.375 -59.3785 -4886.51 174.802 -58.0601 -5254.15 172.55 -59.0813 -4946.93 176.795 -56.174 -5001.45 173.076 -58.8093 -5158.06 179.225 -59.3274 -4515.85 179.248 -59.7725 -4609.07 177.658 -56.7808 -4907.77 172.356 -58.8106 -5077.53 178.931 -57.0902 -5213.17 173.243 -58.3007 -5225.27 172.49 -58.4505 -5212.46 175.981 -57.5992 -5137.67 178.141 -57.8213 -4995.36 178.939 -57.794 -5286.17 175.305 -57.7728 -5118.21 179.995 -59.5657 -4590.81 183.708 -55.8516 -5034.03 182.756 -55.7814 -5083.61 181.299 -56.154 -5124.27 182.305 -55.2602 -5150.71 183.292 -55.3222 -5287.46 181.341 -55.6658 -5171.48 180.43 -55.7769 -5183.56 181.493 -55.2473 -5199.93 180.711 -55.2779 -5142.33 184.02 -55.1547 -5213.72 184.719 -55.2242 -5240.81 182.032 -55.9887 -5241.62 181.981 -55.5867 -5267.19 182.668 -56.2341 -5060.37 184.24 -55.5311 -5244.91 180.55 -56.3226 -5181.45 182.161 -56.5249 -5074.67 181.29 -56.6448 -5111.66 183.342 -56.2327 -5075.52 184.558 -55.9635 -5238.64 188.656 -56.044 -4873.96 185.439 -55.2909 -5262.5 184.121 -56.2916 -5006.78 185.141 -55.6701 -5077.12 180.603 -56.7513 -5080.07 186.189 -55.1352 -5194.55 183.039 -56.6105 -5017.34 181.949 -57.0247 -5043.56 187.18 -55.236 -5036.11 188.101 -55.3035 -4958.17 181.113 -57.1391 -4989.88 185.218 -56.0743 -5040.13 185.967 -55.6048 -5084.03 186.78 -55.5951 -5039.3 184.939 -56.4248 -5344.13 183.799 -56.6414 -5024.52 184.419 -56.6553 -5084.32 186.847 -58.8791 -4814.89 182.742 -57.0089 -4906.88 188.802 -56.5727 -4858.42 183.048 -59.3476 -4748.42 186.327 -56.6373 -5292.23 188.642 -57.3553 -4852.58 186.296 -56.281 -5033.42 186.782 -58.4368 -4755.85 186.169 -58.6167 -5156.28 184.712 -58.6222 -5032.56 184.386 -58.9965 -4921.3 181.606 -58.0508 -4930.94 181.159 -58.3544 -4731.48 180.813 -57.9411 -4903.96 186.532 -55.981 -5131.68 188.537 -58.1154 -4901.43 184.505 -59.3567 -5103.23 185.154 -59.5026 -4989.57 185.179 -59.1048 -5349.9 185.511 -58.3359 -4712.58 181.807 -58.3974 -4770.44 181.569 -58.7618 -4800.26 186.044 -59.014 -5048.48 185.53 -58.7505 -5240.58 183.778 -59.1613 -4477.08 181.799 -57.3921 -4977.9 180.846 -58.6371 -4552.77 186.261 -57.0418 -4281.52 185.624 -56.7537 -5201.48 188.636 -57.019 -5014.14 184.266 -57.0125 -4826.24 184.014 -57.4134 -5021.94 183.522 -57.0206 -5082.84 187.308 -55.9865 -5059.18 182.34 -58.1934 -4966.75 187.921 -56.7426 -5038.11 187.954 -56.2848 -4991.79 186.233 -58.2826 -5067.03 183.05 -58.9013 -4614.66 182.361 -58.6266 -4688.41 184.752 -58.178 -4729.17 185.692 -56.3558 -5100.06 188.234 -55.7099 -4883.16 188.011 -57.1816 -4950.39 182.314 -59.0752 -4727.43 185.801 -55.9904 -5065.03 187.058 -56.4115 -4903.41 187.127 -56.9594 -4709.53 187.597 -55.639 -4839.91 187.959 -55.9386 -4916.72 182.472 -57.4165 -4849.41 183.257 -57.4247 -5060.43 184.863 -57.4038 -4937.96 185.591 -57.1765 -4999.25 187.387 -58.6057 -4699.76 185.969 -57.9814 -5005.71 180.553 -57.4827 -5030.74 184.949 -56.8981 -4922.76 186.149 -57.3759 -4741.4 181.339 -57.6269 -4932.26 183.06 -58.4251 -4687.12 183.81 -58.7224 -4452.12 186.588 -59.2392 -4684.86 185.208 -57.8979 -4806.9 180.867 -58.973 -4682.32 183.912 -58.2132 -4767.9 183.723 -57.7523 -4899.03 182.097 -57.7631 -4875.63 186.68 -58.0656 -4717.48 183.876 -59.6432 -4518.17 188.276 -57.6856 -4542.73 184.698 -59.6852 -4402.56 182.986 -57.8855 -4741.37 185.954 -59.455 -4450.36 187.507 -57.3925 -4737.54 182.995 -59.7832 -4470.92 187.309 -59.3067 -4410.02 187.956 -58.0612 -4693.79 186.794 -57.3712 -4691.38 181.568 -59.2509 -4505.95 185.701 -57.5856 -4759.18 186.754 -59.5206 -4289.73 184.417 -57.821 -4622.41 186.438 -57.69 -4637.74 180.792 -59.3963 -4618.01 187.389 -58.2453 -4623.44 182.3 -59.5147 -4714.42 187.291 -57.7804 -4842.58 187.729 -58.9557 -4533.27 187.37 -59.704 -4258.51 186.558 -59.9008 -4410.51 180.707 -59.7875 -4219.36 188.266 -58.5362 -4604.33 185.441 -59.8967 -4328.96 181.56 -59.741 -4673.65 187.988 -59.2929 -3919.33 182.333 -59.8816 -4279.57 188.6 -59.1282 -4195.31 188.146 -59.8115 -4216.83 188.428 -59.51 -4348.07 187.85 -59.5271 -4573.68 189.291 -55.8792 -4601.86 192.706 -56.7469 -4626.77 189.455 -56.2663 -4567.16 192.496 -56.4139 -4285.89 188.942 -55.1739 -4872.39 188.796 -55.6081 -4817.95 189.646 -56.6613 -4751.2 192.851 -57.094 -4514.74 194.826 -56.5678 -4750.83 195.383 -56.658 -5050.24 195.788 -56.948 -4680.14 196.512 -55.8297 -4997 194.813 -55.2449 -4834.94 194.109 -55.3699 -4619.84 195.66 -55.6565 -4997 193.328 -55.1704 -4831.25 192.938 -55.8734 -4103.26 193.663 -55.7594 -4603.45 193.281 -56.349 -4553.54 194.996 -56.9855 -4332.09 197.151 -55.8017 -4488.4 194.166 -56.7329 -4653.72 195.651 -55.0185 -4997 194.33 -56.2291 -4952.3 190.124 -58.2308 -4693.79 189.349 -56.9909 -4728.08 190.351 -55.5431 -4681.24 190.099 -59.4359 -4676.9 192.946 -55.5227 -4823.73 190.865 -58.5147 -4528.79 196.192 -56.1663 -4721.76 195.978 -56.5739 -4847.14 194.633 -55.7461 -4497.67 189.527 -55.53 -4656.93 195.277 -56.2231 -4120.52 192.05 -56.2628 -4609.86 191.896 -55.97 -4683.35 192.266 -55.6352 -4595.08 192.493 -55.1675 -4706.33 191.29 -55.6515 -4614.62 191.684 -55.172 -4659.28 190.804 -55.1379 -4502.29 190.715 -59.4003 -4549.62 190.833 -58.964 -4170.82 191.694 -58.7946 -4416.8 196.613 -55.3743 -4034.21 188.965 -57.9637 -4371.92 189.529 -57.9996 -4935.04 189.951 -55.9301 -4600.84 191.494 -58.3387 -4397.7 190.167 -56.9998 -4638.75 189.109 -57.2721 -4935.86 191.351 -56.2111 -4366.43 192.21 -59.1501 -4363.57 190.674 -55.9548 -4499.28 191.926 -56.6117 -4674.14 190.402 -56.4424 -4458.26 192.5 -56.0876 -4681.35 192.596 -57.3912 -4680.33 190.458 -59.6955 -4111.47 192.227 -57.048 -4559.17 191.186 -56.6245 -4493.05 191.592 -59.3739 -4369.1 190.123 -57.7692 -4775.14 190.386 -57.4039 -4629.26 190.816 -56.8569 -4588.34 195.623 -57.2591 -4140.01 190.094 -58.6613 -4250.45 189.481 -59.2805 -4470.37 190.899 -58.0728 -4894.56 190.104 -59.096 -4525.17 189.201 -57.6431 -4695.96 193.412 -56.9347 -4588.47 191.468 -56.9748 -4429.88 193.316 -57.349 -4418.03 189.719 -57.3521 -4827.64 192.372 -57.6994 -4263.5 190.926 -57.2271 -4526.49 192.211 -58.392 -4540.94 196.396 -56.8694 -3997 191.767 -57.421 -4117.16 191.767 -57.9389 -4557.84 193.043 -57.707 -4549.52 189.251 -58.3444 -4510.33 195.077 -57.4607 -4572.21 190.99 -57.644 -4578.51 192.408 -59.5279 -4327.61 194.167 -57.2654 -4667.98 193.814 -57.688 -4501.69 192.655 -58.0399 -4093.4 192.655 -58.8284 -4441.6 193.537 -58.1068 -4792.94 196.943 -56.1499 -4121.9 193.666 -58.4782 -4423.36 192.089 -59.9005 -4328.58 194.223 -58.3867 -4672.39 193.454 -58.7632 -4506.9 194.542 -57.6785 -4449.51 194.109 -58.7197 -4223.06 191.176 -59.8324 -4600.07 193.021 -58.4257 -4423.2 193.278 -59.1621 -4204.25 194.387 -58.0264 -4357.02 193.989 -59.0711 -4398.96 196.807 -56.5649 -3997 194.75 -58.6827 -4550.49 195.263 -57.9521 -4547.33 194.568 -58.9731 -4256.02 194.954 -58.3569 -4482.65 193.835 -59.5296 -4333.39 193.067 -59.5396 -4459.06 194.701 -59.3633 -4286.77 196.855 -58.1723 -4036.36 196.393 -57.264 -3997 197.149 -58.3691 -4029.68 197.209 -58.5791 -4023.16 196.674 -58.4638 -4025.97 193.397 -59.9038 -4095.24 196.8 -57.7861 -4023.65 189.283 -58.8337 -4468.92 197.007 -58.7925 -4017.03 196.385 -58.7947 -4013.36 194.036 -59.9172 -4117.19 189.045 -59.49 -4487.29 196.784 -59.0483 -4008.14 196.858 -59.8817 -3997 196.178 -59.1665 -4000.37 196.017 -59.955 -3997 194.477 -59.7496 -4423.26 195.796 -58.8192 -3957.05 195.163 -59.804 -4053.3 189.719 -59.7125 -4451.08 197 -59.4216 -3997 195.292 -59.0289 -4430.18 196.227 -58.0782 -3948.64 197.263 -57.391 -3997 195.615 -59.484 -3997 196.329 -59.5708 -3997 197 -56.9938 -3997 188.915 -59.8093 -4508.63 192.773 -59.8385 -4048.17 192.719 -59.2397 -4485.85 195.801 -58.4397 -3922.75 195.887 -57.6344 -3917.39 195.323 -58.6661 -4717.31 197.648 -55.4859 -4804.1 197.984 -55.1434 -4822.42 198.468 -55.4248 -4421.17 197.747 -55.8832 -4347.07 198.56 -55.0665 -4618.59 198.413 -55.8549 -4231.49 199.105 -55.3351 -4272.21 199.093 -55.7013 -4298.22 197.492 -56.0914 -4111.93 198.066 -56.1832 -4041.67 199.584 -55.2438 -3997 199.123 -56.0263 -4141.15 202.454 -57.3025 -3997 199.569 -56.2887 -3997 202.433 -55.4001 -3997 200.864 -57.6638 -3997 203.561 -58.0728 -3291.55 202.96 -58.0095 -3229.95 204.597 -55.505 -3997 197.609 -56.4432 -3997 200.607 -57.4098 -3997 201.499 -57.8679 -3997 197.367 -58.133 -4027.9 197.663 -58.4763 -4016.57 198.842 -56.3232 -3997 199.457 -56.5945 -3997 201.776 -56.1528 -3997 203.557 -56.7049 -3997 204.821 -55.1869 -3997 204.108 -55.1509 -3997 201.942 -55.1265 -3997 202.123 -56.5365 -3997 197.552 -58.7936 -4012.59 198.479 -57.6945 -3897.44 197.714 -59.3632 -3997 204.433 -55.8467 -3997 199.735 -57.3227 -3997 203.893 -55.5052 -3997 202.605 -55.118 -3997 201.813 -57.2598 -3997 199.758 -55.6029 -3997 200.779 -57.9841 -3814.44 197.341 -59.0796 -4007.78 198.017 -58.2177 -4005.68 200.116 -58.4806 -3997 203.329 -55.1005 -3997 198.742 -58.3798 -3997 199.963 -58.0803 -3997 199.047 -58.027 -3613.52 202.836 -56.5369 -3997 202.86 -56.9433 -3997 199.236 -57.1748 -3997 203.149 -56.3407 -3997 202.007 -55.4634 -3997 202.283 -57.9349 -3635.96 202.003 -57.5753 -3997 198.493 -59.0395 -3997 202.473 -56.152 -3997 198.243 -58.5184 -3997 201.25 -57.4131 -3997 200.036 -59.2772 -3997 201.732 -55.7549 -3997 198.098 -58.7773 -4000.7 203.104 -55.5457 -3997 200.195 -57.6122 -3997 200.44 -59.8248 -3990.01 200.388 -59.484 -3997 200.802 -58.4294 -3997 197.747 -57.8111 -3997 199.867 -59.5543 -3997 200.654 -59.187 -3997 199.94 -58.9706 -3997 202.49 -55.7222 -3997 198.296 -56.5125 -3997 203.117 -55.9923 -3997 198.686 -59.8693 -3997 199.87 -58.6708 -3997 200.449 -58.7722 -3997 197.944 -59.0783 -3999.45 198.451 -59.424 -3997 202.016 -56.9569 -3997 201.439 -56.6661 -3997 199.257 -59.178 -3997 203.3 -57.7973 -3997 203.295 -57.4384 -3997 204.343 -56.2076 -3997 203.631 -57.1166 -3972.44 203.716 -56.2935 -3997 199.824 -59.8839 -3997 201.444 -56.3396 -3997 198.691 -58.7575 -3997 199.251 -59.6809 -3997 198.395 -58.0184 -3738.93 204.301 -56.5928 -3906.13 198.079 -56.8118 -3997 198.505 -57.2315 -3997 199.506 -58.3985 -3997 202.712 -57.6647 -3997 203.772 -55.8998 -3997 197.445 -56.7779 -3997 197.705 -57.1085 -3997 197.937 -57.4448 -3997 200.18 -57.2753 -3997 199.759 -56.9607 -3997 200.179 -56.6105 -3997 201.309 -58.8951 -3940.34 201.605 -58.5357 -3662.09 200.601 -57.0674 -3997 200.866 -56.7482 -3997 200.77 -56.364 -3997 197.799 -59.8414 -3997 198.885 -56.8011 -3997 201.384 -55.2817 -3997 199.651 -55.9648 -3997 200.163 -55.3467 -3997 200.423 -55.6767 -3997 199.334 -58.7259 -3997 200.281 -55.9652 -3997 200.886 -55.5165 -3997 200.09 -56.2386 -3997 201.056 -55.9672 -3997 199.306 -57.5904 -3997 201.331 -57.0186 -3997 201.981 -58.8187 -3447.38 205.062 -55.8471 -3745.87 204.855 -56.123 -3767.37 201.46 -59.3522 -3761.98 200.951 -59.5871 -3842.79 205.387 -55.2477 -3739.42 204.927 -56.4586 -3627.63 205.251 -55.5206 -3780.08 201.323 -58.2119 -3645.09 202.132 -59.175 -3471.03 204.331 -57.0457 -3763.14 201.096 -59.9065 -3646.55 204.985 -57.1603 -3563.45 204.935 -56.8464 -3596.55 202.07 -59.5223 -3511.49 204.113 -57.4509 -3587.4 201.94 -58.2342 -3220.76 201.681 -59.7745 -3552.86 205.457 -57.0832 -3349.26 205.462 -56.2319 -3423.72 204.8 -57.4188 -3493.72 203.956 -57.8314 -3414.63 202.298 -58.5713 -3086.82 205.393 -57.3888 -3368.71 202.63 -59.5046 -3166.45 204.687 -57.7575 -3335.7 202.445 -59.8052 -3307.21 202.601 -58.9268 -3079.15 204.075 -58.2013 -3296.77 205.315 -57.702 -3263.85 202.767 -59.2398 -3060.92 203.73 -58.3152 -3282.11 204.044 -58.4503 -3256.7 203.668 -58.5504 -3246.81 203.271 -58.3035 -3230.64 204.618 -58.1043 -3229.3 204.528 -58.4358 -3227.08 203.654 -58.8355 -3204.64 204.219 -58.7486 -3199.99 203.056 -58.6526 -3164.26 202.631 -58.2837 -3159.43 204.002 -59.1127 -3148.36 205.247 -58.0275 -3122.08 203.286 -59.1023 -3137.07 204.975 -58.7386 -3149.77 205.177 -58.3762 -3143.48 204.683 -59.1013 -3122.47 203.166 -59.8202 -3037.58 205.476 -59.1409 -3059.53 203.797 -59.4399 -3102.38 204.431 -59.4349 -3077.31 203.641 -59.7009 -3065.42 205.603 -59.5077 -3017.37 203.215 -59.4679 -3085.18 205.05 -59.4413 -3050.97 204.239 -59.8073 -3023.31 203.773 -59.9446 -3019.52 205.38 -59.7664 -2997 204.816 -59.707 -3016.39 209.476 -54.8529 -3828.85 205.814 -55.1326 -3625.83 208.929 -54.9016 -3737.53 207.687 -55.0026 -3711.02 209.409 -55.199 -3700.09 208.278 -54.8896 -3750.52 207.077 -55.0162 -3611.9 208.202 -55.2821 -3621.42 208.794 -55.2278 -3610.14 205.814 -55.4923 -3482.12 207.601 -55.3315 -3558.72 209.258 -55.4785 -3581.92 206.418 -55.045 -3532.27 205.743 -55.8714 -3406.39 206.987 -55.3655 -3452.5 208.751 -55.5658 -3490.7 208.142 -55.64 -3493 207.496 -55.6751 -3397.74 209.369 -55.795 -3486.91 206 -56.2002 -3158.33 206.382 -55.4175 -3357.19 208.737 -55.9713 -3353.29 208.003 -55.9865 -3326.57 206.888 -55.7111 -3292.5 206.002 -56.4756 -3118.66 209.48 -56.1964 -3362.25 205.596 -56.7249 -3297.14 207.354 -56.0161 -3233.32 205.97 -57.0513 -3114.91 205.908 -57.3219 -3134.28 208.951 -56.3268 -3243.99 205.888 -57.6282 -3133.71 208.435 -56.2968 -3246.58 206.309 -55.7638 -3195.1 206.744 -56.0427 -3129.4 207.814 -56.3301 -3155.21 208.782 -56.5303 -3159.95 209.346 -56.6011 -3173.09 205.868 -57.9441 -3049.22 208.318 -56.6178 -3093.86 206.261 -56.0493 -3098.23 207.159 -56.3569 -3062.38 205.815 -58.281 -3051.79 205.794 -58.7001 -3042.27 206.244 -59.1018 -2997 207.636 -56.721 -2997 208.876 -56.8017 -3068.22 209.448 -56.9531 -2997 206.098 -59.4319 -2997 206.503 -56.3772 -2997 206.452 -56.8435 -2987.22 206.012 -59.7578 -2997 206.412 -58.1882 -2975.88 209.46 -57.2378 -2997 206.319 -57.5249 -2971.37 206.548 -60.0251 -2997 208.16 -58.7808 -2997 207.812 -58.9811 -2997 208.839 -58.401 -2997 206.315 -58.4833 -2997 207.24 -59.0609 -2997 207.21 -59.3518 -2997 207.551 -58.2243 -2997 207.638 -58.6156 -2997 206.614 -59.7036 -2997 209.431 -57.5375 -2997 208.897 -57.3296 -2997 209.008 -57.0664 -2997 206.424 -57.2549 -2978.37 206.499 -57.8322 -2969.92 207.259 -58.785 -2997 206.959 -58.4538 -2997 208.398 -57.0211 -2997 209.224 -58.1982 -2990.87 206.647 -58.8137 -2997 206.793 -59.1408 -2997 206.684 -59.3925 -2997 208.175 -58.4915 -2997 208.221 -58.143 -2997 208.786 -58.0192 -2981.82 207.773 -57.9235 -2997 208.834 -57.6701 -2997 207.731 -59.3063 -2997 207.671 -59.5807 -2997 207.175 -59.6373 -2997 207.625 -59.813 -2997 207.248 -59.9826 -2997 208.248 -57.7935 -2997 208.28 -57.4218 -2997 207.702 -57.1492 -2997 207.599 -57.5675 -2997 207.158 -56.9194 -2997 207.037 -57.2186 -2994.11 206.982 -56.6436 -2997 207.208 -57.8733 -2986.95 208.446 -59.0331 -2997 208.729 -58.7827 -2997 208.287 -59.2855 -2997 208.927 -59.0656 -2997 208.175 -59.5565 -2997 208.832 -59.2807 -2997 208.741 -59.5461 -2997 208.061 -59.7975 -2997 209.235 -59.8618 -2997 206.853 -57.5507 -2983.72 209.273 -58.7043 -2997 209.359 -58.9932 -2997 208.568 -59.7972 -2997 209.293 -59.2255 -2997 209.346 -59.495 -2997 209.483 -58.4666 -2995.27 209.413 -57.9018 -2974.34 209.617 -58.1983 -2975.83 206.941 -58.1163 -2983.31 161.544 -60.2243 -3525.22 162.298 -60.1773 -4177.69 161.973 -60.6025 -3340.42 160.758 -60.2458 -3212.45 160.057 -60.1546 -3555.35 161.155 -60.5798 -2997 161.391 -60.89 -2997 157.17 -64.5123 -2997 157.217 -63.9877 -2997 157.333 -64.2218 -2997 161.623 -64.5629 -2982.37 157.573 -64.7144 -2997 158.33 -64.6581 -2997 157.833 -64.3897 -2997 161.188 -61.6205 -2746.24 160.661 -60.9049 -2997 160.589 -60.5767 -2997 161.053 -64.6886 -2977.87 157.513 -63.7818 -2877.41 162.002 -61.0933 -2997 159.749 -60.4667 -2868.2 157.695 -64.0654 -2980.66 159.398 -64.7544 -2949.73 158.187 -60.1437 -2854.24 157.814 -59.9523 -2829.09 157.372 -63.4654 -2679.58 158.668 -60.3417 -2524.65 160.246 -60.4323 -2997 160.455 -64.7423 -2968.68 161.691 -61.4333 -2997 161.772 -61.7289 -2997 158.966 -64.6863 -2919.31 159.344 -60.1769 -2739.02 157.52 -60.5987 -2997 157.48 -60.2752 -2711.44 158.044 -60.464 -2951.33 158.446 -64.3601 -2885.04 158.242 -64.1276 -2862.91 161.156 -61.2541 -2997 161.812 -62.0833 -2525.39 161.592 -64.2263 -2839.74 157.4 -60.8864 -2997 157.393 -61.2289 -2853.56 157.444 -61.4873 -2705.26 157.91 -60.7309 -2877.36 162.227 -63.3928 -2805.87 160.108 -60.6994 -2956.38 160.699 -61.5115 -2177.51 159.148 -60.5678 -2987.6 158.101 -61.02 -2662.76 161.119 -64.3853 -2869.2 160.593 -64.4836 -2879.93 158.092 -63.8567 -2765.88 158.485 -60.6852 -2899.27 159.339 -64.5526 -2859.54 159.927 -64.548 -2858.7 158.909 -64.4563 -2816.53 159.575 -60.7505 -2877.46 160.285 -64.3205 -2813.52 159.446 -64.3264 -2758.45 161.11 -64.1439 -2779.72 157.944 -61.37 -2550.39 157.42 -63.2125 -2492.79 159.923 -64.2559 -2750.61 162.008 -62.8983 -2463.46 158.562 -63.9273 -2619.05 158.98 -60.9562 -2763.05 157.984 -63.5668 -2639.21 160.697 -64.2296 -2791.3 158.907 -64.1463 -2677.98 160.261 -64.0972 -2728.66 161.201 -61.9516 -2009.45 161.374 -63.9142 -2712.65 161.712 -63.5788 -2583.02 157.334 -61.7399 -2628.28 157.8 -61.604 -2497.09 159.822 -61.05 -2642.63 160.77 -63.9639 -2696.83 158.788 -60.004 -2048.71 158.554 -63.6714 -2496.66 158.517 -61.2555 -2596.68 160.391 -61.2773 -2391.71 160.249 -63.798 -2617.13 159.642 -64.0152 -2631.58 159.167 -61.3596 -2526.55 157.894 -63.273 -2494.05 160.903 -63.61 -2572.76 159.057 -63.8243 -2534.05 159.637 -63.6639 -2501.58 161.767 -63.168 -2418 157.906 -61.8383 -2337.16 157.345 -63.0235 -2349.44 160.205 -63.4598 -2487.77 161.847 -62.4323 -2171.29 158.539 -63.3364 -2338.18 159.837 -61.3742 -2411.76 161.257 -63.3279 -2485.88 160.693 -63.2474 -2455.19 159.593 -63.3295 -2373.68 158.395 -61.5718 -2418.16 157.391 -62.0654 -2374.25 159.084 -63.5096 -2393.37 161.154 -63.0525 -2379.31 159.572 -61.6013 -2293.88 160.648 -62.9234 -2338.02 157.766 -63.0194 -2319.53 158.28 -63.0377 -2280 160.073 -63.0833 -2334.77 159.006 -61.7009 -2313.93 161.83 -62.6935 -2264.06 157.127 -62.8909 -2254.74 159.093 -63.2445 -2288.35 161.073 -62.8051 -2284.11 161.53 -62.8687 -2307.87 158.021 -62.1482 -2136.75 158.496 -61.9006 -2217.56 160.242 -62.7946 -2246.7 160.168 -61.5694 -2221.33 160.672 -62.5722 -2211.25 159.404 -61.8182 -2167.77 158.092 -62.8152 -2156.67 159.037 -61.9663 -2121.87 159.421 -63.0395 -2248.17 161.363 -62.6087 -2227.92 157.525 -62.4069 -2035.94 160.078 -62.6121 -2161.75 158.848 -63.0304 -2183.02 159.886 -61.8181 -2091.05 159.77 -62.8031 -2198.8 157.601 -62.754 -2138.5 161.256 -62.3043 -2108.23 158.651 -62.1902 -2025.53 159.204 -62.7685 -2124.93 160.106 -62.3749 -2077.35 157.15 -62.6449 -2018.91 159.527 -62.0194 -2006.37 158.208 -62.4995 -1997 158.603 -62.7656 -2060.82 159.62 -62.5451 -2087.58 160.636 -62.1777 -2061.99 160.554 -61.8148 -1997 160.054 -62.0746 -1997 158.994 -62.4519 -1997 159.574 -62.2678 -1997 159.149 -62.175 -1997 171.474 -60.4488 -4743.68 170.905 -60.1449 -4910.83 171.724 -60.0275 -4701.8 171.18 -60.8304 -4997 169.124 -60.1746 -4658.61 165.405 -60.1987 -4789.29 169.985 -60.2535 -4979.03 170.644 -60.5682 -4589.81 168.332 -60.1452 -4557.69 170.941 -61.1435 -4554.55 169.334 -60.4997 -4540.69 167.536 -60.0575 -4572.19 168.65 -60.5212 -4490.31 171.104 -61.4779 -4368.9 166.155 -60.2455 -4295.62 167.738 -60.5298 -4414.18 169.844 -60.7147 -4382.04 170.439 -60.9525 -4235.07 169.086 -60.8462 -4308.73 166.901 -60.362 -4409.51 165.661 -60.498 -3999.52 168.239 -60.9298 -4223.02 166.995 -60.7144 -4184.6 171.167 -61.9106 -3997.01 170.33 -61.3323 -3997 169.656 -61.1141 -4115.75 167.408 -60.9838 -4125.42 168.74 -61.3478 -3997 166.277 -60.6751 -3997 166.65 -61.0213 -3997 167.756 -61.3391 -3626.39 162.666 -60.4399 -3997 163.05 -60.1549 -4241.2 164.623 -60.1853 -3756.64 164.952 -60.5694 -3707.72 169.561 -61.5509 -3997 163.832 -60.1679 -4200.55 163.319 -60.5001 -3997 170.315 -61.7849 -3997 164.106 -60.528 -3997 170.545 -62.1805 -3997 169.976 -62.102 -3323.3 169.543 -61.9443 -3699.73 171.214 -62.3066 -3866.33 171.795 -62.0929 -3997 171.758 -62.3858 -3997 166.973 -61.3335 -3274.57 163.56 -60.9261 -3131.44 165.937 -61.0547 -2997 165.53 -60.8103 -2997 164.961 -60.9667 -2997.02 162.734 -60.7884 -3039.32 169.566 -62.2056 -3033.09 170.62 -62.5561 -2676.98 168.845 -61.8216 -3637.45 164.373 -60.889 -3387.71 171.404 -62.7035 -3091.71 167.218 -61.6222 -3154.08 166.265 -61.3498 -2997 164.589 -61.1347 -3018.11 163.084 -62.0328 -2825.22 164.759 -63.3222 -2997 163.891 -63.5124 -2997 165.6 -63.4772 -2997 163.671 -62.1888 -2997 163.203 -64.2733 -2997 163.832 -64.6929 -2997 163.185 -62.8991 -2997 162.861 -61.2078 -2997 165.671 -63.8783 -2997 164.458 -63.7662 -2997 165.086 -63.6855 -2997 165.936 -61.6098 -2997 165.427 -64.3897 -2997 164.489 -62.9045 -2997 164.382 -64.1418 -2997 162.14 -64.3854 -2997 165.391 -61.0977 -2997 168.498 -64.0515 -2997 168.717 -64.4151 -2997 162.296 -61.4831 -2997 166.541 -61.6438 -2997 162.405 -61.8667 -2997 165.08 -62.9784 -2997 163.839 -62.7346 -2997 163.893 -63.1171 -2997 165.015 -62.6965 -2997 167.112 -64.1182 -2997 163.829 -64.3641 -2997 168.273 -64.632 -2997 163.567 -61.3742 -2997 166.916 -61.986 -2997 165.096 -64.6324 -2997 164.985 -63.9879 -2997 165.575 -63.1365 -2997 167.022 -63.734 -2997 164.091 -61.4731 -2997 166.447 -64.3472 -2997 166.405 -63.9854 -2997 162.625 -64.2294 -2997 167.522 -63.4696 -2997 169.726 -64.5675 -2997 165.857 -64.2213 -2997 165.576 -62.5059 -2997 165.489 -62.1994 -1997 162.422 -62.6751 -2819.59 163.891 -62.4333 -2997 166.306 -63.6247 -2997 169.115 -64.151 -2997 162.88 -63.8816 -2997 169.213 -64.6236 -2997 163.304 -63.6258 -2997 167.08 -64.523 -2997 167.922 -61.778 -2997 166.873 -63.404 -2996.99 170.376 -62.7861 -2997 165.816 -64.5398 -2997 167.878 -64.3196 -2997 163.385 -64.5891 -2997 166.246 -63.2774 -2851.97 170.115 -64.0889 -2945.59 163.854 -61.7998 -2997 163.011 -61.6274 -2997 170.866 -64.6035 -2997 164.109 -61.1988 -2997 167.831 -63.8293 -2997 162.756 -63.4917 -2997 165.382 -64.1563 -2997 164.96 -62.3867 -2526.04 165.603 -62.8222 -2997 171.44 -64.5787 -2997 170.686 -64.0597 -2662.25 171.067 -64.3297 -2997 169.282 -64.4037 -2997 166.881 -62.7861 -2890.99 166.919 -62.427 -2997 166.823 -63.1029 -2754.39 167.293 -63.2265 -2974.45 169.698 -64.2556 -2997 162.459 -62.2575 -2931.28 164.986 -61.2497 -2997 170.355 -64.39 -2997 163.262 -63.2877 -2997 164.393 -64.5111 -2997 164.944 -64.3032 -2997 170.779 -62.8079 -1997 166.399 -64.6798 -2997 169.96 -62.3911 -2997 164.963 -62.1264 -2177.59 168.794 -64.7316 -2997 162.11 -63.9808 -2962.86 162.347 -63.6581 -2991.47 164.518 -61.3694 -2996.99 164.414 -62.5647 -2943.8 167.695 -64.6937 -2997 164.348 -62.1992 -2984.45 164.746 -61.8506 -2356.62 164.425 -61.6082 -2926.09 170.092 -62.6502 -2996.99 165.544 -61.3797 -2997 163.7 -63.951 -2997 166.226 -62.9595 -2490.8 168.411 -63.0973 -2254.48 168.836 -63.2927 -2745.04 171.754 -64.2567 -2569.71 165.96 -61.9208 -2766.66 170.326 -64.7192 -2997 168.995 -62.201 -1997 162.514 -63.1042 -2880.99 168.484 -63.7467 -2216.01 168.978 -63.8524 -2106.23 163.214 -62.4633 -2712.95 166.182 -62.2785 -2361.89 169.597 -63.9324 -2323.23 167.953 -62.9273 -1997 171.329 -64.0096 -2240.05 167.675 -62.2204 -2616.81 170.265 -63.7832 -2276.63 171.486 -63.0854 -2052.1 169.415 -62.3998 -2753.88 168.263 -63.4507 -1997 166.229 -62.632 -2156.45 167.414 -62.974 -2608.86 168.352 -62.0846 -2200.42 171.863 -64.7421 -2866.06 165.307 -61.9666 -1997 170.478 -63.0244 -2435.05 164.936 -61.529 -2469.59 169.926 -62.8769 -2660.11 167.655 -62.6359 -2235.49 169.575 -62.6408 -2523.25 165.398 -61.7165 -1997 168.425 -62.758 -1997 170.985 -63.7567 -1997 168.347 -62.4101 -1997 169.733 -63.6562 -1997 171.957 -63.8961 -2101.21 168.879 -63.5635 -1997 171.013 -62.9696 -1997.02 169.914 -63.1771 -2087.5 169.171 -62.9678 -2029.4 170.074 -63.4689 -1997 171.519 -63.7321 -1997 170.679 -63.4924 -1997 169.401 -63.3999 -1997 169.309 -63.6765 -1997 170.917 -63.2176 -1997 171.372 -63.4442 -1997 167.818 -63.1873 -1997 170.412 -63.2761 -1997 171.956 -63.5765 -1997 168.978 -62.5605 -1997 177.431 -60.4318 -4868.59 178.066 -60.6956 -4997 175.366 -61.5392 -4786.85 175.142 -60.175 -4701.38 174.086 -60.2747 -4793.93 178.71 -60.8411 -4997 178.63 -60.537 -4997 178.8 -60.3029 -4997 174.038 -60.7665 -4997 176.872 -60.1524 -4575.12 174.674 -61.3526 -4144.64 176.091 -60.1427 -4746.9 178.178 -60.3025 -4746.74 178.697 -61.2136 -4502.76 174.815 -60.6429 -4759.82 174.572 -60.9971 -4971.97 173.444 -60.9658 -4629.6 173.985 -61.1796 -4997 173.234 -60.17 -5102.89 172.411 -60.3937 -4846.92 173.315 -60.5873 -4735.38 178.166 -61.0335 -4609.99 176.054 -61.7464 -4847.13 173.983 -61.6506 -4635.08 171.863 -60.7518 -4760.67 175.946 -61.3508 -4633.01 176.608 -60.5501 -4215.77 175.714 -60.5855 -4408.42 172.595 -60.9616 -4433.85 171.655 -61.1243 -4579.31 179.209 -60.1359 -4693.18 173.191 -61.358 -4299.81 176.128 -62.1097 -3997 174.484 -62.0577 -3997 179.232 -61.3666 -3997 175.344 -61.0584 -3997 172.107 -61.598 -4067.59 177.34 -61.0214 -3997 179.414 -60.5483 -4138.15 176.656 -61.4575 -3997 174.79 -61.7234 -3997 176.269 -60.9894 -3997 179.33 -61.0341 -3997 173.019 -61.8426 -4014.86 176.832 -61.9592 -3997 178.087 -61.3761 -3997 172.38 -62.0236 -3997 179.095 -62.2757 -3997 179.559 -61.6588 -3997 180.976 -60.9559 -3997 180.344 -62.5118 -3997 181.054 -62.6753 -3997 180.498 -62.8331 -3997 176.531 -62.3212 -3997 179.161 -61.9389 -3997 181.383 -61.7529 -3997 177.884 -63.4809 -3997 178.764 -61.6189 -3997 177.741 -62.0375 -3997 181.032 -62.1871 -3997 180.028 -60.0708 -4040.09 178.526 -62.0095 -3997 179.91 -62.0968 -3997 181.199 -61.3669 -3997 175.864 -62.4772 -3997 180.497 -61.6559 -3997 177.259 -62.4377 -3997 176.58 -62.6071 -3930.16 178.112 -61.7348 -3997 175.371 -62.8536 -3997 175.373 -62.0182 -3997 179.861 -62.7859 -3983.97 174.879 -62.4729 -3997 177.838 -63.1162 -3997 177.791 -62.7694 -3997 178.284 -62.4508 -3997 179.661 -62.4672 -3997 180.558 -60.5453 -4309.79 174.162 -62.6903 -3605.74 174.146 -62.3676 -3997 174.685 -62.8582 -3997 176.189 -62.8767 -3664.98 173.533 -62.5146 -3997 181.093 -60.1561 -4596.97 174.867 -63.2119 -3532.32 173.663 -62.1144 -3997 181.657 -62.9292 -3850.03 179.12 -62.6683 -3826.28 180.526 -61.2431 -3997 180.105 -60.9368 -3997 172.842 -62.7164 -3351.6 172.831 -62.2911 -3997 173.51 -62.8886 -2843.71 172.191 -62.5501 -3933.04 177.458 -61.6041 -3997 172.185 -62.2757 -3997 172.802 -63.1206 -2966.27 177.073 -62.9008 -3897.52 177.248 -63.311 -3693.85 179.867 -61.311 -3997 180.956 -63.0546 -3786.89 174.474 -63.9249 -3885.43 175.731 -63.1966 -3410.64 174.108 -63.3972 -3454.97 173.52 -63.2344 -2997 174.864 -64.0936 -3639.8 172.148 -62.909 -2608 178.482 -62.9143 -3689.91 180.225 -63.1166 -3718.88 177.372 -63.5953 -3431.38 179.338 -63.116 -3561.59 181.56 -63.3513 -3482.2 180.742 -63.422 -3506.76 176.515 -63.2248 -3169.12 173.982 -63.7356 -3353.64 177.775 -63.7896 -3396.25 179.939 -63.4745 -3329.92 178.55 -63.321 -3256.05 179.19 -63.5486 -3179.88 174.642 -63.5996 -2839.21 173.027 -63.3964 -2554.57 181.249 -63.7336 -3174.11 180.44 -63.8396 -3063.22 174.961 -64.3962 -2997 176.798 -63.5596 -3027.07 175.358 -63.5313 -2263.94 179.679 -63.8208 -2997 179.115 -63.855 -2908.22 178.501 -63.7223 -2997 174.375 -64.2281 -3129.74 177.156 -63.8356 -2997 181.072 -64.1465 -2997 175.08 -63.843 -2997.01 177.138 -64.6606 -2997 176.456 -64.5694 -2997 178.189 -64.0349 -2956.55 176.987 -64.1362 -2997 176.881 -64.391 -2997 181.721 -64.3713 -2997 180.419 -64.2102 -2865.68 180.738 -64.4141 -2997 178.865 -64.3498 -2080.71 172.39 -64.6271 -2581.35 176.448 -63.8858 -2997 175.908 -64.7193 -2997 177.423 -64.3749 -2954.64 175.355 -64.6399 -2997 176.419 -64.245 -2997 179.401 -64.1466 -2997 177.591 -64.0756 -2695.86 174.229 -64.5506 -2997 171.942 -64.5137 -2868.18 175.78 -64.3958 -2997 175.392 -64.1067 -2997 174.749 -64.7218 -2997 173.63 -64.612 -2997 173.475 -63.5489 -2686.63 176.094 -63.5277 -2997 179.937 -64.3488 -2906.75 179.98 -64.0699 -2997 181.178 -64.5565 -2997 173.037 -64.6875 -2154.88 173.795 -64.3419 -2770.25 181.696 -64.708 -2997 174.142 -63.0468 -2748.62 175.72 -63.8318 -2953.98 173.239 -64.4139 -2278.41 178.765 -64.0583 -2537.36 173.903 -64.0493 -2022.3 179.389 -64.5305 -2853.32 172.314 -64.3627 -2500 180.649 -64.6893 -2651.5 178.444 -64.2468 -2391.56 180.353 -64.4673 -2531.44 177.928 -64.6418 -1997.01 172.505 -63.4464 -2088.48 177.997 -64.3045 -2449.33 172.289 -64.1227 -2419.38 175.951 -64.0962 -2251.45 173.413 -64.1851 -2009.33 172.756 -64.4568 -1997 172.586 -63.9061 -1997 172.871 -63.6468 -1997 173.283 -63.8945 -1997 172.051 -63.2582 -1997 180.021 -64.6739 -2503.22 178.392 -64.4414 -2119.78 172.375 -63.6944 -1997 172.836 -64.1919 -1997 178.728 -64.664 -1997 188.726 -61.0389 -4913.76 189.333 -61.1457 -3997 188.191 -60.8318 -4148.95 188.841 -61.3285 -3997 183.637 -60.1117 -4545.54 182.821 -60.1719 -4216.4 184.518 -60.0269 -4157.23 186.878 -60.3301 -4309.38 183.351 -60.5752 -4009.68 184.29 -60.4596 -4203.43 186.06 -60.3176 -4676.8 187.617 -60.1246 -4158.41 184.345 -62.8614 -3918.5 190.217 -60.5707 -3997 183.368 -61.0877 -3997 186.116 -61.1217 -3997 186.658 -60.7356 -3997 183.089 -62.3817 -3997 184.063 -61.3688 -3997 184.82 -61.208 -3997 183.748 -62.6323 -3997 187.464 -61.3444 -3997 185.34 -61.9696 -3997 187.47 -60.9906 -3997 186.875 -61.209 -3997 189.88 -61.3577 -3997 181.838 -61.1027 -3997 185.571 -61.49 -3997 182.566 -60.8538 -3997 184.446 -62.4882 -3997 183.846 -62.2303 -3997 188.203 -60.474 -3997 191.031 -60.5072 -3997 185.75 -60.7259 -3997 182.673 -61.6775 -3997 182.472 -62.54 -3997 183.189 -61.9523 -3997 182.207 -62.0643 -3997 184.932 -60.7877 -3997 181.993 -61.5352 -3997 190.035 -61.0201 -3997 188.146 -61.2675 -3997 182.632 -61.2967 -3997 188.601 -60.1694 -4139.33 184.59 -62.0965 -3997 184.722 -61.6611 -3997 188.624 -61.6426 -3976.93 184.14 -60.91 -3997 191.21 -60.2059 -3955.72 185.44 -61.0643 -3997 189.11 -60.6724 -3997 183.317 -61.5335 -3997 181.794 -62.5349 -3997 187.109 -61.5399 -3997 190.494 -60.1012 -4845.75 183.956 -61.8093 -3997 186.454 -61.5261 -3997 187.497 -60.5718 -3997 189.399 -61.5583 -3997 186.12 -61.8998 -3997 182.505 -60.4771 -3997 182.015 -60.1781 -4312.82 185.157 -60.3582 -4080.29 181.659 -60.6078 -3997 189.525 -60.1708 -4334.62 185.898 -62.2802 -3862.98 184.996 -62.7606 -3885.49 190.982 -60.9811 -3371.18 185.167 -62.3734 -3997 186.967 -61.9173 -3754.55 190.581 -61.4426 -3463.29 190.05 -61.6218 -3787.56 187.784 -61.7026 -3911.74 182.242 -62.8144 -3932.98 183.013 -62.9102 -3700.43 184.81 -63.0661 -3824 183.795 -62.9884 -3677.1 189.167 -61.9525 -3758.37 186.52 -62.2145 -3833 188.45 -62.0181 -3773.81 185.74 -62.6703 -3683.11 188.96 -62.2854 -3634.1 186.471 -62.5338 -3623.25 189.849 -61.9111 -3575.36 184.898 -63.3226 -3603.9 182.255 -63.1628 -3651.98 188.381 -62.3342 -3599 183.599 -63.3244 -3381.16 185.537 -63.1536 -3473.39 189.364 -62.5346 -3352.11 184.291 -63.2395 -3483.06 187.775 -62.1658 -3516.29 186.408 -62.9426 -3388.46 187.143 -62.3795 -3175.88 188.761 -62.5874 -3462.25 182.19 -63.4908 -3384.33 185.237 -63.5585 -3354.88 187.954 -62.6008 -3301.87 184.616 -63.5954 -3337.25 189.635 -62.2584 -3312.14 182.87 -63.481 -3254.7 185.807 -63.5373 -3188.94 187.144 -62.7696 -2997 190.476 -61.8493 -3047.67 188.595 -62.9227 -3263.15 186.435 -63.3842 -3140.2 184.054 -63.5717 -3075.94 190.092 -62.6835 -2997 189.31 -62.8467 -3181.75 181.834 -63.6731 -3145.79 185.632 -63.8511 -3034.95 187.849 -63.0141 -2997.01 190.327 -62.2223 -3067.9 189.141 -63.1959 -3026.6 184.987 -63.9129 -3036.12 188.456 -63.2676 -3054.51 186.25 -63.7631 -2997 182.363 -63.8039 -3081.08 181.785 -63.9915 -2997 189.857 -63.1258 -2997 187.139 -63.1546 -2997 183.568 -63.7558 -2997 186.138 -64.1453 -2997 188.948 -63.5342 -2997 190.994 -62.1163 -2997 190.913 -62.5154 -2997 190.951 -62.9079 -2997 183.565 -64.5417 -2997 190.479 -63.0969 -2997 183.599 -64.1802 -2997 184.821 -64.3052 -2997 183.156 -64.7085 -2997 184.137 -64.4452 -2997 188.233 -63.8999 -2997 187.269 -63.851 -2997 182.423 -64.2387 -2997 184.245 -63.9742 -2997 182.712 -64.5403 -2997 187.776 -63.7004 -2997 191.035 -61.7762 -2997 187.743 -63.9791 -2997 185.857 -64.4215 -2997 182.232 -64.6056 -2997 183.08 -64.3745 -2997 188.336 -63.5927 -2997 182.669 -64.7741 -2997 186.761 -63.9912 -2997 189.338 -64.2789 -2997 188.735 -64.1026 -2997 187.807 -63.3695 -2997 188.611 -64.5517 -2997 188.079 -64.2262 -2997 186.789 -63.6909 -2997 182.996 -63.9742 -2997 185.466 -64.2065 -2997 189.636 -63.4937 -2997 187.215 -63.5198 -2997 186.394 -64.7644 -2997 185.984 -64.6561 -2997 186.336 -64.4902 -2997 190.177 -64.675 -2997 189.896 -64.4054 -2997 189.432 -64.6518 -2997 189.96 -64.0969 -2997 189.999 -63.7756 -2997 188.73 -63.7981 -2997 190.424 -63.4884 -2997 186.717 -64.2984 -2997 191.316 -63.7264 -2997 191.075 -63.2877 -2997 191.525 -63.0977 -2997 187.739 -64.6046 -2997 187.328 -64.2242 -2997 186.955 -64.6261 -2997 184.615 -64.6709 -2997 185.373 -64.6042 -2997 189.347 -63.867 -2997 191.02 -64.6464 -2997 190.5 -64.3274 -2997 190.599 -63.9356 -2997 191.659 -60.1388 -4534.75 198.528 -60.2646 -3997 200.147 -60.1923 -3997 198.861 -64.6462 -3071.83 196.691 -60.2661 -3997 194.65 -60.1341 -4330.12 193.819 -60.9089 -3997 196.091 -60.5216 -3997 197.36 -60.2494 -3997 199.77 -61.6379 -3692.34 198.579 -60.977 -3997 195.636 -61.0197 -3997 199.35 -60.1497 -3997 197.734 -60.5029 -3997 193.536 -60.5916 -3997 193.104 -60.8055 -3997 194.618 -60.896 -3997 196.484 -60.979 -3997 198.17 -60.5079 -3997 195.722 -61.4469 -3895.42 192.897 -60.2915 -4421.8 200.856 -60.1864 -3527.04 195.146 -60.5406 -3997 200.576 -60.5281 -3627.11 198.637 -60.6713 -3997 195.428 -60.1855 -3607.29 199.443 -64.6916 -3997 194.464 -60.4979 -3997 200.826 -64.7481 -3997 192.282 -60.6977 -3975.93 194.047 -60.6361 -3997 197.909 -60.2821 -3997 191.658 -60.4391 -3997 193.858 -60.2828 -4116.84 200.161 -64.6988 -3997 199.169 -61.5787 -3997 198.851 -61.2873 -3997 199.095 -64.3969 -3907.97 198.664 -64.1308 -2997 197.123 -61.2474 -3837.4 197.182 -60.7151 -3997 195.033 -61.3636 -3862.98 198.049 -60.7598 -3997 198.003 -61.1771 -3778.7 192.12 -60.3007 -4391.67 199.798 -64.4076 -3854.72 199.826 -60.555 -3808.25 196.387 -61.3911 -3379.91 199.143 -60.5306 -3874.79 196.664 -61.7481 -3295.92 194.193 -61.2979 -3793.68 191.583 -60.7439 -3887.7 193.419 -61.2087 -3830.39 200.235 -61.9905 -2997 192.68 -61.1163 -3597.01 197.027 -61.5998 -3545.19 199.962 -62.4156 -3235.35 200.639 -64.412 -3637.69 196.106 -61.7605 -3203.78 198.572 -61.6085 -3522.47 199.392 -64.1105 -3560.34 199.427 -61.3553 -3532.38 198.405 -64.7298 -3527.02 195.416 -61.7613 -3374.43 199.354 -60.9549 -3407.93 193.676 -61.6457 -3503.88 193.015 -61.4359 -3483.43 194.594 -61.7646 -3344.1 200.375 -60.9174 -3347.24 191.903 -61.0814 -3419.39 200.023 -62.7846 -2997 198.438 -64.438 -2997 200.06 -64.1553 -3450.42 200.027 -61.2982 -2997 197.739 -61.6494 -3304.89 200.997 -60.77 -3154.78 198.411 -61.9739 -3106.91 192.959 -61.7706 -3178.95 199.259 -61.9846 -2997 194.051 -61.9969 -3100.07 197.18 -61.925 -3077.84 199.439 -62.6844 -2997 197.254 -64.75 -2997 200.644 -64.0223 -3085.62 193.481 -62.0496 -3086.15 192.39 -61.4584 -3070.72 195.115 -62.0734 -3058.18 197.791 -62.1001 -2997 201.153 -61.0435 -2997 194.55 -62.2095 -2997 200.522 -61.6309 -2997 200.809 -61.3031 -2997 199.806 -63.8317 -3062.15 199.689 -62.9971 -2997 191.523 -61.5016 -2997 192.866 -62.1583 -2997 195.829 -62.1552 -2997 198.766 -62.2425 -2997 192.267 -61.8565 -2997 197.74 -64.5427 -2997 191.586 -62.374 -2997 196.6 -64.719 -2997 191.603 -61.9847 -2997 196.357 -64.4847 -2997 196.035 -64.6434 -2997 200.062 -63.2663 -2997 195.433 -64.6693 -2997 199.213 -62.399 -2997 200.837 -62.3219 -2997 201.039 -61.9563 -2997 195.923 -63.6029 -2997 198.65 -62.5805 -2997 197.962 -64.1745 -2997 198.158 -63.8435 -2677.05 196.941 -64.4857 -2997 195.188 -62.4761 -2997 192.219 -62.2585 -2997 196.373 -63.6816 -2997 199.231 -63.5753 -2997 200.764 -63.2059 -2997 196.567 -62.0653 -2997 199.789 -63.5084 -2997 198.31 -62.2611 -2997 197.965 -62.4162 -2997 197.223 -64.2123 -2997 200.781 -62.775 -2997 200.257 -63.0045 -2997 195.721 -62.8757 -2530.29 200.55 -63.6057 -2997 196.48 -64.2277 -2997 196.738 -63.9348 -2997 194.101 -64.694 -2997 195.953 -63.9229 -2997 193.715 -64.8139 -2997 199.109 -62.9159 -2997 195.742 -64.3308 -2997 193.372 -62.3562 -2997 199.257 -63.245 -2997 196.935 -63.6424 -2692.1 198.94 -63.8214 -2997 194.401 -62.5881 -2997 192.866 -62.6078 -2997 192.126 -62.5697 -2997 194.155 -64.4206 -2997 194.316 -64.0556 -2997 193.777 -63.7052 -2997 194.157 -63.2815 -2997 194.131 -62.8909 -2997 193.7 -62.6352 -2997 193.93 -62.3097 -2997 194.686 -64.6891 -2997 195.368 -63.6653 -2997 195.134 -64.0002 -2997 194.91 -64.3523 -2997 191.68 -64.7783 -2997 191.755 -64.5285 -2997 191.345 -64.2084 -2997 191.896 -63.9835 -2997 191.988 -63.7437 -2997 193.122 -64.7732 -2997 192.308 -62.8206 -2997 192.781 -63.0434 -2997 192.57 -63.3829 -2997 192.372 -63.6361 -2997 192.482 -63.9265 -2997 192.111 -63.095 -2997 192.3 -64.288 -2997 191.639 -62.7707 -2997 191.846 -63.4274 -2997 195.612 -63.4256 -2654.63 195.485 -63.1824 -2692 194.614 -63.6798 -2997 195.008 -63.3628 -2997 194.859 -62.9484 -2997 198.52 -63.0049 -2997 198.399 -63.4468 -2997 193.568 -64.5708 -2997 192.971 -63.6999 -2997 193.317 -64.1638 -2997 193.29 -63.3502 -2997 193.498 -62.9763 -2997 192.944 -64.5046 -2997 192.364 -64.7006 -2997 197.209 -62.4058 -2803.94 197.907 -62.7199 -2997 197.802 -63.0815 -2997 197.611 -63.3338 -2498.02 197.616 -63.5963 -2358.33 197.122 -63.4067 -2744.26 197.114 -63.1254 -2704.45 197.319 -62.8236 -2853.84 196.314 -63.3048 -2234.98 196.411 -62.3971 -2712.64 195.936 -62.547 -2594.92 197.451 -63.9032 -2997 196.562 -62.7857 -2393.29 209.193 -64.6346 -3997 207.169 -64.2245 -3447.21 207.745 -64.5037 -3997 208.481 -64.3279 -3997 206.86 -64.5962 -3997 205.782 -64.5405 -3997 208.409 -64.6918 -3997 204.357 -64.2344 -3997 202.332 -64.7516 -3743.53 209.269 -64.2515 -3997 208.192 -63.9924 -3800.87 207.824 -64.1838 -3786.31 206.443 -64.2697 -3850.76 205.125 -64.1979 -3937.19 204.723 -64.5845 -3997 203.516 -64.5587 -3545.27 204.043 -64.5285 -3935.3 203.66 -64.2526 -3238.5 202.992 -64.6793 -3717.54 201.536 -64.6541 -3829.42 206.602 -63.9254 -3571.63 208.732 -64.0376 -3949.88 203.938 -63.892 -2997.01 205.856 -64.0858 -3652.96 208.042 -63.7243 -3559.53 204.651 -63.9505 -3565.59 202.248 -64.4147 -3359.75 208.513 -63.8036 -3767.61 202.996 -64.3329 -3287.91 201.411 -64.2458 -3311.58 209.155 -63.8124 -3612.02 205.277 -63.791 -3431.02 201.554 -60.1599 -3398.16 208.415 -63.4686 -3462.63 205.966 -63.7828 -3368.32 201.358 -60.5196 -3274.78 206.315 -63.6195 -3250.69 202.245 -60.1211 -3229.82 209.222 -63.3598 -3105.35 207.577 -63.4615 -3198.36 208.562 -63.0459 -2997 202.478 -64.122 -2997 204.993 -63.3978 -2997 201.929 -64.0946 -2997 202.1 -60.4574 -3104.01 201.547 -60.856 -3058.37 202.935 -60.1144 -3046.16 205.761 -63.4567 -3061.16 201.352 -63.8835 -2997 206.372 -63.369 -2997 208.134 -62.801 -2997 201.964 -60.7223 -3010.74 207.78 -63.0494 -2997 209.075 -60.5695 -2997 202.812 -60.4355 -2997 204.505 -63.6525 -2997.02 201.378 -62.5458 -2997 205.607 -62.7998 -2997 203.47 -61.1223 -2997 209.317 -61.1538 -2997 203.411 -61.5706 -2997 203.044 -63.9555 -2997 201.978 -62.5315 -2997 205.002 -62.8061 -2997 208.817 -61.8156 -2997 208.53 -61.5309 -2997 206.864 -63.0852 -2997 208.015 -62.5715 -2997 202.251 -63.0649 -2675.63 206.509 -60.2942 -2997 202.442 -61.8698 -2997 201.773 -61.9215 -2997 203.547 -60.1511 -2997 204.944 -60.5136 -2997 204.304 -60.6313 -2997 203.914 -63.5528 -2997 206.032 -63.1065 -2997 201.571 -62.2534 -2997 202.155 -63.807 -2997 206.204 -62.8107 -2997 209.45 -61.7437 -2997 209.108 -61.5018 -2997 201.689 -61.0929 -2997 203.323 -63.6088 -2997 209.38 -62.5394 -2997 208 -60.7944 -2997 208.625 -62.6274 -2997 204.165 -61.4242 -2997 204.139 -61.7861 -2997 202.315 -62.7794 -2686.94 209.511 -62.2131 -2997 202.129 -63.4238 -2997 201.955 -61.5991 -2997 208.867 -62.2144 -2997 208.803 -60.8558 -2997 208.442 -60.5701 -2997 205.878 -62.5119 -2997 204.253 -61.0217 -2997 201.406 -63.52 -2997 208.512 -61.2012 -2997 208.323 -61.9952 -2997 207.733 -62.7203 -2997 205.478 -60.7203 -2997 205.354 -63.1062 -2997 202.62 -61.564 -2997 203.009 -61.8271 -2997 208.148 -62.2925 -2997 202.119 -61.2973 -2997 201.702 -62.808 -2997 205.058 -60.9254 -2997 206.66 -62.5571 -2997 201.5 -61.3213 -2997 201.276 -61.6206 -2997 208.147 -61.7002 -2997 204.691 -63.0791 -2997 204.277 -63.3299 -2997 207.711 -61.1515 -2997 201.493 -63.1409 -2997 205.785 -60.9722 -2997 205.892 -60.1221 -2997 203.568 -63.284 -2997 207.299 -62.7674 -2997 209.327 -61.9841 -2997 209.445 -60.844 -2997 204.465 -62.8065 -2997 202.692 -63.6333 -2997 202.839 -63.3164 -2295.3 204.231 -60.2241 -2997 204.001 -62.9902 -2997 209.298 -62.9351 -2997 208.074 -61.4219 -2997 207.478 -62.4311 -2997 203.609 -62.0585 -2997 203.937 -62.5582 -2997 206.228 -60.4854 -2997 205.99 -60.7302 -2997 202.134 -60.9945 -2997 205.588 -60.4422 -2997 205 -60.0819 -2997 208.529 -60.2655 -2997 208.38 -59.9964 -2997 206.907 -61.1393 -2997 207.26 -60.8326 -2997 206.604 -60.7831 -2997 206.846 -60.5445 -2997 207.395 -60.5705 -2997 207.804 -60.3655 -2997 207.945 -60.0414 -2997 203.523 -60.6843 -2997 203.797 -60.4142 -2997 203.327 -60.3608 -2997 202.34 -62.2334 -2997 207.051 -60.2961 -2997 205.2 -62.5087 -2997 205.469 -62.2128 -2997 205.227 -61.9362 -2997 204.778 -61.7139 -2997 204.913 -61.3323 -2997 202.751 -61.2243 -2997 202.699 -60.8042 -2997 206.144 -62.1937 -2997 205.728 -61.9579 -2997 205.525 -61.6432 -2997 205.601 -61.2637 -2997 206.289 -61.8149 -2997 206.065 -61.4893 -2997 206.862 -62.1296 -2997 206.316 -60.9702 -2997 206.24 -61.2225 -2997 206.669 -61.502 -2997 206.992 -61.7884 -2997 203.082 -62.4012 -2765.15 204.652 -62.5736 -2997 204.638 -62.1682 -2997 207.47 -61.5258 -2997 207.629 -61.9795 -2997 208.794 -60.0341 -2997 209.26 -60.2497 -2997 202.896 -62.078 -2851.77 202.564 -62.5688 -2613.82 203.07 -62.8834 -2362.05 167.691 -47.1731 -11.27 167.704 -47.1724 -17.52 167.712 -47.1811 -18.34 167.746 -47.1885 -31.51 167.641 -47.2137 1.17 167.587 -47.2301 1.76 167.631 -47.2175 1.13 167.62 -47.2212 1.09 167.614 -47.2306 1.25 167.73 -46.8833 -20.96 168.047 -46.931 -9.07 168.004 -46.9161 -4.4 167.991 -46.9234 -6.64 168.031 -46.9279 -3.52 168.069 -46.9371 -4.34 168.007 -46.8869 0.81 168.007 -46.8796 1.22 167.994 -46.9067 -2.13 167.979 -46.9091 1.65 167.989 -46.9146 -2.49 167.959 -46.9447 1.27 168.021 -46.9195 -5.64 168.045 -46.9388 -7.54 168.507 -46.5867 2.1 168.47 -46.5789 1.93 168.491 -46.5795 1.94 168.36 -46.5896 -1.38 168.347 -46.5534 0.71 168.349 -46.5692 -0.71 168.328 -46.5765 2.57 168.313 -46.5669 2 168.328 -46.559 1.76 168.361 -46.5799 -0.5 168.358 -46.5485 1.98 168.399 -46.5727 1.32 168.414 -46.5691 2.14 168.431 -46.5717 1.49 168.458 -46.5716 1.69 168.254 -46.5067 2.66 168.292 -46.5039 0.45 168.307 -46.5035 1.2 168.337 -46.4406 1.51 168.333 -46.4625 1.32 168.366 -46.4832 2.62 168.354 -46.4802 2.12 168.298 -46.4619 1.99 168.283 -46.4635 3 166.599 -46.0873 -9.11 166.625 -46.0776 -7.75 166.654 -46.0897 -36.53 166.613 -46.0862 -12.13 166.608 -46.0972 -14.74 166.664 -46.1141 -16.56 166.68 -46.0978 -102.5 166.674 -46.0812 -84.68 166.697 -46.1062 -44.61 166.675 -46.0685 -51.36 166.691 -46.0702 -36.61 166.71 -46.0365 -27.08 166.712 -46.078 -36.08 166.696 -46.0821 -61.88 166.724 -46.07 -35.99 166.73 -46.0797 -27.99 166.737 -46.0518 -27.49 166.735 -46.0608 -27.89 166.76 -46.0565 0.85 166.768 -46.0511 -21.29 166.767 -46.0431 -10.96 166.762 -46.0294 -30.56 166.762 -46.0106 -29.44 166.899 -45.9379 -25.29 166.865 -45.9616 -24.07 166.882 -45.9505 -30.42 166.946 -45.7238 -43.63 166.948 -45.7077 -36.94 166.954 -45.7224 -30.52 166.92 -45.729 -34.57 166.874 -45.7392 -55.24 166.886 -45.7337 -22.37 166.558 -45.7622 -29.87 166.774 -45.9983 -2.06 166.843 -45.9778 -21.05 166.789 -45.995 -36.38 166.802 -45.9902 -12.74 166.824 -45.9833 -40.39 166.596 -45.9977 -106.11 166.644 -45.9619 -84.83 166.665 -45.9649 -90.1 166.717 -45.9607 -85.1 166.74 -45.9605 -88.1 166.751 -45.9535 -45.67 166.754 -45.9652 -70.69 166.662 -45.9127 -72.5 166.651 -45.923 -59.86 166.679 -45.89 -36.59 166.692 -45.8734 -31.16 166.501 -45.7868 -146.15 166.624 -45.7594 -82.16 166.644 -45.7476 -85.73 166.65 -45.7362 -63.53 166.711 -45.7338 -182.52 166.564 -45.7394 -13.54 166.607 -45.7872 -165.91 166.651 -45.783 -125.03 166.687 -45.7738 -145.95 166.748 -45.7618 -96.96 166.779 -45.7509 -58.51 166.725 -45.7298 -130.11 166.746 -45.7332 -97.22 166.777 -45.7342 -86.19 166.728 -45.681 -258.52 166.83 -45.7143 -166.64 166.805 -45.7548 -65.24 166.833 -45.7535 -49.3 166.837 -45.7675 -49.11 166.846 -45.751 -35.28 166.596 -45.7653 -95.51 166.581 -45.7557 -104.31 166.766 -45.6581 -110.91 166.833 -45.6456 -136 166.781 -45.5652 -205.51 166.747 -45.5838 -196.43 166.809 -45.5584 -197.06 166.846 -45.4099 -96.71 166.764 -45.3798 -116.52 166.824 -45.3979 -86.83 166.723 -45.6462 -91.88 166.877 -45.5426 -108.59 166.885 -45.5314 -8.23 166.953 -45.5095 -42.48 166.893 -45.5538 -74.77 166.921 -45.5549 -73.68 166.947 -45.5499 -93.89 166.971 -45.5536 -92.26 166.859 -45.4131 -134.13 166.875 -45.4188 -69.7 166.89 -45.4295 -76 166.933 -45.4127 -31.46 166.969 -45.4025 -47.8 166.984 -45.4002 -37.81 167.002 -45.4015 -57.16 167.018 -45.4029 -52.82 167.022 -45.3865 -65.65 167.015 -45.3702 -64.42 166.904 -45.3375 -8.65 166.937 -45.324 -100.97 167.016 -45.3325 -199.46 167.056 -45.3522 -85.98 167.088 -45.3745 -24.65 167.103 -45.3889 -38.72 167.116 -45.4125 -22.72 167.12 -45.4436 -28.62 167.113 -45.4524 -17.82 167.102 -45.4595 -33.88 167.078 -45.4813 -25.34 167.072 -45.4876 -34.62 166.951 -45.3157 -137.97 166.98 -45.3145 -138.72 166.958 -45.3076 -129.27 166.998 -45.32 -114.19 167.017 -45.291 -340.89 167.133 -45.2687 -30.65 167.155 -45.2588 -35.54 167.146 -45.2664 -28.7 167.13 -45.2763 -25.67 167.161 -45.3038 -21.57 167.17 -45.3094 -19.49 167.18 -45.3114 -30.14 167.064 -45.2813 -106.77 167.084 -45.2804 -87.9 167.123 -45.2681 -43.05 166.985 -45.2398 -33.57 166.966 -45.2126 -219.12 166.968 -45.1742 -110.13 166.972 -45.1528 -73.1 167.02 -45.0941 -10 167.037 -45.1072 -170.76 167.054 -45.1178 -154.8 167.068 -45.1353 -89.31 167.083 -45.1503 -78.31 167.109 -45.075 -51.45 167.116 -45.0841 -52 167.134 -45.1103 -65.01 167.147 -45.1347 -45.44 167.15 -45.0937 -54.89 167.189 -45.0977 -61.75 167.264 -45.0385 -75.89 167.24 -45.0348 -124.11 167.199 -45.0186 -107.02 167.135 -45.0039 -134.63 167 -45.271 -113.37 167.01 -45.2798 -102.22 166.993 -45.3085 -68.63 167.394 -44.977 -25.51 167.38 -44.9381 -94.78 167.383 -44.921 -93.54 167.377 -44.8961 -68.37 167.358 -44.8675 -168.28 167.347 -44.8505 -97.18 167.392 -44.9239 -64.21 167.428 -44.9735 -32.66 167.417 -44.9653 -21.62 167.504 -44.843 -71.22 167.512 -44.8292 -122.58 167.528 -44.8147 -101.48 167.512 -44.7848 -72.66 167.526 -44.7906 -102.9 167.472 -44.7629 -77.89 167.583 -44.7351 -82.56 167.604 -44.7477 -72.19 167.616 -44.7572 -60.91 167.909 -44.6598 -131.83 167.64 -44.662 -17.74 167.826 -44.598 -62.1 167.906 -44.644 -226.2 167.868 -44.6159 -238.92 172.828 -43.6233 -3.9 172.899 -43.6541 -2.05 172.922 -43.8548 -6.44 172.922 -43.8182 -7 172.948 -43.878 -6.19 172.96 -43.8916 -13.95 172.891 -43.6718 1.68 172.928 -43.8325 -4.98 172.937 -43.7699 -0.92 172.914 -43.773 -2.27 172.93 -43.7926 -5.44 172.67 -43.6266 -0.84 172.69 -43.6241 -4.21 172.667 -43.6412 -1.68 172.693 -43.6382 -3.06 172.777 -43.6103 -7 172.835 -43.6062 -5.3 172.743 -43.6137 -3.23 173.77 -41.2725 0 173.766 -41.2666 -0.79 174.111 -41.3362 -7 174.122 -41.3306 -7 174.12 -41.3408 -7 173.848 -41.222 -6.11 173.853 -41.2251 -4.99 173.855 -41.2353 -4.61 173.856 -41.2465 -4.4 173.863 -41.2421 -4.89 174.154 -41.239 -42.06 174.183 -41.2475 -5.21 174.231 -41.2421 -39.88 174.16 -41.2485 -38.29 174.288 -41.219 -10.46 174.281 -41.2249 -16.15 174.268 -41.2299 -4.71 174.269 -41.2401 -3.82 174.264 -41.2419 -6.82 174.194 -41.2659 -4.35 174.182 -41.2576 -2.82 174.179 -41.2501 -6.45 174.165 -41.254 -10.77 174.214 -41.2499 -4.01 174.212 -41.2445 -4.63 174.239 -41.246 -16.16 174.225 -41.2321 -8.67 174.222 -41.2291 -6.51 174.19 -41.2443 -5.81 174.201 -41.2426 -3.17 173.942 -41.2615 -9.47 174.282 -41.2214 -15.86 174.282 -41.2185 -12.6 174.262 -41.2371 -9.99 174.243 -41.242 -26.3 174.173 -41.2488 -11.24 173.952 -41.2576 -16.33 173.955 -41.2616 -16.96 173.97 -41.2366 -11.48 173.976 -41.2426 -13.09 174.019 -41.2643 -21.16 174.018 -41.2497 -23.97 174 -41.2325 -15.05 174.254 -41.2418 0.83 174.221 -41.2427 -23.01 173.799 -41.2652 -6.36 173.843 -41.2533 -5.59 173.829 -41.2561 -5.57 173.816 -41.2561 -4.12 173.835 -41.2897 0.98 173.816 -41.2875 -1.5 173.801 -41.2728 -3.98 173.876 -41.2408 -6.95 174.011 -41.2438 -25.09 174.013 -41.2395 -16.03 174.016 -41.2753 -8.91 174.008 -41.2687 -2.02 173.991 -41.2471 -12.99 173.973 -41.2298 -11.84 173.966 -41.2298 -8.63 174 -41.2491 -23.76 174.199 -41.2702 -1.73 174.253 -41.2489 0.11 174.256 -41.2522 -1.36 174.223 -41.2377 -16.38 174.275 -41.2232 -17 174.134 -41.2979 -6.34 174.116 -41.3258 -6.2 174.125 -41.3201 -7 174.129 -41.3109 -6.46 174.135 -41.3049 -6.44 174.125 -41.3049 -6.49 174.175 -41.2949 -4.57 174.136 -41.3254 -7 174.147 -41.3204 -7 174.155 -41.314 -6.81 174.161 -41.3098 -5.49 174.169 -41.3002 -4.83 174.148 -41.3253 -5.02 174.163 -41.3143 -4.79 173.819 -41.0038 -6.13 173.813 -41.0074 -17.3 173.887 -41.0909 -10.78 173.876 -41.0893 -7 173.869 -41.0969 -3.2 173.876 -41.0955 -7 173.861 -41.1221 -6.18 173.858 -41.1331 -8.99 173.847 -41.1437 -6.43 173.837 -41.1517 -5.6 173.851 -41.1572 -4.25 173.848 -41.1688 -1.81 173.863 -41.2079 -7 173.861 -41.2104 -7 173.95 -41.2087 -4.17 173.962 -41.2018 -8.23 173.986 -41.2041 -7 174.031 -41.1797 -6.62 173.987 -41.1972 -3.16 173.952 -41.191 -16.16 173.927 -41.203 3 173.901 -41.2064 -4.28 173.888 -41.2117 -6.16 173.865 -41.2125 -8.13 173.867 -41.2002 -11.85 173.873 -41.1988 -4.79 173.879 -41.1746 -10.95 173.872 -41.1726 -16.69 173.898 -41.1291 -10.87 173.896 -41.1204 -15.96 173.903 -41.1094 -9.62 173.914 -41.1063 -11.24 173.996 -41.0884 -11.62 174.001 -41.0925 -7.78 174.036 -41.1046 -7 174.037 -41.1015 -4.47 174.032 -41.0445 -17 174.041 -41.0402 -11.06 173.975 -41.0504 -14.58 173.98 -41.0395 -10.3 173.896 -41.1079 -16.87 173.89 -41.1132 -19.83 173.89 -41.1233 -16.87 173.865 -41.1309 -17.3 173.848 -41.1514 -15.3 173.855 -41.1606 -18.78 173.857 -41.166 -12.2 173.866 -41.1791 -17.07 173.864 -41.203 -8.99 173.857 -41.2133 -9.3 173.868 -41.2058 -11.15 173.875 -41.1898 -9.65 173.874 -41.1777 -19.25 173.861 -41.1609 -22.45 173.857 -41.1488 -16.2 173.882 -41.1347 -17.1 173.901 -41.1161 -18.78 173.916 -41.0997 -20.42 173.925 -41.1038 -14.88 173.96 -41.0736 -31.59 173.966 -41.0718 -25.66 173.966 -41.0773 -17.49 173.963 -41.1246 -17 173.97 -41.1253 -8.81 173.966 -41.13 -7.23 173.976 -41.1234 -14.96 174.024 -41.0909 -17 174.023 -41.0857 -17 173.987 -41.0731 -17.57 173.999 -41.0786 -15.06 174.034 -41.0521 -17 174.039 -41.0479 -14.04 174.042 -41.0303 -15.08 173.964 -41.0537 -26.83 173.973 -41.0478 -17.94 174.092 -41.0157 -15.12 173.891 -40.9446 -24.57 173.953 -41.0715 -34.71 173.939 -41.0736 -21.82 173.914 -41.0744 -14.66 173.925 -41.0782 -27 173.913 -41.0917 -25.92 173.902 -41.0996 -21.28 173.891 -41.1188 -26.78 173.876 -41.1317 -24.01 173.86 -41.1397 -22.71 173.894 -41.1253 -24.5 173.896 -41.1142 -26.13 173.939 -41.0814 -19.06 173.978 -41.0742 -19.2 173.974 -41.0675 -26.47 173.985 -41.0854 -21.06 173.97 -41.1083 -17.69 174.023 -41.0942 -23.79 174.018 -41.0319 -23.36 174.009 -41.0329 -27 174.013 -41.0416 -23.15 174.006 -41.052 -19.33 173.994 -41.0555 -22.96 173.987 -41.0636 -21.78 173.966 -41.0488 -23.97 173.857 -41.1559 -14.13 173.866 -41.166 -23.64 173.865 -41.1718 -25.53 173.872 -41.1831 -19.33 173.87 -41.1767 -24.68 173.954 -41.1964 -19.07 173.945 -41.197 -21.8 174.244 -41.1868 -47 174.237 -41.1966 -29.47 173.945 -41.0525 -45.45 173.949 -41.0454 -32.65 173.957 -41.0577 -37.74 173.936 -41.0567 -47 173.933 -41.0522 -39.96 173.957 -41.0506 -39.9 173.968 -41.0591 -47 173.961 -41.0664 -43.85 174.29 -41.2126 -14.44 174.282 -41.2151 -8.7 174.311 -41.2096 -3.8 174.203 -41.0584 -15.18 174.183 -41.0447 -0.56 174.103 -41.0398 -4.72 174.097 -41.0304 -11.29 174.033 -41.1004 -4.64 174.029 -41.1007 -6.75 173.986 -41.1129 -8.11 173.979 -41.1145 -4.39 173.982 -41.1282 -10.51 173.962 -41.1425 -2.45 173.96 -41.133 -15.62 173.984 -41.0382 -7 173.979 -41.0445 -11.76 174.295 -41.2147 -19.03 174.241 -41.2038 -9.56 174.178 -41.1023 -16.05 174.171 -41.1267 -18.74 174.018 -41.0815 -7.04 174.018 -41.089 -13.79 174.009 -41.086 -13.53 173.985 -41.108 -13.82 173.968 -41.1187 -17 173.98 -41.082 -16.38 173.981 -41.0785 -18.25 173.972 -41.0739 -20.01 173.974 -41.0429 -18.61 173.971 -41.0527 -18.83 174.316 -41.2105 -18.96 174.286 -41.215 -15.73 174.25 -41.199 -20.54 174.205 -41.146 -18.49 174.181 -41.1327 -16.85 174.178 -41.1097 -26.95 174.161 -41.1252 -24.5 174.156 -41.1196 -18.61 174.178 -41.1446 -15.45 174.19 -41.1489 -27 174.209 -41.0502 -27 174.194 -41.0497 -13.98 173.861 -40.9547 -20.7 173.861 -40.9667 -15.51 173.849 -40.977 -5.48 173.827 -41.1558 1 173.813 -41.1576 -1.98 173.804 -41.1593 -3.89 173.977 -41.2017 -5.39 174.021 -41.1964 3 174.002 -41.1862 -2.98 174.031 -41.1714 -2.82 174.018 -41.1809 -1.31 174.041 -41.1847 -5.61 174.069 -41.1858 -6.07 174.098 -41.1777 -3.52 173.876 -41.1533 -0.73 173.887 -41.1289 -25.85 173.922 -41.0866 -27 173.977 -41.0973 -26.1 174.021 -41.0515 -17 174.002 -41.065 -17 174.215 -41.0612 -14.19 174.305 -41.2118 -12.34 173.774 -41.0981 -6.32 173.762 -41.1088 -6.65 173.781 -41.1072 -3.34 173.783 -41.0907 -11.14 173.769 -41.1018 -11.55 173.779 -41.0956 -9.93 173.783 -41.1559 3 173.786 -41.1615 0.01 173.783 -41.1687 -1.58 173.799 -40.8267 -7.52 173.805 -40.8402 -5.86 173.815 -40.8536 -2.21 173.806 -40.8502 -1.69 173.797 -40.8434 -7.11 173.83 -40.8616 -0.66 173.799 -40.8349 -11.35 177.854 -39.0799 -3.66 177.842 -39.0827 -7.11 175.465 -37.1739 2.04 175.5 -37.1478 1 175.76 -36.8087 -11.71 174.93 -36.7914 -3.43 174.919 -36.8055 -8.81 174.942 -36.8028 1.52 174.942 -36.7866 -12.82 174.961 -36.7875 -17.13 174.968 -36.8441 -6.71 175.032 -36.843 -5.7 174.979 -36.8217 -11.51 174.964 -36.8063 -3.89 174.974 -36.7956 -10.12 174.979 -36.8059 -2.99 175.127 -36.8559 -1.93 175.142 -36.8572 -6.34 175.137 -36.8701 -5.06 175.19 -36.9094 -2.44 174.866 -36.827 -2.27 174.888 -36.8294 1.21 174.958 -36.8695 -4.12 175.06 -36.851 -4.43 175.086 -36.8857 -2.33 175.126 -36.9057 -1.56 175.105 -36.9236 0.58 175.017 -36.8269 -5.61 175.165 -36.8431 -1.3 175.154 -36.8518 -7 175.17 -36.9171 1.06 175.166 -36.9341 1.47 174.804 -36.7782 -7.86 174.839 -36.8298 -5.3 174.766 -36.4194 -5.18 175.485 -36.3158 -6.67 175.479 -36.3131 -8.13 175.47 -36.3163 -10.24 175.464 -36.3244 -12.93 174.868 -36.3828 -23.9 174.878 -36.3923 -29.78 174.791 -36.3371 -5.22 174.861 -36.3919 -17 174.816 -36.3931 -8.5 174.518 -35.8413 -5.3 174.495 -35.8361 -8.63 174.509 -35.85 -4.51 174.33 -35.3429 -2.61 174.324 -35.3527 -0.72 166.669 -45.7533 -132.42 166.691 -45.748 -184.5 166.701 -45.7722 -127.28 166.724 -45.7131 -95.57 166.812 -45.7198 -123.39 166.849 -45.717 -127.41 166.883 -45.7237 -92.77 166.848 -45.5505 -212.5 166.905 -45.5258 -30.01 167.033 -45.3475 -179.09 168.018 -46.9004 3 167.575 -47.2338 2.64 166.402 -45.8325 -107.05 166.402 -45.7176 -368.17 167.376 -44.4855 -2877.57 167.631 -44.3755 -2012.3 167.952 -44.352 -28.74 166.827 -45.2663 -109.49 199.128 -47.7484 -4997 198.93 -47.2756 -4997 174.108 -40.9438 -67.61 174.156 -40.9511 -12.74 174.079 -40.8421 -56.26 173.957 -40.8127 -16.86 173.95 -40.8381 -27 173.886 -40.9082 -31.12 173.918 -40.9006 -27 173.891 -41.0383 -7 173.916 -41.0182 -41.43 173.341 -40.3924 -66.57 173.402 -40.4236 -57.52 177.79 -39.1372 -23.3 177.837 -39.1016 -13.14 177.851 -39.0917 -7 177.801 -39.0979 -16.32 177.824 -39.1227 -17.94 175.451 -36.4934 -30.18 175.472 -36.4668 -52.68 175.428 -36.4436 -47.05 175.343 -36.4264 -47 175.385 -36.4524 -37.58 174.392 -35.4041 -18.84 174.392 -35.376 -31.11 174.424 -35.3935 -30.67 174.505 -35.8398 -5.82 172.895 -43.602 -12.02 172.931 -43.5872 -16.21 172.951 -43.6195 -14.02 172.782 -43.5254 -10.99 172.826 -43.4945 -15.43 173.128 -43.7104 -10.01 173.159 -43.7263 -26.5 162.138 -64.7117 -2997 162.75 -64.6014 -2997 207.469 -63.8679 -3352.44 206.877 -63.5634 -2997 172.213 -25.259 -4051.89 172.337 -25.6275 -3997.18 168.602 -23.9044 -1997 168.788 -23.9644 -1997 175.796 -24.16 -4497 176.027 -23.9817 -4497 181.791 -23.9028 -2148.92 182.011 -23.9143 -2160.37 186.875 -24.5361 -5497 187.097 -24.1413 -5497 188.879 -24.315 -5389.88 189.381 -24.1686 -5663.8 194.5 -24.0632 -5307.6 195.08 -24.1115 -5095.07 192.276 -24.6926 -5601.88 192.608 -24.3608 -5612.98 203.028 -24.0616 -4427 203.424 -24.2617 -3951.98 157.183 -39.8684 -4709.62 157.603 -39.6295 -4762.07 208.545 -44.6504 -4997 209.277 -44.8284 -4949.58 209.004 -43.3601 -4997 209.535 -43.3475 -4997 208.766 -39.2582 -4975.31 209.219 -39.3648 -4958.47 174.692 -41.1877 -62.5 174.882 -40.9224 -36.2 172.602 -34.4449 -47 172.644 -34.4419 -7 173.334 -34.7754 -27.09 176.025 -41.2838 -108.48 176.923 -40.1515 -56.98 177.018 -40.0901 -103.75 177.11 -40.0877 -274.81 177.047 -40.0214 -117.16 177.972 -38.79 -26.41 178.023 -38.7749 -26.46 178.375 -38.4017 -32.04 178.417 -38.3783 -44.66 178.362 -38.3169 -16.95 178.407 -38.3302 -32.44 178.546 -37.7224 -13.72 178.547 -37.7516 -23.71 178.66 -37.7789 -94.77 178.678 -37.8394 -137.66 178.399 -37.6024 -27.02 178.41 -37.5627 -96.46 178.423 -37.5175 -169.33 178.205 -37.4883 -130.32 178.809 -37.2736 -1252.75 176.937 -37.8875 -14.89 176.988 -37.9053 -12.93 175.087 -36.2676 -41.93 175.136 -36.2628 -46.17 175.169 -36.1926 -54.22 175.174 -36.1526 -63.39 175.283 -36.168 -41.42 174.822 -36.8148 -5.84 174.813 -36.7976 -7.72 174.886 -36.7454 -11.5 174.78 -36.723 -10.63 174.816 -36.7331 -12.78 174.786 -36.6394 -9.32 174.662 -36.0939 -43.57 174.694 -36.1352 -44.82 173.556 -34.8665 -88.42 173.598 -34.8977 -66.59 173.194 -34.8325 -13.8 173.242 -34.8432 -14.05 173.034 -34.5444 -23.13 173.052 -34.5887 -39.16 173.029 -34.4813 -31.85 173.032 -34.4466 -25.92 172.948 -34.2792 -134.81 172.993 -34.2 -406.04 173.036 -34.2949 -166.5 173.134 -34.3305 -230.99 173.094 -34.2441 -332.51 173.212 -34.235 -980.99 169.82 -46.3843 -7 169.885 -46.3717 -11.93 170.771 -45.7981 -13.7 170.786 -45.6927 -25.62 170.686 -45.6894 -17.91 170.403 -45.9798 -33.26 170.433 -46.0086 -40.76 170.718 -45.6353 -15 170.85 -45.4612 -13.81 170.871 -45.4264 -11.9 171.217 -44.8764 -6.37 171.232 -44.7883 -8.47 171.225 -44.7416 -7.81 172.795 -43.8819 -4.93 172.788 -43.904 -18.09 172.812 -43.8934 -15.95 172.74 -43.8962 -16 172.768 -43.8803 -6.38 172.825 -43.9074 -18.7 172.813 -43.9337 -32.85 172.853 -43.901 -9.41 172.856 -43.9231 -26.54 172.884 -43.9055 -25.39 172.901 -43.9294 -36.78 172.955 -43.9901 -66.67 172.976 -43.9609 -61.75 172.951 -43.9269 -40.05 172.998 -43.9315 -53.07 172.926 -43.9615 -57.86 172.952 -43.9027 -15.44 172.978 -43.9043 -27.44 173.042 -43.9278 -61.9 173.09 -43.9149 -60.55 173.013 -43.9029 -43.05 173.044 -43.8939 -38.93 173.152 -43.8682 -65.28 173.151 -43.8308 -50.55 173.07 -43.8804 -39.12 173.105 -43.8764 -54 173.115 -43.686 -10.97 173.118 -43.6578 -13.35 173.08 -43.6595 -8.43 173.076 -43.637 -15.59 173.034 -43.6336 -14.24 173.062 -43.6014 -18.26 172.974 -43.5976 -17.34 173.01 -43.6138 -17.4 172.79 -43.6015 -7 172.807 -43.6022 -6.82 172.761 -43.609 -4.35 172.772 -43.6033 -7 172.71 -43.6142 -5.64 172.724 -43.6165 3 172.816 -43.5923 -0.06 172.836 -43.5882 -10.82 172.866 -43.5895 -10.58 172.888 -43.5698 -16.3 172.814 -43.5791 -4.99 173.814 -42.3881 -64.16 173.65 -42.4557 -129.88 173.631 -42.5058 -695.4 174.133 -41.386 -24.09 174.189 -41.3889 -31.51 174.089 -41.3903 -13.47 174.102 -41.3682 -17.94 174.105 -41.3519 -11.08 173.939 -40.883 -39.42 173.968 -40.862 -46.24 173.869 -40.9438 -19.84 173.877 -40.9294 -37.14 173.854 -40.9174 -47 173.799 -40.9441 -14.32 173.812 -40.9396 -13.03 173.73 -40.9805 -8.53 173.747 -40.9857 -5.22 173.76 -40.9659 -10.87 173.786 -40.9547 -9.02 173.731 -40.9541 -19.54 173.695 -40.9348 -38.74 173.74 -40.9287 -28.35 173.637 -41.0497 -13.34 173.661 -41.0638 -7 173.534 -40.9784 -42.73 173.583 -40.9903 -38.37 173.337 -41.1476 -19.63 173.381 -41.1305 -21.69 173.066 -41.004 -9.73 173.088 -41.0522 -14.76 173.016 -40.7863 -19.25 173.062 -40.8103 -24.4 173.044 -40.8402 -9.76 173.077 -40.8508 -26.94 172.889 -40.7995 -6.12 172.899 -40.7762 -13.5 172.866 -40.7571 -16.52 172.853 -40.7878 -8.68 172.441 -40.5835 -46.9 172.495 -40.5579 -54.57 172.542 -40.538 -38.78 172.125 -40.8174 -33.24 172.148 -40.7891 -37.89 171.997 -40.9737 -75.87 172.051 -40.9582 -48.67 171.77 -41.6525 -14.38 171.258 -42.2317 -11.89 171.272 -42.1939 -9.6 170.222 -43.0978 -18.94 170.273 -43.0704 -17 169.262 -43.6162 -117.87 169.326 -43.6378 -51.27 168.662 -43.9421 -36.04 168.618 -43.8446 -222.26 168.612 -43.7531 -453.7 168.517 -43.8164 -1080 167.89 -44.6347 3 167.882 -44.6261 -11.47 167.852 -44.6053 -5.59 167.803 -44.5827 -108.28 167.702 -44.5668 -97.57 167.762 -44.5511 -33.54 167.795 -44.556 -38.66 167.805 -44.5697 -34.29 167.626 -44.6184 -73.92 167.595 -44.6405 -65.48 167.561 -44.6582 -115.3 167.571 -44.7288 -39.6 167.545 -44.7011 -96.69 167.552 -44.7214 -71.23 167.383 -44.9022 -65.34 167.393 -44.9434 3 167.4 -44.9504 3 167.406 -44.7758 -333.09 167.382 -44.7634 -901.57 167.362 -44.7919 -563.69 167.345 -44.8265 -63 167.11 -44.9886 -104.87 167.13 -44.9967 -83.93 167.162 -45.0102 3 167.215 -45.0249 3 167.228 -45.0317 3 167.067 -45.0352 -274.37 167.081 -45.0392 -72.68 167.085 -45.0475 -28.58 167.092 -45.0535 3 167.097 -45.064 3 167.134 -45.097 -5.17 167.139 -45.0939 -4.52 167.135 -45.1208 -65.54 167.047 -45.1122 1.37 167.001 -45.0856 -389.52 167.018 -45.0853 -181.98 167.033 -45.0699 -220.06 167.006 -45.0487 -911.6 167.019 -45.068 -459.62 167.037 -45.0492 -518.89 167.052 -45.0548 -210 166.961 -45.2026 -70.9 166.965 -45.138 -27.78 166.917 -45.0837 -1553.51 166.975 -45.0719 -930.63 166.976 -45.1043 -440.91 166.952 -45.0874 -953.99 166.944 -45.111 -820.76 166.953 -45.13 -299.53 166.967 -45.1251 -145.97 167.123 -45.2729 -52.04 167.149 -45.2942 -22.8 167.154 -45.298 -3.48 166.85 -45.2616 -159.56 166.874 -45.2627 -49.57 166.887 -45.2786 -40.4 166.916 -45.2844 -160.27 166.937 -45.2973 -153.05 166.833 -45.2484 -197 166.81 -45.2831 -158.18 167.029 -45.342 -235.57 167.024 -45.3573 -15.89 167.022 -45.3645 -80.08 167.018 -45.3765 -68.39 167.025 -45.3963 -11.35 167.117 -45.4492 0.71 166.778 -45.3828 -79.18 166.788 -45.3877 3 166.806 -45.3925 -17.02 166.74 -45.3717 -344.28 166.716 -45.588 -230.03 166.671 -45.5827 -51.32 166.7 -45.5929 -199.17 166.717 -45.6193 -124.32 166.629 -45.5746 -172.04 166.877 -45.5364 -42.31 166.869 -45.4148 -79.13 166.731 -45.6693 -132.52 166.724 -45.6618 -67.59 166.739 -45.6663 -69.4 166.78 -45.6583 -57.34 166.726 -45.6948 -207.11 166.726 -45.7202 -98.48 166.881 -45.7291 -31.45 166.89 -45.7295 -44.65 166.575 -45.7714 -147 166.591 -45.7802 -49.82 166.429 -45.785 -175.35 166.46 -45.7622 -44.26 166.479 -45.7464 -0.7 166.535 -45.7087 -43.95 166.551 -45.7266 -36.79 166.547 -45.6789 -5.01 166.565 -45.6021 -444.72 166.588 -45.5818 -481.23 166.52 -45.6057 -909.51 166.544 -45.6867 -0.96 166.526 -46.0072 -7 166.635 -45.9542 -82.31 166.642 -45.9374 -78.08 166.672 -45.9024 2.08 166.685 -45.879 -7.79 166.61 -45.9857 -84.14 166.621 -45.9688 -4 166.742 -46.0627 -25.25 166.593 -46.0988 -5.25 166.59 -46.1292 -21.66 166.602 -46.1436 -12.59 166.622 -46.1734 -11.95 166.582 -46.1477 -41.68 166.559 -46.1175 -24.73 166.584 -46.1107 -4.59 166.534 -46.1478 -62.96 166.57 -46.1744 -63.23 166.599 -46.1675 -29.46 166.69 -46.2328 -45.22 166.724 -46.2206 -18.16 166.662 -46.2154 -20.29 166.607 -46.1874 -35.83 166.581 -46.2083 -85.08 166.629 -46.2075 -32.45 166.628 -46.2405 -84.56 166.738 -46.2393 -44.62 166.692 -46.2707 -107.74 167.453 -47.206 -29.72 167.386 -47.1832 -90.59 167.424 -47.2084 -32.25 167.447 -47.184 -56.13 167.44 -47.1403 -83.93 167.427 -47.2598 -4.95 167.446 -47.2412 -5.8 167.441 -47.2216 -10.29 167.496 -47.2989 -33.4 167.537 -47.3246 -97.12 167.403 -47.3346 -101.31 167.477 -47.3346 -99.33 167.636 -47.2998 -40.14 167.691 -47.2779 -68.97 167.589 -47.2745 -26.59 167.593 -47.2606 -6.22 167.678 -47.2178 -42.1 167.66 -47.2105 -7.77 167.677 -47.2037 -34.44 167.687 -47.1975 -16.17 167.686 -47.1798 -6.38 168.432 -46.6262 1.37 168.447 -46.6596 -7.33 168.451 -46.6948 -12.86 168.205 -46.4879 -14.11 168.238 -46.4947 -2.02 167.678 -47.0272 -4.09 167.626 -47.0096 -25.39 167.665 -47.0096 -1.38 168.354 -46.5973 -1.41 168.402 -46.6184 -7 167.687 -46.7732 -7 167.68 -46.7899 -7 167.689 -46.8075 -7 167.682 -46.7502 -16.53 167.682 -46.7248 -29.55 168.192 -47.1416 -51.1 168.218 -47.1179 -46.17 168.261 -47.1055 -53.61 168.244 -47.0614 -36.58 168.192 -47.0705 -0.89 168.217 -47.0539 -6.72 168.213 -47.0714 -9.24 168.165 -47.089 -8.88 168.178 -47.0966 -21.27 168.183 -47.1122 -39.63 168.123 -46.8283 -27 168.161 -46.7895 -27 168.173 -46.8733 -14.01 168.203 -46.8934 -27 168.154 -46.9253 -7 168.104 -46.9399 -15.47 168.128 -46.9492 -10.79 168.15 -46.956 -7 168.122 -46.9814 -7 168.198 -46.9543 -19.04 168.21 -46.9147 -27 168.221 -46.9394 -27 168.121 -46.9196 -5.16 168.141 -46.9199 0.5 168.158 -46.9132 -3.95 168.184 -46.9106 -21.79 168.172 -46.9209 -3.89 168.169 -46.9302 -1.79 169.243 -46.6693 -34.93 169.283 -46.6605 -30.31 169.132 -46.6798 -22.16 169.174 -46.6928 -46.89 169.034 -46.6895 -25.1 169.051 -46.7227 -47 168.793 -46.6853 -21.04 168.784 -46.7379 -38.83 173.907 -40.7313 -6.87 173.894 -40.7507 -17.24 173.876 -40.7736 -8.7 173.903 -40.775 -16.69 173.878 -40.7882 -11.78 173.759 -40.9089 -18.89 173.714 -40.9029 -39.29 173.746 -40.8792 -27.24 173.855 -41.038 -10.98 173.825 -41.0356 -25.94 173.81 -41.0479 -18.53 173.801 -41.0615 -22.35 173.792 -41.0748 -13.4 174.241 -41.0159 -17 174.22 -41.0343 -18.4 174.297 -41.0626 -16.08 174.34 -41.0427 -49.37 174.269 -40.995 -33.55 174.31 -40.9753 -85.73 173.933 -41.0038 -42.91 173.95 -40.9914 -37.41 173.957 -40.9745 -15.42 173.941 -40.9751 -6.02 174.041 -40.9118 -87.29 174.03 -40.9258 -65.04 174.035 -40.9423 -25.29 174.013 -40.9502 -37.89 173.993 -40.9551 -26.75 173.973 -40.9649 -37.08 174.022 -40.8978 -22.72 174.026 -40.8724 -28.85 174.095 -40.919 -32.78 174.072 -40.92 -46.15 174.126 -40.9854 -15.28 174.037 -40.9871 -7 174.086 -40.9935 -17.72 174.082 -41.0054 -25.59 174.095 -40.98 -8.3 174.121 -40.966 -34.25 173.682 -41.068 -5.97 173.703 -41.0638 -3.38 173.728 -41.0521 -1.52 173.648 -41.0815 -7 174.273 -41.0886 -7 174.263 -41.1023 -15.94 174.341 -41.0846 -22.68 174.244 -41.1469 -45.92 174.223 -41.1547 -47 174.214 -41.17 -47 174.205 -41.1946 -41.81 174.27 -41.1383 -27.31 174.281 -41.1279 -27 174.267 -41.1249 -27 174.257 -41.161 -30.9 174.26 -41.1711 -19.74 174.274 -41.1726 -18.57 174.292 -41.1238 -10.87 174.304 -41.1193 -15.66 174.332 -41.1091 -13.47 174.292 -41.1505 -25.44 174.317 -41.1446 -27 174.332 -41.1531 -24.46 174.35 -41.1516 -18.01 174.191 -41.2034 -39.3 174.178 -41.2096 -43.95 174.167 -41.2173 -31.74 174.153 -41.2252 -32.85 174.136 -41.2252 -27 174.121 -41.2307 -9.58 174.103 -41.2319 -27 174.087 -41.2358 -27 174.071 -41.2381 -27 174.051 -41.2373 -27 174.037 -41.2521 -23.07 174.221 -41.1988 -34.7 174.051 -41.2245 -21.32 174.064 -41.2151 -26.79 174.094 -41.2154 -20.11 174.13 -41.2139 -18.29 174.163 -41.194 -14.65 173.873 -41.2164 0.59 173.999 -41.2005 1.21 174.01 -41.1951 -0.68 174.01 -41.1879 -3.05 173.985 -41.2561 -16.88 174.137 -41.0106 -4.51 174.023 -41.0014 -5.71 174.031 -40.998 -6.86 174.029 -40.9557 -20.22 174.034 -40.9692 -15.25 174.023 -41.0409 -18.47 174.031 -41.0343 -17.97 174.025 -41.0245 -9.39 174.285 -41.3102 -84.33 174.319 -41.2141 -10.79 174.322 -41.2196 -30.23 174.309 -41.2304 -47 174.328 -41.2334 -67.96 174.339 -41.2142 -41.91 174.385 -41.1658 -53.65 174.35 -41.2576 -96.97 174.355 -41.2275 -87.74 174.609 -41.421 -198.54 174.836 -41.3444 -12.76 174.847 -41.3281 -7 174.856 -41.3092 -10.62 174.866 -41.2836 -17.34 174.786 -41.1114 -22.55 174.811 -41.1014 -9.82 174.815 -41.0857 -17 174.648 -41.1976 -97.54 174.595 -41.2073 -188.62 174.811 -41.2766 -11.78 174.836 -41.2764 -17.68 173.987 -40.9414 -10.59 173.983 -40.929 -16.11 167.024 -45.401 -29.9 174.349 -40.3484 -105.39 174.352 -40.4134 -112.26 173.423 -41.0337 -35.58 173.497 -41.0411 -33.7 184.564 -38.8729 -4793.45 184.596 -38.5227 -4840.91 187.953 -39.2331 -4747.41 188.521 -39.3822 -4648.36 182.869 -39.7932 -3956.96 183.854 -53.0667 -5508.36 183.953 -52.6655 -5595.66 189.579 -50.6361 -5144.68 190.33 -50.8257 -5016.7 187.128 -49.1816 -5423.1 187.42 -49.5169 -5318.37 184.656 -51.6342 -5547.73 185.342 -51.9351 -5689.92 170.63 -45.7143 -7 170.676 -45.737 -13.93 170.747 -45.8229 -6.1 170.654 -45.9169 -26 170.702 -45.8876 -7.91 170.762 -45.7829 -17 172.944 -43.8044 3 172.928 -43.7984 -2.72 172.932 -43.8059 -6.83 172.927 -43.7848 -3.67 172.938 -43.7791 -2.87 172.916 -43.8328 -4.8 172.923 -43.8446 -5.83 175.494 -36.2399 -12.59 175.522 -36.2356 -47 175.551 -36.2655 -50.23 175.628 -36.4082 -57.66 175.648 -36.3667 -77.73 175.573 -36.3259 -48.23 175.588 -36.2872 -57.76 175.332 -36.1745 -0.52 175.341 -36.1872 -3.78 175.332 -36.1518 -11.26 175.31 -36.1599 -14.74 175.326 -36.1589 -6.57 175.331 -36.1195 -20.98 175.349 -36.1184 -4.31 166.62 -46.139 1.03 166.646 -46.1242 1.38 166.632 -46.1347 1.73 173.034 -40.5903 -5.79 173.07 -40.614 -21.39 173.049 -40.535 -32.33 173.093 -40.5342 -49.16 173.665 -40.617 -60.88 173.726 -40.6277 -62.23 174.007 -40.3042 -101.02 174.076 -40.3191 -94.34 178.006 -39.1561 -46.32 178.066 -39.1507 -82.87 194.281 -35.7447 -5050.84 194.856 -35.6976 -5288.91 175.77 -42.5274 -1638.23 175.954 -42.5533 -1431.03 176.135 -42.577 -1220.99 174.709 -42.6858 -1525.64 174.858 -42.7427 -1188.84 174.12 -42.7168 -1828.32 174.446 -42.0415 -622.98 175.598 -42.7317 -966.5 176.008 -42.6723 -1004.1 176.035 -42.7998 -701.55 174.328 -42.2399 -874.99 174.117 -42.83 -1562.46 175.132 -42.7839 -1005.63 174.979 -42.794 -1040.97 175.001 -42.694 -1311.9 174.722 -42.814 -1108.5 173.981 -42.7762 -1685.88 176.168 -42.7184 -810.6 174.457 -43.0177 -788.05 174.36 -43.1169 -653.75 174.875 -42.8612 -882.4 175.026 -42.888 -725.33 175.181 -42.917 -583.96 178.59 -41.2953 -3039.97 178.339 -40.7235 -3020.11 178.674 -40.7431 -3099.41 178.371 -41.3985 -3014.1 179.245 -40.8492 -2997.35 179.435 -41.1089 -2899.01 177.809 -41.5439 -2957.13 177.652 -41.7084 -2923.62 177.86 -41.1946 -2924.14 177.919 -41.3927 -2966.08 178.911 -40.8896 -3167.61 178.997 -40.6837 -3214.22 178.141 -41.0643 -2944.35 179.171 -41.3134 -2784.01 177.335 -42.436 -2452.51 177.505 -42.2593 -2536.73 178.43 -41.5992 -2912.85 178.564 -41.8189 -2615.66 177.331 -41.1814 -2272.85 177.583 -41.1932 -2648.09 179.365 -41.803 -2706.58 179.676 -41.7322 -2775.1 179.989 -41.8168 -2873.89 179.728 -41.4577 -2742.54 179.924 -41.6212 -2839.95 180.353 -41.4868 -2490.74 180.454 -41.7011 -2356.34 179.659 -41.2497 -2765.95 179.914 -41.2653 -2666.51 179.799 -41.9769 -2774.73 180.048 -41.4579 -2696.8 180.223 -41.2822 -2661.16 179.891 -42.2373 -2760.65 180.096 -42.0468 -2635.6 177.882 -42.0797 -2631.87 178.085 -42.0962 -2519.19 179.85 -42.4766 -2566.02 180.044 -42.406 -2785.73 180.546 -42.2726 -2660.02 180.647 -42.4683 -2253.01 179.065 -42.1326 -2475.55 179.105 -41.8937 -2632.39 180.709 -41.5204 -2787.28 179.597 -42.1183 -2717.51 179.627 -42.3472 -2609.53 180.227 -42.2816 -2708.74 180.995 -41.6766 -2618.31 181.294 -41.5977 -2548.26 180.269 -41.8672 -2552.15 180.525 -41.9185 -2126.39 180.74 -41.9925 -2643.45 180.766 -42.1797 -2553.89 177.784 -42.2734 -2427.34 179.41 -42.4539 -2276.79 179.634 -42.5581 -2075.14 180.773 -42.3414 -2618.07 181.028 -42.2811 -2551.03 179.141 -42.3832 -2298.56 179.364 -42.2411 -2505.29 178.895 -41.7498 -2621.65 178.831 -41.9656 -2433.72 181.229 -41.834 -2623.69 181.462 -42.0318 -2667.29 180.725 -41.7852 -2652.1 180.961 -41.9019 -2664.26 178.311 -42.0134 -2571.45 178.59 -42.031 -2447.08 177.076 -42.5113 -1855.61 180.928 -42.0811 -2514.1 181.154 -42.0523 -2613.52 178.223 -42.2494 -2312.98 180.4 -42.4534 -2582.81 181.304 -42.2042 -2658.93 181.315 -42.3835 -1999.31 181.516 -42.2728 -2551.79 181.538 -42.4595 -1737.58 181.736 -42.3698 -1957.36 177.481 -41.0443 -2367.66 177.601 -40.8923 -2367.9 177.818 -40.7607 -2325.19 178.768 -42.1675 -2288.72 178.921 -42.2996 -2275.43 181.13 -42.5106 -1626.55 181.367 -42.5573 -1356.82 177.401 -40.8013 -2016.41 179.054 -42.5661 -2184 179.25 -42.5558 -2082.36 177.61 -42.4392 -2388.08 178.049 -42.5529 -1730.41 178.211 -42.6165 -1679.37 178.503 -42.206 -2326 178.707 -42.3781 -2270.38 178.379 -42.5939 -1990.83 178.598 -42.5697 -2161.05 178.82 -42.5654 -2032.25 178.925 -42.4367 -2281.25 177.768 -40.5411 -2147.65 180.502 -42.6233 -1261.2 180.739 -42.643 -1096.18 179.844 -42.6989 -1286.2 180.884 -42.4859 -1805.65 180.982 -42.6633 -1099.07 177.209 -40.4657 -1272.52 177.273 -42.6207 -1377.14 177.486 -42.5816 -1891.72 177.306 -40.2891 -1389.55 176.755 -40.9856 -1097.45 176.89 -42.6185 -1249.75 177.077 -42.6972 -1031.62 178.732 -42.7235 -1471.11 178.952 -42.7234 -1489.48 177.394 -40.0972 -837.19 177.501 -40.0157 -888.26 177.179 -40.2582 -579.28 177.2 -40.3587 -554.33 181.729 -42.5514 -1277.11 181.676 -42.7126 -1111.36 181.444 -42.7055 -940.49 181.551 -42.5973 -1216.56 181.22 -42.6799 -1022.04 181.322 -42.8059 -933.69 177.583 -42.7076 -1088.86 176.792 -40.7976 -625.14 176.846 -40.896 -1194.64 182.789 -42.2218 -2726.63 183.03 -42.3871 -2521.41 183.158 -42.5931 -1661.41 183.346 -42.45 -2547.13 182.679 -42.4525 -1998.62 182.906 -42.6074 -1511.41 182.181 -41.9604 -2518.86 182.224 -42.2072 -2415.19 182.37 -42.4157 -1906.95 182.523 -42.2365 -2367.08 183.891 -42.776 -1207.77 184.128 -42.682 -1612.6 181.958 -42.2892 -2316.34 182.137 -42.3995 -1911.51 182.469 -42.6102 -1493.89 182.688 -42.6596 -1266.65 183.047 -42.742 -1051.67 183.261 -42.7602 -1010.35 182.189 -42.5882 -1404.91 182.337 -42.73 -1133.53 183.398 -42.6236 -1561.32 183.512 -42.7614 -1091.42 181.946 -42.4815 -1565.44 181.924 -42.6706 -1133.58 175.319 -41.6362 -62.55 178.626 -39.8611 -3109.11 178.316 -39.1786 -1250.85 178.341 -39.2903 -1249.62 178.028 -39.8526 -1256.04 178.034 -40.0388 -1300.54 177.705 -39.8116 -1027.34 177.82 -39.943 -1345.16 177.752 -39.6963 -410.51 177.862 -39.7758 -1182.2 177.614 -39.9265 -1067.27 177.997 -39.7009 -1045.42 178.224 -39.7156 -811.24 178.264 -39.4166 -760.61 177.662 -39.6666 -230.19 177.632 -39.7301 -390.81 178.191 -39.5348 -627.5 178.365 -39.5531 -856.27 177.872 -39.672 -700.32 177.935 -39.5999 -471.98 178.068 -39.5915 -747.43 178.08 -39.4907 -305.75 178.151 -39.4458 -344.02 177.712 -39.6252 -171.02 177.807 -39.5981 -224.49 178.146 -39.3736 -184.38 178.203 -39.3109 -357.16 178.068 -39.3533 -125.3 178.079 -39.4158 -149.52 178.021 -39.3875 -115.13 178.002 -39.4445 -133.24 177.787 -39.5258 -103.8 177.879 -39.5215 -144.81 177.882 -39.4554 -93.74 177.934 -39.4326 -108 182.535 -39.707 -3950.41 182.256 -39.2865 -3822.82 182.287 -39.5764 -3745.95 181.978 -39.4489 -3734.57 181.711 -39.3167 -3480.35 181.956 -39.2181 -3780.97 181.976 -39.7195 -3729.18 181.999 -39.9896 -3720.35 181.68 -39.5689 -3610.09 181.626 -39.8486 -3655.54 181.295 -39.8547 -3653.08 181.355 -39.6444 -3679.89 181.123 -39.4603 -3460.9 181.43 -39.4072 -2860.1 180.762 -39.9068 -3585.7 181.095 -40.026 -3506.72 180.886 -39.2607 -3509.58 181.22 -39.2338 -3530.1 180.98 -38.5787 -3439.08 181.312 -38.721 -3353.75 181.35 -38.9944 -3265.49 181.488 -39.2017 -2930.68 181.053 -38.8584 -3554.83 181.066 -39.0699 -3581.54 180.551 -39.4238 -3482.59 180.856 -39.5049 -3576.67 179.675 -37.9138 -3396.21 180.547 -38.6278 -3514.79 180.709 -38.3408 -3505.12 180.577 -39.1422 -3486.2 180.818 -39.0024 -3427.24 180.557 -38.9014 -3516.22 180.787 -38.7897 -3399.29 180.292 -39.2418 -3522.01 180.191 -39.4845 -3353.36 180.674 -39.674 -3502.07 180.101 -38.2863 -3575.23 180.386 -38.3949 -3573.82 179.792 -38.9155 -3595.74 180.144 -38.5873 -3590.22 180.281 -38.8331 -3592.39 180.073 -39.0426 -3594.95 180.356 -39.0322 -3569.39 179.619 -39.3765 -3149.8 179.748 -39.1355 -3595.89 179.97 -39.3076 -3427.98 179.134 -39.166 -3443.25 179.48 -38.3432 -3169.84 179.805 -38.4493 -3533.55 179.869 -39.5454 -3185.09 178.989 -38.1294 -596.36 179.412 -39.7867 -3211.86 179.355 -39.5297 -3404.58 178.841 -39.491 -3311.8 179.065 -39.6672 -3293.77 178.582 -39.2071 -2297.41 178.655 -39.3475 -2526.42 178.752 -39.6878 -3298.91 178.89 -39.8688 -3293.99 179.03 -40.059 -3291.77 179.142 -39.8809 -3171.84 178.566 -38.9986 -1450.76 178.662 -39.0946 -1830.74 179.066 -38.009 -1258.51 179.278 -37.6756 -1146.07 179.551 -37.6771 -2140.75 178.495 -39.7049 -1952.85 178.592 -39.5342 -2421.38 178.686 -38.5842 -681.25 178.857 -38.1284 -296.22 178.909 -38.2527 -836.98 178.435 -39.1966 -1764.9 178.51 -39.1028 -1522.84 178.475 -38.9293 -1239.3 178.75 -38.3784 -657.08 181.701 -40.1753 -3596.33 182.101 -40.2705 -3710.24 181.338 -40.2766 -3323.38 181.411 -40.0363 -3552.95 181.399 -40.5514 -3188.48 181.033 -40.2589 -3308.48 181.733 -40.6289 -3324.61 181.763 -40.895 -2752.58 178.738 -40.0464 -3233.86 180.484 -40.0494 -3262.99 179.329 -40.0286 -3044.7 178.857 -40.2771 -3297.03 179.226 -40.2511 -3243.22 178.529 -40.1949 -3085.44 178.79 -40.5241 -2943.24 179.094 -40.4713 -3237.37 181.092 -40.4644 -3145.11 179.95 -39.9221 -3213.88 179.442 -40.4668 -2974.41 178.267 -40.1196 -2075.96 178.469 -40.0001 -2452.35 181.142 -40.7157 -2985.15 181.462 -40.8055 -2811.08 180.829 -40.6128 -3029.73 180.849 -40.8844 -2862.26 180.5 -40.4796 -2520.69 180.808 -40.3706 -3315.27 180.238 -40.664 -2549.31 181.498 -41.0833 -2632.5 181.841 -41.1119 -2738.15 181.677 -41.3006 -2575.63 181.817 -41.463 -2578.28 180.092 -41.0769 -2578.37 180.401 -41.1013 -2772.28 180.298 -40.8958 -2677.36 180.553 -40.7508 -2660.67 181.183 -40.9621 -2699.81 180.855 -41.2685 -2753.26 181.063 -41.4351 -2674.32 181.379 -41.3531 -2672.56 181.584 -41.5243 -2599.19 180.561 -40.9496 -2722.27 180.696 -41.099 -2711.62 181.522 -41.7663 -2749.76 181.829 -41.6894 -2728.36 177.65 -40.064 -1233.43 182.341 -40.0668 -3746.11 182.281 -39.8278 -3872.51 183.022 -40.6833 -3506.95 183.289 -40.8268 -3744.07 182.546 -39.9077 -3903.05 182.71 -40.1257 -3792.45 183.002 -40.3775 -3675.59 182.371 -40.4459 -3637.18 182.431 -40.2535 -3494.49 182.343 -40.6828 -3611.36 182.677 -40.8705 -3339.46 182.028 -40.767 -3385.03 182.068 -40.5335 -3455.63 182.28 -40.9265 -3423.66 182.482 -41.1625 -3323.53 182.011 -40.9612 -3059.6 182.135 -41.1345 -3157.67 182.902 -41.1741 -3215.83 183.045 -40.9276 -3243 182.472 -41.3741 -3329.49 182.672 -41.3286 -3264.69 182.877 -41.4458 -3056.99 183.22 -41.4141 -2977.81 182.622 -41.5052 -3047.74 182.805 -41.6536 -2942.07 181.958 -41.3063 -2732.3 182.239 -41.3386 -3118.07 182.348 -41.5658 -3008.67 183.042 -41.5991 -2837.69 183.053 -41.8401 -2791.62 183.243 -41.6538 -2850.71 183.511 -41.6137 -3094.39 182.559 -41.6785 -2989.8 182.665 -41.875 -2875.74 182.048 -41.5159 -2792.05 183.39 -41.8019 -2846.28 183.397 -42.0421 -2659.31 183.706 -42.1283 -2757.54 183.813 -42.3013 -2771.04 182.843 -42.0294 -2789.45 183.059 -42.1294 -2665.95 183.272 -42.2554 -2679.43 183.54 -42.2888 -2938.79 182.116 -41.7377 -2726.56 182.379 -41.8108 -2674.83 174.701 -42.002 -818.5 174.357 -42.3466 -1422.84 176.214 -42.0639 -2659.84 173.917 -42.3707 -483.58 174.02 -42.3429 -747.75 173.989 -42.6672 -1838.62 174.357 -42.4661 -2169.81 175.036 -42.1218 -2467.1 176.343 -42.5398 -1386.04 176.517 -42.4616 -1999.5 176.955 -42.3606 -2504.18 176.912 -41.9253 -2806.98 173.971 -43.0354 -1124.36 174.117 -42.9509 -1209.31 173.738 -42.7687 -667.25 173.878 -43.3098 -487.79 174.02 -43.2789 -703.21 173.953 -42.8991 -1487.81 173.692 -42.565 -966.22 174.262 -42.7677 -1649.87 174.407 -42.703 -1718.6 175.445 -42.5163 -1868.19 175.596 -42.5902 -1415.42 175.746 -42.3715 -2431.38 174.394 -43.5118 -555.15 174.407 -43.6307 -549.23 175.602 -42.8672 -673.29 175.758 -42.9423 -579.01 174.275 -44.1705 -568.34 174.266 -44.3177 -639.35 179.034 -38.7762 -3522.64 179.292 -38.9358 -3186.32 179.1 -39.4131 -3402.29 179.328 -39.3308 -3487.89 178.239 -39.9333 -1148.13 178.412 -39.8452 -1505.03 177.811 -40.3288 -1929.92 178.04 -40.2297 -2114.63 178.42 -41.0197 -3149.77 178.475 -40.8679 -3155.76 179.248 -40.6315 -3075.55 179.45 -40.6887 -2811.33 180.155 -40.0757 -3016.52 180.323 -40.258 -2770.49 179.468 -38.0966 -2892.73 179.764 -38.1828 -3355.65 181.569 -38.8149 -3343.79 181.558 -38.6191 -3396.5 179.603 -39.604 -3399.83 179.756 -39.758 -3365.9 179.816 -40.3858 -2777.61 179.857 -40.1346 -2883.29 179.806 -38.6945 -3588.57 180.021 -38.8199 -3581.31 180.208 -37.6566 -3902.77 180.558 -37.5377 -3623.57 180.81 -38.0482 -3480.05 181.09 -38.2606 -3476.07 182.298 -38.6932 -3893.4 183.119 -39.2973 -4052.52 183.11 -39.5383 -3985.62 184.058 -42.4179 -2732.04 183.154 -40.0629 -3789.99 183.408 -40.2686 -4027.2 182.061 -38.3667 -3454.05 182.51 -38.3602 -3612.44 183.811 -39.6994 -4320.75 184.06 -39.9773 -4300.35 182.109 -39.0001 -3981.73 182.503 -39.0366 -2992.1 182.724 -38.706 -3932.97 183.139 -38.7292 -3892.73 179.584 -40.8665 -2732.55 179.765 -41.068 -2828.74 184.346 -42.507 -2278.37 184.326 -42.3143 -2646.4 184.815 -42.1433 -2591.74 185.045 -42.0203 -2568.75 183.716 -41.1246 -3382.78 184.049 -40.9885 -3969.03 184.048 -41.8102 -2930.49 184.322 -41.8979 -2856.26 184.678 -41.394 -3268.49 184.78 -41.6042 -2979.39 184.34 -40.7392 -4105.09 184.469 -40.9829 -3503.97 183.349 -39.7574 -3915.27 183.601 -40.015 -4098.74 187.127 -41.7237 -3008.68 187.503 -41.976 -2753.83 188.728 -41.4428 -3788.25 189.14 -41.5356 -3741.72 178.994 -45.9085 -2955.37 176.747 -46.3701 -2212.34 176.862 -46.6154 -2482.01 172.765 -44.9217 -1211.07 171.582 -45.59 -1196.9 171.702 -45.7076 -1362.64 171.408 -46.0383 -1232.62 172.008 -45.1199 -1191.53 170.512 -46.4531 -747 171.079 -46.5637 -1104.84 171.027 -47.6356 -1298.27 171.174 -47.8138 -1319.77 171.765 -46.6266 -1281 171.711 -46.8538 -1330.2 173.432 -46.2217 -1684.41 176.575 -45.266 -1685.12 176.817 -45.4477 -1835.26 176.944 -45.9924 -2194.19 177.457 -46.3991 -2686.79 177.817 -46.4409 -2937.32 175.952 -50.1521 -1631.72 176.046 -49.9643 -1434.6 176.086 -50.6367 -2872.07 177.459 -50.1253 -1920.89 177.603 -50.37 -3638.95 174.197 -52.4268 -1873.76 174.554 -52.3964 -3164.38 174.93 -52.0146 -2840.67 175.372 -52.0854 -3843.77 173.916 -53.3254 -2617.4 174.233 -53.5371 -3794.66 176.333 -50.8225 -3511.1 176.797 -50.8451 -4506.87 175.877 -52.1715 -4609.85 177.037 -52.3088 -4959.45 177.37 -52.6724 -4923.55 176.865 -50.5203 -3030.46 177.273 -50.6146 -3878.52 174.663 -52.1726 -3280.86 174.972 -52.2837 -3913.65 175.725 -51.8968 -4282.54 178.514 -50.415 -4196.61 177.831 -51.3529 -4977.95 176.787 -52.0109 -4918.78 177.312 -51.9831 -5006.91 178.332 -50.1717 -3405.12 178.808 -50.2198 -3762.26 181.398 -48.3085 -4529.85 181.606 -48.0853 -4547.84 181.579 -48.5806 -4754.85 181.919 -48.8208 -4547.84 181.631 -47.6693 -4304.26 181.612 -47.4209 -4132.37 182.231 -47.9212 -4891.49 182.692 -48.073 -4842.71 180.787 -46.2779 -3697.84 181.152 -45.6646 -3372.66 182.029 -46.5862 -4508 182.322 -46.3156 -4375.33 178.749 -45.0113 -2404.96 178.841 -45.2546 -2608.54 177.742 -45.0273 -2180.42 177.14 -45.3266 -2107.42 177.183 -45.5556 -2389.31 177.81 -45.4367 -2590.22 177.978 -45.7291 -2750.54 178.408 -46.378 -3052.07 178.735 -46.3732 -3072.22 177.618 -45.9171 -2752.86 177.945 -46.0034 -2841.53 180.811 -46.0274 -3713.07 181.305 -45.4253 -3211.14 181.613 -45.5573 -3985.92 181.884 -45.7983 -4273.45 182.109 -46.0376 -4352.2 183.035 -46.0394 -4295.09 183.35 -46.3432 -4603.14 179.142 -45.6955 -2695.8 178.208 -45.4541 -2694.48 178.609 -45.4637 -2688.62 181.133 -45.9534 -3934.68 181.492 -45.8629 -4162.37 182.5 -45.5023 -4046.92 182.871 -45.5157 -4022.26 182.728 -45.7642 -4177.67 183.162 -45.7174 -3947.41 180.441 -46.3881 -3495.43 180.016 -47.0145 -2275.8 180.317 -47.1339 -2037.66 179.729 -46.6183 -3019.72 180.045 -46.7598 -2816.64 180.918 -47.1434 -2817.01 181.559 -46.5084 -4356.94 181.135 -46.4017 -4138.26 181.218 -46.7064 -4018.82 181.016 -48.9113 -3028.62 181.254 -49.1578 -3770.35 181.548 -47.1621 -4313.82 181.942 -47.2144 -4596.26 183.618 -45.0392 -2537.08 183.873 -45.141 -3298.15 184.725 -45.0662 -3321.45 184.974 -45.2786 -4052.48 183.955 -45.7357 -4116.66 184.177 -46.0078 -4205.76 174.578 -52.9054 -3991.12 170.205 -55.4214 -5005.76 170.809 -55.4796 -5332.75 171.187 -54.4971 -3929.8 171.297 -54.8074 -4662.25 171.078 -55.1712 -5295.65 171.736 -55.1053 -5336.22 169.88 -56.0344 -5248.77 170.425 -55.7833 -5087.4 172.576 -54.2017 -4443.33 172.944 -54.4579 -5142.41 174.814 -53.1153 -4578.68 175.022 -52.9227 -4720.4 173.534 -53.8493 -4238.43 173.977 -53.8366 -4339.57 173.684 -54.048 -4928.14 174.057 -54.1155 -4875.07 172.343 -46.0536 -1445.93 172.652 -46.0812 -1503.17 175.613 -47.0306 -1507.62 175.98 -47.0216 -1616.26 183.972 -46.979 -5014.16 184.393 -47.0872 -4875.11 185.348 -47.7753 -5150.78 185.928 -47.7008 -5207.02 184.97 -49.7234 -5317.18 185.529 -49.7412 -5307.25 185.925 -50.1439 -5404.47 186.279 -50.5092 -5366.76 170.732 -54.9583 -4708.99 169.602 -55.4798 -4707.59 169.899 -55.7061 -5100.5 165.185 -55.4311 -2766.5 165.449 -55.5987 -2234.22 166.162 -55.8226 -3394.28 166.558 -55.9078 -3640.41 167.436 -56.2378 -4639.59 168.03 -56.2945 -4839.73 170.264 -55.0768 -3895.33 170.622 -55.2286 -5015.94 169.319 -55.2322 -3466.63 169.787 -55.1722 -4069.66 169.903 -54.8791 -2471.71 170.34 -54.7831 -3056.96 171.43 -54.3102 -2863.46 171.711 -54.4793 -4339.26 171.34 -55.4259 -5569.09 171.91 -55.5326 -5380.67 162.639 -52.9855 -4003.78 163.215 -52.6645 -4294.46 164.769 -52.1138 -3948.51 164.975 -52.3501 -2764.88 164.892 -50.8419 -3530.86 165.145 -51.0435 -3616.39 165.083 -50.3176 -3514.61 165.639 -52.0302 -1025.48 165.867 -51.9898 -1045.79 165.68 -52.2396 -1004.98 165.85 -52.1179 -1087.17 163.31 -51.7026 -4236.32 163.819 -51.471 -4278.96 163.453 -52.3468 -4166.13 163.87 -52.5368 -4068.76 163.757 -52.8755 -4132.15 162.142 -52.7341 -3524.85 162.603 -52.6061 -3976.07 162.418 -51.8173 -3368.87 162.43 -52.0594 -3621.56 163.282 -53.0232 -4089.08 163.654 -53.1739 -4117.2 165.505 -48.8894 -3252.38 165.533 -48.623 -3068.4 165.335 -49.1541 -3405.08 165.665 -49.0961 -3319.9 165.038 -49.5403 -3468.85 165.269 -49.387 -3163.12 164.305 -52.029 -3947.96 164.61 -51.8742 -3654.06 165.432 -49.8948 -3136.42 165.481 -50.1496 -3231.36 164.825 -50.5622 -3437.5 165.161 -50.5961 -3173.38 165.545 -48.2006 -2471.17 165.841 -47.5445 -2781.53 165.605 -47.6042 -2697.47 164.36 -48.2945 -5737.65 164.716 -46.383 -3346.45 164.986 -46.2287 -3749.05 164.848 -50.1007 -3659.03 165.166 -50.057 -3427.6 163.433 -47.9635 -4221.33 163.69 -47.6076 -4315.39 163.953 -46.2818 -3973.15 164.355 -46.3354 -3662.88 163.467 -49.1763 -4154.02 163.68 -49.3538 -4673.5 163.8 -49.8763 -1603.07 164.041 -49.9891 -1568.05 163.681 -51.1457 -4003.46 164.055 -51.1746 -3381.99 163.838 -51.8679 -4288.47 164.284 -51.7079 -4260.56 164.076 -48.7865 -5221.77 164.447 -48.7268 -3685.58 166.893 -49.2629 -602.98 166.865 -49.3698 -591.48 166.701 -49.4154 -551.81 166.806 -49.491 -593.79 166.287 -49.4482 -726.61 166.315 -49.3312 -1089.09 165.772 -49.7671 -3161.57 165.793 -49.986 -2747.33 165.836 -48.7255 -2818.81 165.887 -48.9391 -2571.82 166.906 -47.1281 -848.99 166.689 -46.4264 -213.84 166.807 -46.4014 -151.04 167.168 -46.5945 -178.8 166.635 -47.3973 -1477.25 166.064 -47.4753 -2421.09 165.816 -47.7231 -2838.27 166.073 -47.6564 -2556.61 166.272 -47.3988 -2411.9 166.463 -47.4736 -1957.56 166.946 -47.2609 -539.96 166.481 -47.6104 -535.16 166.646 -47.5326 -917.29 166.085 -46.982 -1571.11 165.9 -46.9806 -778.37 165.993 -47.0899 -1948.56 165.633 -47.44 -2568.53 165.22 -46.4879 -4200.74 167.611 -46.8203 -42.29 167.685 -46.9063 -36.41 167.674 -46.8718 -35.86 167.708 -46.8539 -21.94 167.622 -46.8599 -47 167.638 -46.8932 -47 167.525 -46.8476 -89.95 167.577 -46.8448 -64.24 167.545 -47.0412 -44.3 167.589 -47.0341 -13.87 167.486 -47.0365 -97 167.507 -47.0727 -67.33 167.744 -46.6707 -45.67 167.779 -46.6472 -31.67 167.83 -46.6236 -47 167.873 -46.6024 -47 168.035 -46.7338 -27 168.082 -46.7109 -27 166.991 -46.5979 -204.73 166.558 -46.4477 -363.43 166.617 -46.37 -197 166.443 -46.2758 -290.66 166.445 -46.2102 -216.28 166.344 -45.8349 -197 165.458 -45.642 -4048.36 165.106 -45.7677 -4291.45 164.94 -45.2896 -4485.52 165.306 -45.233 -4571.97 165.087 -45.0069 -4548.42 165.317 -44.6938 -4616.86 165.196 -46.0244 -2753.78 165.468 -46.0729 -3997.13 165.499 -45.4076 -4357.18 167.875 -43.7067 -2132.16 167.52 -44.3562 -3033.61 168.517 -43.7065 -1165.73 166.001 -44.1103 -4122.85 165.979 -44.379 -4038.51 166.098 -43.8494 -3939.54 166.394 -43.8205 -3917.03 168.145 -41.6024 -1231.63 168.351 -41.4737 -1067.7 169.093 -41.9037 -1150.03 169.314 -41.9961 -1102.51 166.812 -43.5484 -3789.89 167.098 -43.5346 -3428.51 166.509 -43.5774 -3896.68 166.634 -43.3476 -3904.88 166.911 -43.9657 -3596.45 165.937 -41.6916 -4042.15 166.423 -41.7257 -3928.39 164.403 -43.8975 -4651.03 164.812 -43.7276 -4580.36 167.018 -42.9229 -2931.83 167.343 -42.8437 -2301.55 166.211 -40.7444 -3948.21 166.24 -41.0627 -3510.86 166.111 -42.9774 -4264 166.388 -42.6989 -3783.03 164.88 -44.0586 -4656.58 165.328 -44.1335 -4650.23 165.475 -41.5059 -4213.24 165.879 -41.2899 -4092.56 168.111 -41.3813 -1102.72 168.295 -41.2897 -1022.16 168.63 -42.9784 -1065.5 168.572 -43.1443 -1025.21 167.118 -42.1747 -2739.37 167.27 -42.3751 -2508.99 166.711 -44.0625 -3723.1 164.548 -45.3477 -4805.22 165.032 -44.402 -4670.06 165.417 -44.4008 -4592.93 165.795 -42.0151 -4347.79 165.87 -42.3043 -4228.36 165.448 -41.1346 -4242.97 165.84 -40.9294 -4159.19 166.275 -42.3917 -3856.18 166.588 -42.4742 -3633.27 165.888 -40.6011 -3852.82 164.983 -40.2748 -3157.44 165.259 -40.4468 -3858.82 165.824 -40.1013 -3704.96 166.667 -41.1617 -2313.27 166.588 -40.036 -2866.59 166.748 -40.2378 -2264.62 166.101 -39.0903 -3017.91 166.223 -40.0515 -3018 166.401 -40.2771 -3158.13 166.556 -40.8518 -2869.57 166.838 -40.9235 -1839.26 166.027 -40.3137 -2739.79 166.216 -40.4939 -3713.15 166.866 -40.0352 -1808.58 167.064 -40.1406 -1488.94 167.287 -40.0403 -1286.3 167.313 -40.2112 -1220.64 165.469 -39.175 -2207.5 165.601 -39.4032 -2746.11 165.159 -39.9584 -2598.21 165.41 -40.1734 -3231.81 166.762 -36.9734 -1595.99 167.021 -36.9823 -1292.6 165.796 -39.1887 -2991.04 165.977 -39.3514 -3043.34 170.138 -36.0816 -2261.06 170.453 -36.1241 -2166.27 169.367 -36.2737 -2199.38 169.65 -36.1564 -2196.46 168.561 -35.624 -2279.86 168.768 -35.5025 -2399.75 167.9 -35.1416 -2554.99 168.176 -35.2695 -2582.37 173.055 -37.0911 -1647.69 173.247 -37.0602 -1424.35 170.855 -39.1069 -805.67 170.868 -39.2381 -822.89 172.027 -38.7865 -862.58 172.244 -38.8027 -1033.53 172.13 -38.5345 -1145 172.199 -38.3772 -1360.44 173.021 -38.0727 -1353.44 173.124 -38.1979 -1240.78 173.518 -38.1027 -1008.28 173.646 -37.9906 -1027.42 173.598 -37.8465 -1173.87 173.789 -37.8788 -883.08 173.73 -37.7333 -1059.15 173.869 -37.7689 -929.96 173.668 -36.9789 -1237.08 173.836 -36.9267 -808.06 173.906 -37.483 -853.76 173.468 -37.9585 -1191.6 172.436 -37.8288 -1559.1 172.379 -38.0016 -1467.63 171.958 -37.2285 -1805.15 172.009 -37.3899 -1662.25 173.311 -37.901 -1302.93 173.434 -37.824 -1246.2 173.356 -37.3749 -1375.18 173.321 -37.5471 -1387.8 173.402 -37.2014 -1414.62 173.532 -37.3191 -1149.97 173.521 -36.8529 -1289.5 173.606 -36.7195 -956.14 172.905 -36.8357 -1594.15 173.121 -36.7617 -1604.76 172.728 -36.9147 -1759.35 172.891 -37.0127 -1631.28 173.087 -36.9368 -1507.25 173.302 -36.8854 -1468.14 173.088 -37.5579 -1477.21 173.184 -37.4247 -1518.17 172.788 -38.0885 -1436.12 172.86 -37.9256 -1461.55 172.121 -38.6764 -1111.77 172.287 -38.6404 -1121.78 171.775 -36.7166 -1786.89 172.04 -36.7225 -1811.89 171.663 -38.1279 -1599.9 171.688 -38.3108 -1513.21 171.254 -37.4749 -1824.01 171.566 -37.5148 -1785.28 172.468 -37.2892 -1724.4 172.739 -37.3332 -1615.88 173.825 -37.2366 -1272.5 173.949 -37.1806 -695.97 174.13 -37.2134 -156.62 174.184 -37.1836 -126.95 173.881 -36.7994 -377.86 173.978 -36.7591 -141.72 173.856 -36.4521 -126.8 174.191 -37.382 -125.96 174.246 -37.4337 -236.44 174.043 -37.6558 -494.37 174.142 -37.661 -186.44 173.423 -38.2264 -770.14 173.577 -38.2316 -543.09 173.944 -37.8353 -559.79 173.935 -37.9348 -503.15 174.005 -37.5719 -636.94 174.052 -37.4977 -549.94 173.985 -37.7408 -605.93 174.04 -37.8023 -320.44 173.813 -38.0165 -698.27 173.853 -38.1205 -206.63 172.39 -39.0023 -549.37 172.4 -38.8892 -688.42 171.661 -38.969 -956.63 171.717 -38.8341 -1034.99 171.027 -38.6309 -859.01 171.21 -38.5641 -935.84 171.734 -38.4936 -1377.68 171.946 -38.3919 -1357.73 171.297 -38.0321 -1666.16 171.297 -37.8454 -1736.3 172.195 -37.255 -1739.29 172.343 -37.0814 -1735.92 171.636 -36.8937 -1925.79 171.912 -36.9006 -1963.06 172.843 -37.5247 -1535.58 172.989 -37.3862 -1548.02 173.135 -36.3976 -1431.89 173.164 -36.5686 -1379.13 171.38 -36.9128 -1855.09 173.835 -37.0748 -1222.39 173.985 -37.0814 -476.85 173.847 -36.6857 -422.97 173.931 -36.7182 -175.76 173.839 -36.58 -278.63 173.886 -36.5093 -122.53 174.125 -37.5778 -277.25 174.23 -37.5545 -137.55 172.122 -38.943 -1095.82 172.282 -38.9429 -758.25 172.566 -38.1197 -1478.76 172.717 -38.2092 -1381.99 172.303 -38.5028 -1205.6 172.424 -38.3945 -1262.09 172.618 -37.958 -1597.24 172.674 -37.7934 -1562.51 172.101 -38.038 -1574.37 172.227 -37.874 -1598.16 170.982 -38.2254 -1160.05 171.191 -38.1556 -1408.49 171.882 -38.1787 -1534.08 172.092 -38.2378 -1459.04 171.342 -37.6551 -1790.54 171.54 -37.7453 -1742.88 171.765 -37.3271 -1816.7 171.828 -37.4897 -1621.69 171.322 -37.0802 -1900.32 171.516 -37.0448 -1877.96 173.889 -37.3486 -921.2 173.95 -37.2796 -711.7 173.946 -36.8923 -267.42 173.948 -36.9825 -419.77 173.705 -36.2366 -193.23 173.749 -36.199 -140.04 173.769 -36.4258 -247.82 173.85 -36.4004 -105.22 173.465 -36.1913 -712.91 173.516 -36.0802 -507.23 173.72 -36.5207 -471.6 173.814 -36.4976 -235.02 173.528 -36.3243 -852 173.611 -36.2319 -614.78 173.395 -36.0723 -509.19 173.469 -36.0159 -180.29 173.712 -36.8317 -996.51 173.753 -36.7328 -799.5 173.448 -36.44 -1146.95 172.54 -36.3423 -1524.68 172.797 -36.3415 -1524.86 172.985 -36.3266 -1417.29 172.945 -36.4716 -1437.49 171.909 -36.3631 -2079.49 172.039 -36.172 -1635.23 172.059 -37.0728 -1834.7 172.189 -36.8937 -1810.83 172.467 -36.1522 -1491.43 172.695 -36.1838 -1351.18 172.209 -35.6935 -1314.05 172.359 -35.616 -969.68 172.288 -35.1911 -969.79 172.47 -35.1963 -469.25 173.292 -36.4531 -1275.51 173.368 -36.545 -1259.14 173.112 -35.9681 -728.52 171.911 -36.5704 -1726.14 172.137 -36.5295 -1759.39 171.78 -36.1025 -1771.32 171.595 -35.8864 -1620.95 171.831 -35.8959 -1567.47 171.135 -36.3451 -1991.44 171.354 -36.2607 -1797.4 170.816 -35.6926 -1889.91 170.959 -35.4853 -1955.97 170.984 -34.5986 -1684.3 171.028 -34.7735 -1703.04 171.891 -35.1688 -1408.71 172.207 -35.5202 -1139.31 172.244 -35.3563 -1173.66 171.999 -34.8529 -1021.98 172.094 -34.759 -757.88 171.559 -34.9169 -1367.35 171.66 -35.0803 -1437.62 170.798 -35.2816 -1958.88 170.929 -35.0954 -1983.82 172.106 -35.2401 -1338.65 172.109 -35.0982 -1034.79 172.808 -33.8327 -1607.71 171.773 -33.6588 -1176.68 171.94 -33.7427 -1110.22 171.569 -33.6089 -2178.13 171.631 -33.7495 -1705.19 172.437 -33.4541 -1350.91 172.921 -33.2437 -2113.41 172.903 -33.4573 -1864.64 172.148 -33.1768 -1953.61 171.636 -33.2019 -2954.39 171.891 -33.1932 -2204.61 171.41 -33.1771 -2643.62 171.443 -33.3944 -1523.78 171.772 -34.479 -519.53 171.83 -34.3523 -300.18 171.809 -34.6458 -1126.48 171.91 -34.5583 -560.38 170.797 -34.4764 -1737.58 170.9 -34.252 -1797.44 170.84 -33.3923 -1279.4 171.011 -33.2055 -2136.64 172.403 -35.0894 -376 172.518 -35.1111 -240.99 172.884 -35.4281 -358.01 172.966 -35.4091 -206.25 172.971 -35.479 -237.24 173.054 -35.6852 -342.3 173.117 -35.6357 -196.9 173.27 -35.8259 -226.96 172.152 -34.163 -247 172.267 -34.149 -301.91 171.691 -34.7648 -1106.34 171.857 -34.7749 -1180.37 171.634 -34.6019 -1294.56 171.286 -34.4308 -1611.12 171.45 -34.3546 -952.17 171.967 -33.5688 -1524.65 172.092 -33.6678 -902.82 173.101 -34.1567 -1039.38 173.197 -34.0391 -1748.73 171.447 -34.5305 -1437.13 171.593 -34.4563 -1191.54 171.984 -35.0035 -856.14 172.107 -34.9682 -717.7 171.64 -35.4756 -1560.96 171.841 -35.5031 -1534.15 171.636 -35.2675 -1676.84 171.805 -35.3649 -1654.83 171.763 -33.0293 -2369.93 171.998 -32.9777 -2271.79 170.164 -34.1069 -1917.45 170.425 -34.0761 -1741.5 171.114 -33.8206 -654.67 171.308 -33.83 -448.63 171.137 -33.4226 -1805.39 171.246 -33.2539 -2176.21 172.245 -33.3496 -1659.44 172.396 -33.2175 -1891.09 172.365 -33.6162 -739.06 172.417 -33.7565 -116.26 172.531 -33.6455 -1279.8 172.684 -33.5389 -1735.46 172.606 -33.7992 -509.51 172.702 -33.699 -1471.84 172.987 -33.7814 -1822.35 172.992 -33.9275 -1671.89 173.128 -33.8415 -1905.99 173.371 -33.8434 -2037.94 173.342 -34.181 -1549.21 173.442 -34.0716 -2126.98 173.642 -33.9708 -2024.42 173.661 -33.7464 -2209.59 174.371 -33.2199 -3478.55 174.462 -33.4166 -2933.97 174.315 -33.962 -2034.33 174.604 -33.8928 -1836.34 174.86 -34.3762 -1877.66 175.081 -34.3147 -1806.44 173.423 -34.453 -565.58 173.456 -34.5622 -449.44 173.786 -34.7728 -167.09 173.786 -34.8126 -128.47 173.835 -34.8076 -144.2 173.416 -34.7113 -136.43 173.433 -34.6516 -186.18 173.465 -34.8139 -46.69 173.5 -34.7764 -113.12 173.449 -34.747 -119.56 173.476 -34.7098 -162.27 173.154 -34.5024 -132.49 173.154 -34.4526 -176.76 173.283 -34.569 -163.17 173.31 -34.6283 -142.86 173.177 -34.4061 -206.31 173.242 -34.3672 -488.34 172.846 -34.0099 -941.36 172.905 -34.1253 -426.7 173.004 -34.0766 -1121 173.366 -34.6012 -181.16 173.35 -34.5162 -433.87 172.613 -34.0101 -166.53 172.681 -33.9381 -423.16 173.869 -34.754 -193.49 173.899 -34.8162 -164 173.782 -34.7102 -234.51 173.686 -34.6784 -241.16 173.716 -34.7493 -187.04 173.526 -34.6507 -310.44 173.611 -34.8396 -121.13 173.649 -34.879 -98.29 173.551 -34.8194 -120.13 173.586 -34.7694 -159.57 173.537 -34.7212 -178.37 173.598 -34.6997 -225.39 173.896 -34.9657 -42 173.926 -34.9926 -15.35 173.648 -34.7377 -184.61 173.662 -34.7906 -150.92 173.932 -34.9585 -36.85 173.971 -34.9285 -101.24 173.979 -35.0792 -35.6 173.986 -35.0385 -38.53 174.389 -35.03 -204.86 174.343 -35.1769 -52.98 174.369 -35.181 -89.51 174.333 -35.2263 -47 174.412 -35.1754 -124.24 174.385 -35.1433 -129.89 174.451 -35.0931 -201.28 174.52 -35.0909 -252.69 174.713 -34.8918 -706.18 174.819 -34.9557 -670.52 174.149 -34.3832 -1265.12 174.391 -34.3492 -1437.89 173.495 -34.2443 -1709.87 173.647 -34.163 -1981.98 173.944 -34.3774 -919.04 174.014 -34.5003 -879.46 173.516 -34.3894 -843.94 173.647 -34.3252 -1604.85 174.991 -34.9032 -796.95 175.147 -34.7369 -1527.54 174.072 -34.0302 -950.78 174.243 -34.1805 -1659.34 175.823 -35.4297 -870.63 175.945 -35.2359 -1778.36 175.423 -35.022 -1344.93 175.486 -35.1643 -1312.56 175.971 -35.0048 -1929.27 176.176 -35.1 -1960.34 176.82 -35.1196 -2361.62 176.901 -35.3751 -2231 177.898 -36.1626 -2258.64 177.054 -36.4318 -1776.82 177.34 -36.4023 -3247 177.463 -35.4199 -2304.5 177.598 -35.1831 -2733.59 177.173 -35.4929 -1978.83 177.391 -35.6197 -2346.74 177.172 -35.7341 -2454.41 177.2 -35.9533 -2497 176.712 -35.5095 -2497 176.918 -35.6143 -2024.8 176.217 -35.7327 -747 176.397 -35.7563 -665.09 176.387 -35.9437 -707 176.586 -35.9232 -1414.99 177.73 -35.3904 -2708.8 177.933 -35.2444 -2896.22 177.928 -35.4746 -2713.01 178.042 -35.692 -2463.83 177.391 -36.6287 -2139.3 177.618 -36.5483 -2539.37 178.135 -36.2615 -2151.39 178.364 -36.2206 -2265.89 177.993 -37.4983 -146.38 176.887 -37.5147 -435.24 176.588 -37.0674 -997 176.239 -36.2917 -486.31 176.397 -36.3108 -944.1 176.461 -37.0255 -968.95 176.529 -37.3884 -497 176.399 -37.3175 -417.53 176.487 -37.3138 -519.93 176.297 -36.5628 -748.09 176.016 -36.4477 -191.48 176.176 -36.3777 -436.5 176.443 -36.5972 -1253.11 176.532 -36.4555 -1312.38 176.072 -36.7699 -127.06 176.156 -36.8596 -137.87 176.547 -36.7209 -1497 176.63 -36.5921 -1694.37 176.725 -36.4577 -1747 176.801 -36.5966 -1497 177.264 -37.0343 -1629.3 177.471 -36.9677 -1792.8 175.921 -35.5606 -497 176.05 -35.4657 -1770.29 176.279 -36.3825 -666.38 176.366 -36.4661 -1048.22 176.227 -37.1409 -313.66 176.269 -37.2055 -268.94 176.052 -36.9265 -54.12 176.078 -36.8802 -76.02 176.151 -37.0387 -145.23 176.188 -37.0877 -256.16 176.113 -36.4711 -303.62 176.235 -36.4686 -556 176.157 -36.6914 -194.57 176.476 -37.1448 -918.68 176.34 -37.2592 -232.99 176.431 -37.2416 -645.77 176.123 -37.1837 -140.28 176.157 -37.1379 -218.67 175.999 -36.9264 -60.35 176.017 -36.9668 -47 176.086 -37.0432 -74.68 176.122 -37.0884 -146.18 175.907 -36.5707 -51.88 175.951 -36.5468 -115.67 175.948 -36.602 -66.91 175.916 -36.6355 -23.19 175.958 -36.6599 -47 175.973 -36.7096 -84.73 176.02 -36.6799 -111.47 176.265 -37.2792 -7 176.316 -37.3339 -164.43 176.4 -37.4343 -159.28 176.441 -37.4865 -122.35 176.546 -37.5338 -174.4 176.632 -37.5039 -397.31 176.616 -37.4133 -586.42 176.721 -36.9704 -1115.49 177.089 -37.12 -1910.83 176.974 -36.6023 -1476.63 177.183 -36.6062 -2997 176.359 -36.9841 -722.73 176.259 -37.0835 -384.49 176.355 -37.0813 -611 176.727 -37.2731 -511.72 176.875 -37.309 -497 176.963 -37.2101 -1090.45 176.55 -36.9492 -1014.17 176.627 -36.8392 -1445.46 176.679 -37.5707 -364.27 176.715 -37.6213 -274.42 177.933 -37.4724 -250.52 177.739 -37.4247 -901.25 177.795 -37.5078 -331.24 177.566 -37.612 -202.69 177.422 -37.1404 -1935.28 177.488 -37.3713 -1434.43 177.604 -37.4453 -1000.86 177.851 -37.4503 -494.15 178.06 -37.4714 -198.06 177.919 -37.4049 -638 177.994 -37.4367 -393.84 177.381 -37.5265 -809.29 177.378 -37.692 -120.45 177.379 -37.6135 -247.79 177.185 -37.5334 -37.69 177.282 -37.4825 -1050.49 177.484 -37.4811 -1247 177.579 -37.5349 -599.34 176.705 -37.4438 -550.23 176.776 -37.3824 -614.51 176.729 -37.1288 -957.77 176.837 -37.1979 -752.33 177.089 -37.2587 -1636.62 177.248 -37.2103 -1008.53 177.547 -37.2473 -1680.53 177.634 -37.1078 -1852.16 177.913 -37.3272 -1247.27 177.802 -37.1781 -1680.12 177.913 -37.2361 -1635.88 177.921 -37.1406 -1849.97 178.015 -37.05 -1997 177.992 -37.3675 -885.08 178.214 -37.0834 -2168.91 178.298 -37.464 -565.71 178.392 -37.464 -997 178.717 -37.4915 -732.6 178.682 -37.368 -1146.68 178.233 -37.4053 -576.64 178.342 -37.393 -1031.02 178 -37.2915 -1361.44 178.046 -37.1887 -1841.63 177.831 -37.3718 -1051.78 177.85 -37.5663 -102.5 177.885 -37.5158 -182.48 177.657 -37.5819 -232.53 177.69 -37.5136 -488.52 177.641 -37.3453 -1251.89 177.695 -37.2499 -1501.45 178.065 -37.4002 -562.64 178.138 -37.4386 -239.58 178.058 -37.3382 -1038.95 178.146 -37.3457 -953.19 178.273 -37.314 -1195.82 178.083 -37.281 -1425.28 178.179 -37.2361 -1646.81 178.129 -36.9291 -2279.07 178.338 -36.8952 -2345.67 178.472 -36.6719 -2417.05 178.613 -36.8922 -2335.51 177.817 -36.7208 -2247 177.939 -36.9 -2247 177.706 -36.9219 -1997 177.835 -37.0501 -1865.08 178.514 -37.2157 -1967.03 178.648 -37.2618 -1370.41 178.34 -37.204 -1960.62 178.411 -37.3111 -1970.47 178.458 -37.4058 -1958.41 178.548 -37.3338 -1398.61 178.483 -37.488 -755.45 178.576 -37.4404 -1366.12 178.811 -37.3973 -690.19 178.892 -37.4946 -100.92 178.836 -37.749 -553.81 178.852 -37.835 -729.82 179.801 -36.7014 -2462.3 179.128 -36.6881 -2426.97 179.239 -36.9184 -2239.28 179.245 -38.0267 -2468.46 179.393 -37.8689 -2205.91 178.963 -37.9021 -1059.46 179.144 -37.8455 -1391.23 179.085 -38.5518 -3480.45 179.08 -38.2438 -1854.15 179.205 -38.3727 -3365.09 179.129 -38.1224 -1338.54 179.264 -38.2032 -3078.8 180.005 -37.4772 -4466.73 180.264 -37.3736 -4155.32 180.595 -37.212 -4119.79 180.914 -37.3959 -3129.79 180.43 -38.1474 -3505.25 180.491 -37.8513 -3490.82 179.365 -37.1295 -2045.64 179.472 -37.3044 -1926.87 178.712 -38.3223 -72.42 178.787 -38.2993 -257.05 178.184 -38.8878 -69.58 178.69 -38.5134 -455 179.54 -38.5847 -3566.99 179.549 -38.8022 -3504.8 179.319 -38.5113 -3561.55 179.296 -38.695 -3544.18 178.854 -38.3778 -853.17 179.003 -38.3831 -2131.14 178.778 -38.5571 -810.56 178.885 -38.6308 -1994.69 178.489 -38.2238 -66.81 178.548 -38.2284 -97 178.636 -38.0566 -144.65 178.657 -38.1096 -193.45 178.619 -38.4813 -130.42 178.684 -38.4381 -373.31 178.26 -38.5957 -35.54 178.304 -38.6226 -35.67 178.4 -38.6762 -69.43 178.507 -38.549 -115.94 178.511 -38.6197 -143.39 178.029 -39.1972 -70.05 178.008 -39.2321 -63.84 178.062 -39.2519 -96.48 178.862 -39.0798 -2940.53 179.029 -38.9684 -3444.09 178.707 -38.9651 -1343.6 178.854 -38.8956 -2289.91 178.739 -38.6517 -1033.58 178.813 -38.7536 -1413.86 178.624 -38.6418 -440.9 178.664 -38.7307 -1029.47 178.388 -39.1044 -1620.17 178.441 -39.0184 -1383.96 178.215 -38.9121 -108.65 178.585 -38.8938 -725.34 178.699 -38.8367 -1019.08 178.459 -38.6842 -170.88 178.548 -38.7041 -663.16 178.412 -38.7135 -115.36 178.467 -38.7565 -578.62 178.27 -38.8175 -81.94 178.304 -38.8655 -259.2 178.342 -38.814 -461.76 178.165 -38.9213 -64.54 178.263 -38.9011 -269.78 178.484 -38.8425 -748.66 178.575 -38.7938 -831.9 178.338 -39.0318 -1405.57 178.388 -38.8761 -1133.36 178.411 -38.8084 -518.66 178.708 -38.2587 -136.89 178.784 -38.206 -263.23 178.775 -38.463 -779.74 178.895 -38.4945 -1340.58 177.942 -38.9303 -35.74 177.966 -38.9628 -39.45 178.024 -38.9579 -42.87 178.058 -38.9905 -44.09 178.106 -38.9743 -43.78 178.042 -39.0367 -34.91 178.146 -38.9549 -81.99 178.11 -38.9298 -38.18 178.139 -38.8892 -42.23 178.088 -39.0582 -42.07 178.048 -39.3034 -102.29 178.112 -39.3069 -130.17 178.123 -39.1218 -149.29 178.145 -39.2495 -132.05 178.234 -39.2292 -594.2 178.13 -39.0801 -88.79 178.181 -39.0603 -181.06 178.172 -39.0994 -190.48 178.188 -39.0237 -174.64 178.244 -39.0375 -950.62 178.098 -39.0154 -35.17 178.155 -38.9938 -130.88 178.043 -39.0755 -34.93 178.076 -39.0998 -75.08 178.099 -39.2007 -112.12 178.45 -39.4079 -1333.49 178.492 -39.2916 -1930.38 178.73 -39.203 -3203 178.888 -39.2831 -3381.18 179.447 -39.156 -3463.19 179.567 -38.9875 -3625.27 177.527 -39.6063 -145.46 177.561 -39.4894 -118.05 177.597 -39.5492 -135.4 178.278 -39.1003 -1407.56 178.312 -38.9202 -962.08 178.376 -38.9579 -1248.86 178.25 -38.9423 -522.86 178.291 -38.9795 -1121.26 178.125 -39.1602 -187.95 178.167 -39.1904 -157.64 178.172 -39.1409 -750.85 178.23 -39.1596 -429.19 178.214 -39.1159 -1064.33 178.217 -39.0818 -736.89 178.193 -38.9527 -126.33 178.22 -38.9882 -582.26 177.669 -39.4505 -99.43 177.644 -39.495 -118.78 177.816 -39.4743 -97.56 177.835 -39.4296 -69.66 177.938 -39.4755 -130.36 177.986 -39.5208 -255.23 179.552 -40.2024 -2953.72 179.642 -39.9773 -3169.91 177.61 -40.2283 -1881 177.825 -40.1399 -1658.58 177.338 -39.6193 -121.22 177.378 -39.6805 -150.08 177.385 -39.5702 -115.62 177.427 -39.6219 -143.39 177.456 -39.5719 -132.39 177.508 -39.5356 -124.22 174.346 -40.877 -97.21 174.376 -40.918 -108.98 174.415 -40.9951 -140.13 174.481 -40.9904 -172.91 174.529 -41.1007 -237.57 174.518 -40.9455 -177.6 174.556 -40.9012 -162.87 174.51 -41.1437 -291.09 174.552 -41.1759 -285.93 174.485 -41.2957 -219.93 174.347 -41.409 -100.94 174.409 -41.3837 -110.18 174.463 -41.473 -144.72 174.525 -41.5131 -221.7 174.47 -41.2384 -266.57 174.492 -41.1885 -308.7 174.424 -41.0834 -96.66 174.401 -41.1765 -69.1 174.43 -41.1999 -192.22 174.405 -41.1483 -91.02 174.448 -41.1571 -123.54 174.397 -41.2335 -152.81 174.411 -41.2766 -148.16 174.31 -41.2794 -93.75 174.352 -41.3009 -102.06 174.289 -41.4235 -72.7 174.299 -41.3852 -93.66 174.378 -41.0731 -97.89 174.395 -41.0391 -98.82 174.585 -40.9481 -178.38 174.62 -40.9059 -155.49 174.702 -41.1235 -132.23 174.7 -41.1536 -81.8 174.568 -41.1336 -282.05 174.536 -41.2184 -260.4 174.578 -41.2477 -111.77 174.607 -41.1669 -244.17 174.847 -40.8708 -109.3 174.844 -40.9198 -88.63 174.927 -40.9251 -36.99 174.939 -40.8929 -26.96 174.823 -40.8424 -121.37 174.259 -40.5935 -123.64 174.294 -40.5362 -125.46 174.471 -41.4159 -118.4 174.535 -41.4507 -303.89 174.477 -41.3569 -154.12 174.773 -41.3769 -46.61 174.732 -41.3872 -68.13 174.436 -41.6066 -79.91 174.514 -41.5816 -123.81 174.585 -41.6214 -158.91 174.665 -41.6596 -145.23 174.802 -41.5235 -117.04 174.778 -41.4036 -67.35 174.776 -41.3606 -25.91 174.796 -41.3632 -25.81 174.805 -41.383 -43.64 174.824 -41.4094 -55.87 174.823 -41.3636 -24.57 174.84 -41.385 -29.89 174.885 -41.2578 -14.59 174.827 -41.2611 -15.16 174.856 -41.2564 -19.05 174.992 -41.4334 -371.08 175.166 -41.4636 -20.39 174.621 -41.9305 -738.21 174.869 -41.809 -415.62 174.852 -41.7293 -390.54 174.958 -41.7563 -1212.56 174.755 -41.6967 -107.69 174.683 -41.4653 -152.29 174.737 -41.4293 -219.28 174.763 -41.4734 -197 174.798 -41.4379 -89.56 174.858 -41.4376 -61.94 174.987 -41.4718 -382 174.928 -41.4997 -590.79 174.668 -41.593 -489.38 174.648 -42.0946 -1658.8 174.503 -41.9492 -180.02 174.575 -42.0178 -941.1 174.866 -42.6067 -1682.38 174.893 -42.391 -2452.67 175.053 -42.3973 -2395.31 174.465 -42.27 -1466.82 174.571 -42.1834 -1783.72 174.391 -42.587 -1985.05 174.55 -42.6352 -1787.32 174.502 -42.39 -2039.01 174.528 -42.5118 -2185.24 174.423 -42.1532 -1053.99 174.532 -42.0981 -1105.31 175.155 -42.1716 -2650.7 173.457 -43.3434 -152.47 173.545 -43.2879 -179.65 173.557 -42.8404 -97 173.658 -42.8442 -223.9 173.711 -42.4802 -206.84 173.635 -42.6319 -345.17 173.672 -42.6953 -226.75 173.567 -42.6335 -250.28 173.581 -42.6887 -174.89 174.003 -42.2079 -74.74 174.112 -42.1879 -97 174.204 -42.2137 -488.41 173.9 -42.2672 -86.58 173.994 -42.2599 -102.21 174.052 -42.2198 -102.17 174.107 -42.2701 -450.68 173.862 -42.3208 -53.97 173.94 -42.3108 -169.11 173.886 -42.4516 -960.03 174.637 -42.3018 -1947 174.257 -42.6563 -1876.61 174.263 -42.8838 -1308.45 174.276 -43.0078 -893.29 173.976 -42.414 -851.43 174.064 -42.425 -1347.24 173.989 -42.4812 -1018.51 173.787 -42.4536 -249.39 173.802 -42.5271 -1043.59 173.707 -42.634 -713.12 173.77 -42.6727 -1286.65 173.865 -42.7223 -1552.45 173.706 -43.0224 -432.18 174.724 -42.1864 -2014.99 174.812 -42.2871 -2338.56 174.789 -42.081 -1953.54 174.899 -42.1759 -2308.58 174.286 -42.1494 -241.3 174.347 -42.0852 -295.03 174.564 -42.8997 -1002.84 174.75 -42.9416 -779.86 174.164 -43.24 -587.91 174.286 -43.2031 -595.78 174.961 -42.4967 -2116.1 175.591 -42.3115 -2632.4 175.6 -42.4495 -2071.24 176.2 -42.8517 -596.75 177.017 -42.0662 -2695.47 175.447 -42.2464 -2654.74 175.727 -42.2274 -2719.36 176.335 -42.1267 -2648.82 176.337 -42.2463 -2671.2 176.193 -42.1745 -2665.76 176.183 -42.3015 -2689.6 176.861 -42.2159 -2453.45 176.723 -41.8989 -2783.6 176.762 -42.0582 -2709.71 175.001 -41.6145 -643.35 174.907 -41.6039 -713.22 174.935 -41.674 -1102.36 174.82 -41.5861 -543.01 174.838 -41.6514 -523.23 174.74 -41.5611 -237.1 174.75 -41.6246 -363.65 175.339 -41.6194 -73.81 175.32 -41.7617 -1031.36 175.29 -41.8165 -1481.65 175.365 -41.8102 -1245.41 175.553 -41.5503 -143.48 174.836 -41.9854 -1381.2 174.929 -42.0572 -2149.43 176.065 -41.259 -106.35 176.345 -42.3811 -2396.23 175.304 -42.8462 -736.09 175.447 -42.7888 -857.64 175.747 -42.808 -766.77 175.883 -42.7467 -853.56 175.29 -42.7167 -1131.73 175.442 -42.653 -1244.34 175.149 -42.2854 -2511.69 175.285 -42.2142 -2610.69 174.689 -42.5586 -1914.38 174.803 -42.4777 -2176.29 175.146 -42.6468 -1494.23 175.293 -42.5828 -1687.41 175.021 -42.5917 -1605.87 175.139 -42.5085 -2006.86 176.503 -42.3132 -2566.91 177.009 -41.5477 -2803.64 176.001 -41.2127 -7.87 175.58 -41.5208 -80.75 176.069 -41.2217 -50.33 176.025 -41.2132 -17.51 176.119 -41.209 -77.64 176.161 -41.1411 -56.98 176.165 -41.1868 -101.8 176.035 -41.3275 -176.56 176.163 -41.232 -216.37 176.571 -41.1416 -1194.44 176.668 -41.0718 -1025.91 176.091 -41.2943 -169.85 176.095 -41.3492 -575.73 176.172 -41.386 -987.43 176.201 -40.963 -25.92 176.24 -40.9882 -64.83 176.266 -40.8944 -29.69 176.299 -40.7933 -23.22 176.333 -40.7767 -49.22 176.316 -40.75 -21.78 176.363 -40.7366 -48.71 176.331 -40.8181 -55.75 176.109 -41.248 -119.37 175.978 -41.315 -112.39 176.292 -41.0325 -122.09 176.698 -40.8888 -516.11 177.117 -41.2435 -2055.14 176.376 -40.7711 -71.76 176.625 -40.7228 -266.77 176.63 -40.6529 -164.85 176.702 -40.6143 -157.42 176.301 -40.8587 -49.92 176.634 -40.9836 -651.62 176.295 -40.9283 -77.69 176.296 -40.9698 -96.3 176.343 -40.9409 -109.93 176.363 -40.7961 -69.21 176.416 -40.6452 -20.99 176.442 -40.6731 -60.36 176.911 -40.2048 -83.63 176.976 -40.2025 -130.82 177.274 -40.1748 -767.18 176.457 -41.0107 -295.32 176.469 -41.1013 -1054.63 176.605 -40.8494 -299.04 176.582 -40.9173 -314.05 177.027 -41.398 -2413.87 177.238 -41.3598 -2648.51 177.455 -41.3511 -2853.02 177.535 -39.7287 -306.96 177.543 -39.8147 -470.93 177.102 -39.7028 -45.38 177.145 -39.7296 -77.89 177.249 -39.7911 -153.74 177.316 -39.7415 -161.56 177.106 -39.8388 -90.53 176.723 -40.2654 -20.84 176.764 -40.2588 -27.41 176.79 -40.2932 -64.9 176.853 -40.2804 -122.17 176.734 -40.4887 -86.12 176.723 -40.398 -53.05 176.764 -40.3346 -63.8 176.817 -40.3338 -150.77 176.504 -40.6512 -79.07 176.69 -40.555 -98.07 176.757 -40.4234 -83.5 176.801 -40.4507 -161.01 176.77 -40.374 -81.42 176.83 -40.3957 -389.92 176.9 -40.3338 -423.15 176.916 -40.2564 -167.7 176.987 -40.2861 -202.87 176.983 -40.1388 -98.74 177.048 -40.153 -186.04 177.355 -39.9885 -430.15 177.427 -39.836 -347.9 177.467 -39.9099 -470.08 177.424 -40.2078 -1526.64 177.518 -40.1217 -1335.14 177.447 -40.3289 -1739.03 177.598 -40.4006 -1785.76 177.573 -40.695 -2146.54 176.42 -40.7502 -91.25 176.408 -40.7097 -53.77 176.446 -40.7137 -85.54 176.492 -40.699 -105.01 176.557 -40.6819 -141.97 176.657 -40.5136 -51.49 176.784 -40.5657 -163.64 176.826 -40.4967 -174.27 176.774 -40.6498 -267.6 176.852 -40.7075 -475.54 176.855 -40.4488 -321.38 177.084 -40.3219 -819.82 177.096 -40.417 -1156.65 176.93 -40.0208 -24.81 176.972 -40.0453 -55.64 177.029 -39.9657 -84.6 177.048 -39.924 -90.4 177.18 -39.7747 -101.58 177.174 -39.8305 -130.4 177.134 -39.6856 -62.23 177.184 -39.6795 -82.29 177.322 -40.4005 -1481.21 177.342 -40.5153 -1553.87 177.352 -40.6545 -1906.74 177.442 -40.4372 -1565.31 177.509 -40.5394 -1813.86 177.09 -39.964 -141.53 177.115 -39.9119 -142.7 177.129 -39.8696 -125.51 177.186 -39.8909 -180.5 177.169 -39.9526 -254.65 177.137 -40.0153 -235.53 177.229 -40.0036 -532.83 177.259 -39.9299 -450.49 177.352 -39.8886 -415.88 177.189 -40.0591 -525.57 177.273 -40.0722 -473.83 176.575 -40.5406 -39.36 176.606 -40.5194 -33.41 176.571 -40.5789 -65.25 176.567 -40.6277 -95.47 176.622 -40.5509 -63.35 176.63 -40.5971 -105.98 176.404 -40.7937 -100.63 176.475 -40.7866 -153.91 176.472 -40.7373 -122.53 176.53 -40.7368 -171.53 177.699 -41.3673 -2924.62 177.149 -41.6476 -2871.58 176.795 -41.0871 -1425.57 176.955 -41.6767 -2861.69 177.03 -41.8011 -2864.65 177.071 -42.2311 -2690.59 177.141 -42.3594 -2613.79 177.386 -42.0975 -2800.46 178.228 -41.7724 -2822.68 179.338 -42.0145 -2642.78 179.555 -41.929 -2750.07 177.927 -41.735 -2846.09 178.033 -41.933 -2760.08 178.129 -41.3016 -2978.48 178.375 -41.2021 -3115.26 177.396 -41.6807 -2934.32 177.551 -41.5253 -2959.46 177.229 -41.8224 -2860.37 177.47 -41.8959 -3030.64 178.603 -41.1267 -3118.76 178.651 -40.9508 -3139.9 178.036 -40.426 -2340.78 178.05 -40.6343 -2417.3 180.062 -40.2573 -2679.88 180.154 -40.4397 -2611.27 180.065 -39.707 -3425.04 180.254 -39.8724 -3350.07 180.375 -39.6636 -3458.92 180.508 -39.8305 -3391.92 179.375 -41.5557 -2756.26 179.48 -41.3397 -2781.89 179.704 -40.6369 -2769.93 179.973 -40.5903 -2599.39 178.829 -41.073 -3087.84 178.532 -40.5801 -3084.63 178.549 -40.4005 -3094.09 179.026 -41.5478 -2777.85 179.152 -41.7064 -2737.72 181.605 -40.4099 -3580.13 181.834 -40.4057 -3548.94 180.589 -40.2586 -3122.11 180.797 -40.1441 -3333.38 178.081 -40.8413 -2698.93 178.291 -40.9025 -3034.23 178.761 -41.2131 -3005.76 178.829 -41.3749 -2877.8 178.938 -41.2085 -2881.3 179.092 -41.0713 -2990.9 178.59 -41.4556 -2926.01 178.724 -41.5902 -2765.11 177.664 -42.8315 -548.32 177.88 -42.8348 -538.96 177.998 -42.2103 -2383.18 178.019 -42.3698 -2338.61 180.053 -42.5692 -1897.89 180.119 -42.7467 -1091.19 179.708 -42.8767 -877.49 179.783 -43.0123 -592.85 178.668 -42.8575 -918.69 178.843 -42.8702 -899.89 180.361 -42.7728 -996.21 180.593 -42.7931 -806.73 179.435 -42.6465 -1505.17 179.621 -42.726 -1175.14 182.633 -40.3589 -3646.19 182.673 -40.5707 -3841.53 178.287 -40.3149 -2737.3 178.299 -40.512 -2891.16 180.535 -41.2944 -2749.3 182.436 -42.0284 -2444.74 182.647 -42.0805 -2715.61 180.376 -42.0821 -2519.35 180.589 -42.0897 -2542.12 180.951 -41.0823 -2812.04 181.149 -41.1945 -2672.89 177.085 -41.9212 -2827.12 177.232 -41.986 -3262.13 180.198 -42.4654 -2773.62 180.272 -42.6051 -1684.8 181.731 -42.1646 -2541.74 181.968 -42.0733 -2458.81 181.745 -41.9359 -2474.59 181.968 -41.8826 -2553.42 184.238 -39.6891 -4497.76 184.541 -39.9057 -4346.53 184.934 -44.8157 -2606.36 185.187 -45.0491 -3301.37 180.325 -46.8979 -2643.73 180.607 -47.0195 -2616.25 180.773 -46.5808 -3618.6 180.893 -46.878 -3454 181.056 -46.1689 -3974.63 181.426 -46.1748 -4105.64 181.745 -46.029 -4272.19 181.863 -46.274 -4404.84 180.88 -45.8228 -3334.31 180.284 -45.6008 -2629.96 180.558 -45.8484 -3113.95 180.072 -46.4922 -3230.41 178.794 -45.7006 -2763.05 178.984 -45.4843 -2592.82 178.867 -46.1364 -3185.7 177.288 -46.1329 -2507.36 177.717 -46.1857 -2767.74 174.583 -46.6767 -1785 174.789 -46.7908 -1713.76 175.37 -46.3658 -1914.88 175.682 -46.3592 -2031.83 177.568 -46.6095 -2731.95 177.851 -46.7104 -2826.13 180.114 -46.2105 -3306.49 180.376 -46.6536 -3199.47 180.588 -46.806 -3019.59 173.807 -46.4827 -1670.96 173.93 -46.6692 -1650.57 173.296 -45.614 -1489.05 173.411 -45.8508 -1517.79 176.678 -46.1437 -2265.41 174.29 -45.6857 -1501.32 174.611 -45.6901 -1454.65 174.013 -46.3063 -1812.39 172.337 -46.7426 -1477.98 172.627 -46.6969 -1501.88 173.086 -46.9694 -1429.21 173.333 -47.0284 -1406.47 172.021 -46.7933 -1404.6 172.13 -46.5878 -1362.18 172.997 -45.5644 -1521.44 173.08 -45.7733 -1578.22 172.569 -47.4604 -1387.28 172.527 -47.274 -1396.28 172.79 -47.0992 -1420.93 177.674 -45.2341 -2506.38 177.998 -45.2142 -2445.23 179.384 -46.2649 -3241.68 179.463 -45.7075 -2931.36 179.594 -45.5445 -2542.22 179.196 -46.1013 -3261.65 179.095 -46.3301 -3024.57 179.501 -46.0821 -3232.03 179.818 -46.021 -3210.02 179.314 -45.8963 -3119.86 179.586 -45.883 -3261.24 176.947 -46.2082 -2291.71 177.085 -46.3954 -2440.39 172.435 -45.4151 -1394.7 172.942 -46.1155 -1567.75 172.751 -46.2893 -1619.42 172.174 -45.0357 -972.51 172.526 -44.9458 -1264.57 172.652 -45.1005 -1396.4 172.429 -45.2255 -1403.29 172.672 -45.3032 -1449.8 173.323 -45.2695 -1339.97 173.467 -45.4412 -1381.61 172.222 -45.32 -1356.48 171.9 -45.2414 -1063.02 172 -45.3748 -1264.83 173.5 -44.4976 -584.77 173.831 -44.5511 -775.36 173.947 -44.6822 -915.87 173.727 -45.0413 -1242.25 174.718 -44.83 -747.32 171.473 -45.4935 -942.85 171.65 -45.4495 -1032.41 171.18 -45.6529 -620.18 170.609 -46.3552 -728.38 170.26 -46.4883 -208.25 171.311 -45.3702 -129.09 171.438 -45.1511 -106.02 171.458 -45.0853 -96.15 171.408 -44.9522 -51.49 171.458 -44.9755 -65.53 171.518 -44.9905 -77.41 171.319 -44.9437 -32.48 171.352 -44.971 -44.66 171.502 -44.952 -67.84 171.556 -44.9459 -78.05 172.066 -45.2451 -1319.9 172.213 -45.169 -1352.16 172.312 -44.9404 -932.52 172.384 -45.0695 -1325.65 170.52 -46.2135 -92.41 170.618 -46.2515 -181.78 171.591 -45.8694 -1271.55 171.71 -46.0437 -1360.18 171.466 -45.7263 -1094.01 171.522 -46.2273 -1241.32 171.218 -45.9586 -1003.02 171.258 -45.4432 -125.38 171.33 -45.5137 -486.38 171.406 -45.5977 -912.03 171.376 -45.4263 -217.72 171.594 -44.9944 -98.93 172.144 -44.9238 -466.57 172.241 -44.8394 -338.48 172.019 -44.9898 -617.78 171.671 -45.1367 -201.06 171.73 -45.2319 -804.24 171.83 -44.956 -173.51 171.87 -45.026 -477.9 171.74 -45.0563 -435.09 171.815 -45.1348 -728.03 171.686 -44.9922 -115.44 171.774 -44.9914 -174.74 171.474 -45.2828 -197 171.616 -45.3178 -961.62 171.489 -45.1988 -197 171.585 -45.2155 -501.27 171.315 -45.1259 -55.91 171.379 -45.1094 -77.97 171.152 -45.584 -188.01 171.264 -45.5939 -546.75 171.16 -45.4735 -90.56 171.213 -45.5239 -187.98 169.907 -47.5813 -884.01 169.98 -47.7411 -989.13 171.065 -47.3062 -1280.28 171.242 -47.1727 -1292.25 172.271 -46.3988 -1474.93 172.43 -46.547 -1424.61 172.974 -46.4387 -1617.69 173.227 -46.3576 -1632.32 173.707 -46.2656 -1760.67 173.904 -46.0808 -1637.68 169.663 -46.9921 -460.67 169.763 -47.0849 -631.65 169.857 -46.8505 -444.9 169.986 -46.9423 -720.95 170.435 -46.2404 -85.32 170.689 -46.12 -95.5 169.886 -46.606 -132.79 170.564 -46.5698 -812.43 170.63 -46.7161 -923.14 170.782 -46.5858 -989.56 170.168 -46.5599 -169.94 170.202 -46.6553 -442 169.927 -46.7444 -193.7 170.034 -46.8237 -672.45 169.964 -46.6559 -164.41 170.072 -46.713 -366.58 169.812 -46.5134 -61.42 169.827 -46.5559 -101.54 169.651 -46.6018 -66.57 169.708 -46.6102 -99.01 169.977 -46.5829 -133.78 170.073 -46.6154 -166.64 170.217 -46.3753 -82.2 170.951 -46.9355 -1212.57 171.205 -47.0005 -1285.54 170.997 -47.1253 -1227.58 170.303 -46.9434 -968.63 170.462 -46.8357 -983.94 170.138 -46.909 -834.86 170.139 -47.0425 -866.68 169.516 -46.6026 -33.3 169.639 -46.6955 -112.34 169.673 -46.7524 -138.46 169.52 -46.6398 -55.12 169.559 -46.6198 -42.6 169.669 -46.5625 -39.82 169.745 -46.5648 -82.5 169.761 -46.5253 -49.64 169.821 -46.4816 -44.59 169.867 -46.4584 -44.34 169.548 -47.032 -258.17 169.619 -47.0952 -448.1 169.482 -47.2695 -409.22 169.549 -47.1812 -371.31 169.735 -46.9081 -324.64 169.822 -46.9732 -596.14 169.601 -47.257 -588.43 169.713 -47.2951 -631.07 169.997 -47.2916 -844.2 170.163 -47.2887 -945.15 170.214 -47.17 -979.4 170.347 -47.0944 -1037.59 169.704 -47.5473 -683.42 169.72 -47.716 -622.53 170.525 -47.3121 -1188.55 170.612 -47.4502 -1230.29 170.802 -46.1251 -154.56 171.076 -46.0185 -746.54 170.718 -46.1934 -292.86 170.398 -46.2989 -93.55 170.503 -46.2871 -158.84 170.455 -46.3636 -196.81 170.275 -46.4062 -113.59 170.374 -46.4335 -258.65 170.878 -46.4457 -934.06 171.077 -46.3644 -1009.08 170.74 -46.2847 -495.84 170.891 -46.317 -901.45 170.284 -46.5797 -685.88 170.397 -46.5311 -518.04 170.277 -46.3534 -88.11 170.346 -46.3585 -118.67 170.481 -46.057 -55.11 170.534 -46.0806 -66.48 170.76 -45.88 -39.69 170.819 -45.9626 -132.74 170.661 -46.064 -77.39 170.742 -46.0684 -95.09 170.684 -46.4642 -875.55 170.761 -46.3733 -713.94 170.891 -45.9744 -197 170.744 -45.6097 -15.17 170.757 -45.5597 -7.51 170.791 -45.5439 -11.08 170.794 -45.8083 -24.48 170.831 -45.8138 -58.08 170.753 -45.5825 -16.97 170.784 -45.5729 -23.8 170.984 -45.9565 -440.74 170.779 -45.5969 -27.11 170.803 -45.6401 -27.26 171.002 -45.6153 -173.68 170.93 -45.7679 -91.97 170.925 -45.6852 -59.17 170.968 -45.1537 -4.61 171.013 -45.174 -12.08 170.901 -45.2574 -10.48 170.952 -45.2402 -17.75 170.85 -45.3376 -2.38 170.886 -45.3323 -12.81 170.81 -45.5186 -7 170.817 -45.5679 -24.36 170.849 -45.4866 -15.93 170.889 -45.4894 -27.48 170.904 -45.3612 -18.12 170.919 -45.398 -22.69 170.894 -45.4572 -24.91 170.929 -45.4383 -27.02 170.936 -45.3281 -21.53 170.964 -45.3673 -26.89 170.943 -45.1944 -7.29 171.154 -45.3653 -65.66 171.197 -45.3355 -64.97 171.4 -45.3532 -233.99 171.497 -45.3868 -672.94 171.059 -45.571 -80.5 170.93 -45.4702 -30.48 170.953 -45.5036 -37.41 171.032 -45.5102 -47 171.051 -45.4671 -47 171.092 -45.4845 -65.5 171.116 -45.5253 -84.7 171.189 -45.7256 -637.71 171.301 -45.6794 -958.49 171.413 -46.593 -1209.12 171.506 -46.7549 -1293.8 171.237 -46.2051 -1088.66 171.329 -46.4022 -1177.95 171.279 -45.7773 -866.15 171.356 -45.8736 -1039.5 171.889 -45.6621 -1366.46 172.1 -45.6664 -1503.83 173.098 -45.2833 -1436.85 173.151 -45.1411 -1331.47 171.927 -44.8806 -148.86 171.918 -44.9413 -179.05 173.326 -44.5127 -568.86 172.818 -44.4783 -169.66 172.91 -44.5364 -398.6 172.933 -44.4447 -189.34 173.049 -44.4087 -197 172.692 -44.3237 -92.41 172.668 -44.3798 -127.31 173.035 -44.5003 -428.04 173.164 -44.4582 -405.54 173.399 -44.2614 -286.25 173.435 -44.403 -533.98 172.945 -45.033 -1289.82 172.429 -44.7067 -312.17 172.64 -44.5783 -182.78 172.702 -44.5005 -233.81 172.778 -44.5678 -316.23 172.367 -44.5593 -139.3 172.441 -44.5509 -148.85 172.332 -44.6055 -125.58 172.328 -44.6659 -132.85 172.429 -45.648 -1536.87 172.71 -45.5047 -1465.17 171.969 -45.535 -1371.88 172.189 -45.4903 -1370.99 171.775 -45.5663 -1280.15 171.836 -45.4541 -1223.85 173.592 -43.22 -262.97 173.665 -43.2681 -587.97 173.749 -43.3287 -124.56 173.826 -43.4009 -363.66 173.632 -43.3473 -124.37 173.705 -43.4105 -91.57 174.268 -44.0386 -550.53 174.397 -43.989 -555.91 173.87 -44.3537 -666.25 173.962 -44.2726 -608.2 173.909 -44.4506 -775.15 174.024 -44.5223 -870.37 174.231 -44.4685 -743.64 173.505 -44.257 -416.76 173.635 -44.2491 -515.94 173.683 -44.6619 -881.8 173.718 -44.8219 -1078.08 172.549 -44.7349 -553.33 172.636 -44.812 -987.76 173.687 -44.0686 -229.11 173.556 -43.9919 -139.52 173.595 -44.0427 -174.02 173.488 -44.6046 -707.81 173.484 -44.7506 -886.06 173.347 -44.3262 -360.78 173.448 -44.3169 -462.91 173.553 -44.3319 -565.37 173.553 -44.1832 -361.11 173.581 -44.105 -202.85 173.683 -44.1589 -419.03 173.301 -44.258 -172.48 173.355 -44.2114 -188.8 173.294 -44.6582 -792.43 173.009 -44.5879 -521.64 173.148 -44.5695 -506.22 173.992 -44.8768 -1028.77 174.058 -45.0691 -1199.2 173.898 -45.2426 -1322.01 174.145 -45.2276 -1260.89 174.451 -45.4886 -1314.78 174.741 -45.4831 -1186.84 174.366 -45.292 -1199.02 174.594 -45.3354 -1130.14 173.017 -46.2733 -1719.09 173.189 -46.1656 -1674.09 172.776 -45.711 -1418.54 177.244 -45.8284 -2374.74 176.575 -45.6741 -1922.19 176.905 -45.7338 -2147.71 176.398 -45.8441 -1947.71 176.646 -45.9079 -2141 174.848 -46.2434 -1752.77 175.026 -46.3973 -1880.22 171.331 -47.6331 -1333.3 171.423 -47.4799 -1339.83 176.167 -44.8695 -1208.78 176.212 -44.7144 -1099.03 176.958 -44.3573 -1037.94 177.066 -44.522 -1185.77 175.444 -44.578 -783.74 175.683 -44.5859 -817.97 175.247 -44.639 -761.31 175.36 -44.7507 -886.24 175.604 -44.73 -933.56 175.798 -44.6975 -969.38 179.059 -45.0737 -2681.1 179.385 -45.1243 -2449.27 179.175 -45.3015 -2429.59 179.31 -45.5114 -2545.63 179.501 -45.347 -2352.08 179.702 -45.1848 -2567.89 178.969 -44.8563 -2140.52 179.277 -44.8996 -2477.75 177.822 -44.7906 -1790.9 178.115 -44.964 -2123.18 180.609 -45.378 -2505.66 180.745 -45.6201 -2760.53 182.31 -45.7822 -4334.18 181.814 -47.8676 -4762.24 181.947 -48.0814 -4776.49 183.636 -47.5639 -5071.6 184.076 -47.3056 -5001.08 181.874 -45.337 -3144.78 182.073 -45.5318 -4137.3 181.255 -47.0121 -3758.06 182.241 -48.2233 -4778.56 182.606 -48.4422 -4857.17 181.823 -48.2982 -4933.61 182.107 -48.5198 -4717.81 181.209 -48.7185 -3121.74 181.447 -48.8854 -4057.83 182.004 -49.2953 -4303.97 182.103 -49.5423 -3979.78 180.563 -49.499 -2970.92 180.11 -49.52 -2549.32 180.381 -49.858 -3897.9 179.494 -49.6175 -1923.18 179.847 -49.7388 -2813.97 179.244 -49.4791 -1483.22 179.175 -49.685 -1770.38 178.966 -50.5931 -4549.62 179.523 -50.6251 -4451.12 180.42 -50.2906 -4561.04 180.93 -50.114 -4301.35 181.622 -51.5536 -5073.13 182.118 -51.7241 -5207.69 182.753 -51.251 -4957.63 183.326 -51.0966 -4875.77 182.917 -50.5121 -2899.4 183.074 -50.1702 -1609.74 183.204 -49.0617 -4069.71 183.635 -49.0733 -5043.13 181.962 -50.3691 -3969.99 182.333 -50.6023 -3920.66 178.377 -50.6834 -4647.46 178.748 -50.9905 -4759.9 183.89 -48.4765 -5179.82 184.378 -48.6437 -5156.18 174.309 -54.3936 -5115.02 175.002 -54.4333 -5208.53 176.854 -51.253 -4767.27 177.303 -51.3947 -4973.59 177.685 -52.3107 -4935.5 177.922 -51.9729 -4967.51 177.022 -53.0129 -4696.64 177.69 -53.0403 -4908.46 175.309 -55.3862 -5111.33 175.944 -55.6113 -5051.8 172.112 -54.2811 -4162.69 172.296 -54.5372 -5041.08 171.853 -54.7612 -5003.89 172.224 -54.8649 -5361.36 164.634 -47.5934 -5139.19 165.792 -48.3069 -2971.32 165.782 -48.105 -2918.1 166.797 -47.4567 -814.65 166.94 -47.3919 -458.74 166.789 -47.2001 -1108.28 166.792 -47.3287 -944.92 166.296 -46.3039 -300.45 166.409 -46.4251 -495.48 166.178 -47.0959 -2049.46 165.554 -46.5971 -1182.95 166.657 -46.5148 -422.54 166.919 -44.8219 -2389.34 166.609 -45.1162 -3340.16 166.375 -45.8686 -91.1 166.374 -45.7918 -197 166.402 -45.7583 -182.43 166.247 -45.7291 -1502.66 166.309 -45.7807 -837.37 166.505 -46.1102 -58.08 166.541 -46.0856 -76.58 166.469 -46.1497 -98.79 166.522 -46.1905 -119.37 166.509 -46.0156 -14.26 166.506 -46.0353 -8.86 166.393 -45.9122 -70.01 166.391 -45.9705 -81.81 166.401 -46.0295 -83.37 166.46 -46.0382 -14.53 166.276 -45.8433 -667.54 166.39 -45.5509 -3032.44 166.55 -45.5733 -1119.38 166.737 -45.2413 -2035.47 166.804 -45.2605 -478.73 166.864 -45.2089 -579.35 166.907 -45.1157 -1602.57 166.932 -45.132 -797.78 166.945 -45.0657 -1440.7 166.963 -45.0361 -1330.27 167.044 -45.0183 -677.46 166.916 -45.0471 -1406.71 167.074 -44.99 -364.78 167.085 -45.0098 -118.48 167.097 -44.9702 -473.42 167.129 -44.9632 -344.03 167.068 -44.9643 -842.14 167.003 -45.0092 -1062.77 167.038 -44.9858 -771.25 167.055 -44.8302 -1983.41 166.931 -44.8799 -2255.33 166.986 -44.8456 -2081.2 166.963 -44.995 -979.62 167.185 -44.8788 -478.37 167.319 -44.8042 -577.08 167.335 -44.7767 -1111.69 167.357 -44.7644 -1188.16 167.371 -44.7371 -1414.57 167.438 -44.76 -104.23 167.461 -44.7387 -280.42 167.413 -44.7484 -608.56 167.417 -44.7158 -1137.95 167.467 -44.7019 -945.15 167.616 -44.587 -281.42 167.804 -44.4372 -341.15 167.826 -44.4652 -44.67 167.735 -44.4459 -623.12 167.89 -44.3738 -76.76 168.041 -44.2321 -77.87 168.055 -44.147 -600.57 167.909 -44.1371 -2125.47 168.054 -44.1996 -173.03 168.1 -44.212 -33.98 168.121 -44.1388 -131.4 168.184 -44.1319 -42.01 168.313 -44.0058 -107.59 168.227 -44.09 -114.83 168.278 -44.0491 -193.32 168.203 -44.0349 -767 168.329 -43.9406 -420.41 168.304 -43.8524 -1627.69 166.294 -45.6513 -2153 166.997 -44.7812 -2432.98 167.058 -44.7232 -2503.2 168.395 -43.152 -1067.14 167.851 -42.8119 -1300.36 168.031 -42.8263 -1238.12 168.405 -43.8608 -1121.76 168.556 -43.8829 -368.93 168.599 -43.9016 -175.33 168.612 -43.6544 -1079.7 168.953 -43.5655 -557.37 169.154 -43.5934 -287.92 169.202 -43.6625 -192.42 169.055 -43.5258 -737.52 169.16 -43.4913 -368.38 169.486 -43.3037 -420.21 167.266 -43.1052 -2451.57 167.525 -43.0252 -1574.99 166.523 -43.9885 -3774.02 165.942 -43.5771 -4164.07 166.242 -43.6332 -3991.11 167.374 -42.1321 -2498.85 167.617 -42.0965 -2338.31 166.578 -42.218 -3823.31 166.867 -42.075 -3560.43 166.582 -41.9674 -3785.93 166.8 -41.7972 -3115.11 169.856 -40.7017 -836.99 170.077 -40.7 -802.59 169.769 -39.911 -766.92 169.982 -39.9992 -835.45 169.983 -40.5604 -826.91 169.62 -40.2218 -845.22 169.672 -40.3856 -872.17 176.057 -42.9325 -538.24 176.081 -43.0641 -414.69 176.527 -42.7739 -632.11 177.692 -42.597 -1655.95 177.842 -42.4797 -2283.55 173.356 -46.0532 -1683.18 173.598 -46.0526 -1559.62 173.777 -45.4433 -1450.75 172.448 -46.2391 -1505.47 172.523 -46.3908 -1531.1 172.553 -46.9015 -1463.25 172.837 -46.8483 -1483.44 169.485 -47.794 -662.58 169.635 -47.8664 -678.51 171.118 -48.1535 -1217.35 171.208 -48.2848 -1123.09 169.6 -48.9042 -760.09 169.802 -48.8527 -800.05 168.984 -48.6536 -716.59 169.104 -48.5573 -708.39 168.346 -49.295 -684.28 168.427 -49.395 -697.3 172.932 -43.8653 -6.69 172.826 -43.5658 -11.88 172.851 -43.5647 -14.6 172.781 -43.5576 -6.53 172.805 -43.5575 -10.83 172.826 -43.5394 -13.49 172.868 -43.5341 -15.61 174.854 -41.0813 -6.23 174.846 -41.0744 -16.44 174.845 -41.084 -16.44 174.859 -41.0886 -6.23 174.841 -41.1211 -3.13 174.833 -41.0786 -9.84 174.724 -36.4658 0.19 174.711 -36.4356 3 174.73 -36.4955 1.13 174.721 -36.4894 -4.49 174.725 -36.5331 -3.96 174.713 -36.4911 0.84 174.715 -36.4515 1.96 174.719 -36.458 2.94 174.779 -36.4973 -16.05 175.983 -37.5457 0.84 176.085 -37.6414 2.49 175.968 -37.5292 2.15 175.986 -37.5233 1.47 176.164 -37.6505 1.17 176.118 -37.6474 -4.38 176.008 -37.5511 2.55 176.175 -37.7005 -15.14 176.063 -37.6387 -0.47 176.103 -37.6516 1.41 176.134 -37.6464 -3.64 176.215 -37.6995 -12.28 175.745 -36.8238 -6.05 175.691 -36.8538 2.2 175.721 -36.8199 -1.33 175.735 -36.8129 -6.18 177.146 -37.9976 1 177.135 -38 1.98 177.074 -37.9888 3 177.085 -37.9897 2.94 177.096 -37.9925 3 177.129 -38.0115 2.84 174.683 -36.8563 -1.09 174.681 -36.8361 -2.16 174.798 -36.8423 -6.07 174.661 -36.7829 -19.54 174.658 -36.7737 -31.42 174.67 -36.8492 0.3 174.656 -36.8179 1.52 174.632 -36.7707 -31.42 174.081 -35.0785 -62.87 174.121 -35.1342 -31.51 174.114 -35.1067 -44.26 174.124 -35.014 -143.66 174.031 -35.0594 -76.16 174.305 -35.1681 -49.01 174.195 -35.2422 -3.5 174.186 -35.2409 -4.42 174.218 -35.2369 -5.26 174.269 -35.2041 -32.45 174.182 -35.2573 -87.05 174.177 -35.2472 -1.09 174.224 -35.2206 -14.42 174.22 -35.2183 -16.28 174.213 -35.2199 -15.85 174.219 -35.2233 -13.35 174.21 -35.2315 -9.33 174.214 -35.2255 -12.63 174.228 -35.2397 -2.37 174.237 -35.236 -4.17 174.201 -35.2358 -6.93 174.185 -35.2144 -19.26 174.17 -35.2569 -87.05 174.162 -35.1739 -47 174.257 -35.1947 -47 174.276 -35.1904 -47 174.167 -35.1898 -42.4 174.185 -35.1938 -34.86 174.165 -35.2275 -14.22 174.175 -35.2278 -11.94 174.202 -35.2104 -21.17 174.208 -35.2148 -18.69 174.235 -35.1929 -46.84 174.22 -35.1948 -35.1 174.227 -35.193 -41.91 174.23 -35.1984 -36.37 174.238 -35.2 -39.87 174.24 -35.2082 -31.2 174.22 -35.1989 -28.05 174.224 -35.1982 -31.67 174.219 -35.2018 -26.01 174.215 -35.1923 -36.3 174.221 -35.1884 -46.4 174.223 -35.1777 -50.4 174.209 -35.1935 -33.2 174.211 -35.186 -44.25 174.181 -35.1788 -47 174.193 -35.211 -20.94 174.23 -35.1862 -47 174.223 -35.2013 -26.14 174.227 -35.2027 -27.87 174.167 -35.2467 -1.54 174.171 -35.2408 -4.76 174.16 -35.2213 -20.2 174.146 -35.2323 -12.06 174.148 -35.2464 -2.99 174.185 -35.2061 -25.67 174.196 -35.2024 -25.67 174.111 -35.2737 -8.45 174.108 -35.2936 -0.4 174.111 -35.2988 -0.4 174.145 -35.165 -41.86 174.144 -35.1852 -36.12 174.124 -35.2126 -11.56 174.117 -35.328 -3.93 174.085 -35.2373 -3.48 174.066 -35.2271 -2.99 174.075 -35.2314 -3.48 174.069 -35.205 -2.99 174.076 -35.1987 -23.06 174.081 -35.1894 -54.17 174.074 -35.2204 -23.06 174.085 -35.2252 -23.06 174.101 -35.2795 -2.31 174.095 -35.2314 -3.48 174.105 -35.2409 -3.48 174.084 -35.2497 -3.48 174.093 -35.2429 -3.48 174.096 -35.254 -3.48 174.098 -35.2681 -2.31 174.123 -35.193 -23.29 174.141 -35.2043 -29.99 174.106 -35.1834 -3.96 174.109 -35.2005 -55.3 174.086 -35.2009 -23.06 174.095 -35.1925 -54.17 174.057 -35.2036 -2.99 174.063 -35.2103 -2.99 174.203 -35.2452 -1.63 174.21 -35.2415 -3.51 174.172 -35.2025 -31.38 174.176 -35.2123 -23.07 174.141 -35.2192 -20.1 174.151 -35.2234 -18.7 174.152 -35.2136 -25.44 174.157 -35.2012 -34.31 174.104 -35.2257 -23.06 174.115 -35.2277 -55.3 174.159 -35.2442 -3.13 174.158 -35.254 2.33 174.232 -35.233 -6.26 174.182 -35.2337 -8.52 174.246 -35.213 -27.3 174.257 -35.2095 -30.85 174.244 -35.2298 -7.95 174.244 -35.1934 -47 174.247 -35.2031 -38.2 174.346 -35.1565 -102.43 174.322 -35.1568 -54.73 173.486 -35.4039 -16.87 173.521 -35.3963 -28.38 173.549 -35.3724 -25.81 173.546 -35.3796 -25.81 173.556 -35.3502 -44.13 173.412 -35.4184 -0.1 173.431 -35.4121 -29.98 170.714 -45.7598 -5.17 170.733 -45.7531 -8.1 170.709 -45.742 -11.36 170.751 -45.7667 -17 170.632 -45.8294 -0.57 170.518 -45.8773 -23.87 170.653 -45.8049 -3.79 170.658 -45.8199 -3.06 170.637 -45.8033 -2.42 170.666 -45.7959 -1.99 170.678 -45.7937 -6.16 168.002 -43.6452 -1912.65 168.145 -43.6613 -1902.08 167.95 -43.4778 -1470.96 168.447 -43.4585 -1065.25 168.58 -43.43 -924.96 168.105 -43.3874 -1207.66 168.609 -43.552 -1359.01 168.722 -43.4918 -1104.51 168.587 -43.2912 -948.3 168.708 -43.3513 -930.13 170.008 -42.5047 -737.51 170.124 -42.4285 -815.75 169.533 -42.7856 -913.65 168.982 -43.0378 -967.8 170.035 -42.6287 -514.68 170.238 -42.48 -813.9 170.24 -42.3736 -714 170.147 -42.3001 -815.32 170.298 -42.2591 -687.56 169.465 -42.8967 -811.92 169.59 -42.896 -826.24 169.293 -43.0463 -841.39 169.415 -43.0057 -765.29 169.846 -42.7036 -687.54 169.916 -42.7761 -481.9 170.132 -42.5401 -802.61 170.223 -42.5771 -528.8 170.306 -42.4224 -612.03 170.388 -42.4328 -539.74 169.527 -42.9947 -694.62 170.343 -42.3578 -590.96 170.412 -42.2962 -526.7 170.344 -42.1249 -628.08 170.427 -42.2031 -523.06 169.177 -43.2576 -736.61 169.283 -43.2528 -720.85 170.011 -42.734 -339.38 170.105 -42.7025 -214.26 170.151 -42.6285 -345.98 170.189 -42.6904 -164.89 169.905 -42.8723 -425.84 169.995 -42.826 -281.57 170.422 -42.3675 -502.62 170.489 -42.4149 -400.08 170.538 -42.4956 -292.38 170.325 -42.4762 -564.75 170.316 -42.5504 -525.34 169.685 -43.0941 -324.96 170.519 -42.2617 -385.18 170.52 -42.1739 -404.23 170.479 -42.338 -429.53 169.639 -42.9961 -574.63 170.585 -42.4339 -255.5 170.65 -42.3773 -230.84 170.615 -42.1874 -262.76 170.704 -42.2293 -211.49 170.569 -42.1135 -343.17 170.667 -42.0904 -238.42 170.731 -42.3193 -214.66 170.788 -42.2492 -211.48 170.605 -42.4972 -270.44 170.67 -42.4696 -222.21 170.736 -42.4121 -201.65 170.809 -42.3743 -191.09 170.768 -42.1762 -216.49 170.859 -42.1908 -184.89 170.221 -42.6391 -188.02 170.284 -42.6242 -188.36 170.869 -42.27 -191.13 170.924 -42.2321 -169.84 169.908 -42.9647 -271.99 169.989 -42.9169 -286.72 170.699 -42.1596 -235.97 170.744 -42.1184 -208.16 170.815 -42.3107 -201.05 170.881 -42.3389 -171.53 170.362 -42.6247 -186.83 170.41 -42.5666 -549.36 170.082 -42.787 -218.15 170.154 -42.8343 -162.85 170.165 -42.7583 -161.76 170.237 -42.739 -135.23 170.258 -42.6824 -158.02 170.294 -42.7239 -130.88 165.787 -46.2699 -1420.57 166.051 -45.9658 -823.67 166.159 -45.9299 -773.53 166.812 -46.7486 -1205.75 166.921 -46.7864 -760.85 166.03 -46.5971 -197 166.148 -46.6102 -571.35 166.996 -47.087 -771.99 167.083 -47.0705 -397.77 166.981 -46.715 -583.85 167.072 -46.7267 -557.26 167.204 -46.7998 -410.23 167.294 -46.8103 -225.13 167.229 -46.8842 -417.2 167.35 -46.8872 -181.57 166.087 -46.1591 -81.81 166.161 -46.1574 -106.89 167.184 -46.7196 -295.71 167.262 -46.751 -189.67 167.29 -46.959 -243.32 167.369 -46.9641 -156.45 165.949 -46.3317 -261.1 166.07 -46.3596 -231.16 165.629 -46.425 -1993.72 165.85 -46.4322 -292.27 167.178 -47.0415 -365.11 167.255 -47.0173 -247.12 165.789 -46.5865 -312.03 165.946 -46.535 -215.79 167.301 -44.3312 -3729.07 167.413 -44.2881 -3610.34 166.439 -46.9756 -1620.33 166.597 -47.0018 -1502.3 166.555 -46.6585 -1012.46 166.678 -46.6608 -944.15 166.502 -46.8039 -1417.89 166.621 -46.8107 -1160.33 166.624 -46.7261 -1191.99 166.708 -46.7533 -1236.61 166.391 -46.808 -1457.87 166.443 -46.8742 -1598.12 166.649 -47.1212 -1362.17 166.782 -47.0986 -1200.07 167.035 -46.6557 -371.19 167.127 -46.6532 -308.33 167.006 -46.7711 -735.11 167.008 -46.8407 -825.16 167.057 -46.7911 -716.09 167.123 -46.7866 -583.4 166.499 -46.7277 -1297.24 166.561 -46.7462 -1318.54 166.755 -46.6911 -907.85 166.824 -46.6641 -592.47 166.818 -46.5886 -298.78 166.901 -46.6226 -256.27 166.842 -47.0225 -1095.51 166.934 -47.0471 -923.28 166.555 -46.5516 -608.29 166.633 -46.5928 -728.5 166.337 -46.722 -1332.03 166.434 -46.7483 -1355.43 166.551 -46.8981 -1342.12 166.69 -46.9114 -1286.25 166.724 -47.0192 -1311.91 166.777 -46.9583 -1218.92 166.359 -47.0926 -1741.51 166.508 -47.0769 -1523.05 166.844 -46.9329 -1097.45 166.924 -46.9732 -987.59 166.823 -46.8465 -1163.82 166.917 -46.8855 -916.77 167.003 -46.9313 -904.94 167.077 -46.891 -784.14 167.005 -47.0154 -730.91 167.098 -46.9762 -700.58 167.081 -46.8321 -722.69 167.142 -46.8509 -628.63 167.149 -46.9137 -697.3 167.198 -46.9662 -519.91 166.333 -46.8855 -1573.7 166.261 -46.9826 -1826.01 166.172 -46.5005 -485.7 166.264 -46.5636 -768.89 166.045 -46.6805 -304.49 166.187 -46.73 -1011.81 166.174 -46.8642 -1266.24 166.286 -46.8031 -1230.09 166.898 -46.6978 -689.72 166.961 -46.6575 -417.72 165.417 -45.8732 -3125.08 166.062 -45.324 -4354.45 166.04 -44.9276 -3604.03 166.207 -44.892 -3557.64 165.741 -45.3611 -4096.98 165.658 -45.5153 -4228.87 165.857 -45.5014 -4429.48 165.72 -45.6562 -4233.61 165.808 -45.8167 -2839.58 165.822 -45.9819 -2537.42 165.948 -45.9025 -2110.02 165.693 -46.103 -3155.2 165.885 -46.119 -1063.93 165.947 -46.009 -762.57 166.034 -46.0749 -228.57 165.811 -45.0018 -4311.24 166.011 -45.0724 -3476.53 166.809 -44.9196 -2506 166.86 -44.8684 -2435.02 168.074 -43.763 -1487.35 167.667 -43.7654 -2141.26 167.792 -43.7606 -1778.71 167.812 -44.1022 -2683.67 168.429 -43.6582 -1598.67 169.391 -43.096 -729.63 169.711 -42.9082 -675.23 169.8 -42.815 -653.81 169.821 -42.9323 -468.73 167.2 -44.2788 -3806.3 167.651 -43.9212 -1841.17 166.903 -44.1677 -3708.28 166.828 -44.3093 -3850.97 165.997 -46.4412 -197 166.065 -46.5214 -197 166.097 -46.4442 -222.92 166.182 -46.3953 -403 166.151 -46.2984 -259.12 166.231 -46.3236 -337.14 166.372 -46.5279 -678.41 166.47 -46.5085 -571.12 166.258 -46.6497 -927.35 166.355 -46.6226 -921.11 166.441 -46.6797 -1141.6 166.457 -46.5902 -798.56 166.704 -46.8293 -1227.28 166.759 -46.8074 -1247.87 166.751 -46.86 -1238.06 166.777 -46.9021 -1213.32 165.936 -46.2271 -487.82 165.998 -46.1653 -192.77 166.048 -46.2499 -191 166.147 -46.2157 -147.57 166.721 -46.581 -631.11 166.759 -46.6358 -734.27 166.023 -45.4255 -4324.13 166.018 -45.5505 -3965.04 166.446 -45.089 -4200.04 166.541 -45.0732 -3934.96 166.407 -45.1528 -4194.32 166.51 -45.1427 -3940.28 165.905 -45.6628 -4300.62 166.062 -45.6659 -3364.64 166.186 -45.6645 -2590.31 167.788 -43.8685 -1677.6 167.904 -44.0399 -2358.35 168.186 -43.7651 -1650.01 168.278 -43.7742 -1748.01 166.42 -45.2946 -3871.72 166.143 -45.5778 -3815.18 166.234 -45.5974 -3157.61 165.987 -45.7775 -2883.74 166.076 -45.8645 -1545.71 166.138 -45.7637 -2122.09 166.2 -45.1784 -4315.44 166.313 -45.1632 -4220.33 166.266 -45.0824 -4167.24 166.359 -45.1052 -4205.61 166.507 -44.6737 -3500.55 166.625 -44.5941 -3518.84 166.632 -44.706 -3764.14 166.83 -44.7988 -3231.66 166.737 -44.7482 -3837.92 166.857 -44.7006 -3525.69 166.914 -44.7614 -2989.57 166.967 -44.7112 -2881.08 166.942 -44.6464 -3135.97 167.032 -44.6542 -2678.95 167.291 -44.4242 -3858.33 166.627 -44.4679 -3420.27 166.779 -44.4271 -3582.24 166.921 -44.4067 -3838.84 167.037 -44.3995 -3723.72 166.052 -45.2101 -4141.98 166.14 -45.1076 -3905.5 166.163 -45.0081 -3504.55 167.372 -43.7782 -2648.23 167.507 -43.6887 -2656.18 167.42 -44.1819 -3487.08 167.548 -44.1212 -2945.43 167.643 -43.6073 -2537.5 167.771 -43.6607 -2112.83 168.34 -43.5081 -1179.67 168.433 -43.5604 -1269.1 168.359 -43.2756 -1083.04 168.344 -43.395 -1107.89 167.107 -44.6022 -2893.26 167.207 -44.5563 -3209.83 167.185 -44.4621 -3801.66 167.276 -44.4976 -3532.59 167.123 -44.4047 -3826.68 167.104 -44.334 -3800.42 167.201 -44.3736 -3983.49 167.542 -44.2471 -3539.15 167.003 -44.4783 -3655.04 166.99 -44.5727 -3319.01 168.519 -43.5199 -1147.38 168.52 -43.6079 -1344.36 168.705 -43.2251 -951.75 168.989 -43.1352 -879.65 168.852 -43.5183 -944.87 169.13 -43.3448 -692.46 169.085 -43.4271 -695.18 169.172 -43.4123 -455.66 169.395 -43.2594 -642.78 169.479 -43.2326 -534.21 168.732 -43.0958 -1022.72 168.878 -43.0821 -997.56 170.51 -42.804 -37.92 170.582 -42.8061 -34.77 170.645 -42.5352 -223.58 170.717 -42.5526 -198.29 169.877 -43.1031 -160.8 170.002 -42.3642 -854.7 169.769 -42.6082 -839.5 170.075 -42.8731 -188.74 170.152 -42.9096 -144.43 170.82 -42.1149 -193.2 170.909 -42.1162 -168.45 170.38 -42.504 -580.32 170.452 -42.4979 -530.27 170.395 -42.6884 -121.63 170.443 -42.636 -211.41 169.662 -42.5112 -998.45 169.815 -43.3733 -67.35 169.629 -43.191 -316.66 169.734 -43.1831 -209.96 169.724 -43.3277 -239.58 169.775 -43.3719 -113 169.479 -43.087 -691.19 169.58 -43.0884 -544.71 169.336 -43.1637 -696.06 169.434 -43.1683 -705.94 169.525 -43.1689 -479.65 169.413 -43.3542 -299.57 169.333 -43.3251 -459.01 169.334 -43.4021 -248.4 169.248 -43.4479 -253.89 169.238 -43.3488 -492.56 169.746 -43.0089 -366.17 169.839 -43.0243 -197 169.338 -42.9126 -869.23 168.864 -43.6187 -453.7 168.113 -43.2426 -1157.16 168.248 -43.1886 -1104.78 168.702 -42.8242 -1120.37 168.841 -42.843 -1048.15 167.473 -43.2316 -1851.98 167.667 -43.183 -1394.45 167.351 -43.5752 -3141.33 167.52 -43.5474 -2559.65 168.238 -43.5752 -1382.48 168.338 -43.6146 -1458.27 167.909 -43.87 -1895.9 168.018 -43.864 -1814.74 167.783 -43.3529 -1446.55 167.969 -43.2977 -1244.76 169.341 -42.5878 -1004.48 169.454 -42.6813 -962.68 168.181 -42.7506 -1322.55 168.376 -42.6913 -1637.81 167.776 -43.5275 -1881.33 167.873 -43.6034 -2049.84 167.388 -43.9341 -2688.6 167.518 -43.8465 -2175.47 169.101 -43.1684 -856.65 169.223 -43.1566 -820.41 168.124 -43.0919 -1145.53 168.28 -43.0434 -1122.27 168.814 -43.2818 -920.34 168.829 -43.4015 -927.68 168.255 -43.6837 -1637.4 168.346 -43.7139 -1509.67 168.35 -43.7929 -1431 168.426 -43.7573 -1361.38 168.234 -43.3234 -1143.01 168.229 -43.4535 -1192.47 169.036 -42.6578 -1048.05 169.171 -42.5168 -1072.85 169.689 -42.3587 -1064.07 169.857 -42.2786 -976.42 167.273 -43.3518 -2844.64 167.477 -43.4159 -2360.52 167.607 -43.3292 -1706.11 167.636 -43.4624 -2031.83 168.323 -42.8758 -1246.26 166.975 -43.7521 -3820.66 167.203 -43.7384 -3165.41 169.123 -42.8055 -967.8 169.208 -42.6778 -1036.03 169.203 -42.9294 -893.5 169.266 -42.8043 -916.08 168.808 -43.1792 -936.3 168.906 -43.2086 -906.36 168.697 -43.7039 -325.58 168.783 -43.6626 -711.2 167.864 -43.7978 -1722.22 167.957 -43.775 -1667.42 167.113 -43.913 -3842.64 167.265 -43.8821 -3098.04 168.425 -43.9524 -286.12 168.492 -43.9078 -190.48 167.993 -44.101 -1778.71 167.8 -44.3042 -1486.45 167.969 -42.9947 -1187.7 168.152 -42.9283 -1174.82 168.785 -42.9616 -1107.03 168.922 -42.9483 -1019.1 169.059 -42.9508 -953.66 169.059 -43.0715 -962.25 169.155 -43.0551 -867.12 167.86 -43.1646 -1258.2 168.005 -43.161 -1185.28 169.775 -43.262 -197.19 169.799 -43.3295 -138.37 169.786 -43.0999 -197 169.857 -43.2834 -127.96 169.916 -43.2865 -81.98 169.849 -43.3518 -62.74 169.899 -43.3347 -50.91 168.95 -43.726 -167.18 169.017 -43.7049 -197 168.959 -43.4454 -913.18 168.926 -43.323 -877.11 169.033 -43.3428 -800.32 169.008 -43.2427 -856.06 169.09 -43.2722 -781.81 170.173 -42.977 -109.44 170.214 -42.9333 -110.95 169.333 -42.7073 -991.15 169.397 -42.7954 -886.71 169.637 -43.2915 -338.76 169.7 -43.2517 -227.7 170.558 -42.3514 -312 170.628 -42.2864 -252.86 169.548 -42.4238 -1052.42 167.965 -43.9514 -2291.15 168.029 -44.0271 -2386.93 167.77 -44.0027 -2274.41 167.867 -43.9465 -2101.52 167.527 -43.9881 -2229.15 167.248 -44.0273 -3375.41 167.407 -44.0652 -2840.33 167.075 -44.0807 -3676.49 167.203 -44.1638 -3775.22 167.646 -44.0405 -2332.87 167.725 -44.0854 -2796.61 166.98 -44.3083 -3762.16 167.078 -44.2264 -3768.15 167.12 -44.6744 -2413.01 167.192 -44.634 -2629.22 167.481 -44.4467 -2592.57 167.575 -44.4299 -2172.57 166.759 -44.974 -2643.55 166.241 -44.5058 -3986.39 166.47 -44.5478 -3676.35 166.486 -45.3037 -3585.8 166.242 -45.5179 -3873.17 166.298 -44.9764 -3789.13 166.38 -45.0387 -4107.95 168.138 -43.8672 -2079.67 168.227 -43.8353 -1918.86 168.068 -43.9497 -2192.22 168.163 -43.9718 -1528.86 168.476 -43.2424 -1028.03 168.469 -43.349 -1014.85 168.7 -41.9153 -1145.59 168.876 -42.0451 -1094.87 170.015 -41.9504 -854.85 170.093 -42.0585 -842.02 170.749 -42.4837 -196.15 170.814 -42.451 -168.86 169.694 -42.185 -1035.77 169.892 -42.0832 -920.71 170.029 -42.209 -897.76 169.907 -42.5999 -721.12 169.943 -42.6885 -557.04 169.502 -42.5478 -985.95 169.619 -42.6639 -893.83 168.765 -42.2558 -1317.37 168.965 -42.2317 -1708.16 169.866 -41.892 -921.42 170.051 -41.8032 -808.49 170.378 -40.7948 -733.61 170.534 -40.7448 -665.26 169.666 -42.7946 -872.74 169.741 -42.7166 -800.96 168.114 -43.5321 -1408.42 168.702 -43.6082 -916.72 168.784 -43.5799 -986.02 170.262 -42.0257 -694.13 169.696 -41.9956 -1012.77 170.712 -42.6271 -227.34 170.781 -42.615 -160.9 167.746 -44.2405 -2506.19 167.736 -44.1565 -2841.43 166.466 -44.3868 -3816.5 166.522 -44.187 -3723.61 166.66 -44.3336 -3662.91 166.725 -44.2126 -3752.16 166.103 -44.7875 -3937.81 166.274 -44.7759 -3608.57 166.352 -44.6588 -3646.83 166.651 -45.4711 -621.95 167.845 -44.345 -638.85 167.828 -44.3919 -521.59 167.201 -44.8537 -612.12 167.222 -44.8762 -92.3 168.235 -43.9103 -1373.25 168.254 -43.9864 -213.21 167.234 -44.8434 -391.98 167.303 -44.771 -1424.54 167.272 -44.7929 -1233.36 167.279 -44.8271 -495.04 167.611 -44.5487 -860.61 166.445 -45.6691 -537.28 166.484 -45.6326 -789.81 166.7 -45.2578 -2599.93 166.873 -45.0198 -1202.78 166.927 -45.0144 -919.86 167.471 -44.5254 -2075.19 167.547 -44.5384 -1764.96 168.014 -44.2456 -61.36 167.998 -44.2783 -44.23 166.621 -45.4356 -1232.71 167.472 -44.6628 -1543.29 167.372 -44.6951 -1891.21 167.669 -44.5395 -460.59 166.37 -45.6105 -2240.28 166.377 -45.6655 -1209.96 166.591 -45.4698 -1452.73 166.618 -45.5029 -756.67 167.271 -44.6159 -2576.51 167.313 -44.556 -2853.69 167.83 -44.1843 -2337.13 167.851 -44.2537 -1380.66 166.874 -45.064 -1040.97 166.874 -45.0991 -1598.54 167.331 -44.7521 -1536.92 167.325 -44.7172 -1988.5 167.565 -44.578 -1002.32 167.783 -44.4753 -164.22 167.78 -44.5133 -47 166.831 -45.0838 -1743.68 167.103 -44.9425 -826.1 167.091 -44.7808 -2120 167.14 -44.7327 -2143.11 167.196 -44.6929 -2260.17 167.208 -44.7427 -2195.03 166.455 -45.5588 -2269.15 166.529 -45.4737 -2262.69 166.565 -45.5007 -1497.81 166.59 -45.5577 -764.63 166.63 -45.5398 -288.96 166.707 -45.3602 -1075.16 166.584 -45.5289 -997.61 166.468 -45.5965 -1608.61 166.422 -45.5877 -2179.41 166.429 -45.6266 -1441.3 166.733 -45.3451 -697.62 166.758 -45.3208 -356.08 166.561 -45.4345 -2066.34 167.546 -44.4896 -2107.26 167.592 -44.5134 -1521.65 167.349 -44.6106 -2385.04 166.914 -44.9738 -1071.88 167.315 -44.1352 -3540.85 167.307 -44.2301 -3732.16 165.977 -44.6343 -4235.72 166.191 -44.6705 -4061.61 165.478 -44.9913 -4452.36 165.616 -45.1983 -4389.96 165.699 -44.7773 -4515.19 165.929 -44.8249 -4400.73 166.541 -44.7631 -3768.76 166.509 -44.8599 -3946.92 166.753 -44.5394 -3515.58 166.745 -44.6447 -3760.13 166.358 -44.8746 -3567.09 166.423 -44.7677 -3653.47 166.365 -45.3398 -3796.4 167.424 -44.6785 -1833.78 168.101 -44.0051 -1739.86 167.615 -44.4762 -1965.23 167.658 -44.4336 -1670.34 166.862 -44.6005 -3638.59 166.884 -44.5055 -3747.81 166.838 -44.9719 -1796.6 166.883 -44.9237 -2000.64 166.506 -45.739 -5.33 166.519 -45.7234 -11.2 166.525 -45.7811 -192.97 166.551 -45.7771 -2.36 167.66 -44.1208 -2891.96 167.647 -44.1931 -3176.51 167.926 -44.2119 -1086.65 167.974 -44.2441 -180.18 167.316 -44.6684 -2247 167.384 -44.6514 -2266.41 166.655 -44.9778 -3592.48 167.002 -44.9745 -725.37 167.165 -44.782 -2197.22 167.195 -44.8225 -1114.02 167.248 -44.6654 -2309.55 167.265 -44.7126 -2037.2 166.991 -44.8943 -1424.43 168.001 -44.2165 -197 167.99 -44.1682 -1055.83 167.928 -44.2668 -362.03 167.943 -44.31 -79.92 167.13 -44.8302 -1710.14 167.172 -44.8509 -982.68 167.476 -44.6175 -1816.46 167.508 -44.5745 -1874.8 167.223 -44.7846 -1703.32 167.241 -44.8141 -961.58 167.007 -44.937 -922.55 167.035 -44.959 -886.37 168.144 -44.0297 -924.35 168.151 -44.0814 -103.75 166.313 -45.5747 -2831.21 166.33 -45.5183 -3274.73 167.09 -44.8732 -1309.92 167.144 -44.8715 -1007.21 167.706 -44.3217 -2229.61 167.777 -44.3607 -1631.91 166.72 -45.0382 -2612.47 166.785 -45.0655 -1831.61 166.947 -44.9284 -1180.82 166.967 -44.9613 -649.9 167.535 -44.6101 -860.94 167.522 -44.6487 -811.79 167.511 -44.6861 -738.5 167.54 -44.6764 -272.66 167.876 -44.3028 -693.86 167.901 -44.3367 -122.83 167.642 -44.5111 -1167.62 167.731 -44.4922 -258.94 167.722 -44.5294 -114.44 167.652 -44.5681 -162.49 167.661 -44.5971 -239.74 167.262 -44.7578 -1975.28 167.297 -44.7423 -1929.54 166.497 -45.4346 -2949.69 167.059 -44.9367 -1042.01 167.092 -44.9115 -1237.62 167.09 -44.4543 -3639.63 167.097 -44.521 -3431.94 166.146 -45.3773 -4244.39 166.133 -45.4785 -4189.01 166.166 -45.2773 -4281.08 166.265 -45.3342 -3972.96 167.611 -44.3129 -2968.16 167.651 -44.2634 -3171.44 167.396 -44.5614 -2357.81 167.453 -44.5776 -2114.38 167.713 -44.3926 -1424.27 167.771 -44.4068 -1219.5 168.075 -44.0917 -926.03 168.1 -44.0474 -1236.36 167.56 -44.6337 -157.22 167.583 -44.6117 -209.65 166.687 -45.1274 -2878.87 166.734 -45.0932 -2370.47 167.123 -44.8953 -1188.93 167.158 -44.9028 -733.32 167.126 -44.9174 -1023.83 167.151 -44.9341 -645.89 166.702 -45.2903 -2303.66 166.721 -45.3184 -1475.38 167.033 -44.8697 -1682.09 167.046 -44.904 -1362.43 167.415 -44.6108 -2301.84 167.434 -44.6439 -2007.92 167.677 -44.4783 -1190.35 167.687 -44.5104 -659.46 166.774 -45.2261 -1200.36 166.629 -44.8011 -3931.88 166.252 -45.906 -564.69 166.241 -45.977 -315.58 166.28 -46.4637 -582.91 166.294 -46.3738 -419.45 167.219 -46.6367 -172.32 167.285 -46.6855 -162.58 166.899 -46.3788 -133.83 166.902 -46.4476 -170 167.049 -46.5295 -228.19 167.089 -46.592 -218.18 176.379 -41.0655 -377.33 176.097 -41.113 -15 176.108 -41.1378 -26.92 175.23 -41.7633 -1074.29 175.281 -41.7097 -574.69 175.204 -41.6484 -242.32 175.21 -41.6961 -797.26 176.215 -41.2061 -294.95 175.929 -41.3391 -86.78 175.606 -41.55 -303.77 175.629 -41.5154 -127.57 175.984 -41.3545 -196.09 176.377 -40.821 -93.55 176.426 -40.8362 -135.94 176.698 -41.1841 -1116.18 175.954 -41.4815 -1039.16 176.009 -41.5056 -1123.47 175.927 -41.3 -31.04 175.973 -41.2812 -49.45 175.32 -41.6675 -445.34 175.357 -41.7132 -1027.34 175.255 -41.6616 -278.1 175.284 -41.638 -26.52 175.479 -41.5767 -27.14 175.508 -41.5521 -43.16 175.526 -41.5821 -156.33 176.047 -41.1856 -15.95 176.076 -41.161 -13.25 176.324 -40.8988 -81.47 176.364 -40.8616 -92.67 175.493 -41.6085 -168.8 175.5 -41.6454 -497.68 175.357 -41.642 -243.09 176.037 -41.3664 -228.01 176.217 -41.266 -901.96 176.246 -41.3308 -894.44 176.204 -41.1635 -116.63 176.258 -41.1673 -293.4 175.811 -41.5259 -752.02 176.275 -41.223 -837.12 176.297 -41.2779 -1166.3 176.074 -41.401 -896.47 176.542 -40.9804 -415.28 176.557 -41.0483 -904.53 176.148 -41.2722 -367.13 176.162 -41.3173 -847.81 176.361 -40.994 -149.94 176.408 -40.9474 -149.05 176.197 -41.0723 -60.4 175.727 -41.4324 -47.24 175.765 -41.4224 -56.91 175.775 -41.5477 -1045.75 175.816 -41.5609 -911.82 176.001 -41.398 -502.69 176.028 -41.4547 -1051.27 175.544 -41.6177 -480.2 175.579 -41.5845 -411.17 175.453 -41.5992 -100.62 175.452 -41.6273 -254.87 176.086 -41.1901 -45.12 176.119 -41.1715 -46.42 175.374 -41.6188 -72.99 175.411 -41.6078 -121.1 175.775 -41.5882 -1004.62 175.856 -41.5372 -1037.46 175.038 -41.4495 -163.7 175.049 -41.4934 -71.31 175.05 -41.6903 -856.46 175.146 -41.6656 -389.64 175.095 -41.617 -177.7 175.17 -41.6142 -74.83 176.135 -41.1097 -36.07 176.153 -41.0767 -35.64 176.373 -40.9087 -113.27 176.429 -40.8928 -145.99 175.938 -41.3822 -183.69 175.949 -41.4306 -601.77 175.139 -41.5653 -74.41 175.192 -41.5725 -44.12 175.608 -41.6254 -512.27 175.937 -41.2701 -12.56 175.972 -41.2585 -22.29 176.009 -41.2327 -23.24 176.032 -41.2454 -49.18 175.878 -41.3669 -45.11 175.889 -41.4099 -371.44 175.656 -41.4835 -90.91 175.687 -41.4551 -142.61 176.174 -41.1033 -53.09 176.22 -41.1177 -92.67 175.8 -41.4056 -63.98 175.843 -41.394 -76.39 175.749 -41.4982 -957.3 175.797 -41.4955 -799.8 175.839 -41.4279 -143.69 175.885 -41.4595 -860.64 176.247 -41.0729 -94.59 176.302 -41.1097 -197 175.61 -41.672 -771.87 175.614 -41.7144 -1528.17 175.742 -41.5301 -1223.98 175.775 -41.5192 -893.64 175.845 -41.4981 -888.13 175.9 -41.5098 -1114.79 175.733 -41.5631 -1408.62 175.505 -41.6934 -1029.07 175.558 -41.743 -1898.76 175.399 -41.7587 -1054.12 175.478 -41.7523 -1188.8 175.447 -41.8159 -1713.98 175.53 -41.7986 -2054.05 175.556 -41.6587 -873.03 175.568 -41.6952 -1080.57 175.429 -41.7084 -974.28 175.447 -41.6639 -659.15 175.794 -41.4387 -160.02 175.823 -41.4643 -745.12 175.386 -41.6721 -578.45 175.404 -41.6388 -352.93 175.657 -41.5454 -292.03 175.702 -41.5397 -1066.63 175.678 -41.5148 -448.02 175.716 -41.5144 -1061.33 175.703 -41.4892 -468.62 175.733 -41.4653 -177.14 175.759 -41.4459 -82.17 175.776 -41.4683 -462.29 175.86 -41.5753 -1155.44 175.871 -42.1723 -2620.07 175.686 -41.5732 -774.05 175.72 -41.5998 -916.6 175.657 -41.6501 -664.38 175.704 -41.6381 -873.1 175.635 -41.5816 -621.46 175.668 -41.6111 -541.37 175.141 -41.7306 -981.82 175.01 -40.6166 -74.88 175.055 -40.6355 -61.51 174.507 -38.7277 -26.51 174.545 -38.6925 -19.2 165.334 -46.6126 -2746.26 165.454 -46.7331 -1156.41 177.264 -40.8886 -2006.05 176.951 -40.7946 -931.58 176.848 -41.7887 -2850.51 176.852 -41.1908 -1273.96 177.114 -40.8445 -1767.5 176.764 -41.2587 -1444.91 176.759 -41.3425 -1672.49 177.139 -40.9671 -1988.11 177.149 -41.1003 -1784.58 177.293 -41.0174 -1956.04 177.406 -40.9275 -2097.98 176.886 -41.0013 -1563.12 177.014 -41.0385 -1889.05 176.973 -40.6708 -610.95 177.091 -40.7262 -1486.53 176.57 -41.243 -1077.48 176.667 -41.2972 -1470.16 176.992 -40.9237 -1412.01 176.91 -41.0928 -1644.62 177.001 -41.1544 -1608.48 176.331 -41.2352 -1174.59 177.149 -41.492 -2822.53 177.322 -41.5067 -2815.87 177.677 -41.0582 -2493.83 177.858 -40.9667 -2530.31 175.885 -42.2932 -2672.85 176.027 -42.2114 -2742.79 174.983 -41.8504 -1771.87 177.091 -40.6208 -1015.44 177.215 -40.5741 -1763.43 177.145 -40.1697 -430.04 177.198 -40.1127 -542.64 177.197 -40.6693 -1797.82 177.237 -40.7641 -1915.29 176.976 -40.5615 -737.84 177.096 -40.5188 -1159.17 176.872 -40.6166 -402.08 176.873 -40.5456 -323.11 176.914 -40.4166 -1011.34 176.993 -40.3723 -1070.69 176.695 -40.6718 -227.51 176.735 -40.7236 -320.75 176.906 -40.4877 -675.04 176.999 -40.4616 -1330.7 176.48 -42.1783 -2683.12 177.632 -42.0845 -2756.17 177.765 -41.9011 -2829.01 180.96 -31.3148 -1487.25 181.148 -31.3604 -377.37 180.785 -31.6445 -2395.57 180.994 -31.7036 -1672.13 181.185 -31.513 -242.6 181.238 -30.865 -1294.24 181.321 -30.7236 -1037.11 181.108 -31.1841 -1193 181.275 -31.1093 -980.3 181.586 -30.1863 -327.02 181.695 -30.0051 -1117.36 180.802 -32.0295 -2111.98 180.873 -31.8433 -2052.32 181.279 -30.9747 -853.39 181.495 -30.3844 -1014.86 181.374 -30.5436 -531.78 181.233 -31.2411 -417.02 181.968 -28.7911 -1539.42 182.036 -28.946 -1048.32 182.403 -28.101 -1484.59 181.759 -29.5342 -881.2 181.839 -29.6722 -1041.05 182.14 -28.8209 -566.62 184.249 -27.1706 -7361.45 183.088 -27.4837 -2184.93 182.844 -26.8068 -1517.24 182.656 -26.7966 -1354.96 182.795 -26.9578 -1889.54 182.784 -26.6574 -1182.15 182.937 -26.5753 -1370.41 183.128 -32.604 -6193.93 183.35 -32.8777 -5941.7 182.593 -34.2528 -5902.71 182.791 -33.0891 -6492.08 183.126 -33.1437 -6036.45 182.905 -33.3478 -5872.77 182.952 -33.6104 -6026.04 182.767 -34.0083 -5920 182.71 -34.5261 -5747.44 182.934 -34.2795 -5781.26 183.398 -30.2807 -7932.46 183.696 -30.6752 -6592.56 183.224 -33.44 -5910.9 183.51 -33.2047 -5191.21 183.593 -31.8923 -5988.61 183.791 -32.1951 -5640.73 183.517 -32.5051 -5917.44 183.938 -32.498 -5742.93 183.229 -33.7381 -5393.88 183.513 -33.9413 -5216.73 183.958 -30.6623 -5788.18 184.183 -30.8536 -5452.6 184.817 -27.7891 -5800.13 184.553 -28.0371 -6525.8 184.888 -28.1477 -5833.58 184.528 -26.8351 -7812.51 184.63 -28.6184 -5872.93 184.913 -28.473 -5741.44 184.168 -29.8444 -6081.8 184.504 -29.6618 -5770.99 184.522 -27.0535 -7378.46 184.833 -29.4096 -5781.74 182.738 -31.7443 -9470.02 182.958 -31.8685 -6939.1 183.022 -32.1172 -6696.34 182.673 -31.3544 -6638.57 182.785 -31.5403 -8996.29 183.039 -31.6378 -7277.54 182.755 -31.976 -9334.08 182.754 -30.9868 -5960.29 182.859 -31.1917 -7550.72 182.945 -31.3938 -8511.28 182.161 -33.0543 -8742.56 182.984 -32.8698 -6264.88 181.659 -33.6818 -6715.69 182.341 -33.8414 -6545.5 182.138 -33.2124 -8610.76 182.311 -34.2036 -6168.5 182.284 -32.1405 -6565.81 183.123 -30.3641 -6714.46 183.377 -30.007 -7114.29 183.635 -30.1209 -7479.8 183.689 -30.3691 -6631.18 183.083 -31.0283 -8165.44 183.443 -30.6273 -8458.72 183.23 -31.8769 -4773.54 183.608 -31.35 -5937.08 183.735 -31.6428 -5445.59 183.497 -30.4603 -8442.71 183.627 -30.5358 -7637.47 183.797 -30.5338 -6093.23 184.009 -30.4188 -5731.56 183.866 -30.2103 -6154.09 184.132 -30.1466 -5860.81 184.23 -30.5999 -5626.75 184.381 -30.3733 -5589.86 183.701 -29.0719 -6500.9 183.908 -28.9286 -8378.78 184.105 -29.03 -7456.37 184.32 -28.9092 -6214 184.218 -27.9657 -8228.51 184.174 -27.7064 -8148.84 184.445 -27.7511 -7675.76 183.892 -28.6777 -7123.51 184.129 -28.5947 -8171.47 184.105 -28.8109 -8017.48 184.151 -27.3101 -6794.36 184.056 -27.5172 -6081.92 184.308 -27.5071 -8635.15 184.412 -27.2688 -7795 183.817 -28.22 -5642.22 184.368 -28.5198 -6794.66 184.614 -28.3382 -6204.2 183.876 -29.9842 -7025.51 184.296 -26.7322 -6622.03 184.351 -27.0921 -8008.95 184.347 -26.9397 -8105.09 184.517 -26.6189 -7775.97 184.754 -26.5174 -6306.25 183.926 -29.1178 -8655.41 184.093 -29.2698 -6922.97 183.864 -29.6918 -7660.89 184.161 -29.5453 -6336.43 184.757 -26.2128 -5883.92 184.271 -28.7127 -7000.13 184.431 -28.7287 -6321.64 184.577 -28.8631 -5896.17 184.002 -27.6709 -5961.3 184.005 -27.8268 -6449.43 183.433 -29.1131 -4860.19 183.584 -29.2907 -6148.8 183.823 -29.2802 -8668.19 183.93 -29.4564 -7358.67 183.125 -29.8791 -5356.79 183.946 -28.0176 -6244.97 183.522 -28.919 -4913.87 183.71 -28.8353 -5992.71 183.258 -29.4671 -5038.73 183.364 -29.305 -5140.47 183.869 -27.7239 -4867.42 181.625 -33.8279 -6649.44 181.996 -33.3145 -8221.6 182.231 -33.3843 -8369.94 182.371 -33.0024 -8160.66 182.539 -33.1452 -7024.1 182.678 -33.2863 -6683.53 182.666 -33.5099 -6345.46 183.472 -29.4656 -5573.08 183.706 -29.4744 -7730.11 183.408 -28.8131 -4441.01 184.786 -25.5998 -6356.83 184.481 -30.0248 -5586.61 184.811 -30.2837 -5529.22 184.869 -28.7973 -5656.35 185.106 -29.0698 -5476.91 182.816 -32.6331 -6734.95 184.074 -28.2051 -8035.86 184.335 -28.2416 -7504.98 181.212 -29.6083 -2212.31 181.432 -29.7471 -2242.48 182.283 -27.038 -1835 182.224 -27.2908 -1991.5 182.323 -33.1864 -8325.28 182.479 -33.336 -7079.79 180.458 -32.1837 -3390.24 179.834 -32.4772 -3310.42 179.991 -32.1982 -3034.19 179.845 -31.4773 -2892 180.001 -31.6828 -3205.39 179.87 -33.6637 -2197.73 179.924 -33.8486 -1580.29 180.39 -32.3993 -2812.5 180.086 -32.718 -3039.68 180.34 -32.6033 -2346.3 179.297 -33.3997 -2567.47 179.358 -33.1233 -3165.8 184.283 -29.1193 -6150.13 184.436 -29.3131 -5696.43 183.82 -30.8659 -5914.79 183.958 -31.1239 -5552.77 183.562 -29.6501 -6866.57 183.612 -29.8743 -8310.46 183.127 -30.6097 -8338.89 183.317 -30.4684 -8757.18 182.721 -32.2092 -8417.39 182.916 -32.3912 -6460.26 183.233 -31.4055 -6482.46 183.403 -31.6344 -5838.95 183.722 -28.4558 -4967.86 181.216 -29.8755 -1582.29 182.556 -26.9926 -2016.64 184.709 -26.7352 -6929.22 185.003 -26.7587 -5380.36 183.527 -30.8306 -6672 183.596 -31.0501 -6049.21 181.371 -26.9998 -2459.82 181.452 -26.774 -2368.76 180.902 -31.1016 -1375.34 184.465 -29.0592 -5728.25 184.714 -29.0854 -5591.19 182.552 -31.5579 -7141.9 184.928 -27.4566 -5729.24 185.285 -27.3748 -4771.28 184.601 -27.5013 -6561.46 184.704 -27.2286 -6264.16 187.71 -30.0782 -5762.21 188.111 -30.3789 -5768.95 186.082 -33.0047 -5656.21 186.493 -33.3004 -5628.73 182.303 -30.6514 -4016.15 180.247 -34.2562 -3235.23 180.289 -33.7923 -2298.91 181.459 -31.2943 -1453.43 181.511 -31.4522 -2281.07 181.033 -31.8551 -768.04 181.159 -31.7623 -387.33 183.447 -25.5877 -859.77 183.155 -25.9551 -1362.13 183.292 -25.951 -1587.74 183.279 -25.5681 -644.03 183.316 -25.7089 -1153.34 181.61 -32.3238 -4331.67 181.714 -32.4428 -5191.44 181.297 -32.8915 -4436.4 181.424 -32.9729 -5157.29 182.001 -31.4256 -5165.59 182.066 -31.5401 -5490.12 182.357 -30.9644 -4520.14 181.413 -33.4655 -5883.79 181.18 -32.8144 -3108.33 181.615 -32.5898 -4257.6 181.486 -32.2149 -3668.97 181.25 -33.8439 -5397.63 181.094 -33.2494 -3993.11 181.238 -33.3455 -4602.92 181.251 -33.1912 -4680.76 181.249 -33.0339 -4507.7 182.628 -29.9175 -4212.39 182.039 -31.0039 -3780.88 182.076 -31.1677 -4438.94 181.926 -31.2884 -4379.08 182.114 -31.3211 -5448.16 181.616 -31.9009 -3981.4 181.823 -31.9556 -4415.28 181.051 -32.8717 -3082.87 181.092 -32.9991 -3651.61 181.174 -32.9221 -3772.25 181.317 -32.2602 -3094.98 181.352 -32.103 -2772.68 181.264 -32.4253 -3193.01 181.442 -32.3673 -3981.73 182.506 -30.2746 -4048.75 182.692 -30.2989 -4624.08 180.89 -33.7186 -3271.77 181.047 -33.7901 -4675.1 181.145 -31.8878 -1086.69 181.21 -31.9982 -1713.31 181.39 -31.9259 -2828.29 181.531 -32.0604 -3462.78 181.644 -31.5708 -3281.28 181.702 -31.4396 -3444.33 181.775 -31.3403 -3592.89 181.854 -31.4258 -4321.96 182.01 -30.8386 -3307.58 182.156 -30.745 -3693.28 182.189 -30.9007 -4037.72 180.594 -33.4027 -2973.68 180.786 -33.4317 -3098.8 180.975 -33.1597 -3346.1 180.921 -33.3028 -3457.65 181.947 -30.5091 -2921.46 182.007 -30.343 -2834.04 181.982 -30.6762 -3144.01 182.123 -30.591 -3469.24 182.169 -29.9901 -2971.65 182.314 -30.2496 -3645.27 182.434 -30.1118 -3929.2 181.57 -30.9014 -1435.28 181.665 -31.0547 -2252.56 181.749 -31.2243 -3351.62 181.888 -31.1134 -3589.26 181.119 -32.5362 -2522.07 180.898 -33.0612 -2865.13 181.007 -33.0635 -3420.27 181.11 -33.1167 -3949.51 181.338 -31.5117 -955.03 181.452 -31.6373 -2660.33 181.483 -31.7934 -3128.1 181.63 -31.7236 -3759.3 181.838 -30.2567 -1842.57 181.976 -30.1889 -2281.57 182.133 -30.2286 -3079.43 182.198 -30.3668 -3416.22 181.396 -30.8939 -1021.1 181.504 -30.7655 -1066.58 181.639 -30.6368 -1522.03 181.651 -30.7898 -1908.88 180.993 -32.4603 -1451.72 181.089 -32.3842 -1919.51 181.038 -32.2254 -1135.18 181.18 -32.2948 -2432.28 180.74 -32.9182 -1535.93 180.85 -32.9737 -2448.3 180.892 -32.8758 -2473.05 180.963 -32.9737 -2904.16 181.607 -30.4889 -975.01 181.749 -30.4834 -1913.01 181.816 -30.7676 -2629.01 181.827 -30.6119 -2523.32 180.523 -33.2343 -1873.85 180.675 -33.1312 -2074.98 180.721 -33.2772 -2816.69 180.828 -33.1605 -2953.61 180.968 -31.9762 -889.15 181.084 -31.9579 -845.01 181.071 -32.0711 -1092.98 181.194 -32.1612 -2164.68 181.343 -31.2202 -840.11 181.459 -31.1287 -1232.55 181.593 -31.205 -2273.75 181.632 -31.3281 -2832.61 181.269 -31.4221 -61.34 181.373 -31.4019 -943.89 180.735 -32.556 -592.2 180.861 -32.636 -1159.39 180.793 -32.7766 -1450.89 180.953 -32.7606 -2360.9 181.705 -30.2496 -964.03 181.749 -30.1476 -1113.94 181.734 -30.3479 -1625.16 181.852 -30.3863 -2240.57 180.854 -32.4789 -710.9 180.972 -32.5534 -1571.57 181.768 -29.8652 -849.78 181.864 -29.9486 -1787.1 181.821 -30.0598 -1540.4 181.865 -30.1425 -1729.48 180.663 -33.0169 -1573.52 180.774 -33.0411 -2200.62 181.379 -31.0219 -768.99 181.492 -31.0008 -1126.38 181.64 -30.4028 -1166 181.632 -30.3142 -793.51 181.467 -30.6424 -363.12 181.513 -30.5397 -502.22 180.496 -32.843 -1487.87 180.629 -32.8109 -773.41 180.679 -32.6733 -619.49 181.302 -31.3237 -562.18 181.118 -31.6265 -817.54 181.261 -31.6368 -924.34 181.248 -31.8657 -1564.53 181.33 -31.7687 -1914.85 182.313 -29.9946 -3551.38 182.466 -29.9384 -3840.86 182.426 -29.787 -3604.4 182.551 -29.8372 -3957.52 182.237 -29.8072 -2945.5 182.238 -29.9128 -3175.34 182.335 -29.8884 -3461.19 182.089 -29.5608 -1723.99 182.215 -29.4322 -2090.03 182.406 -29.4455 -3019.95 181.938 -30.0632 -2036.54 182.026 -29.9456 -2444.47 182.052 -29.7923 -2147.49 182.144 -29.8868 -2791.2 182.339 -28.4095 -1279.54 182.467 -28.5274 -1743.72 182.416 -28.2678 -1443.51 182.569 -28.2126 -2154.15 182.286 -29.0426 -1609.56 182.415 -29.1296 -2324.13 182.318 -29.292 -2293.84 182.537 -29.2905 -3244.82 182.394 -28.9583 -1875.69 182.41 -28.8113 -1611.53 182.554 -28.8793 -2284.22 182.584 -29.0297 -2702.02 181.914 -29.7767 -1681.75 181.964 -29.7076 -1551.67 182.046 -29.6737 -1614.47 182.17 -29.6832 -2351.61 181.739 -29.7627 -1199.92 181.823 -29.7838 -1212.92 181.861 -29.8452 -1643.51 181.943 -29.859 -2016.14 181.913 -29.5077 -395.06 181.971 -29.6263 -1017.19 181.922 -29.3715 -874.89 182.043 -29.4149 -1261.64 182.522 -27.9737 -1425.48 182.557 -28.0826 -1851.18 182.002 -29.3072 -285.57 182.028 -29.1947 -218.03 182.132 -29.3 -721.19 182.197 -29.1491 -1322.23 182.289 -28.5812 -712.69 182.429 -28.6732 -1645.95 182.556 -28.752 -2056.29 182.589 -28.6264 -2365.88 182.063 -29.0771 -900.15 182.167 -29.0151 -1273.1 182.174 -28.9215 -1138.77 182.257 -28.9607 -1392.17 182.276 -28.7362 -668.78 182.275 -28.8681 -961.74 183.89 -27.5884 -4848.08 183.721 -26.384 -3333.72 183.944 -26.455 -4003.95 183.923 -26.6765 -4179.54 184.096 -26.7482 -5430.54 184.065 -26.2874 -4412.82 184.266 -26.3124 -5596.63 182.583 -29.731 -3915.84 182.737 -29.7088 -3849.54 182.656 -29.8138 -4114.08 182.782 -29.8675 -4377.79 183.33 -28.4741 -3510.86 183.374 -28.6708 -4167.2 183.574 -27.2439 -3608.59 183.604 -26.8238 -2629.34 182.952 -29.0012 -3284.85 182.745 -29.5644 -3516.38 182.907 -29.6153 -3596.57 183.575 -26.2628 -2179.67 183.723 -26.1966 -3542.52 183.883 -26.2655 -3720.71 183.991 -26.1573 -4172.69 182.856 -28.7436 -3112.94 182.973 -28.5826 -3092.2 183.23 -27.4539 -2201.73 183.625 -27.4587 -4168.4 183.618 -27.6248 -4496.84 183.718 -26.0423 -3559.9 183.857 -26.1066 -4064.05 183.716 -25.9046 -3511.92 183.198 -27.8935 -3267.16 183.243 -27.7271 -3110.47 182.583 -29.1552 -3036.75 182.681 -29.2166 -3132.57 182.678 -29.1185 -3043.24 182.774 -29.0373 -3093.59 183.421 -26.2896 -2319.71 183.462 -26.1606 -2106.16 183.522 -26.4085 -2854.68 183.372 -26.0612 -1960.8 183.448 -25.9289 -2049.7 183.493 -26.0501 -2435.26 183.592 -26.1152 -2704.21 182.829 -28.4379 -2830.04 182.941 -28.3312 -3087.63 182.983 -28.1046 -3046.58 183.023 -28.2381 -3208.17 183.436 -26.8144 -1893.9 183.53 -26.6858 -2532.77 183.707 -26.6912 -3478.99 183.782 -26.5542 -3518.25 182.691 -28.7074 -2697.05 182.695 -28.8172 -2752.09 182.688 -28.9315 -2674.07 182.822 -28.9001 -3056.26 182.813 -28.1335 -2765.38 182.868 -27.9915 -2712.13 183.022 -27.9233 -2987.79 183.144 -28.0444 -3209.79 183.105 -27.3246 -1825.33 183.313 -27.3056 -1733.6 183.36 -27.1349 -2229.54 183.499 -27.161 -2883.34 183.096 -27.683 -3015.89 183.177 -27.586 -2602.64 183.323 -27.5733 -2784.34 183.429 -27.6813 -3160.81 182.52 -28.3741 -1838.74 182.685 -28.3345 -2504.45 182.643 -28.4856 -2385.03 182.759 -28.5978 -2776.91 183.352 -26.9595 -2312.31 183.499 -27.0493 -2677.46 183.51 -26.926 -1972.27 182.78 -27.9101 -2395.98 182.877 -27.8496 -2560.5 182.987 -27.7646 -2767.21 183.109 -27.7985 -3035.1 182.666 -28.1113 -2259.53 182.709 -28.2158 -2516 182.815 -28.2811 -2839.25 182.915 -28.2209 -3007.15 182.937 -27.4207 -2053.37 182.947 -26.7147 -1362.54 183.27 -26.5351 -2035.71 183.357 -26.6747 -1977.41 182.838 -27.7022 -2333.9 182.979 -27.6351 -2667.76 182.99 -27.5348 -2582.81 183.067 -27.5841 -2636.09 183.073 -27.0428 -2166.19 183.171 -26.9268 -2136.31 183.228 -27.0477 -2242.45 183.185 -27.1743 -2230.67 183.097 -26.538 -1467.59 183.161 -26.3816 -1771.78 183.354 -26.4123 -2574.91 183.166 -26.2123 -1908.28 183.285 -26.2985 -2478.69 183.221 -26.0762 -1652.73 183.322 -26.1848 -1941.84 182.966 -26.8198 -1851.51 183.024 -26.9094 -2053.24 182.915 -26.8945 -1541.64 182.946 -26.9777 -1770.14 182.723 -27.1644 -1589.37 182.918 -27.0911 -2370.7 182.525 -27.8344 -1267.07 182.656 -27.895 -1879.78 182.627 -28.0145 -2048.68 182.737 -28.0093 -2311.21 182.648 -27.7231 -1795.38 182.76 -27.816 -2163.87 182.579 -27.5743 -1777.64 182.734 -27.5761 -2011.33 182.66 -27.4511 -1749.31 182.776 -27.3445 -1754.01 182.797 -27.4695 -2268.25 182.88 -27.5549 -2503.54 181.199 -33.6847 -5289.24 181.371 -33.7219 -5531.19 181.788 -33.2379 -6791.88 181.968 -33.1333 -7406.19 181.61 -33.3509 -6081.39 181.98 -31.6855 -4869.77 181.981 -31.8681 -4655.07 182.136 -31.9799 -5527.19 182.061 -32.133 -5562.24 182.147 -32.2886 -5663.21 181.881 -32.4285 -5703.58 182.048 -32.4239 -5637.39 182.226 -31.5228 -5844.35 182.339 -31.647 -5915.76 182.138 -31.4363 -5621.28 182.286 -31.3761 -5524.66 182.251 -31.2086 -4955.8 182.456 -31.2331 -5344.15 182.515 -31.0516 -5283.27 182.651 -31.1623 -5677.61 181.783 -32.295 -5147.38 181.965 -32.2805 -5294.93 181.851 -32.1274 -4252.7 181.969 -32.0096 -4790.19 182.806 -30.1678 -5114.3 182.883 -30.3332 -4965.43 184.142 -26.4286 -4921.3 184.123 -26.5932 -5206.9 183.974 -26.851 -4660.18 184.009 -27.0237 -5408.64 183.951 -27.2145 -5257.87 184.113 -27.152 -6206.46 182.871 -29.7582 -3993.87 182.94 -29.8529 -4450.26 182.997 -29.7512 -4428.45 183.143 -29.6502 -4988.23 182.724 -30.0179 -4659.9 182.929 -30.0106 -5058.45 183.211 -28.3364 -3418.15 183.377 -28.287 -3800.93 183.137 -28.9358 -3689.27 183.34 -28.9394 -3997.34 183.743 -27.2474 -3974.29 183.803 -27.0902 -3812.54 183.861 -27.3324 -4325.07 183.979 -27.3609 -4992.73 183.713 -27.759 -4609.92 183.771 -27.6436 -4735.99 183.098 -29.1296 -3495.1 183.255 -29.0604 -4003.3 183.17 -29.3061 -4276.43 183.265 -29.1841 -4350.68 181.491 -33.6204 -5984.36 181.519 -33.7394 -6215.34 182.526 -30.8854 -5218.27 182.717 -30.7752 -5992.44 182.576 -30.4248 -4436.65 182.682 -30.5793 -5456.67 182.897 -29.1437 -3234.83 182.979 -29.2831 -3351.06 182.828 -29.4234 -3344.16 183.048 -29.4575 -3936.39 183.188 -28.6253 -3577.35 183.253 -28.7893 -3917.98 183.449 -27.2409 -2390.46 183.493 -27.3652 -3084.73 183.637 -27.3409 -4226.89 183.751 -27.3895 -4507.32 183.105 -28.1627 -3219.4 183.245 -28.1739 -3478.38 183.31 -28.0044 -3657.99 183.447 -28.1181 -4047.7 181.803 -32.5712 -5709.46 183.346 -25.839 -1340.26 183.459 -25.7672 -1602.64 183.587 -25.841 -2172.86 183.59 -25.9796 -3151.82 180.582 -32.9325 -1013.27 180.539 -33.062 -1046.16 180.934 -32.3489 -818.61 180.947 -32.1012 -743.98 183.069 -28.3484 -3338.73 183.13 -28.2527 -3374.03 182.988 -28.4394 -3205.53 183.125 -28.4725 -3336.39 182.617 -29.4694 -3405.3 182.698 -29.33 -3306.97 182.77 -29.1539 -3113.11 182.811 -29.2573 -3119.54 182.105 -30.4645 -3290.82 182.259 -30.503 -3874.74 182.448 -30.5473 -4285.61 182.383 -30.3951 -3890.43 183.523 -28.3821 -3910.39 183.53 -28.56 -4082.87 181.417 -33.2777 -5848.19 181.413 -33.1166 -5482.24 181.445 -32.8305 -5028.83 181.604 -32.7582 -5472.51 181.591 -32.9164 -5394.59 181.744 -33.0439 -5857.91 182.372 -31.501 -5614.63 182.468 -31.4045 -5633.58 181.787 -31.6406 -4356.22 181.8 -31.794 -4335.73 181.781 -31.5235 -3899.85 181.91 -31.5416 -4839.67 183.523 -28.2452 -4229.34 183.642 -28.2863 -4519.17 183.588 -28.0271 -4450.14 183.626 -28.1525 -4658.91 184.164 -26.1163 -4829.59 183.445 -26.5453 -2470.22 183.618 -26.5459 -3138.85 184.308 -26.507 -5980.92 184.505 -26.3868 -7092.56 183.091 -26.7828 -2207.83 183.268 -26.8045 -2231.82 184.747 -26.9519 -6073.44 185.004 -27.1223 -5637.76 183.367 -27.8409 -3530.64 183.479 -27.9476 -3990.72 182.468 -29.6161 -3488 182.631 -29.6175 -3662.56 183.625 -27.1278 -3182.47 183.666 -26.9738 -3068.94 182.575 -30.027 -4225.82 182.626 -30.1495 -4459.05 182.336 -30.8102 -4254.57 182.498 -30.7116 -4512.76 182.079 -30.0906 -2728 182.24 -30.1116 -3434.14 183.053 -26.6548 -1517.54 183.192 -26.6634 -1730.97 184.433 -26.1581 -6211.29 183.742 -28.0317 -4874.03 183.821 -27.876 -5050.97 184.158 -26.8894 -6085.27 184.207 -27.0411 -6842.24 182.748 -30.4289 -4616.49 182.907 -30.5005 -5377.23 181.716 -30.8928 -2280.84 181.857 -30.9449 -2908.52 183.37 -27.446 -2559.6 183.481 -27.5246 -3512.4 183.757 -27.5255 -4638.28 183.882 -27.4495 -4513.46 182.279 -29.5728 -2816.93 182.316 -29.6933 -3234.78 183.539 -28.741 -4606.24 183.685 -28.6532 -5055.61 182.155 -31.6366 -5597.67 182.186 -31.7928 -5297.78 180.509 -32.7116 -2249.43 180.564 -32.5395 -2289.27 183.358 -29.6062 -5265.42 183.361 -29.777 -5895.62 182.982 -30.1969 -5304.74 183.154 -30.1223 -6035.73 183.543 -27.7918 -4212.79 183.648 -27.9055 -4495.17 183.846 -25.9638 -3788.5 183.989 -26.0207 -3661.46 183.085 -31.2389 -8118.2 183.322 -31.1742 -7044.6 181.552 -29.273 -1763.9 181.757 -29.2018 -1290.45 185.151 -27.6614 -5669.28 185.194 -27.948 -5695.56 182.97 -28.8697 -3489.03 183.063 -28.7578 -3529.26 182.215 -31.0579 -4364.68 182.359 -31.1031 -4662.25 183.971 -28.4231 -7515.59 184.175 -28.3968 -8036.76 183.787 -26.83 -3669.45 183.848 -26.9537 -4334.36 182.514 -31.7227 -7612 182.917 -27.2498 -2584.73 183.04 -27.1742 -2472.83 181.211 -30.1322 -1569.85 181.393 -30.2165 -939.21 180.723 -30.911 -1942.01 180.941 -30.8881 -1823.54 180.601 -31.4401 -2152.02 180.828 -31.4395 -2160.76 180.519 -31.712 -2295.53 180.676 -31.871 -2243.42 180.683 -32.1934 -3003.24 182.796 -26.3036 -1495.17 182.767 -26.4828 -1503.63 181.751 -28.7927 -2115.85 181.861 -28.9253 -1670.79 182.479 -27.2043 -1297.1 182.619 -27.3166 -1349.73 181.45 -29.5065 -2094.69 181.634 -29.4668 -1387.73 180.347 -32.7997 -2778.61 180.427 -32.9505 -1045.2 180.147 -32.4455 -3368.89 180.246 -32.2624 -2833.21 179.96 -32.9727 -3189.57 180.226 -32.9514 -2806.72 179.784 -31.9359 -3110.77 180.057 -31.9399 -3143.38 180.139 -33.1492 -2472.4 180.363 -33.1082 -1507.93 180.649 -33.5777 -2757.37 180.756 -33.6851 -3182.65 182.879 -30.6557 -6261.05 182.962 -30.8136 -7121.61 182.96 -26.4191 -1588.05 182.992 -26.2556 -1583.94 181.388 -29.9677 -1511.98 181.55 -30.0486 -1176.67 182.071 -28.3976 -1405.54 182.153 -28.5469 -872.36 179.598 -34.3534 -1299.76 182.183 -32.856 -8107.55 182.216 -32.4457 -6901.96 180.848 -33.5848 -3288.44 181.022 -33.6272 -3962.91 180.452 -33.5214 -2223.72 182.205 -34.0143 -6634.7 180.63 -31.1632 -2282.04 180.785 -31.2906 -1990.12 182.494 -33.6818 -6498.73 182.728 -33.7546 -6124.48 183.194 -32.3537 -6286.83 183.387 -32.151 -6175.64 181.839 -33.7929 -8232.5 181.968 -32.5596 -6069.49 182.524 -32.0665 -9005.01 182.542 -31.8732 -7934.37 181.836 -33.6011 -7938.76 182.019 -33.5047 -8776.97 180.767 -33.7975 -3141.88 183.248 -30.8151 -8541.23 183.357 -30.9831 -7348.66 181.438 -32.5248 -4080.57 181.564 -32.4542 -4636.67 180.591 -32.3543 -2698.61 180.704 -32.4546 -592.93 182.232 -33.6322 -7531.6 182.425 -33.5075 -6827.74 180.304 -33.2816 -1259.43 180.43 -33.3785 -2115.98 181.028 -32.6538 -2286.22 181.077 -32.7582 -2784.41 181.611 -35.5642 -6714.99 181.924 -35.5416 -6478.2 181.747 -35.7827 -6287.59 181.917 -36.0218 -5910.53 181.723 -36.2845 -5460.43 182.128 -36.2758 -5648.03 182.248 -36.0086 -5858.99 182.269 -36.6014 -5077.65 182.424 -36.355 -5642 181.896 -36.5194 -4676.55 181.864 -36.8349 -4283.98 181.658 -37.1442 -3999.69 181.97 -37.1385 -4094.34 181.273 -37.2005 -3734.5 181.517 -37.3879 -3608.19 180.586 -35.8466 -4809.03 180.02 -36.491 -3138.14 180.117 -36.7236 -3747.23 180.569 -36.3495 -4752 180.217 -35.8843 -3269.82 180.37 -35.6285 -3995.12 179.964 -36.2516 -2889.37 180.248 -36.3075 -3602.89 180.524 -35.3923 -4714.6 179.965 -36.0238 -2662.38 179.716 -36.1446 -2719.2 179.668 -36.4263 -2613.01 179.668 -34.9746 -2560.77 179.933 -35.4588 -2828.69 180.07 -35.6491 -2830.79 179.53 -36.0101 -2554.61 179.748 -35.9218 -2509.24 179.392 -35.389 -2592.31 179.664 -35.4543 -2726.52 182.402 -34.6705 -5666.77 182.381 -34.424 -6078.93 180.355 -34.4436 -3525.4 180.361 -34.6482 -3644.72 179.965 -34.6262 -3023.63 180.194 -34.5782 -3441.97 179.747 -34.7692 -2811.65 179.933 -34.8694 -3059.88 179.869 -34.4003 -2543.57 180.113 -34.42 -3213.91 179.675 -34.5827 -2050.11 181.498 -36.6003 -4215.42 181.131 -36.8625 -3921.26 181.485 -36.9285 -4147.61 181.392 -35.7972 -6795.62 180.987 -36.0773 -6057.12 181.087 -35.8757 -6204.02 181.255 -36.052 -5746.4 181.567 -36.0361 -6000.2 180.829 -36.701 -4441.32 181.099 -36.4992 -4617.38 180.764 -36.9408 -4183.08 180.936 -37.1223 -3441.68 180.321 -36.5357 -4046.8 180.584 -36.5972 -5113.22 180.793 -36.4872 -5020.9 180.885 -36.291 -5592.56 180.228 -36.8972 -4564.04 180.382 -36.7467 -4929.38 180.475 -36.9496 -4805.71 180.609 -36.7884 -4732.39 182.403 -36.1765 -5724.73 182.701 -36.2258 -5663.47 182.611 -36.4989 -5433.19 182.956 -36.5263 -5438.89 182.046 -35.287 -6232.91 182.288 -35.5018 -6030.66 182.338 -35.196 -5905.74 181.898 -34.6442 -7007.15 182.142 -34.7777 -6236.1 182.38 -34.9293 -5930.85 182.662 -34.8191 -5503.34 181.714 -34.1165 -7175.36 181.75 -34.3118 -7598.55 181.739 -34.4854 -7585.52 181.935 -34.422 -6881.89 182.136 -34.3326 -6333.14 182.15 -34.5456 -6416.72 181.26 -34.4793 -5869.94 181.426 -34.4337 -5914.56 181.561 -34.5355 -7184.04 181.587 -34.384 -6891.47 181.389 -34.579 -6360.78 181.519 -34.7135 -6918.2 181.69 -34.6294 -7859.01 181.723 -34.7787 -7056.46 181.491 -34.098 -6011.58 181.563 -33.9668 -6680.37 181.732 -33.9439 -7621.83 181.944 -34.0147 -8095.65 180.794 -34.9403 -5186.74 181.026 -34.8472 -5580.97 180.425 -34.2677 -3485.3 180.601 -34.3554 -3707.87 180.518 -34.0016 -3108.53 180.561 -34.1621 -3489.9 180.372 -34.1179 -3050.09 180.474 -33.8439 -2720.66 180.648 -33.8898 -3049.23 180.327 -33.9552 -2632.32 179.798 -34.1803 -1611.89 179.968 -34.032 -1876.93 180.031 -34.2268 -2701 180.846 -34.753 -4804.81 180.884 -34.5959 -4550.14 180.938 -34.4441 -4752.6 181.083 -34.5542 -5117.32 181.109 -34.2379 -5734.56 181.165 -34.1068 -5194.06 181.11 -34.3916 -5284.07 181.291 -34.3188 -5693.45 181.213 -33.9875 -5060.51 181.318 -34.0917 -5295.93 181.38 -34.8632 -6841.87 181.572 -34.8942 -6926.31 180.17 -34.7604 -3328.21 180.368 -34.8392 -3417.29 180.559 -34.9028 -3952.51 180.601 -35.1251 -4557.44 180.894 -33.8279 -3639.24 180.969 -33.9172 -4136.21 181.107 -33.9087 -4682.18 181.063 -34.0168 -4665.89 181.928 -34.2299 -7341.73 182.104 -34.159 -6871.07 180.748 -34.4883 -4150.5 180.824 -34.3367 -4268.28 180.931 -34.212 -4299.17 180.98 -34.3246 -5076.17 182.089 -35.7681 -6082.05 182.428 -35.7955 -5886.23 182.571 -35.3386 -5777.15 182.675 -35.5887 -5772.18 180.628 -35.6063 -5155.4 180.797 -35.4771 -5560.16 180.887 -35.7052 -5951.31 180.751 -34.1921 -3823.11 180.893 -34.057 -4069.72 181.031 -34.1238 -4510.36 180.959 -35.325 -5764.25 181.232 -35.3314 -7504.5 181.324 -35.545 -7407.81 181.22 -34.823 -6474.28 181.205 -34.9905 -6207.28 181.276 -35.1548 -7436.16 181.439 -35.0513 -7266.78 180.997 -34.6913 -5234.98 181.146 -34.706 -6281.13 181.24 -34.606 -6183.3 181.316 -34.7143 -6585.6 181.256 -34.1893 -5521.55 181.399 -34.2057 -5688.96 181.456 -34.3138 -6068.14 181.568 -34.2393 -6393.66 181.733 -34.9359 -6573.44 181.906 -34.8768 -6682.74 181.829 -35.1011 -6749.5 182.11 -35.0233 -6175.73 180.745 -35.2911 -5395.86 180.856 -35.1448 -5643.68 180.99 -35.0187 -5885.07 181.086 -35.1647 -6070.45 180.697 -34.0379 -3371.26 180.809 -33.9191 -3495.33 180.549 -34.5525 -3952.26 180.707 -34.6517 -4181.06 180.536 -34.7287 -3883.2 180.685 -34.7942 -4454.13 181.633 -35.0347 -6953.3 181.592 -35.191 -6951.81 181.751 -35.3432 -6563.24 179.459 -35.6465 -2637.21 179.554 -35.8383 -2547.79 179.767 -35.6866 -2609.39 179.953 -35.8328 -2476.03 180.073 -33.5476 -1953.75 180.091 -33.7334 -1694.43 182.455 -34.0333 -6135.27 182.552 -33.8654 -6310.27 181.406 -35.2191 -7443.93 181.488 -35.367 -7074.03 181.06 -35.516 -6790.09 181.151 -35.6891 -7586.55 182.287 -36.9919 -4156.81 182.668 -36.7892 -5293.12 178.799 -33.9576 -2807.37 178.977 -33.7489 -3065.9 180.207 -35.4243 -2961.06 180.324 -35.1974 -3612.56 180.271 -33.4538 -959.08 180.275 -33.6269 -1655.49 180.13 -33.9062 -2114.66 180.179 -34.0824 -2693.79 182.956 -33.8285 -5761.57 183.125 -34.0175 -5662.99 182.634 -35.0961 -5668.27 179.522 -34.1077 -2340.43 179.745 -33.9682 -2182.07 180.72 -36.0947 -5340.86 180.855 -35.9165 -5955.11 181.308 -32.7517 -2978.66 181.451 -32.68 -2887.16 181.38 -33.9725 -5626.36 181.451 -33.8452 -5788.55 181.174 -33.5121 -4967.26 181.328 -33.6005 -5814.75 182.118 -32.553 -6318.7 182.285 -32.6411 -7917.75 181.739 -32.6918 -5640.26 181.786 -32.8408 -5421 180.46 -33.6865 -2403.65 180.625 -33.7468 -2830.67 180.163 -35.0006 -3181.58 180.404 -35.0074 -3520.48 179.503 -33.862 -3193.17 179.727 -33.7895 -2390.36 182.406 -32.459 -8576.76 182.643 -32.436 -8136.31 181.119 -36.2398 -5054.35 181.372 -36.2853 -5014.64 179.326 -36.5005 -2440.81 179.454 -36.6939 -2430.92 178.927 -35.8705 -2510.36 182.302 -32.3211 -7244.57 182.475 -32.272 -8893.36 181.89 -32.6961 -5687.53 182.071 -32.6852 -6144.47 181.639 -33.5249 -6372.08 181.817 -33.4209 -7310.21 181.662 -32.1749 -4189.97 181.698 -32.0434 -4177.54 179.88 -35.0952 -2990.38 180.057 -35.2435 -3078.69 181.167 -32.6859 -2688.95 181.292 -32.601 -3066.96 183.055 -34.5172 -5710.72 183.31 -34.7388 -5217.91 183.897 -33.8489 -5291 183.869 -34.1817 -5435.07 182.381 -31.795 -6652.69 182.341 -31.9386 -6406.96 180.161 -36.1126 -3649.08 180.417 -36.0969 -4232.19 182.94 -34.7177 -5566.29 182.969 -34.9678 -5479.73 180.973 -33.4728 -3693.62 181.078 -33.3772 -3811.37 182.442 -32.8287 -8539.88 182.55 -32.6391 -8421.11 181.55 -33.0449 -5747.1 181.587 -33.1787 -6060.5 182.004 -33.6754 -8543.23 182.093 -33.8294 -7753.59 181.98 -32.8081 -5910.02 181.971 -32.9556 -6795.39 179.632 -35.2201 -2785.74 179.831 -35.2953 -2870.8 178.386 -35.7205 -2135.25 178.728 -35.688 -2274.43 184.496 -24.9341 -4384.81 184.815 -24.8918 -7532.9 184.548 -25.336 -4778.1 184.769 -25.3784 -6717.21 184.596 -25.5318 -5852.57 184.504 -24.0909 -5463.41 184.664 -24.342 -6942.05 184.294 -25.0947 -4703.18 184.482 -25.1618 -4771.68 184.607 -24.6587 -5949.91 184.106 -24.7124 -3885.38 184.221 -24.8848 -4230.85 184.078 -25.0415 -3437.46 184.137 -25.2602 -3334.89 184.363 -24.259 -4825.45 184 -24.057 -1559.82 184.26 -24.0219 -3554.93 183.951 -24.5695 -1565.7 183.739 -25.634 -1802.08 183.793 -25.4808 -1292.32 184.015 -24.8599 -2178.63 183.947 -25.3668 -3233.05 183.868 -24.2996 -1047.9 184.027 -24.3814 -1925.37 183.782 -24.0725 -747 183.843 -23.9159 -897.56 183.933 -25.1757 -2994.2 183.809 -24.6783 -1277 183.946 -24.7282 -1974.41 183.685 -24.7856 -1184.3 183.17 -24.4969 -985.5 183.409 -24.6829 -969.89 183.509 -24.5854 -747 183.175 -24.7629 -1111.33 183.319 -24.7831 -1011.02 183.628 -24.1369 -1014.69 183.749 -24.2182 -848.73 183.548 -24.7186 -842.2 183.657 -24.6301 -846.18 183.771 -24.5268 -851.31 183.865 -24.4286 -932.34 183.3 -24.3953 -874.05 183.458 -24.4491 -793.16 183.636 -24.2616 -944.53 183.875 -24.1755 -990.35 183.211 -24.891 -1454.85 183.372 -24.9075 -768.2 183.518 -25.4188 -721.02 183.626 -25.5353 -1041.87 183.442 -25.0313 -726.1 183.514 -24.9126 -732.3 183.456 -24.8041 -797.92 183.567 -24.8225 -831.13 183.721 -24.3669 -747 183.28 -25.0301 -811.55 183.358 -25.1601 -546.35 183.562 -24.3518 -747 183.614 -24.4891 -747 183.421 -24.3091 -771.18 183.522 -24.2274 -1014.37 183.434 -25.2906 -531.92 184.602 -25.9424 -6577.59 183.955 -25.5322 -3010.69 184.394 -25.4934 -4361.72 183.597 -25.6898 -1265.66 183.721 -25.7715 -2446.03 183.835 -25.8335 -3567.23 183.839 -25.717 -3355.09 183.929 -25.7723 -3439.57 183.962 -25.8799 -3595.49 183.856 -25.6096 -2773.55 183.953 -25.6686 -3390.16 184.079 -25.6095 -3357.77 184.066 -25.7629 -3073.65 184.184 -25.6794 -4257.51 184.322 -25.6602 -4534.72 184.125 -25.9231 -3908.82 184.242 -25.7957 -4294.56 184.33 -25.9576 -5028.93 184.429 -25.7858 -4353.36 182.436 -24.0413 -1997 182.707 -24.0954 -1997 183.846 -24.8299 -1582.73 183.896 -24.989 -2460.47 185.165 -24.8414 -5905.41 185.424 -25.0939 -5378.25 184.968 -25.4687 -5672.72 185.285 -25.4812 -5075.33 184.687 -25.1437 -5866.4 185.013 -25.1827 -6199.35 183.659 -25.4001 -1001.41 183.766 -25.2806 -1439.71 184.777 -24.0342 -7759.14 185.068 -24.2382 -8029.63 184.332 -24.7031 -4736.91 184.392 -24.4801 -4669.06 184.097 -25.4561 -3493.92 184.22 -25.5544 -3446.85 184.243 -25.4135 -3618.76 184.356 -25.2935 -4567.52 183.607 -25.0273 -1033.58 183.281 -24.2376 -1160.33 183.403 -24.1931 -1157.27 183.253 -24.6518 -1247 183.349 -24.5457 -1100.76 184.988 -25.6903 -5239.8 185.216 -25.8702 -3992.4 184.469 -25.6419 -4958.92 184.609 -25.7171 -5731.67 183.622 -24.893 -877.8 183.739 -24.9351 -1642.78 183.982 -24.2276 -1874.46 184.14 -24.2245 -3568.84 183.516 -25.1569 -586.01 183.592 -25.2851 -679.26 183.649 -25.169 -831.94 183.766 -25.0951 -1673.81 184.171 -24.5402 -3997 184.218 -24.3775 -3711.03 183.102 -25.0264 -1268.84 183.189 -25.1684 -972.63 185.32 -24.5251 -6129.4 185.496 -24.7868 -5403.16 184.776 -25.7804 -5724.13 184.896 -25.9416 -3351.85 185.071 -26.1244 -4104.83 185.067 -26.3991 -4339.43 183.012 -25.1928 -962.07 183.117 -25.2996 -859.11 175.157 -41.8566 -1977.57 175.216 -41.8323 -1745.99 176.635 -41.5181 -1761.42 176.762 -41.4476 -2043.19 176.019 -41.5491 -1239.85 175.246 -42.0269 -2481.44 175.331 -42.0019 -2397.29 175.349 -42.0599 -2434.86 176.179 -41.6238 -2025.8 176.219 -41.5656 -1892.57 174.864 -41.8936 -1272.94 174.97 -41.955 -1927.66 175.264 -42.1162 -2563.85 175.386 -42.1414 -2618.33 175.456 -42.0674 -2262.19 175.516 -42.1441 -2576.8 175.407 -42.0034 -2455.44 175.505 -41.9924 -2474.52 175.587 -41.8929 -2443.26 175.667 -41.8633 -2475.17 175.572 -41.9482 -2482.5 175.054 -42.0315 -2489.77 175.09 -41.961 -2364.24 175.131 -41.904 -2166.4 175.194 -41.9544 -2294.32 176.355 -41.4241 -1262.16 176.446 -41.3871 -1321.71 176.214 -41.4499 -1199.17 176.17 -41.5088 -1402.02 176.287 -41.4541 -1306.25 176.871 -41.3728 -2077.77 176.887 -41.4862 -2455.5 176.503 -41.5354 -1783.12 176.536 -41.4444 -1832.09 175.943 -41.7394 -2188.82 175.905 -41.7878 -2287.61 175.982 -41.8095 -2330.67 175.645 -41.8053 -2327.77 175.709 -41.8149 -2362.65 175.59 -41.7883 -2231.57 175.625 -41.7587 -2009.07 175.338 -41.8605 -1953.81 175.36 -41.9537 -2350.09 175.437 -41.9423 -1945.37 175.94 -41.6808 -1897.91 176.002 -41.6414 -1915.92 176.03 -41.592 -1340.73 176.09 -41.6224 -2015.9 176.263 -41.6267 -2047.24 176.299 -41.7 -1997.86 176.359 -41.6248 -2046.07 176.464 -41.6142 -1959.89 176.27 -41.3974 -1094.49 176.349 -41.3396 -1135.5 176.052 -41.86 -2674.6 176.077 -41.7998 -2200.69 176.124 -41.8442 -2700.61 175.747 -41.858 -2503.39 175.773 -41.81 -2450.56 175.817 -41.8528 -2565.03 175.9 -41.8479 -2548.94 176.264 -41.7858 -2646.18 176.376 -41.7745 -2775.52 176.423 -41.6935 -2655.62 175.963 -41.5837 -1628.57 175.206 -41.8902 -2039.97 175.272 -41.8709 -1959.46 175.256 -41.9182 -2147.59 175.286 -41.9619 -2207.88 175.668 -41.7289 -1711.26 175.683 -41.771 -2126.35 175.822 -41.5932 -1033.88 175.859 -41.6188 -1454.4 175.878 -41.6645 -1771.33 175.89 -41.706 -1984.54 175.735 -41.7779 -2214.02 175.788 -41.7541 -2359.17 175.84 -41.7991 -2395.31 175.723 -41.7397 -1832.62 175.76 -41.7053 -1772.46 175.828 -41.6994 -2124.8 175.865 -41.7472 -2232.55 175.784 -41.6639 -1710.84 175.831 -41.6543 -1975.17 175.656 -41.6892 -1301.8 175.705 -41.7004 -1528.27 175.692 -41.6691 -1264.37 175.732 -41.6683 -1229.46 175.902 -41.5914 -1422.98 175.924 -41.63 -1649.11 175.59 -41.8348 -2387.67 175.976 -41.8724 -2644.37 176.025 -41.9274 -2667.26 175.566 -42.0669 -2454.8 175.669 -42.0584 -2475.08 175.585 -42.2116 -2722.8 175.397 -41.8543 -1952.07 175.448 -41.8816 -2166.04 175.519 -41.8573 -2267.07 175.51 -41.9186 -2192.07 176.666 -41.7598 -2808.23 176.799 -41.6703 -2851.87 176.562 -41.5962 -2303.32 176.663 -41.6314 -2678.52 176.772 -41.5573 -2632.32 176.883 -41.59 -2818.1 175.854 -41.8997 -2451.45 175.926 -41.9217 -2591.67 175.841 -41.9699 -2583.03 175.859 -42.068 -2563.08 175.051 -41.905 -2153.83 175.089 -41.8498 -1662.19 176.145 -41.6815 -2087.3 176.218 -41.6728 -2091.05 176.164 -41.7953 -2483.87 176.2 -41.7295 -2087.79 175.74 -41.9573 -2541.52 175.759 -42.0294 -2529.68 175.64 -42.1373 -2529.12 175.755 -42.1157 -2535.49 175.653 -41.9381 -2505.7 175.719 -41.904 -2546.15 175.787 -41.9059 -2571.64 175.969 -42.0115 -2616.48 176.127 -41.9067 -2702.63 176.108 -41.9926 -2665.56 176.365 -41.2722 -1198.11 176.451 -41.2867 -1117.4 176.429 -41.4747 -1816.59 176.554 -41.3437 -1562.69 176.652 -41.3989 -1640.59 175.316 -41.911 -2123.68 175.384 -41.9011 -2205.32 175.062 -41.7795 -1439.76 175.15 -41.8017 -1640.5 175.904 -42.429 -2053.67 176.037 -42.3589 -2462.67 176.328 -41.8581 -2740.92 176.84 -41.2876 -1527.99 176.952 -41.2729 -1826.25 176.079 -41.5152 -1115.25 176.122 -41.452 -1486.99 175.307 -42.3273 -2551.52 175.45 -42.3835 -2473.03 175.146 -42.0119 -2536.98 175.149 -42.0822 -2642.89 175.958 -42.1093 -2591.04 176.075 -42.0928 -2618.64 176.209 -41.8572 -2734.85 176.249 -41.9529 -2703.31 176.03 -41.7482 -2079.19 176.113 -41.7415 -2017.44 176.305 -41.5632 -2004.81 176.399 -41.5514 -1906.13 176.391 -41.2194 -1188.76 176.475 -41.1899 -1191.08 176.456 -42.0614 -2712.34 176.586 -41.9907 -2744.4 175.907 -41.5544 -1305.68 175.959 -41.5301 -1247.91 175.752 -41.6305 -1123.97 175.804 -41.6247 -1270.61 175.609 -42.0014 -2401.21 175.687 -41.9975 -2436.37 176.072 -41.5688 -1252.09 176.136 -41.5675 -1670.86 176.255 -41.5045 -1485.52 176.339 -41.4954 -1742.71 176.325 -41.1833 -886.91 176.391 -41.1448 -1030.58 176.335 -42.0322 -2700.93 176.424 -41.9423 -2727.77 175.997 -41.7006 -2105.49 176.063 -41.6905 -2123.4 180.768 -32.3385 -1083.65 180.858 -32.204 -1095.61 180.465 -31.9524 -2795.48 180.617 -32.046 -3320.39 182.571 -32.9804 -7240.33 182.692 -32.84 -6883.11 182.509 -36.0227 -5829.01 182.764 -35.907 -5639.4 174.976 -42.2935 -2566.1 175.043 -42.2096 -2553.55 176.04 -42.4716 -1743.25 176.176 -42.4377 -1880.88 176.59 -42.1027 -2721.16 176.666 -42.2248 -2530.11 176.439 -41.8414 -2747.66 176.557 -41.868 -2765.4 177.197 -42.1257 -2964.03 177.277 -42.2533 -2685.85 174.653 -42.4335 -2447.81 174.757 -42.377 -2503.58 174.114 -42.5072 -1991.12 174.121 -42.6117 -2138.04 175.457 -43.0339 -274.99 175.612 -43.0101 -504.7 175.747 -43.6558 -298.15 175.796 -43.7604 -363.34 174.754 -43.2601 -400.37 174.893 -43.209 -299.96 178.224 -42.4648 -2293.58 178.439 -42.4103 -2305.33 177.994 -43.7869 -491.89 178.169 -43.7917 -489.97 176.022 -43.5731 -340.91 176.117 -43.4633 -366.62 177.419 -42.7026 -1050.14 177.479 -42.8188 -597.44 177.742 -42.7242 -930.6 177.887 -42.6525 -1176.64 175.327 -42.9683 -422.59 175.455 -42.9183 -566.04 176.699 -42.545 -1758 176.871 -42.4825 -1942.98 176.278 -42.653 -974.54 176.326 -42.7618 -685.44 174.623 -43.0324 -651.42 174.776 -43.0622 -548.56 174.674 -43.1458 -495.57 174.798 -43.1576 -378.46 173.767 -42.6031 -1228.77 173.872 -42.6121 -1485.9 173.91 -42.5275 -1207.84 174 -42.567 -1660.5 173.905 -43.2118 -647.3 174.042 -43.1537 -713.3 173.772 -43.4823 -92.93 173.877 -43.4749 -233.62 173.944 -43.7555 -135.82 174.067 -43.735 -370.03 174.122 -43.055 -838.58 174.206 -43.1271 -664.21 174.396 -42.9245 -1069.7 173.538 -43.3657 -486.43 173.591 -43.4201 -117.91 173.754 -42.8517 -789.24 173.851 -42.82 -1092.19 174.261 -43.443 -556.28 174.388 -43.4109 -569.06 173.819 -43.0716 -1070.09 173.909 -43.126 -688.77 174.903 -43.3109 -319.48 175.026 -43.3504 -135.05 174.138 -42.3642 -1386.67 174.231 -42.3062 -1082.33 173.819 -42.8951 -962.04 173.829 -42.9772 -1043.06 173.781 -43.2444 -632.4 173.801 -43.1581 -894.34 173.685 -43.1917 -1081.16 173.694 -43.1102 -272.72 174.411 -42.8222 -1320.21 174.566 -42.7589 -1379.91 174.861 -43.6187 -396.13 174.99 -43.6425 -367.35 175.673 -43.1161 -294.3 175.775 -43.0701 -472.02 175.745 -42.6759 -1093.75 175.872 -42.6351 -1183.27 174.26 -44.9228 -981.1 175.195 -42.3943 -2456.96 175.307 -42.4499 -2239.14 176.871 -43.6157 -377.19 176.95 -43.6981 -471.89 174.934 -43.4243 -247.6 175.924 -44.0438 -365.05 176.025 -44.1088 -197.48 174.212 -44.7412 -860.26 174.463 -44.779 -895.53 176.501 -41.7684 -2775.71 176.546 -41.678 -2729.22 176.404 -42.6678 -1103.26 176.538 -42.6133 -1176.45 176.808 -44.5048 -1068.86 176.677 -42.3916 -2425.7 176.806 -42.3351 -2514.07 178.071 -41.5967 -2925.68 178.192 -41.4458 -2984.54 174.157 -42.4327 -1454.76 174.244 -42.3979 -1444.44 172.336 -44.1144 -46.63 172.35 -44.163 -47.85 174.224 -42.4693 -1888.13 174.244 -42.5496 -2211.1 173.507 -43.5474 -144.1 173.544 -43.4897 -183.74 164.799 -45.5722 -4547.98 165.195 -45.4879 -4495.54 166.233 -45.4282 -3944.71 166.322 -45.3978 -3882.87 166.43 -45.4359 -3377.24 166.43 -44.9555 -3907.53 166.483 -45.0221 -4075.17 165.61 -45.7863 -3543.87 165.637 -45.9402 -3538.21 166.299 -44.0378 -3805.92 166.254 -44.2709 -3788.49 166.633 -44.8918 -3935.05 166.728 -44.913 -3408.72 166.146 -46.0991 -97 166.144 -46.0164 -186.88 166.327 -45.8854 -256.51 166.321 -45.9434 -232 166.616 -45.3388 -2060.64 166.651 -45.3271 -2087.72 166.5 -45.5322 -2109.58 166.526 -45.5067 -2004.57 166.748 -45.136 -2478.02 166.789 -45.1065 -2498.08 166.398 -45.3905 -3704.88 166.439 -45.3448 -3678.51 166.646 -45.1655 -2921.98 166.745 -45.2952 -1232.13 166.78 -45.2965 -518.04 166.332 -45.7163 -1339.81 166.363 -45.7534 -581.58 166.544 -45.5273 -1584.69 166.56 -45.5473 -1226.66 166.678 -45.3456 -1677.1 166.686 -45.3198 -1990 166.705 -45.3378 -1469.22 166.773 -45.2515 -1221.34 166.775 -45.2756 -965.54 166.799 -45.1426 -2086.81 166.835 -45.119 -1990.95 166.71 -45.1692 -2702.06 166.736 -45.2064 -2085.08 166.655 -45.2415 -3080.44 166.63 -45.2757 -2971.6 166.621 -45.308 -2518.2 166.874 -45.1302 -1895.84 166.628 -45.0519 -3416.96 166.675 -45.0849 -2833.26 166.738 -45.2688 -1970.85 166.812 -45.1743 -1528.03 166.856 -45.1804 -1220.31 166.765 -45.1719 -1845.89 166.786 -45.2003 -1250.48 166.843 -45.1511 -1794.98 166.884 -45.1574 -1234.52 166.806 -45.2182 -850.34 166.827 -45.2011 -990.52 166.648 -45.4042 -1127.2 166.674 -45.3755 -1230.95 166.802 -45.0206 -1880.99 166.833 -45.0505 -1284.62 166.45 -45.2032 -4023.49 166.473 -45.2546 -3765.5 166.391 -45.4854 -3102.58 166.448 -45.5167 -2862 166.273 -45.2407 -4170.03 166.348 -45.278 -3948.79 166.467 -45.3919 -3345.67 166.506 -45.3507 -3324.97 166.714 -45.3829 -651.07 166.7 -45.4065 -606.23 166.904 -45.1382 -1217.37 166.92 -45.1543 -529.57 166.804 -45.2382 -575.36 166.834 -45.2256 -531.73 166.503 -45.5689 -1638.6 166.531 -45.5498 -1579.65 166.534 -45.3951 -2662.82 166.66 -45.2989 -2485.03 166.669 -45.2726 -2812.56 166.677 -45.2046 -2697.26 166.702 -45.231 -2660.13 166.571 -45.3555 -2368.63 166.594 -45.3996 -1812.39 166.537 -45.2116 -3366.15 166.582 -45.1679 -3164.31 166.536 -45.2697 -3297.08 166.585 -45.2892 -2968.46 166.593 -45.2478 -2809.34 166.615 -45.2065 -2730.54 166.465 -45.4742 -3126.93 166.494 -45.5004 -2514.9 166.315 -45.4637 -3774.29 166.371 -45.4344 -3694.86 166.366 -45.2135 -4123.96 166.411 -45.2488 -3987.32 166.547 -44.9555 -3925.43 166.571 -45.0173 -3825.11 166.625 -45.3711 -1631.52 166.649 -45.3516 -1715.5 166.545 -45.3149 -2955.54 166.588 -45.3213 -2461.27 166.725 -44.8379 -3730.89 166.79 -44.8674 -3087.61 165.861 -45.1952 -3750.14 165.932 -45.3339 -4159.06 166.189 -45.8501 -1296.34 166.232 -45.7933 -1274.87 174.699 -41.0256 -164.57 174.823 -41.0029 -63.13 174.678 -40.9131 -172.87 174.748 -41.0176 -146.06 174.741 -41.0513 -136.8 174.853 -41.0117 -35.66 174.855 -40.9904 -52.75 174.736 -41.1372 -67.82 174.762 -41.1199 -36.44 174.702 -41.0941 -185.5 174.703 -41.0636 -203.11 174.735 -41.1102 -102.44 174.739 -41.0827 -104.21 174.671 -41.0479 -163.09 174.816 -40.8008 -114.65 174.867 -40.8127 -100.54 174.767 -40.8608 -111.18 174.775 -40.8256 -113.74 174.934 -40.7981 -43.4 174.973 -40.7882 -48.73 174.863 -40.7753 -98.88 174.901 -40.7937 -79.21 174.729 -40.9236 -131.59 174.774 -40.9338 -127.72 174.825 -41.038 -50.53 174.838 -41.0244 -42.78 174.744 -40.9581 -143.74 174.767 -40.8993 -121.99 174.807 -40.9122 -117.63 174.88 -41.0112 -26.31 174.893 -40.9878 -26.97 174.763 -40.9877 -140.89 174.816 -40.9426 -87.81 174.821 -40.9731 -20.86 174.807 -40.881 -125.43 174.834 -40.8946 -119.57 174.618 -40.989 -186.39 174.649 -41.022 -135.77 174.451 -41.0344 -139.55 174.489 -41.0691 -217.44 174.427 -41.1243 -100.7 174.47 -41.113 -167.48 174.505 -41.029 -201.11 174.552 -41.0541 -188.8 174.789 -41.0138 -98.63 174.816 -41.0234 -68.31 174.602 -41.0296 -216.94 174.636 -41.0547 -180.31 174.626 -41.1272 -237.29 174.666 -41.1078 -222.78 174.646 -40.9493 -182.42 174.697 -40.9527 -155.19 174.525 -41.2574 -260.25 174.556 -41.2871 -147.92 174.547 -41.3378 -182.07 174.59 -41.3138 -106.72 174.686 -41.3707 -46.47 174.68 -41.4073 -151.24 174.608 -41.3447 -70.68 174.638 -41.3766 -53.96 174.195 -40.4423 -104.08 174.26 -40.4289 -105.77 174.67 -40.9876 -144.47 174.719 -40.9879 -181.53 174.584 -41.0935 -299.05 174.601 -41.0638 -251.99 174.538 -41.3927 -244.84 174.589 -41.3737 -147.51 174.826 -41.4744 -419.08 174.878 -41.4708 -139.77 174.63 -41.0873 -238.35 174.668 -41.0762 -215.86 174.785 -40.9637 -112.16 174.796 -40.9879 -70.45 174.928 -40.7059 -83.49 174.981 -40.6916 -72.89 174.14 -41.5088 -14.44 174.187 -41.5225 -29 174.16 -40.7467 -79.2 174.194 -40.7909 -76.26 174.122 -40.875 -96.94 174.155 -40.8353 -74.73 175.097 -41.4612 -40.46 175.132 -41.4316 -17.22 174.961 -41.5551 -684.42 174.996 -41.515 -279.32 174.863 -41.5029 -504.69 174.88 -41.5463 -318.71 174.658 -41.1613 -161.56 174.67 -41.1349 -163.9 174.068 -41.4156 -10.62 174.106 -41.4222 -18.67 174.071 -41.4482 -12.28 174.069 -41.4788 -7.46 174.188 -41.5664 -12.6 174.23 -41.5846 -31.11 174.358 -41.6681 -82.06 174.375 -41.7096 -104.96 174.328 -41.8112 -107.3 174.374 -41.8413 -141.58 174.209 -41.6877 -9.88 174.253 -41.7059 -13.43 174.67 -41.5282 -196.16 174.732 -41.5103 -118.83 174.745 -41.9146 -424 174.781 -41.8452 -401.63 175.027 -41.4108 -46.24 175.076 -41.4195 -24.95 174.776 -41.0429 -101.8 174.804 -41.0381 -75.3 174.717 -36.5791 -6.87 174.852 -36.5818 -24.38 174.833 -36.5658 -23.87 174.779 -36.4767 -13.71 174.795 -36.4619 -8.62 174.763 -36.5094 -12.43 174.726 -36.5635 -7.72 174.763 -36.4004 -1.18 174.793 -36.5878 -10.69 174.733 -36.5948 -6.89 174.751 -36.603 -8.01 174.781 -36.5697 -15.76 174.737 -36.5757 -10.62 174.757 -36.5693 -14.26 174.733 -36.5247 -8.38 174.738 -36.5159 -7.42 174.748 -36.5102 -0.41 174.72 -36.5515 -3.93 174.741 -36.5337 -11.76 174.745 -36.5218 -9.79 174.742 -36.547 -12.31 174.742 -36.5602 -12.01 174.792 -36.5505 -17.15 174.749 -36.5859 -11.43 174.766 -36.5871 -12.48 174.806 -36.5686 -17.34 174.817 -36.5474 -22.61 174.78 -36.5165 -10.09 174.801 -36.5268 -21.93 174.802 -36.4858 -20.04 174.755 -36.5185 -12.58 174.729 -36.5431 -7.83 174.732 -36.553 -9.3 174.858 -36.5562 -26.81 174.764 -36.524 -15.86 174.778 -36.5346 -17.46 174.752 -36.5273 -14.3 174.757 -36.5388 -15.32 174.848 -36.5056 -27.82 174.861 -36.5306 -29.3 174.779 -36.4032 -4.58 174.799 -36.4128 -7.12 174.831 -36.527 -24.91 174.84 -36.5454 -25.04 174.877 -36.6005 -6.52 174.917 -36.6142 -27.14 174.881 -36.5695 -28.07 174.88 -36.5471 -30.41 174.907 -36.5526 -33.62 174.912 -36.5813 -31.24 174.889 -36.4662 -30.17 174.847 -36.4627 -23.18 174.865 -36.4806 -29.92 174.754 -36.5535 -14.14 174.77 -36.5527 -16.32 174.796 -36.5063 -7 174.818 -36.5059 -22.1 174.953 -36.5097 -43.66 174.944 -36.5595 -39.24 174.895 -36.5282 -34.48 174.928 -36.5305 -41.21 174.943 -36.4826 -44.32 175.121 -36.5623 -44.71 175.068 -36.4568 -44.85 175.128 -36.4754 -45.06 175.01 -36.4592 -46.93 175.034 -36.4991 -44.11 174.989 -36.5208 -43.98 175.026 -36.5476 -42.78 174.999 -36.578 -41.03 174.879 -36.665 -24.82 174.957 -36.6697 -27.54 175.229 -36.6292 -39.57 175.262 -36.6363 -36.25 175.293 -36.5807 -37.57 175.197 -36.6769 -37.69 175.231 -36.6585 -37.92 175.195 -36.7078 -35.99 174.839 -36.7099 -17.09 174.878 -36.6994 -22.24 174.806 -36.6592 -15.52 174.843 -36.6433 -18.59 174.773 -36.6607 -11.85 174.784 -36.6818 -12.57 175.065 -36.6536 -37.73 175.244 -36.8976 -14.55 175.286 -36.8777 -25.16 174.95 -36.7081 -17 174.98 -36.7259 -17 175.127 -36.5174 -44.15 175.173 -36.5414 -43.77 175.431 -36.7663 -11.13 175.463 -36.7825 0.34 175.316 -36.9398 -22.86 175.357 -36.9409 -22.22 175.382 -36.7582 -30.39 175.411 -36.7345 -16.9 174.959 -36.5339 -43.09 174.981 -36.5521 -43.34 175.473 -37.1013 -1.08 174.988 -36.8626 -3.64 175.014 -36.8638 -1.76 175.106 -36.8667 -3.91 175.116 -36.8862 -2.73 175.253 -36.8189 -27.26 175.288 -36.8383 -29.86 174.909 -36.8225 -6.77 174.929 -36.8176 -7.09 174.925 -36.8325 -7.49 174.936 -36.849 -6.53 175.372 -37.1774 0.46 175.42 -37.1785 1.09 175.604 -36.653 -22.11 175.172 -36.3608 -47 175.175 -36.4057 -46.5 175.167 -36.3212 -49.92 175.212 -36.3354 -46.96 174.814 -36.6865 -16.19 174.843 -36.6772 -20.08 174.855 -36.6212 -20.37 174.883 -36.632 -25.03 175.274 -36.6749 -38.08 175.27 -36.7848 -29.75 175.29 -36.8087 -30.75 175.214 -36.7336 -38.13 175.245 -36.7572 -31.34 174.907 -36.425 -38.73 175.03 -36.4287 -46.81 175.07 -36.4088 -46.9 174.822 -36.4686 -17.15 174.833 -36.4847 -25.17 174.847 -36.2489 -51.12 174.87 -36.2802 -46.97 174.936 -36.3128 -49.28 174.969 -36.3322 -47.58 174.97 -36.1908 -47.51 175.021 -36.1993 -43.63 174.945 -36.2396 -50.99 175.001 -36.2351 -47.06 174.981 -36.3908 -49.84 174.893 -36.3593 -45.82 174.928 -36.3449 -49.12 174.942 -36.403 -47 174.94 -36.438 -40.58 174.914 -36.4755 -33.19 174.915 -36.5029 -36.29 174.91 -36.453 -32.9 174.934 -36.462 -38.41 174.919 -36.3757 -49.84 174.957 -36.3679 -47.02 174.888 -36.38 -40.94 174.901 -36.3978 -40.63 175.256 -36.1165 -72.96 175.164 -36.2891 -46.01 175.202 -36.2976 -49.16 175.152 -36.2253 -49.92 175.19 -36.2589 -27.4 175.279 -36.1932 -43.66 175.275 -36.2845 -49.09 175.312 -36.2725 -43.75 175.282 -36.2181 -39.69 175.277 -36.2524 -48.99 175.2 -36.2174 -48.84 175.243 -36.2043 -47 175.209 -36.1822 -57.89 175.25 -36.175 -52.61 175.226 -36.1488 -66.08 175.261 -36.1495 -61.04 175.223 -36.0739 -85.85 175.28 -36.0779 -78.07 175.391 -36.321 -35.54 175.398 -36.3586 -41.86 175.238 -36.238 -39.42 175.238 -36.2744 -47.23 174.879 -36.5056 -31.98 174.892 -36.4861 -32.59 175.123 -36.7016 -33.21 175.133 -36.7257 -30.75 175.058 -36.6133 -41.28 175.098 -36.6325 -40.86 174.99 -36.6922 -15.53 175.033 -36.6789 -29.11 174.947 -36.5922 -36.89 174.97 -36.5755 -41.43 174.961 -36.627 -35.03 175.02 -36.7149 -22.37 175.053 -36.7075 -29.23 175.049 -36.7371 -24.99 175.079 -36.7475 -25.37 175.011 -36.7439 -19.18 175.03 -36.7613 -17.88 175.003 -36.8203 -6.84 175.001 -36.8405 -7.03 175.073 -36.8693 -3.48 175.086 -36.8512 -1.48 175.146 -36.8895 -2.7 175.152 -36.9066 0.76 175.205 -36.9213 -6.11 175.228 -36.9253 -9.54 175.258 -36.9313 -9.2 175.287 -36.9172 -16.87 176.219 -36.8033 -205.67 176.23 -36.6341 -464.28 176.125 -36.7449 -160.55 176.138 -36.7932 -149.84 176.15 -36.6182 -249.79 176.187 -36.5536 -407.97 176.024 -36.5237 -167.97 176.018 -36.7712 -103.13 175.924 -36.8967 -61.58 175.973 -36.8954 -74.76 175.947 -36.8677 -77.94 175.924 -36.8248 -77.23 175.925 -36.6958 -47.13 175.93 -36.7371 -60.99 175.856 -36.8728 -46.92 175.86 -36.8966 -37.46 176.021 -36.8904 -80.1 176.034 -36.8491 -97 175.956 -36.8396 -85.97 175.987 -36.8617 -90.82 175.992 -36.8262 -97 176.032 -36.8061 -97 175.871 -36.9539 -23.18 175.976 -36.9522 -47 175.964 -36.9855 -47 175.842 -36.6803 -8.21 175.856 -36.7074 -22.5 175.995 -36.5762 -125.89 176.007 -36.6245 -112.27 176.18 -36.7521 -188.09 176.263 -36.7278 -478.77 175.728 -36.3772 -78.96 175.781 -36.3856 -82.43 176.212 -37.0409 -258.04 176.275 -37.0171 -405.08 176.192 -36.9825 -167.93 176.006 -37.0895 -62.46 176.061 -37.0885 -87.04 175.928 -36.8477 -74.69 176.327 -36.6508 -891.8 176.398 -36.7278 -1148.41 176.438 -36.9401 -1252.79 176.465 -36.843 -1497 175.881 -36.7877 -52.01 175.892 -36.8138 -63.32 175.861 -36.8059 -48.71 175.823 -36.7793 -26.08 175.836 -36.7599 -28.87 175.811 -36.7602 -10.1 175.85 -36.7821 -47 175.868 -36.7623 -47 175.77 -36.7841 -16.77 175.789 -36.8007 -17 175.786 -36.7643 -17 175.798 -36.7805 -16.44 175.848 -36.848 -47.25 175.87 -36.8311 -57.03 175.833 -36.7989 -41.4 175.84 -36.8227 -46.23 175.954 -36.8088 -86.61 175.987 -36.7898 -97 176.329 -36.8123 -610.95 176.353 -36.8987 -650.26 175.811 -36.7948 -22.9 175.812 -36.8134 -22.93 175.916 -36.7959 -68.16 175.945 -36.7754 -74.75 175.887 -36.8824 -53.99 175.911 -36.8652 -65.37 175.888 -36.9061 -47.56 175.907 -36.933 -47 175.913 -36.9725 -36.58 175.943 -36.9543 -47 176.251 -36.8729 -265.77 176.271 -36.9453 -346.48 176.123 -36.9321 -99.04 176.199 -36.9185 -162.68 175.883 -36.6852 -35.7 175.911 -36.664 -47 175.889 -36.744 -47 175.905 -36.767 -55.87 173.523 -34.4909 -347.41 173.64 -34.4718 -811.47 174.705 -34.9893 -587.38 174.619 -34.9309 -595.68 174.712 -35.2305 -230.59 174.744 -35.1526 -372.78 174.555 -35.1471 -214.97 174.642 -35.1665 -263.95 174.686 -35.2902 -177.83 174.767 -35.2975 -194.81 174.16 -34.5535 -1013.33 174.438 -35.0081 -325.05 174.478 -35.0461 -307.42 174.488 -35.1395 -184.57 174.47 -35.2243 -130.81 174.511 -35.1884 -165.96 174.821 -34.8264 -847.77 174.36 -34.7099 -692.38 174.484 -34.6809 -740.88 174.397 -35.207 -98.95 174.636 -34.6726 -798.18 174.689 -34.7868 -1027.38 174.912 -35.0494 -587.61 175.078 -35.0735 -666.84 174.566 -34.7744 -764.03 174.621 -34.85 -872.79 174.519 -34.8744 -619.63 174.842 -35.1506 -449.17 174.96 -35.176 -479.88 174.846 -35.6152 -157.77 174.919 -35.5999 -183.71 174.57 -35.2117 -180.37 174.632 -35.2517 -179.38 174.023 -34.7975 -275.76 174.084 -34.727 -451.69 174.358 -35.2475 -60.36 174.364 -35.2147 -64.7 174.449 -35.2693 -107.66 173.964 -34.9782 -12.07 174.326 -34.8847 -370.24 174.324 -34.8109 -482.91 174.442 -34.7892 -615.18 174.078 -34.8636 -226.81 174.122 -34.8018 -301.19 173.943 -34.781 -273.59 173.966 -34.7096 -443.12 173.861 -34.6804 -369.32 173.905 -34.5939 -705.4 173.78 -34.6309 -384.79 173.572 -34.5687 -279.7 173.612 -34.6368 -259.98 173.785 -34.4108 -1121.57 173.885 -34.4845 -814.54 173.678 -34.5865 -392.69 173.779 -34.5304 -757.81 174.16 -34.8653 -239.23 174.659 -35.3967 -128.93 174.699 -35.3432 -158.31 174.593 -35.0888 -337.69 174.683 -35.0799 -451.49 174 -34.869 -186.88 174.043 -34.9209 -159.27 173.925 -34.8738 -127.47 173.958 -34.8275 -189.85 173.867 -34.8992 -83.62 173.909 -34.9261 -76.19 174.215 -34.8064 -366.08 174.246 -34.8809 -349.73 174.393 -35.0779 -181.86 174.43 -35.0508 -247.56 174.405 -34.8714 -457.74 174.449 -34.9474 -398.19 174.786 -35.2171 -310.47 174.863 -35.2495 -325.38 174.52 -35.2328 -152.77 174.553 -35.2771 -147.79 174.35 -35.1262 -126 174.129 -35.0738 -94.04 174.149 -35.0452 -126.4 174.309 -34.509 -1378.21 174.387 -34.6117 -926.16 174.166 -34.6711 -689.73 174.273 -34.632 -786.87 174.169 -34.7491 -506.94 174.251 -34.7313 -557.51 174.769 -34.7098 -1116.51 174.917 -34.7105 -1131.25 174.539 -35.0344 -376.5 174.615 -35.0146 -496.32 174.25 -35.1011 -114.99 174.496 -35.2626 -130.73 174.487 -35.3066 -106.62 174.013 -34.9703 -96.07 174.081 -34.9758 -154.15 174.193 -35.0478 -144.55 174.228 -35.0756 -132.54 174.365 -34.9301 -330.8 174.385 -34.9822 -250.15 174.337 -35.0105 -192.02 174.311 -35.081 -144.4 174.346 -35.0554 -183.11 174.245 -35.0393 -164.55 174.277 -34.9919 -189.36 174.164 -35.0693 -115.07 174.155 -35.0947 -87.49 173.989 -35.0037 -59.66 174.029 -35.0128 -95.41 174.116 -34.9179 -203.72 174.157 -34.9694 -189.85 174.269 -35.0739 -142.79 174.297 -35.0421 -176.08 174.181 -34.9164 -230.32 174.228 -34.9486 -208.85 174.182 -35.1153 -86.98 174.208 -35.1297 -84.24 174.388 -35.2347 -82.95 174.422 -35.2345 -102.06 174.268 -35.1457 -88.66 174.287 -35.1556 -81.1 174.216 -35.1052 -105.56 174.19 -35.0852 -115.57 174.293 -35.1331 -57.09 174.318 -35.1128 -117.08 174.203 -35.1493 -69.36 174.218 -35.1624 -61.09 174.25 -35.1571 -72.5 174.267 -35.1638 -71.62 174.282 -35.1742 -56.09 174.263 -35.1246 -10.84 174.284 -35.1042 -117.97 174.431 -35.2036 -119.85 174.457 -35.1778 -146.78 174.077 -35.0305 -113.73 174.112 -35.0479 -110.85 174.294 -34.9335 -239.07 174.332 -34.9693 -225.95 174.49 -34.9996 -394.97 174.539 -34.9662 -498.92 174.408 -35.1122 -164 174.433 -35.1395 -156.43 174.167 -35.0151 -158.23 174.211 -35.002 -183.92 174.349 -35.094 -148.02 174.377 -35.1113 -149.7 174.306 -35.1502 -86.01 174.323 -35.1395 -100.64 174.235 -35.1242 -97 174.246 -35.1414 -85.65 174.149 -35.1456 -42.41 174.16 -35.1596 -47 174.17 -35.1494 -55.17 174.186 -35.1391 -72.19 174.148 -35.1214 -58.85 174.167 -35.134 -64.87 174.25 -35.1713 -59.48 174.264 -35.1795 -53.61 174.239 -35.1871 -47 174.249 -35.184 -47.98 174.236 -35.1666 -59.55 174.238 -35.1788 -50.88 174.196 -35.1671 -55.73 174.209 -35.1752 -50.92 174.165 -35.2119 -26.14 174.17 -35.22 -18.73 174.176 -35.1638 -47.48 174.186 -35.154 -60.86 174.197 -35.1824 -43.77 174.2 -35.1927 -33.96 174.224 -35.1435 -76.73 174.235 -35.1539 -70.56 174.13 -35.2297 -0.01 174.136 -35.2414 1.09 177.183 -37.8447 -52.78 176.417 -37.5317 -75.05 176.476 -37.6415 -43.5 176.518 -37.619 -69.09 176.333 -37.5732 -47 176.869 -36.7323 -1651.8 177.047 -36.7657 -2607.45 176.973 -37.8232 -53.95 176.142 -37.4453 -42.47 176.175 -37.4618 -44.8 176.143 -37.4735 -37 176.186 -37.3369 -47.45 177.474 -37.6603 -144.3 177.516 -37.7161 -80.92 172.436 -35.9646 -1389.47 172.636 -36.0242 -1291.26 172.613 -35.8713 -1154.46 172.749 -35.8166 -815.68 172.644 -35.7357 -788.17 172.703 -35.6244 -517.88 172.941 -35.9485 -905.29 172.99 -36.0517 -1061.71 172.781 -35.9253 -1018.45 172.83 -36.0524 -1204.15 172.857 -35.5092 -395.83 172.947 -35.564 -314.12 173.598 -36.1401 -458.45 173.685 -36.1754 -173.23 173.03 -35.8559 -631.36 173.16 -35.8496 -393.73 173.035 -35.5398 -198.11 173.034 -35.608 -224.13 173.418 -35.7722 -95.53 173.436 -35.8239 -140.39 173.247 -35.5486 -76.51 173.366 -35.6142 -43.51 173.349 -35.6545 -76.38 173.374 -35.6884 -86.81 173.341 -35.5531 -13.93 173.096 -35.7674 -469.21 173.199 -35.7665 -311.2 173.149 -35.7033 -252.37 173.272 -35.6257 -96.35 173.332 -35.684 -105.86 173.342 -35.7195 -125.54 173.242 -35.5883 -96.69 173.274 -35.5674 -68.21 173.291 -35.5925 -68.8 173.319 -35.623 -70.14 173.155 -35.5368 -126.78 173.293 -35.6991 -137.2 173.294 -35.7546 -173.81 173.307 -35.5631 -46.54 173.333 -35.5854 -43.19 173.285 -35.541 -49.21 173.317 -35.5393 -25.69 173.263 -35.511 -49.04 173.303 -35.5157 -26.36 173.23 -35.7074 -192.91 173.253 -35.663 -138.19 173.177 -35.5969 -146.32 173.206 -35.5584 -106.28 173.066 -35.4873 -159.19 173.122 -35.4982 -130.27 173.363 -35.7554 -122.69 173.357 -35.7996 -156.13 173.096 -35.5275 -157.89 173.102 -35.5726 -171.26 173.193 -35.6562 -187.81 173.227 -35.6265 -138.27 173.864 -34.9418 -54.91 173.762 -34.9596 -21.02 173.791 -34.977 -13.63 173.795 -34.9475 -33.76 173.824 -34.9596 -43.55 176.446 -37.3795 -371.52 176.477 -37.4412 -249.95 176.29 -37.4685 -68.99 176.136 -37.4166 -45.54 176.076 -37.41 -34.71 176.106 -37.4096 -40.04 176.169 -37.4932 -37.68 176.196 -37.517 -38.59 176.451 -37.5725 -62.02 176.478 -37.6044 -59.17 176.337 -37.6355 -26.83 176.371 -37.6677 -17 176.126 -37.3881 -47 176.15 -37.3638 -48.25 176.272 -37.3769 -81.61 176.294 -37.4229 -83.41 176.288 -37.6374 -24.49 176.31 -37.6052 -38.29 176.385 -37.6267 -21.51 176.435 -37.6134 -7.77 176.108 -37.5529 -16.5 176.067 -37.5086 -15.47 176.087 -37.5316 -15.51 176.264 -37.603 -31.43 176.287 -37.5726 -43.38 176.004 -37.3774 -25.47 176.092 -37.3847 -43.33 176.112 -37.3585 -50.14 176.007 -37.4075 -20.49 176.043 -37.4145 -26.83 176.068 -37.4335 -28.28 176.012 -37.4701 -1.23 176.027 -37.4838 -3.96 175.973 -37.3674 -17 175.976 -37.3919 -16.61 176.116 -37.4579 -34.94 176.161 -37.3959 -47 176.072 -37.3548 -44.99 176.051 -37.4855 -14.8 176.09 -37.4268 -33.65 176.113 -37.434 -37.39 176.041 -37.4421 -20.75 176.035 -37.4652 -13.68 176.065 -37.4608 -22.09 176.091 -37.4467 -30.25 176.016 -37.4503 -8.9 176.021 -37.4295 -19.05 175.979 -37.4149 -10.23 175.996 -37.4332 -11.73 176.22 -37.5436 -37.34 176.242 -37.5721 -36.24 176.144 -37.5481 -22.57 176.159 -37.5217 -30.42 176.123 -37.5267 -23.92 176.135 -37.5005 -30.81 176.181 -37.5452 -29.41 176.2 -37.5705 -28.63 176.216 -37.5989 -25.94 176.164 -37.5694 -20.69 176.151 -37.6078 -2.88 176.175 -37.593 -18.22 176.129 -37.5727 -16.13 176.147 -37.5882 -13.49 176.261 -37.541 -44.84 176.306 -37.5381 -51.43 176.101 -37.5056 -23.26 176.112 -37.4818 -30.08 176.235 -37.5118 -45.96 176.277 -37.5059 -54.23 176.182 -37.3746 -47 176.221 -37.3729 -49.42 176.244 -37.4119 -73.01 176.066 -37.319 -50.66 176.097 -37.3315 -53.71 176.054 -37.284 -58.47 176.081 -37.2625 -74.28 176.034 -37.3651 -34.78 176.04 -37.3381 -42 176.03 -37.3904 -28.71 176.059 -37.3869 -35.63 175.983 -37.1947 -52.39 176.006 -37.1653 -62.53 176.321 -37.3863 -122.44 176.372 -37.3775 -211.66 176.346 -37.4156 -117.91 176.339 -37.4546 -86.96 176.207 -37.4847 -47 176.247 -37.4772 -55.84 176.215 -37.4451 -57.55 176.258 -37.4453 -68.33 176.171 -37.4279 -47 176.199 -37.4047 -47 176.082 -37.4847 -23.25 176.093 -37.4665 -28.53 176.594 -37.7775 -20.7 176.645 -37.792 -26.56 176.564 -37.6881 -46.12 176.625 -37.6859 -81.63 176.551 -37.5891 -92.72 176.606 -37.5761 -179.46 176.727 -37.5199 -549.08 176.796 -37.4736 -688.31 177.127 -37.6818 -186.81 177.188 -37.7116 -170.01 177.239 -37.7988 -70.82 177.269 -37.7636 -85.33 177.146 -37.7388 -104.98 177.154 -37.782 -82.81 177.425 -37.922 -16.56 177.455 -37.8879 -22.2 177.067 -37.9208 -19.28 177.199 -37.9704 -8.79 177.231 -37.968 -11.41 177.314 -37.9219 -25.88 177.205 -37.6636 -339.4 177.292 -37.6553 -214.92 177.042 -37.6912 -141.2 177.087 -37.7339 -135.18 177.069 -37.7794 -92.22 177.113 -37.7672 -96.93 177.11 -37.8027 -79.18 177.15 -37.8217 -66.56 177.105 -37.9051 -32.38 177.174 -37.8817 -41.59 177.213 -37.8682 -44.87 177.253 -37.8588 -47.42 177.205 -37.8995 -34.43 177.065 -37.8264 -61.88 177.11 -37.8394 -59.81 177.082 -37.8571 -47.25 177.075 -37.8854 -34.88 177.319 -37.8591 -45.05 177.345 -37.8868 -33.65 177.264 -37.9644 -13.12 177.295 -37.9537 -17.67 177.109 -37.8719 -44.63 177.144 -37.8573 -50.17 177.21 -37.9455 -19.71 177.015 -37.843 -47.87 177.047 -37.8636 -40.86 177.286 -37.8669 -43.85 177.3 -37.8892 -36.71 177.224 -37.8338 -57.43 177.258 -37.8271 -59.38 177.228 -37.9189 -29.09 177.247 -37.9417 -22.43 177.012 -37.8748 -33.62 177.035 -37.8971 -26.77 177.056 -37.9519 -7.72 177.087 -37.9462 -16.49 177.107 -37.961 -9.85 177.125 -37.9697 -5.22 177.098 -37.9274 -23.3 177.111 -37.9412 -19.42 177.115 -37.9249 -25.55 177.13 -37.9356 -21.66 177.127 -37.9533 -14.3 177.145 -37.9472 -17.42 177.142 -37.9652 -8.79 177.161 -37.9588 -13.22 177.136 -37.9156 -29.13 177.147 -37.9319 -22.84 177.16 -37.9214 -27.62 177.179 -37.9094 -32.19 177.155 -37.9749 -3.42 177.174 -37.973 -5.62 177.166 -37.9398 -21.45 177.178 -37.9265 -26.36 177.198 -37.9233 -26.89 177.268 -37.9129 -30.72 177.277 -37.9391 -22.48 177.24 -37.8905 -38.36 177.269 -37.8836 -39.43 177.137 -37.8887 -39.18 177.157 -37.9035 -33.33 177.187 -37.9383 -22.35 177.183 -37.9543 -16.82 170.984 -45.7702 -117.53 170.917 -45.8283 -97 170.95 -45.8013 -103.02 170.796 -45.8768 -64.49 171.079 -45.9104 -590.97 171.023 -45.7295 -289.98 171.1 -45.6949 -237.84 170.969 -45.6978 -85.8 171.021 -45.6705 -221.46 170.959 -45.6558 -78.17 170.901 -45.5698 -39.27 170.928 -45.6118 -47 170.832 -45.5439 -17.55 170.854 -45.5156 -21.76 170.871 -45.5462 -29.16 170.906 -45.5313 -34.36 170.84 -45.6211 -34.9 170.873 -45.5998 -38.45 170.805 -45.5881 -30.15 170.807 -45.6096 -30.56 170.857 -45.7933 -70.19 170.9 -45.7972 -96.37 170.881 -45.7682 -74.52 170.821 -45.7017 -30.43 170.863 -45.7124 -44.65 170.7 -45.7183 -17.64 170.737 -45.7293 -12.45 170.76 -45.7098 -22.3 170.65 -45.6943 -9.77 170.663 -45.7144 -15.85 170.761 -45.6385 -25.98 170.779 -45.6194 -27 170.856 -45.745 -52.84 170.772 -45.8607 -30.65 170.836 -45.868 -80.56 170.88 -45.8519 -96.85 170.793 -45.719 -24.43 170.825 -45.7293 -38.4 170.794 -45.7454 -24.58 170.726 -45.7019 -18.56 170.751 -45.6849 -20.52 170.936 -45.8672 -120.35 170.876 -45.888 -130.69 170.921 -45.9185 -320.61 170.805 -45.8533 -57.74 170.838 -45.8398 -71.01 170.825 -45.7524 -43.02 170.841 -45.77 -55.84 170.789 -45.7859 -17 170.82 -45.7901 -39.74 170.778 -45.767 -22.41 170.808 -45.769 -26.52 170.78 -45.8435 -22.28 170.803 -45.8312 -46.67 170.964 -45.8327 -157.93 171.006 -45.8104 -174.16 170.901 -45.706 -58.88 170.902 -45.7359 -71.31 170.761 -45.7487 -20.03 170.77 -45.7308 -21.64 170.703 -46.0249 -77.5 171.009 -45.857 -322.79 170.986 -45.9019 -197 170.823 -45.8984 -92.27 170.855 -45.9277 -154.9 170.691 -45.9451 -52.6 170.777 -45.9007 -64.05 170.797 -45.9281 -87.1 170.746 -45.8971 -47.41 170.747 -45.9222 -58.98 170.687 -45.9077 -21.37 170.719 -45.9036 -30.08 170.892 -46.0797 -190.12 170.99 -46.1007 -615.89 170.93 -45.7124 -70.64 170.956 -45.7343 -83.8 170.878 -45.6333 -40.04 170.908 -45.6555 -44.94 170.85 -45.6807 -33.99 170.886 -45.6842 -44.62 170.833 -45.5926 -33.5 170.856 -45.5701 -27.65 170.679 -45.9279 -42.56 170.707 -45.9256 -48.49 170.629 -45.9731 -50.45 170.673 -45.9632 -56.03 170.722 -45.9435 -57 170.758 -45.9567 -77.99 170.825 -46.0046 -133.25 170.818 -46.0541 -134.65 170.64 -46.0174 -62.71 170.681 -45.9893 -65.74 170.847 -46.2123 -546.26 170.911 -46.1465 -442.87 170.781 -45.9871 -97.76 170.767 -46.0216 -94.29 170.709 -45.965 -62.39 170.732 -45.9909 -75.09 170.766 -45.8118 -10.25 170.772 -45.8271 -16.74 170.719 -45.6789 -21.94 170.737 -45.6604 -24.02 171.171 -45.7884 -769.52 171.198 -45.8581 -762.26 171.087 -45.8234 -197 171.04 -45.7782 -197 171.101 -45.7574 -334.58 170.843 -45.652 -32.8 170.873 -45.6613 -37.71 170.876 -46.0276 -175.08 170.952 -46.0256 -197.22 171.105 -46.1204 -878.35 171.209 -46.0682 -950.36 176.831 -37.8469 -17 176.88 -37.8227 -17 176.498 -37.4909 -182.46 176.548 -37.4633 -349.17 177.476 -37.572 -456.63 176.827 -37.7904 -34.34 176.887 -37.778 -48.69 176.754 -37.7856 -44.38 176.787 -37.8248 -22.9 176.744 -37.7275 -71.23 176.796 -37.7439 -64.43 177.194 -37.3314 -1209.94 177.283 -37.393 -1034.18 176.744 -37.577 -440.68 176.804 -37.55 -545.2 176.765 -36.8299 -1497 176.896 -36.8881 -1449.51 176.296 -37.1367 -424.93 176.361 -37.1773 -497.21 176.596 -37.3143 -743.8 176.684 -37.3661 -573.24 177.745 -37.3355 -1276.27 177.816 -37.2841 -1499.4 177.297 -37.3137 -1280.71 177.394 -37.2737 -1624.52 176.99 -37.3058 -937.21 177.073 -37.3776 -549.92 176.88 -37.4207 -575.18 176.96 -37.3763 -729.48 176.52 -37.2417 -747 176.606 -37.195 -747 177.368 -37.3577 -1404.87 177.381 -37.4354 -1438 177.102 -37.4704 -343.16 177.183 -37.4318 -616.38 177.224 -37.6066 -651.32 177.29 -37.5707 -743.65 176.874 -37.5935 -407.6 176.923 -37.634 -195.98 176.648 -37.6257 -139.13 176.682 -37.6628 -169.26 175.102 -36.5993 -42.9 175.125 -36.6198 -42.31 175.077 -36.532 -44 175.087 -36.4952 -44 175.399 -37.006 -13.27 175.44 -37.0185 -7.97 175.357 -37.0578 -7.8 175.394 -37.0405 -9.31 175.433 -37.0655 -5.38 175.398 -37.1412 -1 175.445 -37.141 -0.13 175.229 -36.6949 -35.22 175.262 -36.7188 -34.66 174.977 -36.5971 -40.08 175.008 -36.6131 -39.39 175.389 -37.0789 -6.36 175.42 -37.1057 -2.9 175.304 -36.641 -33.91 175.352 -36.6422 -25.43 175.348 -36.7317 -33.47 175.383 -36.7247 -24.82 175.313 -36.7853 -29.21 175.34 -36.7632 -32.01 174.997 -36.6545 -30.36 175.032 -36.6435 -36.02 175.032 -36.585 -41.5 175.069 -36.573 -42.14 175.221 -36.5235 -43.95 175.252 -36.5435 -42.29 174.852 -36.7411 -15.07 174.874 -36.7256 -17.07 176.042 -36.586 -151.81 176.099 -36.5654 -205.67 175.54 -36.5095 -47 175.578 -36.5146 -47 175.634 -36.6271 -36.53 175.688 -36.636 -32.99 175.879 -36.8563 -57.43 175.901 -36.8397 -67.29 176.071 -36.965 -10.16 176.112 -36.9943 -78.98 175.347 -37.0933 -5.07 175.381 -37.1108 -4.71 175.287 -36.6133 -36.72 175.326 -36.6064 -32.43 175.136 -36.5971 -43.3 175.169 -36.5829 -42.06 175.322 -36.6711 -34.84 175.312 -36.7057 -34.06 175.354 -35.9632 -106.18 175.38 -36.0085 -84.36 175.943 -36.2442 -156.63 175.956 -36.3128 -168.97 175.649 -36.662 -28.66 175.696 -36.6713 -22.7 165.9 -46.7354 -247.7 165.943 -46.6287 -197 165.304 -46.2429 -4466.68 165.309 -46.3847 -4247.62 165.081 -46.6351 -4041.12 166.276 -47.2306 -2122.5 166.464 -47.3265 -1699.07 166.274 -47.5492 -2464.41 166.32 -47.691 -1882.67 165.505 -47.9837 -2365.74 165.573 -47.7801 -2660.39 165.882 -47.2096 -2096.98 165.858 -47.3743 -2211.37 165.328 -46.8571 -1652.65 164.664 -48.0665 -4107.68 163.624 -46.5168 -4319.39 164.076 -46.5671 -4318.76 166.048 -48.0298 -2406 166.273 -48.0649 -498.77 165.278 -48.4802 -2589.21 165.554 -48.4043 -2694.58 165.439 -47.3548 -3140.71 164.273 -46.0845 -3768.74 164.63 -46.1553 -4153.39 164.319 -45.1634 -4714.37 164.662 -45.0699 -4665.86 163.709 -45.4066 -4601.78 163.543 -45.7149 -4540.03 163.414 -45.9768 -4542.51 163.508 -46.2323 -4412.21 164.481 -46.5507 -4386.73 163.882 -47.0473 -4416.35 165.092 -46.8128 -4304.15 165.259 -46.7307 -2416.38 163.971 -47.8389 -3963.52 163.912 -48.1617 -4085.57 166.482 -47.1847 -1682.49 166.636 -47.2602 -1314.02 166.083 -47.1894 -2192.32 166.075 -47.3151 -2352.62 165.703 -46.9922 -541.18 165.827 -47.0806 -1238.62 166.037 -47.8361 -2668.99 166.212 -47.7833 -2122.64 166.019 -48.2111 -2295.93 166.179 -48.1527 -598.81 165.371 -47.6596 -3043.81 164.311 -47.9845 -5214.98 164.613 -47.8325 -4709.95 164.789 -46.5773 -4666.71 164.84 -46.7538 -4683.17 164.085 -47.5725 -3829.37 164.324 -47.7251 -4302.67 164.487 -47.078 -4441.28 164.591 -48.5134 -3892.92 164.715 -48.6731 -2370.78 163.369 -46.7366 -4284.05 163.41 -47.0004 -4404.96 164.372 -47.5289 -4294.71 164.538 -47.3842 -4403.15 164.943 -47.5659 -2866.18 165.114 -47.7357 -2416.75 164.991 -48.1075 -1913.31 165.287 -48.136 -1818.31 165.195 -47.9415 -1833.65 165.351 -47.8201 -2298.57 165.196 -47.5477 -3648.37 165.419 -47.504 -3126.04 165.073 -47.412 -2563.4 165.272 -47.4219 -2916.94 164.701 -47.2048 -5037.45 164.812 -47.3977 -5086.01 165.235 -47.2959 -1801.14 165.986 -46.8675 -463.57 166.059 -46.7755 -450.91 165.657 -47.1307 -1149.48 165.654 -47.2809 -2357.55 164.839 -47.7248 -2816.91 164.902 -47.9005 -2236.19 164.259 -46.9507 -4407.86 164.343 -46.7412 -4381.28 165.444 -46.3563 -3494.48 165.552 -46.2455 -3151.86 164.88 -45.9835 -3677.98 164.277 -45.8281 -4508.94 164.57 -45.9268 -4224.76 164.79 -45.7979 -4353.54 163.994 -45.6513 -4534.93 164.155 -45.3843 -4752.53 163.939 -47.3496 -4488.91 164.27 -47.3737 -3914.59 164.994 -46.4463 -4742.47 165.163 -46.3587 -4966.52 164.608 -46.7 -4372.33 164.59 -46.8775 -4557.21 164.212 -47.1707 -4512.05 164.441 -47.237 -4315.76 165.436 -47.1982 -2070.09 165.436 -47.0213 -1327.92 164.719 -47.0327 -4837.76 164.888 -46.9218 -5213.22 164.938 -47.083 -4881.33 164.991 -47.2522 -3649.31 164.394 -45.5895 -4724.97 164.566 -45.7429 -4452.36 163.942 -48.505 -4613.83 164.284 -48.5653 -5578.22 165.109 -48.3063 -2045.32 165.355 -48.3055 -2480.1 163.742 -46.7777 -4167.08 164.056 -46.8129 -4304.23 165.149 -46.9708 -2371.55 165.197 -47.1361 -2068.65 174.817 -41.0694 -22.4 174.799 -41.0592 -62.15 174.819 -41.0529 -42.85 174.833 -41.0499 -22.27 174.843 -41.0404 -15.25 168.212 -46.9664 -23.73 168.238 -46.9666 -28.53 174.817 -36.3146 -28.56 174.848 -36.3072 -40.13 174.844 -36.3384 -32.84 175.132 -35.9307 -45.79 175.122 -35.973 -51.72 175.155 -35.9668 -65.05 175.165 -35.9211 -55.33 175.191 -35.932 -79.98 175.066 -35.9192 -89.17 175.105 -35.9199 -15.13 175.086 -35.9493 -83.7 175.117 -35.9436 -65.8 175.02 -36.1101 -61.33 175.072 -36.1292 -62.59 175.113 -36.0652 -75.18 175.165 -36.0463 -78.66 174.972 -36.0859 -64.1 175.017 -36.0645 -68.92 175.117 -36.0179 -60.49 175.162 -35.9987 -77.95 175.159 -36.1009 -72.92 175.209 -36.1181 -73.74 175.106 -36.1048 -68.09 175.12 -36.1397 -59.95 168.374 -46.6376 -7 168.393 -46.6328 -7 168.452 -46.6363 -4.26 168.484 -46.6402 -7.27 168.39 -46.6898 -13.88 168.419 -46.6729 -16.2 168.22 -46.6635 -27 168.254 -46.6409 -27 168.243 -46.6073 -27 168.285 -46.6162 -24.72 168.381 -46.6215 -7 168.379 -46.609 -7 168.354 -46.6604 -20.24 168.392 -46.6614 -10.13 168.582 -46.628 -7.52 168.637 -46.6261 -11.42 168.196 -46.5943 -27 168.202 -46.6325 -27 168.451 -46.7333 -17 168.484 -46.6689 -9.01 168.502 -46.6897 -14.01 168.543 -46.7002 -17 168.588 -46.7257 -11.74 168.588 -46.7585 -19.8 168.636 -46.7498 -21.56 168.568 -46.8114 -33.88 168.586 -46.8433 -47 168.607 -46.7837 -26.93 168.627 -46.8184 -43.36 168.42 -46.7764 -17 168.453 -46.7607 -17 168.472 -46.8206 -7.74 168.415 -46.7181 -17 168.412 -46.7464 -17 168.369 -46.7245 -21.32 168.363 -46.7626 -20.96 168.423 -46.8307 -17 168.434 -46.8032 -11.72 168.336 -46.4854 2 168.329 -46.4971 1.32 168.315 -46.4641 1.96 168.322 -46.4745 1.39 gerris-snapshot-131206/doc/examples/tides/ellipses.gfv0000644000175100017510000000067212250371171017706 00000000000000# GfsView 3D View { tx = -0.11839 ty = 0.0263953 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 2.92707 r = 1 g = 1 b = 1 res = 1 lc = 0.001 reactivity = 0.1 } Ellipses { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } sqrt(AU0*AU0+AV0*AV0+BU0*BU0+BV0*BV0) { amin = 0 min = 0 amax = 0 max = 2 cmap = Jet } AU0 AV0 BU0 BV0 { scale = 0.00343 use_scalar = 1 } gerris-snapshot-131206/doc/examples/atomisation.sh0000755000175100017510000000003612250371664017141 00000000000000python -u test.py atomisation gerris-snapshot-131206/doc/examples/dam/0000755000175100017510000000000012250371675015077 500000000000000gerris-snapshot-131206/doc/examples/dam/dam.plot0000644000175100017510000001103312250371171016445 00000000000000#!/usr/local/bin/gnuplot -persist # # # G N U P L O T # Version 4.2 patchlevel 2 # last modified 31 Aug 2007 # System: Linux 2.6.22-16-386 # # Copyright (C) 1986 - 1993, 1998, 2004, 2007 # Thomas Williams, Colin Kelley and many others # # Type `help` to access the on-line reference manual. # The gnuplot FAQ is available from http://www.gnuplot.info/faq/ # # Send bug reports and suggestions to # # set terminal x11 # set output unset clip points set clip one unset clip two set bar 1.000000 set border 31 front linetype -1 linewidth 1.000 set xdata set ydata set zdata set x2data set y2data set timefmt x "%d/%m/%y,%H:%M" set timefmt y "%d/%m/%y,%H:%M" set timefmt z "%d/%m/%y,%H:%M" set timefmt x2 "%d/%m/%y,%H:%M" set timefmt y2 "%d/%m/%y,%H:%M" set timefmt cb "%d/%m/%y,%H:%M" set boxwidth set style fill empty border set style rectangle back fc lt -3 fillstyle solid 1.00 border -1 set dummy x,y set format x "% g" set format y "% g" set format x2 "% g" set format y2 "% g" set format z "% g" set format cb "% g" set angles radians unset grid set key title "" unset key unset label unset arrow set style increment default unset style line unset style arrow set style histogram clustered gap 2 title offset character 0, 0, 0 unset logscale set offsets 0, 0, 0, 0 set pointsize 1 set encoding default unset polar unset parametric unset decimalsign set view 60, 30, 1, 1 set samples 100, 100 set isosamples 10, 10 set surface unset contour set clabel '%8.3g' set mapping cartesian set datafile separator whitespace unset hidden3d set cntrparam order 4 set cntrparam linear set cntrparam levels auto 5 set cntrparam points 5 set size ratio -1 1,1 set origin 0,0 set style data points set style function lines set xzeroaxis linetype -2 linewidth 1.000 set yzeroaxis linetype -2 linewidth 1.000 set zzeroaxis linetype -2 linewidth 1.000 set x2zeroaxis linetype -2 linewidth 1.000 set y2zeroaxis linetype -2 linewidth 1.000 set ticslevel 0.5 set mxtics default set mytics default set mztics default set mx2tics default set my2tics default set mcbtics default set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 set xtics autofreq set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 set ytics autofreq set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 set ztics autofreq set nox2tics set noy2tics set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 set cbtics autofreq set title "" set title offset character 0, 0, 0 font "" norotate set timestamp bottom set timestamp "" set timestamp offset character 0, 0, 0 font "" norotate set rrange [ * : * ] noreverse nowriteback # (currently [0.00000:10.0000] ) set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) set urange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) set vrange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) set xlabel "x" set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate set x2label "" set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate set xrange [ * : * ] noreverse nowriteback # (currently [-2.77390:0.697413] ) set x2range [ * : * ] noreverse nowriteback # (currently [-2.77390:0.697413] ) set ylabel "z" set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by 90 set y2label "" set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by 90 set yrange [ * : * ] noreverse nowriteback # (currently [-1.40832:2.01706] ) set y2range [ * : * ] noreverse nowriteback # (currently [-1.25079:2.02955] ) set zlabel "" set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) set cblabel "" set cblabel offset character 0, 0, 0 font "" textcolor lt -1 norotate set cbrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) set zero 1e-08 set lmargin -1 set bmargin -1 set rmargin -1 set tmargin -1 set locale "C" set pm3d explicit at s set pm3d scansautomatic set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB set palette rgbformulae 7, 5, 15 set colorbox default set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 bdefault set loadpath set fontpath set fit noerrorvariables # GNUTERM = "x11" # plot [-4.:4.]'sim-9.txt' u 1:8:($4+$8) w filledcu lc 3, 'sim-0.txt' u 1:8 w l lw 2 lc 1 # EOF gerris-snapshot-131206/doc/examples/dam/dam.gfs0000644000175100017510000000534212250371171016254 00000000000000# Title: Dam break on complex topography # # Description: # # An example similar to that # \htmladdnormallinkfoot{presented}{http://www.amath.washington.edu/~rjl/catalina/leveque1.pdf} # by Randall J. LeVeque illustrating the solution of the # \htmladdnormallinkfoot{Saint-Venant}{http://en.wikipedia.org/wiki/Shallow\_water\_equations} # (or shallow-water) equations with complex topography, wetting and # drying, shocks and hydrostatic equilibrium. # # \begin{figure}[htbp] # \caption{Topography (red) and animation of the water level (blue).} # \begin{rawhtml} #
# #
# \end{rawhtml} # \end{figure} # # Author: St\'ephane Popinet # Command: gerris2D dam.gfs # Version: 1.3.1 # Required files: dam.plot # Running time: 2 minutes # Generated files: dam.gif # # Use the GfsRiver Saint-Venant solver 1 0 GfsRiver GfsBox GfsGEdge {} { PhysicalParams { L = 8. } # Define a 1D domain using cell masking RefineSurface 9 (y - 8.*(0.5 - 1./512.)) InitMask {} (y < 8.*(0.5 - 1./512.)) # Set the topography Zb and the initial water surface elevation P Init {} { Zb = x*x/8.+cos(M_PI*x)/2. P = { double p = x > 0. ? 0.35 : x < -2. ? 1.9 : -1.; return MAX (0., p - Zb); } } PhysicalParams { g = 1. } # Use a first-order scheme rather than the default second-order # minmod limiter. This is just to add some numerical damping. AdvectionParams { # gradient = gfs_center_minmod_gradient gradient = none } Time { end = 40 } OutputProgress { istep = 10 } stderr OutputScalarSum { istep = 10 } ke { v = (P > 0. ? U*U/P : 0.) } OutputScalarSum { istep = 10 } vol { v = P } OutputScalarNorm { istep = 10 } u { v = (P > 0. ? U/P : 0.) } # use gfsplot/gnuplot for online visualisation and generation of figures OutputSimulation { step = 0.3 } { gfsplot " load 'dam.plot' set title sprintf('t = %4.1f', (t)) plot [-4.:4.]'-' u (x):(Zb):(H) w filledcu lc 3, \ '-' u (x):(Zb) w l lw 4 lc 1 lt 1 set term pngcairo size 800,600 set output sprintf('sim-%04.1f.png', (t)) replot set term wxt noraise " } { format = text } # Combine all the gif images into a gif animation using gifsicle EventScript { start = end } { echo "\rcreating animation... " > /dev/stderr sleep 10 # give a chance to gnuplot to catch up for f in sim-*.png; do convert $f -trim +repage -bordercolor white \ -border 10 -resize 640x282! `basename $f .png`.gif && rm -f $f done gifsicle --colors 256 --optimize --delay 12 --loopcount=0 sim-*.gif > dam.gif && \ rm -f sim-*.gif } } GfsBox { left = Boundary right = Boundary } gerris-snapshot-131206/doc/examples/gfs-highlight.in0000644000175100017510000000366312250371171017331 00000000000000#!/bin/sh wiki="http:\/\/gfs.sf.net\/wiki\/index.php" title="" css="darcs.css" path="@prefix@/share/gerris" usage() { cat < output.html Syntax highlighting/hypertext linking of Gerris simulation files. Options: [--title=TITLE] sets the page title [--css=FILE] sets the CSS stylesheet filename [--comments] include comment block at the start [--bold] use bold instead of links [--help] displays this message and exits EOF exit $1 } comment=0 bold=0 while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --title=*) title=$optarg ;; --css=*) css=$optarg ;; --comment) comment=1 ;; --bold) bold=1 ;; --help) usage 0 1>&2 ;; *) usage 0 1>&2 ;; esac shift done if test "x$title" = "x"; then : cat < EOF else cat < $title EOF fi file=`mktemp gfs-highlight.XXXXXX` ln -s -f $path/gfs.lang $file awk -v comment=$comment 'BEGIN{ infile=comment } { if ($2 == "Generated" && $3 == "files:") { infile = 1; while ($1 == "#") getline; print $0; } else if (infile) print $0; else if ($5 == "GfsGEdge") { infile = 1; print $0; } }' | \ source-highlight --lang-def=$file --out-format=html-css | \ ( if test $bold = "1"; then sed "s/\"classname\">\(Gfs\)\{0,1\}\([a-zA-Z0-9_]*\)<\/span>/"classname">\1\2<\/b><\/span>/g" else sed "s/\"classname\">\(Gfs\)\{0,1\}\([a-zA-Z0-9_]*\)<\/span>/"classname">\1\2<\/a><\/span>/g" fi ) rm -f $file if test "x$title" = "x"; then : cat < EOF else cat < EOF fi gerris-snapshot-131206/doc/examples/kaltura.sh0000644000175100017510000000060312250371171016243 00000000000000# insert the Kaltura.org javascript for HTML5 video # http://www.kaltura.org/project/HTML5_Video_Media_JavaScript_Library f=`echo $1 | sed 's/\.html$//'` if grep -q "" $f.html; then tmp=`mktemp /tmp/kaltura.XXXXXXXXXX` sed 's/<\/HEAD>/